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