From: notaz Date: Fri, 18 Sep 2009 15:18:10 +0000 (+0000) Subject: 32x: some missed code from MAME, minor tweaks X-Git-Tag: v1.85~266 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3cf9570bacd8952713106a2a2e3176852d811d18;p=picodrive.git 32x: some missed code from MAME, minor tweaks git-svn-id: file:///home/notaz/opt/svn/PicoDrive@784 be3aeb3a-fb24-0410-a615-afba39da0efa --- diff --git a/cpu/sh2mame/sh2pico.c b/cpu/sh2mame/sh2pico.c index c6f87eaa..e77329c7 100644 --- a/cpu/sh2mame/sh2pico.c +++ b/cpu/sh2mame/sh2pico.c @@ -69,7 +69,13 @@ int sh2_execute(SH2 *sh2_, int cycles) { UINT32 opcode; - opcode = RW(sh2->pc); + if (sh2->delay) + { + opcode = RW(sh2->delay); + sh2->pc -= 2; + } + else + opcode = RW(sh2->pc); sh2->delay = 0; sh2->pc += 2; diff --git a/pico/32x/memory.c b/pico/32x/memory.c index a897529c..886799c7 100644 --- a/pico/32x/memory.c +++ b/pico/32x/memory.c @@ -52,7 +52,7 @@ static int poll_undetect(struct poll_det *pd, int flag) } // SH2 faking -//#define FAKE_SH2 +#define FAKE_SH2 int p32x_csum_faked; #ifdef FAKE_SH2 static const u16 comm_fakevals[] = { @@ -84,7 +84,7 @@ static u32 p32x_reg_read16(u32 a) { a &= 0x3e; -#ifdef FAKE_SH2 +#if 0 if ((a & 0x30) == 0x20) return sh2_comm_faker(a); #else @@ -93,6 +93,11 @@ static u32 p32x_reg_read16(u32 a) SekEndRun(16); } #endif +#ifdef FAKE_SH2 + // fake only slave for now + if (a == 0x24 || a == 0x26) + return sh2_comm_faker(a); +#endif return Pico32x.regs[a / 2]; } @@ -136,9 +141,11 @@ static void p32x_reg_write16(u32 a, u32 d) return; } - if ((a & 0x30) == 0x20) { + if ((a & 0x30) == 0x20 && r[a / 2] != d) { r[a / 2] = d; - poll_undetect(&msh2_poll, P32XF_MSH2POLL); + if (poll_undetect(&msh2_poll, P32XF_MSH2POLL)) + // if SH2 is busy waiting, it needs to see the result ASAP + SekEndRun(16); return; } @@ -460,6 +467,7 @@ out_16to8: u32 pico32x_read16(u32 a) { u32 d = 0; + if (a < sizeof(Pico32xMem->sh2_rom_m)) return *(u16 *)(Pico32xMem->sh2_rom_m + a);