mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-28 12:11:50 +01:00
fixed 68k reset exception timing (unused)
This commit is contained in:
parent
11d8b55139
commit
7a4c208a34
@ -127,7 +127,7 @@ const uint m68ki_shift_32_table[65] =
|
|||||||
const uint8 m68ki_exception_cycle_table[4][256] =
|
const uint8 m68ki_exception_cycle_table[4][256] =
|
||||||
{
|
{
|
||||||
{ /* 000 */
|
{ /* 000 */
|
||||||
4, /* 0: Reset - Initial Stack Pointer */
|
40, /* 0: Reset - Initial Stack Pointer */
|
||||||
4, /* 1: Reset - Initial Program Counter */
|
4, /* 1: Reset - Initial Program Counter */
|
||||||
50, /* 2: Bus Error (unemulated) */
|
50, /* 2: Bus Error (unemulated) */
|
||||||
50, /* 3: Address Error (unemulated) */
|
50, /* 3: Address Error (unemulated) */
|
||||||
@ -200,7 +200,7 @@ const uint8 m68ki_exception_cycle_table[4][256] =
|
|||||||
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4
|
||||||
},
|
},
|
||||||
{ /* 010 */
|
{ /* 010 */
|
||||||
4, /* 0: Reset - Initial Stack Pointer */
|
40, /* 0: Reset - Initial Stack Pointer */
|
||||||
4, /* 1: Reset - Initial Program Counter */
|
4, /* 1: Reset - Initial Program Counter */
|
||||||
126, /* 2: Bus Error (unemulated) */
|
126, /* 2: Bus Error (unemulated) */
|
||||||
126, /* 3: Address Error (unemulated) */
|
126, /* 3: Address Error (unemulated) */
|
||||||
@ -1025,7 +1025,6 @@ void m68k_state_register(const char *type, int index)
|
|||||||
state_save_register_item(type, index, REG_CAAR);
|
state_save_register_item(type, index, REG_CAAR);
|
||||||
state_save_register_item(type, index, m68k_substate.sr);
|
state_save_register_item(type, index, m68k_substate.sr);
|
||||||
state_save_register_item(type, index, CPU_INT_LEVEL);
|
state_save_register_item(type, index, CPU_INT_LEVEL);
|
||||||
state_save_register_item(type, index, CPU_INT_CYCLES);
|
|
||||||
state_save_register_item(type, index, m68k_substate.stopped);
|
state_save_register_item(type, index, m68k_substate.stopped);
|
||||||
state_save_register_item(type, index, m68k_substate.halted);
|
state_save_register_item(type, index, m68k_substate.halted);
|
||||||
state_save_register_item(type, index, CPU_PREF_ADDR);
|
state_save_register_item(type, index, CPU_PREF_ADDR);
|
||||||
|
@ -132,6 +132,7 @@ extern unsigned int count_m68k;
|
|||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
|
|
||||||
/* Exception Vectors handled by emulation */
|
/* Exception Vectors handled by emulation */
|
||||||
|
#define EXCEPTION_RESET 0
|
||||||
#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */
|
#define EXCEPTION_BUS_ERROR 2 /* This one is not emulated! */
|
||||||
#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */
|
#define EXCEPTION_ADDRESS_ERROR 3 /* This one is partially emulated (doesn't stack a proper frame yet) */
|
||||||
#define EXCEPTION_ILLEGAL_INSTRUCTION 4
|
#define EXCEPTION_ILLEGAL_INSTRUCTION 4
|
||||||
@ -335,7 +336,6 @@ extern unsigned int count_m68k;
|
|||||||
#define FLAG_INT_MASK m68ki_cpu.int_mask
|
#define FLAG_INT_MASK m68ki_cpu.int_mask
|
||||||
|
|
||||||
#define CPU_INT_LEVEL m68ki_cpu.int_level /* ASG: changed from CPU_INTS_PENDING */
|
#define CPU_INT_LEVEL m68ki_cpu.int_level /* ASG: changed from CPU_INTS_PENDING */
|
||||||
#define CPU_INT_CYCLES m68ki_cpu.int_cycles /* ASG */
|
|
||||||
#define CPU_STOPPED m68ki_cpu.stopped
|
#define CPU_STOPPED m68ki_cpu.stopped
|
||||||
#define CPU_PREF_ADDR m68ki_cpu.pref_addr
|
#define CPU_PREF_ADDR m68ki_cpu.pref_addr
|
||||||
#define CPU_PREF_DATA m68ki_cpu.pref_data
|
#define CPU_PREF_DATA m68ki_cpu.pref_data
|
||||||
@ -565,19 +565,20 @@ extern unsigned int count_m68k;
|
|||||||
if(CPU_STOPPED) \
|
if(CPU_STOPPED) \
|
||||||
{ \
|
{ \
|
||||||
SET_CYCLES(0); \
|
SET_CYCLES(0); \
|
||||||
CPU_INT_CYCLES = 0; \
|
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define m68ki_check_address_error(ADDR, WRITE_MODE, FC) \
|
#define m68ki_check_address_error(ADDR, WRITE_MODE, FC) \
|
||||||
if(((ADDR)&1) && emulate_address_error)\
|
if((ADDR)&1) \
|
||||||
{ \
|
{ \
|
||||||
m68ki_aerr_address = ADDR; \
|
if (emulate_address_error) \
|
||||||
m68ki_aerr_write_mode = WRITE_MODE; \
|
{ \
|
||||||
m68ki_aerr_fc = FC; \
|
m68ki_aerr_address = ADDR; \
|
||||||
longjmp(m68ki_aerr_trap, 1); \
|
m68ki_aerr_write_mode = WRITE_MODE; \
|
||||||
|
m68ki_aerr_fc = FC; \
|
||||||
|
longjmp(m68ki_aerr_trap, 1); \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define m68ki_check_address_error_010_less(ADDR, WRITE_MODE, FC) \
|
#define m68ki_check_address_error_010_less(ADDR, WRITE_MODE, FC) \
|
||||||
if (CPU_TYPE_IS_010_LESS(CPU_TYPE)) \
|
if (CPU_TYPE_IS_010_LESS(CPU_TYPE)) \
|
||||||
{ \
|
{ \
|
||||||
@ -882,7 +883,6 @@ typedef struct
|
|||||||
uint c_flag; /* Carry */
|
uint c_flag; /* Carry */
|
||||||
uint int_mask; /* I0-I2 */
|
uint int_mask; /* I0-I2 */
|
||||||
uint int_level; /* State of interrupt pins IPL0-IPL2 -- ASG: changed from ints_pending */
|
uint int_level; /* State of interrupt pins IPL0-IPL2 -- ASG: changed from ints_pending */
|
||||||
uint int_cycles; /* ASG: extra cycles from generated interrupts */
|
|
||||||
uint stopped; /* Stopped state */
|
uint stopped; /* Stopped state */
|
||||||
uint pref_addr; /* Last prefetch address */
|
uint pref_addr; /* Last prefetch address */
|
||||||
uint pref_data; /* Data in the prefetch queue */
|
uint pref_data; /* Data in the prefetch queue */
|
||||||
|
Loading…
Reference in New Issue
Block a user