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

📄 fxemu2c.asm

📁 著名SFC模拟器Snes9x的源代码。
💻 ASM
📖 第 1 页 / 共 5 页
字号:
NEWSYM FxOpd48      ; LDW RN load word from RAM   LDWRNc 8NEWSYM FxOpd49      ; LDW RN load word from RAM   LDWRNc 9NEWSYM FxOpd4A      ; LDW RN load word from RAM   LDWRNc 10NEWSYM FxOpd4B      ; LDW RN load word from RAM   LDWRNc 11NEWSYM FxOpd40A1    ; LDB RN load byte from RAM   LDBRNc 0   NEWSYM FxOpd41A1    ; LDB RN load byte from RAM   LDBRNc 1 NEWSYM FxOpd42A1    ; LDB RN load byte from RAM   LDBRNc 2   NEWSYM FxOpd43A1    ; LDB RN load byte from RAM   LDBRNc 3   NEWSYM FxOpd44A1    ; LDB RN load byte from RAM   LDBRNc 4   NEWSYM FxOpd45A1    ; LDB RN load byte from RAM   LDBRNc 5NEWSYM FxOpd46A1    ; LDB RN load byte from RAM   LDBRNc 6   NEWSYM FxOpd47A1    ; LDB RN load byte from RAM   LDBRNc 7   NEWSYM FxOpd48A1    ; LDB RN load byte from RAM   LDBRNc 8NEWSYM FxOpd49A1    ; LDB RN load byte from RAM   LDBRNc 9NEWSYM FxOpd4AA1    ; LDB RN load byte from RAM   LDBRNc 10NEWSYM FxOpd4BA1    ; LDB RN load byte from RAM   LDBRNc 11EXTSYM fxbit01,fxbit23,fxbit45,fxbit67EXTSYM fxxandNEWSYM FxOpd4C1284b       ; PLOT 4bit   plotlines4bb plotbNEWSYM FxOpd4C1284bz      ; PLOT 4bit, zero check   plotlines4bb plotbzNEWSYM FxOpd4C1284bd      ; PLOT 4bit, dither   plotlines4bb plotbdNEWSYM FxOpd4C1284bzd     ; PLOT 4bit, zero check + dither   plotlines4bb plotbzdNEWSYM FxOpd4C1282b       ; PLOT 2bit   plotlines2bb plotbNEWSYM FxOpd4C1282bz      ; PLOT 2bit, zero check   plotlines2bb plotbzNEWSYM FxOpd4C1282bd      ; PLOT 2bit, dither   plotlines2bb plotbdNEWSYM FxOpd4C1282bzd     ; PLOT 2bit, zero check + dither   plotlines2bb plotbzdNEWSYM FxOpd4C1288b       ; PLOT 8bit   plotlines8bb plotbNEWSYM FxOpd4C1288bz      ; PLOT 8bit, zero check   plotlines8bb plotbzNEWSYM FxOpd4C1288bd      ; PLOT 8bit, dither   plotlines8bb plotbNEWSYM FxOpd4C1288bzd     ; PLOT 8bit, zero check + dither   plotlines8bb plotbzNEWSYM FxOpd4C1288bl       ; PLOT 8bit   plotlines8bbl plotbNEWSYM FxOpd4C1288bzl      ; PLOT 8bit, zero check   plotlines8bbl plotbzNEWSYM FxOpd4C1288bdl      ; PLOT 8bit, dither   plotlines8bbl plotbNEWSYM FxOpd4C1288bzdl     ; PLOT 8bit, zero check + dither   plotlines8bbl plotbzNEWSYM FxOpd4C      ; PLOT   plot pixel with R1,R2 as x,y and the color register as the color   jmp FxOpd4C1284b   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]   FXReturn.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]   FXReturn.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]   FXReturn.prevx dw 0.prevy dw 0NEWSYM FxOpd4CA1    ; 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   FXReturn.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   jz .nodraw2_4   or bh,02h.nodraw2_4   mov bl,bh   and ebx,0FFh   inc ebp;   UpdateR14   CLRFLAGS   mov [edi],ebx            ; Write Destination   mov [flagnz],ebx   FXReturn.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   xor bh,bh   test byte[eax],bl   jz .nodraw_256   or bh,01h.nodraw_256   test byte[eax+1],bl   jz .nodraw2_256   or bh,02h.nodraw2_256   test byte[eax+16],bl   jz .nodraw3_256   or bh,04h.nodraw3_256   test byte[eax+17],bl   jz .nodraw4_256   or bh,08h.nodraw4_256   test byte[eax+32],bl   jz .nodraw5_256   or bh,10h.nodraw5_256   test byte[eax+33],bl   jz .nodraw6_256   or bh,20h.nodraw6_256   test byte[eax+48],bl   jz .nodraw7_256   or bh,40h.nodraw7_256   test byte[eax+49],bl   jz .nodraw8_256   or bh,80h.nodraw8_256   mov bl,bh   and ebx,0FFh   inc ebp;   UpdateR14   CLRFLAGS   mov [edi],ebx            ; Write Destination   mov [flagnz],ebx   FXReturnNEWSYM FxOpd4D      ; SWAP   swap upper and lower byte of a register    ; V   mov eax,[esi]            ; Read Source   FETCHPIPE   ror ax,8      inc ebp                ; Increase program counter   mov [SfxSignZero],eax   mov [edi],eax            ; Write Destination   CLRFLAGS   FXReturnNEWSYM FxOpd4E      ; COLOR  copy source register to color register     ; V   FETCHPIPE   mov eax,[esi]            ; Read Source   ; if bit 3 of SfxPOR is set, then don't modify the upper 4 bits   test byte[SfxPOR],04h   jz .nohighnibble   mov bl,al   shr bl,4

⌨️ 快捷键说明

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