.ascii "J "\r
.long 0x000000,0x3fffff\r
.long 0xff0000,0xffffff\r
- .ascii "RA"; .byte 0xf8,0x20 /* 1b0 */\r
- .long 0x200001,0x20ffff /* 1b4 */\r
- .ascii " " /* 1bc */\r
- .ascii " " /* 1c0 */\r
- .ascii " "\r
- .ascii "JUE " /* 1f0 */\r
+ .ascii "RA"; .byte 0xf8,0x20 /* 1b0 */\r
+ .long 0x200001,0x20ffff /* 1b4 */\r
+ .ascii " " /* 1bc */\r
+ .ascii " " /* 1c0 */\r
+ .ascii "src: https://github.com/notaz/megadrive/" /* 1c8 */\r
+ .ascii "JUE " /* 1f0 */\r
+\r
+# 32X reset vector (880200)\r
+ bra RST32X\r
\r
# mystery landing area for reset with 32X on and RV=1\r
# 2c8 - 304 in multiples of 4\r
-.rept 0x1c0/2\r
+.rept 0x1bc/2\r
illegal\r
.endr\r
\r
#VBL:\r
# rte\r
\r
+RST32X:\r
+ lea ram_rv_switch, %a0\r
+ movea.l #0xff0100, %a1\r
+ lea ram_rv_switch_end, %a2\r
+0:\r
+ move.l (%a0)+, (%a1)+\r
+ cmp.l %a2, %a0\r
+ blt.s 0b\r
+ jmp (0xff0100).l\r
+\r
+ram_rv_switch:\r
+ move.l (0x880004).l, %a0\r
+ bset #0, (0xa15107).l /* RV=1 */\r
+ nop /* just in case */\r
+ jmp (%a0)\r
+ram_rv_switch_end:\r
+\r
pre_exception:\r
move.w #0x2700, %sr\r
movem.l %d0-%d7/%a0-%a7,-(%sp)\r
add.w #2, 0x3e(%sp)\r
move.l %sp, %d0\r
- move.l %d0,-(%sp)\r
+ move.l %d0,-(%sp) /* arg0 */\r
jsr exception\r
0:\r
bra 0b\r
.macro exc_stub num\r
exc\num:\r
move.w #0x\num, -(%sp)\r
- jmp pre_exception\r
+ bra pre_exception\r
.endm\r
\r
exc_stub 02\r