mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-11-09 12:25:16 +01:00
optimized CPU cores instruction cycle counting (master clock multiplier is now applied during init)
fixed a recently introduced typo that make STOP instruction locks the machine (Thunderforce IV)
This commit is contained in:
parent
e2eab7f408
commit
f734e2fade
@ -111,7 +111,7 @@ INLINE unsigned getDivu68kCycles( DWORD dividend, WORD divisor)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return mcycles * 2;
|
return mcycles * 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -133,7 +133,7 @@ INLINE unsigned getDivs68kCycles( LONG dividend, SHORT divisor)
|
|||||||
// Check for absolute overflow
|
// Check for absolute overflow
|
||||||
if( ((DWORD) abs( dividend) >> 16) >= (WORD) abs( divisor))
|
if( ((DWORD) abs( dividend) >> 16) >= (WORD) abs( divisor))
|
||||||
{
|
{
|
||||||
return (mcycles + 2) * 2;
|
return (mcycles + 2) * 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Absolute quotient
|
// Absolute quotient
|
||||||
@ -159,7 +159,7 @@ INLINE unsigned getDivs68kCycles( LONG dividend, SHORT divisor)
|
|||||||
aquot <<= 1;
|
aquot <<= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mcycles * 2;
|
return mcycles * 14;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -171,14 +171,14 @@ INLINE unsigned getMulu68kCycles( WORD source)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
unsigned mcycles = 38;
|
unsigned mcycles = 266;
|
||||||
|
|
||||||
/* count number of bits set to 1 */
|
/* count number of bits set to 1 */
|
||||||
for( i = 0; i < 15; i++)
|
for( i = 0; i < 15; i++)
|
||||||
{
|
{
|
||||||
if (source & 1)
|
if (source & 1)
|
||||||
{
|
{
|
||||||
mcycles += 2;
|
mcycles += 14;
|
||||||
}
|
}
|
||||||
source >>= 1;
|
source >>= 1;
|
||||||
}
|
}
|
||||||
@ -196,7 +196,7 @@ INLINE unsigned getMuls68kCycles( SHORT source)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
unsigned mcycles = 38;
|
unsigned mcycles = 266;
|
||||||
|
|
||||||
/* detect 01 or 10 patterns */
|
/* detect 01 or 10 patterns */
|
||||||
LONG temp = source << 1;
|
LONG temp = source << 1;
|
||||||
@ -207,7 +207,7 @@ INLINE unsigned getMuls68kCycles( SHORT source)
|
|||||||
{
|
{
|
||||||
if (source & 1)
|
if (source & 1)
|
||||||
{
|
{
|
||||||
mcycles += 2;
|
mcycles += 14;
|
||||||
}
|
}
|
||||||
source >>= 1;
|
source >>= 1;
|
||||||
}
|
}
|
||||||
|
@ -124,7 +124,7 @@ const uint m68ki_shift_32_table[65] =
|
|||||||
/* Number of clock cycles to use for exception processing.
|
/* Number of clock cycles to use for exception processing.
|
||||||
* I used 4 for any vectors that are undocumented for processing times.
|
* I used 4 for any vectors that are undocumented for processing times.
|
||||||
*/
|
*/
|
||||||
const uint8 m68ki_exception_cycle_table[4][256] =
|
uint16 m68ki_exception_cycle_table[4][256] =
|
||||||
{
|
{
|
||||||
{ /* 000 */
|
{ /* 000 */
|
||||||
40, /* 0: Reset - Initial Stack Pointer */
|
40, /* 0: Reset - Initial Stack Pointer */
|
||||||
@ -420,6 +420,7 @@ const uint8 m68ki_exception_cycle_table[4][256] =
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if M68K_EMULATE_010 || M68K_EMULATE_020 || M68K_EMULATE_EC020 || M68K_EMULATE_040
|
||||||
const uint8 m68ki_ea_idx_cycle_table[64] =
|
const uint8 m68ki_ea_idx_cycle_table[64] =
|
||||||
{
|
{
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
@ -439,7 +440,7 @@ const uint8 m68ki_ea_idx_cycle_table[64] =
|
|||||||
13, /* ..11..11 memory indirect, base 32, outer 32 */
|
13, /* ..11..11 memory indirect, base 32, outer 32 */
|
||||||
0, 11, 13, 13, 0, 11, 13, 13, 0, 11, 13, 13
|
0, 11, 13, 13, 0, 11, 13, 13, 0, 11, 13, 13
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
@ -683,15 +684,15 @@ void m68k_set_cpu_type(unsigned int cpu_type)
|
|||||||
CPU_SR_MASK = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
|
CPU_SR_MASK = 0xa71f; /* T1 -- S -- -- I2 I1 I0 -- -- -- X N Z V C */
|
||||||
CYC_INSTRUCTION = m68ki_cycles[0];
|
CYC_INSTRUCTION = m68ki_cycles[0];
|
||||||
CYC_EXCEPTION = m68ki_exception_cycle_table[0];
|
CYC_EXCEPTION = m68ki_exception_cycle_table[0];
|
||||||
CYC_BCC_NOTAKE_B = -2;
|
CYC_BCC_NOTAKE_B = -2 * 7;
|
||||||
CYC_BCC_NOTAKE_W = 2;
|
CYC_BCC_NOTAKE_W = 2 * 7;
|
||||||
CYC_DBCC_F_NOEXP = -2;
|
CYC_DBCC_F_NOEXP = -2 * 7;
|
||||||
CYC_DBCC_F_EXP = 2;
|
CYC_DBCC_F_EXP = 2 * 7;
|
||||||
CYC_SCC_R_TRUE = 2;
|
CYC_SCC_R_TRUE = 2 * 7;
|
||||||
CYC_MOVEM_W = 2;
|
CYC_MOVEM_W = 4 * 7;
|
||||||
CYC_MOVEM_L = 3;
|
CYC_MOVEM_L = 8 * 7;
|
||||||
CYC_SHIFT = 1;
|
CYC_SHIFT = 2 * 7;
|
||||||
CYC_RESET = 132;
|
CYC_RESET = 132 * 7;
|
||||||
return;
|
return;
|
||||||
case M68K_CPU_TYPE_68008:
|
case M68K_CPU_TYPE_68008:
|
||||||
CPU_TYPE = CPU_TYPE_008;
|
CPU_TYPE = CPU_TYPE_008;
|
||||||
@ -839,13 +840,6 @@ void m68k_run (unsigned int cycles)
|
|||||||
|
|
||||||
while (mcycles_68k < cycles)
|
while (mcycles_68k < cycles)
|
||||||
{
|
{
|
||||||
/* Make sure we're not stopped */
|
|
||||||
if(CPU_STOPPED)
|
|
||||||
{
|
|
||||||
mcycles_68k = cycles;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check interrupt updates */
|
/* check interrupt updates */
|
||||||
if (irq_status & 0x10)
|
if (irq_status & 0x10)
|
||||||
{
|
{
|
||||||
@ -857,7 +851,7 @@ void m68k_run (unsigned int cycles)
|
|||||||
m68k_execute();
|
m68k_execute();
|
||||||
|
|
||||||
#ifdef LOGVDP
|
#ifdef LOGVDP
|
||||||
error("[%d(%d)][%d(%d)] IRQ Level = %d (%x)\n", v_counter, mcycles_68k/3420, mcycles_68k, mcycles_68k%3420,int_level,m68k_get_reg (NULL, M68K_REG_PC));
|
error("[%d(%d)][%d(%d)] IRQ Level = %d(0x%02x) (%x)\n", v_counter, mcycles_68k/3420, mcycles_68k, mcycles_68k%3420,int_level,FLAG_INT_MASK,m68k_get_reg (NULL, M68K_REG_PC));
|
||||||
#endif
|
#endif
|
||||||
/* update IRQ level */
|
/* update IRQ level */
|
||||||
CPU_INT_LEVEL = int_level << 8;
|
CPU_INT_LEVEL = int_level << 8;
|
||||||
@ -865,7 +859,13 @@ void m68k_run (unsigned int cycles)
|
|||||||
|
|
||||||
if (mcycles_68k >= cycles)
|
if (mcycles_68k >= cycles)
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure we're not stopped */
|
||||||
|
if(CPU_STOPPED)
|
||||||
|
{
|
||||||
|
mcycles_68k = cycles;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* execute a single instruction */
|
/* execute a single instruction */
|
||||||
|
@ -384,8 +384,8 @@
|
|||||||
#define CPU_TYPE_IS_020_PLUS(A) ((A) & (CPU_TYPE_020 | CPU_TYPE_040))
|
#define CPU_TYPE_IS_020_PLUS(A) ((A) & (CPU_TYPE_020 | CPU_TYPE_040))
|
||||||
#define CPU_TYPE_IS_020_LESS(A) 1
|
#define CPU_TYPE_IS_020_LESS(A) 1
|
||||||
#else
|
#else
|
||||||
#define CPU_TYPE_IS_020_PLUS(A) 0
|
#define CPU_TYPE_IS_020_PLUS(A) CPU_TYPE_IS_040_PLUS(A)
|
||||||
#define CPU_TYPE_IS_020_LESS(A) 1
|
#define CPU_TYPE_IS_020_LESS(A) CPU_TYPE_IS_040_LESS(A)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if M68K_EMULATE_EC020
|
#if M68K_EMULATE_EC020
|
||||||
@ -801,7 +801,7 @@
|
|||||||
#define USE_ALL_CYCLES() m68ki_remaining_cycles = 0
|
#define USE_ALL_CYCLES() m68ki_remaining_cycles = 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define USE_CYCLES(A) mcycles_68k += (7 * (A))
|
#define USE_CYCLES(A) mcycles_68k += (A)
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------- Read / Write ----------------------------- */
|
/* ----------------------------- Read / Write ----------------------------- */
|
||||||
@ -899,7 +899,7 @@ typedef struct
|
|||||||
uint cyc_shift;
|
uint cyc_shift;
|
||||||
uint cyc_reset;
|
uint cyc_reset;
|
||||||
const uint8* cyc_instruction;
|
const uint8* cyc_instruction;
|
||||||
const uint8* cyc_exception;
|
const uint16* cyc_exception;
|
||||||
|
|
||||||
/* Callbacks to host */
|
/* Callbacks to host */
|
||||||
int (*int_ack_callback)(int int_line); /* Interrupt Acknowledge */
|
int (*int_ack_callback)(int int_line); /* Interrupt Acknowledge */
|
||||||
@ -922,7 +922,7 @@ extern uint m68ki_tracing;
|
|||||||
extern const uint8 m68ki_shift_8_table[];
|
extern const uint8 m68ki_shift_8_table[];
|
||||||
extern const uint16 m68ki_shift_16_table[];
|
extern const uint16 m68ki_shift_16_table[];
|
||||||
extern const uint m68ki_shift_32_table[];
|
extern const uint m68ki_shift_32_table[];
|
||||||
extern const uint8 m68ki_exception_cycle_table[][256];
|
extern uint16 m68ki_exception_cycle_table[][256];
|
||||||
extern uint m68ki_address_space;
|
extern uint m68ki_address_space;
|
||||||
extern const uint8 m68ki_ea_idx_cycle_table[];
|
extern const uint8 m68ki_ea_idx_cycle_table[];
|
||||||
|
|
||||||
@ -1254,8 +1254,6 @@ INLINE uint m68ki_get_ea_ix(uint An)
|
|||||||
/* An = base register */
|
/* An = base register */
|
||||||
uint extension = m68ki_read_imm_16();
|
uint extension = m68ki_read_imm_16();
|
||||||
uint Xn = 0; /* Index register */
|
uint Xn = 0; /* Index register */
|
||||||
uint bd = 0; /* Base Displacement */
|
|
||||||
uint od = 0; /* Outer Displacement */
|
|
||||||
|
|
||||||
if(CPU_TYPE_IS_010_LESS(CPU_TYPE))
|
if(CPU_TYPE_IS_010_LESS(CPU_TYPE))
|
||||||
{
|
{
|
||||||
@ -1268,6 +1266,11 @@ INLINE uint m68ki_get_ea_ix(uint An)
|
|||||||
return An + Xn + MAKE_INT_8(extension);
|
return An + Xn + MAKE_INT_8(extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if M68K_EMULATE_010 || M68K_EMULATE_020 || M68K_EMULATE_EC020 || M68K_EMULATE_040
|
||||||
|
|
||||||
|
uint bd = 0; /* Base Displacement */
|
||||||
|
uint od = 0; /* Outer Displacement */
|
||||||
|
|
||||||
/* Brief extension format */
|
/* Brief extension format */
|
||||||
if(!BIT_8(extension))
|
if(!BIT_8(extension))
|
||||||
{
|
{
|
||||||
@ -1318,6 +1321,7 @@ INLINE uint m68ki_get_ea_ix(uint An)
|
|||||||
|
|
||||||
/* Preindex */
|
/* Preindex */
|
||||||
return m68ki_read_32(An + bd + Xn) + od;
|
return m68ki_read_32(An + bd + Xn) + od;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
250
source/z80/z80.c
250
source/z80/z80.c
@ -216,136 +216,136 @@ static UINT8 SZHV_dec[256]; /* zero, sign, half carry and overflow flags DEC r8
|
|||||||
static UINT8 *SZHVC_add = 0;
|
static UINT8 *SZHVC_add = 0;
|
||||||
static UINT8 *SZHVC_sub = 0;
|
static UINT8 *SZHVC_sub = 0;
|
||||||
|
|
||||||
static const UINT8 cc_op[0x100] = {
|
static const UINT16 cc_op[0x100] = {
|
||||||
4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4,
|
4*15,10*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15, 4*15,11*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
8,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4,
|
8*15,10*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15,12*15,11*15, 7*15, 6*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
7,10,16, 6, 4, 4, 7, 4, 7,11,16, 6, 4, 4, 7, 4,
|
7*15,10*15,16*15, 6*15, 4*15, 4*15, 7*15, 4*15, 7*15,11*15,16*15, 6*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
7,10,13, 6,11,11,10, 4, 7,11,13, 6, 4, 4, 7, 4,
|
7*15,10*15,13*15, 6*15,11*15,11*15,10*15, 4*15, 7*15,11*15,13*15, 6*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
7, 7, 7, 7, 7, 7, 4, 7, 4, 4, 4, 4, 4, 4, 7, 4,
|
7*15, 7*15, 7*15, 7*15, 7*15, 7*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 7, 4, 4, 4, 4, 4, 4, 4, 7, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 7*15, 4*15,
|
||||||
5,10,10,10,10,11, 7,11, 5,10,10, 0,10,17, 7,11,
|
5*15,10*15,10*15,10*15,10*15,11*15, 7*15,11*15, 5*15,10*15,10*15, 0*15,10*15,17*15, 7*15,11*15,
|
||||||
5,10,10,11,10,11, 7,11, 5, 4,10,11,10, 0, 7,11,
|
5*15,10*15,10*15,11*15,10*15,11*15, 7*15,11*15, 5*15, 4*15,10*15,11*15,10*15, 0*15, 7*15,11*15,
|
||||||
5,10,10,19,10,11, 7,11, 5, 4,10, 4,10, 0, 7,11,
|
5*15,10*15,10*15,19*15,10*15,11*15, 7*15,11*15, 5*15, 4*15,10*15, 4*15,10*15, 0*15, 7*15,11*15,
|
||||||
5,10,10, 4,10,11, 7,11, 5, 6,10, 4,10, 0, 7,11};
|
5*15,10*15,10*15, 4*15,10*15,11*15, 7*15,11*15, 5*15, 6*15,10*15, 4*15,10*15, 0*15, 7*15,11*15};
|
||||||
|
|
||||||
static const UINT8 cc_cb[0x100] = {
|
static const UINT16 cc_cb[0x100] = {
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,12, 8, 8, 8, 8, 8, 8, 8,12, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,12*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8,15, 8, 8, 8, 8, 8, 8, 8,15, 8};
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,15*15, 8*15};
|
||||||
|
|
||||||
static const UINT8 cc_ed[0x100] = {
|
static const UINT16 cc_ed[0x100] = {
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
12,12,15,20, 8,14, 8, 9,12,12,15,20, 8,14, 8, 9,
|
12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15,
|
||||||
12,12,15,20, 8,14, 8, 9,12,12,15,20, 8,14, 8, 9,
|
12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 9*15,
|
||||||
12,12,15,20, 8,14, 8,18,12,12,15,20, 8,14, 8,18,
|
12*15,12*15,15*15,20*15, 8*15,14*15, 8*15,18*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15,18*15,
|
||||||
12,12,15,20, 8,14, 8, 8,12,12,15,20, 8,14, 8, 8,
|
12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 8*15,12*15,12*15,15*15,20*15, 8*15,14*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
16,16,16,16, 8, 8, 8, 8,16,16,16,16, 8, 8, 8, 8,
|
16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15,16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
16,16,16,16, 8, 8, 8, 8,16,16,16,16, 8, 8, 8, 8,
|
16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15,16*15,16*15,16*15,16*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15,
|
||||||
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8};
|
8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15, 8*15};
|
||||||
|
|
||||||
/*static const UINT8 cc_xy[0x100] = {
|
/*static const UINT8 cc_xy[0x100] = {
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4,15, 4, 4, 4, 4, 4, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,15*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4,15, 4, 4, 4, 4, 4, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,15*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,
|
||||||
4,14,20,10, 9, 9,11, 4, 4,15,20,10, 9, 9,11, 4,
|
4*15,14*15,20*15,10*15, 9*15, 9*15,11*15, 4*15, 4*15,15*15,20*15,10*15, 9*15, 9*15,11*15, 4*15,
|
||||||
4, 4, 4, 4,23,23,19, 4, 4,15, 4, 4, 4, 4, 4, 4,
|
4*15, 4*15, 4*15, 4*15,23*15,23*15,19*15, 4*15, 4*15,15*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,
|
||||||
4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4,
|
4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4,
|
4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
9, 9, 9, 9, 9, 9,19, 9, 9, 9, 9, 9, 9, 9,19, 9,
|
9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15,
|
||||||
19,19,19,19,19,19, 4,19, 4, 4, 4, 4, 9, 9,19, 4,
|
19*15,19*15,19*15,19*15,19*15,19*15, 4*15,19*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4,
|
4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4,
|
4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4,
|
4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
4, 4, 4, 4, 9, 9,19, 4, 4, 4, 4, 4, 9, 9,19, 4,
|
4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15, 4*15, 4*15, 4*15, 4*15, 9*15, 9*15,19*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 0*15, 4*15, 4*15, 4*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,
|
||||||
4,14, 4,23, 4,15, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4,
|
4*15,14*15, 4*15,23*15, 4*15,15*15, 4*15, 4*15, 4*15, 8*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,
|
||||||
4, 4, 4, 4, 4, 4, 4, 4, 4,10, 4, 4, 4, 4, 4, 4};
|
4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15,10*15, 4*15, 4*15, 4*15, 4*15, 4*15, 4*15};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* illegal combo should return 4 + cc_op[i] */
|
/* illegal combo should return 4 + cc_op[i] */
|
||||||
static const UINT8 cc_xy[0x100] ={
|
static const UINT16 cc_xy[0x100] ={
|
||||||
8,14,11,10, 8, 8,11, 8, 8,15,11,10, 8, 8,11, 8,
|
8*15,14*15,11*15,10*15, 8*15, 8*15,11*15, 8*15, 8*15,15*15,11*15,10*15, 8*15, 8*15,11*15, 8*15,
|
||||||
12,14,11,10, 8, 8,11, 8,16,15,11,10, 8, 8,11, 8,
|
12*15,14*15,11*15,10*15, 8*15, 8*15,11*15, 8*15,16*15,15*15,11*15,10*15, 8*15, 8*15,11*15, 8*15,
|
||||||
11,14,20,10, 9, 9,12, 8,11,15,20,10, 9, 9,12, 8,
|
11*15,14*15,20*15,10*15, 9*15, 9*15,12*15, 8*15,11*15,15*15,20*15,10*15, 9*15, 9*15,12*15, 8*15,
|
||||||
11,14,17,10,23,23,19, 8,11,15,17,10, 8, 8,11, 8,
|
11*15,14*15,17*15,10*15,23*15,23*15,19*15, 8*15,11*15,15*15,17*15,10*15, 8*15, 8*15,11*15, 8*15,
|
||||||
8, 8, 8, 8, 9, 9,19, 8, 8, 8, 8, 8, 9, 9,19, 8,
|
8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
8, 8, 8, 8, 9, 9,19, 8, 8, 8, 8, 8, 9, 9,19, 8,
|
8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
9, 9, 9, 9, 9, 9,19, 9, 9, 9, 9, 9, 9, 9,19, 9,
|
9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15, 9*15,19*15, 9*15,
|
||||||
19,19,19,19,19,19, 8,19, 8, 8, 8, 8, 9, 9,19, 8,
|
19*15,19*15,19*15,19*15,19*15,19*15, 8*15,19*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
8, 8, 8, 8, 9, 9,19, 8, 8, 8, 8, 8, 9, 9,19, 8,
|
8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
8, 8, 8, 8, 9, 9,19, 8, 8, 8, 8, 8, 9, 9,19, 8,
|
8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
8, 8, 8, 8, 9, 9,19, 8, 8, 8, 8, 8, 9, 9,19, 8,
|
8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
8, 8, 8, 8, 9, 9,19, 8, 8, 8, 8, 8, 9, 9,19, 8,
|
8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15, 8*15, 8*15, 8*15, 8*15, 9*15, 9*15,19*15, 8*15,
|
||||||
9,14,14,14,14,15,11,15, 9,14,14, 0,14,21,11,15,
|
9*15,14*15,14*15,14*15,14*15,15*15,11*15,15*15, 9*15,14*15,14*15, 0*15,14*15,21*15,11*15,15*15,
|
||||||
9,14,14,15,14,15,11,15, 9, 8,14,15,14, 4,11,15,
|
9*15,14*15,14*15,15*15,14*15,15*15,11*15,15*15, 9*15, 8*15,14*15,15*15,14*15, 4*15,11*15,15*15,
|
||||||
9,14,14,23,14,15,11,15, 9, 8,14, 8,14, 4,11,15,
|
9*15,14*15,14*15,23*15,14*15,15*15,11*15,15*15, 9*15, 8*15,14*15, 8*15,14*15, 4*15,11*15,15*15,
|
||||||
9,14,14, 8,14,15,11,15, 9,10,14, 8,14, 4,11,15};
|
9*15,14*15,14*15, 8*15,14*15,15*15,11*15,15*15, 9*15,10*15,14*15, 8*15,14*15, 4*15,11*15,15*15};
|
||||||
|
|
||||||
static const UINT8 cc_xycb[0x100] = {
|
static const UINT16 cc_xycb[0x100] = {
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
|
20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,
|
||||||
20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
|
20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,
|
||||||
20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
|
20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,
|
||||||
20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,
|
20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,20*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,
|
||||||
23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23};
|
23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15,23*15};
|
||||||
|
|
||||||
/* extra cycles if jr/jp/call taken and 'interrupt latency' on rst 0-7 */
|
/* extra cycles if jr/jp/call taken and 'interrupt latency' on rst 0-7 */
|
||||||
static const UINT8 cc_ex[0x100] = {
|
static const UINT16 cc_ex[0x100] = {
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* DJNZ */
|
5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* DJNZ */
|
||||||
5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, /* JR NZ/JR Z */
|
5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* JR NZ/JR Z */
|
||||||
5, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, /* JR NC/JR C */
|
5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 5*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* JR NC/JR C */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15,
|
||||||
0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, /* INI/IND (cycle-accurate I/O port reads) */
|
0*15, 0*15, 4*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 0*15, 4*15, 0*15, 0*15, 0*15, 0*15, 0*15, /* INI/IND (cycle-accurate I/O port reads) */
|
||||||
5, 5, 5, 5, 0, 0, 0, 0, 5, 5, 5, 5, 0, 0, 0, 0, /* LDIR/CPIR/INIR/OTIR LDDR/CPDR/INDR/OTDR */
|
5*15, 5*15, 5*15, 5*15, 0*15, 0*15, 0*15, 0*15, 5*15, 5*15, 5*15, 5*15, 0*15, 0*15, 0*15, 0*15, /* LDIR/CPIR/INIR/OTIR LDDR/CPDR/INDR/OTDR */
|
||||||
6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2,
|
6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15,
|
||||||
6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2,
|
6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15,
|
||||||
6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2,
|
6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15,
|
||||||
6, 0, 0, 0, 7, 0, 0, 2, 6, 0, 0, 0, 7, 0, 0, 2};
|
6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15, 6*15, 0*15, 0*15, 0*15, 7*15, 0*15, 0*15, 2*15};
|
||||||
|
|
||||||
static const UINT8 *cc[6];
|
static const UINT16 *cc[6];
|
||||||
#define Z80_TABLE_dd Z80_TABLE_xy
|
#define Z80_TABLE_dd Z80_TABLE_xy
|
||||||
#define Z80_TABLE_fd Z80_TABLE_xy
|
#define Z80_TABLE_fd Z80_TABLE_xy
|
||||||
|
|
||||||
@ -479,7 +479,7 @@ INLINE void BURNODD(int cycles, int opcodes, int cyclesum)
|
|||||||
/***************************************************************
|
/***************************************************************
|
||||||
* adjust cycle count by n T-states
|
* adjust cycle count by n T-states
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
#define CC(prefix,opcode) mcycles_z80 += cc[Z80_TABLE_##prefix][opcode] * 15
|
#define CC(prefix,opcode) mcycles_z80 += cc[Z80_TABLE_##prefix][opcode]
|
||||||
|
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
* execute an opcode
|
* execute an opcode
|
||||||
@ -3225,7 +3225,7 @@ static void take_interrupt(void)
|
|||||||
RM16( irq_vector, &Z80.pc );
|
RM16( irq_vector, &Z80.pc );
|
||||||
LOG(("Z80 #%d IM2 [$%04x] = $%04x\n",cpu_getactivecpu() , irq_vector, PCD));
|
LOG(("Z80 #%d IM2 [$%04x] = $%04x\n",cpu_getactivecpu() , irq_vector, PCD));
|
||||||
/* CALL $xxxx + 'interrupt latency' cycles */
|
/* CALL $xxxx + 'interrupt latency' cycles */
|
||||||
mcycles_z80 += (cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff]) * 15;
|
mcycles_z80 += cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* Interrupt mode 1. RST 38h */
|
/* Interrupt mode 1. RST 38h */
|
||||||
@ -3235,7 +3235,7 @@ static void take_interrupt(void)
|
|||||||
PUSH( pc );
|
PUSH( pc );
|
||||||
PCD = 0x0038;
|
PCD = 0x0038;
|
||||||
/* RST $38 + 'interrupt latency' cycles */
|
/* RST $38 + 'interrupt latency' cycles */
|
||||||
mcycles_z80 += (cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff]) * 15;
|
mcycles_z80 += cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3249,18 +3249,18 @@ static void take_interrupt(void)
|
|||||||
PUSH( pc );
|
PUSH( pc );
|
||||||
PCD = irq_vector & 0xffff;
|
PCD = irq_vector & 0xffff;
|
||||||
/* CALL $xxxx + 'interrupt latency' cycles */
|
/* CALL $xxxx + 'interrupt latency' cycles */
|
||||||
mcycles_z80 += (cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff]) * 15;
|
mcycles_z80 += cc[Z80_TABLE_op][0xcd] + cc[Z80_TABLE_ex][0xff];
|
||||||
break;
|
break;
|
||||||
case 0xc30000: /* jump */
|
case 0xc30000: /* jump */
|
||||||
PCD = irq_vector & 0xffff;
|
PCD = irq_vector & 0xffff;
|
||||||
/* JP $xxxx + 2 cycles */
|
/* JP $xxxx + 2 cycles */
|
||||||
mcycles_z80 += (cc[Z80_TABLE_op][0xc3] + cc[Z80_TABLE_ex][0xff]) * 15;
|
mcycles_z80 += cc[Z80_TABLE_op][0xc3] + cc[Z80_TABLE_ex][0xff];
|
||||||
break;
|
break;
|
||||||
default: /* rst (or other opcodes?) */
|
default: /* rst (or other opcodes?) */
|
||||||
PUSH( pc );
|
PUSH( pc );
|
||||||
PCD = irq_vector & 0x0038;
|
PCD = irq_vector & 0x0038;
|
||||||
/* RST $xx + 2 cycles */
|
/* RST $xx + 2 cycles */
|
||||||
mcycles_z80 += (cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff]) * 15;
|
mcycles_z80 += cc[Z80_TABLE_op][0xff] + cc[Z80_TABLE_ex][0xff];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user