Test program:
http://byuu.cinnamonpirate.com/temp/hdma_midframe.zip
Through emulation, I get this:

But on the SNES, I get this:

Main code:
Code: Select all
.loop
- bit $4212 : bpl -
stz $420c
- bit $4212 : bmi -
ldx #$0020
.line_loop
- bit $4212 : bvc -
- bit $4212 : bvs -
dex : bne .line_loop
lda $4302 : sta $4308
lda $4303 : sta $4309
stz $430a
lda #$01 : sta $420c
bra .loop
I can get what the SNES gets by decrementing A2AxW by one before enabling the HDMA channel.
So it looks like NTRLx isn't loaded, and the HDMA 'resumes' at $4304:($4308). So then I try incrementing $4308 by one, and setting NTRLx to $07, but then I get a black screen on hardware. What the hell? :/