mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
32x: skip unnecessary bios work in cd mode
This commit is contained in:
parent
6a5b1b362e
commit
61c4e5117a
1 changed files with 23 additions and 20 deletions
|
@ -134,28 +134,31 @@ void p32x_reset_sh2s(void)
|
||||||
// if we don't have BIOS set, perform it's work here.
|
// if we don't have BIOS set, perform it's work here.
|
||||||
// MSH2
|
// MSH2
|
||||||
if (p32x_bios_m == NULL) {
|
if (p32x_bios_m == NULL) {
|
||||||
unsigned int idl_src, idl_dst, idl_size; // initial data load
|
|
||||||
unsigned int vbr;
|
|
||||||
|
|
||||||
// initial data
|
|
||||||
idl_src = HWSWAP(*(unsigned int *)(Pico.rom + 0x3d4)) & ~0xf0000000;
|
|
||||||
idl_dst = HWSWAP(*(unsigned int *)(Pico.rom + 0x3d8)) & ~0xf0000000;
|
|
||||||
idl_size= HWSWAP(*(unsigned int *)(Pico.rom + 0x3dc));
|
|
||||||
if (idl_size > Pico.romsize || idl_src + idl_size > Pico.romsize ||
|
|
||||||
idl_size > 0x40000 || idl_dst + idl_size > 0x40000 || (idl_src & 3) || (idl_dst & 3)) {
|
|
||||||
elprintf(EL_STATUS|EL_ANOMALY, "32x: invalid initial data ptrs: %06x -> %06x, %06x",
|
|
||||||
idl_src, idl_dst, idl_size);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
memcpy(Pico32xMem->sdram + idl_dst, Pico.rom + idl_src, idl_size);
|
|
||||||
|
|
||||||
// GBR/VBR
|
|
||||||
vbr = HWSWAP(*(unsigned int *)(Pico.rom + 0x3e8));
|
|
||||||
sh2_set_gbr(0, 0x20004000);
|
sh2_set_gbr(0, 0x20004000);
|
||||||
sh2_set_vbr(0, vbr);
|
|
||||||
|
|
||||||
// checksum and M_OK
|
if (!(PicoAHW & PAHW_MCD)) {
|
||||||
Pico32x.regs[0x28 / 2] = *(unsigned short *)(Pico.rom + 0x18e);
|
unsigned int idl_src, idl_dst, idl_size; // initial data load
|
||||||
|
unsigned int vbr;
|
||||||
|
|
||||||
|
// initial data
|
||||||
|
idl_src = HWSWAP(*(unsigned int *)(Pico.rom + 0x3d4)) & ~0xf0000000;
|
||||||
|
idl_dst = HWSWAP(*(unsigned int *)(Pico.rom + 0x3d8)) & ~0xf0000000;
|
||||||
|
idl_size= HWSWAP(*(unsigned int *)(Pico.rom + 0x3dc));
|
||||||
|
if (idl_size > Pico.romsize || idl_src + idl_size > Pico.romsize ||
|
||||||
|
idl_size > 0x40000 || idl_dst + idl_size > 0x40000 || (idl_src & 3) || (idl_dst & 3)) {
|
||||||
|
elprintf(EL_STATUS|EL_ANOMALY, "32x: invalid initial data ptrs: %06x -> %06x, %06x",
|
||||||
|
idl_src, idl_dst, idl_size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
memcpy(Pico32xMem->sdram + idl_dst, Pico.rom + idl_src, idl_size);
|
||||||
|
|
||||||
|
// VBR
|
||||||
|
vbr = HWSWAP(*(unsigned int *)(Pico.rom + 0x3e8));
|
||||||
|
sh2_set_vbr(0, vbr);
|
||||||
|
|
||||||
|
// checksum and M_OK
|
||||||
|
Pico32x.regs[0x28 / 2] = *(unsigned short *)(Pico.rom + 0x18e);
|
||||||
|
}
|
||||||
// program will set M_OK
|
// program will set M_OK
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue