Shops VRAM transfer
This commit is contained in:
@@ -35,7 +35,27 @@ PostNMIHookAction:
|
|||||||
.return
|
.return
|
||||||
STZ.w NMIAux ; zero bank byte of NMI hook pointer
|
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
|
LDA.b INIDISPQ : STA.w INIDISP ; thing we wrote over, turn screen back on
|
||||||
|
|
||||||
JML.l PostNMIHookReturn
|
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 (?)
|
MessageJunk = $7E0223 ; Zeroed but never used (?)
|
||||||
;
|
;
|
||||||
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
|
ShopPurchaseFlag = $7E0224 ; $01 = Shop purchase item receipt.
|
||||||
;CoolScratch = $7E0226 ; 0x5A bytes of free ram
|
;CoolScratch = $7E0224 ; 0x5C bytes of free ram
|
||||||
SpriteID = $7E0230 ; 0x0A bytes
|
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
|
AncillaVelocityZ = $7E0294 ; 0x0A bytes
|
||||||
AncillaZCoord = $7E029E ; 0x0A bytes
|
AncillaZCoord = $7E029E ; 0x0A bytes
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -136,7 +136,7 @@ SpritePrep_ShopKeeper:
|
|||||||
TAY
|
TAY
|
||||||
REP #$30
|
REP #$30
|
||||||
LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX
|
LDA.b 1,s : TAX : LDA.l .tile_offsets, X : TAX
|
||||||
JSR LoadTile
|
JSR.w SetupTileTransfer
|
||||||
PLY : PLX
|
PLY : PLX
|
||||||
INY #4
|
INY #4
|
||||||
|
|
||||||
@@ -144,10 +144,12 @@ SpritePrep_ShopKeeper:
|
|||||||
INX #8
|
INX #8
|
||||||
JMP -
|
JMP -
|
||||||
.stop
|
.stop
|
||||||
|
REP #$20
|
||||||
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>16 : STA.w NMIAux+2
|
LDA.w ItemQueuePtr
|
||||||
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>8 : STA.w NMIAux+1
|
DEC #2
|
||||||
;LDA.b #Shopkeeper_UploadVRAMTilesLong>>0 : STA.w NMIAux
|
AND.w #$00E
|
||||||
|
STA.w ItemQueuePtr
|
||||||
|
SEP #$20
|
||||||
|
|
||||||
.done
|
.done
|
||||||
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
|
LDA.l ShopType : BIT.b #$20 : BEQ .notTakeAll ; Take-all
|
||||||
@@ -188,7 +190,7 @@ dw $0100, $0000
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; X - Tile Buffer Offset
|
; X - Tile Buffer Offset
|
||||||
; Y - Item ID
|
; Y - Item ID
|
||||||
LoadTile:
|
SetupTileTransfer:
|
||||||
LDA.l ShopType : BIT.w #$0010 : BNE .alt_vram
|
LDA.l ShopType : BIT.w #$0010 : BNE .alt_vram
|
||||||
TXA : LSR #2
|
TXA : LSR #2
|
||||||
CLC : ADC.w #!FREE_TILE
|
CLC : ADC.w #!FREE_TILE
|
||||||
@@ -197,10 +199,18 @@ LoadTile:
|
|||||||
TXA : LSR #2
|
TXA : LSR #2
|
||||||
CLC : ADC.w #!FREE_TILE_ALT
|
CLC : ADC.w #!FREE_TILE_ALT
|
||||||
.store_target
|
.store_target
|
||||||
STA.w ItemGFXTarget
|
LDX.w ItemQueuePtr
|
||||||
|
STA.w ItemTargetQueue,X
|
||||||
|
|
||||||
TYA : ASL : TAX
|
TYA : ASL : TAX
|
||||||
LDA.l StandingItemGraphicsOffsets,X : STA.w ItemGFXPtr
|
LDA.l StandingItemGraphicsOffsets,X
|
||||||
JSL.l TransferItemToVRAM
|
LDX.w ItemQueuePtr
|
||||||
|
STA.w ItemGFXQueue,X
|
||||||
|
|
||||||
|
TXA
|
||||||
|
INC #2
|
||||||
|
AND.w #$000E
|
||||||
|
STA.w ItemQueuePtr
|
||||||
TDC
|
TDC
|
||||||
REP #$10 ; set 16-bit index registers
|
REP #$10 ; set 16-bit index registers
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
|||||||
Reference in New Issue
Block a user