The vector table consists of a 256 bytes long vector list specific to the 68k.
Each vector is a 32-bit address, meaning the table holds '64 vectors'. Each entry is used by the 68k in precise cases.
All bootable 68k programs must have a vector table at their very beginning. The system ROM and games have their own.
Is $C00426 an universal BIOS call for a complete reset ?
| Offset from SP | Size | Value |
|---|---|---|
| +0 | Word | Flags |
| +2 | Longword | Access address |
| +6 | Word | IR |
| +8 | Word | SR |
| +10 | Longword | PC |
Flags:
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0: Write 1: Read | 0: Instruction | Function Code | |||||||||||||
| Offset from SP | Size | Value |
|---|---|---|
| +0 | Word | SR |
| +2 | Longword | PC |
| Vector # | Address | Exception name | Trigger condition | Stack frame |
|---|---|---|---|---|
| 0 | 000000 | Reset SP | Not really a vector. Used to initialize the stack pointer. | |
| 1 | 000004 | Reset PC | Reset/startup | |
| 2 | 000008 | Bus error | Bus cycle couldn't complete properly. | A |
| 3 | 00000C | Address error | Misaligned (odd) word or longword memory access. | A |
| 4 | 000010 | Illegal instruction | Tried executing an invalid opcode. | B |
| 5 | 000014 | Division by zero | DIVUed or DIVSed by zero. | B |
| 6 | 000018 | CHK instruction | CHK resulted in “out of bounds”. | B |
| 7 | 00001C | TRAPV instruction | TRAPV with overflow flag set. | B |
| 8 | 000020 | Privilege violation | Use of privileged instruction. Never happens on the NeoGeo since the 68k always runs in supervisor mode. | B |
| 9 | 000024 | Trace | After each executed instruction when 68k is in trace mode (debugger function). | B |
| 10 | 000028 | Unimplemented instruction (line A) | Used to implement 680xx instructions in software. Not used on the NeoGeo. | B |
| 11 | 00002C | Unimplemented instruction (line F) | Used to implement 680xx instructions in software. Not used on the NeoGeo. | B |
| 12 | 000030 | Reserved/Unused on 68000 | ||
| 13 | 000034 | |||
| 14 | 000038 | |||
| 15 | 00003C | Uninitialized interrupt vector | Default vector used by uninitialized peripherals. | B? |
| 16 | 000040 | Reserved | ||
| 17 | 000044 | |||
| 18 | 000048 | |||
| 19 | 00004C | |||
| 20 | 000050 | |||
| 21 | 000054 | Normally reserved but used on the NeoGeo CD. See 68k interrupts. | ||
| 22 | 000058 | |||
| 23 | 00005C | |||
| 24 | 000060 | Spurious interrupt | No acknowledge from hardware. | |
| 25 | 000064 | Level 1 interrupt autovector | V-Blank (cart) / Timer interrupt (CD). | |
| 26 | 000068 | Level 2 interrupt autovector | Timer interrupt (cart) / V-Blank (CD). | |
| 27 | 00006C | Level 3 interrupt autovector | Cold boot (cart). | |
| 28 | 000070 | Level 4 interrupt autovector | Not used on the NeoGeo. | |
| 29 | 000074 | Level 5 interrupt autovector | Not used on the NeoGeo. | |
| 30 | 000078 | Level 6 interrupt autovector | Not used on the NeoGeo. | |
| 31 | 00007C | Level 7 interrupt autovector | Not used on the NeoGeo. | |
| 32 | 000080 | TRAP #0~15 | TRAP instructions. | 2 |
| 48~63 | 0000C0~0000FC | Reserved/Unused on 68000 | ||
| 64~255 | 000100~0003FF | User interrupt vectors |
org $0 dc.l $0010F300 ; Initial SP dc.l $00C00402 ; Initial PC dc.l $00C00408 ; Bus error dc.l $00C0040E ; Address error dc.l $00C0040E ; Illegal Instruction dc.l $0000034C ; Divide by 0 dc.l $0000034E ; CHK Instruction dc.l $0000034E ; TRAPV Instruction dc.l $00C0041A ; Privilege Violation dc.l $00C00420 ; Trace dc.l $0000034E,$0000034E ; Emu dc.l $00C00426,$00C00426,$00C00426 ; Reserved dc.l $00C0042C ; Uninit. Int. Vector. dc.l $00C00426,$00C00426,$00C00426,$00C00426 ; Reserved dc.l $00C00426,$00C00426,$00C00426,$00C00426 ; Reserved dc.l $00C00432 ; Spurious Interrupt dc.l VBlank ; Level 1 dc.l IRQ2 ; Level 2 dc.l $00C00426 ; Level 3 dc.l $00C00426,$00C00426,$00C00426,$00C00426 ; Level 4~7 dc.l $0000056E,$0000056E,$0000056E,$0000056E ; Traps... dc.l $0000056E,$0000056E,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF dc.l $FFFFFFFF,$FFFFFFFF,$FFFFFFFF,$FFFFFFFF
org $0 dc.l $0010F300,$00C00402,$00C00408,$00C0040E dc.l $00C00414,$00C00426,$00C00426,$00C00426 dc.l $00C0041A,$00C00420,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$00C00426,$00C0042C dc.l $00C00522,$00C00528,$00C0052E,$00C00534 dc.l $00C0053A,$00C004F2,$00C004EC,$00C004E6 dc.l $00C004E0, IRQ2, VBlank, IRQ3 dc.l Generic, Generic, Generic, Generic dc.l Generic, Generic, Generic, Generic dc.l Generic, Generic, Generic, Generic dc.l Generic, Generic, Generic, Generic dc.l Generic, Generic, Generic, Generic dc.l $00C00426,$00C00426,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$00C00426,$00C00426 dc.l $00C00426,$00C00426,$00C00426,$00C00426