Here is my NMI Code
Code: Select all
LBL.NMI:
PHA
TXA
PHA
TYA
PHA
LDA FLAG.NMI.Update.Background
BNE LBL.NMI.LoadBackground
JMP LBL.NMI.LoadTiles
LBL.NMI.LoadBackground:
LDA FALSE
STA FLAG.NMI.Update.Background
LDA #$00
STA $2001
LDA $2002
LDA #$20
STA $2006
LDA #$00
STA $2006
LDX #$04
LDY #$00
LBL.LoadBackground.Nametable.Loop:
LDA (PTR.Background.Nametable), y
STA $2007
INY
BNE LBL.LoadBackground.Nametable.Loop
INC PTR.Background.Nametable + 1;
DEX
BNE LBL.LoadBackground.Nametable.Loop
LBL.NMI.LoadTiles:
LDA FLAG.NMI.Update.Bank
BNE LBL.NMI.LoadTiles.Continue
JMP LBL.NMI.Reset
LBL.NMI.LoadTiles.Continue:
LDA FALSE
STA FLAG.NMI.Update.Bank
LDA $2002
LDA #$00
STA $2006
STA $2006
LDX #$03
LDY #$00
LBL.LoadTiles.Loop:
LDA (PTR.Tiles),y
STA $2007
INY
BNE LBL.LoadTiles.Loop
INC PTR.Tiles+1;
DEX
BNE LBL.LoadTiles.Loop
PLA
TAY
PLA
TAX
PLA
RTI
LBL.NMI.Reset:
LDA #%10001000
STA $2000
LDA #%00011110
STA $2001
LDA #$00
STA $2005
STA $2005
INC VAR.Frame
PLA
TAY
PLA
TAX
PLA
RTI
Code: Select all
LBL.State.Game.Initialize:
JSR LBL.Wait.Frame
JSR LBL.Jumper.Scene.Initialize
LDA #State.Game.Update
STA VAR.State.Game
RTS
LBL.Wait.Frame:
LDA VAR.Frame
LBL.Wait.Frame.Loop:
CMP VAR.Frame
BEQ LBL.Wait.Frame.Loop
RTS
I'm missing something, but can't tell if it's a coding error or fundamental misunderstanding about the PPU Enable/Disable and NMI timing.
Thank you for any help!