mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
mcd, improve polling detection
This commit is contained in:
parent
fbebab6934
commit
5402223466
3 changed files with 9 additions and 5 deletions
|
@ -342,7 +342,7 @@ void pcd_run_cpus_normal(int m68k_cycles)
|
||||||
Pico_mcd->m.m68k_poll_cnt = 0;
|
Pico_mcd->m.m68k_poll_cnt = 0;
|
||||||
|
|
||||||
#ifdef USE_POLL_DETECT
|
#ifdef USE_POLL_DETECT
|
||||||
if (Pico_mcd->m.m68k_poll_cnt >= 16) {
|
if (Pico_mcd->m.m68k_poll_cnt >= 32) {
|
||||||
int s68k_left;
|
int s68k_left;
|
||||||
// main CPU is polling, (wake and) run sub only
|
// main CPU is polling, (wake and) run sub only
|
||||||
if (SekIsStoppedS68k())
|
if (SekIsStoppedS68k())
|
||||||
|
|
|
@ -63,19 +63,22 @@ static void remap_prg_window(u32 r1, u32 r3);
|
||||||
static void remap_word_ram(u32 r3);
|
static void remap_word_ram(u32 r3);
|
||||||
|
|
||||||
// poller detection
|
// poller detection
|
||||||
#define POLL_LIMIT 16
|
#define POLL_LIMIT 32
|
||||||
#define POLL_CYCLES 64
|
#define POLL_CYCLES 64
|
||||||
|
|
||||||
void m68k_comm_check(u32 a)
|
void m68k_comm_check(u32 a)
|
||||||
{
|
{
|
||||||
pcd_sync_s68k(SekCyclesDone(), 0);
|
u32 cycles = SekCyclesDone();
|
||||||
|
u32 clkdiff = cycles - Pico_mcd->m.m68k_poll_clk;
|
||||||
|
pcd_sync_s68k(cycles, 0);
|
||||||
if (a >= 0x0e && !Pico_mcd->m.need_sync) {
|
if (a >= 0x0e && !Pico_mcd->m.need_sync) {
|
||||||
// there are cases when slave updates comm and only switches RAM
|
// there are cases when slave updates comm and only switches RAM
|
||||||
// over after that (mcd1b), so there must be a resync..
|
// over after that (mcd1b), so there must be a resync..
|
||||||
SekEndRun(64);
|
SekEndRun(64);
|
||||||
Pico_mcd->m.need_sync = 1;
|
Pico_mcd->m.need_sync = 1;
|
||||||
}
|
}
|
||||||
if (SekNotPolling || a != Pico_mcd->m.m68k_poll_a) {
|
Pico_mcd->m.m68k_poll_clk = cycles;
|
||||||
|
if (SekNotPolling || a != Pico_mcd->m.m68k_poll_a || clkdiff > POLL_CYCLES) {
|
||||||
Pico_mcd->m.m68k_poll_a = a;
|
Pico_mcd->m.m68k_poll_a = a;
|
||||||
Pico_mcd->m.m68k_poll_cnt = 0;
|
Pico_mcd->m.m68k_poll_cnt = 0;
|
||||||
SekNotPolling = 0;
|
SekNotPolling = 0;
|
||||||
|
|
|
@ -491,7 +491,8 @@ struct mcd_misc
|
||||||
unsigned char dmna_ret_2m;
|
unsigned char dmna_ret_2m;
|
||||||
unsigned char need_sync;
|
unsigned char need_sync;
|
||||||
unsigned char pad3;
|
unsigned char pad3;
|
||||||
int pad4[9];
|
unsigned int m68k_poll_clk;
|
||||||
|
int pad4[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue