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

📄 fxemu2.asm

📁 著名SFC模拟器Snes9x的源代码。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
NEWSYM FxOp38      ; STW RN store word   STWRN 8NEWSYM FxOp39      ; STW RN store word   STWRN 9NEWSYM FxOp3A      ; STW RN store word   STWRN 10NEWSYM FxOp3B      ; STW RN store word   STWRN 11NEWSYM FxOp30A1    ; STB RN store byte   STBRN 0NEWSYM FxOp31A1    ; STB RN store byte   STBRN 1NEWSYM FxOp32A1    ; STB RN store byte   STBRN 2NEWSYM FxOp33A1    ; STB RN store byte   STBRN 3NEWSYM FxOp34A1    ; STB RN store byte   STBRN 4NEWSYM FxOp35A1    ; STB RN store byte   STBRN 5NEWSYM FxOp36A1    ; STB RN store byte   STBRN 6NEWSYM FxOp37A1    ; STB RN store byte   STBRN 7NEWSYM FxOp38A1    ; STB RN store byte   STBRN 8NEWSYM FxOp39A1    ; STB RN store byte   STBRN 9NEWSYM FxOp3AA1    ; STB RN store byte   STBRN 10NEWSYM FxOp3BA1    ; STB RN store byte   STBRN 11NEWSYM FxOp3C      ; LOOP   decrement loop counter, and branch on not zero ; V   dec word [SfxR12]       ; decrement loop counter   FETCHPIPE   mov eax,[SfxR12]   mov [SfxSignZero],eax   or eax,eax   jz .NoBranch   mov eax,dword [SfxR13]   mov ebp,[SfxCPB]   add ebp,eax   CLRFLAGS   ret.NoBranch   inc ebp   CLRFLAGS   retNEWSYM FxOp3D      ; ALT1   set alt1 mode      ; Verified.   FETCHPIPE   mov dword [SfxB],0   or ch,01h   inc ebp   call [FxTable+ecx*4]   xor ch,ch   retNEWSYM FxOp3E      ; ALT2   set alt1 mode      ; Verified.   FETCHPIPE   mov dword [SfxB],0   or ch,02h   inc ebp   call [FxTable+ecx*4]   xor ch,ch   retNEWSYM FxOp3F      ; ALT3   set alt3 mode      ; Verified.   FETCHPIPE   mov dword [SfxB],0   or ch,03h   inc ebp   call [FxTable+ecx*4]   xor ch,ch   retNEWSYM FxOp40      ; LDW RN load word from RAM   LDWRN 0NEWSYM FxOp41      ; LDW RN load word from RAM   LDWRN 1NEWSYM FxOp42      ; LDW RN load word from RAM   LDWRN 2NEWSYM FxOp43      ; LDW RN load word from RAM   LDWRN 3NEWSYM FxOp44      ; LDW RN load word from RAM   LDWRN 4NEWSYM FxOp45      ; LDW RN load word from RAM   LDWRN 5NEWSYM FxOp46      ; LDW RN load word from RAM   LDWRN 6NEWSYM FxOp47      ; LDW RN load word from RAM   LDWRN 7NEWSYM FxOp48      ; LDW RN load word from RAM   LDWRN 8NEWSYM FxOp49      ; LDW RN load word from RAM   LDWRN 9NEWSYM FxOp4A      ; LDW RN load word from RAM   LDWRN 10NEWSYM FxOp4B      ; LDW RN load word from RAM   LDWRN 11NEWSYM FxOp40A1    ; LDB RN load byte from RAM   LDBRN 0   NEWSYM FxOp41A1    ; LDB RN load byte from RAM   LDBRN 1 NEWSYM FxOp42A1    ; LDB RN load byte from RAM   LDBRN 2   NEWSYM FxOp43A1    ; LDB RN load byte from RAM   LDBRN 3   NEWSYM FxOp44A1    ; LDB RN load byte from RAM   LDBRN 4   NEWSYM FxOp45A1    ; LDB RN load byte from RAM   LDBRN 5NEWSYM FxOp46A1    ; LDB RN load byte from RAM   LDBRN 6   NEWSYM FxOp47A1    ; LDB RN load byte from RAM   LDBRN 7   NEWSYM FxOp48A1    ; LDB RN load byte from RAM   LDBRN 8NEWSYM FxOp49A1    ; LDB RN load byte from RAM   LDBRN 9NEWSYM FxOp4AA1    ; LDB RN load byte from RAM   LDBRN 10NEWSYM FxOp4BA1    ; LDB RN load byte from RAM   LDBRN 11NEWSYM FxOp4C1284b       ; PLOT 4bit   plotlines4b plotbNEWSYM FxOp4C1284bz      ; PLOT 4bit, zero check   plotlines4b plotbzNEWSYM FxOp4C1284bd      ; PLOT 4bit, dither   plotlines4b plotbdNEWSYM FxOp4C1284bzd     ; PLOT 4bit, zero check + dither   plotlines4b plotbzdNEWSYM FxOp4C1282b       ; PLOT 2bit   plotlines2b plotbNEWSYM FxOp4C1282bz      ; PLOT 2bit, zero check   plotlines2b plotbzNEWSYM FxOp4C1282bd      ; PLOT 2bit, dither   plotlines2b plotbdNEWSYM FxOp4C1282bzd     ; PLOT 2bit, zero check + dither   plotlines2b plotbzdNEWSYM FxOp4C1288b       ; PLOT 8bit   plotlines8b plotbNEWSYM FxOp4C1288bz      ; PLOT 8bit, zero check   plotlines8b plotbzNEWSYM FxOp4C1288bd      ; PLOT 8bit, dither   plotlines8b plotbdNEWSYM FxOp4C1288bzd     ; PLOT 8bit, zero check + dither   plotlines8b plotbzdNEWSYM FxOp4C1288bl       ; PLOT 8bit   plotlines8bl plotbNEWSYM FxOp4C1288bzl      ; PLOT 8bit, zero check   plotlines8bl plotbzNEWSYM FxOp4C1288bdl      ; PLOT 8bit, dither   plotlines8bl plotbdNEWSYM FxOp4C1288bzdl     ; PLOT 8bit, zero check + dither   plotlines8bl plotbzdNEWSYM FxOp4C      ; PLOT   plot pixel with R1,R2 as x,y and the color register as the color   jmp FxOp4C1284b   FETCHPIPE   inc ebp   CLRFLAGS   mov ebx,[SfxR2]   mov bh,[SfxR1]   mov eax,[sfxclineloc]   mov ebx,[eax+ebx*4]   cmp ebx,0FFFFFFFFh   je near .nodraw   xor eax,eax   ; bits 5/2 : 00 = 128 pixels, 01 = 160 pixels, 10 = 192 pixels, 11 = obj   ; bits 1/0 : 00 = 4 color, 01 = 16-color, 10 = not used, 11 = 256 color   ; 192 pixels = 24 tiles, 160 pixels = 20 tiles, 128 pixels = 16 tiles   ;              16+8(4/3)              16+4(4/2)              16(4/0)   push ecx   mov al,[SfxSCMR]   and al,00000011b     ; 4 + 32   cmp al,0   je near .colors4   cmp al,3   je near .colors256   shl ebx,5    ; x32 (16 colors)   mov al,[SfxSCBR]   shl eax,10   ; Get SFX address   add eax,ebx   add eax,[sfxramdata]   mov ebx,[SfxR2]   and ebx,07h   shl ebx,1   add eax,ebx   mov cl,[SfxR1]   and cl,07h   xor cl,07h   mov bl,1   shl bl,cl   mov bh,bl   xor bh,0FFh   pop ecx   test byte[SfxPOR],01h   jnz .nozerocheck_16   test byte[SfxCOLR],0Fh   jz .nodraw.nozerocheck_16   mov dl,[SfxCOLR]   test byte[SfxPOR],02h   jz .nodither4b   mov dh,[SfxR1]   xor dh,[SfxR2]   test dh,01h   jz .nodither4b   shr dh,4.nodither4b   and byte[eax],bh   and byte[eax+1],bh   and byte[eax+16],bh   and byte[eax+17],bh   test dl,01h   jz .nodraw_16   or byte[eax],   bl.nodraw_16   test dl,02h   jz .nodraw2_16   or byte[eax+1], bl.nodraw2_16   test dl,04h   jz .nodraw3_16   or byte[eax+16],bl.nodraw3_16   test dl,08h   jz .nodraw4_16   or byte[eax+17],bl.nodraw4_16.nodraw   inc word [SfxR1]   ret.colors4   shl ebx,4    ; x16 (4 colors)   mov al,[SfxSCBR]   shl eax,10   ; Get SFX address   add eax,ebx   add eax,[sfxramdata]   mov ebx,[SfxR2]   and ebx,07h   shl ebx,1   add eax,ebx   mov cl,[SfxR1]   and cl,07h   xor cl,07h   mov bl,1   shl bl,cl   mov bh,bl   xor bh,0FFh   pop ecx   test byte[SfxPOR],01h   jnz .nozerocheck_4   test byte[SfxCOLR],03h   jz .noplot_4.nozerocheck_4   mov dl,[SfxCOLR]   test byte[SfxPOR],02h   jz .nodither2b   mov dh,[SfxR1]   xor dh,[SfxR2]   test dh,01h   jz .nodither2b   shr dh,4.nodither2b   and byte[eax],bh   and byte[eax+1],bh   test dl,01h   jz .nodraw_4   or byte[eax],   bl.nodraw_4   test dl,02h   jz .nodraw2_4   or byte[eax+1], bl.nodraw2_4.noplot_4   inc word [SfxR1]   ret.colors256   shl ebx,6    ; x64 (256 colors)   mov al,[SfxSCBR]   shl eax,10   ; Get SFX address   add eax,ebx   add eax,[sfxramdata]   mov ebx,[SfxR2]   and ebx,07h   shl ebx,1   add eax,ebx   mov cl,[SfxR1]   and cl,07h   xor cl,07h   mov bl,1   shl bl,cl   mov bh,bl   xor bh,0FFh   pop ecx   test byte[SfxPOR],01h   jnz .nozerocheck_256   mov dl,0FFh   test byte[SfxPOR],08h   jz .nozerocheckb_256   mov dl,0Fh.nozerocheckb_256   test byte[SfxCOLR],dl   jz .noplot_256.nozerocheck_256   mov dl,[SfxCOLR]   and byte[eax],bh   and byte[eax+1],bh   and byte[eax+16],bh   and byte[eax+17],bh   and byte[eax+32],bh   and byte[eax+33],bh   and byte[eax+48],bh   and byte[eax+49],bh   test dl,01h   jz .nodraw_256   or byte[eax],   bl.nodraw_256   test dl,02h   jz .nodraw2_256   or byte[eax+1], bl.nodraw2_256   test dl,04h   jz .nodraw3_256   or byte[eax+16],bl.nodraw3_256   test dl,08h   jz .nodraw4_256   or byte[eax+17],bl.nodraw4_256   test dl,10h   jz .nodraw5_256   or byte[eax+32],   bl.nodraw5_256   test dl,20h   jz .nodraw6_256   or byte[eax+33], bl.nodraw6_256   test dl,40h   jz .nodraw7_256   or byte[eax+48],bl.nodraw7_256   test dl,80h   jz .nodraw8_256   or byte[eax+49],bl.nodraw8_256.noplot_256   inc word [SfxR1]   ret.prevx dw 0.prevy dw 0SECTION .datasfxwarning db 0SECTION .textNEWSYM FxOp4CA1    ; RPIX   read color of the pixel with R1,R2 as x,y   FETCHPIPE   mov ebx,[SfxR2]   mov bh,[SfxR1]   test byte[SfxPOR],10h   jnz .objmode   mov al,[SfxSCMR]   and al,00100100b     ; 4 + 32   cmp al,4   je .lines160   cmp al,32   je .lines192   cmp al,36   je .objmode   mov eax,[sfx128lineloc]   jmp .donelines.lines160   mov eax,[sfx160lineloc]   jmp .donelines.lines192   mov eax,[sfx192lineloc]   jmp .donelines.objmode   mov eax,[sfxobjlineloc].donelines   mov ebx,[eax+ebx*4]   cmp ebx,0FFFFFFFFh   je near .nodraw   xor eax,eax   ; bits 5/2 : 00 = 128 pixels, 01 = 160 pixels, 10 = 192 pixels, 11 = obj   ; bits 1/0 : 00 = 4 color, 01 = 16-color, 10 = not used, 11 = 256 color   ; 192 pixels = 24 tiles, 160 pixels = 20 tiles, 128 pixels = 16 tiles   ;              16+8(4/3)              16+4(4/2)              16(4/0)   push ecx   mov al,[SfxSCMR]   and al,00000011b     ; 4 + 32   cmp al,0   je near .colors4   cmp al,3   je near .colors256   shl ebx,5    ; x32 (16 colors)   mov al,[SfxSCBR]   shl eax,10   ; Get SFX address   add eax,ebx   add eax,[sfxramdata]   mov ebx,[SfxR2]   and ebx,07h   shl ebx,1   add eax,ebx   mov cl,[SfxR1]   and cl,07h   xor cl,07h   mov bl,1   shl bl,cl   pop ecx   xor bh,bh   test byte[eax],bl   jz .nodraw_16   or bh,01h.nodraw_16   test byte[eax+1],bl   jz .nodraw2_16   or bh,02h.nodraw2_16   test byte[eax+16],bl   jz .nodraw3_16   or bh,04h.nodraw3_16   test byte[eax+17],bl   jz .nodraw4_16   or bh,08h.nodraw4_16.nodraw   mov bl,bh   and ebx,0FFh   inc ebp;   UpdateR14   CLRFLAGS   mov [edi],ebx            ; Write Destination   mov [flagnz],ebx   ret.colors4   shl ebx,4    ; x16 (4 colors)   mov al,[SfxSCBR]   shl eax,10   ; Get SFX address   add eax,ebx   add eax,[sfxramdata]   mov ebx,[SfxR2]   and ebx,07h   shl ebx,1   add eax,ebx   mov cl,[SfxR1]   and cl,07h   xor cl,07h   mov bl,1   shl bl,cl   mov bh,bl   xor bh,0FFh   pop ecx   xor bh,bh   test byte[eax],bl   jz .nodraw_4   or bh,01h.nodraw_4   test byte[eax+1],bl

⌨️ 快捷键说明

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