📄 fxemu2c.asm
字号:
mov dword [SfxB],0
or ch,03h
inc ebp
call [FxTable+ecx*4]
xor ch,ch
FXReturn
NEWSYM FxOpd40 ; LDW RN load word from RAM
LDWRNc 0
NEWSYM FxOpd41 ; LDW RN load word from RAM
LDWRNc 1
NEWSYM FxOpd42 ; LDW RN load word from RAM
LDWRNc 2
NEWSYM FxOpd43 ; LDW RN load word from RAM
LDWRNc 3
NEWSYM FxOpd44 ; LDW RN load word from RAM
LDWRNc 4
NEWSYM FxOpd45 ; LDW RN load word from RAM
LDWRNc 5
NEWSYM FxOpd46 ; LDW RN load word from RAM
LDWRNc 6
NEWSYM FxOpd47 ; LDW RN load word from RAM
LDWRNc 7
NEWSYM FxOpd48 ; LDW RN load word from RAM
LDWRNc 8
NEWSYM FxOpd49 ; LDW RN load word from RAM
LDWRNc 9
NEWSYM FxOpd4A ; LDW RN load word from RAM
LDWRNc 10
NEWSYM FxOpd4B ; LDW RN load word from RAM
LDWRNc 11
NEWSYM 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 5
NEWSYM 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 8
NEWSYM FxOpd49A1 ; LDB RN load byte from RAM
LDBRNc 9
NEWSYM FxOpd4AA1 ; LDB RN load byte from RAM
LDBRNc 10
NEWSYM FxOpd4BA1 ; LDB RN load byte from RAM
LDBRNc 11
NEWSYM FxOpd4C1284b ; PLOT 4bit
plotlines4bb plotb
NEWSYM FxOpd4C1284bz ; PLOT 4bit, zero check
plotlines4bb plotbz
NEWSYM FxOpd4C1284bd ; PLOT 4bit, dither
plotlines4bb plotbd
NEWSYM FxOpd4C1284bzd ; PLOT 4bit, zero check + dither
plotlines4bb plotbzd
NEWSYM FxOpd4C1282b ; PLOT 2bit
plotlines2bb plotb
NEWSYM FxOpd4C1282bz ; PLOT 2bit, zero check
plotlines2bb plotbz
NEWSYM FxOpd4C1282bd ; PLOT 2bit, dither
plotlines2bb plotbd
NEWSYM FxOpd4C1282bzd ; PLOT 2bit, zero check + dither
plotlines2bb plotbzd
NEWSYM FxOpd4C1288b ; PLOT 8bit
plotlines8bb plotb
NEWSYM FxOpd4C1288bz ; PLOT 8bit, zero check
plotlines8bb plotbz
NEWSYM FxOpd4C1288bd ; PLOT 8bit, dither
plotlines8bb plotb
NEWSYM FxOpd4C1288bzd ; PLOT 8bit, zero check + dither
plotlines8bb plotbz
NEWSYM FxOpd4C1288bl ; PLOT 8bit
plotlines8bbl plotb
NEWSYM FxOpd4C1288bzl ; PLOT 8bit, zero check
plotlines8bbl plotbz
NEWSYM FxOpd4C1288bdl ; PLOT 8bit, dither
plotlines8bbl plotb
NEWSYM FxOpd4C1288bzdl ; PLOT 8bit, zero check + dither
plotlines8bbl plotbz
NEWSYM 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 0
NEWSYM 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -