As far as I can see, the general consensus is that Nestopia is a good standard for correctness in emulators. I'm doing most of my homebrew testing on FCEUX, though, because it's got the debugger and such. But... my sprite zero split seems to only be working correctly on FCEUX. I'm trying to pull a Crystalis and refill the palettes mid scanline, and that seems to be failing entirely on Nestopia.
Here's my NMI, if it matters...
Here's my NMI, if it matters...
Code:
NMI:
php
pha
txa
pha
tya
pha
lda #$00
sta PPUMASK
jsr LoadStatusPalette
lda #%00011110
sta PPUMASK
lda #$00
sta PPUADDR
sta PPUADDR
sta PPUSCROLL
sta PPUSCROLL
sta sync
sta OAMDMA
lda #$02
sta OAMDMA
jsr FamiToneUpdate
inc pputime ;increase ppuclock
WaitForVBlankEnd:
lda PPUSTATUS
and #%01000000
bne WaitForVBlankEnd
WaitForSprite0:
lda PPUSTATUS
and #%01000000
beq WaitForSprite0
ldx #$0b
WaitScanline:
dex
bne WaitScanline
lda #$00
sta PPUMASK
jsr LoadGamePalette
lda #%00011110
sta PPUMASK
pla
tay
pla
tax
pla
plp
rti
php
pha
txa
pha
tya
pha
lda #$00
sta PPUMASK
jsr LoadStatusPalette
lda #%00011110
sta PPUMASK
lda #$00
sta PPUADDR
sta PPUADDR
sta PPUSCROLL
sta PPUSCROLL
sta sync
sta OAMDMA
lda #$02
sta OAMDMA
jsr FamiToneUpdate
inc pputime ;increase ppuclock
WaitForVBlankEnd:
lda PPUSTATUS
and #%01000000
bne WaitForVBlankEnd
WaitForSprite0:
lda PPUSTATUS
and #%01000000
beq WaitForSprite0
ldx #$0b
WaitScanline:
dex
bne WaitScanline
lda #$00
sta PPUMASK
jsr LoadGamePalette
lda #%00011110
sta PPUMASK
pla
tay
pla
tax
pla
plp
rti