Fixed issue with Aga transition not restoring vanilla gfx

This commit is contained in:
codemann8
2024-04-17 13:42:13 -05:00
parent a45f92123a
commit c465ff61dc
4 changed files with 114 additions and 14 deletions

View File

@@ -198,10 +198,12 @@ DecompressAllItemGraphics:
STA.l $4200 ; already 0 from the LDA above STA.l $4200 ; already 0 from the LDA above
LDX.b #$5D+$73 : JSR FastSpriteDecomp LDX.b #$5D+$73 : JSR AddGfxSheetToBigBuffer
LDX.b #$5C+$73 : JSR FastSpriteDecomp LDX.b #$5C+$73 : JSR AddGfxSheetToBigBuffer
LDX.b #$5B+$73 : JSR FastSpriteDecomp LDX.b #$5B+$73 : JSR AddGfxSheetToBigBuffer
LDX.b #$5A+$73 : JSR FastSpriteDecomp LDX.b #$5A+$73 : JSR AddGfxSheetToBigBuffer
LDX.b #$06+$73 : JSR AddGfxSheetToBigBuffer
LDX.b #$07+$73 : JSR AddGfxSheetToBigBuffer
REP #$30 REP #$30
PLX PLX
@@ -219,6 +221,21 @@ DecompressAllItemGraphics:
RTL RTL
;===================================================================================================
AddGfxSheetToBigBuffer:
SEP #$30
LDA.l GFXSheetPointers_background_bank,X : PHA : PLB
LDA.l GFXSheetPointers_background_high,X : XBA
LDA.l GFXSheetPointers_background_low,X
CPX.b #$73 : !BLT FastSpriteDecomp
CPX.b #$73+$0C : !BGE FastSpriteDecomp
.uncompressed
JMP Direct3BPPConvert
;=================================================================================================== ;===================================================================================================
; I normally hate macros like this... but I don't feel like constantly rewriting this ; I normally hate macros like this... but I don't feel like constantly rewriting this
;=================================================================================================== ;===================================================================================================
@@ -246,12 +263,6 @@ endmacro
; so might as well rewrite it to be fast ; so might as well rewrite it to be fast
;=================================================================================================== ;===================================================================================================
FastSpriteDecomp: FastSpriteDecomp:
SEP #$30
LDA.l GFXSheetPointers_background_bank,X : PHA : PLB
LDA.l GFXSheetPointers_background_high,X : XBA
LDA.l GFXSheetPointers_background_low,X
REP #$10 REP #$10
TAY TAY
@@ -492,6 +503,70 @@ endmacro
;=================================================================================================== ;===================================================================================================
macro DoIndirectPlanesA(offset)
LDA.b Scrap00 : ADC.w #<offset>+<offset> : STA.b Scrap02
LDA.b (Scrap02),Y
STA.l BigDecompressionBuffer+<offset>+<offset>,X
DEC.b Scrap02
ORA.b (Scrap02),Y
AND.w #$FF00
STA.b Decomp3BPPScratch
LDA.b Scrap00 : ADC.w #$10+<offset> : STA.b Scrap02
LDA.b (Scrap02),Y
AND.w #$00FF
TSB.b Decomp3BPPScratch
XBA
ORA.b Decomp3BPPScratch
STA.l BigDecompressionBuffer+$10+<offset>+<offset>,X
endmacro
;===================================================================================================
Direct3BPPConvert:
REP #$31
STA.b Scrap00
LDY.w #$0000
LDX.b DecompBufferOffset
.next_3bpp_tile
%DoIndirectPlanesA(0) ; 8 times
%DoIndirectPlanesA(1)
%DoIndirectPlanesA(2)
%DoIndirectPlanesA(3)
%DoIndirectPlanesA(4)
%DoIndirectPlanesA(5)
%DoIndirectPlanesA(6)
%DoIndirectPlanesA(7)
; carry will always be clear
; don't worry
TXA
ADC.w #32
TAX
; just trust me
TYA
ADC.w #24
TAY
CMP.w #24*64
BCS .done
JMP .next_3bpp_tile
.done
STX.b DecompBufferOffset
SEP #$30
RTS
;===================================================================================================
Unrolled3BPPConvert: Unrolled3BPPConvert:
LDA.b #$7F LDA.b #$7F
PHA PHA

View File

@@ -12,8 +12,6 @@
!DMA0_SIZE_LOW_REG = $4305 ; DMA Size Registers (Low) !DMA0_SIZE_LOW_REG = $4305 ; DMA Size Registers (Low)
!DMA0_SIZE_HIGH_REG = $4306 ; DMA Size Registers (Low) !DMA0_SIZE_HIGH_REG = $4306 ; DMA Size Registers (Low)
!DMA_ENABLE_REG = $420B ; DMA Enable Register
macro DMA_VRAM(VRAM_HIGH,VRAM_LOW,SRC_BANK,SRC_HIGH,SRC_LOW,LENGTH_HIGH,LENGTH_LOW) macro DMA_VRAM(VRAM_HIGH,VRAM_LOW,SRC_BANK,SRC_HIGH,SRC_LOW,LENGTH_HIGH,LENGTH_LOW)
PHA PHA
; --- preserve DMA registers ---------------------------------------------------- ; --- preserve DMA registers ----------------------------------------------------
@@ -57,7 +55,7 @@ macro DMA_VRAM(VRAM_HIGH,VRAM_LOW,SRC_BANK,SRC_HIGH,SRC_LOW,LENGTH_HIGH,LENGTH_L
; start DMA on channel 0 ; start DMA on channel 0
LDA.b #$01 ; channel select bitmask LDA.b #$01 ; channel select bitmask
STA.w !DMA_ENABLE_REG STA.w DMAENABLE
; --- restore DMA registers ----------------------------------------------------- ; --- restore DMA registers -----------------------------------------------------
PLA : STA.w !DMA0_SIZE_HIGH_REG PLA : STA.w !DMA0_SIZE_HIGH_REG

View File

@@ -357,6 +357,32 @@ PrepItemAnimation:
LDA.b FrameCounter : AND.b #$30 : LSR #4 : STA.w SpriteDirectionTable, X LDA.b FrameCounter : AND.b #$30 : LSR #4 : STA.w SpriteDirectionTable, X
RTS RTS
WaitForNewVBlank:
LDA.b #$00 : STA.w NMITIMEN ; Disable interrupts
- LDA.w RDNMI : BMI - ; Wait until v-blank is over
- LDA.w RDNMI : BPL - ; Wait until v-blank starts
LDA.b #$80 : STA.w NMITIMEN
RTL
TransferCommonToVRAM:
PHP
REP #$21
SEP #$10
LDA.w #BigDecompressionBuffer+$2000
LDX.b #BigDecompressionBuffer>>16
STA.w $4302
STX.w $4304
LDX.b #$80 : STX.w $2115
LDA.w #$1801 : STA.w $4300
LDA.w #$1000 : STA.w $4305
LDA.w #$4800 : STA.w $2116
LDX.b #$01 : STX.w DMAENABLE
PLP
RTL
pushpc pushpc
; fix Arghuss/Zora splash graphics ; fix Arghuss/Zora splash graphics
org $868595 org $868595

View File

@@ -833,7 +833,8 @@ RTL
SetTheSceneFix: SetTheSceneFix:
STZ.b $6C STZ.b $6C
JSL InitializeMirrorHDMA JSL InitializeMirrorHDMA
JSL LoadCommonSprites_long JSL WaitForNewVBlank
JSL TransferCommonToVRAM
RTL RTL
pushpc pushpc