Fixed issue with Aga transition not restoring vanilla gfx
This commit is contained in:
@@ -198,10 +198,12 @@ DecompressAllItemGraphics:
|
||||
|
||||
STA.l $4200 ; already 0 from the LDA above
|
||||
|
||||
LDX.b #$5D+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5C+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5B+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5A+$73 : JSR FastSpriteDecomp
|
||||
LDX.b #$5D+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$5C+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$5B+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$5A+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$06+$73 : JSR AddGfxSheetToBigBuffer
|
||||
LDX.b #$07+$73 : JSR AddGfxSheetToBigBuffer
|
||||
|
||||
REP #$30
|
||||
PLX
|
||||
@@ -219,6 +221,21 @@ DecompressAllItemGraphics:
|
||||
|
||||
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
|
||||
;===================================================================================================
|
||||
@@ -246,12 +263,6 @@ endmacro
|
||||
; so might as well rewrite it to be fast
|
||||
;===================================================================================================
|
||||
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
|
||||
|
||||
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:
|
||||
LDA.b #$7F
|
||||
PHA
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
!DMA0_SIZE_LOW_REG = $4305 ; 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)
|
||||
PHA
|
||||
; --- 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
|
||||
LDA.b #$01 ; channel select bitmask
|
||||
STA.w !DMA_ENABLE_REG
|
||||
STA.w DMAENABLE
|
||||
|
||||
; --- restore DMA registers -----------------------------------------------------
|
||||
PLA : STA.w !DMA0_SIZE_HIGH_REG
|
||||
|
||||
@@ -357,6 +357,32 @@ PrepItemAnimation:
|
||||
LDA.b FrameCounter : AND.b #$30 : LSR #4 : STA.w SpriteDirectionTable, X
|
||||
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
|
||||
; fix Arghuss/Zora splash graphics
|
||||
org $868595
|
||||
|
||||
@@ -833,7 +833,8 @@ RTL
|
||||
SetTheSceneFix:
|
||||
STZ.b $6C
|
||||
JSL InitializeMirrorHDMA
|
||||
JSL LoadCommonSprites_long
|
||||
JSL WaitForNewVBlank
|
||||
JSL TransferCommonToVRAM
|
||||
RTL
|
||||
|
||||
pushpc
|
||||
|
||||
Reference in New Issue
Block a user