Time Lord uses DMC IRQ as a backup for Sprite 0 hit, just in case that Sprite 0 hit hasn't been triggered yet. It will trigger an interrupt between scanline 161 and 165 on frames where CPU usage is high enough to miss reaching the Sprite 0 Polling code early.
The game also crashes if APU Frame IRQ ever happens.
Fire Hawk uses DMC IRQ at the title screen to get IRQs at scanlines 71, 158, 170. During gameplay, it recalibrates the DMC channel, then gets interrupts at scanlines 56, 156, 171, 187, 203, 219. Screen is actually split at scanline 181.
Mig 29 Soviet Fighter gets interrupts at scanlines 93, 103, 113, 123, 133, 160, 182, 202, 213, 218. Screen is actually split at scanline 190.
EDIT: This one! viewtopic.php?t=6521
* this demo runs a little gnarly...
EDIT2: And the final(?) version:
* this demo looks perfect in Mesen and on console w/ Everdrive
I seem to have a fairly basic issue with irq's. While running the apu tests (test_apu_2 by x0000), my emulator gets into an infinite loop executing the interrupt vector repeatedly. The issue seems to be that those tests clear the apu interrupt inhibit flag, set frame mode, and have an irq handler that does nothing other than rti.
Code: Select all
lda #0 sta $4017 # clear interrupt inhibit, set frame mode ... irq: rti
The frame interrupt flag is connected to the CPU's IRQ line. It is set at a particular point in the 4-step sequence (see below) provided the interrupt inhibit flag in $4017 is clear, and can be cleared either by reading $4015 (which also returns its old status) or by setting the interrupt inhibit flag.