int comreg = 1 << (a & 0x0f) / 2;
if (cycles - msh2.m68krcycles_done > 244
- || (Pico32x.comm_dirty_68k & comreg))
+ || (Pico32x.comm_dirty & comreg))
p32x_sync_sh2s(cycles);
- if (Pico32x.comm_dirty_sh2 & comreg)
- Pico32x.comm_dirty_sh2 &= ~comreg;
- else if (m68k_poll_detect(a, cycles, P32XF_68KCPOLL)) {
+ if (m68k_poll_detect(a, cycles, P32XF_68KCPOLL)) {
SekSetStop(1);
SekEndRun(16);
}
if (REG8IN16(r, a) == d)
return;
- comreg = 1 << (a & 0x0f) / 2;
- if (Pico32x.comm_dirty_68k & comreg)
- p32x_sync_sh2s(cycles);
+ p32x_sync_sh2s(cycles);
REG8IN16(r, a) = d;
p32x_sh2_poll_event(&sh2s[0], SH2_STATE_CPOLL, cycles);
p32x_sh2_poll_event(&sh2s[1], SH2_STATE_CPOLL, cycles);
- Pico32x.comm_dirty_68k |= comreg;
+ comreg = 1 << (a & 0x0f) / 2;
+ Pico32x.comm_dirty |= comreg;
if (cycles - (int)msh2.m68krcycles_done > 120)
p32x_sync_sh2s(cycles);
int cycles = SekCyclesDone();
int comreg;
- if (r[a / 2] == d)
- return;
-
- comreg = 1 << (a & 0x0f) / 2;
- if (Pico32x.comm_dirty_68k & comreg)
- p32x_sync_sh2s(cycles);
+ p32x_sync_sh2s(cycles);
r[a / 2] = d;
p32x_sh2_poll_event(&sh2s[0], SH2_STATE_CPOLL, cycles);
p32x_sh2_poll_event(&sh2s[1], SH2_STATE_CPOLL, cycles);
- Pico32x.comm_dirty_68k |= comreg;
-
- if (cycles - (int)msh2.m68krcycles_done > 120)
- p32x_sync_sh2s(cycles);
+ comreg = 1 << (a & 0x0f) / 2;
+ Pico32x.comm_dirty |= comreg;
return;
}
// PWM
// comm port
if ((a & 0x30) == 0x20) {
- int comreg = 1 << (a & 0x0f) / 2;
- if (Pico32x.comm_dirty_68k & comreg)
- Pico32x.comm_dirty_68k &= ~comreg;
- else
- sh2_poll_detect(sh2, a, SH2_STATE_CPOLL, 3);
+ sh2_poll_detect(sh2, a, SH2_STATE_CPOLL, 3);
sh2s_sync_on_read(sh2);
return r[a / 2];
}
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL,
sh2_cycles_done_m68k(sh2));
comreg = 1 << (a & 0x0f) / 2;
- Pico32x.comm_dirty_sh2 |= comreg;
+ Pico32x.comm_dirty |= comreg;
return;
}
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL,
sh2_cycles_done_m68k(sh2));
comreg = 1 << (a & 0x0f) / 2;
- Pico32x.comm_dirty_sh2 |= comreg;
+ Pico32x.comm_dirty |= comreg;
return;
}
// PWM
}
if ((a & 0xfc00) != 0x5000) {
- if (PicoAHW & PAHW_MCD)
+ if (PicoIn.AHW & PAHW_MCD)
return PicoRead8_mcd_io(a);
else
return PicoRead8_io(a);
}
if ((a & 0xfc00) != 0x5000) {
- if (PicoAHW & PAHW_MCD)
+ if (PicoIn.AHW & PAHW_MCD)
return PicoRead16_mcd_io(a);
else
return PicoRead16_io(a);
}
if ((a & 0xfc00) != 0x5000) {
- if (PicoAHW & PAHW_MCD)
+ if (PicoIn.AHW & PAHW_MCD)
PicoWrite8_mcd_io(a, d);
else
PicoWrite8_io(a, d);
}
if ((a & 0xfc00) != 0x5000) {
- if (PicoAHW & PAHW_MCD)
+ if (PicoIn.AHW & PAHW_MCD)
PicoWrite16_mcd_io(a, d);
else
PicoWrite16_io(a, d);
u32 PicoRead8_32x(u32 a)
{
u32 d = 0;
- if ((a & 0xffc0) == 0x5100) { // a15100
- // regs are always readable
- d = ((u8 *)Pico32x.regs)[(a & 0x3f) ^ 1];
- goto out;
- }
- if ((a & 0xfffc) == 0x30ec) { // a130ec
- d = str_mars[a & 3];
- goto out;
+ if (PicoIn.opt & POPT_EN_32X) {
+ if ((a & 0xffc0) == 0x5100) { // a15100
+ // regs are always readable
+ d = ((u8 *)Pico32x.regs)[(a & 0x3f) ^ 1];
+ goto out;
+ }
+
+ if ((a & 0xfffc) == 0x30ec) { // a130ec
+ d = str_mars[a & 3];
+ goto out;
+ }
}
elprintf(EL_UIO, "m68k unmapped r8 [%06x] @%06x", a, SekPc);
u32 PicoRead16_32x(u32 a)
{
u32 d = 0;
- if ((a & 0xffc0) == 0x5100) { // a15100
- d = Pico32x.regs[(a & 0x3f) / 2];
- goto out;
- }
- if ((a & 0xfffc) == 0x30ec) { // a130ec
- d = !(a & 2) ? ('M'<<8)|'A' : ('R'<<8)|'S';
- goto out;
+ if (PicoIn.opt & POPT_EN_32X) {
+ if ((a & 0xffc0) == 0x5100) { // a15100
+ d = Pico32x.regs[(a & 0x3f) / 2];
+ goto out;
+ }
+
+ if ((a & 0xfffc) == 0x30ec) { // a130ec
+ d = !(a & 2) ? ('M'<<8)|'A' : ('R'<<8)|'S';
+ goto out;
+ }
}
elprintf(EL_UIO, "m68k unmapped r16 [%06x] @%06x", a, SekPc);
void PicoWrite8_32x(u32 a, u32 d)
{
- if ((a & 0xffc0) == 0x5100) { // a15100
+ if ((PicoIn.opt & POPT_EN_32X) && (a & 0xffc0) == 0x5100) // a15100
+ {
u16 *r = Pico32x.regs;
elprintf(EL_32X, "m68k 32x w8 [%06x] %02x @%06x", a, d & 0xff, SekPc);
void PicoWrite16_32x(u32 a, u32 d)
{
- if ((a & 0xffc0) == 0x5100) { // a15100
+ if ((PicoIn.opt & POPT_EN_32X) && (a & 0xffc0) == 0x5100) // a15100
+ {
u16 *r = Pico32x.regs;
elprintf(EL_UIO, "m68k 32x w16 [%06x] %04x @%06x", a, d & 0xffff, SekPc);