IRQ: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(Detail : There is no actual SEI or JMP() instructions executed, even if the effect is the sam)
mNo edit summary
Line 1: Line 1:
'''IRQ''' (Interrupt request) is a signal on the NES CPU.
'''IRQ''' (Interrupt request) is a signal on the NES CPU.


If the CPU's /IRQ input is 0 at the end of an instruction, an the CPU pushes the program counter and the processor status register, sets the I flag to ignore further IRQs, and the Program Counter takes the value read at $fffe and $ffff.
If the CPU's /IRQ input is 0 at the end of an instruction, then the CPU pushes the program counter and the processor status register, sets the I flag to ignore further IRQs, and the Program Counter takes the value read at $fffe and $ffff.


/IRQ functions as an open collector input: it is normally 1, but any device on the CPU bus can pull it down to 0.
/IRQ functions as an open collector input: it is normally 1, but any device on the CPU bus can pull it down to 0.

Revision as of 20:15, 22 January 2013

IRQ (Interrupt request) is a signal on the NES CPU.

If the CPU's /IRQ input is 0 at the end of an instruction, then the CPU pushes the program counter and the processor status register, sets the I flag to ignore further IRQs, and the Program Counter takes the value read at $fffe and $ffff.

/IRQ functions as an open collector input: it is normally 1, but any device on the CPU bus can pull it down to 0. An IRQ handler is expected to push any registers it uses, acknowledge the interrupt by writing to a port so that the source no longer forces /IRQ to 0), pull the registers back, and return with RTI.

Therefore if a program uses more than one source of IRQ, the priority between the conflicting interrupts should be handled in software.

Sources of IRQ on a Famicom or NES include

Source Enable Disable Acknowledge
APU DMC finish $4010 write with bit 7 = 1 $4010 write otherwise Disable then reenable, or play another sample
APU Frame Counter $4017 write with bits 7-6 = 00 $4017 write otherwise APU Status ($4015) read
MMC3 Write to $E001 Write to $E000 Disable then reenable
MMC5 Write $80 to $5204 Write $00 to $5204 Read $5204
FDS Write $02 to $4022 Write $00 to $4022 Read $4030

See also

  • MMC, common source of cartridge IRQs
  • NMI, the other interrupt signal on the CPU