X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=testpico%2Fsega_gcc.s;h=1e0116aeb58dc0e5fd0dca45b4d7be84c0e26da8;hb=HEAD;hp=7b33fb0c1c5218a80929cd686933982b20b8b138;hpb=b40440c43fc737d9384d8b7724d8b36b0da2f37d;p=megadrive.git diff --git a/testpico/sega_gcc.s b/testpico/sega_gcc.s index 7b33fb0..4abb418 100644 --- a/testpico/sega_gcc.s +++ b/testpico/sega_gcc.s @@ -1,5 +1,5 @@ exc_tab: - dc.l 0, 0x200, exc02, exc03, exc04, exc05, exc06, exc07 + dc.l 0, RST, exc02, exc03, exc04, exc05, exc06, exc07 dc.l exc08, exc09, exc0a, exc0b, exc0c, exc0d, exc0e, exc0f dc.l exc10, exc11, exc12, exc13, exc14, exc15, exc16, exc17 dc.l exc18, exc19, exc1a, exc1b, 0xff0100, exc1d, 0xff0140, exc1f @@ -8,36 +8,126 @@ exc_tab: dc.l exc30, exc31, exc32, exc33, exc34, exc35, exc3e, exc37 dc.l exc38, exc39, exc3a, exc3b, exc3c, exc3d, exc3e, exc3f - .ascii "SEGA GENESIS " + .ascii "SEGA 32X " .ascii "PD testsuite " .ascii "PD testsuite " .ascii "GM 00000000-00" .byte 0x00,0x00 .ascii "J " - dc.l 0x000000,0x3fffff - dc.l 0xff0000,0xffffff - .ascii "RA"; .byte 0xf8,0x20 /* 1b0 */ - dc.l 0x200001,0x20ffff /* 1b4 */ - .ascii " " /* 1bc */ - .ascii " " /* 1c0 */ - .ascii " " - .ascii "JUE " /* 1f0 */ + .long 0x000000,0x3fffff + .long 0xff0000,0xffffff + .ascii "RA"; .byte 0xf8,0x20 /* 1b0 */ + .long 0x200001,0x20ffff /* 1b4 */ + .ascii " " /* 1bc */ + .ascii " " /* 1c0 */ + .ascii "src: https://github.com/notaz/megadrive/" /* 1c8 */ + .ascii "JUE " /* 1f0 */ -RST: - move.w #0x2700, %sr +# 32X reset vector (880200) + bra RST32X + +# mystery landing area for reset with 32X on and RV=1 +# 2c8 - 304 in multiples of 4 +.rept 0x1bc/2 + illegal +.endr - move.b (0xA10001), %d0 - andi.b #0x0F, %d0 - beq.s 0f - move.l #0x53454741, (0xA14000) /* 'SEGA' */ + /* MARS data */ + .org 0x3c0 + .ascii "PD testsuite " + .long 0 /* version? not used */ + .long sh2_test /* ROM src */ + .long 0 /* SDRAM dst */ + .long sh2_test_end-sh2_test /* length */ + .long 0x06000400 /* master entry */ + .long 0x06000404 /* slave entry */ + .long 0x06000000 /* master VBR */ + .long 0x06000200 /* slave VBR */ + /* Standard 32X startup code for MD side at 0x3F0 */ + .org 0x3f0 + .word 0x287C,0xFFFF,0xFFC0,0x23FC,0x0000,0x0000,0x00A1,0x5128 + .word 0x46FC,0x2700,0x4BF9,0x00A1,0x0000,0x7001,0x0CAD,0x4D41 + .word 0x5253,0x30EC,0x6600,0x03E6,0x082D,0x0007,0x5101,0x67F8 + .word 0x4AAD,0x0008,0x6710,0x4A6D,0x000C,0x670A,0x082D,0x0000 + .word 0x5101,0x6600,0x03B8,0x102D,0x0001,0x0200,0x000F,0x6706 + .word 0x2B78,0x055A,0x4000,0x7200,0x2C41,0x4E66,0x41F9,0x0000 + .word 0x04D4,0x6100,0x0152,0x6100,0x0176,0x47F9,0x0000,0x04E8 + .word 0x43F9,0x00A0,0x0000,0x45F9,0x00C0,0x0011,0x3E3C,0x0100 + .word 0x7000,0x3B47,0x1100,0x3B47,0x1200,0x012D,0x1100,0x66FA + .word 0x7425,0x12DB,0x51CA,0xFFFC,0x3B40,0x1200,0x3B40,0x1100 + .word 0x3B47,0x1200,0x149B,0x149B,0x149B,0x149B,0x41F9,0x0000 + .word 0x04C0,0x43F9,0x00FF,0x0000,0x22D8,0x22D8,0x22D8,0x22D8 + .word 0x22D8,0x22D8,0x22D8,0x22D8,0x41F9,0x00FF,0x0000,0x4ED0 + .word 0x1B7C,0x0001,0x5101,0x41F9,0x0000,0x06BC,0xD1FC,0x0088 + .word 0x0000,0x4ED0,0x0404,0x303C,0x076C,0x0000,0x0000,0xFF00 + .word 0x8137,0x0002,0x0100,0x0000,0xAF01,0xD91F,0x1127,0x0021 + .word 0x2600,0xF977,0xEDB0,0xDDE1,0xFDE1,0xED47,0xED4F,0xD1E1 + .word 0xF108,0xD9C1,0xD1E1,0xF1F9,0xF3ED,0x5636,0xE9E9,0x9FBF + .word 0xDFFF,0x4D41,0x5253,0x2049,0x6E69,0x7469,0x616C,0x2026 + .word 0x2053,0x6563,0x7572,0x6974,0x7920,0x5072,0x6F67,0x7261 + .word 0x6D20,0x2020,0x2020,0x2020,0x2020,0x2043,0x6172,0x7472 + .word 0x6964,0x6765,0x2056,0x6572,0x7369,0x6F6E,0x2020,0x2020 + .word 0x436F,0x7079,0x7269,0x6768,0x7420,0x5345,0x4741,0x2045 + .word 0x4E54,0x4552,0x5052,0x4953,0x4553,0x2C4C,0x5444,0x2E20 + .word 0x3139,0x3934,0x2020,0x2020,0x2020,0x2020,0x2020,0x2020 + .word 0x2020,0x2020,0x2020,0x2020,0x2020,0x2020,0x2020,0x2020 + .word 0x2020,0x2020,0x2020,0x524F,0x4D20,0x5665,0x7273,0x696F + .word 0x6E20,0x312E,0x3000,0x48E7,0xC040,0x43F9,0x00C0,0x0004 + .word 0x3011,0x303C,0x8000,0x323C,0x0100,0x3E3C,0x0012,0x1018 + .word 0x3280,0xD041,0x51CF,0xFFF8,0x4CDF,0x0203,0x4E75,0x48E7 + .word 0x81C0,0x41F9,0x0000,0x063E,0x43F9,0x00C0,0x0004,0x3298 + .word 0x3298,0x3298,0x3298,0x3298,0x3298,0x3298,0x2298,0x3341 + .word 0xFFFC,0x3011,0x0800,0x0001,0x66F8,0x3298,0x3298,0x7000 + .word 0x22BC,0xC000,0x0000,0x7E0F,0x3340,0xFFFC,0x3340,0xFFFC + .word 0x3340,0xFFFC,0x3340,0xFFFC,0x51CF,0xFFEE,0x22BC,0x4000 + .word 0x0010,0x7E09,0x3340,0xFFFC,0x3340,0xFFFC,0x3340,0xFFFC + .word 0x3340,0xFFFC,0x51CF,0xFFEE,0x4CDF,0x0381,0x4E75,0x8114 + .word 0x8F01,0x93FF,0x94FF,0x9500,0x9600,0x9780,0x4000,0x0080 + .word 0x8104,0x8F02,0x48E7,0xC140,0x43F9,0x00A1,0x5180,0x08A9 + .word 0x0007,0xFF80,0x66F8,0x3E3C,0x00FF,0x7000,0x7200,0x337C + .word 0x00FF,0x0004,0x3341,0x0006,0x3340,0x0008,0x4E71,0x0829 + .word 0x0001,0x000B,0x66F8,0x0641,0x0100,0x51CF,0xFFE8,0x4CDF + .word 0x0283,0x4E75,0x48E7,0x8180,0x41F9,0x00A1,0x5200,0x08A8 + .word 0x0007,0xFF00,0x66F8,0x3E3C,0x001F,0x20C0,0x20C0,0x20C0 + .word 0x20C0,0x51CF,0xFFF6,0x4CDF,0x0181,0x4E75,0x41F9,0x00FF + .word 0x0000,0x3E3C,0x07FF,0x7000,0x20C0,0x20C0,0x20C0,0x20C0 + .word 0x20C0,0x20C0,0x20C0,0x20C0,0x51CF,0xFFEE,0x3B7C,0x0000 + .word 0x1200,0x7E0A,0x51CF,0xFFFE,0x43F9,0x00A1,0x5100,0x7000 + .word 0x2340,0x0020,0x2340,0x0024,0x1B7C,0x0003,0x5101,0x2E79 + .word 0x0088,0x0000,0x0891,0x0007,0x66FA,0x7000,0x3340,0x0002 + .word 0x3340,0x0004,0x3340,0x0006,0x2340,0x0008,0x2340,0x000C + .word 0x3340,0x0010,0x3340,0x0030,0x3340,0x0032,0x3340,0x0038 + .word 0x3340,0x0080,0x3340,0x0082,0x08A9,0x0000,0x008B,0x66F8 + .word 0x6100,0xFF12,0x08E9,0x0000,0x008B,0x67F8,0x6100,0xFF06 + .word 0x08A9,0x0000,0x008B,0x6100,0xFF3C,0x303C,0x0040,0x2229 + .word 0x0020,0x0C81,0x5351,0x4552,0x6700,0x0092,0x303C,0x0080 + .word 0x2229,0x0020,0x0C81,0x5344,0x4552,0x6700,0x0080,0x21FC + .word 0x0088,0x02A2,0x0070,0x303C,0x0002,0x7200,0x122D,0x0001 + .word 0x1429,0x0080,0xE14A,0x8242,0x0801,0x000F,0x660A,0x0801 + .word 0x0006,0x6700,0x0058,0x6008,0x0801,0x0006,0x6600,0x004E + .word 0x7020,0x41F9,0x0088,0x0000,0x3C28,0x018E,0x4A46,0x6700 + .word 0x0010,0x3429,0x0028,0x0C42,0x0000,0x67F6,0xB446,0x662C + .word 0x7000,0x2340,0x0028,0x2340,0x002C,0x3E14,0x2C7C,0xFFFF + .word 0xFFC0,0x4CD6,0x7FF9,0x44FC,0x0000,0x6014,0x43F9,0x00A1 + .word 0x5100,0x3340,0x0006,0x303C,0x8000,0x6004,0x44FC,0x0001 + +RST: + andi.b #0x0F, (0xA10001) /* 24 */ + bne.s 0f /* 10 */ + move.w #0x8104, (0xc00004) + bra 1f 0: - tst.w (0xc00004).l + move.l #0x53454741, (0xA14000) /* 28 'SEGA' */ +1: + move.w (0xc00008), %d0 /* 16 */ + move.w %d0, -(%sp) + subq.l #2, %sp + move %sp, %usp - moveq #0, %d0 - movea.l %d0, %a7 - move %a7, %usp + move.w #0x2600, %sr /* clear .bss */ + moveq.l #0, %d0 lea __bss_start, %a0 lea __end, %a1 0: @@ -54,19 +144,37 @@ RST: #VBL: # rte +RST32X: + lea ram_rv_switch, %a0 + movea.l #0xff0100, %a1 + lea ram_rv_switch_end, %a2 +0: + move.l (%a0)+, (%a1)+ + cmp.l %a2, %a0 + blt.s 0b + jmp (0xff0100).l + +ram_rv_switch: + move.l (0x880004).l, %a0 + bset #0, (0xa15107).l /* RV=1 */ + nop /* just in case */ + jmp (%a0) +ram_rv_switch_end: + pre_exception: move.w #0x2700, %sr movem.l %d0-%d7/%a0-%a7,-(%sp) - move.l %sp, %d0 - move.l %d0,-(%sp) - jsr exception + add.w #2, 0x3e(%sp) /* ecxnum */ + move.l %sp, %d0 + move.l %d0,-(%sp) /* arg0 */ + jsr exception 0: - bra 0b + bra 0b .macro exc_stub num exc\num: move.w #0x\num, -(%sp) - jmp pre_exception + bra pre_exception .endm exc_stub 02 @@ -83,6 +191,7 @@ exc_stub 0c exc_stub 0d exc_stub 0e exc_stub 0f + exc_stub 10 exc_stub 11 exc_stub 12 @@ -101,6 +210,7 @@ exc_stub 1d VBL: exc_stub 1e exc_stub 1f + exc_stub 20 exc_stub 21 exc_stub 22 @@ -134,4 +244,32 @@ exc_stub 3d exc_stub 3e exc_stub 3f +.align 4 + +# must avoid anything use 1070, 2070, 3070 after RV is set, +# so let's place some data here +.global z80_test +.global z80_test_end +z80_test: +.incbin "z80_test.bin80" +z80_test_end: + +.align 4 + +.global sh2_test +.global sh2_test_end +sh2_test: +.incbin "sh2_test.binsh" +sh2_test_end: + +.org 0x2070 +.long 0x1234567f + +.global font_base +font_base: +.incbin "font.bin" + +.org 0x3070 +.long 0x3456789f + # vim:filetype=asmM68k:ts=4:sw=4:expandtab