📄 fxemu2c.asm
字号:
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 + -