mode716.mac

来自「linux下的任天堂模拟器代码。供大家参考。」· MAC 代码 · 共 1,921 行 · 第 1/3 页

MAC
1,921
字号
    ; get tile data offset into edi    mov ebx,[mode7ypos+1]    mov eax,[mode7xpos+1]    shl ebx,5    shr eax,3    and ebx,07FF8h    shl al,1    mov bl,al    mov edi,[vram]    xor ch,ch    mov [mmode7ptr],ebx    mov cl,[edi+ebx]    shl ecx,7    add edi,ecx    jmp %%nextvalr    ALIGN16%%nodr2    add esi,%3    dec dword[ngwleftb]    jz near %%fin2%%nextvalr    test byte[mode7xrpos+1],0F8h    jnz near %%rposoffxr%%nextposxr    test byte[mode7yrpos+1],0F8h    jnz near %%rposoffyr%%nextposyr    mov cl,[mode7yrpos+1]    mov ch,[mode7xrpos+1]    mov edx,[mode7xadder]    add dword[mode7xrpos],edx    mov edx,[mode7yadder]    sub dword[mode7yrpos],edx    xor edx,edx    mov dl,[mode7tab+ecx]    mov dl,[edi+edx]    %1    dec dword[ngwleftb]    jnz near %%nextvalr%%fin2    cmp dword[ngwleft],0    je %%notskipvalues4    call ProcessMode7ngwinB16b    cmp byte[switchtorep3],0    jne near %%tilerep3    cmp dword[ngwleftb],0    jne near %%nextvalr%%notskipvalues4    jmp %%finishmode7%%rposoffxr    mov al,[mmode7xinc]    mov edi,[vram]    add [mmode7ptr],al    mov cl,[mmode7xincc]    cmp byte[mmode7ptr],cl    je %%roff%%roffxretb    mov ebx,[mmode7ptr]    xor ecx,ecx    mov cl,[edi+ebx]    mov eax,[mmode7xadd2]    shl ecx,7    sub [mode7xrpos],eax    add edi,ecx    jmp %%nextvalr%%rposoffyr    mov al,[mmode7yinc]    mov edi,[vram]    sub [mmode7ptr+1],al    js %%roff%%roffyretb    mov ebx,[mmode7ptr]    xor ecx,ecx    mov cl,[edi+ebx]    mov eax,[mmode7yadd2]    shl ecx,7    add [mode7yrpos],eax    add edi,ecx    jmp %%nextposxr%%roff    test byte[mode7set],40h    jnz %%tilerep3    jmp %%finishmode7%%tilerep3    and byte[mode7yrpos+1],07h    and byte[mode7xrpos+1],07h    mov cl,[mode7yrpos+1]    mov eax,[mode7xadder]    mov ch,[mode7xrpos+1]    add [mode7xrpos],eax    mov dl,[mode7tab+ecx]    mov eax,[mode7yadder]    mov dl,[vrama+edx]    sub [mode7yrpos],eax    %1    dec dword[ngwleftb]    jnz near %%tilerep3    mov [mode7xrpos],eax    cmp dword[ngwleft],0    je %%notskipvalues5    call ProcessMode7ngwinB16b    cmp dword[ngwleftb],0    jne near %%tilerep3%%notskipvalues5    jmp %%finishmode7%endmacro%macro Mode7Processngw216b 4    mov eax,[ngcwinptr]    mov eax,[eax]    mov [ngwleft],eax    mov dword[mtemp],256    test byte[mode7set],80h    jnz near %%norep2start    mov eax,[mmode7xpos]    and eax,7FFh    mov [mmode7xrpos],eax    mov eax,[mmode7ypos]    and eax,7FFh    mov [mmode7yrpos],eax    ; get tile data offset into edi    mov ebx,[mmode7ypos+1]    mov eax,[mmode7xpos+1]    shl ebx,5    shr eax,3    and ebx,07FF8h    shl al,1    mov bl,al    mov edi,[vram]    xor ch,ch    mov [mmode7ptr],ebx    mov cl,[edi+ebx]    shl ecx,7    add edi,ecx    mov eax,[mmode7xrpos]    mov ebx,[mmode7ptr]    cmp dword[ngwleft],0    jne %%nextvalwb    jmp %%nextvalwc%%nextvalw    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%nextvalwb    test ah,08h    jnz near %%rposoffxw%%nextposxw    test byte[mmode7yrpos+1],08h    jnz near %%rposoffyw%%nextposyw    mov ch,ah    mov cl,[mmode7yrpos+1]    mov edx,[mmode7yadder]    sub dword[mmode7yrpos],edx    xor edx,edx    mov dl,[mode7tab+ecx]    add eax,[mmode7xadder]    mov dl,[edi+edx]    %1    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalwb    jmp %%nextvalwc%%rposoffxw    add bl,[mmode7xinc]    xor ecx,ecx    mov cl,[vrama+ebx]    shl ecx,7    sub eax,[mmode7xadd2]    lea edi,[ecx+vrama]    jmp %%nextposxw%%rposoffyw    sub bh,[mmode7yinc]    and ebx,07FFFh    xor ecx,ecx    mov cl,[vrama+ebx]    mov edx,[mmode7yadd2]    shl ecx,7    add dword[mmode7yrpos],edx    lea edi,[ecx+vrama]    jmp %%nextposyw%%nextvalwc    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%nextval    test ah,08h    jnz near %%rposoffx%%nextposx    test byte[mmode7yrpos+1],08h    jnz near %%rposoffy%%nextposy    mov ch,ah    mov cl,[mmode7yrpos+1]    mov edx,[mmode7yadder]    sub dword[mmode7yrpos],edx    xor edx,edx    mov dl,[mode7tab+ecx]    add eax,[mmode7xadder]    mov dl,[edi+edx]    %4    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextval    jmp %%nextvalw%%rposoffx    add bl,[mmode7xinc]    xor ecx,ecx    mov cl,[vrama+ebx]    shl ecx,7    sub eax,[mmode7xadd2]    lea edi,[ecx+vrama]    jmp %%nextposx%%rposoffy    sub bh,[mmode7yinc]    and ebx,07FFFh    xor ecx,ecx    mov cl,[vrama+ebx]    mov edx,[mmode7yadd2]    shl ecx,7    add dword[mmode7yrpos],edx    lea edi,[ecx+vrama]    jmp %%nextposy%%finishmode7    xor eax,eax    mov dh,[curmosaicsz]    cmp dh,1    jne near %2    ret; *******************************************%%norep2start    cmp dword[ngwleft],0    jne %%firstsetwb    jmp %%firstsetww%%firstsetw    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%firstsetwb%%norep2    test byte[mode7set],40h    jnz %%tilerep2%%nextvalb2    cmp byte[mmode7ypos+2],3    ja %%offscr2    cmp byte[mmode7xpos+2],3    jbe near %%offscr3%%offscr2    mov eax,[mmode7xadder]    mov ebx,[mmode7yadder]    add [mmode7xpos],eax    sub [mmode7ypos],ebx    add esi,%3    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalb2    jmp %%firstsetww%%tilerep2%%nextvalb3    cmp byte[mmode7ypos+2],3    ja %%offscr2b    cmp byte[mmode7xpos+2],3    jbe near %%offscr3%%offscr2b    mov ch,[mmode7xpos+1]    mov eax,[mmode7xadder]    mov cl,[mmode7ypos+1]    mov ebx,[mmode7yadder]    mov dl,[mode7tab+ecx]    add [mmode7xpos],eax    mov dl,[vrama+edx]    sub [mmode7ypos],ebx    %1    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalb3    jmp %%firstsetw%%offscr3    mov eax,[mmode7xpos]    and eax,7FFh    mov [mmode7xrpos],eax    mov eax,[mmode7ypos]    and eax,7FFh    mov [mmode7yrpos],eax    ; get tile data offset into edi    mov ebx,[mmode7ypos+1]    mov eax,[mmode7xpos+1]    shl ebx,5    shr eax,3    and ebx,07FF8h    shl al,1    mov bl,al    mov edi,[vram]    xor ch,ch    mov [mmode7ptr],ebx    mov cl,[edi+ebx]    shl ecx,7    add edi,ecx    jmp %%nextvalr%%nodr2    add esi,%3    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz %%nextvalr%%secondsetw    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%nextvalr    test byte[mmode7xrpos+1],08h    jnz near %%rposoffxr%%nextposxr    test byte[mmode7yrpos+1],08h    jnz near %%rposoffyr%%nextposyr    mov cl,[mmode7yrpos+1]    mov ch,[mmode7xrpos+1]    mov edx,[mmode7xadder]    add dword[mmode7xrpos],edx    mov edx,[mmode7yadder]    sub dword[mmode7yrpos],edx    xor edx,edx    mov dl,[mode7tab+ecx]    mov dl,[edi+edx]    %1    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalr    jmp %%secondsetww%%rposoffxr    mov al,[mmode7xinc]    mov edi,[vram]    add [mmode7ptr],al    mov cl,[mmode7xincc]    cmp byte[mmode7ptr],cl    je %%roff%%roffxretb    mov ebx,[mmode7ptr]    xor ecx,ecx    mov cl,[edi+ebx]    mov eax,[mmode7xadd2]    shl ecx,7    sub [mmode7xrpos],eax    add edi,ecx    jmp %%nextposxr%%rposoffyr    mov al,[mmode7yinc]    mov edi,[vram]    sub [mmode7ptr+1],al    js %%roff%%roffyretb    mov ebx,[mmode7ptr]    xor ecx,ecx    mov cl,[edi+ebx]    mov eax,[mmode7yadd2]    shl ecx,7    add [mmode7yrpos],eax    add edi,ecx    jmp %%nextposyr%%roff    test byte[mode7set],40h    jnz %%tilerep3    jmp %%finishmode7%%thirdsetw    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%tilerep3    and byte[mmode7yrpos+1],07h    and byte[mmode7xrpos+1],07h    mov cl,[mmode7yrpos+1]    mov eax,[mmode7xadder]    mov ch,[mmode7xrpos+1]    add [mmode7xrpos],eax    mov dl,[mode7tab+ecx]    mov eax,[mmode7yadder]    mov dl,[vrama+edx]    sub [mmode7yrpos],eax    %1    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%tilerep3    jmp %%thirdsetww; *************************************%%firstsetww    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%norep2w    test byte[mode7set],40h    jnz %%tilerep2w%%nextvalb2w    cmp byte[mmode7ypos+2],3    ja %%offscr2w    cmp byte[mmode7xpos+2],3    jbe near %%offscr3w%%offscr2w    mov eax,[mmode7xadder]    mov ebx,[mmode7yadder]    add [mmode7xpos],eax    sub [mmode7ypos],ebx    add esi,%3    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalb2w    jmp %%firstsetw%%tilerep2w%%nextvalb3w    cmp byte[mmode7ypos+2],3    ja %%offscr2bw    cmp byte[mmode7xpos+2],3    jbe near %%offscr3w%%offscr2bw    mov ch,[mmode7xpos+1]    mov eax,[mmode7xadder]    mov cl,[mmode7ypos+1]    mov ebx,[mmode7yadder]    mov dl,[mode7tab+ecx]    add [mmode7xpos],eax    mov dl,[vrama+edx]    sub [mmode7ypos],ebx    %4    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalb3w    jmp %%firstsetw%%offscr3w    mov eax,[mmode7xpos]    and eax,7FFh    mov [mmode7xrpos],eax    mov eax,[mmode7ypos]    and eax,7FFh    mov [mmode7yrpos],eax    ; get tile data offset into edi    mov ebx,[mmode7ypos+1]    mov eax,[mmode7xpos+1]    shl ebx,5    shr eax,3    and ebx,07FF8h    shl al,1    mov bl,al    mov edi,[vram]    xor ch,ch    mov [mmode7ptr],ebx    mov cl,[edi+ebx]    shl ecx,7    add edi,ecx    jmp %%nextvalrw%%nodr2w    add esi,%3    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz %%nextvalrw%%secondsetww    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%nextvalrw    test byte[mmode7xrpos+1],08h    jnz near %%rposoffxrw%%nextposxrw    test byte[mmode7yrpos+1],08h    jnz near %%rposoffyrw%%nextposyrw    mov cl,[mmode7yrpos+1]    mov ch,[mmode7xrpos+1]    mov edx,[mmode7xadder]    add dword[mmode7xrpos],edx    mov edx,[mmode7yadder]    sub dword[mmode7yrpos],edx    xor edx,edx    mov dl,[mode7tab+ecx]    mov dl,[edi+edx]    %4    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%nextvalrw    jmp %%secondsetw%%rposoffxrw    mov al,[mmode7xinc]    mov edi,[vram]    add [mmode7ptr],al    mov cl,[mmode7xincc]    cmp byte[mmode7ptr],cl    je %%roffw%%roffxretbw    mov ebx,[mmode7ptr]    xor ecx,ecx    mov cl,[edi+ebx]    mov eax,[mmode7xadd2]    shl ecx,7    sub [mmode7xrpos],eax    add edi,ecx    jmp %%nextposxrw%%rposoffyrw    mov al,[mmode7yinc]    mov edi,[vram]    sub [mmode7ptr+1],al    js %%roffw%%roffyretbw    mov ebx,[mmode7ptr]    xor ecx,ecx    mov cl,[edi+ebx]    mov eax,[mmode7yadd2]    shl ecx,7    add [mmode7yrpos],eax    add edi,ecx    jmp %%nextposyrw%%roffw    test byte[mode7set],40h    jnz %%tilerep3w    jmp %%finishmode7%%thirdsetww    add dword[ngcwinptr],4    mov edx,[ngcwinptr]    mov edx,[edx]    mov [ngwleft],edx    xor edx,edx%%tilerep3w    and byte[mmode7yrpos+1],07h    and byte[mmode7xrpos+1],07h    mov cl,[mmode7yrpos+1]    mov eax,[mmode7xadder]    mov ch,[mmode7xrpos+1]    add [mmode7xrpos],eax    mov dl,[mode7tab+ecx]    mov eax,[mmode7yadder]    mov dl,[vrama+edx]    sub [mmode7yrpos],eax    %4    dec dword[mtemp]    jz near %%finishmode7    dec dword[ngwleft]    jnz near %%tilerep3w    jmp %%thirdsetw%endmacro; *********************************************************************%macro Mode7NonMainSub 1    WinEnCheck    ProcessBuildWindow16b 0.nohr    Mode7NoTranspPreStartUp    Mode7Startup    Mode7Process %1, domosaicng16b, 2.nextval3    Mode7ProcessB %1, domosaicng16b, 2    Mode7MidRoutines    mov edi,[vram]    Mode7Processngw16b %1, domosaicng16b, 2%endmacro%macro Mode7NonMainSube 1    WinEnCheck    ProcessBuildWindow16b 0.nohr    Mode7NoTranspPreStartUp2    Mode7Startup    Mode7Process %1, domosaicng16b, 2.nextval3    Mode7ProcessB %1, domosaicng16b, 2    Mode7MidRoutines    mov edi,[vram]    Mode7Processngw16b %1, domosaicng16b, 2%endmacro%macro Mode7MainSub 2    WinEnCheckMS    ProcessBuildWindow16b 0.nohr    Mode7NoTranspPreStartUp    call Mode7Startup16b    Mode7MidRoutines    mov edi,[vram]    Mode7Processngw216b %1, domosaicng16b, 2, %2%endmacro%macro Mode7MainSube 2    WinEnCheckMS    ProcessBuildWindow16b 0.nohr    Mode7NoTranspPreStartUp2    call Mode7Startup16b    Mode7MidRoutines    mov edi,[vram]    Mode7Processngw216b %1, domosaicng16b, 2, %2%endmacro

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?