Shops VRAM transfer
This commit is contained in:
@@ -35,7 +35,27 @@ PostNMIHookAction:
|
||||
.return
|
||||
STZ.w NMIAux ; zero bank byte of NMI hook pointer
|
||||
+
|
||||
JSR.w TransferItemGFX
|
||||
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
|
||||
|
||||
JML.l PostNMIHookReturn
|
||||
;--------------------------------------------------------------------------------
|
||||
TransferItemGFX:
|
||||
; Only used for shops now but could be used for anything. We should look at how door rando does this
|
||||
; and try to unify one approach.
|
||||
REP #$30
|
||||
LDX.w ItemQueuePtr : BEQ .done
|
||||
-
|
||||
LDA.w ItemGFXQueue,X : STA.w ItemGFXPtr
|
||||
LDA.w ItemTargetQueue,X : STA.w ItemGFXTarget
|
||||
PHX
|
||||
JSL.l TransferItemToVRAM
|
||||
REP #$10
|
||||
PLX
|
||||
DEX #2
|
||||
BPL -
|
||||
|
||||
STZ.w ItemQueuePtr
|
||||
.done
|
||||
SEP #$30
|
||||
RTS
|
||||
|
||||
8
ram.asm
8
ram.asm
@@ -189,9 +189,11 @@ RaceGameFlag = $7E021B ;
|
||||
MessageJunk = $7E0223 ; Zeroed but never used (?)
|
||||
;
|
||||
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
|
||||
;CoolScratch = $7E0226 ; 0x5A bytes of free ram
|
||||
SpriteID = $7E0230 ; 0x0A bytes
|
||||
;
|
||||
;CoolScratch = $7E0224 ; 0x5C bytes of free ram
|
||||
ItemQueuePtr = $7E0226 ; Pointer into Item GFX and VRAM target queues. Word length.
|
||||
SpriteID = $7E0230 ; 0x0A bytes. Receipt ID for main loop sprite we're handling.
|
||||
ItemGFXQueue = $7E0230 ; Pointers to decompressed item tiles deferred to NMI loading. $10 bytes
|
||||
ItemTargetQueue = $7E0240 ; Pointers to VRAM targets for ItemGFXQueue. $10 bytes
|
||||
AncillaVelocityZ = $7E0294 ; 0x0A bytes
|
||||
AncillaZCoord = $7E029E ; 0x0A bytes
|
||||
;
|
||||
|
||||
@@ -136,7 +136,7 @@ SpritePrep_ShopKeeper:
|
||||
TAY
|
||||
REP #$30
|
||||
LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX
|
||||
JSR LoadTile
|
||||
JSR.w SetupTileTransfer
|
||||
PLY : PLX
|
||||
INY #4
|
||||
|
||||
@@ -144,10 +144,12 @@ SpritePrep_ShopKeeper:
|
||||
INX #8
|
||||
JMP -
|
||||
.stop
|
||||
|
||||
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2
|
||||
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1
|
||||
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux
|
||||
REP #$20
|
||||
LDA.w ItemQueuePtr
|
||||
DEC #2
|
||||
AND.w #$00E
|
||||
STA.w ItemQueuePtr
|
||||
SEP #$20
|
||||
|
||||
.done
|
||||
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
|
||||
@@ -188,7 +190,7 @@ dw $0100, $0000
|
||||
;--------------------------------------------------------------------------------
|
||||
; X - Tile Buffer Offset
|
||||
; Y - Item ID
|
||||
LoadTile:
|
||||
SetupTileTransfer:
|
||||
LDA.l ShopType : BIT.w #$0010 : BNE .alt_vram
|
||||
TXA : LSR #2
|
||||
CLC : ADC.w #!FREE_TILE
|
||||
@@ -197,10 +199,18 @@ LoadTile:
|
||||
TXA : LSR #2
|
||||
CLC : ADC.w #!FREE_TILE_ALT
|
||||
.store_target
|
||||
STA.w ItemGFXTarget
|
||||
LDX.w ItemQueuePtr
|
||||
STA.w ItemTargetQueue,X
|
||||
|
||||
TYA : ASL : TAX
|
||||
LDA.l StandingItemGraphicsOffsets,X : STA.w ItemGFXPtr
|
||||
JSL.l TransferItemToVRAM
|
||||
LDA.l StandingItemGraphicsOffsets,X
|
||||
LDX.w ItemQueuePtr
|
||||
STA.w ItemGFXQueue,X
|
||||
|
||||
TXA
|
||||
INC #2
|
||||
AND.w #$000E
|
||||
STA.w ItemQueuePtr
|
||||
TDC
|
||||
REP #$10 ; set 16-bit index registers
|
||||
SEP #$20
|
||||
|
||||
Reference in New Issue
Block a user