From c465ff61dc90a2cc3962213b09db52e5d4feed9c Mon Sep 17 00:00:00 2001 From: codemann8 Date: Wed, 17 Apr 2024 13:42:13 -0500 Subject: [PATCH] Fixed issue with Aga transition not restoring vanilla gfx --- decompresseditemgraphics.asm | 95 ++++++++++++++++++++++++++++++++---- enemizer/DMA.asm | 4 +- keydrop/dynamic_si_vram.asm | 26 ++++++++++ keydrop/standing_items.asm | 3 +- 4 files changed, 114 insertions(+), 14 deletions(-) diff --git a/decompresseditemgraphics.asm b/decompresseditemgraphics.asm index c3dca13..e73f453 100644 --- a/decompresseditemgraphics.asm +++ b/decompresseditemgraphics.asm @@ -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 #+ : STA.b Scrap02 + LDA.b (Scrap02),Y + STA.l BigDecompressionBuffer++,X + + DEC.b Scrap02 + ORA.b (Scrap02),Y + AND.w #$FF00 + STA.b Decomp3BPPScratch + + LDA.b Scrap00 : ADC.w #$10+ : STA.b Scrap02 + LDA.b (Scrap02),Y + AND.w #$00FF + TSB.b Decomp3BPPScratch + + XBA + ORA.b Decomp3BPPScratch + STA.l BigDecompressionBuffer+$10++,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 diff --git a/enemizer/DMA.asm b/enemizer/DMA.asm index 2df1eff..dddb441 100644 --- a/enemizer/DMA.asm +++ b/enemizer/DMA.asm @@ -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 diff --git a/keydrop/dynamic_si_vram.asm b/keydrop/dynamic_si_vram.asm index 692b817..46f0852 100644 --- a/keydrop/dynamic_si_vram.asm +++ b/keydrop/dynamic_si_vram.asm @@ -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 diff --git a/keydrop/standing_items.asm b/keydrop/standing_items.asm index e924f1c..84ee2b7 100644 --- a/keydrop/standing_items.asm +++ b/keydrop/standing_items.asm @@ -833,7 +833,8 @@ RTL SetTheSceneFix: STZ.b $6C JSL InitializeMirrorHDMA - JSL LoadCommonSprites_long + JSL WaitForNewVBlank + JSL TransferCommonToVRAM RTL pushpc