⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vidmacro.mac

📁 linux下的任天堂模拟器代码。供大家参考。
💻 MAC
📖 第 1 页 / 共 3 页
字号:
    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    xor ecx,0FFFFh    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tawinonb 2    mov al,[ebx+%1]    or al,al    jz %%loop    test byte[edx+7-%1],0FFh    jnz %%loop    add al,[coadder16]    mov ecx,[ebp+%2]    mov eax,[pal16b+eax*4]    test ecx,0FFFFh    je %%noadd    and eax,1111011111011110b  ; [vesa2_clbit]    and ecx,1111011111011110b  ; [vesa2_clbit]    add eax,ecx    shr eax,1%%noadd    mov [esi+%2],ax    xor eax,eax%%loop%endmacro%macro draw8x816tbwinonb 2    mov al,[edi+%1]    or al,al    jz %%loop    test byte[edx+7-%1],0FFh    jnz %%loop    add al,[coadder16]    mov ebx,[ebp+%2]    mov ecx,[pal16bcl+eax*4]    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    mov [esi+%2],cx%%loop%endmacro%macro draw8x816tcwinonb 2    mov al,[edi+%1]    or al,al    jz %%loop    test byte[edx+7-%1],0FFh    jnz %%loop    add al,[coadder16]    mov ebx,[ebp+%2]    mov ecx,[pal16bxcl+eax*4]    and ebx,1111011111011110b  ; [vesa2_clbit]    add ecx,ebx    shr ecx,1    mov ecx,[fulladdtab+ecx*2]    xor ecx,0FFFFh    mov [esi+%2],cx%%loop%endmacro; end makev16t; ****************************************************; ****************************************************%macro Draw16x1616bwin 3    mov al,[ebx+%1]    test al,0FFh    jz %%loop    test byte[ebp+%3],0FFh    jnz %%loop    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%2],cx%%loop%endmacro;*******************************************************; Processes & Draws 16x16 tiles in 2, 4, & 8 bit mode;*******************************************************%macro Draw16x1616b 2    mov al,[ebx+%1]    test al,0FFh    jz %%loop    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%2],cx%%loop%endmacro%macro drawpixel16b8x8winon 4    mov al,[ebx+%1]    test al,0FFh    jz %2    test byte[ebp+%4],0FFh    jnz %2    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%3],cx%2%endmacro%macro drawpixel16b8x8 3    mov al,[ebx+%1]    test al,0FFh    jz %2    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%3],cx%2%endmacro%macro Draw8x816bwinmacro 1    mov al,[ebx+%1]    or al,al    jz %%loop    test byte[ebp+%1],0FFh    jnz %%loop    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%1*2],cx%%loop%endmacro%macro Draw8x816bwinflipmacro 1    mov al,[ebx+7-%1]    or al,al    jz %%loop    test byte[ebp+%1],0FFh    jnz %%loop    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%1*2],cx%%loop%endmacro;*******************************************************; DrawLine 16bit                  Draws the current line;*******************************************************; use curypos+bg1scroly for y location and bg1scrolx for x location; use bg1ptr(b,c,d) for the pointer to the tile number contents; use bg1objptr for the pointer to the object tile contents%macro procmode716b 3    xor eax,eax    xor edx,edx    mov ax,[curypos]    inc ax    test byte[mode7set],02h    jz .noflip    neg ax    add ax,255.noflip    mov byte[curmosaicsz],1    test byte[mosaicon],%3    jz .nomos    mov bl,[mosaicsz]    cmp bl,0    je .nomos    inc bl    mov [curmosaicsz],bl    xor bh,bh    div bx    xor edx,edx    mul bx.nomos    mov [m7starty],ax    mov ax,%1    mov dx,%2    call drawmode716b%endmacro%macro sprdrawpra16b 1    or eax,eax    jz %%skip    test byte[sprpriodata+ebx-%1+16],cl    jnz %%skip    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-%1*2],dx    or byte[sprpriodata+ebx-%1+16],cl%%skip%endmacro%macro sprdrawprb16b 1    or eax,eax    jz %%skip    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-%1*2],dx%%skip%endmacro%macro sprdrawpraw16b 1    or eax,eax    jz %%skip    test byte[sprpriodata+ebx-%1+16],cl    jnz %%skip    cmp byte[winspdata+ebx-%1+16],0    jne %%skip    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-%1*2],dx    or byte[sprpriodata+ebx-%1+16],cl%%skip%endmacro%macro sprdrawprbw16b 1    or eax,eax    jz %%skip    cmp byte[winspdata+ebx-%1+16],0    jne %%skip    add al,ch    mov edx,[pal16b+eax*4]    mov [edi+ebx*2-%1*2],dx%%skip%endmacro;*******************************************************; Processes & Draws 8x8 tiles in 2, 4, & 8 bit mode;*******************************************************%macro Draw8x816bmacro 1    mov al,[ebx+%1]    or al,al    jz %%loop    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%1*2],cx%%loop%endmacro%macro Draw8x816bflipmacro 1    mov al,[ebx+7-%1]    or al,al    jz %%loop    add al,dh    mov ecx,[pal16b+eax*4]    mov [esi+%1*2],cx%%loop%endmacro%macro sprdrawa16b 1    xor eax,eax    mov al,[esi]    %1 8    mov al,[esi+1]    %1 7    mov al,[esi+2]    %1 6    mov al,[esi+3]    %1 5    mov al,[esi+4]    %1 4    mov al,[esi+5]    %1 3    mov al,[esi+6]    %1 2    mov al,[esi+7]    %1 1%endmacro%macro sprdrawaf16b 1    xor eax,eax    mov al,[esi]    %1 1    mov al,[esi+1]    %1 2    mov al,[esi+2]    %1 3    mov al,[esi+3]    %1 4    mov al,[esi+4]    %1 5    mov al,[esi+5]    %1 6    mov al,[esi+6]    %1 7    mov al,[esi+7]    %1 8%endmacro%macro sprdrawa 1    mov ax,[esi]    %1 8, al    %1 7, ah    mov ax,[esi+2]    %1 6, al    %1 5, ah    mov ax,[esi+4]    %1 4, al    %1 3, ah    mov ax,[esi+6]    %1 2, al    %1 1, ah%endmacro%macro sprdrawpra 2    or %2,%2    jz %%skip    test byte[sprpriodata+ebx-%1+16],dl    jnz %%skip    add %2,ch    mov [edi+ebx-%1],%2    or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro sprdrawprawb 2    or %2,%2    jz %%skip    test byte[sprpriodata+ebx-%1+16],dl    jnz %%skip    cmp byte[ecx+ebx-%1],1    je %%skip    add %2,dh    mov [edi+ebx-%1],%2    or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro sprdrawprb 2    or %2,%2    jz %%skip    add %2,ch    mov [edi+ebx-%1],%2%%skip%endmacro%macro sprdrawprbwb 2    or %2,%2    jz %%skip    add %2,dh    cmp byte[ecx+ebx-%1],1    je %%skip    mov [edi+ebx-%1],%2%%skip%endmacro%macro sprdrawpra2 2    or %2,%2    jz %%skip    or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro sprdrawpraw 2    or %2,%2    jz %%skip    test byte[sprpriodata+ebx-%1+16],dl    jnz %%skip    cmp byte[winspdata+ebx-%1+16],0    jne %%skip    add %2,ch    mov [edi+ebx-%1],%2    or byte[sprpriodata+ebx-%1+16],dl%%skip%endmacro%macro sprdrawprbw 2    or %2,%2    jz %%skip    cmp byte[winspdata+ebx-%1+16],0    jne %%skip    add %2,ch    mov [edi+ebx-%1],%2%%skip%endmacro%macro sprdrawaf 1    mov ax,[esi]    %1 1, al    %1 2, ah    mov ax,[esi+2]    %1 3, al    %1 4, ah    mov ax,[esi+4]    %1 5, al    %1 6, ah    mov ax,[esi+6]    %1 7, al    %1 8, ah%endmacro%macro procoffsetmode 0    push ebx    push edx    add word[ofsmmptr],2    add word[ofsmtptr],2    mov ebx,[yposngom]    mov eax,[flipyposngom]    mov [yadder],ebx    mov [yrevadder],eax    mov ax,[ofsmmptr]    test eax,03Fh    jnz %%next    mov bx,[bgtxadd]    add ax,bx    add [ofsmmptr],bx    add [ofsmtptr],bx%%next    add eax,[vram]    mov edi,eax    mov ebx,[ofsmcptr]    add ebx,[ofsmcptr2]    mov eax,[OMBGTestVal]    test dword[ebx],eax    jz %%noofsm    mov ebx,[ebx]    mov ax,[ofsmtptr]    and ebx,3FFh    add ebx,[ofsmcyps]    test ebx,100h    jz %%noupper    add ax,[ofsmady]%%noupper    and ebx,0FFh    mov edx,ebx    shr ebx,3    and edx,07h    shl ebx,6    shl edx,3    add ax,bx    mov [yadder],edx    xor edx,38h    mov [yrevadder],edx    add eax,[vram]    mov edi,eax%%noofsm    mov ebx,[ofsmcptr]    add ebx,[ofsmcptr2]    add dword[ofshvaladd],8    mov eax,[OMBGTestVal]    add dword[ofsmcptr2],2    and dword[ofsmcptr2],3Fh    test dword[ebx-40h],eax    jz %%noofsmh    mov eax,edi    sub eax,[vram]    mov ebx,[ebx-40h]    sub ax,[ofsmtptr]    add ax,[ofsmtptrs]    add ebx,[ofshvaladd]    test ebx,100h    jz %%noleft    add ax,[ofsmadx]%%noleft    and ebx,0F8h    shr ebx,2    add ax,bx    add eax,[vram]    mov edi,eax%%noofsmh    pop edx    pop ebx%endmacro;*******************************************************; Processes & Draws 8x8 offset mode in Mode 2/4;*******************************************************%macro initoffsetmode 0    push ebx    push ecx    mov ebx,2000h    mov ecx,ebp    shl ebx,cl    mov [OMBGTestVal],ebx    mov ecx,[bg1scroly+ebp*2]    and ecx,0FFFFh    add ecx,ebx    push eax    push edx    xor edx,edx    mov dx,[bg3scroly];    and dx,0F8h    shr edx,3    shl edx,6    xor eax,eax    mov ax,[bg3ptr]    add ax,dx    xor edx,edx    mov dx,[bg3scrolx]    and dx,0F8h    xor ebx,ebx    mov ebx,[curypos]    mov [ofsmcyps],ebx    shr edx,3    shl edx,1    add ax,dx    mov dx,[bg3scrolx]    test dx,8000h    jz .nooma    and dx,0F000h    shr dx,5    add ax,dx.nooma    add eax,40h    mov edx,eax    mov [Testval],edx    and edx,0FFFFFFC0h    add edx,[vram]    mov [ofsmcptr],edx    and eax,3Fh    mov [ofsmcptr2],eax    mov eax,[bg1ptry+ebp*4]    mov [ofsmady],eax    mov eax,[bg1ptrx+ebp*4]    mov [ofsmadx],eax    mov eax,[bg1ptr+ebp*2]    mov [ofsmtptr],eax    mov [ofsmtptrs],eax    test ecx,100h    jz .noyincd    add eax,[bg1ptry+ebp*4].noyincd    lea ecx,[ecx*8]    and ecx,07C0h      ; 1Fh*40h    add eax,ecx    mov edx,[yadder]    mov [yposngom],edx    mov edx,[yrevadder]    mov [flipyposngom],edx    mov ecx,[bg1scrolx+ebp*2]    mov edx,[bg1ptrx+ebp*4]    test ecx,100h    jz .noxincd    add eax,edx    add [ofsmtptr],edx    neg dx.noxincd    sub dx,64    and ecx,0F8h    and eax,0FFFFh    shr ecx,2    mov [bgtxadd],edx    add eax,ecx    add [ofsmtptr],ecx    mov [ofsmmptr],eax    xor eax,eax    mov ax,[bg1objptr+ebp*2]    shr eax,5    mov [ngptrdat2],eax    mov eax,edi    sub eax,[vram]    mov [ofsmmptr],eax    mov dword[ofshvaladd],0    pop edx    pop eax    pop ecx    pop ebx%endmacro%macro offsetmcachechk 0    ; Cache check    push ecx    mov ecx,eax    add ecx,[ngptrdat2]    and ecx,2047    cmp word[vidmemch4+ecx*2],0    je %%nocache    call cachesingle4bng%%nocache    pop ecx%endmacro

⌨️ 快捷键说明

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