SA-1 bitmap bwram memory fixed (Mario RPG level up fixed)

This commit is contained in:
zsknight
2001-05-25 08:54:31 +00:00
parent bc85d3a705
commit a11acec10e

View File

@@ -2949,6 +2949,318 @@ NEWSYM regaccessbankr8mp
; enter : BL = bank number, CX = address location ; enter : BL = bank number, CX = address location
; leave : AL = value read ; 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
mov cl,al
pop eax
mov dh,0Fh
shl dh,cl
xor dh,0FFh
and al,0Fh
shl al,cl
add ebx,[SA1BWPtr]
and byte[ebx],dh
or byte[ebx],al
pop edx
pop ebx
pop ecx
ret
.2bit
push ecx
push ebx
push edx
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 dh,03h
shl dh,cl
xor dh,0FFh
and al,03h
shl al,cl
add ebx,[SA1BWPtr]
and byte[ebx],dh
or byte[ebx],al
pop edx
pop ebx
pop ecx
ret
%endmacro
%macro BWCheck2w16 0
.shift
cmp byte[SA1Status],0
je .nosa1
test byte[SA1Overflow+1],80h
jnz .2bit
push eax
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
mov cl,al
pop eax
mov dh,0Fh
shl dh,cl
xor dh,0FFh
and al,0Fh
shl al,cl
add ebx,[SA1BWPtr]
and byte[ebx],dh
or byte[ebx],al
pop edx
pop ebx
pop ecx
pop eax
push ecx
push ebx
push edx
inc ecx
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 dh,0Fh
shl dh,cl
xor dh,0FFh
and ah,0Fh
shl ah,cl
add ebx,[SA1BWPtr]
and byte[ebx],dh
or byte[ebx],ah
pop edx
pop ebx
pop ecx
ret
.2bit
push eax
push ecx
push ebx
push edx
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 dh,03h
shl dh,cl
xor dh,0FFh
and al,03h
shl al,cl
add ebx,[SA1BWPtr]
and byte[ebx],dh
or byte[ebx],al
pop edx
pop ebx
pop ecx
pop eax
push ecx
push ebx
push edx
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 dh,03h
shl dh,cl
xor dh,0FFh
and ah,03h
shl ah,cl
add ebx,[SA1BWPtr]
and byte[ebx],dh
or byte[ebx],ah
pop edx
pop ebx
pop ecx
ret
%endmacro
%macro writetobank0table 2 %macro writetobank0table 2
mov ebx,%1 mov ebx,%1
mov ecx,%2 mov ecx,%2
@@ -3130,10 +3442,13 @@ NEWSYM membank0r8chip ; 6000-7FFF
pop ecx pop ecx
ret ret
.sa1ram .sa1ram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov al,[ebx+ecx] mov al,[ebx+ecx]
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2r8
NEWSYM membank0r8rom ; 8000-FFFF NEWSYM membank0r8rom ; 8000-FFFF
add ebx,[snesmmap] add ebx,[snesmmap]
mov al,[ebx+ecx] mov al,[ebx+ecx]
@@ -3205,10 +3520,12 @@ NEWSYM membank0r16chip ; 6000-FFFF
pop ecx pop ecx
ret ret
.sa1ram .sa1ram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov ax,[ebx+ecx] mov ax,[ebx+ecx]
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2r16
NEWSYM membank0r16rom ; 8000-FFFF NEWSYM membank0r16rom ; 8000-FFFF
add ebx,[snesmmap] add ebx,[snesmmap]
mov ax,[ebx+ecx] mov ax,[ebx+ecx]
@@ -3258,10 +3575,12 @@ NEWSYM membank0w8chip ; 6000-FFFF
pop ecx pop ecx
ret ret
.sa1ram .sa1ram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov [ebx+ecx],al mov [ebx+ecx],al
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2w8
NEWSYM membank0w8rom ; 8000-FFFF NEWSYM membank0w8rom ; 8000-FFFF
ret ret
NEWSYM membank0w8romram ; 0000-1FFF NEWSYM membank0w8romram ; 0000-1FFF
@@ -3319,10 +3638,12 @@ NEWSYM membank0w16rom ; 8000-FFFF
pop ecx pop ecx
ret ret
.sa1ram .sa1ram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov [ebx+ecx],ax mov [ebx+ecx],ax
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2w16
NEWSYM membank0w16romram ; 0000-1FFF NEWSYM membank0w16romram ; 0000-1FFF
add cx,bx add cx,bx
test cx,8000h test cx,8000h
@@ -3577,10 +3898,12 @@ NEWSYM membank0r8SA1
xor al,al xor al,al
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov al,[ebx+ecx] mov al,[ebx+ecx]
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2r8
NEWSYM membank0r16SA1 NEWSYM membank0r16SA1
test ecx,8000h test ecx,8000h
@@ -3620,10 +3943,12 @@ NEWSYM membank0r16SA1
xor ax,ax xor ax,ax
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov ax,[ebx+ecx] mov ax,[ebx+ecx]
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2r16
NEWSYM membank0w8SA1 NEWSYM membank0w8SA1
test ecx,8000h test ecx,8000h
@@ -3652,10 +3977,12 @@ NEWSYM membank0w8SA1
jae .bwram jae .bwram
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov [ebx+ecx],al mov [ebx+ecx],al
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2w8
NEWSYM membank0w16SA1 NEWSYM membank0w16SA1
test ecx,8000h test ecx,8000h
@@ -3688,10 +4015,12 @@ NEWSYM membank0w16SA1
jae .bwram jae .bwram
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov [ebx+ecx],ax mov [ebx+ecx],ax
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2w16
;******************************************************* ;*******************************************************
; ROM Only Access Banks (40 - 6F) / (C0 - FF) ; ROM Only Access Banks (40 - 6F) / (C0 - FF)
@@ -3725,7 +4054,7 @@ NEWSYM memaccessspc7110r8
inc word[CurDecompSize] inc word[CurDecompSize]
ret ret
mov byte[debstop3],1 ; mov byte[debstop3],1
mov ebx,[romdata] mov ebx,[romdata]
add ebx,510000h add ebx,510000h
mov al,[ebx+ecx] mov al,[ebx+ecx]
@@ -3740,7 +4069,7 @@ NEWSYM memaccessspc7110r8
xor ebx,ebx xor ebx,ebx
ret ret
NEWSYM memaccessspc7110r16 NEWSYM memaccessspc7110r16
mov byte[debstop3],1 ; mov byte[debstop3],1
mov ebx,[romdata] mov ebx,[romdata]
add ebx,510000h add ebx,510000h
mov ax,[ebx+ecx] mov ax,[ebx+ecx]
@@ -4085,10 +4414,12 @@ NEWSYM regaccessbankr8SA1
xor al,al xor al,al
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov al,[ebx+ecx] mov al,[ebx+ecx]
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2r8
NEWSYM regaccessbankr16SA1 NEWSYM regaccessbankr16SA1
test ecx,8000h test ecx,8000h
@@ -4128,10 +4459,12 @@ NEWSYM regaccessbankr16SA1
xor ax,ax xor ax,ax
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov ax,[ebx+ecx] mov ax,[ebx+ecx]
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2r16
NEWSYM regaccessbankw8SA1 NEWSYM regaccessbankw8SA1
test ecx,8000h test ecx,8000h
@@ -4167,10 +4500,12 @@ NEWSYM regaccessbankw8SA1
jae .bwram jae .bwram
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov [ebx+ecx],al mov [ebx+ecx],al
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2w8
NEWSYM regaccessbankw16SA1 NEWSYM regaccessbankw16SA1
test ecx,8000h test ecx,8000h
@@ -4210,10 +4545,12 @@ NEWSYM regaccessbankw16SA1
jae .bwram jae .bwram
ret ret
.bwram .bwram
BWCheck
mov ebx,[CurBWPtr] mov ebx,[CurBWPtr]
mov [ebx+ecx],ax mov [ebx+ecx],ax
xor ebx,ebx xor ebx,ebx
ret ret
BWCheck2w16
NEWSYM SA1RAMaccessbankr8 NEWSYM SA1RAMaccessbankr8
and ebx,03h and ebx,03h
@@ -4249,7 +4586,7 @@ NEWSYM SA1RAMaccessbankw16
NEWSYM SA1RAMaccessbankr8b NEWSYM SA1RAMaccessbankr8b
test byte[SA1Overflow],80h test byte[SA1Overflow+1],80h
jnz .2bit jnz .2bit
and ebx,07h and ebx,07h
shl ebx,15 shl ebx,15
@@ -4305,7 +4642,7 @@ NEWSYM SA1RAMaccessbankr8b
ret ret
NEWSYM SA1RAMaccessbankr16b NEWSYM SA1RAMaccessbankr16b
test byte[SA1Overflow],80h test byte[SA1Overflow+1],80h
jnz .2bit jnz .2bit
and ebx,07h and ebx,07h
shl ebx,15 shl ebx,15
@@ -4375,11 +4712,78 @@ NEWSYM SA1RAMaccessbankr16b
ret ret
NEWSYM SA1RAMaccessbankw8b NEWSYM SA1RAMaccessbankw8b
test byte[SA1Overflow+1],80h
jnz .2bit
and ebx,07h
shl ebx,15
test ecx,1
jnz .4bitb
shr ecx,1
add ebx,[SA1RAMArea]
and al,0Fh
and byte[ebx+ecx],0F0h
or byte[ebx+ecx],al
xor ebx,ebx
ret
.4bitb
shr ecx,1
add ebx,[SA1RAMArea]
and al,0Fh
shl al,4
and byte[ebx+ecx],0Fh
or byte[ebx+ecx],al
xor ebx,ebx
ret
.2bit
and ebx,0Fh
shl ebx,14
add ebx,[SA1RAMArea]
test ecx,2
jnz .bit1
test ecx,1
jnz .bit0
shr ecx,2
and byte[ebx+ecx],0FCh
and al,3
or byte[ebx+ecx],al
xor ebx,ebx
ret
.bit0
shr ecx,2
and byte[ebx+ecx],0F3h
and al,3
shl al,2
or byte[ebx+ecx],al
xor ebx,ebx
ret
.bit1
test ecx,1
jnz .bit0b
shr ecx,2
and byte[ebx+ecx],0CFh
and al,3
shl al,4
or byte[ebx+ecx],al
xor ebx,ebx
ret
.bit0b
shr ecx,2
and byte[ebx+ecx],03Fh
and al,3
shl al,6
or byte[ebx+ecx],al
xor ebx,ebx xor ebx,ebx
ret ret
NEWSYM SA1RAMaccessbankw16b NEWSYM SA1RAMaccessbankw16b
xor ebx,ebx push ecx
push ebx
call SA1RAMaccessbankw8b
pop ebx
pop ecx
inc ecx
mov al,ah
call SA1RAMaccessbankw8b
ret ret
NEWSYM SDD1Array, times 65536 db 0 NEWSYM SDD1Array, times 65536 db 0
@@ -4442,7 +4846,7 @@ NEWSYM memaccessbankr8sdd1
or al,cl or al,cl
cmp dx,8192 ;eax,4f1591h cmp dx,8192 ;eax,4f1591h
jbe .nota jbe .nota
mov byte[debstop3],1 ; mov byte[debstop3],1
.nota .nota
mov ecx,[SPC7110Entries] mov ecx,[SPC7110Entries]
mov edx,[spc7110romptr] mov edx,[spc7110romptr]