mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
32x: remove some comm hacks
they can (and do) easily break things
This commit is contained in:
parent
6311a3baf5
commit
31fbc691a1
3 changed files with 16 additions and 27 deletions
|
@ -502,6 +502,9 @@ void sync_sh2s_normal(unsigned int m68k_target)
|
||||||
if (CYCLES_GT(m68k_target, ssh2.m68krcycles_done))
|
if (CYCLES_GT(m68k_target, ssh2.m68krcycles_done))
|
||||||
ssh2.m68krcycles_done = m68k_target;
|
ssh2.m68krcycles_done = m68k_target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// everyone is in sync now
|
||||||
|
Pico32x.comm_dirty = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define STEP_68K 24
|
#define STEP_68K 24
|
||||||
|
|
|
@ -191,12 +191,10 @@ static u32 p32x_reg_read16(u32 a)
|
||||||
int comreg = 1 << (a & 0x0f) / 2;
|
int comreg = 1 << (a & 0x0f) / 2;
|
||||||
|
|
||||||
if (cycles - msh2.m68krcycles_done > 244
|
if (cycles - msh2.m68krcycles_done > 244
|
||||||
|| (Pico32x.comm_dirty_68k & comreg))
|
|| (Pico32x.comm_dirty & comreg))
|
||||||
p32x_sync_sh2s(cycles);
|
p32x_sync_sh2s(cycles);
|
||||||
|
|
||||||
if (Pico32x.comm_dirty_sh2 & comreg)
|
if (m68k_poll_detect(a, cycles, P32XF_68KCPOLL)) {
|
||||||
Pico32x.comm_dirty_sh2 &= ~comreg;
|
|
||||||
else if (m68k_poll_detect(a, cycles, P32XF_68KCPOLL)) {
|
|
||||||
SekSetStop(1);
|
SekSetStop(1);
|
||||||
SekEndRun(16);
|
SekEndRun(16);
|
||||||
}
|
}
|
||||||
|
@ -388,14 +386,13 @@ static void p32x_reg_write8(u32 a, u32 d)
|
||||||
if (REG8IN16(r, a) == d)
|
if (REG8IN16(r, a) == d)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
comreg = 1 << (a & 0x0f) / 2;
|
|
||||||
if (Pico32x.comm_dirty_68k & comreg)
|
|
||||||
p32x_sync_sh2s(cycles);
|
p32x_sync_sh2s(cycles);
|
||||||
|
|
||||||
REG8IN16(r, a) = d;
|
REG8IN16(r, a) = d;
|
||||||
p32x_sh2_poll_event(&sh2s[0], SH2_STATE_CPOLL, cycles);
|
p32x_sh2_poll_event(&sh2s[0], SH2_STATE_CPOLL, cycles);
|
||||||
p32x_sh2_poll_event(&sh2s[1], 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)
|
if (cycles - (int)msh2.m68krcycles_done > 120)
|
||||||
p32x_sync_sh2s(cycles);
|
p32x_sync_sh2s(cycles);
|
||||||
|
@ -451,20 +448,13 @@ static void p32x_reg_write16(u32 a, u32 d)
|
||||||
int cycles = SekCyclesDone();
|
int cycles = SekCyclesDone();
|
||||||
int comreg;
|
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;
|
r[a / 2] = d;
|
||||||
p32x_sh2_poll_event(&sh2s[0], SH2_STATE_CPOLL, cycles);
|
p32x_sh2_poll_event(&sh2s[0], SH2_STATE_CPOLL, cycles);
|
||||||
p32x_sh2_poll_event(&sh2s[1], 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);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// PWM
|
// PWM
|
||||||
|
@ -601,10 +591,6 @@ static u32 p32x_sh2reg_read16(u32 a, SH2 *sh2)
|
||||||
|
|
||||||
// comm port
|
// comm port
|
||||||
if ((a & 0x30) == 0x20) {
|
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);
|
sh2s_sync_on_read(sh2);
|
||||||
return r[a / 2];
|
return r[a / 2];
|
||||||
|
@ -708,7 +694,7 @@ static void p32x_sh2reg_write8(u32 a, u32 d, SH2 *sh2)
|
||||||
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL,
|
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL,
|
||||||
sh2_cycles_done_m68k(sh2));
|
sh2_cycles_done_m68k(sh2));
|
||||||
comreg = 1 << (a & 0x0f) / 2;
|
comreg = 1 << (a & 0x0f) / 2;
|
||||||
Pico32x.comm_dirty_sh2 |= comreg;
|
Pico32x.comm_dirty |= comreg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -733,7 +719,7 @@ static void p32x_sh2reg_write16(u32 a, u32 d, SH2 *sh2)
|
||||||
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL,
|
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL,
|
||||||
sh2_cycles_done_m68k(sh2));
|
sh2_cycles_done_m68k(sh2));
|
||||||
comreg = 1 << (a & 0x0f) / 2;
|
comreg = 1 << (a & 0x0f) / 2;
|
||||||
Pico32x.comm_dirty_sh2 |= comreg;
|
Pico32x.comm_dirty |= comreg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// PWM
|
// PWM
|
||||||
|
|
|
@ -582,8 +582,8 @@ struct Pico32x
|
||||||
unsigned int dmac0_fifo_ptr;
|
unsigned int dmac0_fifo_ptr;
|
||||||
unsigned short vdp_fbcr_fake;
|
unsigned short vdp_fbcr_fake;
|
||||||
unsigned short pad2;
|
unsigned short pad2;
|
||||||
unsigned char comm_dirty_68k;
|
unsigned char comm_dirty;
|
||||||
unsigned char comm_dirty_sh2;
|
unsigned char pad3; // was comm_dirty_sh2
|
||||||
unsigned char pwm_irq_cnt;
|
unsigned char pwm_irq_cnt;
|
||||||
unsigned char pad1;
|
unsigned char pad1;
|
||||||
unsigned short pwm_p[2]; // pwm pos in fifo
|
unsigned short pwm_p[2]; // pwm pos in fifo
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue