68k vector table: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
m (Table shrink and Neo CD interrupts)
(Stack frames)
Line 6: Line 6:


Is $C00426 an universal [[BIOS calls|BIOS call]] for a complete reset ?
Is $C00426 an universal [[BIOS calls|BIOS call]] for a complete reset ?
=Stack frames=
See [[68k exception handling]].
==Format A==
{|class="wikitable"
!Offset from SP
!Size
!Value
|-
| +0
|Word
|Flags:{{16BitRegister| |11|0:Write 1:Read |1|0:Instruction|1|Function code|3}}
|-
| +2
|Longword
|Access address
|-
| +6
|Word
|IR
|-
| +8
|Word
|SR
|-
| +10
|Longword
|PC
|}
==Format B==
{|class="wikitable"
!Offset from SP
!Size
!Value
|-
| +0
|Word
|SR
|-
| +2
|Longword
|PC
|}


=Vector list=
=Vector list=
Line 26: Line 74:
|Reset PC
|Reset PC
|Reset/startup
|Reset/startup
|0
|
|-
|-
|2
|2
Line 32: Line 80:
|Bus error
|Bus error
|Bus cycle couldn't complete properly.
|Bus cycle couldn't complete properly.
|0
|A
|-
|-
|3
|3
Line 38: Line 86:
|Address error
|Address error
|Misaligned (odd) word or longword memory access.
|Misaligned (odd) word or longword memory access.
|0
|A
|-
|-
|4
|4
Line 44: Line 92:
|Illegal instruction
|Illegal instruction
|Tried executing an invalid opcode.
|Tried executing an invalid opcode.
|1
|B
|-
|-
|5
|5
Line 50: Line 98:
|Division by zero
|Division by zero
|DIVUed or DIVSed by zero.
|DIVUed or DIVSed by zero.
|2
|B
|-
|-
|6
|6
Line 56: Line 104:
|CHK instruction
|CHK instruction
|CHK resulted in "out of bounds".
|CHK resulted in "out of bounds".
|2
|B
|-
|-
|7
|7
Line 62: Line 110:
|TRAPV instruction
|TRAPV instruction
|TRAPV with overflow flag set.
|TRAPV with overflow flag set.
|2
|B
|-
|-
|8
|8
Line 68: Line 116:
|Privilege violation
|Privilege violation
|Use of privileged instruction. Never happens on the NeoGeo since the 68k always runs in supervisor mode.
|Use of privileged instruction. Never happens on the NeoGeo since the 68k always runs in supervisor mode.
|1
|B
|-
|-
|9
|9
Line 74: Line 122:
|Trace
|Trace
|After each executed instruction when 68k is in trace mode (debugger function).
|After each executed instruction when 68k is in trace mode (debugger function).
|1
|B
|-
|-
|10
|10
Line 80: Line 128:
|Unimplemented instruction (line A)
|Unimplemented instruction (line A)
|Used to implement 680xx instructions in software. Not used on the NeoGeo.
|Used to implement 680xx instructions in software. Not used on the NeoGeo.
|1
|B
|-
|-
|11
|11
Line 86: Line 134:
|Unimplemented instruction (line F)
|Unimplemented instruction (line F)
|Used to implement 680xx instructions in software. Not used on the NeoGeo.
|Used to implement 680xx instructions in software. Not used on the NeoGeo.
|1
|B
|-
|-
|12
|12
Line 104: Line 152:
|Uninitialized interrupt vector
|Uninitialized interrupt vector
|Default vector used by uninitialized peripherals.
|Default vector used by uninitialized peripherals.
|
|B?
|-
|-
|16
|16

Revision as of 22:53, 26 August 2017

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 ?

Stack frames

See 68k exception handling.

Format A

Offset from SP Size Value
+0 Word Flags:
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Def 0:Write 1:Read 0:InstructionFunction code
+2 Longword Access address
+6 Word IR
+8 Word SR
+10 Longword PC

Format B

Offset from SP Size Value
+0 Word SR
+2 Longword PC

Vector list

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 as vectored interrupt (sector transfer complete ?).
22 000058 Normally reserved but used on the NeoGeo CD as vectored interrupt (initiates CD drive command/status exchange).
23 00005C Normally reserved but used on the NeoGeo CD as vectored interrupt (retrieves word value from $FF010C).
24 000060 Spurious interrupt No acknowledge from hardware.
25 000064 Level 1 interrupt autovector V-Blank (MVS) / Timer interrupt (CD).
26 000068 Level 2 interrupt autovector Timer interrupt (MVS) / V-Blank (CD).
27 00006C Level 3 interrupt autovector Cold boot.
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

Templates

For cartridge systems

    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

For CD systems

    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