📄 memory.asm
字号:
dw $07ED5,$07E9D,$07E5F,$07E1D,$07DD6,$07D8A,$07D39,$07CE3,$07C89,$07C29,$07BC5
dw $07B5D,$07AEF,$07A7D,$07A05,$0798A,$07909,$07884,$077FA,$0776C,$076D9,$07641
dw $075A5,$07504,$0745F,$073B5,$07307,$07255,$0719E,$070E2,$07023,$06F5F,$06E96
dw $06DCA,$06CF9,$06C24,$06B4A,$06A6D,$0698C,$068A6,$067BD,$066CF,$065DD,$064E8
dw $063EF,$062F2,$061F1,$060EC,$05FE3,$05ED7,$05DC7,$05CB4,$05B9D,$05A82,$05964
dw $05842,$0571D,$055F5,$054CA,$0539B,$05269,$05133,$04FFB,$04EBF,$04D81,$04C3F
dw $04AFB,$049B4,$04869,$0471C,$045CD,$0447A,$04325,$041CE,$04073,$03F17,$03DB8
dw $03C56,$03AF2,$0398C,$03824,$036BA,$0354D,$033DE,$0326E,$030FB,$02F87,$02E11
dw $02C98,$02B1F,$029A3,$02826,$026A8,$02528,$023A6,$02223,$0209F,$01F19,$01D93
dw $01C0B,$01A82,$018F8,$0176D,$015E2,$01455,$012C8,$01139,$00FAB,$00E1B,$00C8B
dw $00AFB,$0096A,$007D9,$00647,$004B6,$00324,$00192,$00000,$0FE6E,$0FCDC,$0FB4A
dw $0F9B9,$0F827,$0F696,$0F505,$0F375,$0F1E5,$0F055,$0EEC7,$0ED38,$0EBAB,$0EA1E
dw $0E893,$0E708,$0E57E,$0E3F5,$0E26D,$0E0E7,$0DF61,$0DDDD,$0DC5A,$0DAD8,$0D958
dw $0D7DA,$0D65D,$0D4E1,$0D368,$0D1EF,$0D079,$0CF05,$0CD92,$0CC22,$0CAB3,$0C946
dw $0C7DC,$0C674,$0C50E,$0C3AA,$0C248,$0C0E9,$0BF8D,$0BE32,$0BCDB,$0BB86,$0BA33
dw $0B8E4,$0B797,$0B64C,$0B505,$0B3C1,$0B27F,$0B141,$0B005,$0AECD,$0AD97,$0AC65
dw $0AB36,$0AA0B,$0A8E3,$0A7BE,$0A69C,$0A57E,$0A463,$0A34C,$0A239,$0A129,$0A01D
dw $09F14,$09E0F,$09D0E,$09C11,$09B18,$09A23,$09931,$09843,$0975A,$09674,$09593
dw $094B6,$093DC,$09307,$09236,$0916A,$090A1,$08FDD,$08F1E,$08E62,$08DAB,$08CF9
dw $08C4B,$08BA1,$08AFC,$08A5B,$089BF,$08927,$08894,$08806,$0877C,$086F7,$08676
dw $085FB,$08583,$08511,$084A3,$0843B,$083D7,$08377,$0831D,$082C7,$08276,$0822A
dw $081E3,$081A1,$08163,$0812B,$080F7,$080C8,$0809E,$08079,$08059,$0803E,$08028
dw $08017,$0800A,$08003
dw $08001,$08003,$0800A,$08017,$08028,$0803E,$08059,$08079,$0809E,$080C8,$080F7,
dw $0812B,$08163,$081A1,$081E3,$0822A,$08276,$082C7,$0831D,$08377,$083D7,$0843B,
dw $084A3,$08511,$08583,$085FB,$08676,$086F7,$0877C,$08806,$08894,$08927,$089BF,
dw $08A5B,$08AFC,$08BA1,$08C4B,$08CF9,$08DAB,$08E62,$08F1E,$08FDD,$090A1,$0916A,
dw $09236,$09307,$093DC,$094B6,$09593,$09674,$0975A,$09843,$09931,$09A23,$09B18,
dw $09C11,$09D0E,$09E0F,$09F14,$0A01D,$0A129,$0A239,$0A34C,$0A463,$0A57E,$0A69C,
dw $0A7BE,$0A8E3,$0AA0B,$0AB36,$0AC65,$0AD97,$0AECD,$0B005,$0B141,$0B27F,$0B3C1,
dw $0B505,$0B64C,$0B797,$0B8E4,$0BA33,$0BB86,$0BCDB,$0BE32,$0BF8D,$0C0E9,$0C248,
dw $0C3AA,$0C50E,$0C674,$0C7DC,$0C946,$0CAB3,$0CC22,$0CD92,$0CF05,$0D079,$0D1EF,
dw $0D368,$0D4E1,$0D65D,$0D7DA,$0D958,$0DAD8,$0DC5A,$0DDDD,$0DF61,$0E0E7,$0E26D,
dw $0E3F5,$0E57E,$0E708,$0E893,$0EA1E,$0EBAB,$0ED38,$0EEC7,$0F055,$0F1E5,$0F375,
dw $0F505,$0F696,$0F827,$0F9B9,$0FB4A,$0FCDC,$0FE6E,$00000,$00192,$00324,$004B6,
dw $00647,$007D9,$0096A,$00AFB,$00C8B,$00E1B,$00FAB,$01139,$012C8,$01455,$015E2,
dw $0176D,$018F8,$01A82,$01C0B,$01D93,$01F19,$0209F,$02223,$023A6,$02528,$026A8,
dw $02826,$029A3,$02B1F,$02C98,$02E11,$02F87,$030FB,$0326E,$033DE,$0354D,$036BA,
dw $03824,$0398C,$03AF2,$03C56,$03DB8,$03F17,$04073,$041CE,$04325,$0447A,$045CD,
dw $0471C,$04869,$049B4,$04AFB,$04C3F,$04D81,$04EBF,$04FFB,$05133,$05269,$0539B,
dw $054CA,$055F5,$0571D,$05842,$05964,$05A82,$05B9D,$05CB4,$05DC7,$05ED7,$05FE3,
dw $060EC,$061F1,$062F2,$063EF,$064E8,$065DD,$066CF,$067BD,$068A6,$0698C,$06A6D,
dw $06B4A,$06C24,$06CF9,$06DCA,$06E96,$06F5F,$07023,$070E2,$0719E,$07255,$07307,
dw $073B5,$0745F,$07504,$075A5,$07641,$076D9,$0776C,$077FA,$07884,$07909,$0798A,
dw $07A05,$07A7D,$07AEF,$07B5D,$07BC5,$07C29,$07C89,$07CE3,$07D39,$07D8A,$07DD6,
dw $07E1D,$07E5F,$07E9D,$07ED5,$07F09,$07F38,$07F62,$07F87,$07FA7,$07FC2,$07FD8,
dw $07FE9,$07FF6,$07FFD
NEWSYM regaccessbankr8
test ecx,8000h
jz .regacc
mov ebx,[snesmmap+ebx*4]
mov al,[ebx+ecx]
xor ebx,ebx
ret
.regacc
cmp ecx,2000h
jae .regs
mov al,[wramdataa+ecx]
ret
.regs
cmp ecx,48FFh
ja .invaccess
call dword near [regptra+ecx*4-8000h]
xor ebx,ebx
ret
.invaccess
cmp ecx,6000h
jae .hiromsram
mov al,ch
ret
.hiromsram
cmp byte[SPC7110Enable],1
je near .spc7110ram
cmp byte[SFXEnable],1
je .sfxram
cmp byte[C4Enable],1
je near .c4ram
cmp byte[OBCEnable],1
je near .c4ram
and ebx,7Fh
cmp bl,10h
jb .dsp1
cmp bl,30h
jae .hiromsramok
xor al,al
xor ebx,ebx
ret
.dsp1
xor al,al
cmp byte[DSP1Type],2
jne .nodsp1
call DSP1Read8b
.nodsp1
xor ebx,ebx
ret
.hiromsramok
push ecx
sub ecx,6000h
and ecx,1fffh
sub bl,30h
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankr8b
pop ecx
ret
.sfxram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[sfxramdata]
mov al,[ebx+ecx]
xor ebx,ebx
pop ecx
ret
.c4ram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[C4RamR]
call dword near [ebx+ecx*4]
xor ebx,ebx
pop ecx
ret
.spc7110ram
push ecx
sub ecx,6000h
and ecx,1fffh
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankr8b
pop ecx
ret
NEWSYM regaccessbankr16
test ecx,8000h
jz .regacc
mov ebx,[snesmmap+ebx*4]
mov ax,[ebx+ecx]
xor ebx,ebx
ret
.regacc
cmp ecx,1FFFh
jae .regs
mov ax,[wramdataa+ecx]
ret
.regs
cmp ecx,48FFh
ja .invaccess
; mov ebx,ecx
; shl ebx,2
; add ebx,[regptr]
; call dword near [ebx]
call dword near [regptra+ecx*4-8000h]
inc ecx
mov ah,al
; mov ebx,ecx
; shl ebx,2
; add ebx,[regptr]
; call dword near [ebx]
call dword near [regptra+ecx*4-8000h]
mov bl,al
dec ecx
mov al,ah
mov ah,bl
xor ebx,ebx
ret
.invaccess
; jmp regexiter
cmp ecx,6000h
jae .hiromsram
mov al,ch
mov ah,ch
ret
.hiromsram
cmp byte[SPC7110Enable],1
je near .spc7110ram
cmp byte[SFXEnable],1
je .sfxram
cmp byte[C4Enable],1
je near .c4ram
cmp byte[OBCEnable],1
je near .c4ram
and ebx,7Fh
cmp bl,10h
jb .dsp1
cmp bl,30h
jae .hiromsramok
xor ax,ax
xor ebx,ebx
ret
.dsp1
xor ax,ax
cmp byte[DSP1Type],2
jne .nodsp1
call DSP1Read16b
.nodsp1
xor ebx,ebx
ret
.hiromsramok
push ecx
sub ecx,6000h
and ecx,1fffh
sub bl,30h
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankr16b
pop ecx
ret
.sfxram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[sfxramdata]
mov ax,[ebx+ecx]
xor ebx,ebx
pop ecx
ret
.c4ram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[C4RamR]
inc ecx
call dword near [ebx+ecx*4]
dec ecx
mov ah,al
call dword near [ebx+ecx*4]
xor ebx,ebx
pop ecx
ret
.spc7110ram
push ecx
sub ecx,6000h
and ecx,1fffh
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankr16b
pop ecx
ret
NEWSYM regaccessbankw8
test ecx,8000h
jnz .romacc
cmp ecx,2000h
jae .regs
mov [wramdataa+ecx],al
ret
.romacc
cmp byte[writeon],0
jne .modrom
ret
.modrom
mov ebx,[snesmmap+ebx*4]
mov [ebx+ecx],al
xor ebx,ebx
ret
.regs
cmp ecx,48FFh
ja .invaccess
; mov ebx,ecx
; shl ebx,2
; add ebx,[regptw]
; call dword near [ebx]
call dword near [regptwa+ecx*4-8000h]
xor ebx,ebx
ret
.invaccess
; jmp regexiter
cmp ecx,6000h
jae .hiromsram
ret
.hiromsram
cmp byte[SPC7110Enable],1
je near .spc7110ram
cmp byte[SFXEnable],1
je .sfxram
cmp byte[C4Enable],1
je near .c4ram
cmp byte[OBCEnable],1
je near .c4ram
and ebx,7Fh
cmp bl,10h
jb .dsp1
cmp bl,30h
jae .hiromsramok
xor ebx,ebx
ret
.dsp1
cmp byte[DSP1Type],2
jne .nodsp1
call DSP1Write8b
.nodsp1
xor ebx,ebx
ret
.hiromsramok
push ecx
sub ecx,6000h
and ecx,1fffh
sub bl,30h
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankw8b
pop ecx
ret
.sfxram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[sfxramdata]
mov [ebx+ecx],al
xor ebx,ebx
pop ecx
ret
.c4ram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[C4RamW]
call dword near [ebx+ecx*4]
xor ebx,ebx
pop ecx
ret
.spc7110ram
push ecx
sub ecx,6000h
and ecx,1fffh
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankw8b
pop ecx
ret
NEWSYM regaccessbankw16
test ecx,8000h
jnz .romacc
cmp ecx,1FFFh
jae .regs
mov [wramdataa+ecx],ax
ret
.romacc
cmp byte[writeon],0
jne .modrom
ret
.modrom
mov ebx,[snesmmap+ebx*4]
mov [ebx+ecx],ax
xor ebx,ebx
ret
.regs
cmp cx,48FFh
ja .invaccess
; mov ebx,ecx
; shl ebx,2
; add ebx,[regptw]
; call dword near [ebx]
call dword near [regptwa+ecx*4-8000h]
inc ecx
mov al,ah
; mov ebx,ecx
; shl ebx,2
; add ebx,[regptw]
; call dword near [ebx]
call dword near [regptwa+ecx*4-8000h]
dec ecx
xor ebx,ebx
ret
.invaccess
; jmp regexiter
cmp ecx,6000h
jae .hiromsram
ret
.hiromsram
cmp byte[SPC7110Enable],1
je near .spc7110ram
cmp byte[SFXEnable],1
je .sfxram
cmp byte[C4Enable],1
je near .c4ram
cmp byte[OBCEnable],1
je near .c4ram
and ebx,7Fh
cmp bl,10h
jb .dsp1
cmp bl,30h
jae .hiromsramok
xor al,al
xor ebx,ebx
ret
.dsp1
cmp byte[DSP1Type],2
jne .nodsp1
call DSP1Write16b
.nodsp1
ret
.hiromsramok
push ecx
sub ecx,6000h
and ecx,1fffh
sub bl,30h
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankw16b
pop ecx
ret
.sfxram
push ecx
sub ecx,6000h
and ecx,1fffh
mov ebx,[sfxramdata]
mov [ebx+ecx],ax
xor ebx,ebx
pop ecx
ret
.c4ram
push ecx
sub ecx,6000h
and ecx,1fffh
; mov ebx,[C4Ram]
; mov [ebx+ecx],ax
mov ebx,[C4RamW]
push eax
call dword near [ebx+ecx*4]
inc ecx
mov al,ah
call dword near [ebx+ecx*4]
pop eax
dec ecx
xor ebx,ebx
pop ecx
ret
.spc7110ram
push ecx
sub ecx,6000h
and ecx,1fffh
shl ebx,13
add ecx,ebx
and ecx,0FFFFh
call sramaccessbankw16b
pop ecx
ret
NEWSYM regaccessbankr8mp
ret
;*******************************************************
; Register & Memory Bank (Bank 0)
;*******************************************************
; enter : BL = bank number, CX = address location
; leave : AL = value read
EXTSYM BWShift,BWAndAddr,BWAnd,BWRAnd,SA1BWPtr
%macro BWCheck 0
cmp byte[BWShift],0
jne near .shift
.nosa1
%endmacro
NEWSYM BWUsed2, db 0
NEWSYM BWUsed, db 0
%macro BWCheck2r8 0
.shift
cmp byte[SA1Status],0
je .nosa1
; mov byte[debstop3],1
; value of 8Fh
test byte[SA1Overflow+1],80h
jnz .2bit
push ecx
push ebx
sub ecx,6000h
push eax
mov eax,ecx
and eax,01h
shl eax,2
shr ecx,1
mov ebx,ecx
mov cl,al
pop eax
mov al,0Fh
shl al,cl
add ebx,[SA1BWPtr]
and al,[ebx]
shr al,cl
pop ebx
pop ecx
ret
.2bit
push ecx
push ebx
sub ecx,6000h
push eax
mov eax,ecx
and eax,03h
shl eax,1
shr ecx,2
mov ebx,ecx
mov cl,al
pop eax
mov al,03h
shl al,cl
add ebx,[SA1BWPtr]
and al,[ebx]
shr al,cl
pop ebx
pop ecx
ret
%endmacro
%macro BWCheck2r16 0
.shift
cmp byte[SA1Status],0
je .nosa1
; value of 8Fh
test byte[SA1Overflow+1],80h
jnz .2bit
push ecx
push ebx
sub ecx,6000h
push eax
mov eax,ecx
and eax,01h
shl eax,2
shr ecx,1
mov ebx,ecx
mov cl,al
pop eax
mov al,0Fh
shl al,cl
add ebx,[SA1BWPtr]
and al,[ebx]
shr al,cl
pop ebx
pop ecx
push ecx
push ebx
sub ecx,6000h
inc ecx
push eax
mov eax,ecx
and eax,01h
shl eax,2
shr ecx,1
mov ebx,ecx
mov cl,al
pop eax
mov ah,0Fh
shl ah,cl
add ebx,[SA1BWPtr]
and ah,[ebx]
shr ah,cl
pop ebx
pop ecx
ret
.2bit
push ecx
push ebx
sub ecx,6000h
push eax
mov eax,ecx
and eax,03h
shl eax,1
shr ecx,2
mov ebx,ecx
mov cl,al
pop eax
mov al,03h
shl al,cl
add ebx,[SA1BWPtr]
and al,[ebx]
shr al,cl
pop ebx
pop ecx
push ecx
push ebx
inc ecx
sub ecx,6000h
push eax
mov eax,ecx
and eax,03h
shl eax,1
shr ecx,2
mov ebx,ecx
mov cl,al
pop eax
mov ah,03h
shl ah,cl
add ebx,[SA1BWPtr]
and ah,[ebx]
shr ah,cl
pop ebx
pop ecx
ret
%endmacro
%macro BWCheck2w8 0
.shift
cmp byte[SA1Status],0
je .nosa1
test byte[SA1Overflow+1],80h
jnz .2bit
push ecx
push ebx
push edx
sub ecx,6000h
push eax
mov eax,ecx
and eax,01h
shl eax,2
shr ecx,1
mov ebx,ecx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -