I'm working on a simple, non-scrolling, NROM game that will have just a few screens and I'm trying to figure out a decent way to load a background. I RLE'd the title screen using just notepad and now I'm trying to load it, but the whole screen is blue.
Screen data (left value is tile number, right is the amount):
Loading code:
Another thing is updating a certain part of the background. Should I just decompress all the background data into ram first instead of running the code above, and then load a whole background every time a change is made?
Screen data (left value is tile number, right is the amount):
Code:
titlescrn:
.db $24,$8c
.db $c3,$01
.db $c4,$01
.db $c5,$01
.db $c6,$01
.db $c7,$01
.db $c8,$01
.db $c9,$01
.db $ca,$01
.db $cb,$01
.db $24,$17
.db $d3,$01
.db $d4,$01
.db $d5,$01
.db $d6,$01
.db $d7,$01
.db $d8,$01
.db $d9,$01
.db $da,$01
.db $db,$01
.db $24,$14
.db $e0,$01
.db $e1,$01
.db $e2,$01
.db $e3,$01
.db $e4,$01
.db $e5,$01
.db $e6,$01
.db $e7,$01
.db $e8,$01
.db $e9,$01
.db $ea,$01
.db $eb,$01
.db $ec,$01
.db $ed,$01
.db $ee,$01
.db $ef,$01
.db $24,$10
.db $f0,$01
.db $f1,$01
.db $f2,$01
.db $f3,$01
.db $f4,$01
.db $f5,$01
.db $f6,$01
.db $f7,$01
.db $f8,$01
.db $f9,$01
.db $fa,$01
.db $fb,$01
.db $fc,$01
.db $fd,$01
.db $fe,$01
.db $ff,$01
.db $24,$d2
.db $01,$01
.db $19,$01
.db $15,$01
.db $0a,$01
.db $22,$01
.db $0e,$01
.db $1b,$01
.db $24,$19
.db $02,$01
.db $19,$01
.db $15,$01
.db $0a,$01
.db $22,$01
.db $0e,$01
.db $1b,$01
.db $1c,$01
.db $24,$FF
.db $24,$4E
.db $0a,$01
.db $15,$01
.db $19,$01
.db $11,$01
.db $0a,$01
.db $24,$01
.db $18,$01
.db $18,$01
.db $24,$47
;;;attr
.db $00,$0A
.db $50,$01
.db $55,$01
.db $55,$01
.db $51,$01
.db $10,$01
.db $00,$0B
.db $40,$01
.db $50,$02
.db $00,$23
.db $25 ;$25 = end of room
.db $24,$8c
.db $c3,$01
.db $c4,$01
.db $c5,$01
.db $c6,$01
.db $c7,$01
.db $c8,$01
.db $c9,$01
.db $ca,$01
.db $cb,$01
.db $24,$17
.db $d3,$01
.db $d4,$01
.db $d5,$01
.db $d6,$01
.db $d7,$01
.db $d8,$01
.db $d9,$01
.db $da,$01
.db $db,$01
.db $24,$14
.db $e0,$01
.db $e1,$01
.db $e2,$01
.db $e3,$01
.db $e4,$01
.db $e5,$01
.db $e6,$01
.db $e7,$01
.db $e8,$01
.db $e9,$01
.db $ea,$01
.db $eb,$01
.db $ec,$01
.db $ed,$01
.db $ee,$01
.db $ef,$01
.db $24,$10
.db $f0,$01
.db $f1,$01
.db $f2,$01
.db $f3,$01
.db $f4,$01
.db $f5,$01
.db $f6,$01
.db $f7,$01
.db $f8,$01
.db $f9,$01
.db $fa,$01
.db $fb,$01
.db $fc,$01
.db $fd,$01
.db $fe,$01
.db $ff,$01
.db $24,$d2
.db $01,$01
.db $19,$01
.db $15,$01
.db $0a,$01
.db $22,$01
.db $0e,$01
.db $1b,$01
.db $24,$19
.db $02,$01
.db $19,$01
.db $15,$01
.db $0a,$01
.db $22,$01
.db $0e,$01
.db $1b,$01
.db $1c,$01
.db $24,$FF
.db $24,$4E
.db $0a,$01
.db $15,$01
.db $19,$01
.db $11,$01
.db $0a,$01
.db $24,$01
.db $18,$01
.db $18,$01
.db $24,$47
;;;attr
.db $00,$0A
.db $50,$01
.db $55,$01
.db $55,$01
.db $51,$01
.db $10,$01
.db $00,$0B
.db $40,$01
.db $50,$02
.db $00,$23
.db $25 ;$25 = end of room
Code:
backgrounds_lo: .dl titlescrn
backgrounds_hi: .dh titlescrn
backgrounds_hi: .dh titlescrn
Loading code:
Code:
LoadBackground:
;Turn off NMI and rendering
LDA #%00000000
STA PPU_CtrlA
STA PPU_CtrlB
LDA PPU_CtrlB ;reading $2002 clears write pair for $2005/2006
LDA #$20
STA PPU_Addr
LDA #$00
STA PPU_Addr
LDX BackgroundToLoad
LDA backgrounds_lo, x
STA BackgroundAddress
LDA backgrounds_hi, x
STA BackgroundAddress + 1
LDY #$00
LoadBackgroundLoopA:
LDA (BackgroundAddress), y
CMP #$25
BEQ LoadBackgroundLoopEnd
INY
LDX (BackgroundAddress), y
LoadBackgroundLoopB:
STA PPU_Write
DEX
BNE LoadBackgroundLoopB
INY
JMP LoadBackgroundLoopA
LoadBackgroundLoopEnd:
;Reset Scroll
LDA #$00
STA PPU_Scroll
STA PPU_Scroll
INC BackgroundLoadingStatus
RTS
;Turn off NMI and rendering
LDA #%00000000
STA PPU_CtrlA
STA PPU_CtrlB
LDA PPU_CtrlB ;reading $2002 clears write pair for $2005/2006
LDA #$20
STA PPU_Addr
LDA #$00
STA PPU_Addr
LDX BackgroundToLoad
LDA backgrounds_lo, x
STA BackgroundAddress
LDA backgrounds_hi, x
STA BackgroundAddress + 1
LDY #$00
LoadBackgroundLoopA:
LDA (BackgroundAddress), y
CMP #$25
BEQ LoadBackgroundLoopEnd
INY
LDX (BackgroundAddress), y
LoadBackgroundLoopB:
STA PPU_Write
DEX
BNE LoadBackgroundLoopB
INY
JMP LoadBackgroundLoopA
LoadBackgroundLoopEnd:
;Reset Scroll
LDA #$00
STA PPU_Scroll
STA PPU_Scroll
INC BackgroundLoadingStatus
RTS
Another thing is updating a certain part of the background. Should I just decompress all the background data into ram first instead of running the code above, and then load a whole background every time a change is made?