68k vector table: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
No edit summary
m (Table shrink and Neo CD interrupts)
Line 1: Line 1:
Default ASM vector tables for [[68k]] binaries. $C00426 is a [[BIOS calls|BIOS call]] for a complete reset on every systems (?).
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 calls|BIOS call]] for a complete reset ?
 
=Vector list=


{|class="regdef"
{|class="regdef"
Line 5: Line 13:
|'''Address'''
|'''Address'''
|'''Exception name'''
|'''Exception name'''
|'''Condition'''
|'''Trigger condition'''
|'''[[68k stack frames|Stack frame]]'''
|'''[[68k stack frames|Stack frame]]'''
|-
|-
|0
|0
|000000
|000000
|Reset SSP
|Reset SP
|Not really a vector. Stack pointer value at reset.
|Not really a vector. Used to initialize the stack pointer.
|
|
|-
|-
Line 17: Line 25:
|000004
|000004
|Reset PC
|Reset PC
|Reset
|Reset/startup
|0
|0
|-
|-
Line 23: Line 31:
|000008
|000008
|Bus error
|Bus error
|Bus cycle couldn't complete properly
|Bus cycle couldn't complete properly.
|0
|0
|-
|-
Line 29: Line 37:
|00000C
|00000C
|Address error
|Address error
|Misaligned word or longword memory access
|Misaligned (odd) word or longword memory access.
|0
|0
|-
|-
Line 35: Line 43:
|000010
|000010
|Illegal instruction
|Illegal instruction
|Incorrect opcode for 68000
|Tried executing an invalid opcode.
|1
|1
|-
|-
Line 41: Line 49:
|000014
|000014
|Division by zero
|Division by zero
|DIVUed or DIVSed by zero
|DIVUed or DIVSed by zero.
|2
|2
|-
|-
Line 47: Line 55:
|000018
|000018
|CHK instruction
|CHK instruction
|CHK resulted in out of bounds
|CHK resulted in "out of bounds".
|2
|2
|-
|-
Line 53: Line 61:
|00001C
|00001C
|TRAPV instruction
|TRAPV instruction
|TRAPV with V = 1
|TRAPV with overflow flag set.
|2
|2
|-
|-
Line 71: Line 79:
|000028
|000028
|Unimplemented instruction (line A)
|Unimplemented instruction (line A)
|
|Used to implement 680xx instructions in software. Not used on the NeoGeo.
|1
|1
|-
|-
Line 77: Line 85:
|00002C
|00002C
|Unimplemented instruction (line F)
|Unimplemented instruction (line F)
|
|Used to implement 680xx instructions in software. Not used on the NeoGeo.
|1
|1
|-
|-
|12
|12
|000030
|000030
|rowspan=3|Reserved by Motorola
|rowspan=3|Reserved/Unused on 68000
|rowspan=3|
|rowspan=3|
|rowspan=3|
|rowspan=3|
Line 94: Line 102:
|15
|15
|00003C
|00003C
|Uninitialised interrupt vector
|Uninitialized interrupt vector
|
|Default vector used by uninitialized peripherals.
|
|
|-
|-
|16
|16
|000040
|000040
|rowspan=8|Reserved by Motorola
|rowspan=5|Reserved
|rowspan=8|
|rowspan=5|
|rowspan=8|
|rowspan=5|
|-
|-
|17
|17
Line 118: Line 126:
|21
|21
|000054
|000054
|
|Normally reserved but used on the NeoGeo CD as vectored interrupt (sector transfer complete ?).
|
|-
|-
|22
|22
|000058
|000058
|
|Normally reserved but used on the NeoGeo CD as vectored interrupt (initiates [[CD drive]] command/status exchange).
|
|-
|-
|23
|23
|00005C
|00005C
|
|Normally reserved but used on the NeoGeo CD as vectored interrupt (retrieves word value from $FF010C).
|
|-
|-
|24
|24
|000060
|000060
|Spurious interrupt
|Spurious interrupt
|No ACK from hardware
|No acknowledge from hardware.
|
|
|-
|-
Line 134: Line 151:
|000064
|000064
|Level 1 [[68k interrupts|interrupt]] autovector
|Level 1 [[68k interrupts|interrupt]] autovector
|VBlank / Timer
|[[68k interrupts|V-Blank]] (MVS) / [[Timer interrupt]] (CD).
|
|
|-
|-
Line 140: Line 157:
|000068
|000068
|Level 2 interrupt autovector
|Level 2 interrupt autovector
|Timer / VBlank
|Timer interrupt (MVS) / V-Blank (CD).
|
|
|-
|-
Line 146: Line 163:
|00006C
|00006C
|Level 3 interrupt autovector
|Level 3 interrupt autovector
|Cold boot
|Cold boot.
|
|
|-
|-
|28
|28
|000070
|000070
|Level 4 autovector (not used)
|Level 4 interrupt autovector
|
|Not used on the NeoGeo.
|
|
|-
|-
|29
|29
|000074
|000074
|Level 5 autovector (not used)
|Level 5 interrupt autovector
|
|Not used on the NeoGeo.
|
|
|-
|-
|30
|30
|000078
|000078
|Level 6 autovector (not used)
|Level 6 interrupt autovector
|
|Not used on the NeoGeo.
|
|
|-
|-
|31
|31
|00007C
|00007C
|Level 7 autovector (not used)
|Level 7 interrupt autovector
|
|Not used on the NeoGeo.
|
|
|-
|-
|32
|32
|000080
|000080
|TRAP #0 instruction
|TRAP #0~15
|
|TRAP instructions.
|2
|-
|33
|000084
|TRAP #1 instruction
|
|2
|-
|34
|000088
|TRAP #2 instruction
|
|2
|-
|35
|00008C
|TRAP #3 instruction
|
|2
|-
|36
|000090
|TRAP #4 instruction
|
|2
|-
|37
|000094
|TRAP #5 instruction
|
|2
|-
|38
|000098
|TRAP #6 instruction
|
|2
|-
|39
|00009C
|TRAP #7 instruction
|
|2
|-
|40
|0000A0
|TRAP #8 instruction
|
|2
|-
|41
|0000A4
|TRAP #9 instruction
|
|2
|-
|42
|0000A8
|TRAP #10 instruction
|
|2
|-
|43
|0000AC
|TRAP #11 instruction
|
|2
|-
|44
|0000B0
|TRAP #12 instruction
|
|2
|-
|45
|0000B4
|TRAP #13 instruction
|
|2
|-
|46
|0000B8
|TRAP #14 instruction
|
|2
|-
|47
|0000BC
|TRAP #15 instruction
|
|2
|2
|-
|-
|48~63
|48~63
|0000C0~0000FC
|0000C0~0000FC
|Reserved by Motorola
|Reserved/Unused on 68000
|
|
|
|
Line 282: Line 209:
|}
|}


=Default vector tables=
=Templates=


==For cartridge systems==
==For cartridge systems==
Line 338: Line 265:
</syntaxhighlight>
</syntaxhighlight>


[[Category:Base system]]
[[Category:Code]]
[[Category:Code]]

Revision as of 21:35, 25 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 ?

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 0
2 000008 Bus error Bus cycle couldn't complete properly. 0
3 00000C Address error Misaligned (odd) word or longword memory access. 0
4 000010 Illegal instruction Tried executing an invalid opcode. 1
5 000014 Division by zero DIVUed or DIVSed by zero. 2
6 000018 CHK instruction CHK resulted in "out of bounds". 2
7 00001C TRAPV instruction TRAPV with overflow flag set. 2
8 000020 Privilege violation Use of privileged instruction. Never happens on the NeoGeo since the 68k always runs in supervisor mode. 1
9 000024 Trace After each executed instruction when 68k is in trace mode (debugger function). 1
10 000028 Unimplemented instruction (line A) Used to implement 680xx instructions in software. Not used on the NeoGeo. 1
11 00002C Unimplemented instruction (line F) Used to implement 680xx instructions in software. Not used on the NeoGeo. 1
12 000030 Reserved/Unused on 68000
13 000034
14 000038
15 00003C Uninitialized interrupt vector Default vector used by uninitialized peripherals.
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