32x: improve 68k bios handling

This commit is contained in:
notaz 2017-11-29 02:31:19 +02:00
parent 6c2041fea0
commit eefdb8a559

View file

@ -1644,23 +1644,37 @@ static void get_bios(void)
Byteswap(Pico32xMem->m68k_rom, p32x_bios_g, sizeof(Pico32xMem->m68k_rom)); Byteswap(Pico32xMem->m68k_rom, p32x_bios_g, sizeof(Pico32xMem->m68k_rom));
} }
else { else {
static const u16 andb[] = { 0x0239, 0x00fe, 0x00a1, 0x5107 };
static const u16 p_d4[] = {
0x48e7, 0x8040, // movem.l d0/a1, -(sp)
0x227c, 0x00a1, 0x30f1, // movea.l #0xa130f1, a1
0x7007, // moveq.l #7, d0
0x12d8, //0: move.b (a0)+, (a1)+
0x5289, // addq.l #1, a1
0x51c8, 0xfffa, // dbra d0, 0b
0x0239, 0x00fe, 0x00a1, // and.b #0xfe, (0xa15107).l
0x5107,
0x4cdf, 0x0201 // movem.l (sp)+, d0/a1
};
// generate 68k ROM // generate 68k ROM
ps = (u16 *)Pico32xMem->m68k_rom; ps = (u16 *)Pico32xMem->m68k_rom;
pl = (u32 *)ps; pl = (u32 *)ps;
for (i = 1; i < 0xc0/4; i++) for (i = 1; i < 0xc0/4; i++)
pl[i] = HWSWAP(0x880200 + (i - 1) * 6); pl[i] = HWSWAP(0x880200 + (i - 1) * 6);
pl[0x70/4] = 0;
// fill with nops // fill with nops
for (i = 0xc0/2; i < 0x100/2; i++) for (i = 0xc0/2; i < 0x100/2; i++)
ps[i] = 0x4e71; ps[i] = 0x4e71;
#if 0 // c0: don't need to care about RV - not emulated
ps[0xc0/2] = 0x46fc; ps[0xc8/2] = 0x1280; // move.b d0, (a1)
ps[0xc2/2] = 0x2700; // move #0x2700,sr memcpy(ps + 0xca/2, andb, sizeof(andb)); // and.b #0xfe, (a15107)
ps[0xfe/2] = 0x60fe; // jump to self ps[0xd2/2] = 0x4e75; // rts
#else // d4:
memcpy(ps + 0xd4/2, p_d4, sizeof(p_d4));
ps[0xfe/2] = 0x4e75; // rts ps[0xfe/2] = 0x4e75; // rts
#endif
} }
// fill remaining m68k_rom page with game ROM // fill remaining m68k_rom page with game ROM
memcpy(Pico32xMem->m68k_rom_bank + sizeof(Pico32xMem->m68k_rom), memcpy(Pico32xMem->m68k_rom_bank + sizeof(Pico32xMem->m68k_rom),