mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 07:17:45 -04:00
32x, fixes for msu
This commit is contained in:
parent
411b2c1949
commit
805fbe6faa
3 changed files with 11 additions and 11 deletions
|
@ -137,10 +137,9 @@ void p32x_reset_sh2s(void)
|
||||||
if (p32x_bios_m == NULL) {
|
if (p32x_bios_m == NULL) {
|
||||||
sh2_set_gbr(0, 0x20004000);
|
sh2_set_gbr(0, 0x20004000);
|
||||||
|
|
||||||
if (!(PicoIn.AHW & PAHW_MCD)) {
|
if (!Pico.m.ncart_in) { // copy IDL from cartridge
|
||||||
unsigned int idl_src, idl_dst, idl_size; // initial data load
|
unsigned int idl_src, idl_dst, idl_size; // initial data load
|
||||||
unsigned int vbr;
|
unsigned int vbr;
|
||||||
|
|
||||||
// initial data
|
// initial data
|
||||||
idl_src = CPU_BE2(*(u32 *)(Pico.rom + 0x3d4)) & ~0xf0000000;
|
idl_src = CPU_BE2(*(u32 *)(Pico.rom + 0x3d4)) & ~0xf0000000;
|
||||||
idl_dst = CPU_BE2(*(u32 *)(Pico.rom + 0x3d8)) & ~0xf0000000;
|
idl_dst = CPU_BE2(*(u32 *)(Pico.rom + 0x3d8)) & ~0xf0000000;
|
||||||
|
|
|
@ -351,10 +351,8 @@ static u32 p32x_reg_read16(u32 a)
|
||||||
if (CYCLES_GT(cycles - msh2.m68krcycles_done, 244))
|
if (CYCLES_GT(cycles - msh2.m68krcycles_done, 244))
|
||||||
p32x_sync_sh2s(cycles);
|
p32x_sync_sh2s(cycles);
|
||||||
|
|
||||||
if (m68k_poll_detect(a, cycles, P32XF_68KCPOLL)) {
|
if (m68k_poll_detect(a, cycles, P32XF_68KCPOLL))
|
||||||
SekSetStop(1);
|
SekSetStop(1);
|
||||||
SekEndRun(16);
|
|
||||||
}
|
|
||||||
return sh2_poll_read(a, Pico32x.regs[a / 2], cycles, NULL);
|
return sh2_poll_read(a, Pico32x.regs[a / 2], cycles, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2203,6 +2201,9 @@ static void get_bios(void)
|
||||||
|
|
||||||
// startup code
|
// startup code
|
||||||
memcpy(&Pico32xMem->sh2_rom_m.b[0x200], msh2_code, sizeof(msh2_code));
|
memcpy(&Pico32xMem->sh2_rom_m.b[0x200], msh2_code, sizeof(msh2_code));
|
||||||
|
if (!Pico.m.ncart_in && (PicoIn.AHW & PAHW_MCD))
|
||||||
|
// hack for MSU games (adjust delay loop for copying the MSU code to sub)
|
||||||
|
Pico32xMem->sh2_rom_m.w[0x224/2] = 0x0090;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSH2
|
// SSH2
|
||||||
|
|
|
@ -44,8 +44,8 @@ extern struct Cyclone PicoCpuCM68k, PicoCpuCS68k;
|
||||||
#define SekDarS68k(x) (x < 8 ? PicoCpuCS68k.d[x] : PicoCpuCS68k.a[x - 8])
|
#define SekDarS68k(x) (x < 8 ? PicoCpuCS68k.d[x] : PicoCpuCS68k.a[x - 8])
|
||||||
#define SekSr CycloneGetSr(&PicoCpuCM68k)
|
#define SekSr CycloneGetSr(&PicoCpuCM68k)
|
||||||
#define SekSrS68k CycloneGetSr(&PicoCpuCS68k)
|
#define SekSrS68k CycloneGetSr(&PicoCpuCS68k)
|
||||||
#define SekSetStop(x) { PicoCpuCM68k.state_flags&=~1; if (x) { PicoCpuCM68k.state_flags|=1; PicoCpuCM68k.cycles=0; } }
|
#define SekSetStop(x) { PicoCpuCM68k.state_flags&=~1; if (x) { PicoCpuCM68k.state_flags|=1; SekEndRun(0); } }
|
||||||
#define SekSetStopS68k(x) { PicoCpuCS68k.state_flags&=~1; if (x) { PicoCpuCS68k.state_flags|=1; PicoCpuCS68k.cycles=0; } }
|
#define SekSetStopS68k(x) { PicoCpuCS68k.state_flags&=~1; if (x) { PicoCpuCS68k.state_flags|=1; SekEndRunS68k(0); } }
|
||||||
#define SekIsStoppedM68k() (PicoCpuCM68k.state_flags&1)
|
#define SekIsStoppedM68k() (PicoCpuCM68k.state_flags&1)
|
||||||
#define SekIsStoppedS68k() (PicoCpuCS68k.state_flags&1)
|
#define SekIsStoppedS68k() (PicoCpuCS68k.state_flags&1)
|
||||||
#define SekShouldInterrupt() (PicoCpuCM68k.irq > (PicoCpuCM68k.srh&7))
|
#define SekShouldInterrupt() (PicoCpuCM68k.irq > (PicoCpuCM68k.srh&7))
|
||||||
|
@ -71,11 +71,11 @@ extern M68K_CONTEXT PicoCpuFM68k, PicoCpuFS68k;
|
||||||
#define SekSrS68k PicoCpuFS68k.sr
|
#define SekSrS68k PicoCpuFS68k.sr
|
||||||
#define SekSetStop(x) { \
|
#define SekSetStop(x) { \
|
||||||
PicoCpuFM68k.execinfo &= ~FM68K_HALTED; \
|
PicoCpuFM68k.execinfo &= ~FM68K_HALTED; \
|
||||||
if (x) { PicoCpuFM68k.execinfo |= FM68K_HALTED; PicoCpuFM68k.io_cycle_counter = 0; } \
|
if (x) { PicoCpuFM68k.execinfo |= FM68K_HALTED; SekEndRun(0); } \
|
||||||
}
|
}
|
||||||
#define SekSetStopS68k(x) { \
|
#define SekSetStopS68k(x) { \
|
||||||
PicoCpuFS68k.execinfo &= ~FM68K_HALTED; \
|
PicoCpuFS68k.execinfo &= ~FM68K_HALTED; \
|
||||||
if (x) { PicoCpuFS68k.execinfo |= FM68K_HALTED; PicoCpuFS68k.io_cycle_counter = 0; } \
|
if (x) { PicoCpuFS68k.execinfo |= FM68K_HALTED; SekEndRunS68k(0); } \
|
||||||
}
|
}
|
||||||
#define SekIsStoppedM68k() (PicoCpuFM68k.execinfo&FM68K_HALTED)
|
#define SekIsStoppedM68k() (PicoCpuFM68k.execinfo&FM68K_HALTED)
|
||||||
#define SekIsStoppedS68k() (PicoCpuFS68k.execinfo&FM68K_HALTED)
|
#define SekIsStoppedS68k() (PicoCpuFS68k.execinfo&FM68K_HALTED)
|
||||||
|
@ -102,11 +102,11 @@ extern m68ki_cpu_core PicoCpuMM68k, PicoCpuMS68k;
|
||||||
#define SekSr m68k_get_reg(&PicoCpuMM68k, M68K_REG_SR)
|
#define SekSr m68k_get_reg(&PicoCpuMM68k, M68K_REG_SR)
|
||||||
#define SekSrS68k m68k_get_reg(&PicoCpuMS68k, M68K_REG_SR)
|
#define SekSrS68k m68k_get_reg(&PicoCpuMS68k, M68K_REG_SR)
|
||||||
#define SekSetStop(x) { \
|
#define SekSetStop(x) { \
|
||||||
if(x) { PicoCpuMM68k.cyc_remaining_cycles = 0; PicoCpuMM68k.stopped=STOP_LEVEL_STOP; } \
|
if(x) { PicoCpuMM68k.stopped=STOP_LEVEL_STOP; SekEndRun(0)} \
|
||||||
else PicoCpuMM68k.stopped=0; \
|
else PicoCpuMM68k.stopped=0; \
|
||||||
}
|
}
|
||||||
#define SekSetStopS68k(x) { \
|
#define SekSetStopS68k(x) { \
|
||||||
if(x) { PicoCpuMS68k.cyc_remaining_cycles = 0; PicoCpuMS68k.stopped=STOP_LEVEL_STOP; } \
|
if(x) { PicoCpuMS68k.stopped=STOP_LEVEL_STOP; SekEndRunS68k(0); } \
|
||||||
else PicoCpuMS68k.stopped=0; \
|
else PicoCpuMS68k.stopped=0; \
|
||||||
}
|
}
|
||||||
#define SekIsStoppedM68k() (PicoCpuMM68k.stopped==STOP_LEVEL_STOP)
|
#define SekIsStoppedM68k() (PicoCpuMM68k.stopped==STOP_LEVEL_STOP)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue