mirror of
https://github.com/RaySollium99/picodrive.git
synced 2025-09-05 15:27:46 -04:00
32x, scheduling optimization
This commit is contained in:
parent
5f97951865
commit
6bb230c7ec
2 changed files with 8 additions and 8 deletions
|
@ -56,14 +56,14 @@ void p32x_update_irls(SH2 *active_sh2, unsigned int m68k_cycles)
|
||||||
if (mrun) {
|
if (mrun) {
|
||||||
p32x_sh2_poll_event(&msh2, SH2_IDLE_STATES, m68k_cycles);
|
p32x_sh2_poll_event(&msh2, SH2_IDLE_STATES, m68k_cycles);
|
||||||
if (msh2.state & SH2_STATE_RUN)
|
if (msh2.state & SH2_STATE_RUN)
|
||||||
sh2_end_run(&msh2, 1);
|
sh2_end_run(&msh2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
srun = sh2_irl_irq(&ssh2, slvl, ssh2.state & SH2_STATE_RUN);
|
srun = sh2_irl_irq(&ssh2, slvl, ssh2.state & SH2_STATE_RUN);
|
||||||
if (srun) {
|
if (srun) {
|
||||||
p32x_sh2_poll_event(&ssh2, SH2_IDLE_STATES, m68k_cycles);
|
p32x_sh2_poll_event(&ssh2, SH2_IDLE_STATES, m68k_cycles);
|
||||||
if (ssh2.state & SH2_STATE_RUN)
|
if (ssh2.state & SH2_STATE_RUN)
|
||||||
sh2_end_run(&ssh2, 1);
|
sh2_end_run(&ssh2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
elprintf(EL_32X, "update_irls: m %d/%d, s %d/%d", mlvl, mrun, slvl, srun);
|
elprintf(EL_32X, "update_irls: m %d/%d, s %d/%d", mlvl, mrun, slvl, srun);
|
||||||
|
@ -328,7 +328,7 @@ void p32x_event_schedule_sh2(SH2 *sh2, enum p32x_event event, int after)
|
||||||
left_to_next = C_M68K_TO_SH2(sh2, (int)(event_time_next - now));
|
left_to_next = C_M68K_TO_SH2(sh2, (int)(event_time_next - now));
|
||||||
if (sh2_cycles_left(sh2) > left_to_next) {
|
if (sh2_cycles_left(sh2) > left_to_next) {
|
||||||
if (left_to_next < 1)
|
if (left_to_next < 1)
|
||||||
left_to_next = 1;
|
left_to_next = 0;
|
||||||
sh2_end_run(sh2, left_to_next);
|
sh2_end_run(sh2, left_to_next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,7 +421,7 @@ void p32x_sync_other_sh2(SH2 *sh2, unsigned int m68k_target)
|
||||||
left_to_event = C_M68K_TO_SH2(sh2, (int)(event_time_next - m68k_target));
|
left_to_event = C_M68K_TO_SH2(sh2, (int)(event_time_next - m68k_target));
|
||||||
if (sh2_cycles_left(sh2) > left_to_event) {
|
if (sh2_cycles_left(sh2) > left_to_event) {
|
||||||
if (left_to_event < 1)
|
if (left_to_event < 1)
|
||||||
left_to_event = 1;
|
left_to_event = 0;
|
||||||
sh2_end_run(sh2, left_to_event);
|
sh2_end_run(sh2, left_to_event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ void NOINLINE p32x_sh2_poll_detect(u32 a, SH2 *sh2, u32 flags, int maxcnt)
|
||||||
sh2->state, sh2->state | flags);
|
sh2->state, sh2->state | flags);
|
||||||
|
|
||||||
sh2->state |= flags;
|
sh2->state |= flags;
|
||||||
sh2_end_run(sh2, 1);
|
sh2_end_run(sh2, 0);
|
||||||
pevt_log_sh2(sh2, EVT_POLL_START);
|
pevt_log_sh2(sh2, EVT_POLL_START);
|
||||||
#ifdef DRC_SH2
|
#ifdef DRC_SH2
|
||||||
// mark this as an address used for polling if SDRAM
|
// mark this as an address used for polling if SDRAM
|
||||||
|
@ -855,7 +855,7 @@ static void p32x_sh2reg_write8(u32 a, u32 d, SH2 *sh2)
|
||||||
p32x_m68k_poll_event(P32XF_68KCPOLL);
|
p32x_m68k_poll_event(P32XF_68KCPOLL);
|
||||||
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL, cycles);
|
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL, cycles);
|
||||||
if (p32x_sh2_ready(sh2->other_sh2, cycles+8))
|
if (p32x_sh2_ready(sh2->other_sh2, cycles+8))
|
||||||
sh2_end_run(sh2, 1);
|
sh2_end_run(sh2, 0);
|
||||||
sh2_poll_write(a & ~1, r[a / 2], cycles, sh2);
|
sh2_poll_write(a & ~1, r[a / 2], cycles, sh2);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -948,7 +948,7 @@ static void p32x_sh2reg_write16(u32 a, u32 d, SH2 *sh2)
|
||||||
p32x_m68k_poll_event(P32XF_68KCPOLL);
|
p32x_m68k_poll_event(P32XF_68KCPOLL);
|
||||||
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL, cycles);
|
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_CPOLL, cycles);
|
||||||
if (p32x_sh2_ready(sh2->other_sh2, cycles+8))
|
if (p32x_sh2_ready(sh2->other_sh2, cycles+8))
|
||||||
sh2_end_run(sh2, 1);
|
sh2_end_run(sh2, 0);
|
||||||
sh2_poll_write(a, d, cycles, sh2);
|
sh2_poll_write(a, d, cycles, sh2);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
@ -1583,7 +1583,7 @@ static void sh2_sdram_poll(u32 a, u32 d, SH2 *sh2)
|
||||||
sh2_poll_write(a, d, cycles, sh2);
|
sh2_poll_write(a, d, cycles, sh2);
|
||||||
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_RPOLL, cycles);
|
p32x_sh2_poll_event(sh2->other_sh2, SH2_STATE_RPOLL, cycles);
|
||||||
if (p32x_sh2_ready(sh2->other_sh2, cycles+8))
|
if (p32x_sh2_ready(sh2->other_sh2, cycles+8))
|
||||||
sh2_end_run(sh2, 1);
|
sh2_end_run(sh2, 0);
|
||||||
DRC_RESTORE_SR(sh2);
|
DRC_RESTORE_SR(sh2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue