679 lines
13 KiB
NASM
679 lines
13 KiB
NASM
;Copyright (C) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com )
|
|
;
|
|
;This program is free software; you can redistribute it and/or
|
|
;modify it under the terms of the GNU General Public License
|
|
;as published by the Free Software Foundation; either
|
|
;version 2 of the License, or (at your option) any later
|
|
;version.
|
|
;
|
|
;This program is distributed in the hope that it will be useful,
|
|
;but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;GNU General Public License for more details.
|
|
;
|
|
;You should have received a copy of the GNU General Public License
|
|
;along with this program; if not, write to the Free Software
|
|
;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
%include "macros.mac"
|
|
|
|
EXTSYM NumberOfOpcodes,SfxB,SfxBRAMR,SfxCBR,SfxCFGR,SfxCLSR,SfxCPB,SfxCROM
|
|
EXTSYM SfxCarry,SfxMemTable,SfxOverflow,SfxPBR,SfxPIPE,SfxR0,SfxR1,SfxR10
|
|
EXTSYM SfxR11,SfxR12,SfxR13,SfxR14,SfxR15,SfxR2,SfxR3,SfxR4,SfxR5,SfxR6
|
|
EXTSYM SfxR7,SfxR8,SfxR9,SfxRAMBR,SfxRAMMem,SfxROMBR,SfxSCBR,SfxSCMR,SfxSFR
|
|
EXTSYM SfxSignZero,SfxnRamBanks,StartSFX,regptr,regptw,sfxramdata
|
|
EXTSYM SfxPOR,sfxclineloc,UpdatePORSCMR,UpdateCLSR,UpdateSCBRCOLR,SfxAC
|
|
EXTSYM sfx128lineloc,sfx160lineloc,sfx192lineloc,sfxobjlineloc
|
|
|
|
NEWSYM SfxProcAsmStart
|
|
|
|
%include "regs.mac"
|
|
%include "regsw.mac"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
%macro AssembleSFXFlags 0
|
|
and word[SfxSFR],8F60h
|
|
test byte[SfxCarry],1
|
|
jz .nosfxcarry
|
|
or word[SfxSFR],04h
|
|
.nosfxcarry
|
|
cmp word[SfxSignZero],0
|
|
jne .nozero
|
|
or word[SfxSFR],02h
|
|
.nozero
|
|
test word[SfxSignZero],8000h
|
|
jz .noneg
|
|
or word[SfxSFR],08h
|
|
.noneg
|
|
cmp byte[SfxOverflow],0
|
|
je .noof
|
|
or word[SfxSFR],10h
|
|
.noof
|
|
cmp byte[SfxB],0
|
|
je .bzero
|
|
or word[SfxSFR],1000h
|
|
.bzero
|
|
%endmacro
|
|
|
|
|
|
NEWSYM initsfxregsr
|
|
setreg 3000h*4,reg3000r
|
|
setreg 3001h*4,reg3001r
|
|
setreg 3002h*4,reg3002r
|
|
setreg 3003h*4,reg3003r
|
|
setreg 3004h*4,reg3004r
|
|
setreg 3005h*4,reg3005r
|
|
setreg 3006h*4,reg3006r
|
|
setreg 3007h*4,reg3007r
|
|
setreg 3008h*4,reg3008r
|
|
setreg 3009h*4,reg3009r
|
|
setreg 300Ah*4,reg300Ar
|
|
setreg 300Bh*4,reg300Br
|
|
setreg 300Ch*4,reg300Cr
|
|
setreg 300Dh*4,reg300Dr
|
|
setreg 300Eh*4,reg300Er
|
|
setreg 300Fh*4,reg300Fr
|
|
setreg 3010h*4,reg3010r
|
|
setreg 3011h*4,reg3011r
|
|
setreg 3012h*4,reg3012r
|
|
setreg 3013h*4,reg3013r
|
|
setreg 3014h*4,reg3014r
|
|
setreg 3015h*4,reg3015r
|
|
setreg 3016h*4,reg3016r
|
|
setreg 3017h*4,reg3017r
|
|
setreg 3018h*4,reg3018r
|
|
setreg 3019h*4,reg3019r
|
|
setreg 301Ah*4,reg301Ar
|
|
setreg 301Bh*4,reg301Br
|
|
setreg 301Ch*4,reg301Cr
|
|
setreg 301Dh*4,reg301Dr
|
|
setreg 301Eh*4,reg301Er
|
|
setreg 301Fh*4,reg301Fr
|
|
setreg 3030h*4,reg3030r
|
|
setreg 3031h*4,reg3031r
|
|
setreg 3032h*4,reg3032r
|
|
setreg 3033h*4,reg3033r
|
|
setreg 3034h*4,reg3034r
|
|
setreg 3035h*4,reg3035r
|
|
setreg 3036h*4,reg3036r
|
|
setreg 3037h*4,reg3037r
|
|
setreg 3038h*4,reg3038r
|
|
setreg 3039h*4,reg3039r
|
|
setreg 303Ah*4,reg303Ar
|
|
setreg 303Bh*4,reg303Br
|
|
setreg 303Ch*4,reg303Cr
|
|
setreg 303Dh*4,reg303Dr
|
|
setreg 303Eh*4,reg303Er
|
|
setreg 303Fh*4,reg303Fr
|
|
; set 3100-31FF to cacheregr
|
|
mov edi,3100h*4
|
|
add edi,[regptr]
|
|
mov eax,cacheregr
|
|
mov ecx,200h
|
|
.loop
|
|
mov [edi],eax
|
|
add edi,4
|
|
dec ecx
|
|
jnz .loop
|
|
ret
|
|
|
|
NEWSYM initsfxregsw
|
|
setregw 3000h*4,reg3000w
|
|
setregw 3001h*4,reg3001w
|
|
setregw 3002h*4,reg3002w
|
|
setregw 3003h*4,reg3003w
|
|
setregw 3004h*4,reg3004w
|
|
setregw 3005h*4,reg3005w
|
|
setregw 3006h*4,reg3006w
|
|
setregw 3007h*4,reg3007w
|
|
setregw 3008h*4,reg3008w
|
|
setregw 3009h*4,reg3009w
|
|
setregw 300Ah*4,reg300Aw
|
|
setregw 300Bh*4,reg300Bw
|
|
setregw 300Ch*4,reg300Cw
|
|
setregw 300Dh*4,reg300Dw
|
|
setregw 300Eh*4,reg300Ew
|
|
setregw 300Fh*4,reg300Fw
|
|
setregw 3010h*4,reg3010w
|
|
setregw 3011h*4,reg3011w
|
|
setregw 3012h*4,reg3012w
|
|
setregw 3013h*4,reg3013w
|
|
setregw 3014h*4,reg3014w
|
|
setregw 3015h*4,reg3015w
|
|
setregw 3016h*4,reg3016w
|
|
setregw 3017h*4,reg3017w
|
|
setregw 3018h*4,reg3018w
|
|
setregw 3019h*4,reg3019w
|
|
setregw 301Ah*4,reg301Aw
|
|
setregw 301Bh*4,reg301Bw
|
|
setregw 301Ch*4,reg301Cw
|
|
setregw 301Dh*4,reg301Dw
|
|
setregw 301Eh*4,reg301Ew
|
|
setregw 301Fh*4,reg301Fw
|
|
setregw 3030h*4,reg3030w
|
|
setregw 3031h*4,reg3031w
|
|
setregw 3032h*4,reg3032w
|
|
setregw 3033h*4,reg3033w
|
|
setregw 3034h*4,reg3034w
|
|
setregw 3035h*4,reg3035w
|
|
setregw 3036h*4,reg3036w
|
|
setregw 3037h*4,reg3037w
|
|
setregw 3038h*4,reg3038w
|
|
setregw 3039h*4,reg3039w
|
|
setregw 303Ah*4,reg303Aw
|
|
setregw 303Bh*4,reg303Bw
|
|
setregw 303Ch*4,reg303Cw
|
|
setregw 303Dh*4,reg303Dw
|
|
setregw 303Eh*4,reg303Ew
|
|
setregw 303Fh*4,reg303Fw
|
|
; set 3100-31FF to cacheregw
|
|
mov edi,3100h*4
|
|
add edi,[regptw]
|
|
mov eax,cacheregw
|
|
mov ecx,200h
|
|
.loop
|
|
mov [edi],eax
|
|
add edi,4
|
|
dec ecx
|
|
jnz .loop
|
|
ret
|
|
|
|
NEWSYM cacheregr
|
|
or byte[cachewarning],1
|
|
ret
|
|
|
|
NEWSYM cacheregw
|
|
or byte[cachewarning],2
|
|
ret
|
|
|
|
SECTION .bss
|
|
NEWSYM cachewarning, resb 1
|
|
NEWSYM SFXProc, resd 1
|
|
NEWSYM ChangeOps, resd 1
|
|
|
|
SECTION .text
|
|
|
|
; SFX Registers
|
|
|
|
NEWSYM reg3000r
|
|
mov al,[SfxR0]
|
|
ret
|
|
NEWSYM reg3001r
|
|
mov al,[SfxR0+1]
|
|
ret
|
|
NEWSYM reg3002r
|
|
mov al,[SfxR1]
|
|
ret
|
|
NEWSYM reg3003r
|
|
mov al,[SfxR1+1]
|
|
ret
|
|
NEWSYM reg3004r
|
|
mov al,[SfxR2]
|
|
ret
|
|
NEWSYM reg3005r
|
|
mov al,[SfxR2+1]
|
|
ret
|
|
NEWSYM reg3006r
|
|
mov al,[SfxR3]
|
|
ret
|
|
NEWSYM reg3007r
|
|
mov al,[SfxR3+1]
|
|
ret
|
|
NEWSYM reg3008r
|
|
mov al,[SfxR4]
|
|
ret
|
|
NEWSYM reg3009r
|
|
mov al,[SfxR4+1]
|
|
ret
|
|
NEWSYM reg300Ar
|
|
mov al,[SfxR5]
|
|
ret
|
|
NEWSYM reg300Br
|
|
mov al,[SfxR5+1]
|
|
ret
|
|
NEWSYM reg300Cr
|
|
mov al,[SfxR6]
|
|
ret
|
|
NEWSYM reg300Dr
|
|
mov al,[SfxR6+1]
|
|
ret
|
|
NEWSYM reg300Er
|
|
mov al,[SfxR7]
|
|
ret
|
|
NEWSYM reg300Fr
|
|
mov al,[SfxR7+1]
|
|
ret
|
|
NEWSYM reg3010r
|
|
mov al,[SfxR8]
|
|
ret
|
|
NEWSYM reg3011r
|
|
mov al,[SfxR8+1]
|
|
ret
|
|
NEWSYM reg3012r
|
|
mov al,[SfxR9]
|
|
ret
|
|
NEWSYM reg3013r
|
|
mov al,[SfxR9+1]
|
|
ret
|
|
NEWSYM reg3014r
|
|
mov al,[SfxR10]
|
|
ret
|
|
NEWSYM reg3015r
|
|
mov al,[SfxR10+1]
|
|
ret
|
|
NEWSYM reg3016r
|
|
mov al,[SfxR11]
|
|
ret
|
|
NEWSYM reg3017r
|
|
mov al,[SfxR11+1]
|
|
ret
|
|
NEWSYM reg3018r
|
|
mov al,[SfxR12]
|
|
ret
|
|
NEWSYM reg3019r
|
|
mov al,[SfxR12+1]
|
|
ret
|
|
NEWSYM reg301Ar
|
|
mov al,[SfxR13]
|
|
ret
|
|
NEWSYM reg301Br
|
|
mov al,[SfxR13+1]
|
|
ret
|
|
NEWSYM reg301Cr
|
|
mov al,[SfxR14]
|
|
ret
|
|
NEWSYM reg301Dr
|
|
mov al,[SfxR14+1]
|
|
ret
|
|
NEWSYM reg301Er
|
|
mov al,[SfxR15]
|
|
ret
|
|
NEWSYM reg301Fr
|
|
mov al,[SfxR15+1]
|
|
ret
|
|
|
|
; Other SFX stuff
|
|
|
|
NEWSYM reg3030r
|
|
AssembleSFXFlags
|
|
mov al,[SfxSFR]
|
|
ret
|
|
NEWSYM reg3031r
|
|
cmp byte[SfxAC],1
|
|
je .alwaysclear
|
|
cmp dword[ChangeOps],-350*240
|
|
jl .noclear
|
|
.alwaysclear
|
|
and byte[SfxSFR+1],07fh ; clear IRQ flag
|
|
jmp .cleared
|
|
.noclear
|
|
cmp dword[ChangeOps],-350*240*4
|
|
jge .clear
|
|
mov dword[ChangeOps],-350*240*4
|
|
jmp .cleared
|
|
.clear
|
|
add dword[ChangeOps],350*240
|
|
.cleared
|
|
mov al,[SfxSFR+1]
|
|
ret
|
|
SECTION .bss
|
|
.test resb 1
|
|
SECTION .text
|
|
|
|
NEWSYM reg3032r ; Unused
|
|
xor al,al
|
|
ret
|
|
NEWSYM reg3033r ; BRAMR Backup Ram Read only on/off (bits 1-15 unused)
|
|
mov al,[SfxBRAMR]
|
|
ret
|
|
NEWSYM reg3034r ; PBR (Program Bank)
|
|
mov al,[SfxPBR]
|
|
ret
|
|
NEWSYM reg3035r ; Unused
|
|
xor al,al
|
|
ret
|
|
NEWSYM reg3036r ; ROMBR (Gamepak Rom Bank Register)
|
|
mov al,[SfxROMBR]
|
|
ret
|
|
NEWSYM reg3037r ; CFGR (Control Flags Register)
|
|
mov al,[SfxCFGR]
|
|
ret
|
|
NEWSYM reg3038r ; SCBR (Screen Bank Register)
|
|
mov al,[SfxSCBR]
|
|
ret
|
|
NEWSYM reg3039r ; CLSR (Clock Speed Register)
|
|
mov al,[SfxCLSR]
|
|
ret
|
|
NEWSYM reg303Ar ; SCMR (Screen Mode Register)
|
|
mov al,[SfxSCMR]
|
|
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
|
|
ret
|
|
NEWSYM reg303Br ; VCR (Version Code Register)
|
|
mov al,20h
|
|
ret
|
|
NEWSYM reg303Cr ; RAMBR (Ram bank register)
|
|
mov al,[SfxRAMBR]
|
|
ret
|
|
NEWSYM reg303Dr ; Unused
|
|
xor al,al
|
|
ret
|
|
NEWSYM reg303Er ; CBR (Cache Base Register), lower byte
|
|
mov al,[SfxCBR]
|
|
ret
|
|
NEWSYM reg303Fr ; CBR (Cache Base Register), upper byte
|
|
mov al,[SfxCBR+1]
|
|
ret
|
|
|
|
; SFX Write Registers
|
|
|
|
NEWSYM reg3000w
|
|
mov [SfxR0],al
|
|
ret
|
|
NEWSYM reg3001w
|
|
mov [SfxR0+1],al
|
|
ret
|
|
NEWSYM reg3002w
|
|
mov [SfxR1],al
|
|
ret
|
|
NEWSYM reg3003w
|
|
mov [SfxR1+1],al
|
|
ret
|
|
NEWSYM reg3004w
|
|
mov [SfxR2],al
|
|
ret
|
|
NEWSYM reg3005w
|
|
mov [SfxR2+1],al
|
|
ret
|
|
NEWSYM reg3006w
|
|
mov [SfxR3],al
|
|
ret
|
|
NEWSYM reg3007w
|
|
mov [SfxR3+1],al
|
|
ret
|
|
NEWSYM reg3008w
|
|
mov [SfxR4],al
|
|
ret
|
|
NEWSYM reg3009w
|
|
mov [SfxR4+1],al
|
|
ret
|
|
NEWSYM reg300Aw
|
|
mov [SfxR5],al
|
|
ret
|
|
NEWSYM reg300Bw
|
|
mov [SfxR5+1],al
|
|
ret
|
|
NEWSYM reg300Cw
|
|
mov [SfxR6],al
|
|
ret
|
|
NEWSYM reg300Dw
|
|
mov [SfxR6+1],al
|
|
ret
|
|
NEWSYM reg300Ew
|
|
mov [SfxR7],al
|
|
ret
|
|
NEWSYM reg300Fw
|
|
mov [SfxR7+1],al
|
|
ret
|
|
NEWSYM reg3010w
|
|
mov [SfxR8],al
|
|
ret
|
|
NEWSYM reg3011w
|
|
mov [SfxR8+1],al
|
|
ret
|
|
NEWSYM reg3012w
|
|
mov [SfxR9],al
|
|
ret
|
|
NEWSYM reg3013w
|
|
mov [SfxR9+1],al
|
|
ret
|
|
NEWSYM reg3014w
|
|
mov [SfxR10],al
|
|
ret
|
|
NEWSYM reg3015w
|
|
mov [SfxR10+1],al
|
|
ret
|
|
NEWSYM reg3016w
|
|
mov [SfxR11],al
|
|
ret
|
|
NEWSYM reg3017w
|
|
mov [SfxR11+1],al
|
|
ret
|
|
NEWSYM reg3018w
|
|
mov [SfxR12],al
|
|
ret
|
|
NEWSYM reg3019w
|
|
mov [SfxR12+1],al
|
|
ret
|
|
NEWSYM reg301Aw
|
|
mov [SfxR13],al
|
|
ret
|
|
NEWSYM reg301Bw
|
|
mov [SfxR13+1],al
|
|
ret
|
|
NEWSYM reg301Cw
|
|
mov [SfxR14],al
|
|
ret
|
|
NEWSYM reg301Dw
|
|
mov [SfxR14+1],al
|
|
ret
|
|
NEWSYM reg301Ew
|
|
mov [SfxR15],al
|
|
ret
|
|
NEWSYM reg301Fw
|
|
mov [SfxR15+1],al
|
|
; start execution
|
|
push edx
|
|
mov edx,[SfxPBR]
|
|
mov edx,[SfxMemTable+edx*4]
|
|
add edx,[SfxR15]
|
|
mov dl,[edx]
|
|
mov [SfxPIPE],dl
|
|
pop edx
|
|
inc word[SfxR15]
|
|
or byte[SfxSFR],20h
|
|
or dword [SfxSFR],08000h ; Set IRQ Flag
|
|
mov dword[SFXProc],1
|
|
; call StartSFXret
|
|
ret
|
|
|
|
; Other SFX stuff
|
|
|
|
NEWSYM reg3030w
|
|
mov [SfxSFR],al
|
|
; mov dh,10
|
|
; Disassemble Flags
|
|
test al,20h
|
|
jz .noexec
|
|
mov dword [NumberOfOpcodes],100
|
|
call StartSFX
|
|
.noexec
|
|
ret
|
|
NEWSYM reg3031w
|
|
mov [SfxSFR+1],al
|
|
ret
|
|
NEWSYM reg3032w ; Unused
|
|
ret
|
|
NEWSYM reg3033w ; BRAMR Backup Ram Read only on/off (bits 1-15 unused)
|
|
and al,0FEh
|
|
mov [SfxBRAMR],al
|
|
ret
|
|
NEWSYM reg3034w ; PBR (Program Bank)
|
|
mov [SfxPBR],al
|
|
xor ebx,ebx
|
|
mov bl,al
|
|
mov ebx,[SfxMemTable+ebx*4]
|
|
mov [SfxCPB],ebx
|
|
ret
|
|
NEWSYM reg3035w ; Unused
|
|
ret
|
|
NEWSYM reg3036w ; ROMBR (Gamepak Rom Bank Register)
|
|
mov [SfxROMBR],al
|
|
xor ebx,ebx
|
|
mov bl,al
|
|
mov ebx,[SfxMemTable+ebx*4]
|
|
mov [SfxCROM],ebx
|
|
ret
|
|
NEWSYM reg3037w ; CFGR (Control Flags Register)
|
|
mov [SfxCFGR],al
|
|
ret
|
|
NEWSYM reg3038w ; SCBR (Screen Bank Register)
|
|
mov [SfxSCBR],al
|
|
call UpdateSCBRCOLR
|
|
ret
|
|
NEWSYM reg3039w ; CLSR (Clock Speed Register)
|
|
and al,0FEh
|
|
mov [SfxCLSR],al
|
|
call UpdateCLSR
|
|
ret
|
|
NEWSYM reg303Aw ; SCMR (Screen Mode Register)
|
|
mov [SfxSCMR],al
|
|
call UpdatePORSCMR
|
|
ret
|
|
NEWSYM reg303Bw ; VCR (Version Code Register)
|
|
ret
|
|
NEWSYM reg303Cw ; RAMBR (Ram bank register)
|
|
mov bl,[SfxnRamBanks]
|
|
dec bl
|
|
and al,bl
|
|
mov ebx,[SfxnRamBanks]
|
|
dec ebx
|
|
and eax,ebx
|
|
mov [SfxRAMBR],eax
|
|
xor ebx,ebx
|
|
mov bl,al
|
|
shl ebx,16
|
|
add ebx,[sfxramdata]
|
|
mov dword [SfxRAMMem],ebx
|
|
ret
|
|
NEWSYM reg303Dw ; Unused
|
|
ret
|
|
NEWSYM reg303Ew ; CBR (Cache Base Register), lower byte
|
|
mov [SfxCBR],al
|
|
ret
|
|
NEWSYM reg303Fw ; CBR (Cache Base Register), upper byte
|
|
mov [SfxCBR+1],al
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr8
|
|
mov ebx,[sfxramdata]
|
|
mov al,[ebx+ecx]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw8
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx],al
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr16
|
|
mov ebx,[sfxramdata]
|
|
mov ax,[ebx+ecx]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw16
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx],ax
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr8b
|
|
mov ebx,[sfxramdata]
|
|
mov al,[ebx+ecx+65536]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw8b
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx+65536],al
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr16b
|
|
mov ebx,[sfxramdata]
|
|
mov ax,[ebx+ecx+65536]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw16b
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx+65536],ax
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr8c
|
|
mov ebx,[sfxramdata]
|
|
mov al,[ebx+ecx+65536*2]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw8c
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx+65536*2],al
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr16c
|
|
mov ebx,[sfxramdata]
|
|
mov ax,[ebx+ecx+65536*2]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw16c
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx+65536*2],ax
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr8d
|
|
mov ebx,[sfxramdata]
|
|
mov al,[ebx+ecx+65536*3]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw8d
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx+65536*3],al
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankr16d
|
|
mov ebx,[sfxramdata]
|
|
mov ax,[ebx+ecx+65536*3]
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM sfxaccessbankw16d
|
|
mov ebx,[sfxramdata]
|
|
mov [ebx+ecx+65536*3],ax
|
|
xor ebx,ebx
|
|
ret
|
|
|
|
NEWSYM SfxProcAsmEnd
|