mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
32x: improve 68k bios handling
This commit is contained in:
parent
6c2041fea0
commit
eefdb8a559
1 changed files with 20 additions and 6 deletions
|
@ -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),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue