mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-11-10 21:05:12 +01:00
[Core/CD] fixed Main-CPU/Sub-CPU synchronization edge case
This commit is contained in:
parent
31a15eaf7c
commit
cae62cd675
@ -445,10 +445,16 @@ static void s68k_poll_sync(unsigned int reg_mask)
|
|||||||
/* relative MAIN-CPU cycle counter */
|
/* relative MAIN-CPU cycle counter */
|
||||||
unsigned int cycles = (s68k.cycles * MCYCLES_PER_LINE) / SCYCLES_PER_LINE;
|
unsigned int cycles = (s68k.cycles * MCYCLES_PER_LINE) / SCYCLES_PER_LINE;
|
||||||
|
|
||||||
/* sync MAIN-CPU with SUB-CPU */
|
|
||||||
if (!m68k.stopped)
|
if (!m68k.stopped)
|
||||||
{
|
{
|
||||||
|
/* save current MAIN-CPU end cycle count (recursive execution is possible) */
|
||||||
|
int end_cycle = m68k.cycle_end;
|
||||||
|
|
||||||
|
/* sync MAIN-CPU with SUB-CPU */
|
||||||
m68k_run(cycles);
|
m68k_run(cycles);
|
||||||
|
|
||||||
|
/* restore MAIN-CPU end cycle count */
|
||||||
|
m68k.cycle_end = end_cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MAIN-CPU idle on register polling ? */
|
/* MAIN-CPU idle on register polling ? */
|
||||||
@ -669,8 +675,14 @@ static unsigned int scd_read_word(unsigned int address)
|
|||||||
/* relative MAIN-CPU cycle counter */
|
/* relative MAIN-CPU cycle counter */
|
||||||
unsigned int cycles = (s68k.cycles * MCYCLES_PER_LINE) / SCYCLES_PER_LINE;
|
unsigned int cycles = (s68k.cycles * MCYCLES_PER_LINE) / SCYCLES_PER_LINE;
|
||||||
|
|
||||||
|
/* save current MAIN-CPU end cycle count (recursive execution is possible) */
|
||||||
|
int end_cycle = m68k.cycle_end;
|
||||||
|
|
||||||
/* sync MAIN-CPU with SUB-CPU (Mighty Morphin Power Rangers) */
|
/* sync MAIN-CPU with SUB-CPU (Mighty Morphin Power Rangers) */
|
||||||
m68k_run(cycles);
|
m68k_run(cycles);
|
||||||
|
|
||||||
|
/* restore MAIN-CPU end cycle count */
|
||||||
|
m68k.cycle_end = end_cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
s68k_poll_detect(3 << (address & 0x1e));
|
s68k_poll_detect(3 << (address & 0x1e));
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Main 68k bus handlers
|
* Main 68k bus handlers
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998-2003 Charles Mac Donald (original code)
|
* Copyright (C) 1998-2003 Charles Mac Donald (original code)
|
||||||
* Copyright (C) 2007-2017 Eke-Eke (Genesis Plus GX)
|
* Copyright (C) 2007-2019 Eke-Eke (Genesis Plus GX)
|
||||||
*
|
*
|
||||||
* Redistribution and use of this code or any derivative works are permitted
|
* Redistribution and use of this code or any derivative works are permitted
|
||||||
* provided that the following conditions are met:
|
* provided that the following conditions are met:
|
||||||
@ -268,10 +268,16 @@ static void m68k_poll_sync(unsigned int reg_mask)
|
|||||||
/* relative SUB-CPU cycle counter */
|
/* relative SUB-CPU cycle counter */
|
||||||
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
||||||
|
|
||||||
/* sync SUB-CPU with MAIN-CPU */
|
|
||||||
if (!s68k.stopped)
|
if (!s68k.stopped)
|
||||||
{
|
{
|
||||||
|
/* save current SUB-CPU end cycle count (recursive execution is possible) */
|
||||||
|
int end_cycle = s68k.cycle_end;
|
||||||
|
|
||||||
|
/* sync SUB-CPU with MAIN-CPU */
|
||||||
s68k_run(cycles);
|
s68k_run(cycles);
|
||||||
|
|
||||||
|
/* restore SUB-CPU end cycle count */
|
||||||
|
s68k.cycle_end = end_cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SUB-CPU idle on register polling ? */
|
/* SUB-CPU idle on register polling ? */
|
||||||
@ -354,8 +360,14 @@ unsigned int ctrl_io_read_byte(unsigned int address)
|
|||||||
/* relative SUB-CPU cycle counter */
|
/* relative SUB-CPU cycle counter */
|
||||||
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
||||||
|
|
||||||
|
/* save current SUB-CPU end cycle count (recursive execution is possible) */
|
||||||
|
int end_cycle = s68k.cycle_end;
|
||||||
|
|
||||||
/* sync SUB-CPU with MAIN-CPU (Dracula Unleashed w/ Sega CD Model 2 Boot ROM) */
|
/* sync SUB-CPU with MAIN-CPU (Dracula Unleashed w/ Sega CD Model 2 Boot ROM) */
|
||||||
s68k_run(cycles);
|
s68k_run(cycles);
|
||||||
|
|
||||||
|
/* restore SUB-CPU end cycle count */
|
||||||
|
s68k.cycle_end = end_cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
m68k_poll_detect(1<<0x0f);
|
m68k_poll_detect(1<<0x0f);
|
||||||
@ -527,8 +539,14 @@ unsigned int ctrl_io_read_word(unsigned int address)
|
|||||||
/* relative SUB-CPU cycle counter */
|
/* relative SUB-CPU cycle counter */
|
||||||
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
||||||
|
|
||||||
|
/* save current SUB-CPU end cycle count (recursive execution is possible) */
|
||||||
|
int end_cycle = s68k.cycle_end;
|
||||||
|
|
||||||
/* sync SUB-CPU with MAIN-CPU (Soul Star) */
|
/* sync SUB-CPU with MAIN-CPU (Soul Star) */
|
||||||
s68k_run(cycles);
|
s68k_run(cycles);
|
||||||
|
|
||||||
|
/* restore SUB-CPU end cycle count */
|
||||||
|
s68k.cycle_end = end_cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
m68k_poll_detect(3 << (index - 0x10));
|
m68k_poll_detect(3 << (index - 0x10));
|
||||||
@ -646,8 +664,14 @@ void ctrl_io_write_byte(unsigned int address, unsigned int data)
|
|||||||
/* relative SUB-CPU cycle counter */
|
/* relative SUB-CPU cycle counter */
|
||||||
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
unsigned int cycles = (m68k.cycles * SCYCLES_PER_LINE) / MCYCLES_PER_LINE;
|
||||||
|
|
||||||
|
/* save current SUB-CPU end cycle count (recursive execution is possible) */
|
||||||
|
int end_cycle = s68k.cycle_end;
|
||||||
|
|
||||||
/* sync SUB-CPU with MAIN-CPU (Earnest Evans, Fhey Area) */
|
/* sync SUB-CPU with MAIN-CPU (Earnest Evans, Fhey Area) */
|
||||||
s68k_run(cycles);
|
s68k_run(cycles);
|
||||||
|
|
||||||
|
/* restore SUB-CPU end cycle count */
|
||||||
|
s68k.cycle_end = end_cycle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set IFL2 flag */
|
/* set IFL2 flag */
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Main 68k bus handlers
|
* Main 68k bus handlers
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998-2003 Charles Mac Donald (original code)
|
* Copyright (C) 1998-2003 Charles Mac Donald (original code)
|
||||||
* Copyright (C) 2007-2017 Eke-Eke (Genesis Plus GX)
|
* Copyright (C) 2007-2019 Eke-Eke (Genesis Plus GX)
|
||||||
*
|
*
|
||||||
* Redistribution and use of this code or any derivative works are permitted
|
* Redistribution and use of this code or any derivative works are permitted
|
||||||
* provided that the following conditions are met:
|
* provided that the following conditions are met:
|
||||||
|
Loading…
Reference in New Issue
Block a user