📄 fxemu2.asm
字号:
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 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 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 retNEWSYM FxOp4D ; 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 retNEWSYM FxOp4E ; 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 and al,0F0h or al,bl.nohighnibble test byte[SfxPOR],08h jnz .preserveupper cmp [SfxCOLR],al je .nocolchange mov [SfxCOLR],al and eax,0FFh mov ebx,[fxbit01+eax*4] mov [fxbit01pcal],ebx mov ebx,[fxbit23+eax*4] mov [fxbit23pcal],ebx mov ebx,[fxbit45+eax*4] mov [fxbit45pcal],ebx mov ebx,[fxbit67+eax*4] mov [fxbit67pcal],ebx.nocolchange CLRFLAGS inc ebp ; Increase program counter ret.preserveupper mov bl,[SfxCOLR] and al,0Fh and bl,0F0h or al,bl cmp [SfxCOLR],al je .nocolchange mov [SfxCOLR],al and eax,0FFh mov ebx,[fxbit01+eax*4] mov [fxbit01pcal],ebx mov ebx,[fxbit23+eax*4] mov [fxbit23pcal],ebx mov ebx,[fxbit45+eax*4] mov [fxbit45pcal],ebx mov ebx,[fxbit67+eax*4] mov [fxbit67pcal],ebx CLRFLAGS inc ebp ; Increase program counter retNEWSYM FxOp4EA1 ; CMODE set plot option register ; V FETCHPIPE mov eax,[esi] ; Read Source inc ebp ; Increase program counter mov dword [SfxPOR],eax 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 [sfxclineloc],eax push ebx mov al,[SfxSCMR] and eax,00000011b mov bl,[SfxPOR] and bl,0Fh shl bl,2 or al,bl mov ebx,[PLOTJmpb+eax*4] mov eax,[PLOTJmpa+eax*4] mov dword [FxTable+4Ch*4],eax mov dword [FxTableb+4Ch*4],eax mov dword [FxTablec+4Ch*4],eax mov dword [FxTabled+4Ch*4],ebx pop ebx CLRFLAGS retNEWSYM FxOp4F ; NOT perform exclusive exor with 1 on all bits ; V mov eax,[esi] ; Read Source FETCHPIPE xor eax,0FFFFh inc ebp ; Increase program counter mov [SfxSignZero],eax mov [edi],eax ; Write Destination CLRFLAGS retNEWSYM FxOp50 ; ADD RN add, register + register ADDRN 0NEWSYM FxOp51 ; ADD RN add, register + register ADDRN 1NEWSYM FxOp52 ; ADD RN add, register + register ADDRN 2NEWSYM FxOp53 ; ADD RN add, register + register ADDRN 3NEWSYM FxOp54 ; ADD RN add, register + register ADDRN 4NEWSYM FxOp55 ; ADD RN add, register + register ADDRN 5NEWSYM FxOp56 ; ADD RN add, register + register ADDRN 6NEWSYM FxOp57 ; ADD RN add, register + register ADDRN 7NEWSYM FxOp58 ; ADD RN add, register + register ADDRN 8NEWSYM FxOp59 ; ADD RN add, register + register ADDRN 9NEWSYM FxOp5A ; ADD RN add, register + register ADDRN 10NEWSYM FxOp5B ; ADD RN add, register + register ADDRN 11NEWSYM FxOp5C ; ADD RN add, register + register ADDRN 12NEWSYM FxOp5D ; ADD RN add, register + register ADDRN 13NEWSYM FxOp5E ; ADD RN add, register + register ADDRN 14NEWSYM FxOp5F ; ADD RN add, register + register FETCHPIPE mov eax, [esi] ; Read Source mov ebx,ebp sub ebx,[SfxCPB] add ax,bx seto byte[SfxOverflow] setc byte[SfxCarry] mov [SfxSignZero],eax inc ebp ; Increase program counter mov [edi],eax ; Write Destination CLRFLAGS retNEWSYM FxOp50A1 ; ADC RN add with carry, register + register ADCRN 0NEWSYM FxOp51A1 ; ADC RN add with carry, register + register ADCRN 1NEWSYM FxOp52A1 ; ADC RN add with carry, register + register ADCRN 2NEWSYM FxOp53A1 ; ADC RN add with carry, register + register ADCRN 3NEWSYM FxOp54A1 ; ADC RN add with carry, register + register ADCRN 4NEWSYM FxOp55A1 ; ADC RN add with carry, register + register ADCRN 5NEWSYM FxOp56A1 ; ADC RN add with carry, register + register ADCRN 6NEWSYM FxOp57A1 ; ADC RN add with carry, register + register ADCRN 7NEWSYM FxOp58A1 ; ADC RN add with carry, register + register ADCRN 8NEWSYM FxOp59A1 ; ADC RN add with carry, register + register ADCRN 9NEWSYM FxOp5AA1 ; ADC RN add with carry, register + register ADCRN 10NEWSYM FxOp5BA1 ; ADC RN add with carry, register + register ADCRN 11NEWSYM FxOp5CA1 ; ADC RN add with carry, register + register ADCRN 12NEWSYM FxOp5DA1 ; ADC RN add with carry, register + register ADCRN 13NEWSYM FxOp5EA1 ; ADC RN add with carry, register + register ADCRN 14NEWSYM FxOp5FA1 ; ADC RN add with carry, register + register FETCHPIPE mov eax, [esi] ; Read Source mov ebx,ebp sub ebx,[SfxCPB] shr byte[SfxCarry],1 adc ax,bx seto byte[SfxOverflow] setc byte[SfxCarry] mov [SfxSignZero],eax inc ebp ; Increase program counter mov [edi],eax ; Write Destination CLRFLAGS ret; Weird opcode (FxOp50A2, add 0, wow!)NEWSYM FxOp50A2 ; ADI RN add, register + immediate ADIRN 0NEWSYM FxOp51A2 ; ADI RN add, register + immediate ADIRN 1NEWSYM FxOp52A2 ; ADI RN add, register + immediate ADIRN 2NEWSYM FxOp53A2 ; ADI RN add, register + immediate ADIRN 3NEWSYM FxOp54A2 ; ADI RN add, register + immediate ADIRN 4NEWSYM FxOp55A2 ; ADI RN add, register + immediate ADIRN 5NEWSYM FxOp56A2 ; ADI RN add, register + immediate ADIRN 6NEWSYM FxOp57A2 ; ADI RN add, register + immediate ADIRN 7NEWSYM FxOp58A2 ; ADI RN add, register + immediate ADIRN 8NEWSYM FxOp59A2 ; ADI RN add, register + immediate ADIRN 9NEWSYM FxOp5AA2 ; ADI RN add, register + immediate ADIRN 10NEWSYM FxOp5BA2 ; ADI RN add, register + immediate ADIRN 11NEWSYM FxOp5CA2 ; ADI RN add, register + immediate ADIRN 12NEWSYM FxOp5DA2 ; ADI RN add, register + immediate ADIRN 13NEWSYM FxOp5EA2 ; ADI RN add, register + immediate ADIRN 14NEWSYM FxOp5FA2 ; ADI RN add, register + immediate ADIRN 15; Another very useful opcodeNEWSYM FxOp50A3 ; ADCIRN add with carry, register + immediate ADCIRN 0NEWSYM FxOp51A3 ; ADCIRN add with carry, register + immediate ADCIRN 1NEWSYM FxOp52A3 ; ADCIRN add with carry, register + immediate ADCIRN 2NEWSYM FxOp53A3 ; ADCIRN add with carry, register + immediate ADCIRN 3NEWSYM FxOp54A3 ; ADCIRN add with carry, register + immediate ADCIRN 4NEWSYM FxOp55A3 ; ADCIRN add with carry, register + immediate ADCIRN 5NEWSYM FxOp56A3 ; ADCIRN add with carry, register + immediate ADCIRN 6NEWSYM FxOp57A3 ; ADCIRN add with carry, register + immediate ADCIRN 7NEWSYM FxOp58A3 ; ADCIRN add with carry, register + immediate ADCIRN 8NEWSYM FxOp59A3 ; ADCIRN add with carry, register + immediate ADCIRN 9NEWSYM FxOp5AA3 ; ADCIRN add with carry, register + immediate ADCIRN 10NEWSYM FxOp5BA3 ; ADCIRN add with carry, register + immediate ADCIRN 11NEWSYM FxOp5CA3 ; ADCIRN add with carry, register + immediate ADCIRN 12NEWSYM FxOp5DA3 ; ADCIRN add with carry, register + immediate ADCIRN 13NEWSYM FxOp5EA3 ; ADCIRN add with carry, register + immediate ADCIRN 14NEWSYM FxOp5FA3 ; ADCIRN add with carry, register + immediate ADCIRN 15NEWSYM FxOp60 ; SUBRN subtract, register - register SUBRN 0NEWSYM FxOp61 ; SUBRN subtract, register - register SUBRN 1NEWSYM FxOp62 ; SUBRN subtract, register - register SUBRN 2NEWSYM FxOp63 ; SUBRN subtract, register - register SUBRN 3NEWSYM FxOp64 ; SUBRN subtract, register - register SUBRN 4NEWSYM FxOp65 ; SUBRN subtract, register - register SUBRN 5NEWSYM FxOp66 ; SUBRN subtract, register - register SUBRN 6NEWSYM FxOp67 ; SUBRN subtract, register - register SUBRN 7NEWSYM FxOp68 ; SUBRN subtract, register - register SUBRN 8NEWSYM FxOp69 ; SUBRN subtract, register - register SUBRN 9NEWSYM FxOp6A ; SUBRN subtract, register - register SUBRN 10NEWSYM FxOp6B ; SUBRN subtract, register - register SUBRN 11NEWSYM FxOp6C ; SUBRN subtract, register - register SUBRN 12NEWSYM FxOp6D ; SUBRN subtract, register - register SUBRN 13NEWSYM FxOp6E ; SUBRN subtract, register - register SUBRN 14NEWSYM FxOp6F ; SUBRN subtract, register - register FETCHPIPE mov eax,[esi] ; Read Source mov ebx,ebp sub ebx,[SfxCPB] sub ax,bx seto byte[SfxOverflow] setc byte[SfxCarry] xor byte[SfxCarry],1 inc ebp ; Increase program counter mov [edi],eax ; Write Destination mov [SfxSignZero],eax CLRFLAGS retNEWSYM FxOp60A1 ; SBCRN subtract with carry, register - register SBCRN 0NEWSYM FxOp61A1 ; SBCRN subtract with carry, register - register SBCRN 1NEWSYM FxOp62A1 ; SBCRN subtract with carry, register - register SBCRN 2NEWSYM FxOp63A1 ; SBCRN subtract with carry, register - register SBCRN 3NEWSYM FxOp64A1 ; SBCRN subtract with carry, register - register SBCRN 4NEWSYM FxOp65A1 ; SBCRN subtract with carry, register - register SBCRN 5NEWSYM FxOp66A1 ; SBCRN subtract with carry, register - register SBCRN 6NEWSYM FxOp67A1 ; SBCRN subtract with carry, register - register SBCRN 7NEWSYM FxOp68A1 ; SBCRN subtract with carry, register - register SBCRN 8NEWSYM FxOp69A1 ; SBCRN subtract with carry, register - register SBCRN 9NEWSYM FxOp6AA1 ; SBCRN subtract with carry, register - register SBCRN 10NEWSYM FxOp6BA1 ; SBCRN subtract with carry, register - register SBCRN 11NEWSYM FxOp6CA1 ; SBCRN subtract with carry, register - register SBCRN 12NEWSYM FxOp6DA1 ; SBCRN subtract with carry, register - register SBCRN 13NEWSYM FxOp6EA1 ; SBCRN subtract with carry, register - register SBCRN 14NEWSYM FxOp6FA1 ; SBCRN subtract with carry, register - register mov eax,[esi] ; Read Source mov ebx,ebp FETCHPIPE sub ebx,[SfxCPB] cmp byte[SfxCarry],1 sbb ax,bx seto byte[SfxOverflow] setc byte[SfxCarry] xor byte[SfxCarry],1 inc ebp ; Increase program counter mov [edi],eax ; Write Destination mov [SfxSignZero],eax CLRFLAGS retNEWSYM FxOp60A2 ; SUBIRN subtract, register - immediate SUBIRN 0NEWSYM FxOp61A2 ; SUBIRN subtract, register - immediate SUBIRN 1NEWSYM FxOp62A2 ; SUBIRN subtract, register - immediate SUBIRN 2NEWSYM FxOp63A2 ; SUBIRN subtract, register - immediate SUBIRN 3NEWSYM FxOp64A2 ; SUBIRN subtract, register - immediate SUBIRN 4NEWSYM FxOp65A2 ; SUBIRN subtract, register - immediate SUBIRN 5NEWSYM FxOp66A2 ; SUBIRN subtract, register - immediate SUBIRN 6NEWSYM FxOp67A2 ; SUBIRN subtract, register - immediate SUBIRN 7NEWSYM FxOp68A2 ; SUBIRN subtract, register - immediate SUBIRN 8NEWSYM FxOp69A2 ; SUBIRN subtract, register - immediate SUBIRN 9NEWSYM FxOp6AA2 ; SUBIRN subtract, register - immediate SUBIRN 10NEWSYM FxOp6BA2 ; SUBIRN subtract, register - immediate SUBIRN 11NEWSYM FxOp6CA2 ; SUBIRN subtract, register - immediate SUBIRN 12NEWSYM FxOp6DA2 ; SUBIRN subtract, register - immediate SUBIRN 13NEWSYM FxOp6EA2 ; SUBIRN subtract, register - immediate SUBIRN 14NEWSYM FxOp6FA2 ; SUBIRN subtract, register - immediate SUBIRN 15NEWSYM FxOp60A3 ; CMPRN compare, register, register CMPRN 0NEWSYM FxOp61A3 ; CMPRN compare, register, register CMPRN 1NEWSYM FxOp62A3 ; CMPRN compare, register, register CMPRN 2NEWSYM FxOp63A3 ; CMPRN compare, register, register CMPRN 3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -