Links

Hardware vectors

Hardware vectors are a group of pointers that define how the SNES should handle certain interrupts within the ROM. Each vector is two bytes in size and point to instructions located in bank $00. The hardware vectors are grouped by the two modes of the SNES: "emulation mode" vectors and "native mode" vectors.

Native mode vectors

These vectors come into play when the SNES runs in native mode (E=0).
ROM address
Vector
Additional notes
$00:FFE0
Unused
$00:FFE2
Unused
$00:FFE4
COP vector
Triggered by the COP opcode
$00:FFE6
BRK vector
Triggered by the BRK opcode
$00:FFE8
ABORT vector
Unused by the SNES
$00:FFEA
NMI vector
Triggered by the SNES V-Blank Interrupt
$00:FFEC
Unused
$00:FFEE
IRQ vector
Triggered by the SNES H/V-Timer or external interrupt

Emulation mode vectors

These vectors come into play when the SNES runs in emulation mode (E=1).
ROM address
Vector
Additional notes
$00:FFF0
Unused
$00:FFF2
Unused
$00:FFF4
COP vector
$00:FFF6
Unused
$00:FFF8
ABORT vector
Unused by the SNES
$00:FFFA
NMI vector
$00:FFFC
RESET vector
Triggered by SNES soft/hard reset
$00:FFFE
IRQ/BRK vector
It's possible to differentiate between the two using the BRK flag

Example setup

Here's an example setup with the most commonly used vectors, which can be used in homebrew SNES ROMs. Note that the labels must be located in bank $00 (which is located within the same bank as this setup).
ORG $00FFE0
; Native mode
dw $FFFF ; Unused
dw $FFFF ; Unused
dw $FFFF ; COP
dw $FFFF ; BRK
dw $FFFF ; ABORT
dw NativeNMI ; NMI
dw $FFFF ; Unused
dw NativeIRQ ; IRQ
; Emulation mode
dw $FFFF ; Unused
dw $FFFF ; Unused
dw $FFFF ; COP
dw $FFFF ; Unused
dw $FFFF ; ABORT
dw $FFFF ; NMI
dw Reset ; RESET
dw $FFFF ; IRQ/BRK
Because homebrew programmers generally want to run their program in native mode, all vectors in emulation mode, save for reset, have been ignored. Furthermore, nothing is done with the BRK and COP vectors as these are opcodes which generally are unused.