diff options
author | Aaron Giles <aaron@aarongiles.com> | 2008-11-06 09:32:27 +0000 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2008-11-06 09:32:27 +0000 |
commit | 31ae2af798310c81b778e81b8c3753d731a809a7 (patch) | |
tree | c16d2751ef0a2466b880f8eabc34128f1407234c /src | |
parent | cfad1bef056109099d4bc69a1dd357aadc447c62 (diff) |
"Pointer"-ified the 68000. What a mess!
There are a few remaining globals; we'll get them later.
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/cpu/m68000/m68000.h | 2 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68k.h | 72 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68k_in.c | 1968 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kcpu.c | 271 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kcpu.h | 1129 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kdasm.c | 20 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kfpu.c | 284 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kmake.c | 14 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kmame.c | 941 | ||||
-rw-r--r-- | src/emu/cpu/m68000/m68kmame.h | 65 |
10 files changed, 2386 insertions, 2380 deletions
diff --git a/src/emu/cpu/m68000/m68000.h b/src/emu/cpu/m68000/m68000.h index 7dd2a80872e..46beaa62cec 100644 --- a/src/emu/cpu/m68000/m68000.h +++ b/src/emu/cpu/m68000/m68000.h @@ -22,8 +22,6 @@ enum CPUINFO_PTR_M68K_TAS_CALLBACK }; -extern int m68k_ICount; - /* Redirect memory calls */ typedef struct _m68k_memory_interface m68k_memory_interface; diff --git a/src/emu/cpu/m68000/m68k.h b/src/emu/cpu/m68000/m68k.h index abc14c2ece1..f92366497e6 100644 --- a/src/emu/cpu/m68000/m68k.h +++ b/src/emu/cpu/m68000/m68k.h @@ -154,18 +154,18 @@ typedef enum _m68k_register_t m68k_register_t; */ /* Read from anywhere */ -unsigned int m68k_read_memory_8(unsigned int address); -unsigned int m68k_read_memory_16(unsigned int address); -unsigned int m68k_read_memory_32(unsigned int address); +unsigned int m68k_read_memory_8(m68ki_cpu_core *m68k, unsigned int address); +unsigned int m68k_read_memory_16(m68ki_cpu_core *m68k, unsigned int address); +unsigned int m68k_read_memory_32(m68ki_cpu_core *m68k, unsigned int address); /* Read data immediately following the PC */ -unsigned int m68k_read_immediate_16(unsigned int address); -unsigned int m68k_read_immediate_32(unsigned int address); +unsigned int m68k_read_immediate_16(m68ki_cpu_core *m68k, unsigned int address); +unsigned int m68k_read_immediate_32(m68ki_cpu_core *m68k, unsigned int address); /* Read data relative to the PC */ -unsigned int m68k_read_pcrelative_8(unsigned int address); -unsigned int m68k_read_pcrelative_16(unsigned int address); -unsigned int m68k_read_pcrelative_32(unsigned int address); +unsigned int m68k_read_pcrelative_8(m68ki_cpu_core *m68k, unsigned int address); +unsigned int m68k_read_pcrelative_16(m68ki_cpu_core *m68k, unsigned int address); +unsigned int m68k_read_pcrelative_32(m68ki_cpu_core *m68k, unsigned int address); /* Memory access for the disassembler */ unsigned int m68k_read_disassembler_8 (unsigned int address); @@ -173,9 +173,9 @@ unsigned int m68k_read_disassembler_16 (unsigned int address); unsigned int m68k_read_disassembler_32 (unsigned int address); /* Write to anywhere */ -void m68k_write_memory_8(unsigned int address, unsigned int value); -void m68k_write_memory_16(unsigned int address, unsigned int value); -void m68k_write_memory_32(unsigned int address, unsigned int value); +void m68k_write_memory_8(m68ki_cpu_core *m68k, unsigned int address, unsigned int value); +void m68k_write_memory_16(m68ki_cpu_core *m68k, unsigned int address, unsigned int value); +void m68k_write_memory_32(m68ki_cpu_core *m68k, unsigned int address, unsigned int value); /* Special call to simulate undocumented 68k behavior when move.l with a * predecrement destination mode is executed. @@ -184,7 +184,7 @@ void m68k_write_memory_32(unsigned int address, unsigned int value); * * Enable this functionality with M68K_SIMULATE_PD_WRITES in m68kconf.h. */ -void m68k_write_memory_32_pd(unsigned int address, unsigned int value); +void m68k_write_memory_32_pd(m68ki_cpu_core *m68k, unsigned int address, unsigned int value); @@ -210,7 +210,7 @@ void m68k_write_memory_32_pd(unsigned int address, unsigned int value); * services the interrupt. * Default behavior: return M68K_INT_ACK_AUTOVECTOR. */ -void m68k_set_int_ack_callback(int (*callback)(int int_level)); +void m68k_set_int_ack_callback(m68ki_cpu_core *m68k, void *param, int (*callback)(void *param, int int_level)); /* Set the callback for a breakpoint acknowledge (68010+). @@ -219,7 +219,7 @@ void m68k_set_int_ack_callback(int (*callback)(int int_level)); * BKPT instruction for 68020+, or 0 for 68010. * Default behavior: do nothing. */ -void m68k_set_bkpt_ack_callback(void (*callback)(unsigned int data)); +void m68k_set_bkpt_ack_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int data)); /* Set the callback for the RESET instruction. @@ -227,7 +227,7 @@ void m68k_set_bkpt_ack_callback(void (*callback)(unsigned int data)); * The CPU calls this callback every time it encounters a RESET instruction. * Default behavior: do nothing. */ -void m68k_set_reset_instr_callback(void (*callback)(void)); +void m68k_set_reset_instr_callback(m68ki_cpu_core *m68k, void (*callback)(void)); /* Set the callback for the CMPI.L #v, Dn instruction. @@ -235,7 +235,7 @@ void m68k_set_reset_instr_callback(void (*callback)(void)); * The CPU calls this callback every time it encounters a CMPI.L #v, Dn instruction. * Default behavior: do nothing. */ -void m68k_set_cmpild_instr_callback(void (*callback)(unsigned int val, int reg)); +void m68k_set_cmpild_instr_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int val, int reg)); /* Set the callback for the RTE instruction. @@ -243,14 +243,14 @@ void m68k_set_cmpild_instr_callback(void (*callback)(unsigned int val, int reg) * The CPU calls this callback every time it encounters a RTE instruction. * Default behavior: do nothing. */ -void m68k_set_rte_instr_callback(void (*callback)(void)); +void m68k_set_rte_instr_callback(m68ki_cpu_core *m68k, void (*callback)(void)); /* Set the callback for the TAS instruction. * You must enable M68K_TAS_HAS_CALLBACK in m68kconf.h. * The CPU calls this callback every time it encounters a TAS instruction. * Default behavior: return 1, allow writeback. */ -void m68k_set_tas_instr_callback(int (*callback)(void)); +void m68k_set_tas_instr_callback(m68ki_cpu_core *m68k, int (*callback)(void)); @@ -260,7 +260,7 @@ void m68k_set_tas_instr_callback(int (*callback)(void)); * by a large value (currently set for changes by longwords). * Default behavior: do nothing. */ -void m68k_set_pc_changed_callback(void (*callback)(unsigned int new_pc)); +void m68k_set_pc_changed_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int new_pc)); /* Set the callback for CPU function code changes. @@ -270,7 +270,7 @@ void m68k_set_pc_changed_callback(void (*callback)(unsigned int new_pc)); * access it is (supervisor/user, program/data and such). * Default behavior: do nothing. */ -void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)); +void m68k_set_fc_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int new_fc)); /* Set a callback for the instruction cycle of the CPU. @@ -279,7 +279,7 @@ void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)); * instruction cycle. * Default behavior: do nothing. */ -void m68k_set_instr_hook_callback(void (*callback)(unsigned int pc)); +void m68k_set_instr_hook_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int pc)); @@ -291,12 +291,12 @@ void m68k_set_instr_hook_callback(void (*callback)(unsigned int pc)); * Currently supported types are: M68K_CPU_TYPE_68000, M68K_CPU_TYPE_68008, * M68K_CPU_TYPE_68010, M68K_CPU_TYPE_EC020, and M68K_CPU_TYPE_68020. */ -void m68k_set_cpu_type(unsigned int cpu_type); +void m68k_set_cpu_type(m68ki_cpu_core *m68k, unsigned int cpu_type); /* Do whatever initialisations the core requires. Should be called * at least once at init time. */ -void m68k_init(void); +m68ki_cpu_core *m68k_init(void); /* Pulse the RESET pin on the CPU. * You *MUST* reset the CPU at least once to initialize the emulation @@ -304,36 +304,36 @@ void m68k_init(void); * the CPU for the first time, the CPU will be set to * M68K_CPU_TYPE_68000. */ -void m68k_pulse_reset(void); +void m68k_pulse_reset(m68ki_cpu_core *m68k); /* execute num_cycles worth of instructions. returns number of cycles used */ -int m68k_execute(int num_cycles); +int m68k_execute(m68ki_cpu_core *m68k, int num_cycles); /* These functions let you read/write/modify the number of cycles left to run * while m68k_execute() is running. * These are useful if the 68k accesses a memory-mapped port on another device * that requires immediate processing by another CPU. */ -int m68k_cycles_run(void); /* Number of cycles run so far */ -int m68k_cycles_remaining(void); /* Number of cycles left */ -void m68k_modify_timeslice(int cycles); /* Modify cycles left */ -void m68k_end_timeslice(void); /* End timeslice now */ +int m68k_cycles_run(m68ki_cpu_core *m68k); /* Number of cycles run so far */ +int m68k_cycles_remaining(m68ki_cpu_core *m68k); /* Number of cycles left */ +void m68k_modify_timeslice(m68ki_cpu_core *m68k, int cycles); /* Modify cycles left */ +void m68k_end_timeslice(m68ki_cpu_core *m68k); /* End timeslice now */ /* Set the IPL0-IPL2 pins on the CPU (IRQ). * A transition from < 7 to 7 will cause a non-maskable interrupt (NMI). * Setting IRQ to 0 will clear an interrupt request. */ -void m68k_set_irq(unsigned int int_level); +void m68k_set_irq(m68ki_cpu_core *m68k, unsigned int int_level); /* Set the virtual irq lines, where the highest level * active line is automatically selected. If you use this function, * do not use m68k_set_irq. */ -void m68k_set_virq(unsigned int level, unsigned int active); -unsigned int m68k_get_virq(unsigned int level); +void m68k_set_virq(m68ki_cpu_core *m68k, unsigned int level, unsigned int active); +unsigned int m68k_get_virq(m68ki_cpu_core *m68k, unsigned int level); /* Halt the CPU as if you pulsed the HALT pin. */ -void m68k_pulse_halt(void); +void m68k_pulse_halt(m68ki_cpu_core *m68k); /* Context switching to allow multiple CPUs */ @@ -348,17 +348,17 @@ unsigned int m68k_get_context(void* dst); void m68k_set_context(void* dst); /* Register the CPU state information */ -void m68k_state_register(const char *type, int index); +void m68k_state_register(m68ki_cpu_core *m68k, const char *type, int index); /* Peek at the internals of a CPU context. This can either be a context * retrieved using m68k_get_context() or the currently running context. * If context is NULL, the currently running CPU context will be used. */ -unsigned int m68k_get_reg(void* context, m68k_register_t reg); +unsigned int m68k_get_reg(m68ki_cpu_core *m68k, m68k_register_t regnum); /* Poke values into the internals of the currently running CPU context */ -void m68k_set_reg(m68k_register_t reg, unsigned int value); +void m68k_set_reg(m68ki_cpu_core *m68k, m68k_register_t reg, unsigned int value); /* Check if an instruction is valid for the specified CPU type */ unsigned int m68k_is_valid_instruction(unsigned int instruction, unsigned int cpu_type); diff --git a/src/emu/cpu/m68000/m68k_in.c b/src/emu/cpu/m68000/m68k_in.c index 295f3519b94..4a416f27cd0 100644 --- a/src/emu/cpu/m68000/m68k_in.c +++ b/src/emu/cpu/m68000/m68k_in.c @@ -104,7 +104,7 @@ M68KMAKE_PROTOTYPE_FOOTER /* Build the opcode handler table */ void m68ki_build_opcode_table(void); -extern void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */ +extern void (*m68ki_instruction_jump_table[0x10000])(m68ki_cpu_core *m68k); /* opcode handler jump table */ extern unsigned char m68ki_cycles[][0x10000]; @@ -127,13 +127,13 @@ M68KMAKE_TABLE_HEADER #define NUM_CPU_TYPES 4 -void (*m68ki_instruction_jump_table[0x10000])(void); /* opcode handler jump table */ +void (*m68ki_instruction_jump_table[0x10000])(m68ki_cpu_core *m68k); /* opcode handler jump table */ unsigned char m68ki_cycles[NUM_CPU_TYPES][0x10000]; /* Cycles used by CPU type */ /* This is used to generate the opcode handler jump table */ typedef struct { - void (*opcode_handler)(void); /* handler function */ + void (*opcode_handler)(m68ki_cpu_core *m68k); /* handler function */ unsigned int mask; /* mask on opcode */ unsigned int match; /* what to match after masking */ unsigned char cycles[NUM_CPU_TYPES]; /* cycles each cpu type takes */ @@ -259,8 +259,8 @@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX M68KMAKE_OPCODE_HANDLER_HEADER #include "m68kcpu.h" -extern void m68040_fpu_op0(void); -extern void m68040_fpu_op1(void); +extern void m68040_fpu_op0(m68ki_cpu_core *m68k); +extern void m68040_fpu_op1(m68ki_cpu_core *m68k); /* ======================================================================== */ /* ========================= INSTRUCTION HANDLERS ========================= */ @@ -879,13 +879,13 @@ M68KMAKE_OPCODE_HANDLER_BODY M68KMAKE_OP(1010, 0, ., .) { - m68ki_exception_1010(); + m68ki_exception_1010(m68k); } M68KMAKE_OP(1111, 0, ., .) { - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -893,10 +893,10 @@ M68KMAKE_OP(040fpu0, 32, ., .) { if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) { - m68040_fpu_op0(); + m68040_fpu_op0(m68k); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -904,10 +904,10 @@ M68KMAKE_OP(040fpu1, 32, ., .) { if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) { - m68040_fpu_op1(); + m68040_fpu_op1(m68k); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -940,9 +940,9 @@ M68KMAKE_OP(abcd, 8, rr, .) M68KMAKE_OP(abcd, 8, mm, ax7) { - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); FLAG_V = ~res; /* Undefined V behavior */ @@ -960,15 +960,15 @@ M68KMAKE_OP(abcd, 8, mm, ax7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(abcd, 8, mm, ay7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); FLAG_V = ~res; /* Undefined V behavior */ @@ -986,15 +986,15 @@ M68KMAKE_OP(abcd, 8, mm, ay7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(abcd, 8, mm, axy7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); FLAG_V = ~res; /* Undefined V behavior */ @@ -1012,15 +1012,15 @@ M68KMAKE_OP(abcd, 8, mm, axy7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(abcd, 8, mm, .) { - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(src) + LOW_NIBBLE(dst) + XFLAG_AS_1(); FLAG_V = ~res; /* Undefined V behavior */ @@ -1038,7 +1038,7 @@ M68KMAKE_OP(abcd, 8, mm, .) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } @@ -1174,7 +1174,7 @@ M68KMAKE_OP(add, 8, re, .) { uint ea = M68KMAKE_GET_EA_AY_8; uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_8(res); @@ -1182,7 +1182,7 @@ M68KMAKE_OP(add, 8, re, .) FLAG_X = FLAG_C = CFLAG_8(res); FLAG_Z = MASK_OUT_ABOVE_8(res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } @@ -1190,7 +1190,7 @@ M68KMAKE_OP(add, 16, re, .) { uint ea = M68KMAKE_GET_EA_AY_16; uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); + uint dst = m68ki_read_16(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_16(res); @@ -1198,7 +1198,7 @@ M68KMAKE_OP(add, 16, re, .) FLAG_X = FLAG_C = CFLAG_16(res); FLAG_Z = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } @@ -1206,7 +1206,7 @@ M68KMAKE_OP(add, 32, re, .) { uint ea = M68KMAKE_GET_EA_AY_32; uint src = DX; - uint dst = m68ki_read_32(ea); + uint dst = m68ki_read_32(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_32(res); @@ -1214,7 +1214,7 @@ M68KMAKE_OP(add, 32, re, .) FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); FLAG_Z = MASK_OUT_ABOVE_32(res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -1271,7 +1271,7 @@ M68KMAKE_OP(adda, 32, ., .) M68KMAKE_OP(addi, 8, ., d) { uint* r_dst = &DY; - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint dst = MASK_OUT_ABOVE_8(*r_dst); uint res = src + dst; @@ -1286,9 +1286,9 @@ M68KMAKE_OP(addi, 8, ., d) M68KMAKE_OP(addi, 8, ., .) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint ea = M68KMAKE_GET_EA_AY_8; - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_8(res); @@ -1296,14 +1296,14 @@ M68KMAKE_OP(addi, 8, ., .) FLAG_X = FLAG_C = CFLAG_8(res); FLAG_Z = MASK_OUT_ABOVE_8(res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } M68KMAKE_OP(addi, 16, ., d) { uint* r_dst = &DY; - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint dst = MASK_OUT_ABOVE_16(*r_dst); uint res = src + dst; @@ -1318,9 +1318,9 @@ M68KMAKE_OP(addi, 16, ., d) M68KMAKE_OP(addi, 16, ., .) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; - uint dst = m68ki_read_16(ea); + uint dst = m68ki_read_16(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_16(res); @@ -1328,14 +1328,14 @@ M68KMAKE_OP(addi, 16, ., .) FLAG_X = FLAG_C = CFLAG_16(res); FLAG_Z = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } M68KMAKE_OP(addi, 32, ., d) { uint* r_dst = &DY; - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint dst = *r_dst; uint res = src + dst; @@ -1350,9 +1350,9 @@ M68KMAKE_OP(addi, 32, ., d) M68KMAKE_OP(addi, 32, ., .) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint ea = M68KMAKE_GET_EA_AY_32; - uint dst = m68ki_read_32(ea); + uint dst = m68ki_read_32(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_32(res); @@ -1360,7 +1360,7 @@ M68KMAKE_OP(addi, 32, ., .) FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); FLAG_Z = MASK_OUT_ABOVE_32(res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -1384,7 +1384,7 @@ M68KMAKE_OP(addq, 8, ., .) { uint src = (((REG_IR >> 9) - 1) & 7) + 1; uint ea = M68KMAKE_GET_EA_AY_8; - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_8(res); @@ -1392,7 +1392,7 @@ M68KMAKE_OP(addq, 8, ., .) FLAG_X = FLAG_C = CFLAG_8(res); FLAG_Z = MASK_OUT_ABOVE_8(res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } @@ -1424,7 +1424,7 @@ M68KMAKE_OP(addq, 16, ., .) { uint src = (((REG_IR >> 9) - 1) & 7) + 1; uint ea = M68KMAKE_GET_EA_AY_16; - uint dst = m68ki_read_16(ea); + uint dst = m68ki_read_16(m68k, ea); uint res = src + dst; FLAG_N = NFLAG_16(res); @@ -1432,7 +1432,7 @@ M68KMAKE_OP(addq, 16, ., .) FLAG_X = FLAG_C = CFLAG_16(res); FLAG_Z = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } @@ -1464,7 +1464,7 @@ M68KMAKE_OP(addq, 32, ., .) { uint src = (((REG_IR >> 9) - 1) & 7) + 1; uint ea = M68KMAKE_GET_EA_AY_32; - uint dst = m68ki_read_32(ea); + uint dst = m68ki_read_32(m68k, ea); uint res = src + dst; @@ -1473,7 +1473,7 @@ M68KMAKE_OP(addq, 32, ., .) FLAG_X = FLAG_C = CFLAG_ADD_32(src, dst, res); FLAG_Z = MASK_OUT_ABOVE_32(res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -1533,9 +1533,9 @@ M68KMAKE_OP(addx, 32, rr, .) M68KMAKE_OP(addx, 8, mm, ax7) { - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst + XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -1545,15 +1545,15 @@ M68KMAKE_OP(addx, 8, mm, ax7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(addx, 8, mm, ay7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst + XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -1563,15 +1563,15 @@ M68KMAKE_OP(addx, 8, mm, ay7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(addx, 8, mm, axy7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst + XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -1581,15 +1581,15 @@ M68KMAKE_OP(addx, 8, mm, axy7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(addx, 8, mm, .) { - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = src + dst + XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -1599,15 +1599,15 @@ M68KMAKE_OP(addx, 8, mm, .) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(addx, 16, mm, .) { - uint src = OPER_AY_PD_16(); - uint ea = EA_AX_PD_16(); - uint dst = m68ki_read_16(ea); + uint src = OPER_AY_PD_16(m68k); + uint ea = EA_AX_PD_16(m68k); + uint dst = m68ki_read_16(m68k, ea); uint res = src + dst + XFLAG_AS_1(); FLAG_N = NFLAG_16(res); @@ -1617,15 +1617,15 @@ M68KMAKE_OP(addx, 16, mm, .) res = MASK_OUT_ABOVE_16(res); FLAG_Z |= res; - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); } M68KMAKE_OP(addx, 32, mm, .) { - uint src = OPER_AY_PD_32(); - uint ea = EA_AX_PD_32(); - uint dst = m68ki_read_32(ea); + uint src = OPER_AY_PD_32(m68k); + uint ea = EA_AX_PD_32(m68k); + uint dst = m68ki_read_32(m68k, ea); uint res = src + dst + XFLAG_AS_1(); FLAG_N = NFLAG_32(res); @@ -1635,7 +1635,7 @@ M68KMAKE_OP(addx, 32, mm, .) res = MASK_OUT_ABOVE_32(res); FLAG_Z |= res; - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); } @@ -1702,48 +1702,48 @@ M68KMAKE_OP(and, 32, er, .) M68KMAKE_OP(and, 8, re, .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint res = DX & m68ki_read_8(ea); + uint res = DX & m68ki_read_8(m68k, ea); FLAG_N = NFLAG_8(res); FLAG_C = CFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; FLAG_Z = MASK_OUT_ABOVE_8(res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } M68KMAKE_OP(and, 16, re, .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint res = DX & m68ki_read_16(ea); + uint res = DX & m68ki_read_16(m68k, ea); FLAG_N = NFLAG_16(res); FLAG_C = CFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; FLAG_Z = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } M68KMAKE_OP(and, 32, re, .) { uint ea = M68KMAKE_GET_EA_AY_32; - uint res = DX & m68ki_read_32(ea); + uint res = DX & m68ki_read_32(m68k, ea); FLAG_N = NFLAG_32(res); FLAG_Z = res; FLAG_C = CFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); } M68KMAKE_OP(andi, 8, ., d) { - FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8() | 0xffffff00)); + FLAG_Z = MASK_OUT_ABOVE_8(DY &= (OPER_I_8(m68k) | 0xffffff00)); FLAG_N = NFLAG_8(FLAG_Z); FLAG_C = CFLAG_CLEAR; @@ -1753,22 +1753,22 @@ M68KMAKE_OP(andi, 8, ., d) M68KMAKE_OP(andi, 8, ., .) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint ea = M68KMAKE_GET_EA_AY_8; - uint res = src & m68ki_read_8(ea); + uint res = src & m68ki_read_8(m68k, ea); FLAG_N = NFLAG_8(res); FLAG_Z = res; FLAG_C = CFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(andi, 16, ., d) { - FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16() | 0xffff0000)); + FLAG_Z = MASK_OUT_ABOVE_16(DY &= (OPER_I_16(m68k) | 0xffff0000)); FLAG_N = NFLAG_16(FLAG_Z); FLAG_C = CFLAG_CLEAR; @@ -1778,22 +1778,22 @@ M68KMAKE_OP(andi, 16, ., d) M68KMAKE_OP(andi, 16, ., .) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; - uint res = src & m68ki_read_16(ea); + uint res = src & m68ki_read_16(m68k, ea); FLAG_N = NFLAG_16(res); FLAG_Z = res; FLAG_C = CFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); } M68KMAKE_OP(andi, 32, ., d) { - FLAG_Z = DY &= (OPER_I_32()); + FLAG_Z = DY &= (OPER_I_32(m68k)); FLAG_N = NFLAG_32(FLAG_Z); FLAG_C = CFLAG_CLEAR; @@ -1803,22 +1803,22 @@ M68KMAKE_OP(andi, 32, ., d) M68KMAKE_OP(andi, 32, ., .) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint ea = M68KMAKE_GET_EA_AY_32; - uint res = src & m68ki_read_32(ea); + uint res = src & m68ki_read_32(m68k, ea); FLAG_N = NFLAG_32(res); FLAG_Z = res; FLAG_C = CFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); } M68KMAKE_OP(andi, 16, toc, .) { - m68ki_set_ccr(m68ki_get_ccr() & OPER_I_16()); + m68ki_set_ccr(m68k, m68ki_get_ccr() & OPER_I_16(m68k)); } @@ -1826,12 +1826,12 @@ M68KMAKE_OP(andi, 16, tos, .) { if(FLAG_S) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_set_sr(m68ki_get_sr() & src); + m68ki_set_sr(m68k, m68ki_get_sr(m68k) & src); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -1843,7 +1843,7 @@ M68KMAKE_OP(asr, 8, s, .) uint res = src >> shift; if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(GET_MSB_8(src)) res |= m68ki_shift_8_table[shift]; @@ -1865,7 +1865,7 @@ M68KMAKE_OP(asr, 16, s, .) uint res = src >> shift; if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(GET_MSB_16(src)) res |= m68ki_shift_16_table[shift]; @@ -1887,7 +1887,7 @@ M68KMAKE_OP(asr, 32, s, .) uint res = src >> shift; if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(GET_MSB_32(src)) res |= m68ki_shift_32_table[shift]; @@ -1910,7 +1910,7 @@ M68KMAKE_OP(asr, 8, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 8) { @@ -1962,7 +1962,7 @@ M68KMAKE_OP(asr, 16, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 16) { @@ -2014,7 +2014,7 @@ M68KMAKE_OP(asr, 32, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 32) { @@ -2060,13 +2060,13 @@ M68KMAKE_OP(asr, 32, r, .) M68KMAKE_OP(asr, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = src >> 1; if(GET_MSB_16(src)) res |= 0x8000; - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -2083,7 +2083,7 @@ M68KMAKE_OP(asl, 8, s, .) uint res = MASK_OUT_ABOVE_8(src << shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; @@ -2103,7 +2103,7 @@ M68KMAKE_OP(asl, 16, s, .) uint res = MASK_OUT_ABOVE_16(src << shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; @@ -2123,7 +2123,7 @@ M68KMAKE_OP(asl, 32, s, .) uint res = MASK_OUT_ABOVE_32(src << shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -2144,7 +2144,7 @@ M68KMAKE_OP(asl, 8, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 8) { @@ -2181,7 +2181,7 @@ M68KMAKE_OP(asl, 16, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 16) { @@ -2218,7 +2218,7 @@ M68KMAKE_OP(asl, 32, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 32) { @@ -2249,10 +2249,10 @@ M68KMAKE_OP(asl, 32, r, .) M68KMAKE_OP(asl, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = MASK_OUT_ABOVE_16(src << 1); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -2267,10 +2267,10 @@ M68KMAKE_OP(bcc, 8, ., .) if(M68KMAKE_CC) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + m68ki_branch_8(m68k, MASK_OUT_ABOVE_8(REG_IR)); return; } - USE_CYCLES(CYC_BCC_NOTAKE_B); + USE_CYCLES(m68k, CYC_BCC_NOTAKE_B); } @@ -2278,14 +2278,14 @@ M68KMAKE_OP(bcc, 16, ., .) { if(M68KMAKE_CC) { - uint offset = OPER_I_16(); + uint offset = OPER_I_16(m68k); REG_PC -= 2; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_16(offset); + m68ki_branch_16(m68k, offset); return; } REG_PC += 2; - USE_CYCLES(CYC_BCC_NOTAKE_W); + USE_CYCLES(m68k, CYC_BCC_NOTAKE_W); } @@ -2295,10 +2295,10 @@ M68KMAKE_OP(bcc, 32, ., .) { if(M68KMAKE_CC) { - uint offset = OPER_I_32(); + uint offset = OPER_I_32(m68k); REG_PC -= 4; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_32(offset); + m68ki_branch_32(m68k, offset); return; } REG_PC += 4; @@ -2309,10 +2309,10 @@ M68KMAKE_OP(bcc, 32, ., .) if(M68KMAKE_CC) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + m68ki_branch_8(m68k, MASK_OUT_ABOVE_8(REG_IR)); return; } - USE_CYCLES(CYC_BCC_NOTAKE_B); + USE_CYCLES(m68k, CYC_BCC_NOTAKE_B); } } @@ -2330,18 +2330,18 @@ M68KMAKE_OP(bchg, 32, r, d) M68KMAKE_OP(bchg, 8, r, .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); uint mask = 1 << (DX & 7); FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); + m68ki_write_8(m68k, ea, src ^ mask); } M68KMAKE_OP(bchg, 32, s, d) { uint* r_dst = &DY; - uint mask = 1 << (OPER_I_8() & 0x1f); + uint mask = 1 << (OPER_I_8(m68k) & 0x1f); FLAG_Z = *r_dst & mask; *r_dst ^= mask; @@ -2350,12 +2350,12 @@ M68KMAKE_OP(bchg, 32, s, d) M68KMAKE_OP(bchg, 8, s, .) { - uint mask = 1 << (OPER_I_8() & 7); + uint mask = 1 << (OPER_I_8(m68k) & 7); uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); FLAG_Z = src & mask; - m68ki_write_8(ea, src ^ mask); + m68ki_write_8(m68k, ea, src ^ mask); } @@ -2372,18 +2372,18 @@ M68KMAKE_OP(bclr, 32, r, d) M68KMAKE_OP(bclr, 8, r, .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); uint mask = 1 << (DX & 7); FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); + m68ki_write_8(m68k, ea, src & ~mask); } M68KMAKE_OP(bclr, 32, s, d) { uint* r_dst = &DY; - uint mask = 1 << (OPER_I_8() & 0x1f); + uint mask = 1 << (OPER_I_8(m68k) & 0x1f); FLAG_Z = *r_dst & mask; *r_dst &= ~mask; @@ -2392,12 +2392,12 @@ M68KMAKE_OP(bclr, 32, s, d) M68KMAKE_OP(bclr, 8, s, .) { - uint mask = 1 << (OPER_I_8() & 7); + uint mask = 1 << (OPER_I_8(m68k) & 7); uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); FLAG_Z = src & mask; - m68ki_write_8(ea, src & ~mask); + m68ki_write_8(m68k, ea, src & ~mask); } @@ -2405,7 +2405,7 @@ M68KMAKE_OP(bfchg, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint* data = &DY; @@ -2432,7 +2432,7 @@ M68KMAKE_OP(bfchg, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2440,7 +2440,7 @@ M68KMAKE_OP(bfchg, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint mask_base; @@ -2469,24 +2469,24 @@ M68KMAKE_OP(bfchg, 32, ., .) mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); mask_long = mask_base >> offset; - data_long = m68ki_read_32(ea); + data_long = m68ki_read_32(m68k, ea); FLAG_N = NFLAG_32(data_long << offset); FLAG_Z = data_long & mask_long; FLAG_V = VFLAG_CLEAR; FLAG_C = CFLAG_CLEAR; - m68ki_write_32(ea, data_long ^ mask_long); + m68ki_write_32(m68k, ea, data_long ^ mask_long); if((width + offset) > 32) { mask_byte = MASK_OUT_ABOVE_8(mask_base); - data_byte = m68ki_read_8(ea+4); + data_byte = m68ki_read_8(m68k, ea+4); FLAG_Z |= (data_byte & mask_byte); - m68ki_write_8(ea+4, data_byte ^ mask_byte); + m68ki_write_8(m68k, ea+4, data_byte ^ mask_byte); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2494,7 +2494,7 @@ M68KMAKE_OP(bfclr, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint* data = &DY; @@ -2523,7 +2523,7 @@ M68KMAKE_OP(bfclr, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2531,7 +2531,7 @@ M68KMAKE_OP(bfclr, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint mask_base; @@ -2560,24 +2560,24 @@ M68KMAKE_OP(bfclr, 32, ., .) mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); mask_long = mask_base >> offset; - data_long = m68ki_read_32(ea); + data_long = m68ki_read_32(m68k, ea); FLAG_N = NFLAG_32(data_long << offset); FLAG_Z = data_long & mask_long; FLAG_V = VFLAG_CLEAR; FLAG_C = CFLAG_CLEAR; - m68ki_write_32(ea, data_long & ~mask_long); + m68ki_write_32(m68k, ea, data_long & ~mask_long); if((width + offset) > 32) { mask_byte = MASK_OUT_ABOVE_8(mask_base); - data_byte = m68ki_read_8(ea+4); + data_byte = m68ki_read_8(m68k, ea+4); FLAG_Z |= (data_byte & mask_byte); - m68ki_write_8(ea+4, data_byte & ~mask_byte); + m68ki_write_8(m68k, ea+4, data_byte & ~mask_byte); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2585,7 +2585,7 @@ M68KMAKE_OP(bfexts, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint64 data = DY; @@ -2611,7 +2611,7 @@ M68KMAKE_OP(bfexts, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2619,7 +2619,7 @@ M68KMAKE_OP(bfexts, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint data; @@ -2641,12 +2641,12 @@ M68KMAKE_OP(bfexts, 32, ., .) } width = ((width-1) & 31) + 1; - data = m68ki_read_32(ea); + data = m68ki_read_32(m68k, ea); data = MASK_OUT_ABOVE_32(data<<offset); if((offset+width) > 32) - data |= (m68ki_read_8(ea+4) << offset) >> 8; + data |= (m68ki_read_8(m68k, ea+4) << offset) >> 8; FLAG_N = NFLAG_32(data); data = MAKE_INT_32(data) >> (32 - width); @@ -2659,7 +2659,7 @@ M68KMAKE_OP(bfexts, 32, ., .) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2667,7 +2667,7 @@ M68KMAKE_OP(bfextu, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint64 data = DY; @@ -2693,7 +2693,7 @@ M68KMAKE_OP(bfextu, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2701,7 +2701,7 @@ M68KMAKE_OP(bfextu, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint data; @@ -2723,11 +2723,11 @@ M68KMAKE_OP(bfextu, 32, ., .) } width = ((width-1) & 31) + 1; - data = m68ki_read_32(ea); + data = m68ki_read_32(m68k, ea); data = MASK_OUT_ABOVE_32(data<<offset); if((offset+width) > 32) - data |= (m68ki_read_8(ea+4) << offset) >> 8; + data |= (m68ki_read_8(m68k, ea+4) << offset) >> 8; FLAG_N = NFLAG_32(data); data >>= (32 - width); @@ -2740,7 +2740,7 @@ M68KMAKE_OP(bfextu, 32, ., .) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2748,7 +2748,7 @@ M68KMAKE_OP(bfffo, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint64 data = DY; @@ -2778,7 +2778,7 @@ M68KMAKE_OP(bfffo, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2786,7 +2786,7 @@ M68KMAKE_OP(bfffo, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; sint local_offset; uint width = word2; @@ -2810,11 +2810,11 @@ M68KMAKE_OP(bfffo, 32, ., .) } width = ((width-1) & 31) + 1; - data = m68ki_read_32(ea); + data = m68ki_read_32(m68k, ea); data = MASK_OUT_ABOVE_32(data<<local_offset); if((local_offset+width) > 32) - data |= (m68ki_read_8(ea+4) << local_offset) >> 8; + data |= (m68ki_read_8(m68k, ea+4) << local_offset) >> 8; FLAG_N = NFLAG_32(data); data >>= (32 - width); @@ -2830,7 +2830,7 @@ M68KMAKE_OP(bfffo, 32, ., .) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2838,7 +2838,7 @@ M68KMAKE_OP(bfins, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint* data = &DY; @@ -2872,7 +2872,7 @@ M68KMAKE_OP(bfins, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2880,7 +2880,7 @@ M68KMAKE_OP(bfins, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint insert_base = REG_D[(word2>>12)&7]; @@ -2917,23 +2917,23 @@ M68KMAKE_OP(bfins, 32, ., .) FLAG_Z = insert_base; insert_long = insert_base >> offset; - data_long = m68ki_read_32(ea); + data_long = m68ki_read_32(m68k, ea); FLAG_V = VFLAG_CLEAR; FLAG_C = CFLAG_CLEAR; - m68ki_write_32(ea, (data_long & ~mask_long) | insert_long); + m68ki_write_32(m68k, ea, (data_long & ~mask_long) | insert_long); if((width + offset) > 32) { mask_byte = MASK_OUT_ABOVE_8(mask_base); insert_byte = MASK_OUT_ABOVE_8(insert_base); - data_byte = m68ki_read_8(ea+4); + data_byte = m68ki_read_8(m68k, ea+4); FLAG_Z |= (data_byte & mask_byte); - m68ki_write_8(ea+4, (data_byte & ~mask_byte) | insert_byte); + m68ki_write_8(m68k, ea+4, (data_byte & ~mask_byte) | insert_byte); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2941,7 +2941,7 @@ M68KMAKE_OP(bfset, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint* data = &DY; @@ -2970,7 +2970,7 @@ M68KMAKE_OP(bfset, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -2978,7 +2978,7 @@ M68KMAKE_OP(bfset, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint mask_base; @@ -3008,24 +3008,24 @@ M68KMAKE_OP(bfset, 32, ., .) mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); mask_long = mask_base >> offset; - data_long = m68ki_read_32(ea); + data_long = m68ki_read_32(m68k, ea); FLAG_N = NFLAG_32(data_long << offset); FLAG_Z = data_long & mask_long; FLAG_V = VFLAG_CLEAR; FLAG_C = CFLAG_CLEAR; - m68ki_write_32(ea, data_long | mask_long); + m68ki_write_32(m68k, ea, data_long | mask_long); if((width + offset) > 32) { mask_byte = MASK_OUT_ABOVE_8(mask_base); - data_byte = m68ki_read_8(ea+4); + data_byte = m68ki_read_8(m68k, ea+4); FLAG_Z |= (data_byte & mask_byte); - m68ki_write_8(ea+4, data_byte | mask_byte); + m68ki_write_8(m68k, ea+4, data_byte | mask_byte); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3033,7 +3033,7 @@ M68KMAKE_OP(bftst, 32, ., d) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint offset = (word2>>6)&31; uint width = word2; uint* data = &DY; @@ -3060,7 +3060,7 @@ M68KMAKE_OP(bftst, 32, ., d) return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3068,7 +3068,7 @@ M68KMAKE_OP(bftst, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); sint offset = (word2>>6)&31; uint width = word2; uint mask_base; @@ -3097,7 +3097,7 @@ M68KMAKE_OP(bftst, 32, ., .) mask_base = MASK_OUT_ABOVE_32(0xffffffff << (32 - width)); mask_long = mask_base >> offset; - data_long = m68ki_read_32(ea); + data_long = m68ki_read_32(m68k, ea); FLAG_N = ((data_long & (0x80000000 >> offset))<<offset)>>24; FLAG_Z = data_long & mask_long; FLAG_V = VFLAG_CLEAR; @@ -3106,12 +3106,12 @@ M68KMAKE_OP(bftst, 32, ., .) if((width + offset) > 32) { mask_byte = MASK_OUT_ABOVE_8(mask_base); - data_byte = m68ki_read_8(ea+4); + data_byte = m68ki_read_8(m68k, ea+4); FLAG_Z |= (data_byte & mask_byte); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3121,27 +3121,27 @@ M68KMAKE_OP(bkpt, 0, ., .) { m68ki_bkpt_ack(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE) ? REG_IR & 7 : 0); /* auto-disable (see m68kcpu.h) */ } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(bra, 8, ., .) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + m68ki_branch_8(m68k, MASK_OUT_ABOVE_8(REG_IR)); if(REG_PC == REG_PPC) - USE_ALL_CYCLES(); + USE_ALL_CYCLES(m68k); } M68KMAKE_OP(bra, 16, ., .) { - uint offset = OPER_I_16(); + uint offset = OPER_I_16(m68k); REG_PC -= 2; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_16(offset); + m68ki_branch_16(m68k, offset); if(REG_PC == REG_PPC) - USE_ALL_CYCLES(); + USE_ALL_CYCLES(m68k); } @@ -3149,20 +3149,20 @@ M68KMAKE_OP(bra, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint offset = OPER_I_32(); + uint offset = OPER_I_32(m68k); REG_PC -= 4; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_32(offset); + m68ki_branch_32(m68k, offset); if(REG_PC == REG_PPC) - USE_ALL_CYCLES(); + USE_ALL_CYCLES(m68k); return; } else { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + m68ki_branch_8(m68k, MASK_OUT_ABOVE_8(REG_IR)); if(REG_PC == REG_PPC) - USE_ALL_CYCLES(); + USE_ALL_CYCLES(m68k); } } @@ -3180,18 +3180,18 @@ M68KMAKE_OP(bset, 32, r, d) M68KMAKE_OP(bset, 8, r, .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); uint mask = 1 << (DX & 7); FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); + m68ki_write_8(m68k, ea, src | mask); } M68KMAKE_OP(bset, 32, s, d) { uint* r_dst = &DY; - uint mask = 1 << (OPER_I_8() & 0x1f); + uint mask = 1 << (OPER_I_8(m68k) & 0x1f); FLAG_Z = *r_dst & mask; *r_dst |= mask; @@ -3200,30 +3200,30 @@ M68KMAKE_OP(bset, 32, s, d) M68KMAKE_OP(bset, 8, s, .) { - uint mask = 1 << (OPER_I_8() & 7); + uint mask = 1 << (OPER_I_8(m68k) & 7); uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); FLAG_Z = src & mask; - m68ki_write_8(ea, src | mask); + m68ki_write_8(m68k, ea, src | mask); } M68KMAKE_OP(bsr, 8, ., .) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_push_32(REG_PC); - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + m68ki_push_32(m68k, REG_PC); + m68ki_branch_8(m68k, MASK_OUT_ABOVE_8(REG_IR)); } M68KMAKE_OP(bsr, 16, ., .) { - uint offset = OPER_I_16(); + uint offset = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_push_32(REG_PC); + m68ki_push_32(m68k, REG_PC); REG_PC -= 2; - m68ki_branch_16(offset); + m68ki_branch_16(m68k, offset); } @@ -3231,18 +3231,18 @@ M68KMAKE_OP(bsr, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint offset = OPER_I_32(); + uint offset = OPER_I_32(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_push_32(REG_PC); + m68ki_push_32(m68k, REG_PC); REG_PC -= 4; - m68ki_branch_32(offset); + m68ki_branch_32(m68k, offset); return; } else { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_push_32(REG_PC); - m68ki_branch_8(MASK_OUT_ABOVE_8(REG_IR)); + m68ki_push_32(m68k, REG_PC); + m68ki_branch_8(m68k, MASK_OUT_ABOVE_8(REG_IR)); } } @@ -3261,13 +3261,13 @@ M68KMAKE_OP(btst, 8, r, .) M68KMAKE_OP(btst, 32, s, d) { - FLAG_Z = DY & (1 << (OPER_I_8() & 0x1f)); + FLAG_Z = DY & (1 << (OPER_I_8(m68k) & 0x1f)); } M68KMAKE_OP(btst, 8, s, .) { - uint bit = OPER_I_8() & 7; + uint bit = OPER_I_8(m68k) & 7; FLAG_Z = M68KMAKE_GET_OPER_AY_8 & (1 << bit); } @@ -3288,7 +3288,7 @@ M68KMAKE_OP(callm, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3296,9 +3296,9 @@ M68KMAKE_OP(cas, 8, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_8; - uint dest = m68ki_read_8(ea); + uint dest = m68ki_read_8(m68k, ea); uint* compare = ®_D[word2 & 7]; uint res = dest - MASK_OUT_ABOVE_8(*compare); @@ -3312,12 +3312,12 @@ M68KMAKE_OP(cas, 8, ., .) *compare = MASK_OUT_BELOW_8(*compare) | dest; else { - USE_CYCLES(3); - m68ki_write_8(ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); + USE_CYCLES(m68k, 3); + m68ki_write_8(m68k, ea, MASK_OUT_ABOVE_8(REG_D[(word2 >> 6) & 7])); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3325,9 +3325,9 @@ M68KMAKE_OP(cas, 16, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; - uint dest = m68ki_read_16(ea); + uint dest = m68ki_read_16(m68k, ea); uint* compare = ®_D[word2 & 7]; uint res = dest - MASK_OUT_ABOVE_16(*compare); @@ -3341,12 +3341,12 @@ M68KMAKE_OP(cas, 16, ., .) *compare = MASK_OUT_BELOW_16(*compare) | dest; else { - USE_CYCLES(3); - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); + USE_CYCLES(m68k, 3); + m68ki_write_16(m68k, ea, MASK_OUT_ABOVE_16(REG_D[(word2 >> 6) & 7])); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3354,9 +3354,9 @@ M68KMAKE_OP(cas, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_32; - uint dest = m68ki_read_32(ea); + uint dest = m68ki_read_32(m68k, ea); uint* compare = ®_D[word2 & 7]; uint res = dest - *compare; @@ -3370,12 +3370,12 @@ M68KMAKE_OP(cas, 32, ., .) *compare = dest; else { - USE_CYCLES(3); - m68ki_write_32(ea, REG_D[(word2 >> 6) & 7]); + USE_CYCLES(m68k, 3); + m68ki_write_32(m68k, ea, REG_D[(word2 >> 6) & 7]); } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3383,14 +3383,14 @@ M68KMAKE_OP(cas2, 16, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_32(); + uint word2 = OPER_I_32(m68k); uint* compare1 = ®_D[(word2 >> 16) & 7]; uint ea1 = REG_DA[(word2 >> 28) & 15]; - uint dest1 = m68ki_read_16(ea1); + uint dest1 = m68ki_read_16(m68k, ea1); uint res1 = dest1 - MASK_OUT_ABOVE_16(*compare1); uint* compare2 = ®_D[word2 & 7]; uint ea2 = REG_DA[(word2 >> 12) & 15]; - uint dest2 = m68ki_read_16(ea2); + uint dest2 = m68ki_read_16(m68k, ea2); uint res2; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ @@ -3410,9 +3410,9 @@ M68KMAKE_OP(cas2, 16, ., .) if(COND_EQ()) { - USE_CYCLES(3); - m68ki_write_16(ea1, REG_D[(word2 >> 22) & 7]); - m68ki_write_16(ea2, REG_D[(word2 >> 6) & 7]); + USE_CYCLES(m68k, 3); + m68ki_write_16(m68k, ea1, REG_D[(word2 >> 22) & 7]); + m68ki_write_16(m68k, ea2, REG_D[(word2 >> 6) & 7]); return; } } @@ -3420,7 +3420,7 @@ M68KMAKE_OP(cas2, 16, ., .) *compare2 = BIT_F(word2) ? MAKE_INT_16(dest2) : MASK_OUT_BELOW_16(*compare2) | dest2; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3428,14 +3428,14 @@ M68KMAKE_OP(cas2, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_32(); + uint word2 = OPER_I_32(m68k); uint* compare1 = ®_D[(word2 >> 16) & 7]; uint ea1 = REG_DA[(word2 >> 28) & 15]; - uint dest1 = m68ki_read_32(ea1); + uint dest1 = m68ki_read_32(m68k, ea1); uint res1 = dest1 - *compare1; uint* compare2 = ®_D[word2 & 7]; uint ea2 = REG_DA[(word2 >> 12) & 15]; - uint dest2 = m68ki_read_32(ea2); + uint dest2 = m68ki_read_32(m68k, ea2); uint res2; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ @@ -3455,9 +3455,9 @@ M68KMAKE_OP(cas2, 32, ., .) if(COND_EQ()) { - USE_CYCLES(3); - m68ki_write_32(ea1, REG_D[(word2 >> 22) & 7]); - m68ki_write_32(ea2, REG_D[(word2 >> 6) & 7]); + USE_CYCLES(m68k, 3); + m68ki_write_32(m68k, ea1, REG_D[(word2 >> 22) & 7]); + m68ki_write_32(m68k, ea2, REG_D[(word2 >> 6) & 7]); return; } } @@ -3465,7 +3465,7 @@ M68KMAKE_OP(cas2, 32, ., .) *compare2 = dest2; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3483,7 +3483,7 @@ M68KMAKE_OP(chk, 16, ., d) return; } FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); } @@ -3501,7 +3501,7 @@ M68KMAKE_OP(chk, 16, ., .) return; } FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); } @@ -3521,10 +3521,10 @@ M68KMAKE_OP(chk, 32, ., d) return; } FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3544,10 +3544,10 @@ M68KMAKE_OP(chk, 32, ., .) return; } FLAG_N = (src < 0)<<7; - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3555,11 +3555,11 @@ M68KMAKE_OP(chk2cmp2, 8, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]&0xff; - uint ea = EA_PCDI_8(); - uint lower_bound = m68ki_read_pcrel_8(ea); - uint upper_bound = m68ki_read_pcrel_8(ea + 1); + uint ea = EA_PCDI_8(m68k); + uint lower_bound = m68ki_read_pcrel_8(m68k, ea); + uint upper_bound = m68ki_read_pcrel_8(m68k, ea + 1); if(!BIT_F(word2)) FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); @@ -3569,16 +3569,16 @@ M68KMAKE_OP(chk2cmp2, 8, ., pcdi) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } FLAG_C = upper_bound - compare; if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3586,11 +3586,11 @@ M68KMAKE_OP(chk2cmp2, 8, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]&0xff; - uint ea = EA_PCIX_8(); - uint lower_bound = m68ki_read_pcrel_8(ea); - uint upper_bound = m68ki_read_pcrel_8(ea + 1); + uint ea = EA_PCIX_8(m68k); + uint lower_bound = m68ki_read_pcrel_8(m68k, ea); + uint upper_bound = m68ki_read_pcrel_8(m68k, ea + 1); if(!BIT_F(word2)) FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); @@ -3600,16 +3600,16 @@ M68KMAKE_OP(chk2cmp2, 8, ., pcix) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } FLAG_C = upper_bound - compare; if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3617,11 +3617,11 @@ M68KMAKE_OP(chk2cmp2, 8, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]&0xff; uint ea = M68KMAKE_GET_EA_AY_8; - uint lower_bound = m68ki_read_8(ea); - uint upper_bound = m68ki_read_8(ea + 1); + uint lower_bound = m68ki_read_8(m68k, ea); + uint upper_bound = m68ki_read_8(m68k, ea + 1); if(!BIT_F(word2)) FLAG_C = MAKE_INT_8(compare) - MAKE_INT_8(lower_bound); @@ -3631,16 +3631,16 @@ M68KMAKE_OP(chk2cmp2, 8, ., .) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } FLAG_C = upper_bound - compare; if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3648,11 +3648,11 @@ M68KMAKE_OP(chk2cmp2, 16, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]&0xffff; - uint ea = EA_PCDI_16(); - uint lower_bound = m68ki_read_pcrel_16(ea); - uint upper_bound = m68ki_read_pcrel_16(ea + 2); + uint ea = EA_PCDI_16(m68k); + uint lower_bound = m68ki_read_pcrel_16(m68k, ea); + uint upper_bound = m68ki_read_pcrel_16(m68k, ea + 2); if(!BIT_F(word2)) FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); @@ -3663,7 +3663,7 @@ M68KMAKE_OP(chk2cmp2, 16, ., pcdi) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } @@ -3673,10 +3673,10 @@ M68KMAKE_OP(chk2cmp2, 16, ., pcdi) FLAG_C = upper_bound - compare; FLAG_C = CFLAG_16(FLAG_C); if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3684,11 +3684,11 @@ M68KMAKE_OP(chk2cmp2, 16, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]&0xffff; - uint ea = EA_PCIX_16(); - uint lower_bound = m68ki_read_pcrel_16(ea); - uint upper_bound = m68ki_read_pcrel_16(ea + 2); + uint ea = EA_PCIX_16(m68k); + uint lower_bound = m68ki_read_pcrel_16(m68k, ea); + uint upper_bound = m68ki_read_pcrel_16(m68k, ea + 2); if(!BIT_F(word2)) FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); @@ -3699,7 +3699,7 @@ M68KMAKE_OP(chk2cmp2, 16, ., pcix) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } @@ -3709,10 +3709,10 @@ M68KMAKE_OP(chk2cmp2, 16, ., pcix) FLAG_C = upper_bound - compare; FLAG_C = CFLAG_16(FLAG_C); if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3720,11 +3720,11 @@ M68KMAKE_OP(chk2cmp2, 16, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]&0xffff; uint ea = M68KMAKE_GET_EA_AY_16; - uint lower_bound = m68ki_read_16(ea); - uint upper_bound = m68ki_read_16(ea + 2); + uint lower_bound = m68ki_read_16(m68k, ea); + uint upper_bound = m68ki_read_16(m68k, ea + 2); if(!BIT_F(word2)) FLAG_C = MAKE_INT_16(compare) - MAKE_INT_16(lower_bound); @@ -3736,7 +3736,7 @@ M68KMAKE_OP(chk2cmp2, 16, ., .) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } if(!BIT_F(word2)) @@ -3746,10 +3746,10 @@ M68KMAKE_OP(chk2cmp2, 16, ., .) FLAG_C = CFLAG_16(FLAG_C); if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3757,11 +3757,11 @@ M68KMAKE_OP(chk2cmp2, 32, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]; - uint ea = EA_PCDI_32(); - uint lower_bound = m68ki_read_pcrel_32(ea); - uint upper_bound = m68ki_read_pcrel_32(ea + 4); + uint ea = EA_PCDI_32(m68k); + uint lower_bound = m68ki_read_pcrel_32(m68k, ea); + uint upper_bound = m68ki_read_pcrel_32(m68k, ea + 4); FLAG_C = compare - lower_bound; FLAG_Z = !((upper_bound==compare) | (lower_bound==compare)); @@ -3769,17 +3769,17 @@ M68KMAKE_OP(chk2cmp2, 32, ., pcdi) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } FLAG_C = upper_bound - compare; FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3787,11 +3787,11 @@ M68KMAKE_OP(chk2cmp2, 32, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]; - uint ea = EA_PCIX_32(); - uint lower_bound = m68ki_read_pcrel_32(ea); - uint upper_bound = m68ki_read_pcrel_32(ea + 4); + uint ea = EA_PCIX_32(m68k); + uint lower_bound = m68ki_read_pcrel_32(m68k, ea); + uint upper_bound = m68ki_read_pcrel_32(m68k, ea + 4); FLAG_C = compare - lower_bound; FLAG_Z = !((upper_bound==compare) | (lower_bound==compare)); @@ -3799,17 +3799,17 @@ M68KMAKE_OP(chk2cmp2, 32, ., pcix) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } FLAG_C = upper_bound - compare; FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3817,11 +3817,11 @@ M68KMAKE_OP(chk2cmp2, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint compare = REG_DA[(word2 >> 12) & 15]; uint ea = M68KMAKE_GET_EA_AY_32; - uint lower_bound = m68ki_read_32(ea); - uint upper_bound = m68ki_read_32(ea + 4); + uint lower_bound = m68ki_read_32(m68k, ea); + uint upper_bound = m68ki_read_32(m68k, ea + 4); FLAG_C = compare - lower_bound; FLAG_Z = !((upper_bound==compare) | (lower_bound==compare)); @@ -3829,17 +3829,17 @@ M68KMAKE_OP(chk2cmp2, 32, ., .) if(COND_CS()) { if(BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } FLAG_C = upper_bound - compare; FLAG_C = CFLAG_SUB_32(compare, upper_bound, FLAG_C); if(COND_CS() && BIT_B(word2)) - m68ki_exception_trap(EXCEPTION_CHK); + m68ki_exception_trap(m68k, EXCEPTION_CHK); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -3856,7 +3856,7 @@ M68KMAKE_OP(clr, 8, ., d) M68KMAKE_OP(clr, 8, ., .) { - m68ki_write_8(M68KMAKE_GET_EA_AY_8, 0); + m68ki_write_8(m68k, M68KMAKE_GET_EA_AY_8, 0); FLAG_N = NFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; @@ -3878,7 +3878,7 @@ M68KMAKE_OP(clr, 16, ., d) M68KMAKE_OP(clr, 16, ., .) { - m68ki_write_16(M68KMAKE_GET_EA_AY_16, 0); + m68ki_write_16(m68k, M68KMAKE_GET_EA_AY_16, 0); FLAG_N = NFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; @@ -3900,7 +3900,7 @@ M68KMAKE_OP(clr, 32, ., d) M68KMAKE_OP(clr, 32, ., .) { - m68ki_write_32(M68KMAKE_GET_EA_AY_32, 0); + m68ki_write_32(m68k, M68KMAKE_GET_EA_AY_32, 0); FLAG_N = NFLAG_CLEAR; FLAG_V = VFLAG_CLEAR; @@ -4093,7 +4093,7 @@ M68KMAKE_OP(cmpa, 32, ., .) M68KMAKE_OP(cmpi, 8, ., d) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint dst = MASK_OUT_ABOVE_8(DY); uint res = dst - src; @@ -4106,7 +4106,7 @@ M68KMAKE_OP(cmpi, 8, ., d) M68KMAKE_OP(cmpi, 8, ., .) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint dst = M68KMAKE_GET_OPER_AY_8; uint res = dst - src; @@ -4121,8 +4121,8 @@ M68KMAKE_OP(cmpi, 8, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_I_8(); - uint dst = OPER_PCDI_8(); + uint src = OPER_I_8(m68k); + uint dst = OPER_PCDI_8(m68k); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -4131,7 +4131,7 @@ M68KMAKE_OP(cmpi, 8, ., pcdi) FLAG_C = CFLAG_8(res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -4139,8 +4139,8 @@ M68KMAKE_OP(cmpi, 8, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_I_8(); - uint dst = OPER_PCIX_8(); + uint src = OPER_I_8(m68k); + uint dst = OPER_PCIX_8(m68k); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -4149,13 +4149,13 @@ M68KMAKE_OP(cmpi, 8, ., pcix) FLAG_C = CFLAG_8(res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(cmpi, 16, ., d) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint dst = MASK_OUT_ABOVE_16(DY); uint res = dst - src; @@ -4168,7 +4168,7 @@ M68KMAKE_OP(cmpi, 16, ., d) M68KMAKE_OP(cmpi, 16, ., .) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint dst = M68KMAKE_GET_OPER_AY_16; uint res = dst - src; @@ -4183,8 +4183,8 @@ M68KMAKE_OP(cmpi, 16, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_I_16(); - uint dst = OPER_PCDI_16(); + uint src = OPER_I_16(m68k); + uint dst = OPER_PCDI_16(m68k); uint res = dst - src; FLAG_N = NFLAG_16(res); @@ -4193,7 +4193,7 @@ M68KMAKE_OP(cmpi, 16, ., pcdi) FLAG_C = CFLAG_16(res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -4201,8 +4201,8 @@ M68KMAKE_OP(cmpi, 16, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_I_16(); - uint dst = OPER_PCIX_16(); + uint src = OPER_I_16(m68k); + uint dst = OPER_PCIX_16(m68k); uint res = dst - src; FLAG_N = NFLAG_16(res); @@ -4211,13 +4211,13 @@ M68KMAKE_OP(cmpi, 16, ., pcix) FLAG_C = CFLAG_16(res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(cmpi, 32, ., d) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint dst = DY; uint res = dst - src; @@ -4232,7 +4232,7 @@ M68KMAKE_OP(cmpi, 32, ., d) M68KMAKE_OP(cmpi, 32, ., .) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint dst = M68KMAKE_GET_OPER_AY_32; uint res = dst - src; @@ -4247,8 +4247,8 @@ M68KMAKE_OP(cmpi, 32, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_I_32(); - uint dst = OPER_PCDI_32(); + uint src = OPER_I_32(m68k); + uint dst = OPER_PCDI_32(m68k); uint res = dst - src; FLAG_N = NFLAG_32(res); @@ -4257,7 +4257,7 @@ M68KMAKE_OP(cmpi, 32, ., pcdi) FLAG_C = CFLAG_SUB_32(src, dst, res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -4265,8 +4265,8 @@ M68KMAKE_OP(cmpi, 32, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_I_32(); - uint dst = OPER_PCIX_32(); + uint src = OPER_I_32(m68k); + uint dst = OPER_PCIX_32(m68k); uint res = dst - src; FLAG_N = NFLAG_32(res); @@ -4275,14 +4275,14 @@ M68KMAKE_OP(cmpi, 32, ., pcix) FLAG_C = CFLAG_SUB_32(src, dst, res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(cmpm, 8, ., ax7) { - uint src = OPER_AY_PI_8(); - uint dst = OPER_A7_PI_8(); + uint src = OPER_AY_PI_8(m68k); + uint dst = OPER_A7_PI_8(m68k); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -4294,8 +4294,8 @@ M68KMAKE_OP(cmpm, 8, ., ax7) M68KMAKE_OP(cmpm, 8, ., ay7) { - uint src = OPER_A7_PI_8(); - uint dst = OPER_AX_PI_8(); + uint src = OPER_A7_PI_8(m68k); + uint dst = OPER_AX_PI_8(m68k); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -4307,8 +4307,8 @@ M68KMAKE_OP(cmpm, 8, ., ay7) M68KMAKE_OP(cmpm, 8, ., axy7) { - uint src = OPER_A7_PI_8(); - uint dst = OPER_A7_PI_8(); + uint src = OPER_A7_PI_8(m68k); + uint dst = OPER_A7_PI_8(m68k); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -4320,8 +4320,8 @@ M68KMAKE_OP(cmpm, 8, ., axy7) M68KMAKE_OP(cmpm, 8, ., .) { - uint src = OPER_AY_PI_8(); - uint dst = OPER_AX_PI_8(); + uint src = OPER_AY_PI_8(m68k); + uint dst = OPER_AX_PI_8(m68k); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -4333,8 +4333,8 @@ M68KMAKE_OP(cmpm, 8, ., .) M68KMAKE_OP(cmpm, 16, ., .) { - uint src = OPER_AY_PI_16(); - uint dst = OPER_AX_PI_16(); + uint src = OPER_AY_PI_16(m68k); + uint dst = OPER_AX_PI_16(m68k); uint res = dst - src; FLAG_N = NFLAG_16(res); @@ -4346,8 +4346,8 @@ M68KMAKE_OP(cmpm, 16, ., .) M68KMAKE_OP(cmpm, 32, ., .) { - uint src = OPER_AY_PI_32(); - uint dst = OPER_AX_PI_32(); + uint src = OPER_AY_PI_32(m68k); + uint dst = OPER_AX_PI_32(m68k); uint res = dst - src; FLAG_N = NFLAG_32(res); @@ -4366,7 +4366,7 @@ M68KMAKE_OP(cpbcc, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -4379,7 +4379,7 @@ M68KMAKE_OP(cpdbcc, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -4392,7 +4392,7 @@ M68KMAKE_OP(cpgen, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -4405,7 +4405,7 @@ M68KMAKE_OP(cpscc, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -4418,7 +4418,7 @@ M68KMAKE_OP(cptrapcc, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_1111(); + m68ki_exception_1111(m68k); } @@ -4436,15 +4436,15 @@ M68KMAKE_OP(dbf, 16, ., .) *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; if(res != 0xffff) { - uint offset = OPER_I_16(); + uint offset = OPER_I_16(m68k); REG_PC -= 2; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); + m68ki_branch_16(m68k, offset); + USE_CYCLES(m68k, CYC_DBCC_F_NOEXP); return; } REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); + USE_CYCLES(m68k, CYC_DBCC_F_EXP); } @@ -4458,15 +4458,15 @@ M68KMAKE_OP(dbcc, 16, ., .) *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; if(res != 0xffff) { - uint offset = OPER_I_16(); + uint offset = OPER_I_16(m68k); REG_PC -= 2; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_16(offset); - USE_CYCLES(CYC_DBCC_F_NOEXP); + m68ki_branch_16(m68k, offset); + USE_CYCLES(m68k, CYC_DBCC_F_NOEXP); return; } REG_PC += 2; - USE_CYCLES(CYC_DBCC_F_EXP); + USE_CYCLES(m68k, CYC_DBCC_F_EXP); return; } REG_PC += 2; @@ -4507,7 +4507,7 @@ M68KMAKE_OP(divs, 16, ., d) FLAG_V = VFLAG_SET; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); } @@ -4545,7 +4545,7 @@ M68KMAKE_OP(divs, 16, ., .) FLAG_V = VFLAG_SET; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); } @@ -4571,7 +4571,7 @@ M68KMAKE_OP(divu, 16, ., d) FLAG_V = VFLAG_SET; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); } @@ -4597,7 +4597,7 @@ M68KMAKE_OP(divu, 16, ., .) FLAG_V = VFLAG_SET; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); } @@ -4607,7 +4607,7 @@ M68KMAKE_OP(divl, 32, ., d) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint64 divisor = DY; uint64 dividend = 0; uint64 quotient = 0; @@ -4666,16 +4666,16 @@ M68KMAKE_OP(divl, 32, ., d) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #else if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint divisor = DY; uint dividend_hi = REG_D[word2 & 7]; uint dividend_lo = REG_D[(word2 >> 12) & 7]; @@ -4803,10 +4803,10 @@ M68KMAKE_OP(divl, 32, ., d) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #endif } @@ -4818,7 +4818,7 @@ M68KMAKE_OP(divl, 32, ., .) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint64 divisor = M68KMAKE_GET_OPER_AY_32; uint64 dividend = 0; uint64 quotient = 0; @@ -4877,16 +4877,16 @@ M68KMAKE_OP(divl, 32, ., .) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #else if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint divisor = M68KMAKE_GET_OPER_AY_32; uint dividend_hi = REG_D[word2 & 7]; uint dividend_lo = REG_D[(word2 >> 12) & 7]; @@ -5014,10 +5014,10 @@ M68KMAKE_OP(divl, 32, ., .) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_trap(EXCEPTION_ZERO_DIVIDE); + m68ki_exception_trap(m68k, EXCEPTION_ZERO_DIVIDE); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #endif } @@ -5037,9 +5037,9 @@ M68KMAKE_OP(eor, 8, ., d) M68KMAKE_OP(eor, 8, ., .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(ea)); + uint res = MASK_OUT_ABOVE_8(DX ^ m68ki_read_8(m68k, ea)); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5062,9 +5062,9 @@ M68KMAKE_OP(eor, 16, ., d) M68KMAKE_OP(eor, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(ea)); + uint res = MASK_OUT_ABOVE_16(DX ^ m68ki_read_16(m68k, ea)); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -5087,9 +5087,9 @@ M68KMAKE_OP(eor, 32, ., d) M68KMAKE_OP(eor, 32, ., .) { uint ea = M68KMAKE_GET_EA_AY_32; - uint res = DX ^ m68ki_read_32(ea); + uint res = DX ^ m68ki_read_32(m68k, ea); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -5100,7 +5100,7 @@ M68KMAKE_OP(eor, 32, ., .) M68KMAKE_OP(eori, 8, ., d) { - uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8()); + uint res = MASK_OUT_ABOVE_8(DY ^= OPER_I_8(m68k)); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5111,11 +5111,11 @@ M68KMAKE_OP(eori, 8, ., d) M68KMAKE_OP(eori, 8, ., .) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint ea = M68KMAKE_GET_EA_AY_8; - uint res = src ^ m68ki_read_8(ea); + uint res = src ^ m68ki_read_8(m68k, ea); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5126,7 +5126,7 @@ M68KMAKE_OP(eori, 8, ., .) M68KMAKE_OP(eori, 16, ., d) { - uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16()); + uint res = MASK_OUT_ABOVE_16(DY ^= OPER_I_16(m68k)); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -5137,11 +5137,11 @@ M68KMAKE_OP(eori, 16, ., d) M68KMAKE_OP(eori, 16, ., .) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; - uint res = src ^ m68ki_read_16(ea); + uint res = src ^ m68ki_read_16(m68k, ea); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -5152,7 +5152,7 @@ M68KMAKE_OP(eori, 16, ., .) M68KMAKE_OP(eori, 32, ., d) { - uint res = DY ^= OPER_I_32(); + uint res = DY ^= OPER_I_32(m68k); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -5163,11 +5163,11 @@ M68KMAKE_OP(eori, 32, ., d) M68KMAKE_OP(eori, 32, ., .) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint ea = M68KMAKE_GET_EA_AY_32; - uint res = src ^ m68ki_read_32(ea); + uint res = src ^ m68ki_read_32(m68k, ea); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -5178,7 +5178,7 @@ M68KMAKE_OP(eori, 32, ., .) M68KMAKE_OP(eori, 16, toc, .) { - m68ki_set_ccr(m68ki_get_ccr() ^ OPER_I_16()); + m68ki_set_ccr(m68k, m68ki_get_ccr() ^ OPER_I_16(m68k)); } @@ -5186,12 +5186,12 @@ M68KMAKE_OP(eori, 16, tos, .) { if(FLAG_S) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_set_sr(m68ki_get_sr() ^ src); + m68ki_set_sr(m68k, m68ki_get_sr(m68k) ^ src); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -5265,21 +5265,21 @@ M68KMAKE_OP(extb, 32, ., .) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(illegal, 0, ., .) { - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(jmp, 32, ., .) { - m68ki_jump(M68KMAKE_GET_EA_AY_32); + m68ki_jump(m68k, M68KMAKE_GET_EA_AY_32); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ if(REG_PC == REG_PPC) - USE_ALL_CYCLES(); + USE_ALL_CYCLES(m68k); } @@ -5287,8 +5287,8 @@ M68KMAKE_OP(jsr, 32, ., .) { uint ea = M68KMAKE_GET_EA_AY_32; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_push_32(REG_PC); - m68ki_jump(ea); + m68ki_push_32(m68k, REG_PC); + m68ki_jump(m68k, ea); } @@ -5301,8 +5301,8 @@ M68KMAKE_OP(lea, 32, ., .) M68KMAKE_OP(link, 16, ., a7) { REG_A[7] -= 4; - m68ki_write_32(REG_A[7], REG_A[7]); - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); + m68ki_write_32(m68k, REG_A[7], REG_A[7]); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16(m68k))); } @@ -5310,9 +5310,9 @@ M68KMAKE_OP(link, 16, ., .) { uint* r_dst = &AY; - m68ki_push_32(*r_dst); + m68ki_push_32(m68k, *r_dst); *r_dst = REG_A[7]; - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16(m68k))); } @@ -5321,11 +5321,11 @@ M68KMAKE_OP(link, 32, ., a7) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { REG_A[7] -= 4; - m68ki_write_32(REG_A[7], REG_A[7]); - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32()); + m68ki_write_32(m68k, REG_A[7], REG_A[7]); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32(m68k)); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -5335,12 +5335,12 @@ M68KMAKE_OP(link, 32, ., .) { uint* r_dst = &AY; - m68ki_push_32(*r_dst); + m68ki_push_32(m68k, *r_dst); *r_dst = REG_A[7]; - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32()); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + OPER_I_32(m68k)); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -5352,7 +5352,7 @@ M68KMAKE_OP(lsr, 8, s, .) uint res = src >> shift; if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; @@ -5371,7 +5371,7 @@ M68KMAKE_OP(lsr, 16, s, .) uint res = src >> shift; if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; @@ -5390,7 +5390,7 @@ M68KMAKE_OP(lsr, 32, s, .) uint res = src >> shift; if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -5410,7 +5410,7 @@ M68KMAKE_OP(lsr, 8, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift <= 8) { @@ -5447,7 +5447,7 @@ M68KMAKE_OP(lsr, 16, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift <= 16) { @@ -5484,7 +5484,7 @@ M68KMAKE_OP(lsr, 32, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 32) { @@ -5514,10 +5514,10 @@ M68KMAKE_OP(lsr, 32, r, .) M68KMAKE_OP(lsr, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = src >> 1; - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_CLEAR; FLAG_Z = res; @@ -5534,7 +5534,7 @@ M68KMAKE_OP(lsl, 8, s, .) uint res = MASK_OUT_ABOVE_8(src << shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; @@ -5553,7 +5553,7 @@ M68KMAKE_OP(lsl, 16, s, .) uint res = MASK_OUT_ABOVE_16(src << shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; @@ -5572,7 +5572,7 @@ M68KMAKE_OP(lsl, 32, s, .) uint res = MASK_OUT_ABOVE_32(src << shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -5592,7 +5592,7 @@ M68KMAKE_OP(lsl, 8, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift <= 8) { @@ -5629,7 +5629,7 @@ M68KMAKE_OP(lsl, 16, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift <= 16) { @@ -5666,7 +5666,7 @@ M68KMAKE_OP(lsl, 32, r, .) if(shift != 0) { - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); if(shift < 32) { @@ -5696,10 +5696,10 @@ M68KMAKE_OP(lsl, 32, r, .) M68KMAKE_OP(lsl, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = MASK_OUT_ABOVE_16(src << 1); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -5739,9 +5739,9 @@ M68KMAKE_OP(move, 8, d, .) M68KMAKE_OP(move, 8, ai, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_AI_8(); + uint ea = EA_AX_AI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5753,9 +5753,9 @@ M68KMAKE_OP(move, 8, ai, d) M68KMAKE_OP(move, 8, ai, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AX_AI_8(); + uint ea = EA_AX_AI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5767,9 +5767,9 @@ M68KMAKE_OP(move, 8, ai, .) M68KMAKE_OP(move, 8, pi7, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_A7_PI_8(); + uint ea = EA_A7_PI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5781,9 +5781,9 @@ M68KMAKE_OP(move, 8, pi7, d) M68KMAKE_OP(move, 8, pi, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_PI_8(); + uint ea = EA_AX_PI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5795,9 +5795,9 @@ M68KMAKE_OP(move, 8, pi, d) M68KMAKE_OP(move, 8, pi7, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_A7_PI_8(); + uint ea = EA_A7_PI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5809,9 +5809,9 @@ M68KMAKE_OP(move, 8, pi7, .) M68KMAKE_OP(move, 8, pi, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AX_PI_8(); + uint ea = EA_AX_PI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5823,9 +5823,9 @@ M68KMAKE_OP(move, 8, pi, .) M68KMAKE_OP(move, 8, pd7, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_A7_PD_8(); + uint ea = EA_A7_PD_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5837,9 +5837,9 @@ M68KMAKE_OP(move, 8, pd7, d) M68KMAKE_OP(move, 8, pd, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_PD_8(); + uint ea = EA_AX_PD_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5851,9 +5851,9 @@ M68KMAKE_OP(move, 8, pd, d) M68KMAKE_OP(move, 8, pd7, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_A7_PD_8(); + uint ea = EA_A7_PD_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5865,9 +5865,9 @@ M68KMAKE_OP(move, 8, pd7, .) M68KMAKE_OP(move, 8, pd, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AX_PD_8(); + uint ea = EA_AX_PD_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5879,9 +5879,9 @@ M68KMAKE_OP(move, 8, pd, .) M68KMAKE_OP(move, 8, di, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_DI_8(); + uint ea = EA_AX_DI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5893,9 +5893,9 @@ M68KMAKE_OP(move, 8, di, d) M68KMAKE_OP(move, 8, di, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AX_DI_8(); + uint ea = EA_AX_DI_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5907,9 +5907,9 @@ M68KMAKE_OP(move, 8, di, .) M68KMAKE_OP(move, 8, ix, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AX_IX_8(); + uint ea = EA_AX_IX_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5921,9 +5921,9 @@ M68KMAKE_OP(move, 8, ix, d) M68KMAKE_OP(move, 8, ix, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AX_IX_8(); + uint ea = EA_AX_IX_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5935,9 +5935,9 @@ M68KMAKE_OP(move, 8, ix, .) M68KMAKE_OP(move, 8, aw, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AW_8(); + uint ea = EA_AW_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5949,9 +5949,9 @@ M68KMAKE_OP(move, 8, aw, d) M68KMAKE_OP(move, 8, aw, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AW_8(); + uint ea = EA_AW_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5963,9 +5963,9 @@ M68KMAKE_OP(move, 8, aw, .) M68KMAKE_OP(move, 8, al, d) { uint res = MASK_OUT_ABOVE_8(DY); - uint ea = EA_AL_8(); + uint ea = EA_AL_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -5977,9 +5977,9 @@ M68KMAKE_OP(move, 8, al, d) M68KMAKE_OP(move, 8, al, .) { uint res = M68KMAKE_GET_OPER_AY_8; - uint ea = EA_AL_8(); + uint ea = EA_AL_8(m68k); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -6033,9 +6033,9 @@ M68KMAKE_OP(move, 16, d, .) M68KMAKE_OP(move, 16, ai, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_AI_16(); + uint ea = EA_AX_AI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6047,9 +6047,9 @@ M68KMAKE_OP(move, 16, ai, d) M68KMAKE_OP(move, 16, ai, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_AI_16(); + uint ea = EA_AX_AI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6061,9 +6061,9 @@ M68KMAKE_OP(move, 16, ai, a) M68KMAKE_OP(move, 16, ai, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AX_AI_16(); + uint ea = EA_AX_AI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6075,9 +6075,9 @@ M68KMAKE_OP(move, 16, ai, .) M68KMAKE_OP(move, 16, pi, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_PI_16(); + uint ea = EA_AX_PI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6089,9 +6089,9 @@ M68KMAKE_OP(move, 16, pi, d) M68KMAKE_OP(move, 16, pi, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_PI_16(); + uint ea = EA_AX_PI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6103,9 +6103,9 @@ M68KMAKE_OP(move, 16, pi, a) M68KMAKE_OP(move, 16, pi, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AX_PI_16(); + uint ea = EA_AX_PI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6117,9 +6117,9 @@ M68KMAKE_OP(move, 16, pi, .) M68KMAKE_OP(move, 16, pd, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_PD_16(); + uint ea = EA_AX_PD_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6131,9 +6131,9 @@ M68KMAKE_OP(move, 16, pd, d) M68KMAKE_OP(move, 16, pd, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_PD_16(); + uint ea = EA_AX_PD_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6145,9 +6145,9 @@ M68KMAKE_OP(move, 16, pd, a) M68KMAKE_OP(move, 16, pd, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AX_PD_16(); + uint ea = EA_AX_PD_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6159,9 +6159,9 @@ M68KMAKE_OP(move, 16, pd, .) M68KMAKE_OP(move, 16, di, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_DI_16(); + uint ea = EA_AX_DI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6173,9 +6173,9 @@ M68KMAKE_OP(move, 16, di, d) M68KMAKE_OP(move, 16, di, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_DI_16(); + uint ea = EA_AX_DI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6187,9 +6187,9 @@ M68KMAKE_OP(move, 16, di, a) M68KMAKE_OP(move, 16, di, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AX_DI_16(); + uint ea = EA_AX_DI_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6201,9 +6201,9 @@ M68KMAKE_OP(move, 16, di, .) M68KMAKE_OP(move, 16, ix, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AX_IX_16(); + uint ea = EA_AX_IX_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6215,9 +6215,9 @@ M68KMAKE_OP(move, 16, ix, d) M68KMAKE_OP(move, 16, ix, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AX_IX_16(); + uint ea = EA_AX_IX_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6229,9 +6229,9 @@ M68KMAKE_OP(move, 16, ix, a) M68KMAKE_OP(move, 16, ix, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AX_IX_16(); + uint ea = EA_AX_IX_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6243,9 +6243,9 @@ M68KMAKE_OP(move, 16, ix, .) M68KMAKE_OP(move, 16, aw, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AW_16(); + uint ea = EA_AW_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6257,9 +6257,9 @@ M68KMAKE_OP(move, 16, aw, d) M68KMAKE_OP(move, 16, aw, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AW_16(); + uint ea = EA_AW_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6271,9 +6271,9 @@ M68KMAKE_OP(move, 16, aw, a) M68KMAKE_OP(move, 16, aw, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AW_16(); + uint ea = EA_AW_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6285,9 +6285,9 @@ M68KMAKE_OP(move, 16, aw, .) M68KMAKE_OP(move, 16, al, d) { uint res = MASK_OUT_ABOVE_16(DY); - uint ea = EA_AL_16(); + uint ea = EA_AL_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6299,9 +6299,9 @@ M68KMAKE_OP(move, 16, al, d) M68KMAKE_OP(move, 16, al, a) { uint res = MASK_OUT_ABOVE_16(AY); - uint ea = EA_AL_16(); + uint ea = EA_AL_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6313,9 +6313,9 @@ M68KMAKE_OP(move, 16, al, a) M68KMAKE_OP(move, 16, al, .) { uint res = M68KMAKE_GET_OPER_AY_16; - uint ea = EA_AL_16(); + uint ea = EA_AL_16(m68k); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -6369,9 +6369,9 @@ M68KMAKE_OP(move, 32, d, .) M68KMAKE_OP(move, 32, ai, d) { uint res = DY; - uint ea = EA_AX_AI_32(); + uint ea = EA_AX_AI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6383,9 +6383,9 @@ M68KMAKE_OP(move, 32, ai, d) M68KMAKE_OP(move, 32, ai, a) { uint res = AY; - uint ea = EA_AX_AI_32(); + uint ea = EA_AX_AI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6397,9 +6397,9 @@ M68KMAKE_OP(move, 32, ai, a) M68KMAKE_OP(move, 32, ai, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AX_AI_32(); + uint ea = EA_AX_AI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6411,9 +6411,9 @@ M68KMAKE_OP(move, 32, ai, .) M68KMAKE_OP(move, 32, pi, d) { uint res = DY; - uint ea = EA_AX_PI_32(); + uint ea = EA_AX_PI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6425,9 +6425,9 @@ M68KMAKE_OP(move, 32, pi, d) M68KMAKE_OP(move, 32, pi, a) { uint res = AY; - uint ea = EA_AX_PI_32(); + uint ea = EA_AX_PI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6439,9 +6439,9 @@ M68KMAKE_OP(move, 32, pi, a) M68KMAKE_OP(move, 32, pi, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AX_PI_32(); + uint ea = EA_AX_PI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6453,10 +6453,10 @@ M68KMAKE_OP(move, 32, pi, .) M68KMAKE_OP(move, 32, pd, d) { uint res = DY; - uint ea = EA_AX_PD_32(); + uint ea = EA_AX_PD_32(m68k); - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); + m68ki_write_16(m68k, ea+2, res & 0xFFFF ); + m68ki_write_16(m68k, ea, (res >> 16) & 0xFFFF ); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6468,10 +6468,10 @@ M68KMAKE_OP(move, 32, pd, d) M68KMAKE_OP(move, 32, pd, a) { uint res = AY; - uint ea = EA_AX_PD_32(); + uint ea = EA_AX_PD_32(m68k); - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); + m68ki_write_16(m68k, ea+2, res & 0xFFFF ); + m68ki_write_16(m68k, ea, (res >> 16) & 0xFFFF ); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6483,10 +6483,10 @@ M68KMAKE_OP(move, 32, pd, a) M68KMAKE_OP(move, 32, pd, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AX_PD_32(); + uint ea = EA_AX_PD_32(m68k); - m68ki_write_16(ea+2, res & 0xFFFF ); - m68ki_write_16(ea, (res >> 16) & 0xFFFF ); + m68ki_write_16(m68k, ea+2, res & 0xFFFF ); + m68ki_write_16(m68k, ea, (res >> 16) & 0xFFFF ); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6498,9 +6498,9 @@ M68KMAKE_OP(move, 32, pd, .) M68KMAKE_OP(move, 32, di, d) { uint res = DY; - uint ea = EA_AX_DI_32(); + uint ea = EA_AX_DI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6512,9 +6512,9 @@ M68KMAKE_OP(move, 32, di, d) M68KMAKE_OP(move, 32, di, a) { uint res = AY; - uint ea = EA_AX_DI_32(); + uint ea = EA_AX_DI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6526,9 +6526,9 @@ M68KMAKE_OP(move, 32, di, a) M68KMAKE_OP(move, 32, di, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AX_DI_32(); + uint ea = EA_AX_DI_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6540,9 +6540,9 @@ M68KMAKE_OP(move, 32, di, .) M68KMAKE_OP(move, 32, ix, d) { uint res = DY; - uint ea = EA_AX_IX_32(); + uint ea = EA_AX_IX_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6554,9 +6554,9 @@ M68KMAKE_OP(move, 32, ix, d) M68KMAKE_OP(move, 32, ix, a) { uint res = AY; - uint ea = EA_AX_IX_32(); + uint ea = EA_AX_IX_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6568,9 +6568,9 @@ M68KMAKE_OP(move, 32, ix, a) M68KMAKE_OP(move, 32, ix, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AX_IX_32(); + uint ea = EA_AX_IX_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6582,9 +6582,9 @@ M68KMAKE_OP(move, 32, ix, .) M68KMAKE_OP(move, 32, aw, d) { uint res = DY; - uint ea = EA_AW_32(); + uint ea = EA_AW_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6596,9 +6596,9 @@ M68KMAKE_OP(move, 32, aw, d) M68KMAKE_OP(move, 32, aw, a) { uint res = AY; - uint ea = EA_AW_32(); + uint ea = EA_AW_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6610,9 +6610,9 @@ M68KMAKE_OP(move, 32, aw, a) M68KMAKE_OP(move, 32, aw, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AW_32(); + uint ea = EA_AW_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6624,9 +6624,9 @@ M68KMAKE_OP(move, 32, aw, .) M68KMAKE_OP(move, 32, al, d) { uint res = DY; - uint ea = EA_AL_32(); + uint ea = EA_AL_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6638,9 +6638,9 @@ M68KMAKE_OP(move, 32, al, d) M68KMAKE_OP(move, 32, al, a) { uint res = AY; - uint ea = EA_AL_32(); + uint ea = EA_AL_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6652,9 +6652,9 @@ M68KMAKE_OP(move, 32, al, a) M68KMAKE_OP(move, 32, al, .) { uint res = M68KMAKE_GET_OPER_AY_32; - uint ea = EA_AL_32(); + uint ea = EA_AL_32(m68k); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -6706,7 +6706,7 @@ M68KMAKE_OP(move, 16, frc, d) DY = MASK_OUT_BELOW_16(DY) | m68ki_get_ccr(); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -6714,22 +6714,22 @@ M68KMAKE_OP(move, 16, frc, .) { if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) { - m68ki_write_16(M68KMAKE_GET_EA_AY_16, m68ki_get_ccr()); + m68ki_write_16(m68k, M68KMAKE_GET_EA_AY_16, m68ki_get_ccr()); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(move, 16, toc, d) { - m68ki_set_ccr(DY); + m68ki_set_ccr(m68k, DY); } M68KMAKE_OP(move, 16, toc, .) { - m68ki_set_ccr(M68KMAKE_GET_OPER_AY_16); + m68ki_set_ccr(m68k, M68KMAKE_GET_OPER_AY_16); } @@ -6737,10 +6737,10 @@ M68KMAKE_OP(move, 16, frs, d) { if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ { - DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr(); + DY = MASK_OUT_BELOW_16(DY) | m68ki_get_sr(m68k); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -6749,10 +6749,10 @@ M68KMAKE_OP(move, 16, frs, .) if(CPU_TYPE_IS_000(CPU_TYPE) || FLAG_S) /* NS990408 */ { uint ea = M68KMAKE_GET_EA_AY_16; - m68ki_write_16(ea, m68ki_get_sr()); + m68ki_write_16(m68k, ea, m68ki_get_sr(m68k)); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -6760,10 +6760,10 @@ M68KMAKE_OP(move, 16, tos, d) { if(FLAG_S) { - m68ki_set_sr(DY); + m68ki_set_sr(m68k, DY); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -6773,10 +6773,10 @@ M68KMAKE_OP(move, 16, tos, .) { uint new_sr = M68KMAKE_GET_OPER_AY_16; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_set_sr(new_sr); + m68ki_set_sr(m68k, new_sr); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -6787,7 +6787,7 @@ M68KMAKE_OP(move, 32, fru, .) AY = REG_USP; return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -6799,7 +6799,7 @@ M68KMAKE_OP(move, 32, tou, .) REG_USP = AY; return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -6809,7 +6809,7 @@ M68KMAKE_OP(movec, 32, cr, .) { if(FLAG_S) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ switch (word2 & 0xfff) @@ -6839,7 +6839,7 @@ M68KMAKE_OP(movec, 32, cr, .) REG_DA[(word2 >> 12) & 15] = REG_CAAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); break; case 0x803: /* MSP */ if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) @@ -6847,7 +6847,7 @@ M68KMAKE_OP(movec, 32, cr, .) REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_SP : REG_MSP; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x804: /* ISP */ if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) @@ -6855,7 +6855,7 @@ M68KMAKE_OP(movec, 32, cr, .) REG_DA[(word2 >> 12) & 15] = FLAG_M ? REG_ISP : REG_SP; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x003: /* TC */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6863,7 +6863,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x004: /* ITT0 */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6871,7 +6871,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x005: /* ITT1 */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6879,7 +6879,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x006: /* DTT0 */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6887,7 +6887,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x007: /* DTT1 */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6895,7 +6895,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x805: /* MMUSR */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6903,7 +6903,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x806: /* URP */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6911,7 +6911,7 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x807: /* SRP */ if(CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -6919,17 +6919,17 @@ M68KMAKE_OP(movec, 32, cr, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; default: - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; } } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -6939,7 +6939,7 @@ M68KMAKE_OP(movec, 32, rc, .) { if(FLAG_S) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ switch (word2 & 0xfff) @@ -6964,7 +6964,7 @@ M68KMAKE_OP(movec, 32, rc, .) } return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x800: /* USP */ REG_USP = REG_DA[(word2 >> 12) & 15]; @@ -6978,7 +6978,7 @@ M68KMAKE_OP(movec, 32, rc, .) REG_CAAR = REG_DA[(word2 >> 12) & 15]; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x803: /* MSP */ if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) @@ -6992,7 +6992,7 @@ M68KMAKE_OP(movec, 32, rc, .) REG_SP = REG_DA[(word2 >> 12) & 15]; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x804: /* ISP */ if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) @@ -7005,7 +7005,7 @@ M68KMAKE_OP(movec, 32, rc, .) REG_ISP = REG_DA[(word2 >> 12) & 15]; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x003: /* TC */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7013,7 +7013,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x004: /* ITT0 */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7021,7 +7021,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x005: /* ITT1 */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7029,7 +7029,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x006: /* DTT0 */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7037,7 +7037,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x007: /* DTT1 */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7045,7 +7045,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x805: /* MMUSR */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7053,7 +7053,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x806: /* URP */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7061,7 +7061,7 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; case 0x807: /* SRP */ if (CPU_TYPE_IS_040_PLUS(CPU_TYPE)) @@ -7069,24 +7069,24 @@ M68KMAKE_OP(movec, 32, rc, .) /* TODO */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; default: - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); return; } } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(movem, 16, re, pd) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = AY; uint count = 0; @@ -7094,38 +7094,38 @@ M68KMAKE_OP(movem, 16, re, pd) if(register_list & (1 << i)) { ea -= 2; - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[15-i])); + m68ki_write_16(m68k, ea, MASK_OUT_ABOVE_16(REG_DA[15-i])); count++; } AY = ea; - USE_CYCLES(count<<CYC_MOVEM_W); + USE_CYCLES(m68k, count<<CYC_MOVEM_W); } M68KMAKE_OP(movem, 16, re, .) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - m68ki_write_16(ea, MASK_OUT_ABOVE_16(REG_DA[i])); + m68ki_write_16(m68k, ea, MASK_OUT_ABOVE_16(REG_DA[i])); ea += 2; count++; } - USE_CYCLES(count<<CYC_MOVEM_W); + USE_CYCLES(m68k, count<<CYC_MOVEM_W); } M68KMAKE_OP(movem, 32, re, pd) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = AY; uint count = 0; @@ -7133,226 +7133,226 @@ M68KMAKE_OP(movem, 32, re, pd) if(register_list & (1 << i)) { ea -= 4; - m68ki_write_16(ea+2, REG_DA[15-i] & 0xFFFF ); - m68ki_write_16(ea, (REG_DA[15-i] >> 16) & 0xFFFF ); + m68ki_write_16(m68k, ea+2, REG_DA[15-i] & 0xFFFF ); + m68ki_write_16(m68k, ea, (REG_DA[15-i] >> 16) & 0xFFFF ); count++; } AY = ea; - USE_CYCLES(count<<CYC_MOVEM_L); + USE_CYCLES(m68k, count<<CYC_MOVEM_L); } M68KMAKE_OP(movem, 32, re, .) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_32; uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - m68ki_write_32(ea, REG_DA[i]); + m68ki_write_32(m68k, ea, REG_DA[i]); ea += 4; count++; } - USE_CYCLES(count<<CYC_MOVEM_L); + USE_CYCLES(m68k, count<<CYC_MOVEM_L); } M68KMAKE_OP(movem, 16, er, pi) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = AY; uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); + REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(m68k, ea))); ea += 2; count++; } AY = ea; - USE_CYCLES(count<<CYC_MOVEM_W); + USE_CYCLES(m68k, count<<CYC_MOVEM_W); } M68KMAKE_OP(movem, 16, er, pcdi) { uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCDI_16(); + uint register_list = OPER_I_16(m68k); + uint ea = EA_PCDI_16(m68k); uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea))); + REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(m68k, ea))); ea += 2; count++; } - USE_CYCLES(count<<CYC_MOVEM_W); + USE_CYCLES(m68k, count<<CYC_MOVEM_W); } M68KMAKE_OP(movem, 16, er, pcix) { uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCIX_16(); + uint register_list = OPER_I_16(m68k); + uint ea = EA_PCIX_16(m68k); uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(ea))); + REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_pcrel_16(m68k, ea))); ea += 2; count++; } - USE_CYCLES(count<<CYC_MOVEM_W); + USE_CYCLES(m68k, count<<CYC_MOVEM_W); } M68KMAKE_OP(movem, 16, er, .) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(ea))); + REG_DA[i] = MAKE_INT_16(MASK_OUT_ABOVE_16(m68ki_read_16(m68k, ea))); ea += 2; count++; } - USE_CYCLES(count<<CYC_MOVEM_W); + USE_CYCLES(m68k, count<<CYC_MOVEM_W); } M68KMAKE_OP(movem, 32, er, pi) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = AY; uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = m68ki_read_32(ea); + REG_DA[i] = m68ki_read_32(m68k, ea); ea += 4; count++; } AY = ea; - USE_CYCLES(count<<CYC_MOVEM_L); + USE_CYCLES(m68k, count<<CYC_MOVEM_L); } M68KMAKE_OP(movem, 32, er, pcdi) { uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCDI_32(); + uint register_list = OPER_I_16(m68k); + uint ea = EA_PCDI_32(m68k); uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = m68ki_read_pcrel_32(ea); + REG_DA[i] = m68ki_read_pcrel_32(m68k, ea); ea += 4; count++; } - USE_CYCLES(count<<CYC_MOVEM_L); + USE_CYCLES(m68k, count<<CYC_MOVEM_L); } M68KMAKE_OP(movem, 32, er, pcix) { uint i = 0; - uint register_list = OPER_I_16(); - uint ea = EA_PCIX_32(); + uint register_list = OPER_I_16(m68k); + uint ea = EA_PCIX_32(m68k); uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = m68ki_read_pcrel_32(ea); + REG_DA[i] = m68ki_read_pcrel_32(m68k, ea); ea += 4; count++; } - USE_CYCLES(count<<CYC_MOVEM_L); + USE_CYCLES(m68k, count<<CYC_MOVEM_L); } M68KMAKE_OP(movem, 32, er, .) { uint i = 0; - uint register_list = OPER_I_16(); + uint register_list = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_32; uint count = 0; for(; i < 16; i++) if(register_list & (1 << i)) { - REG_DA[i] = m68ki_read_32(ea); + REG_DA[i] = m68ki_read_32(m68k, ea); ea += 4; count++; } - USE_CYCLES(count<<CYC_MOVEM_L); + USE_CYCLES(m68k, count<<CYC_MOVEM_L); } M68KMAKE_OP(movep, 16, re, .) { - uint ea = EA_AY_DI_16(); + uint ea = EA_AY_DI_16(m68k); uint src = DX; - m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 8)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src)); + m68ki_write_8(m68k, ea, MASK_OUT_ABOVE_8(src >> 8)); + m68ki_write_8(m68k, ea += 2, MASK_OUT_ABOVE_8(src)); } M68KMAKE_OP(movep, 32, re, .) { - uint ea = EA_AY_DI_32(); + uint ea = EA_AY_DI_32(m68k); uint src = DX; - m68ki_write_8(ea, MASK_OUT_ABOVE_8(src >> 24)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 16)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src >> 8)); - m68ki_write_8(ea += 2, MASK_OUT_ABOVE_8(src)); + m68ki_write_8(m68k, ea, MASK_OUT_ABOVE_8(src >> 24)); + m68ki_write_8(m68k, ea += 2, MASK_OUT_ABOVE_8(src >> 16)); + m68ki_write_8(m68k, ea += 2, MASK_OUT_ABOVE_8(src >> 8)); + m68ki_write_8(m68k, ea += 2, MASK_OUT_ABOVE_8(src)); } M68KMAKE_OP(movep, 16, er, .) { - uint ea = EA_AY_DI_16(); + uint ea = EA_AY_DI_16(m68k); uint* r_dst = &DX; - *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(ea) << 8) + m68ki_read_8(ea + 2)); + *r_dst = MASK_OUT_BELOW_16(*r_dst) | ((m68ki_read_8(m68k, ea) << 8) + m68ki_read_8(m68k, ea + 2)); } M68KMAKE_OP(movep, 32, er, .) { - uint ea = EA_AY_DI_32(); + uint ea = EA_AY_DI_32(m68k); - DX = (m68ki_read_8(ea) << 24) + (m68ki_read_8(ea + 2) << 16) - + (m68ki_read_8(ea + 4) << 8) + m68ki_read_8(ea + 6); + DX = (m68ki_read_8(m68k, ea) << 24) + (m68ki_read_8(m68k, ea + 2) << 16) + + (m68ki_read_8(m68k, ea + 4) << 8) + m68ki_read_8(m68k, ea + 6); } @@ -7362,32 +7362,32 @@ M68KMAKE_OP(moves, 8, ., .) { if(FLAG_S) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_8; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ if(BIT_B(word2)) /* Register to memory */ { - m68ki_write_8_fc(ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); + m68ki_write_8_fc(m68k, ea, REG_DFC, MASK_OUT_ABOVE_8(REG_DA[(word2 >> 12) & 15])); return; } if(BIT_F(word2)) /* Memory to address register */ { - REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(ea, REG_SFC)); + REG_A[(word2 >> 12) & 7] = MAKE_INT_8(m68ki_read_8_fc(m68k, ea, REG_SFC)); if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) - USE_CYCLES(2); + USE_CYCLES(m68k, 2); return; } /* Memory to data register */ - REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(ea, REG_SFC); + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_8(REG_D[(word2 >> 12) & 7]) | m68ki_read_8_fc(m68k, ea, REG_SFC); if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) - USE_CYCLES(2); + USE_CYCLES(m68k, 2); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -7397,32 +7397,32 @@ M68KMAKE_OP(moves, 16, ., .) { if(FLAG_S) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ if(BIT_B(word2)) /* Register to memory */ { - m68ki_write_16_fc(ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); + m68ki_write_16_fc(m68k, ea, REG_DFC, MASK_OUT_ABOVE_16(REG_DA[(word2 >> 12) & 15])); return; } if(BIT_F(word2)) /* Memory to address register */ { - REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(ea, REG_SFC)); + REG_A[(word2 >> 12) & 7] = MAKE_INT_16(m68ki_read_16_fc(m68k, ea, REG_SFC)); if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) - USE_CYCLES(2); + USE_CYCLES(m68k, 2); return; } /* Memory to data register */ - REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(ea, REG_SFC); + REG_D[(word2 >> 12) & 7] = MASK_OUT_BELOW_16(REG_D[(word2 >> 12) & 7]) | m68ki_read_16_fc(m68k, ea, REG_SFC); if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) - USE_CYCLES(2); + USE_CYCLES(m68k, 2); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -7432,27 +7432,27 @@ M68KMAKE_OP(moves, 32, ., .) { if(FLAG_S) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_32; m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ if(BIT_B(word2)) /* Register to memory */ { - m68ki_write_32_fc(ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); + m68ki_write_32_fc(m68k, ea, REG_DFC, REG_DA[(word2 >> 12) & 15]); if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) - USE_CYCLES(2); + USE_CYCLES(m68k, 2); return; } /* Memory to register */ - REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(ea, REG_SFC); + REG_DA[(word2 >> 12) & 15] = m68ki_read_32_fc(m68k, ea, REG_SFC); if(CPU_TYPE_IS_020_VARIANT(CPU_TYPE)) - USE_CYCLES(2); + USE_CYCLES(m68k, 2); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -7469,14 +7469,14 @@ M68KMAKE_OP(moveq, 32, ., .) M68KMAKE_OP(move16, 32, ., .) { - UINT16 w2 = OPER_I_16(); + UINT16 w2 = OPER_I_16(m68k); int ax = REG_IR & 7; int ay = (w2 >> 12) & 7; - m68ki_write_32(REG_A[ay], m68ki_read_32(REG_A[ax])); - m68ki_write_32(REG_A[ay]+4, m68ki_read_32(REG_A[ax]+4)); - m68ki_write_32(REG_A[ay]+8, m68ki_read_32(REG_A[ax]+8)); - m68ki_write_32(REG_A[ay]+12, m68ki_read_32(REG_A[ax]+12)); + m68ki_write_32(m68k, REG_A[ay], m68ki_read_32(m68k, REG_A[ax])); + m68ki_write_32(m68k, REG_A[ay]+4, m68ki_read_32(m68k, REG_A[ax]+4)); + m68ki_write_32(m68k, REG_A[ay]+8, m68ki_read_32(m68k, REG_A[ax]+8)); + m68ki_write_32(m68k, REG_A[ay]+12, m68ki_read_32(m68k, REG_A[ax]+12)); REG_A[ax] += 16; REG_A[ay] += 16; @@ -7545,7 +7545,7 @@ M68KMAKE_OP(mull, 32, ., d) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint64 src = DY; uint64 dst = REG_D[(word2 >> 12) & 7]; uint64 res; @@ -7587,13 +7587,13 @@ M68KMAKE_OP(mull, 32, ., d) REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #else if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint src = DY; uint dst = REG_D[(word2 >> 12) & 7]; uint neg = GET_MSB_32(src ^ dst); @@ -7657,7 +7657,7 @@ M68KMAKE_OP(mull, 32, ., d) FLAG_V = (hi != 0) << 7; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #endif } @@ -7669,7 +7669,7 @@ M68KMAKE_OP(mull, 32, ., .) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint64 src = M68KMAKE_GET_OPER_AY_32; uint64 dst = REG_D[(word2 >> 12) & 7]; uint64 res; @@ -7711,13 +7711,13 @@ M68KMAKE_OP(mull, 32, ., .) REG_D[(word2 >> 12) & 7] = MASK_OUT_ABOVE_32(res); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #else if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint word2 = OPER_I_16(); + uint word2 = OPER_I_16(m68k); uint src = M68KMAKE_GET_OPER_AY_32; uint dst = REG_D[(word2 >> 12) & 7]; uint neg = GET_MSB_32(src ^ dst); @@ -7781,7 +7781,7 @@ M68KMAKE_OP(mull, 32, ., .) FLAG_V = (hi != 0) << 7; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); #endif } @@ -7823,7 +7823,7 @@ M68KMAKE_OP(nbcd, 8, ., d) M68KMAKE_OP(nbcd, 8, ., .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = MASK_OUT_ABOVE_8(0x9a - dst - XFLAG_AS_1()); if(res != 0x9a) @@ -7837,7 +7837,7 @@ M68KMAKE_OP(nbcd, 8, ., .) FLAG_V &= res; /* Undefined V behavior part II */ - m68ki_write_8(ea, MASK_OUT_ABOVE_8(res)); + m68ki_write_8(m68k, ea, MASK_OUT_ABOVE_8(res)); FLAG_Z |= res; FLAG_C = CFLAG_SET; @@ -7870,7 +7870,7 @@ M68KMAKE_OP(neg, 8, ., d) M68KMAKE_OP(neg, 8, ., .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); uint res = 0 - src; FLAG_N = NFLAG_8(res); @@ -7878,7 +7878,7 @@ M68KMAKE_OP(neg, 8, ., .) FLAG_V = src & res; FLAG_Z = MASK_OUT_ABOVE_8(res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } @@ -7899,7 +7899,7 @@ M68KMAKE_OP(neg, 16, ., d) M68KMAKE_OP(neg, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = 0 - src; FLAG_N = NFLAG_16(res); @@ -7907,7 +7907,7 @@ M68KMAKE_OP(neg, 16, ., .) FLAG_V = (src & res)>>8; FLAG_Z = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } @@ -7928,7 +7928,7 @@ M68KMAKE_OP(neg, 32, ., d) M68KMAKE_OP(neg, 32, ., .) { uint ea = M68KMAKE_GET_EA_AY_32; - uint src = m68ki_read_32(ea); + uint src = m68ki_read_32(m68k, ea); uint res = 0 - src; FLAG_N = NFLAG_32(res); @@ -7936,7 +7936,7 @@ M68KMAKE_OP(neg, 32, ., .) FLAG_V = (src & res)>>24; FLAG_Z = MASK_OUT_ABOVE_32(res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -7959,7 +7959,7 @@ M68KMAKE_OP(negx, 8, ., d) M68KMAKE_OP(negx, 8, ., .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint src = m68ki_read_8(ea); + uint src = m68ki_read_8(m68k, ea); uint res = 0 - src - XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -7969,7 +7969,7 @@ M68KMAKE_OP(negx, 8, ., .) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } @@ -7992,7 +7992,7 @@ M68KMAKE_OP(negx, 16, ., d) M68KMAKE_OP(negx, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = 0 - MASK_OUT_ABOVE_16(src) - XFLAG_AS_1(); FLAG_N = NFLAG_16(res); @@ -8002,7 +8002,7 @@ M68KMAKE_OP(negx, 16, ., .) res = MASK_OUT_ABOVE_16(res); FLAG_Z |= res; - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); } @@ -8025,7 +8025,7 @@ M68KMAKE_OP(negx, 32, ., d) M68KMAKE_OP(negx, 32, ., .) { uint ea = M68KMAKE_GET_EA_AY_32; - uint src = m68ki_read_32(ea); + uint src = m68ki_read_32(m68k, ea); uint res = 0 - MASK_OUT_ABOVE_32(src) - XFLAG_AS_1(); FLAG_N = NFLAG_32(res); @@ -8035,7 +8035,7 @@ M68KMAKE_OP(negx, 32, ., .) res = MASK_OUT_ABOVE_32(res); FLAG_Z |= res; - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); } @@ -8062,9 +8062,9 @@ M68KMAKE_OP(not, 8, ., d) M68KMAKE_OP(not, 8, ., .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(ea)); + uint res = MASK_OUT_ABOVE_8(~m68ki_read_8(m68k, ea)); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -8090,9 +8090,9 @@ M68KMAKE_OP(not, 16, ., d) M68KMAKE_OP(not, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(ea)); + uint res = MASK_OUT_ABOVE_16(~m68ki_read_16(m68k, ea)); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -8116,9 +8116,9 @@ M68KMAKE_OP(not, 32, ., d) M68KMAKE_OP(not, 32, ., .) { uint ea = M68KMAKE_GET_EA_AY_32; - uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(ea)); + uint res = MASK_OUT_ABOVE_32(~m68ki_read_32(m68k, ea)); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -8196,9 +8196,9 @@ M68KMAKE_OP(or, 32, er, .) M68KMAKE_OP(or, 8, re, .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(ea)); + uint res = MASK_OUT_ABOVE_8(DX | m68ki_read_8(m68k, ea)); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -8210,9 +8210,9 @@ M68KMAKE_OP(or, 8, re, .) M68KMAKE_OP(or, 16, re, .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(ea)); + uint res = MASK_OUT_ABOVE_16(DX | m68ki_read_16(m68k, ea)); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -8224,9 +8224,9 @@ M68KMAKE_OP(or, 16, re, .) M68KMAKE_OP(or, 32, re, .) { uint ea = M68KMAKE_GET_EA_AY_32; - uint res = DX | m68ki_read_32(ea); + uint res = DX | m68ki_read_32(m68k, ea); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -8237,7 +8237,7 @@ M68KMAKE_OP(or, 32, re, .) M68KMAKE_OP(ori, 8, ., d) { - uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8())); + uint res = MASK_OUT_ABOVE_8((DY |= OPER_I_8(m68k))); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -8248,11 +8248,11 @@ M68KMAKE_OP(ori, 8, ., d) M68KMAKE_OP(ori, 8, ., .) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint ea = M68KMAKE_GET_EA_AY_8; - uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(ea)); + uint res = MASK_OUT_ABOVE_8(src | m68ki_read_8(m68k, ea)); - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -8263,7 +8263,7 @@ M68KMAKE_OP(ori, 8, ., .) M68KMAKE_OP(ori, 16, ., d) { - uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16()); + uint res = MASK_OUT_ABOVE_16(DY |= OPER_I_16(m68k)); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -8274,11 +8274,11 @@ M68KMAKE_OP(ori, 16, ., d) M68KMAKE_OP(ori, 16, ., .) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; - uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(ea)); + uint res = MASK_OUT_ABOVE_16(src | m68ki_read_16(m68k, ea)); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -8289,7 +8289,7 @@ M68KMAKE_OP(ori, 16, ., .) M68KMAKE_OP(ori, 32, ., d) { - uint res = DY |= OPER_I_32(); + uint res = DY |= OPER_I_32(m68k); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -8300,11 +8300,11 @@ M68KMAKE_OP(ori, 32, ., d) M68KMAKE_OP(ori, 32, ., .) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint ea = M68KMAKE_GET_EA_AY_32; - uint res = src | m68ki_read_32(ea); + uint res = src | m68ki_read_32(m68k, ea); - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -8315,7 +8315,7 @@ M68KMAKE_OP(ori, 32, ., .) M68KMAKE_OP(ori, 16, toc, .) { - m68ki_set_ccr(m68ki_get_ccr() | OPER_I_16()); + m68ki_set_ccr(m68k, m68ki_get_ccr() | OPER_I_16(m68k)); } @@ -8323,12 +8323,12 @@ M68KMAKE_OP(ori, 16, tos, .) { if(FLAG_S) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_set_sr(m68ki_get_sr() | src); + m68ki_set_sr(m68k, m68ki_get_sr(m68k) | src); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -8337,13 +8337,13 @@ M68KMAKE_OP(pack, 16, rr, .) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: DX and DY are reversed in Motorola's docs */ - uint src = DY + OPER_I_16(); + uint src = DY + OPER_I_16(m68k); uint* r_dst = &DX; *r_dst = MASK_OUT_BELOW_8(*r_dst) | ((src >> 4) & 0x00f0) | (src & 0x000f); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -8352,15 +8352,15 @@ M68KMAKE_OP(pack, 16, mm, ax7) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: AX and AY are reversed in Motorola's docs */ - uint ea_src = EA_AY_PD_8(); - uint src = m68ki_read_8(ea_src); - ea_src = EA_AY_PD_8(); - src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + uint ea_src = EA_AY_PD_8(m68k); + uint src = m68ki_read_8(m68k, ea_src); + ea_src = EA_AY_PD_8(m68k); + src = ((src << 8) | m68ki_read_8(m68k, ea_src)) + OPER_I_16(m68k); - m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8(m68k, EA_A7_PD_8(m68k), ((src >> 4) & 0x00f0) | (src & 0x000f)); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -8369,15 +8369,15 @@ M68KMAKE_OP(pack, 16, mm, ay7) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: AX and AY are reversed in Motorola's docs */ - uint ea_src = EA_A7_PD_8(); - uint src = m68ki_read_8(ea_src); - ea_src = EA_A7_PD_8(); - src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + uint ea_src = EA_A7_PD_8(m68k); + uint src = m68ki_read_8(m68k, ea_src); + ea_src = EA_A7_PD_8(m68k); + src = ((src << 8) | m68ki_read_8(m68k, ea_src)) + OPER_I_16(m68k); - m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8(m68k, EA_AX_PD_8(m68k), ((src >> 4) & 0x00f0) | (src & 0x000f)); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -8385,15 +8385,15 @@ M68KMAKE_OP(pack, 16, mm, axy7) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint ea_src = EA_A7_PD_8(); - uint src = m68ki_read_8(ea_src); - ea_src = EA_A7_PD_8(); - src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + uint ea_src = EA_A7_PD_8(m68k); + uint src = m68ki_read_8(m68k, ea_src); + ea_src = EA_A7_PD_8(m68k); + src = ((src << 8) | m68ki_read_8(m68k, ea_src)) + OPER_I_16(m68k); - m68ki_write_8(EA_A7_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8(m68k, EA_A7_PD_8(m68k), ((src >> 4) & 0x00f0) | (src & 0x000f)); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -8402,15 +8402,15 @@ M68KMAKE_OP(pack, 16, mm, .) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: AX and AY are reversed in Motorola's docs */ - uint ea_src = EA_AY_PD_8(); - uint src = m68ki_read_8(ea_src); - ea_src = EA_AY_PD_8(); - src = ((src << 8) | m68ki_read_8(ea_src)) + OPER_I_16(); + uint ea_src = EA_AY_PD_8(m68k); + uint src = m68ki_read_8(m68k, ea_src); + ea_src = EA_AY_PD_8(m68k); + src = ((src << 8) | m68ki_read_8(m68k, ea_src)) + OPER_I_16(m68k); - m68ki_write_8(EA_AX_PD_8(), ((src >> 4) & 0x00f0) | (src & 0x000f)); + m68ki_write_8(m68k, EA_AX_PD_8(m68k), ((src >> 4) & 0x00f0) | (src & 0x000f)); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -8418,7 +8418,7 @@ M68KMAKE_OP(pea, 32, ., .) { uint ea = M68KMAKE_GET_EA_AY_32; - m68ki_push_32(ea); + m68ki_push_32(m68k, ea); } @@ -8429,7 +8429,7 @@ M68KMAKE_OP(pflush, 32, ., .) // Nothing to do, unless address translation cache is emulated return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -8438,10 +8438,10 @@ M68KMAKE_OP(reset, 0, ., .) if(FLAG_S) { m68ki_output_reset(); /* auto-disable (see m68kcpu.h) */ - USE_CYCLES(CYC_RESET); + USE_CYCLES(m68k, CYC_RESET); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -8454,7 +8454,7 @@ M68KMAKE_OP(ror, 8, s, .) uint res = ROR_8(src, shift); if(orig_shift != 0) - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; @@ -8473,7 +8473,7 @@ M68KMAKE_OP(ror, 16, s, .) uint res = ROR_16(src, shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; @@ -8492,7 +8492,7 @@ M68KMAKE_OP(ror, 32, s, .) uint res = ROR_32(src, shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -8513,7 +8513,7 @@ M68KMAKE_OP(ror, 8, r, .) if(orig_shift != 0) { - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; FLAG_C = src << (8-((shift-1)&7)); @@ -8540,7 +8540,7 @@ M68KMAKE_OP(ror, 16, r, .) if(orig_shift != 0) { - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; FLAG_C = (src >> ((shift - 1) & 15)) << 8; @@ -8567,7 +8567,7 @@ M68KMAKE_OP(ror, 32, r, .) if(orig_shift != 0) { - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); *r_dst = res; FLAG_C = (src >> ((shift - 1) & 31)) << 8; @@ -8587,10 +8587,10 @@ M68KMAKE_OP(ror, 32, r, .) M68KMAKE_OP(ror, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = ROR_16(src, 1); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -8608,7 +8608,7 @@ M68KMAKE_OP(rol, 8, s, .) uint res = ROL_8(src, shift); if(orig_shift != 0) - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_8(*r_dst) | res; @@ -8627,7 +8627,7 @@ M68KMAKE_OP(rol, 16, s, .) uint res = ROL_16(src, shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = MASK_OUT_BELOW_16(*r_dst) | res; @@ -8646,7 +8646,7 @@ M68KMAKE_OP(rol, 32, s, .) uint res = ROL_32(src, shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -8667,7 +8667,7 @@ M68KMAKE_OP(rol, 8, r, .) if(orig_shift != 0) { - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); if(shift != 0) { @@ -8702,7 +8702,7 @@ M68KMAKE_OP(rol, 16, r, .) if(orig_shift != 0) { - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); if(shift != 0) { @@ -8737,7 +8737,7 @@ M68KMAKE_OP(rol, 32, r, .) if(orig_shift != 0) { - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); *r_dst = res; @@ -8758,10 +8758,10 @@ M68KMAKE_OP(rol, 32, r, .) M68KMAKE_OP(rol, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = MASK_OUT_ABOVE_16(ROL_16(src, 1)); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -8778,7 +8778,7 @@ M68KMAKE_OP(roxr, 8, s, .) uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); FLAG_C = FLAG_X = res; res = MASK_OUT_ABOVE_8(res); @@ -8799,7 +8799,7 @@ M68KMAKE_OP(roxr, 16, s, .) uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); FLAG_C = FLAG_X = res >> 8; res = MASK_OUT_ABOVE_16(res); @@ -8822,7 +8822,7 @@ M68KMAKE_OP(roxr, 32, s, .) uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); res = ROR_33_64(res, shift); @@ -8844,7 +8844,7 @@ M68KMAKE_OP(roxr, 32, s, .) uint new_x_flag = src & (1 << (shift - 1)); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -8868,7 +8868,7 @@ M68KMAKE_OP(roxr, 8, r, .) uint src = MASK_OUT_ABOVE_8(*r_dst); uint res = ROR_9(src | (XFLAG_AS_1() << 8), shift); - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); FLAG_C = FLAG_X = res; res = MASK_OUT_ABOVE_8(res); @@ -8898,7 +8898,7 @@ M68KMAKE_OP(roxr, 16, r, .) uint src = MASK_OUT_ABOVE_16(*r_dst); uint res = ROR_17(src | (XFLAG_AS_1() << 16), shift); - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); FLAG_C = FLAG_X = res >> 8; res = MASK_OUT_ABOVE_16(res); @@ -8932,7 +8932,7 @@ M68KMAKE_OP(roxr, 32, r, .) res = ROR_33_64(res, shift); - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); FLAG_C = FLAG_X = res >> 24; res = MASK_OUT_ABOVE_32(res); @@ -8959,7 +8959,7 @@ M68KMAKE_OP(roxr, 32, r, .) uint new_x_flag = src & (1 << (shift - 1)); if(orig_shift != 0) - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); if(shift != 0) { @@ -8980,13 +8980,13 @@ M68KMAKE_OP(roxr, 32, r, .) M68KMAKE_OP(roxr, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = ROR_17(src | (XFLAG_AS_1() << 16), 1); FLAG_C = FLAG_X = res >> 8; res = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -9002,7 +9002,7 @@ M68KMAKE_OP(roxl, 8, s, .) uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); FLAG_C = FLAG_X = res; res = MASK_OUT_ABOVE_8(res); @@ -9023,7 +9023,7 @@ M68KMAKE_OP(roxl, 16, s, .) uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); FLAG_C = FLAG_X = res >> 8; res = MASK_OUT_ABOVE_16(res); @@ -9046,7 +9046,7 @@ M68KMAKE_OP(roxl, 32, s, .) uint64 res = src | (((uint64)XFLAG_AS_1()) << 32); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); res = ROL_33_64(res, shift); @@ -9068,7 +9068,7 @@ M68KMAKE_OP(roxl, 32, s, .) uint new_x_flag = src & (1 << (32 - shift)); if(shift != 0) - USE_CYCLES(shift<<CYC_SHIFT); + USE_CYCLES(m68k, shift<<CYC_SHIFT); *r_dst = res; @@ -9093,7 +9093,7 @@ M68KMAKE_OP(roxl, 8, r, .) uint src = MASK_OUT_ABOVE_8(*r_dst); uint res = ROL_9(src | (XFLAG_AS_1() << 8), shift); - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); FLAG_C = FLAG_X = res; res = MASK_OUT_ABOVE_8(res); @@ -9123,7 +9123,7 @@ M68KMAKE_OP(roxl, 16, r, .) uint src = MASK_OUT_ABOVE_16(*r_dst); uint res = ROL_17(src | (XFLAG_AS_1() << 16), shift); - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); FLAG_C = FLAG_X = res >> 8; res = MASK_OUT_ABOVE_16(res); @@ -9157,7 +9157,7 @@ M68KMAKE_OP(roxl, 32, r, .) res = ROL_33_64(res, shift); - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); FLAG_C = FLAG_X = res >> 24; res = MASK_OUT_ABOVE_32(res); @@ -9184,7 +9184,7 @@ M68KMAKE_OP(roxl, 32, r, .) uint new_x_flag = src & (1 << (32 - shift)); if(orig_shift != 0) - USE_CYCLES(orig_shift<<CYC_SHIFT); + USE_CYCLES(m68k, orig_shift<<CYC_SHIFT); if(shift != 0) { @@ -9205,13 +9205,13 @@ M68KMAKE_OP(roxl, 32, r, .) M68KMAKE_OP(roxl, 16, ., .) { uint ea = M68KMAKE_GET_EA_AY_16; - uint src = m68ki_read_16(ea); + uint src = m68ki_read_16(m68k, ea); uint res = ROL_17(src | (XFLAG_AS_1() << 16), 1); FLAG_C = FLAG_X = res >> 8; res = MASK_OUT_ABOVE_16(res); - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -9223,14 +9223,14 @@ M68KMAKE_OP(rtd, 32, ., .) { if(CPU_TYPE_IS_010_PLUS(CPU_TYPE)) { - uint new_pc = m68ki_pull_32(); + uint new_pc = m68ki_pull_32(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16())); - m68ki_jump(new_pc); + REG_A[7] = MASK_OUT_ABOVE_32(REG_A[7] + MAKE_INT_16(OPER_I_16(m68k))); + m68ki_jump(m68k, new_pc); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -9247,10 +9247,10 @@ M68KMAKE_OP(rte, 32, ., .) if(CPU_TYPE_IS_000(CPU_TYPE)) { - new_sr = m68ki_pull_16(); - new_pc = m68ki_pull_32(); - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); + new_sr = m68ki_pull_16(m68k); + new_pc = m68ki_pull_32(m68k); + m68ki_jump(m68k, new_pc); + m68ki_set_sr(m68k, new_sr); CPU_INSTR_MODE = INSTRUCTION_YES; CPU_RUN_MODE = RUN_MODE_NORMAL; @@ -9260,14 +9260,14 @@ M68KMAKE_OP(rte, 32, ., .) if(CPU_TYPE_IS_010(CPU_TYPE)) { - format_word = m68ki_read_16(REG_A[7]+6) >> 12; + format_word = m68ki_read_16(m68k, REG_A[7]+6) >> 12; if(format_word == 0) { - new_sr = m68ki_pull_16(); - new_pc = m68ki_pull_32(); - m68ki_fake_pull_16(); /* format word */ - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); + new_sr = m68ki_pull_16(m68k); + new_pc = m68ki_pull_32(m68k); + m68ki_fake_pull_16(m68k); /* format word */ + m68ki_jump(m68k, new_pc); + m68ki_set_sr(m68k, new_sr); CPU_INSTR_MODE = INSTRUCTION_YES; CPU_RUN_MODE = RUN_MODE_NORMAL; return; @@ -9275,37 +9275,37 @@ M68KMAKE_OP(rte, 32, ., .) CPU_INSTR_MODE = INSTRUCTION_YES; CPU_RUN_MODE = RUN_MODE_NORMAL; /* Not handling bus fault (9) */ - m68ki_exception_format_error(); + m68ki_exception_format_error(m68k); return; } /* Otherwise it's 020 */ rte_loop: - format_word = m68ki_read_16(REG_A[7]+6) >> 12; + format_word = m68ki_read_16(m68k, REG_A[7]+6) >> 12; switch(format_word) { case 0: /* Normal */ - new_sr = m68ki_pull_16(); - new_pc = m68ki_pull_32(); - m68ki_fake_pull_16(); /* format word */ - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); + new_sr = m68ki_pull_16(m68k); + new_pc = m68ki_pull_32(m68k); + m68ki_fake_pull_16(m68k); /* format word */ + m68ki_jump(m68k, new_pc); + m68ki_set_sr(m68k, new_sr); CPU_INSTR_MODE = INSTRUCTION_YES; CPU_RUN_MODE = RUN_MODE_NORMAL; return; case 1: /* Throwaway */ - new_sr = m68ki_pull_16(); - m68ki_fake_pull_32(); /* program counter */ - m68ki_fake_pull_16(); /* format word */ - m68ki_set_sr_noint(new_sr); + new_sr = m68ki_pull_16(m68k); + m68ki_fake_pull_32(m68k); /* program counter */ + m68ki_fake_pull_16(m68k); /* format word */ + m68ki_set_sr_noint(m68k, new_sr); goto rte_loop; case 2: /* Trap */ - new_sr = m68ki_pull_16(); - new_pc = m68ki_pull_32(); - m68ki_fake_pull_16(); /* format word */ - m68ki_fake_pull_32(); /* address */ - m68ki_jump(new_pc); - m68ki_set_sr(new_sr); + new_sr = m68ki_pull_16(m68k); + new_pc = m68ki_pull_32(m68k); + m68ki_fake_pull_16(m68k); /* format word */ + m68ki_fake_pull_32(m68k); /* address */ + m68ki_jump(m68k, new_pc); + m68ki_set_sr(m68k, new_sr); CPU_INSTR_MODE = INSTRUCTION_YES; CPU_RUN_MODE = RUN_MODE_NORMAL; return; @@ -9313,10 +9313,10 @@ rte_loop: /* Not handling long or short bus fault */ CPU_INSTR_MODE = INSTRUCTION_YES; CPU_RUN_MODE = RUN_MODE_NORMAL; - m68ki_exception_format_error(); + m68ki_exception_format_error(m68k); return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -9330,22 +9330,22 @@ M68KMAKE_OP(rtm, 32, ., .) m68k_disassemble_quick(ADDRESS_68K(REG_PC - 2)))); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(rtr, 32, ., .) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_set_ccr(m68ki_pull_16()); - m68ki_jump(m68ki_pull_32()); + m68ki_set_ccr(m68k, m68ki_pull_16(m68k)); + m68ki_jump(m68k, m68ki_pull_32(m68k)); } M68KMAKE_OP(rts, 32, ., .) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_jump(m68ki_pull_32()); + m68ki_jump(m68k, m68ki_pull_32(m68k)); } @@ -9383,9 +9383,9 @@ M68KMAKE_OP(sbcd, 8, rr, .) M68KMAKE_OP(sbcd, 8, mm, ax7) { - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); // FLAG_V = ~res; /* Undefined V behavior */ @@ -9409,15 +9409,15 @@ M68KMAKE_OP(sbcd, 8, mm, ax7) // FLAG_N = NFLAG_8(res); /* Undefined N behavior */ FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(sbcd, 8, mm, ay7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); // FLAG_V = ~res; /* Undefined V behavior */ @@ -9441,15 +9441,15 @@ M68KMAKE_OP(sbcd, 8, mm, ay7) // FLAG_N = NFLAG_8(res); /* Undefined N behavior */ FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(sbcd, 8, mm, axy7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); // FLAG_V = ~res; /* Undefined V behavior */ @@ -9473,15 +9473,15 @@ M68KMAKE_OP(sbcd, 8, mm, axy7) // FLAG_N = NFLAG_8(res); /* Undefined N behavior */ FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(sbcd, 8, mm, .) { - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = LOW_NIBBLE(dst) - LOW_NIBBLE(src) - XFLAG_AS_1(); // FLAG_V = ~res; /* Undefined V behavior */ @@ -9505,7 +9505,7 @@ M68KMAKE_OP(sbcd, 8, mm, .) // FLAG_N = NFLAG_8(res); /* Undefined N behavior */ FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } @@ -9517,7 +9517,7 @@ M68KMAKE_OP(st, 8, ., d) M68KMAKE_OP(st, 8, ., .) { - m68ki_write_8(M68KMAKE_GET_EA_AY_8, 0xff); + m68ki_write_8(m68k, M68KMAKE_GET_EA_AY_8, 0xff); } @@ -9529,7 +9529,7 @@ M68KMAKE_OP(sf, 8, ., d) M68KMAKE_OP(sf, 8, ., .) { - m68ki_write_8(M68KMAKE_GET_EA_AY_8, 0); + m68ki_write_8(m68k, M68KMAKE_GET_EA_AY_8, 0); } @@ -9538,7 +9538,7 @@ M68KMAKE_OP(scc, 8, ., d) if(M68KMAKE_CC) { DY |= 0xff; - USE_CYCLES(CYC_SCC_R_TRUE); + USE_CYCLES(m68k, CYC_SCC_R_TRUE); return; } DY &= 0xffffff00; @@ -9547,7 +9547,7 @@ M68KMAKE_OP(scc, 8, ., d) M68KMAKE_OP(scc, 8, ., .) { - m68ki_write_8(M68KMAKE_GET_EA_AY_8, M68KMAKE_CC ? 0xff : 0); + m68ki_write_8(m68k, M68KMAKE_GET_EA_AY_8, M68KMAKE_CC ? 0xff : 0); } @@ -9555,14 +9555,14 @@ M68KMAKE_OP(stop, 0, ., .) { if(FLAG_S) { - uint new_sr = OPER_I_16(); + uint new_sr = OPER_I_16(m68k); m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ CPU_STOPPED |= STOP_LEVEL_STOP; - m68ki_set_sr(new_sr); - m68ki_remaining_cycles = 0; + m68ki_set_sr(m68k, new_sr); + m68k->remaining_cycles = 0; return; } - m68ki_exception_privilege_violation(); + m68ki_exception_privilege_violation(m68k); } @@ -9698,7 +9698,7 @@ M68KMAKE_OP(sub, 8, re, .) { uint ea = M68KMAKE_GET_EA_AY_8; uint src = MASK_OUT_ABOVE_8(DX); - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -9706,7 +9706,7 @@ M68KMAKE_OP(sub, 8, re, .) FLAG_X = FLAG_C = CFLAG_8(res); FLAG_V = VFLAG_SUB_8(src, dst, res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } @@ -9714,7 +9714,7 @@ M68KMAKE_OP(sub, 16, re, .) { uint ea = M68KMAKE_GET_EA_AY_16; uint src = MASK_OUT_ABOVE_16(DX); - uint dst = m68ki_read_16(ea); + uint dst = m68ki_read_16(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_16(res); @@ -9722,7 +9722,7 @@ M68KMAKE_OP(sub, 16, re, .) FLAG_X = FLAG_C = CFLAG_16(res); FLAG_V = VFLAG_SUB_16(src, dst, res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } @@ -9730,7 +9730,7 @@ M68KMAKE_OP(sub, 32, re, .) { uint ea = M68KMAKE_GET_EA_AY_32; uint src = DX; - uint dst = m68ki_read_32(ea); + uint dst = m68ki_read_32(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_32(res); @@ -9738,7 +9738,7 @@ M68KMAKE_OP(sub, 32, re, .) FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); FLAG_V = VFLAG_SUB_32(src, dst, res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -9795,7 +9795,7 @@ M68KMAKE_OP(suba, 32, ., .) M68KMAKE_OP(subi, 8, ., d) { uint* r_dst = &DY; - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint dst = MASK_OUT_ABOVE_8(*r_dst); uint res = dst - src; @@ -9810,9 +9810,9 @@ M68KMAKE_OP(subi, 8, ., d) M68KMAKE_OP(subi, 8, ., .) { - uint src = OPER_I_8(); + uint src = OPER_I_8(m68k); uint ea = M68KMAKE_GET_EA_AY_8; - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -9820,14 +9820,14 @@ M68KMAKE_OP(subi, 8, ., .) FLAG_X = FLAG_C = CFLAG_8(res); FLAG_V = VFLAG_SUB_8(src, dst, res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } M68KMAKE_OP(subi, 16, ., d) { uint* r_dst = &DY; - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint dst = MASK_OUT_ABOVE_16(*r_dst); uint res = dst - src; @@ -9842,9 +9842,9 @@ M68KMAKE_OP(subi, 16, ., d) M68KMAKE_OP(subi, 16, ., .) { - uint src = OPER_I_16(); + uint src = OPER_I_16(m68k); uint ea = M68KMAKE_GET_EA_AY_16; - uint dst = m68ki_read_16(ea); + uint dst = m68ki_read_16(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_16(res); @@ -9852,14 +9852,14 @@ M68KMAKE_OP(subi, 16, ., .) FLAG_X = FLAG_C = CFLAG_16(res); FLAG_V = VFLAG_SUB_16(src, dst, res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } M68KMAKE_OP(subi, 32, ., d) { uint* r_dst = &DY; - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint dst = *r_dst; uint res = dst - src; @@ -9874,9 +9874,9 @@ M68KMAKE_OP(subi, 32, ., d) M68KMAKE_OP(subi, 32, ., .) { - uint src = OPER_I_32(); + uint src = OPER_I_32(m68k); uint ea = M68KMAKE_GET_EA_AY_32; - uint dst = m68ki_read_32(ea); + uint dst = m68ki_read_32(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_32(res); @@ -9884,7 +9884,7 @@ M68KMAKE_OP(subi, 32, ., .) FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); FLAG_V = VFLAG_SUB_32(src, dst, res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -9908,7 +9908,7 @@ M68KMAKE_OP(subq, 8, ., .) { uint src = (((REG_IR >> 9) - 1) & 7) + 1; uint ea = M68KMAKE_GET_EA_AY_8; - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_8(res); @@ -9916,7 +9916,7 @@ M68KMAKE_OP(subq, 8, ., .) FLAG_X = FLAG_C = CFLAG_8(res); FLAG_V = VFLAG_SUB_8(src, dst, res); - m68ki_write_8(ea, FLAG_Z); + m68ki_write_8(m68k, ea, FLAG_Z); } @@ -9948,7 +9948,7 @@ M68KMAKE_OP(subq, 16, ., .) { uint src = (((REG_IR >> 9) - 1) & 7) + 1; uint ea = M68KMAKE_GET_EA_AY_16; - uint dst = m68ki_read_16(ea); + uint dst = m68ki_read_16(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_16(res); @@ -9956,7 +9956,7 @@ M68KMAKE_OP(subq, 16, ., .) FLAG_X = FLAG_C = CFLAG_16(res); FLAG_V = VFLAG_SUB_16(src, dst, res); - m68ki_write_16(ea, FLAG_Z); + m68ki_write_16(m68k, ea, FLAG_Z); } @@ -9988,7 +9988,7 @@ M68KMAKE_OP(subq, 32, ., .) { uint src = (((REG_IR >> 9) - 1) & 7) + 1; uint ea = M68KMAKE_GET_EA_AY_32; - uint dst = m68ki_read_32(ea); + uint dst = m68ki_read_32(m68k, ea); uint res = dst - src; FLAG_N = NFLAG_32(res); @@ -9996,7 +9996,7 @@ M68KMAKE_OP(subq, 32, ., .) FLAG_X = FLAG_C = CFLAG_SUB_32(src, dst, res); FLAG_V = VFLAG_SUB_32(src, dst, res); - m68ki_write_32(ea, FLAG_Z); + m68ki_write_32(m68k, ea, FLAG_Z); } @@ -10056,9 +10056,9 @@ M68KMAKE_OP(subx, 32, rr, .) M68KMAKE_OP(subx, 8, mm, ax7) { - uint src = OPER_AY_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src - XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -10068,15 +10068,15 @@ M68KMAKE_OP(subx, 8, mm, ax7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(subx, 8, mm, ay7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src - XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -10086,15 +10086,15 @@ M68KMAKE_OP(subx, 8, mm, ay7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(subx, 8, mm, axy7) { - uint src = OPER_A7_PD_8(); - uint ea = EA_A7_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_A7_PD_8(m68k); + uint ea = EA_A7_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src - XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -10104,15 +10104,15 @@ M68KMAKE_OP(subx, 8, mm, axy7) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(subx, 8, mm, .) { - uint src = OPER_AY_PD_8(); - uint ea = EA_AX_PD_8(); - uint dst = m68ki_read_8(ea); + uint src = OPER_AY_PD_8(m68k); + uint ea = EA_AX_PD_8(m68k); + uint dst = m68ki_read_8(m68k, ea); uint res = dst - src - XFLAG_AS_1(); FLAG_N = NFLAG_8(res); @@ -10122,15 +10122,15 @@ M68KMAKE_OP(subx, 8, mm, .) res = MASK_OUT_ABOVE_8(res); FLAG_Z |= res; - m68ki_write_8(ea, res); + m68ki_write_8(m68k, ea, res); } M68KMAKE_OP(subx, 16, mm, .) { - uint src = OPER_AY_PD_16(); - uint ea = EA_AX_PD_16(); - uint dst = m68ki_read_16(ea); + uint src = OPER_AY_PD_16(m68k); + uint ea = EA_AX_PD_16(m68k); + uint dst = m68ki_read_16(m68k, ea); uint res = dst - src - XFLAG_AS_1(); FLAG_N = NFLAG_16(res); @@ -10140,15 +10140,15 @@ M68KMAKE_OP(subx, 16, mm, .) res = MASK_OUT_ABOVE_16(res); FLAG_Z |= res; - m68ki_write_16(ea, res); + m68ki_write_16(m68k, ea, res); } M68KMAKE_OP(subx, 32, mm, .) { - uint src = OPER_AY_PD_32(); - uint ea = EA_AX_PD_32(); - uint dst = m68ki_read_32(ea); + uint src = OPER_AY_PD_32(m68k); + uint ea = EA_AX_PD_32(m68k); + uint dst = m68ki_read_32(m68k, ea); uint res = dst - src - XFLAG_AS_1(); FLAG_N = NFLAG_32(res); @@ -10158,7 +10158,7 @@ M68KMAKE_OP(subx, 32, mm, .) res = MASK_OUT_ABOVE_32(res); FLAG_Z |= res; - m68ki_write_32(ea, res); + m68ki_write_32(m68k, ea, res); } @@ -10191,7 +10191,7 @@ M68KMAKE_OP(tas, 8, ., d) M68KMAKE_OP(tas, 8, ., .) { uint ea = M68KMAKE_GET_EA_AY_8; - uint dst = m68ki_read_8(ea); + uint dst = m68ki_read_8(m68k, ea); uint allow_writeback; FLAG_Z = dst; @@ -10205,14 +10205,14 @@ M68KMAKE_OP(tas, 8, ., .) will be needed. */ allow_writeback = m68ki_tas_callback(); - if (allow_writeback==1) m68ki_write_8(ea, dst | 0x80); + if (allow_writeback==1) m68ki_write_8(m68k, ea, dst | 0x80); } M68KMAKE_OP(trap, 0, ., .) { /* Trap#n stacks exception frame type 0 */ - m68ki_exception_trapN(EXCEPTION_TRAP_BASE + (REG_IR & 0xf)); /* HJB 990403 */ + m68ki_exception_trapN(m68k, EXCEPTION_TRAP_BASE + (REG_IR & 0xf)); /* HJB 990403 */ } @@ -10220,10 +10220,10 @@ M68KMAKE_OP(trapt, 0, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10231,10 +10231,10 @@ M68KMAKE_OP(trapt, 16, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10242,10 +10242,10 @@ M68KMAKE_OP(trapt, 32, ., .) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10255,7 +10255,7 @@ M68KMAKE_OP(trapf, 0, ., .) { return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10266,7 +10266,7 @@ M68KMAKE_OP(trapf, 16, ., .) REG_PC += 2; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10277,7 +10277,7 @@ M68KMAKE_OP(trapf, 32, ., .) REG_PC += 4; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10286,10 +10286,10 @@ M68KMAKE_OP(trapcc, 0, ., .) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { if(M68KMAKE_CC) - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10299,13 +10299,13 @@ M68KMAKE_OP(trapcc, 16, ., .) { if(M68KMAKE_CC) { - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ return; } REG_PC += 2; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10315,13 +10315,13 @@ M68KMAKE_OP(trapcc, 32, ., .) { if(M68KMAKE_CC) { - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ return; } REG_PC += 4; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10331,7 +10331,7 @@ M68KMAKE_OP(trapv, 0, ., .) { return; } - m68ki_exception_trap(EXCEPTION_TRAPV); /* HJB 990403 */ + m68ki_exception_trap(m68k, EXCEPTION_TRAPV); /* HJB 990403 */ } @@ -10361,7 +10361,7 @@ M68KMAKE_OP(tst, 8, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_PCDI_8(); + uint res = OPER_PCDI_8(m68k); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -10369,7 +10369,7 @@ M68KMAKE_OP(tst, 8, ., pcdi) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10377,7 +10377,7 @@ M68KMAKE_OP(tst, 8, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_PCIX_8(); + uint res = OPER_PCIX_8(m68k); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -10385,7 +10385,7 @@ M68KMAKE_OP(tst, 8, ., pcix) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10393,7 +10393,7 @@ M68KMAKE_OP(tst, 8, ., i) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_I_8(); + uint res = OPER_I_8(m68k); FLAG_N = NFLAG_8(res); FLAG_Z = res; @@ -10401,7 +10401,7 @@ M68KMAKE_OP(tst, 8, ., i) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10428,7 +10428,7 @@ M68KMAKE_OP(tst, 16, ., a) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10447,7 +10447,7 @@ M68KMAKE_OP(tst, 16, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_PCDI_16(); + uint res = OPER_PCDI_16(m68k); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -10455,7 +10455,7 @@ M68KMAKE_OP(tst, 16, ., pcdi) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10463,7 +10463,7 @@ M68KMAKE_OP(tst, 16, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_PCIX_16(); + uint res = OPER_PCIX_16(m68k); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -10471,7 +10471,7 @@ M68KMAKE_OP(tst, 16, ., pcix) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10479,7 +10479,7 @@ M68KMAKE_OP(tst, 16, ., i) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_I_16(); + uint res = OPER_I_16(m68k); FLAG_N = NFLAG_16(res); FLAG_Z = res; @@ -10487,7 +10487,7 @@ M68KMAKE_OP(tst, 16, ., i) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10514,7 +10514,7 @@ M68KMAKE_OP(tst, 32, ., a) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10533,7 +10533,7 @@ M68KMAKE_OP(tst, 32, ., pcdi) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_PCDI_32(); + uint res = OPER_PCDI_32(m68k); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -10541,7 +10541,7 @@ M68KMAKE_OP(tst, 32, ., pcdi) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10549,7 +10549,7 @@ M68KMAKE_OP(tst, 32, ., pcix) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_PCIX_32(); + uint res = OPER_PCIX_32(m68k); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -10557,7 +10557,7 @@ M68KMAKE_OP(tst, 32, ., pcix) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10565,7 +10565,7 @@ M68KMAKE_OP(tst, 32, ., i) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint res = OPER_I_32(); + uint res = OPER_I_32(m68k); FLAG_N = NFLAG_32(res); FLAG_Z = res; @@ -10573,13 +10573,13 @@ M68KMAKE_OP(tst, 32, ., i) FLAG_C = CFLAG_CLEAR; return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } M68KMAKE_OP(unlk, 32, ., a7) { - REG_A[7] = m68ki_read_32(REG_A[7]); + REG_A[7] = m68ki_read_32(m68k, REG_A[7]); } @@ -10588,7 +10588,7 @@ M68KMAKE_OP(unlk, 32, ., .) uint* r_dst = &AY; REG_A[7] = *r_dst; - *r_dst = m68ki_pull_32(); + *r_dst = m68ki_pull_32(m68k); } @@ -10600,10 +10600,10 @@ M68KMAKE_OP(unpk, 16, rr, .) uint src = DY; uint* r_dst = &DX; - *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16()) & 0xffff); + *r_dst = MASK_OUT_BELOW_16(*r_dst) | (((((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(m68k)) & 0xffff); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10612,17 +10612,17 @@ M68KMAKE_OP(unpk, 16, mm, ax7) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: AX and AY are reversed in Motorola's docs */ - uint src = OPER_AY_PD_8(); + uint src = OPER_AY_PD_8(m68k); uint ea_dst; - src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); - ea_dst = EA_A7_PD_8(); - m68ki_write_8(ea_dst, (src >> 8) & 0xff); - ea_dst = EA_A7_PD_8(); - m68ki_write_8(ea_dst, src & 0xff); + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(m68k); + ea_dst = EA_A7_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, (src >> 8) & 0xff); + ea_dst = EA_A7_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, src & 0xff); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10631,17 +10631,17 @@ M68KMAKE_OP(unpk, 16, mm, ay7) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: AX and AY are reversed in Motorola's docs */ - uint src = OPER_A7_PD_8(); + uint src = OPER_A7_PD_8(m68k); uint ea_dst; - src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); - ea_dst = EA_AX_PD_8(); - m68ki_write_8(ea_dst, (src >> 8) & 0xff); - ea_dst = EA_AX_PD_8(); - m68ki_write_8(ea_dst, src & 0xff); + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(m68k); + ea_dst = EA_AX_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, (src >> 8) & 0xff); + ea_dst = EA_AX_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, src & 0xff); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10649,17 +10649,17 @@ M68KMAKE_OP(unpk, 16, mm, axy7) { if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { - uint src = OPER_A7_PD_8(); + uint src = OPER_A7_PD_8(m68k); uint ea_dst; - src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); - ea_dst = EA_A7_PD_8(); - m68ki_write_8(ea_dst, (src >> 8) & 0xff); - ea_dst = EA_A7_PD_8(); - m68ki_write_8(ea_dst, src & 0xff); + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(m68k); + ea_dst = EA_A7_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, (src >> 8) & 0xff); + ea_dst = EA_A7_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, src & 0xff); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } @@ -10668,17 +10668,17 @@ M68KMAKE_OP(unpk, 16, mm, .) if(CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Note: AX and AY are reversed in Motorola's docs */ - uint src = OPER_AY_PD_8(); + uint src = OPER_AY_PD_8(m68k); uint ea_dst; - src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(); - ea_dst = EA_AX_PD_8(); - m68ki_write_8(ea_dst, (src >> 8) & 0xff); - ea_dst = EA_AX_PD_8(); - m68ki_write_8(ea_dst, src & 0xff); + src = (((src << 4) & 0x0f00) | (src & 0x000f)) + OPER_I_16(m68k); + ea_dst = EA_AX_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, (src >> 8) & 0xff); + ea_dst = EA_AX_PD_8(m68k); + m68ki_write_8(m68k, ea_dst, src & 0xff); return; } - m68ki_exception_illegal(); + m68ki_exception_illegal(m68k); } diff --git a/src/emu/cpu/m68000/m68kcpu.c b/src/emu/cpu/m68000/m68kcpu.c index 5da86fce774..e86b182cbfb 100644 --- a/src/emu/cpu/m68000/m68kcpu.c +++ b/src/emu/cpu/m68000/m68kcpu.c @@ -32,22 +32,17 @@ static const char copyright_notice[] = /* ================================ INCLUDES ============================== */ /* ======================================================================== */ -extern void m68040_fpu_op0(void); -extern void m68040_fpu_op1(void); - -#include "m68kops.h" #include "m68kcpu.h" +#include "m68kops.h" #include "m68kfpu.c" +extern void m68040_fpu_op0(m68ki_cpu_core *m68k); +extern void m68040_fpu_op1(m68ki_cpu_core *m68k); + /* ======================================================================== */ /* ================================= DATA ================================= */ /* ======================================================================== */ -int m68ki_initial_cycles; -int m68ki_remaining_cycles = 0; /* Number of clocks remaining */ -uint m68ki_tracing = 0; -uint m68ki_address_space; - #ifdef M68K_LOG_ENABLE const char *const m68ki_cpu_names[] = { @@ -71,17 +66,6 @@ const char *const m68ki_cpu_names[] = }; #endif /* M68K_LOG_ENABLE */ -/* The CPU core */ -m68ki_cpu_core m68ki_cpu = {0}; - -#if M68K_EMULATE_ADDRESS_ERROR -jmp_buf m68ki_aerr_trap; -#endif /* M68K_EMULATE_ADDRESS_ERROR */ - -uint m68ki_aerr_address; -uint m68ki_aerr_write_mode; -uint m68ki_aerr_fc; - /* Used by shift & rotate instructions */ const uint8 m68ki_shift_8_table[65] = { @@ -450,8 +434,9 @@ const uint8 m68ki_ea_idx_cycle_table[64] = /* Interrupt acknowledge */ static int default_int_ack_callback_data; -static int default_int_ack_callback(int int_level) +static int default_int_ack_callback(void *param, int int_level) { + m68ki_cpu_core *m68k = param; default_int_ack_callback_data = int_level; CPU_INT_LEVEL = 0; return M68K_INT_ACK_AUTOVECTOR; @@ -507,7 +492,6 @@ static void default_instr_hook_callback(unsigned int pc) #if M68K_EMULATE_ADDRESS_ERROR #include <setjmp.h> - jmp_buf m68ki_aerr_trap; #endif /* M68K_EMULATE_ADDRESS_ERROR */ @@ -516,54 +500,52 @@ static void default_instr_hook_callback(unsigned int pc) /* ======================================================================== */ /* Access the internals of the CPU */ -unsigned int m68k_get_reg(void* context, m68k_register_t regnum) +unsigned int m68k_get_reg(m68ki_cpu_core *m68k, m68k_register_t regnum) { - m68ki_cpu_core* cpu = context != NULL ?(m68ki_cpu_core*)context : &m68ki_cpu; - switch(regnum) { - case M68K_REG_D0: return cpu->dar[0]; - case M68K_REG_D1: return cpu->dar[1]; - case M68K_REG_D2: return cpu->dar[2]; - case M68K_REG_D3: return cpu->dar[3]; - case M68K_REG_D4: return cpu->dar[4]; - case M68K_REG_D5: return cpu->dar[5]; - case M68K_REG_D6: return cpu->dar[6]; - case M68K_REG_D7: return cpu->dar[7]; - case M68K_REG_A0: return cpu->dar[8]; - case M68K_REG_A1: return cpu->dar[9]; - case M68K_REG_A2: return cpu->dar[10]; - case M68K_REG_A3: return cpu->dar[11]; - case M68K_REG_A4: return cpu->dar[12]; - case M68K_REG_A5: return cpu->dar[13]; - case M68K_REG_A6: return cpu->dar[14]; - case M68K_REG_A7: return cpu->dar[15]; - case M68K_REG_PC: return MASK_OUT_ABOVE_32(cpu->pc); - case M68K_REG_SR: return cpu->t1_flag | - cpu->t0_flag | - (cpu->s_flag << 11) | - (cpu->m_flag << 11) | - cpu->int_mask | - ((cpu->x_flag & XFLAG_SET) >> 4) | - ((cpu->n_flag & NFLAG_SET) >> 4) | - ((!cpu->not_z_flag) << 2) | - ((cpu->v_flag & VFLAG_SET) >> 6) | - ((cpu->c_flag & CFLAG_SET) >> 8); - case M68K_REG_SP: return cpu->dar[15]; - case M68K_REG_USP: return cpu->s_flag ? cpu->sp[0] : cpu->dar[15]; - case M68K_REG_ISP: return cpu->s_flag && !cpu->m_flag ? cpu->dar[15] : cpu->sp[4]; - case M68K_REG_MSP: return cpu->s_flag && cpu->m_flag ? cpu->dar[15] : cpu->sp[6]; - case M68K_REG_SFC: return cpu->sfc; - case M68K_REG_DFC: return cpu->dfc; - case M68K_REG_VBR: return cpu->vbr; - case M68K_REG_CACR: return cpu->cacr; - case M68K_REG_CAAR: return cpu->caar; - case M68K_REG_PREF_ADDR: return cpu->pref_addr; - case M68K_REG_PREF_DATA: return cpu->pref_data; - case M68K_REG_PPC: return MASK_OUT_ABOVE_32(cpu->ppc); - case M68K_REG_IR: return cpu->ir; + case M68K_REG_D0: return m68k->dar[0]; + case M68K_REG_D1: return m68k->dar[1]; + case M68K_REG_D2: return m68k->dar[2]; + case M68K_REG_D3: return m68k->dar[3]; + case M68K_REG_D4: return m68k->dar[4]; + case M68K_REG_D5: return m68k->dar[5]; + case M68K_REG_D6: return m68k->dar[6]; + case M68K_REG_D7: return m68k->dar[7]; + case M68K_REG_A0: return m68k->dar[8]; + case M68K_REG_A1: return m68k->dar[9]; + case M68K_REG_A2: return m68k->dar[10]; + case M68K_REG_A3: return m68k->dar[11]; + case M68K_REG_A4: return m68k->dar[12]; + case M68K_REG_A5: return m68k->dar[13]; + case M68K_REG_A6: return m68k->dar[14]; + case M68K_REG_A7: return m68k->dar[15]; + case M68K_REG_PC: return MASK_OUT_ABOVE_32(m68k->pc); + case M68K_REG_SR: return m68k->t1_flag | + m68k->t0_flag | + (m68k->s_flag << 11) | + (m68k->m_flag << 11) | + m68k->int_mask | + ((m68k->x_flag & XFLAG_SET) >> 4) | + ((m68k->n_flag & NFLAG_SET) >> 4) | + ((!m68k->not_z_flag) << 2) | + ((m68k->v_flag & VFLAG_SET) >> 6) | + ((m68k->c_flag & CFLAG_SET) >> 8); + case M68K_REG_SP: return m68k->dar[15]; + case M68K_REG_USP: return m68k->s_flag ? m68k->sp[0] : m68k->dar[15]; + case M68K_REG_ISP: return m68k->s_flag && !m68k->m_flag ? m68k->dar[15] : m68k->sp[4]; + case M68K_REG_MSP: return m68k->s_flag && m68k->m_flag ? m68k->dar[15] : m68k->sp[6]; + case M68K_REG_SFC: return m68k->sfc; + case M68K_REG_DFC: return m68k->dfc; + case M68K_REG_VBR: return m68k->vbr; + case M68K_REG_CACR: return m68k->cacr; + case M68K_REG_CAAR: return m68k->caar; + case M68K_REG_PREF_ADDR: return m68k->pref_addr; + case M68K_REG_PREF_DATA: return m68k->pref_data; + case M68K_REG_PPC: return MASK_OUT_ABOVE_32(m68k->ppc); + case M68K_REG_IR: return m68k->ir; case M68K_REG_CPU_TYPE: - switch(cpu->cpu_type) + switch(m68k->cpu_type) { case CPU_TYPE_000: return (unsigned int)M68K_CPU_TYPE_68000; case CPU_TYPE_008: return (unsigned int)M68K_CPU_TYPE_68008; @@ -577,7 +559,7 @@ unsigned int m68k_get_reg(void* context, m68k_register_t regnum) } } -void m68k_set_reg(m68k_register_t regnum, unsigned int value) +void m68k_set_reg(m68ki_cpu_core *m68k, m68k_register_t regnum, unsigned int value) { switch(regnum) { @@ -597,8 +579,8 @@ void m68k_set_reg(m68k_register_t regnum, unsigned int value) case M68K_REG_A5: REG_A[5] = MASK_OUT_ABOVE_32(value); return; case M68K_REG_A6: REG_A[6] = MASK_OUT_ABOVE_32(value); return; case M68K_REG_A7: REG_A[7] = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_PC: m68ki_jump(MASK_OUT_ABOVE_32(value)); return; - case M68K_REG_SR: m68ki_set_sr(value); return; + case M68K_REG_PC: m68ki_jump(m68k, MASK_OUT_ABOVE_32(value)); return; + case M68K_REG_SR: m68ki_set_sr(m68k, value); return; case M68K_REG_SP: REG_SP = MASK_OUT_ABOVE_32(value); return; case M68K_REG_USP: if(FLAG_S) REG_USP = MASK_OUT_ABOVE_32(value); @@ -623,60 +605,61 @@ void m68k_set_reg(m68k_register_t regnum, unsigned int value) case M68K_REG_PPC: REG_PPC = MASK_OUT_ABOVE_32(value); return; case M68K_REG_IR: REG_IR = MASK_OUT_ABOVE_16(value); return; case M68K_REG_PREF_ADDR: CPU_PREF_ADDR = MASK_OUT_ABOVE_32(value); return; - case M68K_REG_CPU_TYPE: m68k_set_cpu_type(value); return; + case M68K_REG_CPU_TYPE: m68k_set_cpu_type(m68k, value); return; default: return; } } /* Set the callbacks */ -void m68k_set_int_ack_callback(int (*callback)(int int_level)) +void m68k_set_int_ack_callback(m68ki_cpu_core *m68k, void *param, int (*callback)(void *param, int int_level)) { CALLBACK_INT_ACK = callback ? callback : default_int_ack_callback; + CALLBACK_INT_PARAM = callback ? param : m68k; } -void m68k_set_bkpt_ack_callback(void (*callback)(unsigned int data)) +void m68k_set_bkpt_ack_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int data)) { CALLBACK_BKPT_ACK = callback ? callback : default_bkpt_ack_callback; } -void m68k_set_reset_instr_callback(void (*callback)(void)) +void m68k_set_reset_instr_callback(m68ki_cpu_core *m68k, void (*callback)(void)) { CALLBACK_RESET_INSTR = callback ? callback : default_reset_instr_callback; } -void m68k_set_cmpild_instr_callback(void (*callback)(unsigned int, int)) +void m68k_set_cmpild_instr_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int, int)) { CALLBACK_CMPILD_INSTR = callback ? callback : default_cmpild_instr_callback; } -void m68k_set_rte_instr_callback(void (*callback)(void)) +void m68k_set_rte_instr_callback(m68ki_cpu_core *m68k, void (*callback)(void)) { CALLBACK_RTE_INSTR = callback ? callback : default_rte_instr_callback; } -void m68k_set_tas_instr_callback(int (*callback)(void)) +void m68k_set_tas_instr_callback(m68ki_cpu_core *m68k, int (*callback)(void)) { CALLBACK_TAS_INSTR = callback ? callback : default_tas_instr_callback; } -void m68k_set_pc_changed_callback(void (*callback)(unsigned int new_pc)) +void m68k_set_pc_changed_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int new_pc)) { CALLBACK_PC_CHANGED = callback ? callback : default_pc_changed_callback; } -void m68k_set_fc_callback(void (*callback)(unsigned int new_fc)) +void m68k_set_fc_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int new_fc)) { CALLBACK_SET_FC = callback ? callback : default_set_fc_callback; } -void m68k_set_instr_hook_callback(void (*callback)(unsigned int pc)) +void m68k_set_instr_hook_callback(m68ki_cpu_core *m68k, void (*callback)(unsigned int pc)) { CALLBACK_INSTR_HOOK = callback ? callback : default_instr_hook_callback; } #include <stdio.h> /* Set the CPU type. */ -void m68k_set_cpu_type(unsigned int cpu_type) +void m68k_set_cpu_type(m68ki_cpu_core *m68k, unsigned int cpu_type) { switch(cpu_type) { @@ -781,20 +764,20 @@ void m68k_set_cpu_type(unsigned int cpu_type) /* Execute some instructions until we use up num_cycles clock cycles */ /* ASG: removed per-instruction interrupt checks */ -int m68k_execute(int num_cycles) +int m68k_execute(m68ki_cpu_core *m68k, int num_cycles) { /* Set our pool of clock cycles available */ - SET_CYCLES(num_cycles); - m68ki_initial_cycles = num_cycles; + SET_CYCLES(m68k, num_cycles); + m68k->initial_cycles = num_cycles; /* See if interrupts came in */ - m68ki_check_interrupts(); + m68ki_check_interrupts(m68k); /* Make sure we're not stopped */ if(!CPU_STOPPED) { /* Return point if we had an address error */ - m68ki_set_address_error_trap(); /* auto-disable (see m68kcpu.h) */ + m68ki_set_address_error_trap(m68k); /* auto-disable (see m68kcpu.h) */ /* Main loop. Keep going until we run out of clock cycles */ do @@ -812,47 +795,47 @@ int m68k_execute(int num_cycles) REG_PPC = REG_PC; /* Read an instruction and call its handler */ - REG_IR = m68ki_read_imm_16(); - m68ki_instruction_jump_table[REG_IR](); - USE_CYCLES(CYC_INSTRUCTION[REG_IR]); + REG_IR = m68ki_read_imm_16(m68k); + m68ki_instruction_jump_table[REG_IR](m68k); + USE_CYCLES(m68k, CYC_INSTRUCTION[REG_IR]); /* Trace m68k_exception, if necessary */ m68ki_exception_if_trace(); /* auto-disable (see m68kcpu.h) */ - } while(GET_CYCLES() > 0); + } while(GET_CYCLES(m68k) > 0); /* set previous PC to current PC for the next entry into the loop */ REG_PPC = REG_PC; } else - SET_CYCLES(0); + SET_CYCLES(m68k, 0); /* return how many clocks we used */ - return m68ki_initial_cycles - GET_CYCLES(); + return m68k->initial_cycles - GET_CYCLES(m68k); } -int m68k_cycles_run(void) +int m68k_cycles_run(m68ki_cpu_core *m68k) { - return m68ki_initial_cycles - GET_CYCLES(); + return m68k->initial_cycles - GET_CYCLES(m68k); } -int m68k_cycles_remaining(void) +int m68k_cycles_remaining(m68ki_cpu_core *m68k) { - return GET_CYCLES(); + return GET_CYCLES(m68k); } /* Change the timeslice */ -void m68k_modify_timeslice(int cycles) +void m68k_modify_timeslice(m68ki_cpu_core *m68k, int cycles) { - m68ki_initial_cycles += cycles; - ADD_CYCLES(cycles); + m68k->initial_cycles += cycles; + ADD_CYCLES(m68k, cycles); } -void m68k_end_timeslice(void) +void m68k_end_timeslice(m68ki_cpu_core *m68k) { - m68ki_initial_cycles = GET_CYCLES(); - SET_CYCLES(0); + m68k->initial_cycles = GET_CYCLES(m68k); + SET_CYCLES(m68k, 0); } @@ -860,7 +843,7 @@ void m68k_end_timeslice(void) /* KS: Modified so that IPL* bits match with mask positions in the SR * and cleaned out remenants of the interrupt controller. */ -void m68k_set_irq(unsigned int int_level) +void m68k_set_irq(m68ki_cpu_core *m68k, unsigned int int_level) { uint old_level = CPU_INT_LEVEL; CPU_INT_LEVEL = int_level << 8; @@ -868,34 +851,37 @@ void m68k_set_irq(unsigned int int_level) /* A transition from < 7 to 7 always interrupts (NMI) */ /* Note: Level 7 can also level trigger like a normal IRQ */ if(old_level != 0x0700 && CPU_INT_LEVEL == 0x0700) - m68ki_cpu.nmi_pending = TRUE; + m68k->nmi_pending = TRUE; } -void m68k_set_virq(unsigned int level, unsigned int active) +void m68k_set_virq(m68ki_cpu_core *m68k, unsigned int level, unsigned int active) { - uint state = m68ki_cpu.virq_state; + uint state = m68k->virq_state; uint blevel; if(active) state |= 1 << level; else state &= ~(1 << level); - m68ki_cpu.virq_state = state; + m68k->virq_state = state; for(blevel = 7; blevel > 0; blevel--) if(state & (1 << blevel)) break; - m68k_set_irq(blevel); + m68k_set_irq(m68k, blevel); } -unsigned int m68k_get_virq(unsigned int level) +unsigned int m68k_get_virq(m68ki_cpu_core *m68k, unsigned int level) { - return (m68ki_cpu.virq_state & (1 << level)) ? 1 : 0; + return (m68k->virq_state & (1 << level)) ? 1 : 0; } -void m68k_init(void) +m68ki_cpu_core *m68k_init(void) { static uint emulation_initialized = 0; + m68ki_cpu_core *m68k; + + m68k = auto_malloc(sizeof(m68ki_cpu_core)); /* The first call to this function initializes the opcode handler jump table */ if(!emulation_initialized) @@ -904,23 +890,25 @@ void m68k_init(void) emulation_initialized = 1; } - m68k_set_int_ack_callback(NULL); - m68k_set_bkpt_ack_callback(NULL); - m68k_set_reset_instr_callback(NULL); - m68k_set_cmpild_instr_callback(NULL); - m68k_set_rte_instr_callback(NULL); - m68k_set_tas_instr_callback(NULL); - m68k_set_pc_changed_callback(NULL); - m68k_set_fc_callback(NULL); - m68k_set_instr_hook_callback(NULL); + m68k_set_int_ack_callback(m68k, NULL, NULL); + m68k_set_bkpt_ack_callback(m68k, NULL); + m68k_set_reset_instr_callback(m68k, NULL); + m68k_set_cmpild_instr_callback(m68k, NULL); + m68k_set_rte_instr_callback(m68k, NULL); + m68k_set_tas_instr_callback(m68k, NULL); + m68k_set_pc_changed_callback(m68k, NULL); + m68k_set_fc_callback(m68k, NULL); + m68k_set_instr_hook_callback(m68k, NULL); + + return m68k; } /* Pulse the RESET line on the CPU */ -void m68k_pulse_reset(void) +void m68k_pulse_reset(m68ki_cpu_core *m68k) { /* Clear all stop levels and eat up all remaining cycles */ CPU_STOPPED = 0; - SET_CYCLES(0); + SET_CYCLES(m68k, 0); CPU_RUN_MODE = RUN_MODE_BERR_AERR_RESET; @@ -930,11 +918,11 @@ void m68k_pulse_reset(void) /* Interrupt mask to level 7 */ FLAG_INT_MASK = 0x0700; CPU_INT_LEVEL = 0; - m68ki_cpu.virq_state = 0; + m68k->virq_state = 0; /* Reset VBR */ REG_VBR = 0; /* Go to supervisor mode */ - m68ki_set_sm_flag(SFLAG_SET | MFLAG_CLEAR); + m68ki_set_sm_flag(m68k, SFLAG_SET | MFLAG_CLEAR); /* Invalidate the prefetch queue */ #if M68K_EMULATE_PREFETCH @@ -943,16 +931,16 @@ void m68k_pulse_reset(void) #endif /* M68K_EMULATE_PREFETCH */ /* Read the initial stack pointer and program counter */ - m68ki_jump(0); - REG_SP = m68ki_read_imm_32(); - REG_PC = m68ki_read_imm_32(); - m68ki_jump(REG_PC); + m68ki_jump(m68k, 0); + REG_SP = m68ki_read_imm_32(m68k); + REG_PC = m68ki_read_imm_32(m68k); + m68ki_jump(m68k, REG_PC); CPU_RUN_MODE = RUN_MODE_NORMAL; } /* Pulse the HALT line on the CPU */ -void m68k_pulse_halt(void) +void m68k_pulse_halt(m68ki_cpu_core *m68k) { CPU_STOPPED |= STOP_LEVEL_HALT; } @@ -962,18 +950,7 @@ void m68k_pulse_halt(void) /* This is to allow for multiple CPUs */ unsigned int m68k_context_size() { - return sizeof(m68ki_cpu_core); -} - -unsigned int m68k_get_context(void* dst) -{ - if(dst) *(m68ki_cpu_core*)dst = m68ki_cpu; - return sizeof(m68ki_cpu_core); -} - -void m68k_set_context(void* src) -{ - if(src) m68ki_cpu = *(m68ki_cpu_core*)src; + return sizeof(void *); } @@ -994,20 +971,22 @@ static struct { static void m68k_prepare_substate(running_machine *machine, void *param) { - m68k_substate.sr = m68ki_get_sr(); + m68ki_cpu_core *m68k = param; + m68k_substate.sr = m68ki_get_sr(m68k); m68k_substate.stopped = (CPU_STOPPED & STOP_LEVEL_STOP) != 0; m68k_substate.halted = (CPU_STOPPED & STOP_LEVEL_HALT) != 0; } static void m68k_post_load(running_machine *machine, void *param) { - m68ki_set_sr_noint_nosp(m68k_substate.sr); + m68ki_cpu_core *m68k = param; + m68ki_set_sr_noint_nosp(m68k, m68k_substate.sr); CPU_STOPPED = m68k_substate.stopped ? STOP_LEVEL_STOP : 0 | m68k_substate.halted ? STOP_LEVEL_HALT : 0; - m68ki_jump(REG_PC); + m68ki_jump(m68k, REG_PC); } -void m68k_state_register(const char *type, int index) +void m68k_state_register(m68ki_cpu_core *m68k, const char *type, int index) { /* Note, D covers A because the dar array is common, REG_A=REG_D+8 */ state_save_register_item_array(type, index, REG_D); @@ -1027,8 +1006,8 @@ void m68k_state_register(const char *type, int index) 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_DATA); - state_save_register_presave(Machine, m68k_prepare_substate, NULL); - state_save_register_postload(Machine, m68k_post_load, NULL); + state_save_register_presave(Machine, m68k_prepare_substate, m68k); + state_save_register_postload(Machine, m68k_post_load, m68k); } #endif /* M68K_COMPILE_FOR_MAME */ diff --git a/src/emu/cpu/m68000/m68kcpu.h b/src/emu/cpu/m68000/m68kcpu.h index 0679be6715e..bcbb31ad0cc 100644 --- a/src/emu/cpu/m68000/m68kcpu.h +++ b/src/emu/cpu/m68000/m68kcpu.h @@ -26,6 +26,8 @@ #ifndef __M68KCPU_H__ #define __M68KCPU_H__ +typedef struct _m68ki_cpu_core m68ki_cpu_core; + #include "m68k.h" #include <limits.h> @@ -297,72 +299,73 @@ /* ------------------------------ CPU Access ------------------------------ */ /* Access the CPU registers */ -#define CPU_TYPE m68ki_cpu.cpu_type - -#define REG_DA m68ki_cpu.dar /* easy access to data and address regs */ -#define REG_D m68ki_cpu.dar -#define REG_A (m68ki_cpu.dar+8) -#define REG_PPC m68ki_cpu.ppc -#define REG_PC m68ki_cpu.pc -#define REG_SP_BASE m68ki_cpu.sp -#define REG_USP m68ki_cpu.sp[0] -#define REG_ISP m68ki_cpu.sp[4] -#define REG_MSP m68ki_cpu.sp[6] -#define REG_SP m68ki_cpu.dar[15] -#define REG_VBR m68ki_cpu.vbr -#define REG_SFC m68ki_cpu.sfc -#define REG_DFC m68ki_cpu.dfc -#define REG_CACR m68ki_cpu.cacr -#define REG_CAAR m68ki_cpu.caar -#define REG_IR m68ki_cpu.ir - -#define REG_FP m68ki_cpu.fpr -#define REG_FPCR m68ki_cpu.fpcr -#define REG_FPSR m68ki_cpu.fpsr -#define REG_FPIAR m68ki_cpu.fpiar - -#define FLAG_T1 m68ki_cpu.t1_flag -#define FLAG_T0 m68ki_cpu.t0_flag -#define FLAG_S m68ki_cpu.s_flag -#define FLAG_M m68ki_cpu.m_flag -#define FLAG_X m68ki_cpu.x_flag -#define FLAG_N m68ki_cpu.n_flag -#define FLAG_Z m68ki_cpu.not_z_flag -#define FLAG_V m68ki_cpu.v_flag -#define FLAG_C m68ki_cpu.c_flag -#define FLAG_INT_MASK m68ki_cpu.int_mask - -#define CPU_INT_LEVEL m68ki_cpu.int_level /* ASG: changed from CPU_INTS_PENDING */ -#define CPU_STOPPED m68ki_cpu.stopped -#define CPU_PREF_ADDR m68ki_cpu.pref_addr -#define CPU_PREF_DATA m68ki_cpu.pref_data -#define CPU_ADDRESS_MASK m68ki_cpu.address_mask -#define CPU_SR_MASK m68ki_cpu.sr_mask -#define CPU_INSTR_MODE m68ki_cpu.instr_mode -#define CPU_RUN_MODE m68ki_cpu.run_mode - -#define CYC_INSTRUCTION m68ki_cpu.cyc_instruction -#define CYC_EXCEPTION m68ki_cpu.cyc_exception -#define CYC_BCC_NOTAKE_B m68ki_cpu.cyc_bcc_notake_b -#define CYC_BCC_NOTAKE_W m68ki_cpu.cyc_bcc_notake_w -#define CYC_DBCC_F_NOEXP m68ki_cpu.cyc_dbcc_f_noexp -#define CYC_DBCC_F_EXP m68ki_cpu.cyc_dbcc_f_exp -#define CYC_SCC_R_TRUE m68ki_cpu.cyc_scc_r_true -#define CYC_MOVEM_W m68ki_cpu.cyc_movem_w -#define CYC_MOVEM_L m68ki_cpu.cyc_movem_l -#define CYC_SHIFT m68ki_cpu.cyc_shift -#define CYC_RESET m68ki_cpu.cyc_reset - - -#define CALLBACK_INT_ACK m68ki_cpu.int_ack_callback -#define CALLBACK_BKPT_ACK m68ki_cpu.bkpt_ack_callback -#define CALLBACK_RESET_INSTR m68ki_cpu.reset_instr_callback -#define CALLBACK_CMPILD_INSTR m68ki_cpu.cmpild_instr_callback -#define CALLBACK_RTE_INSTR m68ki_cpu.rte_instr_callback -#define CALLBACK_TAS_INSTR m68ki_cpu.tas_instr_callback -#define CALLBACK_PC_CHANGED m68ki_cpu.pc_changed_callback -#define CALLBACK_SET_FC m68ki_cpu.set_fc_callback -#define CALLBACK_INSTR_HOOK m68ki_cpu.instr_hook_callback +#define CPU_TYPE m68k->cpu_type + +#define REG_DA m68k->dar /* easy access to data and address regs */ +#define REG_D m68k->dar +#define REG_A (m68k->dar+8) +#define REG_PPC m68k->ppc +#define REG_PC m68k->pc +#define REG_SP_BASE m68k->sp +#define REG_USP m68k->sp[0] +#define REG_ISP m68k->sp[4] +#define REG_MSP m68k->sp[6] +#define REG_SP m68k->dar[15] +#define REG_VBR m68k->vbr +#define REG_SFC m68k->sfc +#define REG_DFC m68k->dfc +#define REG_CACR m68k->cacr +#define REG_CAAR m68k->caar +#define REG_IR m68k->ir + +#define REG_FP m68k->fpr +#define REG_FPCR m68k->fpcr +#define REG_FPSR m68k->fpsr +#define REG_FPIAR m68k->fpiar + +#define FLAG_T1 m68k->t1_flag +#define FLAG_T0 m68k->t0_flag +#define FLAG_S m68k->s_flag +#define FLAG_M m68k->m_flag +#define FLAG_X m68k->x_flag +#define FLAG_N m68k->n_flag +#define FLAG_Z m68k->not_z_flag +#define FLAG_V m68k->v_flag +#define FLAG_C m68k->c_flag +#define FLAG_INT_MASK m68k->int_mask + +#define CPU_INT_LEVEL m68k->int_level /* ASG: changed from CPU_INTS_PENDING */ +#define CPU_STOPPED m68k->stopped +#define CPU_PREF_ADDR m68k->pref_addr +#define CPU_PREF_DATA m68k->pref_data +#define CPU_ADDRESS_MASK m68k->address_mask +#define CPU_SR_MASK m68k->sr_mask +#define CPU_INSTR_MODE m68k->instr_mode +#define CPU_RUN_MODE m68k->run_mode + +#define CYC_INSTRUCTION m68k->cyc_instruction +#define CYC_EXCEPTION m68k->cyc_exception +#define CYC_BCC_NOTAKE_B m68k->cyc_bcc_notake_b +#define CYC_BCC_NOTAKE_W m68k->cyc_bcc_notake_w +#define CYC_DBCC_F_NOEXP m68k->cyc_dbcc_f_noexp +#define CYC_DBCC_F_EXP m68k->cyc_dbcc_f_exp +#define CYC_SCC_R_TRUE m68k->cyc_scc_r_true +#define CYC_MOVEM_W m68k->cyc_movem_w +#define CYC_MOVEM_L m68k->cyc_movem_l +#define CYC_SHIFT m68k->cyc_shift +#define CYC_RESET m68k->cyc_reset + + +#define CALLBACK_INT_ACK m68k->int_ack_callback +#define CALLBACK_INT_PARAM m68k->int_ack_param +#define CALLBACK_BKPT_ACK m68k->bkpt_ack_callback +#define CALLBACK_RESET_INSTR m68k->reset_instr_callback +#define CALLBACK_CMPILD_INSTR m68k->cmpild_instr_callback +#define CALLBACK_RTE_INSTR m68k->rte_instr_callback +#define CALLBACK_TAS_INSTR m68k->tas_instr_callback +#define CALLBACK_PC_CHANGED m68k->pc_changed_callback +#define CALLBACK_SET_FC m68k->set_fc_callback +#define CALLBACK_INSTR_HOOK m68k->instr_hook_callback @@ -419,25 +422,25 @@ #if !M68K_SEPARATE_READS -#define m68k_read_immediate_16(A) m68ki_read_program_16(A) -#define m68k_read_immediate_32(A) m68ki_read_program_32(A) +#define m68k_read_immediate_16(M, A) m68ki_read_program_16(M, A) +#define m68k_read_immediate_32(M, A) m68ki_read_program_32(M, A) -#define m68k_read_pcrelative_8(A) m68ki_read_program_8(A) -#define m68k_read_pcrelative_16(A) m68ki_read_program_16(A) -#define m68k_read_pcrelative_32(A) m68ki_read_program_32(A) +#define m68k_read_pcrelative_8(M, A) m68ki_read_program_8(M, A) +#define m68k_read_pcrelative_16(M, A) m68ki_read_program_16(M, A) +#define m68k_read_pcrelative_32(M, A) m68ki_read_program_32(M, A) #endif /* M68K_SEPARATE_READS */ /* Enable or disable callback functions */ #if M68K_EMULATE_INT_ACK #if M68K_EMULATE_INT_ACK == OPT_SPECIFY_HANDLER - #define m68ki_int_ack(A) M68K_INT_ACK_CALLBACK(A) + #define m68ki_int_ack(M, A) M68K_INT_ACK_CALLBACK(M, A) #else - #define m68ki_int_ack(A) CALLBACK_INT_ACK(A) + #define m68ki_int_ack(M, A) CALLBACK_INT_ACK((M)->int_ack_param, A) #endif #else /* Default action is to used autovector mode, which is most common */ - #define m68ki_int_ack(A) M68K_INT_ACK_AUTOVECTOR + #define m68ki_int_ack(M, A) M68K_INT_ACK_AUTOVECTOR #endif /* M68K_EMULATE_INT_ACK */ #if M68K_EMULATE_BKPT_ACK @@ -519,14 +522,14 @@ #else #define m68ki_set_fc(A) CALLBACK_SET_FC(A) #endif - #define m68ki_use_data_space() m68ki_address_space = FUNCTION_CODE_USER_DATA - #define m68ki_use_program_space() m68ki_address_space = FUNCTION_CODE_USER_PROGRAM - #define m68ki_get_address_space() m68ki_address_space + #define m68ki_use_data_space(M) (M)->address_space = FUNCTION_CODE_USER_DATA + #define m68ki_use_program_space(M) (M)->address_space = FUNCTION_CODE_USER_PROGRAM + #define m68ki_get_address_space(M) (M)->address_space #else #define m68ki_set_fc(A) - #define m68ki_use_data_space() - #define m68ki_use_program_space() - #define m68ki_get_address_space() FUNCTION_CODE_USER_DATA + #define m68ki_use_data_space(M) + #define m68ki_use_program_space(M) + #define m68ki_get_address_space(M) FUNCTION_CODE_USER_DATA #endif /* M68K_EMULATE_FC */ @@ -539,7 +542,7 @@ /* Clear all tracing */ #define m68ki_clear_trace() m68ki_tracing = 0 /* Cause a trace exception if we are tracing */ - #define m68ki_exception_if_trace() if(m68ki_tracing) m68ki_exception_trace() + #define m68ki_exception_if_trace() if(m68ki_tracing) m68ki_exception_trace(m68k) #else #define m68ki_trace_t1() #define m68ki_trace_t0() @@ -552,37 +555,36 @@ /* Address error */ #if M68K_EMULATE_ADDRESS_ERROR #include <setjmp.h> - extern jmp_buf m68ki_aerr_trap; - #define m68ki_set_address_error_trap() \ - if(setjmp(m68ki_aerr_trap) != 0) \ + #define m68ki_set_address_error_trap(m68k) \ + if(setjmp(m68k->aerr_trap) != 0) \ { \ - m68ki_exception_address_error(); \ + m68ki_exception_address_error(m68k); \ if(CPU_STOPPED) \ { \ - SET_CYCLES(0); \ - return m68ki_initial_cycles; \ + SET_CYCLES(m68k, 0); \ + return m68k->initial_cycles; \ } \ } - #define m68ki_check_address_error(ADDR, WRITE_MODE, FC) \ + #define m68ki_check_address_error(m68k, ADDR, WRITE_MODE, FC) \ if((ADDR)&1) \ { \ - m68ki_aerr_address = ADDR; \ - m68ki_aerr_write_mode = WRITE_MODE; \ - m68ki_aerr_fc = FC; \ - longjmp(m68ki_aerr_trap, 1); \ + m68k->aerr_address = ADDR; \ + m68k->aerr_write_mode = WRITE_MODE; \ + m68k->aerr_fc = FC; \ + longjmp(m68k->aerr_trap, 1); \ } - #define m68ki_check_address_error_010_less(ADDR, WRITE_MODE, FC) \ + #define m68ki_check_address_error_010_less(m68k, ADDR, WRITE_MODE, FC) \ if (CPU_TYPE_IS_010_LESS(CPU_TYPE)) \ { \ - m68ki_check_address_error(ADDR, WRITE_MODE, FC) \ + m68ki_check_address_error(m68k, ADDR, WRITE_MODE, FC) \ } #else - #define m68ki_set_address_error_trap() - #define m68ki_check_address_error(ADDR, WRITE_MODE, FC) - #define m68ki_check_address_error_010_less(ADDR, WRITE_MODE, FC) + #define m68ki_set_address_error_trap(M) + #define m68ki_check_address_error(M, ADDR, WRITE_MODE, FC) + #define m68ki_check_address_error_010_less(M, ADDR, WRITE_MODE, FC) #endif /* M68K_ADDRESS_ERROR */ /* Logging */ @@ -620,58 +622,58 @@ /* Effective Address Calculations */ -#define EA_AY_AI_8() AY /* address register indirect */ -#define EA_AY_AI_16() EA_AY_AI_8() -#define EA_AY_AI_32() EA_AY_AI_8() -#define EA_AY_PI_8() (AY++) /* postincrement (size = byte) */ -#define EA_AY_PI_16() ((AY+=2)-2) /* postincrement (size = word) */ -#define EA_AY_PI_32() ((AY+=4)-4) /* postincrement (size = long) */ -#define EA_AY_PD_8() (--AY) /* predecrement (size = byte) */ -#define EA_AY_PD_16() (AY-=2) /* predecrement (size = word) */ -#define EA_AY_PD_32() (AY-=4) /* predecrement (size = long) */ -#define EA_AY_DI_8() (AY+MAKE_INT_16(m68ki_read_imm_16())) /* displacement */ -#define EA_AY_DI_16() EA_AY_DI_8() -#define EA_AY_DI_32() EA_AY_DI_8() -#define EA_AY_IX_8() m68ki_get_ea_ix(AY) /* indirect + index */ -#define EA_AY_IX_16() EA_AY_IX_8() -#define EA_AY_IX_32() EA_AY_IX_8() - -#define EA_AX_AI_8() AX -#define EA_AX_AI_16() EA_AX_AI_8() -#define EA_AX_AI_32() EA_AX_AI_8() -#define EA_AX_PI_8() (AX++) -#define EA_AX_PI_16() ((AX+=2)-2) -#define EA_AX_PI_32() ((AX+=4)-4) -#define EA_AX_PD_8() (--AX) -#define EA_AX_PD_16() (AX-=2) -#define EA_AX_PD_32() (AX-=4) -#define EA_AX_DI_8() (AX+MAKE_INT_16(m68ki_read_imm_16())) -#define EA_AX_DI_16() EA_AX_DI_8() -#define EA_AX_DI_32() EA_AX_DI_8() -#define EA_AX_IX_8() m68ki_get_ea_ix(AX) -#define EA_AX_IX_16() EA_AX_IX_8() -#define EA_AX_IX_32() EA_AX_IX_8() - -#define EA_A7_PI_8() ((REG_A[7]+=2)-2) -#define EA_A7_PD_8() (REG_A[7]-=2) - -#define EA_AW_8() MAKE_INT_16(m68ki_read_imm_16()) /* absolute word */ -#define EA_AW_16() EA_AW_8() -#define EA_AW_32() EA_AW_8() -#define EA_AL_8() m68ki_read_imm_32() /* absolute long */ -#define EA_AL_16() EA_AL_8() -#define EA_AL_32() EA_AL_8() -#define EA_PCDI_8() m68ki_get_ea_pcdi() /* pc indirect + displacement */ -#define EA_PCDI_16() EA_PCDI_8() -#define EA_PCDI_32() EA_PCDI_8() -#define EA_PCIX_8() m68ki_get_ea_pcix() /* pc indirect + index */ -#define EA_PCIX_16() EA_PCIX_8() -#define EA_PCIX_32() EA_PCIX_8() - - -#define OPER_I_8() m68ki_read_imm_8() -#define OPER_I_16() m68ki_read_imm_16() -#define OPER_I_32() m68ki_read_imm_32() +#define EA_AY_AI_8(m68k) AY /* address register indirect */ +#define EA_AY_AI_16(m68k) EA_AY_AI_8(m68k) +#define EA_AY_AI_32(m68k) EA_AY_AI_8(m68k) +#define EA_AY_PI_8(m68k) (AY++) /* postincrement (size = byte) */ +#define EA_AY_PI_16(m68k) ((AY+=2)-2) /* postincrement (size = word) */ +#define EA_AY_PI_32(m68k) ((AY+=4)-4) /* postincrement (size = long) */ +#define EA_AY_PD_8(m68k) (--AY) /* predecrement (size = byte) */ +#define EA_AY_PD_16(m68k) (AY-=2) /* predecrement (size = word) */ +#define EA_AY_PD_32(m68k) (AY-=4) /* predecrement (size = long) */ +#define EA_AY_DI_8(m68k) (AY+MAKE_INT_16(m68ki_read_imm_16(m68k))) /* displacement */ +#define EA_AY_DI_16(m68k) EA_AY_DI_8(m68k) +#define EA_AY_DI_32(m68k) EA_AY_DI_8(m68k) +#define EA_AY_IX_8(m68k) m68ki_get_ea_ix(m68k, AY) /* indirect + index */ +#define EA_AY_IX_16(m68k) EA_AY_IX_8(m68k) +#define EA_AY_IX_32(m68k) EA_AY_IX_8(m68k) + +#define EA_AX_AI_8(m68k) AX +#define EA_AX_AI_16(m68k) EA_AX_AI_8(m68k) +#define EA_AX_AI_32(m68k) EA_AX_AI_8(m68k) +#define EA_AX_PI_8(m68k) (AX++) +#define EA_AX_PI_16(m68k) ((AX+=2)-2) +#define EA_AX_PI_32(m68k) ((AX+=4)-4) +#define EA_AX_PD_8(m68k) (--AX) +#define EA_AX_PD_16(m68k) (AX-=2) +#define EA_AX_PD_32(m68k) (AX-=4) +#define EA_AX_DI_8(m68k) (AX+MAKE_INT_16(m68ki_read_imm_16(m68k))) +#define EA_AX_DI_16(m68k) EA_AX_DI_8(m68k) +#define EA_AX_DI_32(m68k) EA_AX_DI_8(m68k) +#define EA_AX_IX_8(m68k) m68ki_get_ea_ix(m68k, AX) +#define EA_AX_IX_16(m68k) EA_AX_IX_8(m68k) +#define EA_AX_IX_32(m68k) EA_AX_IX_8(m68k) + +#define EA_A7_PI_8(m68k) ((REG_A[7]+=2)-2) +#define EA_A7_PD_8(m68k) (REG_A[7]-=2) + +#define EA_AW_8(m68k) MAKE_INT_16(m68ki_read_imm_16(m68k)) /* absolute word */ +#define EA_AW_16(m68k) EA_AW_8(m68k) +#define EA_AW_32(m68k) EA_AW_8(m68k) +#define EA_AL_8(m68k) m68ki_read_imm_32(m68k) /* absolute long */ +#define EA_AL_16(m68k) EA_AL_8(m68k) +#define EA_AL_32(m68k) EA_AL_8(m68k) +#define EA_PCDI_8(m68k) m68ki_get_ea_pcdi(m68k) /* pc indirect + displacement */ +#define EA_PCDI_16(m68k) EA_PCDI_8(m68k) +#define EA_PCDI_32(m68k) EA_PCDI_8(m68k) +#define EA_PCIX_8(m68k) m68ki_get_ea_pcix(m68k) /* pc indirect + index */ +#define EA_PCIX_16(m68k) EA_PCIX_8(m68k) +#define EA_PCIX_32(m68k) EA_PCIX_8(m68k) + + +#define OPER_I_8(m68k) m68ki_read_imm_8(m68k) +#define OPER_I_16(m68k) m68ki_read_imm_16(m68k) +#define OPER_I_32(m68k) m68ki_read_imm_32(m68k) @@ -770,67 +772,67 @@ /* Get the condition code register */ -#define m68ki_get_ccr() ((COND_XS() >> 4) | \ - (COND_MI() >> 4) | \ - (COND_EQ() << 2) | \ - (COND_VS() >> 6) | \ - (COND_CS() >> 8)) +#define m68ki_get_ccr(m68k) ((COND_XS() >> 4) | \ + (COND_MI() >> 4) | \ + (COND_EQ() << 2) | \ + (COND_VS() >> 6) | \ + (COND_CS() >> 8)) /* Get the status register */ -#define m68ki_get_sr() ( FLAG_T1 | \ - FLAG_T0 | \ - (FLAG_S << 11) | \ - (FLAG_M << 11) | \ - FLAG_INT_MASK | \ - m68ki_get_ccr()) +#define m68ki_get_sr(m68k) ( FLAG_T1 | \ + FLAG_T0 | \ + (FLAG_S << 11) | \ + (FLAG_M << 11) | \ + FLAG_INT_MASK | \ + m68ki_get_ccr(m68k)) /* ---------------------------- Cycle Counting ---------------------------- */ -#define ADD_CYCLES(A) m68ki_remaining_cycles += (A) -#define USE_CYCLES(A) m68ki_remaining_cycles -= (A) -#define SET_CYCLES(A) m68ki_remaining_cycles = A -#define GET_CYCLES() m68ki_remaining_cycles -#define USE_ALL_CYCLES() m68ki_remaining_cycles = 0 +#define ADD_CYCLES(M, A) (M)->remaining_cycles += (A) +#define USE_CYCLES(M, A) (M)->remaining_cycles -= (A) +#define SET_CYCLES(M, A) (M)->remaining_cycles = A +#define GET_CYCLES(M) (M)->remaining_cycles +#define USE_ALL_CYCLES(M) (M)->remaining_cycles = 0 /* ----------------------------- Read / Write ----------------------------- */ /* Read from the current address space */ -#define m68ki_read_8(A) m68ki_read_8_fc (A, FLAG_S | m68ki_get_address_space()) -#define m68ki_read_16(A) m68ki_read_16_fc(A, FLAG_S | m68ki_get_address_space()) -#define m68ki_read_32(A) m68ki_read_32_fc(A, FLAG_S | m68ki_get_address_space()) +#define m68ki_read_8(M, A) m68ki_read_8_fc (M, A, FLAG_S | m68ki_get_address_space(M)) +#define m68ki_read_16(M, A) m68ki_read_16_fc(M, A, FLAG_S | m68ki_get_address_space(M)) +#define m68ki_read_32(M, A) m68ki_read_32_fc(M, A, FLAG_S | m68ki_get_address_space(M)) /* Write to the current data space */ -#define m68ki_write_8(A, V) m68ki_write_8_fc (A, FLAG_S | FUNCTION_CODE_USER_DATA, V) -#define m68ki_write_16(A, V) m68ki_write_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) -#define m68ki_write_32(A, V) m68ki_write_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_8(M, A, V) m68ki_write_8_fc (M, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_16(M, A, V) m68ki_write_16_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32(M, A, V) m68ki_write_32_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) #if M68K_SIMULATE_PD_WRITES -#define m68ki_write_32_pd(A, V) m68ki_write_32_pd_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32_pd(M, A, V) m68ki_write_32_pd_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) #else -#define m68ki_write_32_pd(A, V) m68ki_write_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA, V) +#define m68ki_write_32_pd(M, A, V) m68ki_write_32_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA, V) #endif /* map read immediate 8 to read immediate 16 */ -#define m68ki_read_imm_8() MASK_OUT_ABOVE_8(m68ki_read_imm_16()) +#define m68ki_read_imm_8(M) MASK_OUT_ABOVE_8(m68ki_read_imm_16(M)) /* Map PC-relative reads */ -#define m68ki_read_pcrel_8(A) m68k_read_pcrelative_8(A) -#define m68ki_read_pcrel_16(A) m68k_read_pcrelative_16(A) -#define m68ki_read_pcrel_32(A) m68k_read_pcrelative_32(A) +#define m68ki_read_pcrel_8(M, A) m68k_read_pcrelative_8(M, A) +#define m68ki_read_pcrel_16(M, A) m68k_read_pcrelative_16(M, A) +#define m68ki_read_pcrel_32(M, A) m68k_read_pcrelative_32(M, A) /* Read from the program space */ -#define m68ki_read_program_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) -#define m68ki_read_program_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) -#define m68ki_read_program_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_8(M, A) m68ki_read_8_fc(M, A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_16(M, A) m68ki_read_16_fc(M, A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) +#define m68ki_read_program_32(M, A) m68ki_read_32_fc(M, A, FLAG_S | FUNCTION_CODE_USER_PROGRAM) /* Read from the data space */ -#define m68ki_read_data_8(A) m68ki_read_8_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) -#define m68ki_read_data_16(A) m68ki_read_16_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) -#define m68ki_read_data_32(A) m68ki_read_32_fc(A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_8(M, A) m68ki_read_8_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_16(M, A) m68ki_read_16_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA) +#define m68ki_read_data_32(M, A) m68ki_read_32_fc(M, A, FLAG_S | FUNCTION_CODE_USER_DATA) @@ -846,7 +848,6 @@ union _fp_reg }; -typedef struct _m68ki_cpu_core m68ki_cpu_core; struct _m68ki_cpu_core { uint cpu_type; /* CPU Type: 68000, 68008, 68010, 68EC020, or 68020 */ @@ -894,6 +895,19 @@ struct _m68ki_cpu_core uint cyc_shift; uint cyc_reset; + int initial_cycles; + int remaining_cycles; /* Number of clocks remaining */ + uint tracing; + uint address_space; + +#if M68K_EMULATE_ADDRESS_ERROR + jmp_buf aerr_trap; +#endif /* M68K_EMULATE_ADDRESS_ERROR */ + + uint aerr_address; + uint aerr_write_mode; + uint aerr_fc; + /* Virtual IRQ lines state */ uint virq_state; uint nmi_pending; @@ -902,7 +916,8 @@ struct _m68ki_cpu_core const uint8* cyc_exception; /* Callbacks to host */ - int (*int_ack_callback)(int int_line); /* Interrupt Acknowledge */ + int (*int_ack_callback)(void *param, int int_line);/* Interrupt Acknowledge */ + void *int_ack_param; void (*bkpt_ack_callback)(unsigned int data); /* Breakpoint Acknowledge */ void (*reset_instr_callback)(void); /* Called when a RESET instruction is encountered */ void (*cmpild_instr_callback)(unsigned int, int); /* Called when a CMPI.L #v, Dn instruction is encountered */ @@ -915,135 +930,127 @@ struct _m68ki_cpu_core }; -extern m68ki_cpu_core m68ki_cpu; -extern sint m68ki_remaining_cycles; -extern uint m68ki_tracing; extern const uint8 m68ki_shift_8_table[]; extern const uint16 m68ki_shift_16_table[]; extern const uint m68ki_shift_32_table[]; extern const uint8 m68ki_exception_cycle_table[][256]; -extern uint m68ki_address_space; extern const uint8 m68ki_ea_idx_cycle_table[]; -extern uint m68ki_aerr_address; -extern uint m68ki_aerr_write_mode; -extern uint m68ki_aerr_fc; - /* Read data immediately after the program counter */ -INLINE uint m68ki_read_imm_16(void); -INLINE uint m68ki_read_imm_32(void); +INLINE uint m68ki_read_imm_16(m68ki_cpu_core *m68k); +INLINE uint m68ki_read_imm_32(m68ki_cpu_core *m68k); /* Read data with specific function code */ -INLINE uint m68ki_read_8_fc (uint address, uint fc); -INLINE uint m68ki_read_16_fc (uint address, uint fc); -INLINE uint m68ki_read_32_fc (uint address, uint fc); +INLINE uint m68ki_read_8_fc (m68ki_cpu_core *m68k, uint address, uint fc); +INLINE uint m68ki_read_16_fc (m68ki_cpu_core *m68k, uint address, uint fc); +INLINE uint m68ki_read_32_fc (m68ki_cpu_core *m68k, uint address, uint fc); /* Write data with specific function code */ -INLINE void m68ki_write_8_fc (uint address, uint fc, uint value); -INLINE void m68ki_write_16_fc(uint address, uint fc, uint value); -INLINE void m68ki_write_32_fc(uint address, uint fc, uint value); +INLINE void m68ki_write_8_fc (m68ki_cpu_core *m68k, uint address, uint fc, uint value); +INLINE void m68ki_write_16_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value); +INLINE void m68ki_write_32_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value); #if M68K_SIMULATE_PD_WRITES -INLINE void m68ki_write_32_pd_fc(uint address, uint fc, uint value); +INLINE void m68ki_write_32_pd_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value); #endif /* M68K_SIMULATE_PD_WRITES */ /* Indexed and PC-relative ea fetching */ -INLINE uint m68ki_get_ea_pcdi(void); -INLINE uint m68ki_get_ea_pcix(void); -INLINE uint m68ki_get_ea_ix(uint An); +INLINE uint m68ki_get_ea_pcdi(m68ki_cpu_core *m68k); +INLINE uint m68ki_get_ea_pcix(m68ki_cpu_core *m68k); +INLINE uint m68ki_get_ea_ix(m68ki_cpu_core *m68k, uint An); /* Operand fetching */ -INLINE uint OPER_AY_AI_8(void); -INLINE uint OPER_AY_AI_16(void); -INLINE uint OPER_AY_AI_32(void); -INLINE uint OPER_AY_PI_8(void); -INLINE uint OPER_AY_PI_16(void); -INLINE uint OPER_AY_PI_32(void); -INLINE uint OPER_AY_PD_8(void); -INLINE uint OPER_AY_PD_16(void); -INLINE uint OPER_AY_PD_32(void); -INLINE uint OPER_AY_DI_8(void); -INLINE uint OPER_AY_DI_16(void); -INLINE uint OPER_AY_DI_32(void); -INLINE uint OPER_AY_IX_8(void); -INLINE uint OPER_AY_IX_16(void); -INLINE uint OPER_AY_IX_32(void); - -INLINE uint OPER_AX_AI_8(void); -INLINE uint OPER_AX_AI_16(void); -INLINE uint OPER_AX_AI_32(void); -INLINE uint OPER_AX_PI_8(void); -INLINE uint OPER_AX_PI_16(void); -INLINE uint OPER_AX_PI_32(void); -INLINE uint OPER_AX_PD_8(void); -INLINE uint OPER_AX_PD_16(void); -INLINE uint OPER_AX_PD_32(void); -INLINE uint OPER_AX_DI_8(void); -INLINE uint OPER_AX_DI_16(void); -INLINE uint OPER_AX_DI_32(void); -INLINE uint OPER_AX_IX_8(void); -INLINE uint OPER_AX_IX_16(void); -INLINE uint OPER_AX_IX_32(void); - -INLINE uint OPER_A7_PI_8(void); -INLINE uint OPER_A7_PD_8(void); - -INLINE uint OPER_AW_8(void); -INLINE uint OPER_AW_16(void); -INLINE uint OPER_AW_32(void); -INLINE uint OPER_AL_8(void); -INLINE uint OPER_AL_16(void); -INLINE uint OPER_AL_32(void); -INLINE uint OPER_PCDI_8(void); -INLINE uint OPER_PCDI_16(void); -INLINE uint OPER_PCDI_32(void); -INLINE uint OPER_PCIX_8(void); -INLINE uint OPER_PCIX_16(void); -INLINE uint OPER_PCIX_32(void); +INLINE uint OPER_AY_AI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_AI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_AI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_PI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_PI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_PI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_PD_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_PD_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_PD_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_DI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_DI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_DI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_IX_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_IX_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AY_IX_32(m68ki_cpu_core *m68k); + +INLINE uint OPER_AX_AI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_AI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_AI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_PI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_PI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_PI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_PD_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_PD_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_PD_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_DI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_DI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_DI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_IX_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_IX_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AX_IX_32(m68ki_cpu_core *m68k); + +INLINE uint OPER_A7_PI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_A7_PD_8(m68ki_cpu_core *m68k); + +INLINE uint OPER_AW_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AW_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AW_32(m68ki_cpu_core *m68k); +INLINE uint OPER_AL_8(m68ki_cpu_core *m68k); +INLINE uint OPER_AL_16(m68ki_cpu_core *m68k); +INLINE uint OPER_AL_32(m68ki_cpu_core *m68k); +INLINE uint OPER_PCDI_8(m68ki_cpu_core *m68k); +INLINE uint OPER_PCDI_16(m68ki_cpu_core *m68k); +INLINE uint OPER_PCDI_32(m68ki_cpu_core *m68k); +INLINE uint OPER_PCIX_8(m68ki_cpu_core *m68k); +INLINE uint OPER_PCIX_16(m68ki_cpu_core *m68k); +INLINE uint OPER_PCIX_32(m68ki_cpu_core *m68k); /* Stack operations */ -INLINE void m68ki_push_16(uint value); -INLINE void m68ki_push_32(uint value); -INLINE uint m68ki_pull_16(void); -INLINE uint m68ki_pull_32(void); +INLINE void m68ki_push_16(m68ki_cpu_core *m68k, uint value); +INLINE void m68ki_push_32(m68ki_cpu_core *m68k, uint value); +INLINE uint m68ki_pull_16(m68ki_cpu_core *m68k); +INLINE uint m68ki_pull_32(m68ki_cpu_core *m68k); /* Program flow operations */ -INLINE void m68ki_jump(uint new_pc); -INLINE void m68ki_jump_vector(uint vector); -INLINE void m68ki_branch_8(uint offset); -INLINE void m68ki_branch_16(uint offset); -INLINE void m68ki_branch_32(uint offset); +INLINE void m68ki_jump(m68ki_cpu_core *m68k, uint new_pc); +INLINE void m68ki_jump_vector(m68ki_cpu_core *m68k, uint vector); +INLINE void m68ki_branch_8(m68ki_cpu_core *m68k, uint offset); +INLINE void m68ki_branch_16(m68ki_cpu_core *m68k, uint offset); +INLINE void m68ki_branch_32(m68ki_cpu_core *m68k, uint offset); /* Status register operations. */ -INLINE void m68ki_set_s_flag(uint value); /* Only bit 2 of value should be set (i.e. 4 or 0) */ -INLINE void m68ki_set_sm_flag(uint value); /* only bits 1 and 2 of value should be set */ -INLINE void m68ki_set_ccr(uint value); /* set the condition code register */ -INLINE void m68ki_set_sr(uint value); /* set the status register */ -INLINE void m68ki_set_sr_noint(uint value); /* set the status register */ +INLINE void m68ki_set_s_flag(m68ki_cpu_core *m68k, uint value); /* Only bit 2 of value should be set (i.e. 4 or 0) */ +INLINE void m68ki_set_sm_flag(m68ki_cpu_core *m68k, uint value); /* only bits 1 and 2 of value should be set */ +INLINE void m68ki_set_ccr(m68ki_cpu_core *m68k, uint value); /* set the condition code register */ +INLINE void m68ki_set_sr(m68ki_cpu_core *m68k, uint value); /* set the status register */ +INLINE void m68ki_set_sr_noint(m68ki_cpu_core *m68k, uint value); /* set the status register */ /* Exception processing */ -INLINE uint m68ki_init_exception(void); /* Initial exception processing */ - -INLINE void m68ki_stack_frame_3word(uint pc, uint sr); /* Stack various frame types */ -INLINE void m68ki_stack_frame_buserr(uint sr); - -INLINE void m68ki_stack_frame_0000(uint pc, uint sr, uint vector); -INLINE void m68ki_stack_frame_0001(uint pc, uint sr, uint vector); -INLINE void m68ki_stack_frame_0010(uint sr, uint vector); -INLINE void m68ki_stack_frame_1000(uint pc, uint sr, uint vector); -INLINE void m68ki_stack_frame_1010(uint sr, uint vector, uint pc); -INLINE void m68ki_stack_frame_1011(uint sr, uint vector, uint pc); - -INLINE void m68ki_exception_trap(uint vector); -INLINE void m68ki_exception_trapN(uint vector); -INLINE void m68ki_exception_trace(void); -INLINE void m68ki_exception_privilege_violation(void); -INLINE void m68ki_exception_1010(void); -INLINE void m68ki_exception_1111(void); -INLINE void m68ki_exception_illegal(void); -INLINE void m68ki_exception_format_error(void); -INLINE void m68ki_exception_address_error(void); -INLINE void m68ki_exception_interrupt(uint int_level); -INLINE void m68ki_check_interrupts(void); /* ASG: check for interrupts */ +INLINE uint m68ki_init_exception(m68ki_cpu_core *m68k); /* Initial exception processing */ + +INLINE void m68ki_stack_frame_3word(m68ki_cpu_core *m68k, uint pc, uint sr); /* Stack various frame types */ +INLINE void m68ki_stack_frame_buserr(m68ki_cpu_core *m68k, uint sr); + +INLINE void m68ki_stack_frame_0000(m68ki_cpu_core *m68k, uint pc, uint sr, uint vector); +INLINE void m68ki_stack_frame_0001(m68ki_cpu_core *m68k, uint pc, uint sr, uint vector); +INLINE void m68ki_stack_frame_0010(m68ki_cpu_core *m68k, uint sr, uint vector); +INLINE void m68ki_stack_frame_1000(m68ki_cpu_core *m68k, uint pc, uint sr, uint vector); +INLINE void m68ki_stack_frame_1010(m68ki_cpu_core *m68k, uint sr, uint vector, uint pc); +INLINE void m68ki_stack_frame_1011(m68ki_cpu_core *m68k, uint sr, uint vector, uint pc); + +INLINE void m68ki_exception_trap(m68ki_cpu_core *m68k, uint vector); +INLINE void m68ki_exception_trapN(m68ki_cpu_core *m68k, uint vector); +INLINE void m68ki_exception_trace(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_privilege_violation(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_1010(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_1111(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_illegal(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_format_error(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_address_error(m68ki_cpu_core *m68k); +INLINE void m68ki_exception_interrupt(m68ki_cpu_core *m68k, uint int_level); +INLINE void m68ki_check_interrupts(m68ki_cpu_core *m68k); /* ASG: check for interrupts */ /* quick disassembly (used for logging) */ char* m68ki_disassemble_quick(unsigned int pc, unsigned int cpu_type); @@ -1059,58 +1066,58 @@ char* m68ki_disassemble_quick(unsigned int pc, unsigned int cpu_type); /* Handles all immediate reads, does address error check, function code setting, * and prefetching if they are enabled in m68kconf.h */ -INLINE uint m68ki_read_imm_16(void) +INLINE uint m68ki_read_imm_16(m68ki_cpu_core *m68k) { m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(m68k, REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ #if M68K_EMULATE_PREFETCH { uint result; if(REG_PC != CPU_PREF_ADDR) { CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68k_read_immediate_16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68k_read_immediate_16(m68k, ADDRESS_68K(CPU_PREF_ADDR)); } result = MASK_OUT_ABOVE_16(CPU_PREF_DATA); REG_PC += 2; CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68k_read_immediate_16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68k_read_immediate_16(m68k, ADDRESS_68K(CPU_PREF_ADDR)); return result; } #else REG_PC += 2; - return m68k_read_immediate_16(ADDRESS_68K(REG_PC-2)); + return m68k_read_immediate_16(m68k, ADDRESS_68K(REG_PC-2)); #endif /* M68K_EMULATE_PREFETCH */ } -INLINE uint m68ki_read_imm_32(void) +INLINE uint m68ki_read_imm_32(m68ki_cpu_core *m68k) { #if M68K_EMULATE_PREFETCH uint temp_val; m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(m68k, REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ if(REG_PC != CPU_PREF_ADDR) { CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68k_read_immediate_16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68k_read_immediate_16(m68k, ADDRESS_68K(CPU_PREF_ADDR)); } temp_val = MASK_OUT_ABOVE_16(CPU_PREF_DATA); REG_PC += 2; CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68k_read_immediate_16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68k_read_immediate_16(m68k, ADDRESS_68K(CPU_PREF_ADDR)); temp_val = MASK_OUT_ABOVE_32((temp_val << 16) | MASK_OUT_ABOVE_16(CPU_PREF_DATA)); REG_PC += 2; CPU_PREF_ADDR = REG_PC; - CPU_PREF_DATA = m68k_read_immediate_16(ADDRESS_68K(CPU_PREF_ADDR)); + CPU_PREF_DATA = m68k_read_immediate_16(m68k, ADDRESS_68K(CPU_PREF_ADDR)); return temp_val; #else m68ki_set_fc(FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error(REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ + m68ki_check_address_error(m68k, REG_PC, MODE_READ, FLAG_S | FUNCTION_CODE_USER_PROGRAM); /* auto-disable (see m68kcpu.h) */ REG_PC += 4; - return m68k_read_immediate_32(ADDRESS_68K(REG_PC-4)); + return m68k_read_immediate_32(m68k, ADDRESS_68K(REG_PC-4)); #endif /* M68K_EMULATE_PREFETCH */ } @@ -1124,48 +1131,48 @@ INLINE uint m68ki_read_imm_32(void) * These functions will also check for address error and set the function * code if they are enabled in m68kconf.h. */ -INLINE uint m68ki_read_8_fc(uint address, uint fc) +INLINE uint m68ki_read_8_fc(m68ki_cpu_core *m68k, uint address, uint fc) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - return m68k_read_memory_8(ADDRESS_68K(address)); + return m68k_read_memory_8(m68k, ADDRESS_68K(address)); } -INLINE uint m68ki_read_16_fc(uint address, uint fc) +INLINE uint m68ki_read_16_fc(m68ki_cpu_core *m68k, uint address, uint fc) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error_010_less(address, MODE_READ, fc); /* auto-disable (see m68kcpu.h) */ - return m68k_read_memory_16(ADDRESS_68K(address)); + m68ki_check_address_error_010_less(m68k, address, MODE_READ, fc); /* auto-disable (see m68kcpu.h) */ + return m68k_read_memory_16(m68k, ADDRESS_68K(address)); } -INLINE uint m68ki_read_32_fc(uint address, uint fc) +INLINE uint m68ki_read_32_fc(m68ki_cpu_core *m68k, uint address, uint fc) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error_010_less(address, MODE_READ, fc); /* auto-disable (see m68kcpu.h) */ - return m68k_read_memory_32(ADDRESS_68K(address)); + m68ki_check_address_error_010_less(m68k, address, MODE_READ, fc); /* auto-disable (see m68kcpu.h) */ + return m68k_read_memory_32(m68k, ADDRESS_68K(address)); } -INLINE void m68ki_write_8_fc(uint address, uint fc, uint value) +INLINE void m68ki_write_8_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - m68k_write_memory_8(ADDRESS_68K(address), value); + m68k_write_memory_8(m68k, ADDRESS_68K(address), value); } -INLINE void m68ki_write_16_fc(uint address, uint fc, uint value) +INLINE void m68ki_write_16_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error_010_less(address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ - m68k_write_memory_16(ADDRESS_68K(address), value); + m68ki_check_address_error_010_less(m68k, address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ + m68k_write_memory_16(m68k, ADDRESS_68K(address), value); } -INLINE void m68ki_write_32_fc(uint address, uint fc, uint value) +INLINE void m68ki_write_32_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error_010_less(address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ - m68k_write_memory_32(ADDRESS_68K(address), value); + m68ki_check_address_error_010_less(m68k, address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ + m68k_write_memory_32(m68k, ADDRESS_68K(address), value); } #if M68K_SIMULATE_PD_WRITES -INLINE void m68ki_write_32_pd_fc(uint address, uint fc, uint value) +INLINE void m68ki_write_32_pd_fc(m68ki_cpu_core *m68k, uint address, uint fc, uint value) { m68ki_set_fc(fc); /* auto-disable (see m68kcpu.h) */ - m68ki_check_address_error_010_less(address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ - m68k_write_memory_32_pd(ADDRESS_68K(address), value); + m68ki_check_address_error_010_less(m68k, address, MODE_WRITE, fc); /* auto-disable (see m68kcpu.h) */ + m68k_write_memory_32_pd(m68k, ADDRESS_68K(address), value); } #endif @@ -1175,18 +1182,18 @@ INLINE void m68ki_write_32_pd_fc(uint address, uint fc, uint value) /* The program counter relative addressing modes cause operands to be * retrieved from program space, not data space. */ -INLINE uint m68ki_get_ea_pcdi(void) +INLINE uint m68ki_get_ea_pcdi(m68ki_cpu_core *m68k) { uint old_pc = REG_PC; m68ki_use_program_space(); /* auto-disable */ - return old_pc + MAKE_INT_16(m68ki_read_imm_16()); + return old_pc + MAKE_INT_16(m68ki_read_imm_16(m68k)); } -INLINE uint m68ki_get_ea_pcix(void) +INLINE uint m68ki_get_ea_pcix(m68ki_cpu_core *m68k) { m68ki_use_program_space(); /* auto-disable */ - return m68ki_get_ea_ix(REG_PC); + return m68ki_get_ea_ix(m68k, REG_PC); } /* Indexed addressing modes are encoded as follows: @@ -1231,10 +1238,10 @@ INLINE uint m68ki_get_ea_pcix(void) * 1 011 mem indir with long outer * 1 100-111 reserved */ -INLINE uint m68ki_get_ea_ix(uint An) +INLINE uint m68ki_get_ea_ix(m68ki_cpu_core *m68k, uint An) { /* An = base register */ - uint extension = m68ki_read_imm_16(); + uint extension = m68ki_read_imm_16(m68k); uint Xn = 0; /* Index register */ uint bd = 0; /* Base Displacement */ uint od = 0; /* Outer Displacement */ @@ -1267,7 +1274,7 @@ INLINE uint m68ki_get_ea_ix(uint An) /* Full extension format */ - USE_CYCLES(m68ki_ea_idx_cycle_table[extension&0x3f]); + USE_CYCLES(m68k, m68ki_ea_idx_cycle_table[extension&0x3f]); /* Check if base register is present */ if(BIT_7(extension)) /* BS */ @@ -1284,7 +1291,7 @@ INLINE uint m68ki_get_ea_ix(uint An) /* Check if base displacement is present */ if(BIT_5(extension)) /* BD SIZE */ - bd = BIT_4(extension) ? m68ki_read_imm_32() : MAKE_INT_16(m68ki_read_imm_16()); + bd = BIT_4(extension) ? m68ki_read_imm_32(m68k) : MAKE_INT_16(m68ki_read_imm_16(m68k)); /* If no indirect action, we are done */ if(!(extension&7)) /* No Memory Indirect */ @@ -1292,115 +1299,115 @@ INLINE uint m68ki_get_ea_ix(uint An) /* Check if outer displacement is present */ if(BIT_1(extension)) /* I/IS: od */ - od = BIT_0(extension) ? m68ki_read_imm_32() : MAKE_INT_16(m68ki_read_imm_16()); + od = BIT_0(extension) ? m68ki_read_imm_32(m68k) : MAKE_INT_16(m68ki_read_imm_16(m68k)); /* Postindex */ if(BIT_2(extension)) /* I/IS: 0 = preindex, 1 = postindex */ - return m68ki_read_32(An + bd) + Xn + od; + return m68ki_read_32(m68k, An + bd) + Xn + od; /* Preindex */ - return m68ki_read_32(An + bd + Xn) + od; + return m68ki_read_32(m68k, An + bd + Xn) + od; } /* Fetch operands */ -INLINE uint OPER_AY_AI_8(void) {uint ea = EA_AY_AI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_AI_16(void) {uint ea = EA_AY_AI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_AI_32(void) {uint ea = EA_AY_AI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_PI_8(void) {uint ea = EA_AY_PI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_PI_16(void) {uint ea = EA_AY_PI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_PI_32(void) {uint ea = EA_AY_PI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_PD_8(void) {uint ea = EA_AY_PD_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_PD_16(void) {uint ea = EA_AY_PD_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_PD_32(void) {uint ea = EA_AY_PD_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_DI_8(void) {uint ea = EA_AY_DI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_DI_16(void) {uint ea = EA_AY_DI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_DI_32(void) {uint ea = EA_AY_DI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AY_IX_8(void) {uint ea = EA_AY_IX_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AY_IX_16(void) {uint ea = EA_AY_IX_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AY_IX_32(void) {uint ea = EA_AY_IX_32(); return m68ki_read_32(ea);} - -INLINE uint OPER_AX_AI_8(void) {uint ea = EA_AX_AI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_AI_16(void) {uint ea = EA_AX_AI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_AI_32(void) {uint ea = EA_AX_AI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_PI_8(void) {uint ea = EA_AX_PI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_PI_16(void) {uint ea = EA_AX_PI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_PI_32(void) {uint ea = EA_AX_PI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_PD_8(void) {uint ea = EA_AX_PD_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_PD_16(void) {uint ea = EA_AX_PD_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_PD_32(void) {uint ea = EA_AX_PD_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_DI_8(void) {uint ea = EA_AX_DI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_DI_16(void) {uint ea = EA_AX_DI_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_DI_32(void) {uint ea = EA_AX_DI_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AX_IX_8(void) {uint ea = EA_AX_IX_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AX_IX_16(void) {uint ea = EA_AX_IX_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AX_IX_32(void) {uint ea = EA_AX_IX_32(); return m68ki_read_32(ea);} - -INLINE uint OPER_A7_PI_8(void) {uint ea = EA_A7_PI_8(); return m68ki_read_8(ea); } -INLINE uint OPER_A7_PD_8(void) {uint ea = EA_A7_PD_8(); return m68ki_read_8(ea); } - -INLINE uint OPER_AW_8(void) {uint ea = EA_AW_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AW_16(void) {uint ea = EA_AW_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AW_32(void) {uint ea = EA_AW_32(); return m68ki_read_32(ea);} -INLINE uint OPER_AL_8(void) {uint ea = EA_AL_8(); return m68ki_read_8(ea); } -INLINE uint OPER_AL_16(void) {uint ea = EA_AL_16(); return m68ki_read_16(ea);} -INLINE uint OPER_AL_32(void) {uint ea = EA_AL_32(); return m68ki_read_32(ea);} -INLINE uint OPER_PCDI_8(void) {uint ea = EA_PCDI_8(); return m68ki_read_pcrel_8(ea); } -INLINE uint OPER_PCDI_16(void) {uint ea = EA_PCDI_16(); return m68ki_read_pcrel_16(ea);} -INLINE uint OPER_PCDI_32(void) {uint ea = EA_PCDI_32(); return m68ki_read_pcrel_32(ea);} -INLINE uint OPER_PCIX_8(void) {uint ea = EA_PCIX_8(); return m68ki_read_pcrel_8(ea); } -INLINE uint OPER_PCIX_16(void) {uint ea = EA_PCIX_16(); return m68ki_read_pcrel_16(ea);} -INLINE uint OPER_PCIX_32(void) {uint ea = EA_PCIX_32(); return m68ki_read_pcrel_32(ea);} +INLINE uint OPER_AY_AI_8(m68ki_cpu_core *m68k) {uint ea = EA_AY_AI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AY_AI_16(m68ki_cpu_core *m68k) {uint ea = EA_AY_AI_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AY_AI_32(m68ki_cpu_core *m68k) {uint ea = EA_AY_AI_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AY_PI_8(m68ki_cpu_core *m68k) {uint ea = EA_AY_PI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AY_PI_16(m68ki_cpu_core *m68k) {uint ea = EA_AY_PI_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AY_PI_32(m68ki_cpu_core *m68k) {uint ea = EA_AY_PI_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AY_PD_8(m68ki_cpu_core *m68k) {uint ea = EA_AY_PD_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AY_PD_16(m68ki_cpu_core *m68k) {uint ea = EA_AY_PD_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AY_PD_32(m68ki_cpu_core *m68k) {uint ea = EA_AY_PD_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AY_DI_8(m68ki_cpu_core *m68k) {uint ea = EA_AY_DI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AY_DI_16(m68ki_cpu_core *m68k) {uint ea = EA_AY_DI_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AY_DI_32(m68ki_cpu_core *m68k) {uint ea = EA_AY_DI_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AY_IX_8(m68ki_cpu_core *m68k) {uint ea = EA_AY_IX_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AY_IX_16(m68ki_cpu_core *m68k) {uint ea = EA_AY_IX_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AY_IX_32(m68ki_cpu_core *m68k) {uint ea = EA_AY_IX_32(m68k); return m68ki_read_32(m68k, ea);} + +INLINE uint OPER_AX_AI_8(m68ki_cpu_core *m68k) {uint ea = EA_AX_AI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AX_AI_16(m68ki_cpu_core *m68k) {uint ea = EA_AX_AI_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AX_AI_32(m68ki_cpu_core *m68k) {uint ea = EA_AX_AI_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AX_PI_8(m68ki_cpu_core *m68k) {uint ea = EA_AX_PI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AX_PI_16(m68ki_cpu_core *m68k) {uint ea = EA_AX_PI_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AX_PI_32(m68ki_cpu_core *m68k) {uint ea = EA_AX_PI_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AX_PD_8(m68ki_cpu_core *m68k) {uint ea = EA_AX_PD_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AX_PD_16(m68ki_cpu_core *m68k) {uint ea = EA_AX_PD_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AX_PD_32(m68ki_cpu_core *m68k) {uint ea = EA_AX_PD_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AX_DI_8(m68ki_cpu_core *m68k) {uint ea = EA_AX_DI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AX_DI_16(m68ki_cpu_core *m68k) {uint ea = EA_AX_DI_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AX_DI_32(m68ki_cpu_core *m68k) {uint ea = EA_AX_DI_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AX_IX_8(m68ki_cpu_core *m68k) {uint ea = EA_AX_IX_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AX_IX_16(m68ki_cpu_core *m68k) {uint ea = EA_AX_IX_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AX_IX_32(m68ki_cpu_core *m68k) {uint ea = EA_AX_IX_32(m68k); return m68ki_read_32(m68k, ea);} + +INLINE uint OPER_A7_PI_8(m68ki_cpu_core *m68k) {uint ea = EA_A7_PI_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_A7_PD_8(m68ki_cpu_core *m68k) {uint ea = EA_A7_PD_8(m68k); return m68ki_read_8(m68k, ea); } + +INLINE uint OPER_AW_8(m68ki_cpu_core *m68k) {uint ea = EA_AW_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AW_16(m68ki_cpu_core *m68k) {uint ea = EA_AW_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AW_32(m68ki_cpu_core *m68k) {uint ea = EA_AW_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_AL_8(m68ki_cpu_core *m68k) {uint ea = EA_AL_8(m68k); return m68ki_read_8(m68k, ea); } +INLINE uint OPER_AL_16(m68ki_cpu_core *m68k) {uint ea = EA_AL_16(m68k); return m68ki_read_16(m68k, ea);} +INLINE uint OPER_AL_32(m68ki_cpu_core *m68k) {uint ea = EA_AL_32(m68k); return m68ki_read_32(m68k, ea);} +INLINE uint OPER_PCDI_8(m68ki_cpu_core *m68k) {uint ea = EA_PCDI_8(m68k); return m68ki_read_pcrel_8(m68k, ea); } +INLINE uint OPER_PCDI_16(m68ki_cpu_core *m68k) {uint ea = EA_PCDI_16(m68k); return m68ki_read_pcrel_16(m68k, ea);} +INLINE uint OPER_PCDI_32(m68ki_cpu_core *m68k) {uint ea = EA_PCDI_32(m68k); return m68ki_read_pcrel_32(m68k, ea);} +INLINE uint OPER_PCIX_8(m68ki_cpu_core *m68k) {uint ea = EA_PCIX_8(m68k); return m68ki_read_pcrel_8(m68k, ea); } +INLINE uint OPER_PCIX_16(m68ki_cpu_core *m68k) {uint ea = EA_PCIX_16(m68k); return m68ki_read_pcrel_16(m68k, ea);} +INLINE uint OPER_PCIX_32(m68ki_cpu_core *m68k) {uint ea = EA_PCIX_32(m68k); return m68ki_read_pcrel_32(m68k, ea);} /* ---------------------------- Stack Functions --------------------------- */ /* Push/pull data from the stack */ -INLINE void m68ki_push_16(uint value) +INLINE void m68ki_push_16(m68ki_cpu_core *m68k, uint value) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); - m68ki_write_16(REG_SP, value); + m68ki_write_16(m68k, REG_SP, value); } -INLINE void m68ki_push_32(uint value) +INLINE void m68ki_push_32(m68ki_cpu_core *m68k, uint value) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); - m68ki_write_32(REG_SP, value); + m68ki_write_32(m68k, REG_SP, value); } -INLINE uint m68ki_pull_16(void) +INLINE uint m68ki_pull_16(m68ki_cpu_core *m68k) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); - return m68ki_read_16(REG_SP-2); + return m68ki_read_16(m68k, REG_SP-2); } -INLINE uint m68ki_pull_32(void) +INLINE uint m68ki_pull_32(m68ki_cpu_core *m68k) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); - return m68ki_read_32(REG_SP-4); + return m68ki_read_32(m68k, REG_SP-4); } /* Increment/decrement the stack as if doing a push/pull but * don't do any memory access. */ -INLINE void m68ki_fake_push_16(void) +INLINE void m68ki_fake_push_16(m68ki_cpu_core *m68k) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 2); } -INLINE void m68ki_fake_push_32(void) +INLINE void m68ki_fake_push_32(m68ki_cpu_core *m68k) { REG_SP = MASK_OUT_ABOVE_32(REG_SP - 4); } -INLINE void m68ki_fake_pull_16(void) +INLINE void m68ki_fake_pull_16(m68ki_cpu_core *m68k) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 2); } -INLINE void m68ki_fake_pull_32(void) +INLINE void m68ki_fake_pull_32(m68ki_cpu_core *m68k) { REG_SP = MASK_OUT_ABOVE_32(REG_SP + 4); } @@ -1412,16 +1419,16 @@ INLINE void m68ki_fake_pull_32(void) * These functions will also call the pc_changed callback if it was enabled * in m68kconf.h. */ -INLINE void m68ki_jump(uint new_pc) +INLINE void m68ki_jump(m68ki_cpu_core *m68k, uint new_pc) { REG_PC = new_pc; m68ki_pc_changed(REG_PC); } -INLINE void m68ki_jump_vector(uint vector) +INLINE void m68ki_jump_vector(m68ki_cpu_core *m68k, uint vector) { REG_PC = (vector<<2) + REG_VBR; - REG_PC = m68ki_read_data_32(REG_PC); + REG_PC = m68ki_read_data_32(m68k, REG_PC); m68ki_pc_changed(REG_PC); } @@ -1431,17 +1438,17 @@ INLINE void m68ki_jump_vector(uint vector) * So far I've found no problems with not calling pc_changed for 8 or 16 * bit branches. */ -INLINE void m68ki_branch_8(uint offset) +INLINE void m68ki_branch_8(m68ki_cpu_core *m68k, uint offset) { REG_PC += MAKE_INT_8(offset); } -INLINE void m68ki_branch_16(uint offset) +INLINE void m68ki_branch_16(m68ki_cpu_core *m68k, uint offset) { REG_PC += MAKE_INT_16(offset); } -INLINE void m68ki_branch_32(uint offset) +INLINE void m68ki_branch_32(m68ki_cpu_core *m68k, uint offset) { REG_PC += offset; m68ki_pc_changed(REG_PC); @@ -1454,7 +1461,7 @@ INLINE void m68ki_branch_32(uint offset) /* Set the S flag and change the active stack pointer. * Note that value MUST be 4 or 0. */ -INLINE void m68ki_set_s_flag(uint value) +INLINE void m68ki_set_s_flag(m68ki_cpu_core *m68k, uint value) { /* Backup the old stack pointer */ REG_SP_BASE[FLAG_S | ((FLAG_S>>1) & FLAG_M)] = REG_SP; @@ -1467,7 +1474,7 @@ INLINE void m68ki_set_s_flag(uint value) /* Set the S and M flags and change the active stack pointer. * Note that value MUST be 0, 2, 4, or 6 (bit2 = S, bit1 = M). */ -INLINE void m68ki_set_sm_flag(uint value) +INLINE void m68ki_set_sm_flag(m68ki_cpu_core *m68k, uint value) { /* Backup the old stack pointer */ REG_SP_BASE[FLAG_S | ((FLAG_S>>1) & FLAG_M)] = REG_SP; @@ -1479,7 +1486,7 @@ INLINE void m68ki_set_sm_flag(uint value) } /* Set the S and M flags. Don't touch the stack pointer. */ -INLINE void m68ki_set_sm_flag_nosp(uint value) +INLINE void m68ki_set_sm_flag_nosp(m68ki_cpu_core *m68k, uint value) { /* Set the S and M flags */ FLAG_S = value & SFLAG_SET; @@ -1488,7 +1495,7 @@ INLINE void m68ki_set_sm_flag_nosp(uint value) /* Set the condition code register */ -INLINE void m68ki_set_ccr(uint value) +INLINE void m68ki_set_ccr(m68ki_cpu_core *m68k, uint value) { FLAG_X = BIT_4(value) << 4; FLAG_N = BIT_3(value) << 4; @@ -1498,7 +1505,7 @@ INLINE void m68ki_set_ccr(uint value) } /* Set the status register but don't check for interrupts */ -INLINE void m68ki_set_sr_noint(uint value) +INLINE void m68ki_set_sr_noint(m68ki_cpu_core *m68k, uint value) { /* Mask out the "unimplemented" bits */ value &= CPU_SR_MASK; @@ -1507,14 +1514,14 @@ INLINE void m68ki_set_sr_noint(uint value) FLAG_T1 = BIT_F(value); FLAG_T0 = BIT_E(value); FLAG_INT_MASK = value & 0x0700; - m68ki_set_ccr(value); - m68ki_set_sm_flag((value >> 11) & 6); + m68ki_set_ccr(m68k, value); + m68ki_set_sm_flag(m68k, (value >> 11) & 6); } /* Set the status register but don't check for interrupts nor * change the stack pointer */ -INLINE void m68ki_set_sr_noint_nosp(uint value) +INLINE void m68ki_set_sr_noint_nosp(m68ki_cpu_core *m68k, uint value) { /* Mask out the "unimplemented" bits */ value &= CPU_SR_MASK; @@ -1523,146 +1530,146 @@ INLINE void m68ki_set_sr_noint_nosp(uint value) FLAG_T1 = BIT_F(value); FLAG_T0 = BIT_E(value); FLAG_INT_MASK = value & 0x0700; - m68ki_set_ccr(value); - m68ki_set_sm_flag_nosp((value >> 11) & 6); + m68ki_set_ccr(m68k, value); + m68ki_set_sm_flag_nosp(m68k, (value >> 11) & 6); } /* Set the status register and check for interrupts */ -INLINE void m68ki_set_sr(uint value) +INLINE void m68ki_set_sr(m68ki_cpu_core *m68k, uint value) { - m68ki_set_sr_noint(value); - m68ki_check_interrupts(); + m68ki_set_sr_noint(m68k, value); + m68ki_check_interrupts(m68k); } /* ------------------------- Exception Processing ------------------------- */ /* Initiate exception processing */ -INLINE uint m68ki_init_exception(void) +INLINE uint m68ki_init_exception(m68ki_cpu_core *m68k) { /* Save the old status register */ - uint sr = m68ki_get_sr(); + uint sr = m68ki_get_sr(m68k); /* Turn off trace flag, clear pending traces */ FLAG_T1 = FLAG_T0 = 0; m68ki_clear_trace(); /* Enter supervisor mode */ - m68ki_set_s_flag(SFLAG_SET); + m68ki_set_s_flag(m68k, SFLAG_SET); return sr; } /* 3 word stack frame (68000 only) */ -INLINE void m68ki_stack_frame_3word(uint pc, uint sr) +INLINE void m68ki_stack_frame_3word(m68ki_cpu_core *m68k, uint pc, uint sr) { - m68ki_push_32(pc); - m68ki_push_16(sr); + m68ki_push_32(m68k, pc); + m68ki_push_16(m68k, sr); } /* Format 0 stack frame. * This is the standard stack frame for 68010+. */ -INLINE void m68ki_stack_frame_0000(uint pc, uint sr, uint vector) +INLINE void m68ki_stack_frame_0000(m68ki_cpu_core *m68k, uint pc, uint sr, uint vector) { /* Stack a 3-word frame if we are 68000 */ if(CPU_TYPE == CPU_TYPE_000 || CPU_TYPE == CPU_TYPE_008) { - m68ki_stack_frame_3word(pc, sr); + m68ki_stack_frame_3word(m68k, pc, sr); return; } - m68ki_push_16(vector<<2); - m68ki_push_32(pc); - m68ki_push_16(sr); + m68ki_push_16(m68k, vector<<2); + m68ki_push_32(m68k, pc); + m68ki_push_16(m68k, sr); } /* Format 1 stack frame (68020). * For 68020, this is the 4 word throwaway frame. */ -INLINE void m68ki_stack_frame_0001(uint pc, uint sr, uint vector) +INLINE void m68ki_stack_frame_0001(m68ki_cpu_core *m68k, uint pc, uint sr, uint vector) { - m68ki_push_16(0x1000 | (vector<<2)); - m68ki_push_32(pc); - m68ki_push_16(sr); + m68ki_push_16(m68k, 0x1000 | (vector<<2)); + m68ki_push_32(m68k, pc); + m68ki_push_16(m68k, sr); } /* Format 2 stack frame. * This is used only by 68020 for trap exceptions. */ -INLINE void m68ki_stack_frame_0010(uint sr, uint vector) +INLINE void m68ki_stack_frame_0010(m68ki_cpu_core *m68k, uint sr, uint vector) { - m68ki_push_32(REG_PPC); - m68ki_push_16(0x2000 | (vector<<2)); - m68ki_push_32(REG_PC); - m68ki_push_16(sr); + m68ki_push_32(m68k, REG_PPC); + m68ki_push_16(m68k, 0x2000 | (vector<<2)); + m68ki_push_32(m68k, REG_PC); + m68ki_push_16(m68k, sr); } /* Bus error stack frame (68000 only). */ -INLINE void m68ki_stack_frame_buserr(uint sr) +INLINE void m68ki_stack_frame_buserr(m68ki_cpu_core *m68k, uint sr) { - m68ki_push_32(REG_PC); - m68ki_push_16(sr); - m68ki_push_16(REG_IR); - m68ki_push_32(m68ki_aerr_address); /* access address */ + m68ki_push_32(m68k, REG_PC); + m68ki_push_16(m68k, sr); + m68ki_push_16(m68k, REG_IR); + m68ki_push_32(m68k, m68k->aerr_address); /* access address */ /* 0 0 0 0 0 0 0 0 0 0 0 R/W I/N FC * R/W 0 = write, 1 = read * I/N 0 = instruction, 1 = not * FC 3-bit function code */ - m68ki_push_16(m68ki_aerr_write_mode | CPU_INSTR_MODE | m68ki_aerr_fc); + m68ki_push_16(m68k, m68k->aerr_write_mode | CPU_INSTR_MODE | m68k->aerr_fc); } /* Format 8 stack frame (68010). * 68010 only. This is the 29 word bus/address error frame. */ -void m68ki_stack_frame_1000(uint pc, uint sr, uint vector) +void m68ki_stack_frame_1000(m68ki_cpu_core *m68k, uint pc, uint sr, uint vector) { /* VERSION * NUMBER * INTERNAL INFORMATION, 16 WORDS */ - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); - m68ki_fake_push_32(); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); + m68ki_fake_push_32(m68k); /* INSTRUCTION INPUT BUFFER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* UNUSED, RESERVED (not written) */ - m68ki_fake_push_16(); + m68ki_fake_push_16(m68k); /* DATA INPUT BUFFER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* UNUSED, RESERVED (not written) */ - m68ki_fake_push_16(); + m68ki_fake_push_16(m68k); /* DATA OUTPUT BUFFER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* UNUSED, RESERVED (not written) */ - m68ki_fake_push_16(); + m68ki_fake_push_16(m68k); /* FAULT ADDRESS */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* SPECIAL STATUS WORD */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* 1000, VECTOR OFFSET */ - m68ki_push_16(0x8000 | (vector<<2)); + m68ki_push_16(m68k, 0x8000 | (vector<<2)); /* PROGRAM COUNTER */ - m68ki_push_32(pc); + m68ki_push_32(m68k, pc); /* STATUS REGISTER */ - m68ki_push_16(sr); + m68ki_push_16(m68k, sr); } /* Format A stack frame (short bus fault). @@ -1670,46 +1677,46 @@ void m68ki_stack_frame_1000(uint pc, uint sr, uint vector) * if the error happens at an instruction boundary. * PC stacked is address of next instruction. */ -void m68ki_stack_frame_1010(uint sr, uint vector, uint pc) +void m68ki_stack_frame_1010(m68ki_cpu_core *m68k, uint sr, uint vector, uint pc) { /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* DATA OUTPUT BUFFER (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* DATA CYCLE FAULT ADDRESS (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* INSTRUCTION PIPE STAGE B */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INSTRUCTION PIPE STAGE C */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* SPECIAL STATUS REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* 1010, VECTOR OFFSET */ - m68ki_push_16(0xa000 | (vector<<2)); + m68ki_push_16(m68k, 0xa000 | (vector<<2)); /* PROGRAM COUNTER */ - m68ki_push_32(pc); + m68ki_push_32(m68k, pc); /* STATUS REGISTER */ - m68ki_push_16(sr); + m68ki_push_16(m68k, sr); } /* Format B stack frame (long bus fault). @@ -1717,107 +1724,107 @@ void m68ki_stack_frame_1010(uint sr, uint vector, uint pc) * if the error happens during instruction execution. * PC stacked is address of instruction in progress. */ -void m68ki_stack_frame_1011(uint sr, uint vector, uint pc) +void m68ki_stack_frame_1011(m68ki_cpu_core *m68k, uint sr, uint vector, uint pc) { /* INTERNAL REGISTERS (18 words) */ - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); - m68ki_push_32(0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); /* VERSION# (4 bits), INTERNAL INFORMATION */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INTERNAL REGISTERS (3 words) */ - m68ki_push_32(0); - m68ki_push_16(0); + m68ki_push_32(m68k, 0); + m68ki_push_16(m68k, 0); /* DATA INTPUT BUFFER (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* INTERNAL REGISTERS (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* STAGE B ADDRESS (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* INTERNAL REGISTER (4 words) */ - m68ki_push_32(0); - m68ki_push_32(0); + m68ki_push_32(m68k, 0); + m68ki_push_32(m68k, 0); /* DATA OUTPUT BUFFER (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* DATA CYCLE FAULT ADDRESS (2 words) */ - m68ki_push_32(0); + m68ki_push_32(m68k, 0); /* INSTRUCTION PIPE STAGE B */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INSTRUCTION PIPE STAGE C */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* SPECIAL STATUS REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* INTERNAL REGISTER */ - m68ki_push_16(0); + m68ki_push_16(m68k, 0); /* 1011, VECTOR OFFSET */ - m68ki_push_16(0xb000 | (vector<<2)); + m68ki_push_16(m68k, 0xb000 | (vector<<2)); /* PROGRAM COUNTER */ - m68ki_push_32(pc); + m68ki_push_32(m68k, pc); /* STATUS REGISTER */ - m68ki_push_16(sr); + m68ki_push_16(m68k, sr); } /* Used for Group 2 exceptions. * These stack a type 2 frame on the 020. */ -INLINE void m68ki_exception_trap(uint vector) +INLINE void m68ki_exception_trap(m68ki_cpu_core *m68k, uint vector) { - uint sr = m68ki_init_exception(); + uint sr = m68ki_init_exception(m68k); if(CPU_TYPE_IS_010_LESS(CPU_TYPE)) - m68ki_stack_frame_0000(REG_PC, sr, vector); + m68ki_stack_frame_0000(m68k, REG_PC, sr, vector); else - m68ki_stack_frame_0010(sr, vector); + m68ki_stack_frame_0010(m68k, sr, vector); - m68ki_jump_vector(vector); + m68ki_jump_vector(m68k, vector); /* Use up some clock cycles */ - USE_CYCLES(CYC_EXCEPTION[vector]); + USE_CYCLES(m68k, CYC_EXCEPTION[vector]); } /* Trap#n stacks a 0 frame but behaves like group2 otherwise */ -INLINE void m68ki_exception_trapN(uint vector) +INLINE void m68ki_exception_trapN(m68ki_cpu_core *m68k, uint vector) { - uint sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PC, sr, vector); - m68ki_jump_vector(vector); + uint sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PC, sr, vector); + m68ki_jump_vector(m68k, vector); /* Use up some clock cycles */ - USE_CYCLES(CYC_EXCEPTION[vector]); + USE_CYCLES(m68k, CYC_EXCEPTION[vector]); } /* Exception for trace mode */ -INLINE void m68ki_exception_trace(void) +INLINE void m68ki_exception_trace(m68ki_cpu_core *m68k) { - uint sr = m68ki_init_exception(); + uint sr = m68ki_init_exception(m68k); if(CPU_TYPE_IS_010_LESS(CPU_TYPE)) { @@ -1827,24 +1834,24 @@ INLINE void m68ki_exception_trace(void) CPU_INSTR_MODE = INSTRUCTION_NO; } #endif /* M68K_EMULATE_ADDRESS_ERROR */ - m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_TRACE); + m68ki_stack_frame_0000(m68k, REG_PC, sr, EXCEPTION_TRACE); } else - m68ki_stack_frame_0010(sr, EXCEPTION_TRACE); + m68ki_stack_frame_0010(m68k, sr, EXCEPTION_TRACE); - m68ki_jump_vector(EXCEPTION_TRACE); + m68ki_jump_vector(m68k, EXCEPTION_TRACE); /* Trace nullifies a STOP instruction */ CPU_STOPPED &= ~STOP_LEVEL_STOP; /* Use up some clock cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_TRACE]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_TRACE]); } /* Exception for privilege violation */ -INLINE void m68ki_exception_privilege_violation(void) +INLINE void m68ki_exception_privilege_violation(m68ki_cpu_core *m68k) { - uint sr = m68ki_init_exception(); + uint sr = m68ki_init_exception(m68k); #if M68K_EMULATE_ADDRESS_ERROR == OPT_ON if(CPU_TYPE_IS_000(CPU_TYPE)) @@ -1853,15 +1860,15 @@ INLINE void m68ki_exception_privilege_violation(void) } #endif /* M68K_EMULATE_ADDRESS_ERROR */ - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_PRIVILEGE_VIOLATION); - m68ki_jump_vector(EXCEPTION_PRIVILEGE_VIOLATION); + m68ki_stack_frame_0000(m68k, REG_PPC, sr, EXCEPTION_PRIVILEGE_VIOLATION); + m68ki_jump_vector(m68k, EXCEPTION_PRIVILEGE_VIOLATION); /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_PRIVILEGE_VIOLATION] - CYC_INSTRUCTION[REG_IR]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_PRIVILEGE_VIOLATION] - CYC_INSTRUCTION[REG_IR]); } /* Exception for A-Line instructions */ -INLINE void m68ki_exception_1010(void) +INLINE void m68ki_exception_1010(m68ki_cpu_core *m68k) { uint sr; #if M68K_LOG_1010_1111 == OPT_ON @@ -1870,16 +1877,16 @@ INLINE void m68ki_exception_1010(void) m68ki_disassemble_quick(ADDRESS_68K(REG_PPC)))); #endif - sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_1010); - m68ki_jump_vector(EXCEPTION_1010); + sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PPC, sr, EXCEPTION_1010); + m68ki_jump_vector(m68k, EXCEPTION_1010); /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1010] - CYC_INSTRUCTION[REG_IR]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_1010] - CYC_INSTRUCTION[REG_IR]); } /* Exception for F-Line instructions */ -INLINE void m68ki_exception_1111(void) +INLINE void m68ki_exception_1111(m68ki_cpu_core *m68k) { uint sr; @@ -1889,16 +1896,16 @@ INLINE void m68ki_exception_1111(void) m68ki_disassemble_quick(ADDRESS_68K(REG_PPC)))); #endif - sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_1111); - m68ki_jump_vector(EXCEPTION_1111); + sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PPC, sr, EXCEPTION_1111); + m68ki_jump_vector(m68k, EXCEPTION_1111); /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_1111] - CYC_INSTRUCTION[REG_IR]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_1111] - CYC_INSTRUCTION[REG_IR]); } /* Exception for illegal instructions */ -INLINE void m68ki_exception_illegal(void) +INLINE void m68ki_exception_illegal(m68ki_cpu_core *m68k) { uint sr; @@ -1906,7 +1913,7 @@ INLINE void m68ki_exception_illegal(void) m68ki_cpu_names[CPU_TYPE], ADDRESS_68K(REG_PPC), REG_IR, m68ki_disassemble_quick(ADDRESS_68K(REG_PPC)))); - sr = m68ki_init_exception(); + sr = m68ki_init_exception(m68k); #if M68K_EMULATE_ADDRESS_ERROR == OPT_ON if(CPU_TYPE_IS_000(CPU_TYPE)) @@ -1915,28 +1922,28 @@ INLINE void m68ki_exception_illegal(void) } #endif /* M68K_EMULATE_ADDRESS_ERROR */ - m68ki_stack_frame_0000(REG_PPC, sr, EXCEPTION_ILLEGAL_INSTRUCTION); - m68ki_jump_vector(EXCEPTION_ILLEGAL_INSTRUCTION); + m68ki_stack_frame_0000(m68k, REG_PPC, sr, EXCEPTION_ILLEGAL_INSTRUCTION); + m68ki_jump_vector(m68k, EXCEPTION_ILLEGAL_INSTRUCTION); /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION] - CYC_INSTRUCTION[REG_IR]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_ILLEGAL_INSTRUCTION] - CYC_INSTRUCTION[REG_IR]); } /* Exception for format errror in RTE */ -INLINE void m68ki_exception_format_error(void) +INLINE void m68ki_exception_format_error(m68ki_cpu_core *m68k) { - uint sr = m68ki_init_exception(); - m68ki_stack_frame_0000(REG_PC, sr, EXCEPTION_FORMAT_ERROR); - m68ki_jump_vector(EXCEPTION_FORMAT_ERROR); + uint sr = m68ki_init_exception(m68k); + m68ki_stack_frame_0000(m68k, REG_PC, sr, EXCEPTION_FORMAT_ERROR); + m68ki_jump_vector(m68k, EXCEPTION_FORMAT_ERROR); /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_FORMAT_ERROR] - CYC_INSTRUCTION[REG_IR]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_FORMAT_ERROR] - CYC_INSTRUCTION[REG_IR]); } /* Exception for address error */ -INLINE void m68ki_exception_address_error(void) +INLINE void m68ki_exception_address_error(m68ki_cpu_core *m68k) { - uint sr = m68ki_init_exception(); + uint sr = m68ki_init_exception(m68k); /* If we were processing a bus error, address error, or reset, * this is a catastrophic failure. @@ -1944,24 +1951,24 @@ INLINE void m68ki_exception_address_error(void) */ if(CPU_RUN_MODE == RUN_MODE_BERR_AERR_RESET) { - m68k_read_memory_8(0x00ffff01); + m68k_read_memory_8(m68k, 0x00ffff01); CPU_STOPPED = STOP_LEVEL_HALT; return; } CPU_RUN_MODE = RUN_MODE_BERR_AERR_RESET; /* Note: This is implemented for 68000 only! */ - m68ki_stack_frame_buserr(sr); + m68ki_stack_frame_buserr(m68k, sr); - m68ki_jump_vector(EXCEPTION_ADDRESS_ERROR); + m68ki_jump_vector(m68k, EXCEPTION_ADDRESS_ERROR); /* Use up some clock cycles and undo the instruction's cycles */ - USE_CYCLES(CYC_EXCEPTION[EXCEPTION_ADDRESS_ERROR] - CYC_INSTRUCTION[REG_IR]); + USE_CYCLES(m68k, CYC_EXCEPTION[EXCEPTION_ADDRESS_ERROR] - CYC_INSTRUCTION[REG_IR]); } /* Service an interrupt request and start exception processing */ -void m68ki_exception_interrupt(uint int_level) +void m68ki_exception_interrupt(m68ki_cpu_core *m68k, uint int_level) { uint vector; uint sr; @@ -1982,7 +1989,7 @@ void m68ki_exception_interrupt(uint int_level) return; /* Acknowledge the interrupt */ - vector = m68ki_int_ack(int_level); + vector = m68ki_int_ack(m68k, int_level); /* Get the interrupt vector */ if(vector == M68K_INT_ACK_AUTOVECTOR) @@ -1999,32 +2006,32 @@ void m68ki_exception_interrupt(uint int_level) } /* Start exception processing */ - sr = m68ki_init_exception(); + sr = m68ki_init_exception(m68k); /* Set the interrupt mask to the level of the one being serviced */ FLAG_INT_MASK = int_level<<8; /* Get the new PC */ - new_pc = m68ki_read_data_32((vector<<2) + REG_VBR); + new_pc = m68ki_read_data_32(m68k, (vector<<2) + REG_VBR); /* If vector is uninitialized, call the uninitialized interrupt vector */ if(new_pc == 0) - new_pc = m68ki_read_data_32((EXCEPTION_UNINITIALIZED_INTERRUPT<<2) + REG_VBR); + new_pc = m68ki_read_data_32(m68k, (EXCEPTION_UNINITIALIZED_INTERRUPT<<2) + REG_VBR); /* Generate a stack frame */ - m68ki_stack_frame_0000(REG_PC, sr, vector); + m68ki_stack_frame_0000(m68k, REG_PC, sr, vector); if(FLAG_M && CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) { /* Create throwaway frame */ - m68ki_set_sm_flag(FLAG_S); /* clear M */ + m68ki_set_sm_flag(m68k, FLAG_S); /* clear M */ sr |= 0x2000; /* Same as SR in master stack frame except S is forced high */ - m68ki_stack_frame_0001(REG_PC, sr, vector); + m68ki_stack_frame_0001(m68k, REG_PC, sr, vector); } - m68ki_jump(new_pc); + m68ki_jump(m68k, new_pc); /* Defer cycle counting until later */ - USE_CYCLES(CYC_EXCEPTION[vector]); + USE_CYCLES(m68k, CYC_EXCEPTION[vector]); #if !M68K_EMULATE_INT_ACK /* Automatically clear IRQ if we are not using an acknowledge scheme */ @@ -2034,15 +2041,15 @@ void m68ki_exception_interrupt(uint int_level) /* ASG: Check for interrupts */ -INLINE void m68ki_check_interrupts(void) +INLINE void m68ki_check_interrupts(m68ki_cpu_core *m68k) { - if(m68ki_cpu.nmi_pending) + if(m68k->nmi_pending) { - m68ki_cpu.nmi_pending = FALSE; - m68ki_exception_interrupt(7); + m68k->nmi_pending = FALSE; + m68ki_exception_interrupt(m68k, 7); } else if(CPU_INT_LEVEL > FLAG_INT_MASK) - m68ki_exception_interrupt(CPU_INT_LEVEL>>8); + m68ki_exception_interrupt(m68k, CPU_INT_LEVEL>>8); } diff --git a/src/emu/cpu/m68000/m68kdasm.c b/src/emu/cpu/m68000/m68kdasm.c index ec5427d0daf..4dca7f577bb 100644 --- a/src/emu/cpu/m68000/m68kdasm.c +++ b/src/emu/cpu/m68000/m68kdasm.c @@ -28,6 +28,8 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> + +#define m68ki_cpu_core void #include "m68k.h" #ifndef DECL_SPEC @@ -248,10 +250,10 @@ static const char *const g_cpcc[64] = static uint dasm_read_imm_8(uint advance) { uint result; - if (g_rawop) +// if (g_rawop) result = g_rawop[g_cpu_pc + 1 - g_rawbasepc]; - else - result = m68k_read_disassembler_16(g_cpu_pc & g_address_mask) & 0xff; +// else +// result = m68k_read_disassembler_16(g_cpu_pc & g_address_mask) & 0xff; g_cpu_pc += advance; return result; } @@ -259,11 +261,11 @@ static uint dasm_read_imm_8(uint advance) static uint dasm_read_imm_16(uint advance) { uint result; - if (g_rawop) +// if (g_rawop) result = (g_rawop[g_cpu_pc + 0 - g_rawbasepc] << 8) | g_rawop[g_cpu_pc + 1 - g_rawbasepc]; - else - result = m68k_read_disassembler_16(g_cpu_pc & g_address_mask) & 0xff; +// else +// result = m68k_read_disassembler_16(g_cpu_pc & g_address_mask) & 0xff; g_cpu_pc += advance; return result; } @@ -271,13 +273,13 @@ static uint dasm_read_imm_16(uint advance) static uint dasm_read_imm_32(uint advance) { uint result; - if (g_rawop) +// if (g_rawop) result = (g_rawop[g_cpu_pc + 0 - g_rawbasepc] << 24) | (g_rawop[g_cpu_pc + 1 - g_rawbasepc] << 16) | (g_rawop[g_cpu_pc + 2 - g_rawbasepc] << 8) | g_rawop[g_cpu_pc + 3 - g_rawbasepc]; - else - result = m68k_read_disassembler_32(g_cpu_pc & g_address_mask) & 0xff; +// else +// result = m68k_read_disassembler_32(g_cpu_pc & g_address_mask) & 0xff; g_cpu_pc += advance; return result; } diff --git a/src/emu/cpu/m68000/m68kfpu.c b/src/emu/cpu/m68000/m68kfpu.c index c5ca30bb14a..d7950ff2e2b 100644 --- a/src/emu/cpu/m68000/m68kfpu.c +++ b/src/emu/cpu/m68000/m68kfpu.c @@ -9,7 +9,7 @@ #define DOUBLE_EXPONENT U64(0x7ff0000000000000) #define DOUBLE_MANTISSA U64(0x000fffffffffffff) -INLINE void SET_CONDITION_CODES(fp_reg reg) +INLINE void SET_CONDITION_CODES(m68ki_cpu_core *m68k, fp_reg reg) { REG_FPSR &= ~(FPCC_N|FPCC_Z|FPCC_I|FPCC_NAN); @@ -38,7 +38,7 @@ INLINE void SET_CONDITION_CODES(fp_reg reg) } } -INLINE int TEST_CONDITION(int condition) +INLINE int TEST_CONDITION(m68ki_cpu_core *m68k, int condition) { int n = (REG_FPSR & FPCC_N) != 0; int z = (REG_FPSR & FPCC_Z) != 0; @@ -65,7 +65,7 @@ INLINE int TEST_CONDITION(int condition) return r; } -static UINT8 READ_EA_8(int ea) +static UINT8 READ_EA_8(m68ki_cpu_core *m68k, int ea) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -78,13 +78,13 @@ static UINT8 READ_EA_8(int ea) } case 5: // (d16, An) { - UINT32 ea = EA_AY_DI_8(); - return m68ki_read_8(ea); + UINT32 ea = EA_AY_DI_8(m68k); + return m68ki_read_8(m68k, ea); } case 6: // (An) + (Xn) + d8 { - UINT32 ea = EA_AY_IX_8(); - return m68ki_read_8(ea); + UINT32 ea = EA_AY_IX_8(m68k); + return m68ki_read_8(m68k, ea); } case 7: { @@ -92,14 +92,14 @@ static UINT8 READ_EA_8(int ea) { case 1: // (xxx).L { - UINT32 d1 = OPER_I_16(); - UINT32 d2 = OPER_I_16(); + UINT32 d1 = OPER_I_16(m68k); + UINT32 d2 = OPER_I_16(m68k); UINT32 ea = (d1 << 16) | d2; - return m68ki_read_8(ea); + return m68ki_read_8(m68k, ea); } case 4: // #<data> { - return OPER_I_8(); + return OPER_I_8(m68k); } default: fatalerror("MC68040: READ_EA_8: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC); } @@ -111,7 +111,7 @@ static UINT8 READ_EA_8(int ea) return 0; } -static UINT16 READ_EA_16(int ea) +static UINT16 READ_EA_16(m68ki_cpu_core *m68k, int ea) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -125,17 +125,17 @@ static UINT16 READ_EA_16(int ea) case 2: // (An) { UINT32 ea = REG_A[reg]; - return m68ki_read_16(ea); + return m68ki_read_16(m68k, ea); } case 5: // (d16, An) { - UINT32 ea = EA_AY_DI_16(); - return m68ki_read_16(ea); + UINT32 ea = EA_AY_DI_16(m68k); + return m68ki_read_16(m68k, ea); } case 6: // (An) + (Xn) + d8 { - UINT32 ea = EA_AY_IX_16(); - return m68ki_read_16(ea); + UINT32 ea = EA_AY_IX_16(m68k); + return m68ki_read_16(m68k, ea); } case 7: { @@ -143,14 +143,14 @@ static UINT16 READ_EA_16(int ea) { case 1: // (xxx).L { - UINT32 d1 = OPER_I_16(); - UINT32 d2 = OPER_I_16(); + UINT32 d1 = OPER_I_16(m68k); + UINT32 d2 = OPER_I_16(m68k); UINT32 ea = (d1 << 16) | d2; - return m68ki_read_16(ea); + return m68ki_read_16(m68k, ea); } case 4: // #<data> { - return OPER_I_16(); + return OPER_I_16(m68k); } default: fatalerror("MC68040: READ_EA_16: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC); @@ -163,7 +163,7 @@ static UINT16 READ_EA_16(int ea) return 0; } -static UINT32 READ_EA_32(int ea) +static UINT32 READ_EA_32(m68ki_cpu_core *m68k, int ea) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -177,22 +177,22 @@ static UINT32 READ_EA_32(int ea) case 2: // (An) { UINT32 ea = REG_A[reg]; - return m68ki_read_32(ea); + return m68ki_read_32(m68k, ea); } case 3: // (An)+ { - UINT32 ea = EA_AY_PI_32(); - return m68ki_read_32(ea); + UINT32 ea = EA_AY_PI_32(m68k); + return m68ki_read_32(m68k, ea); } case 5: // (d16, An) { - UINT32 ea = EA_AY_DI_32(); - return m68ki_read_32(ea); + UINT32 ea = EA_AY_DI_32(m68k); + return m68ki_read_32(m68k, ea); } case 6: // (An) + (Xn) + d8 { - UINT32 ea = EA_AY_IX_32(); - return m68ki_read_32(ea); + UINT32 ea = EA_AY_IX_32(m68k); + return m68ki_read_32(m68k, ea); } case 7: { @@ -200,19 +200,19 @@ static UINT32 READ_EA_32(int ea) { case 1: // (xxx).L { - UINT32 d1 = OPER_I_16(); - UINT32 d2 = OPER_I_16(); + UINT32 d1 = OPER_I_16(m68k); + UINT32 d2 = OPER_I_16(m68k); UINT32 ea = (d1 << 16) | d2; - return m68ki_read_32(ea); + return m68ki_read_32(m68k, ea); } case 2: // (d16, PC) { - UINT32 ea = EA_PCDI_32(); - return m68ki_read_32(ea); + UINT32 ea = EA_PCDI_32(m68k); + return m68ki_read_32(m68k, ea); } case 4: // #<data> { - return OPER_I_32(); + return OPER_I_32(m68k); } default: fatalerror("MC68040: READ_EA_32: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC); } @@ -223,7 +223,7 @@ static UINT32 READ_EA_32(int ea) return 0; } -static void WRITE_EA_32(int ea, UINT32 data) +static void WRITE_EA_32(m68ki_cpu_core *m68k, int ea, UINT32 data) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -238,31 +238,31 @@ static void WRITE_EA_32(int ea, UINT32 data) case 2: // (An) { UINT32 ea = REG_A[reg]; - m68ki_write_32(ea, data); + m68ki_write_32(m68k, ea, data); break; } case 3: // (An)+ { - UINT32 ea = EA_AY_PI_32(); - m68ki_write_32(ea, data); + UINT32 ea = EA_AY_PI_32(m68k); + m68ki_write_32(m68k, ea, data); break; } case 4: // -(An) { - UINT32 ea = EA_AY_PD_32(); - m68ki_write_32(ea, data); + UINT32 ea = EA_AY_PD_32(m68k); + m68ki_write_32(m68k, ea, data); break; } case 5: // (d16, An) { - UINT32 ea = EA_AY_DI_32(); - m68ki_write_32(ea, data); + UINT32 ea = EA_AY_DI_32(m68k); + m68ki_write_32(m68k, ea, data); break; } case 6: // (An) + (Xn) + d8 { - UINT32 ea = EA_AY_IX_32(); - m68ki_write_32(ea, data); + UINT32 ea = EA_AY_IX_32(m68k); + m68ki_write_32(m68k, ea, data); break; } case 7: @@ -271,16 +271,16 @@ static void WRITE_EA_32(int ea, UINT32 data) { case 1: // (xxx).L { - UINT32 d1 = OPER_I_16(); - UINT32 d2 = OPER_I_16(); + UINT32 d1 = OPER_I_16(m68k); + UINT32 d2 = OPER_I_16(m68k); UINT32 ea = (d1 << 16) | d2; - m68ki_write_32(ea, data); + m68ki_write_32(m68k, ea, data); break; } case 2: // (d16, PC) { - UINT32 ea = EA_PCDI_32(); - m68ki_write_32(ea, data); + UINT32 ea = EA_PCDI_32(m68k); + m68ki_write_32(m68k, ea, data); break; } default: fatalerror("MC68040: WRITE_EA_32: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC); @@ -291,7 +291,7 @@ static void WRITE_EA_32(int ea, UINT32 data) } } -static UINT64 READ_EA_64(int ea) +static UINT64 READ_EA_64(m68ki_cpu_core *m68k, int ea) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -302,23 +302,23 @@ static UINT64 READ_EA_64(int ea) case 2: // (An) { UINT32 ea = REG_A[reg]; - h1 = m68ki_read_32(ea+0); - h2 = m68ki_read_32(ea+4); + h1 = m68ki_read_32(m68k, ea+0); + h2 = m68ki_read_32(m68k, ea+4); return (UINT64)(h1) << 32 | (UINT64)(h2); } case 3: // (An)+ { UINT32 ea = REG_A[reg]; REG_A[reg] += 8; - h1 = m68ki_read_32(ea+0); - h2 = m68ki_read_32(ea+4); + h1 = m68ki_read_32(m68k, ea+0); + h2 = m68ki_read_32(m68k, ea+4); return (UINT64)(h1) << 32 | (UINT64)(h2); } case 5: // (d16, An) { - UINT32 ea = EA_AY_DI_32(); - h1 = m68ki_read_32(ea+0); - h2 = m68ki_read_32(ea+4); + UINT32 ea = EA_AY_DI_32(m68k); + h1 = m68ki_read_32(m68k, ea+0); + h2 = m68ki_read_32(m68k, ea+4); return (UINT64)(h1) << 32 | (UINT64)(h2); } case 7: @@ -327,15 +327,15 @@ static UINT64 READ_EA_64(int ea) { case 4: // #<data> { - h1 = OPER_I_32(); - h2 = OPER_I_32(); + h1 = OPER_I_32(m68k); + h2 = OPER_I_32(m68k); return (UINT64)(h1) << 32 | (UINT64)(h2); } case 2: // (d16, PC) { - UINT32 ea = EA_PCDI_32(); - h1 = m68ki_read_32(ea+0); - h2 = m68ki_read_32(ea+4); + UINT32 ea = EA_PCDI_32(m68k); + h1 = m68ki_read_32(m68k, ea+0); + h2 = m68ki_read_32(m68k, ea+4); return (UINT64)(h1) << 32 | (UINT64)(h2); } default: fatalerror("MC68040: READ_EA_64: unhandled mode %d, reg %d at %08X\n", mode, reg, REG_PC); @@ -348,7 +348,7 @@ static UINT64 READ_EA_64(int ea) return 0; } -static void WRITE_EA_64(int ea, UINT64 data) +static void WRITE_EA_64(m68ki_cpu_core *m68k, int ea, UINT64 data) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -358,8 +358,8 @@ static void WRITE_EA_64(int ea, UINT64 data) case 2: // (An) { UINT32 ea = REG_A[reg]; - m68ki_write_32(ea, (UINT32)(data >> 32)); - m68ki_write_32(ea, (UINT32)(data)); + m68ki_write_32(m68k, ea, (UINT32)(data >> 32)); + m68ki_write_32(m68k, ea, (UINT32)(data)); break; } case 4: // -(An) @@ -367,22 +367,22 @@ static void WRITE_EA_64(int ea, UINT64 data) UINT32 ea; REG_A[reg] -= 8; ea = REG_A[reg]; - m68ki_write_32(ea+0, (UINT32)(data >> 32)); - m68ki_write_32(ea+4, (UINT32)(data)); + m68ki_write_32(m68k, ea+0, (UINT32)(data >> 32)); + m68ki_write_32(m68k, ea+4, (UINT32)(data)); break; } case 5: // (d16, An) { - UINT32 ea = EA_AY_DI_32(); - m68ki_write_32(ea+0, (UINT32)(data >> 32)); - m68ki_write_32(ea+4, (UINT32)(data)); + UINT32 ea = EA_AY_DI_32(m68k); + m68ki_write_32(m68k, ea+0, (UINT32)(data >> 32)); + m68ki_write_32(m68k, ea+4, (UINT32)(data)); break; } default: fatalerror("MC68040: WRITE_EA_64: unhandled mode %d, reg %d, data %08X%08X at %08X\n", mode, reg, (UINT32)(data >> 32), (UINT32)(data), REG_PC); } } -static fp_reg READ_EA_FPE(int ea) +static fp_reg READ_EA_FPE(m68ki_cpu_core *m68k, int ea) { fp_reg r; int mode = (ea >> 3) & 0x7; @@ -397,9 +397,9 @@ static fp_reg READ_EA_FPE(int ea) UINT32 d1,d2,d3; UINT32 ea = REG_A[reg]; REG_A[reg] += 12; - d1 = m68ki_read_32(ea+0); - d2 = m68ki_read_32(ea+4); - d3 = m68ki_read_32(ea+8); + d1 = m68ki_read_32(m68k, ea+0); + d2 = m68ki_read_32(m68k, ea+4); + d3 = m68ki_read_32(m68k, ea+8); r.i = (UINT64)(d1) << 32 | (UINT64)(d2); break; } @@ -409,7 +409,7 @@ static fp_reg READ_EA_FPE(int ea) return r; } -static void WRITE_EA_FPE(int ea, fp_reg fpr) +static void WRITE_EA_FPE(m68ki_cpu_core *m68k, int ea, fp_reg fpr) { int mode = (ea >> 3) & 0x7; int reg = (ea & 0x7); @@ -423,9 +423,9 @@ static void WRITE_EA_FPE(int ea, fp_reg fpr) UINT32 ea; REG_A[reg] -= 12; ea = REG_A[reg]; - m68ki_write_32(ea+0, (UINT32)(fpr.i >> 32)); - m68ki_write_32(ea+4, (UINT32)(fpr.i)); - m68ki_write_32(ea+8, 0); + m68ki_write_32(m68k, ea+0, (UINT32)(fpr.i >> 32)); + m68ki_write_32(m68k, ea+4, (UINT32)(fpr.i)); + m68ki_write_32(m68k, ea+8, 0); break; } default: fatalerror("MC68040: WRITE_EA_FPE: unhandled mode %d, reg %d, data %f at %08X\n", mode, reg, fpr.f, REG_PC); @@ -433,7 +433,7 @@ static void WRITE_EA_FPE(int ea, fp_reg fpr) } -static void fpgen_rm_reg(UINT16 w2) +static void fpgen_rm_reg(m68ki_cpu_core *m68k, UINT16 w2) { int ea = REG_IR & 0x3f; int rm = (w2 >> 14) & 0x1; @@ -448,13 +448,13 @@ static void fpgen_rm_reg(UINT16 w2) { case 0: // Long-Word Integer { - INT32 d = READ_EA_32(ea); + INT32 d = READ_EA_32(m68k, ea); source = (double)(d); break; } case 1: // Single-precision Real { - UINT32 d = READ_EA_32(ea); + UINT32 d = READ_EA_32(m68k, ea); source = (double)(*(float*)&d); break; } @@ -470,19 +470,19 @@ static void fpgen_rm_reg(UINT16 w2) } case 4: // Word Integer { - INT16 d = READ_EA_16(ea); + INT16 d = READ_EA_16(m68k, ea); source = (double)(d); break; } case 5: // Double-precision Real { - UINT64 d = READ_EA_64(ea); + UINT64 d = READ_EA_64(m68k, ea); source = *(double*)&d; break; } case 6: // Byte Integer { - INT8 d = READ_EA_8(ea); + INT8 d = READ_EA_8(m68k, ea); source = (double)(d); break; } @@ -499,71 +499,71 @@ static void fpgen_rm_reg(UINT16 w2) case 0x00: // FMOVE { REG_FP[dst].f = source; - USE_CYCLES(4); + USE_CYCLES(m68k, 4); break; } case 0x04: // FSQRT { REG_FP[dst].f = sqrt(source); - SET_CONDITION_CODES(REG_FP[dst]); - USE_CYCLES(109); + SET_CONDITION_CODES(m68k, REG_FP[dst]); + USE_CYCLES(m68k, 109); break; } case 0x18: // FABS { REG_FP[dst].f = fabs(source); - SET_CONDITION_CODES(REG_FP[dst]); - USE_CYCLES(3); + SET_CONDITION_CODES(m68k, REG_FP[dst]); + USE_CYCLES(m68k, 3); break; } case 0x1a: // FNEG { REG_FP[dst].f = -source; - SET_CONDITION_CODES(REG_FP[dst]); - USE_CYCLES(3); + SET_CONDITION_CODES(m68k, REG_FP[dst]); + USE_CYCLES(m68k, 3); break; } case 0x20: // FDIV { REG_FP[dst].f /= source; - USE_CYCLES(43); + USE_CYCLES(m68k, 43); break; } case 0x22: // FADD { REG_FP[dst].f += source; - SET_CONDITION_CODES(REG_FP[dst]); - USE_CYCLES(9); + SET_CONDITION_CODES(m68k, REG_FP[dst]); + USE_CYCLES(m68k, 9); break; } case 0x23: // FMUL { REG_FP[dst].f *= source; - SET_CONDITION_CODES(REG_FP[dst]); - USE_CYCLES(11); + SET_CONDITION_CODES(m68k, REG_FP[dst]); + USE_CYCLES(m68k, 11); break; } case 0x28: // FSUB { REG_FP[dst].f -= source; - SET_CONDITION_CODES(REG_FP[dst]); - USE_CYCLES(9); + SET_CONDITION_CODES(m68k, REG_FP[dst]); + USE_CYCLES(m68k, 9); break; } case 0x38: // FCMP { fp_reg res; res.f = REG_FP[dst].f - source; - SET_CONDITION_CODES(res); - USE_CYCLES(7); + SET_CONDITION_CODES(m68k, res); + USE_CYCLES(m68k, 7); break; } case 0x3a: // FTST { fp_reg res; res.f = source; - SET_CONDITION_CODES(res); - USE_CYCLES(7); + SET_CONDITION_CODES(m68k, res); + USE_CYCLES(m68k, 7); break; } @@ -571,7 +571,7 @@ static void fpgen_rm_reg(UINT16 w2) } } -static void fmove_reg_mem(UINT16 w2) +static void fmove_reg_mem(m68ki_cpu_core *m68k, UINT16 w2) { int ea = REG_IR & 0x3f; int src = (w2 >> 7) & 0x7; @@ -583,14 +583,14 @@ static void fmove_reg_mem(UINT16 w2) case 0: // Long-Word Integer { INT32 d = (INT32)(REG_FP[src].f); - WRITE_EA_32(ea, d); + WRITE_EA_32(m68k, ea, d); break; } case 1: // Single-precision Real { float f = (float)(REG_FP[src].f); UINT32 d = *(UINT32 *)&f; - WRITE_EA_32(ea, d); + WRITE_EA_32(m68k, ea, d); break; } case 2: // Extended-precision Real @@ -611,7 +611,7 @@ static void fmove_reg_mem(UINT16 w2) case 5: // Double-precision Real { UINT64 d = REG_FP[src].i; - WRITE_EA_64(ea, d); + WRITE_EA_64(m68k, ea, d); break; } case 6: // Byte Integer @@ -626,10 +626,10 @@ static void fmove_reg_mem(UINT16 w2) } } - USE_CYCLES(12); + USE_CYCLES(m68k, 12); } -static void fmove_fpcr(UINT16 w2) +static void fmove_fpcr(m68ki_cpu_core *m68k, UINT16 w2) { int ea = REG_IR & 0x3f; int dir = (w2 >> 13) & 0x1; @@ -639,9 +639,9 @@ static void fmove_fpcr(UINT16 w2) { switch (reg) { - case 1: WRITE_EA_32(ea, REG_FPIAR); break; - case 2: WRITE_EA_32(ea, REG_FPSR); break; - case 4: WRITE_EA_32(ea, REG_FPCR); break; + case 1: WRITE_EA_32(m68k, ea, REG_FPIAR); break; + case 2: WRITE_EA_32(m68k, ea, REG_FPSR); break; + case 4: WRITE_EA_32(m68k, ea, REG_FPCR); break; default: fatalerror("fmove_fpcr: unknown reg %d, dir %d\n", reg, dir); } } @@ -649,17 +649,17 @@ static void fmove_fpcr(UINT16 w2) { switch (reg) { - case 1: REG_FPIAR = READ_EA_32(ea); break; - case 2: REG_FPSR = READ_EA_32(ea); break; - case 4: REG_FPCR = READ_EA_32(ea); break; + case 1: REG_FPIAR = READ_EA_32(m68k, ea); break; + case 2: REG_FPSR = READ_EA_32(m68k, ea); break; + case 4: REG_FPCR = READ_EA_32(m68k, ea); break; default: fatalerror("fmove_fpcr: unknown reg %d, dir %d\n", reg, dir); } } - USE_CYCLES(10); + USE_CYCLES(m68k, 10); } -static void fmovem(UINT16 w2) +static void fmovem(m68ki_cpu_core *m68k, UINT16 w2) { int i; int ea = REG_IR & 0x3f; @@ -677,8 +677,8 @@ static void fmovem(UINT16 w2) { if (reglist & (1 << i)) { - WRITE_EA_FPE(ea, REG_FP[i]); - USE_CYCLES(2); + WRITE_EA_FPE(m68k, ea, REG_FP[i]); + USE_CYCLES(m68k, 2); } } break; @@ -697,8 +697,8 @@ static void fmovem(UINT16 w2) { if (reglist & (1 << i)) { - REG_FP[7-i] = READ_EA_FPE(ea); - USE_CYCLES(2); + REG_FP[7-i] = READ_EA_FPE(m68k, ea); + USE_CYCLES(m68k, 2); } } break; @@ -709,74 +709,74 @@ static void fmovem(UINT16 w2) } } -static void fbcc16(void) +static void fbcc16(m68ki_cpu_core *m68k) { INT32 offset; int condition = REG_IR & 0x3f; - offset = (INT16)(OPER_I_16()); + offset = (INT16)(OPER_I_16(m68k)); // TODO: condition and jump!!! - if (TEST_CONDITION(condition)) + if (TEST_CONDITION(m68k, condition)) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_16(offset-2); + m68ki_branch_16(m68k, offset-2); } - USE_CYCLES(7); + USE_CYCLES(m68k, 7); } -static void fbcc32(void) +static void fbcc32(m68ki_cpu_core *m68k) { INT32 offset; int condition = REG_IR & 0x3f; - offset = OPER_I_32(); + offset = OPER_I_32(m68k); // TODO: condition and jump!!! - if (TEST_CONDITION(condition)) + if (TEST_CONDITION(m68k, condition)) { m68ki_trace_t0(); /* auto-disable (see m68kcpu.h) */ - m68ki_branch_32(offset-4); + m68ki_branch_32(m68k, offset-4); } - USE_CYCLES(7); + USE_CYCLES(m68k, 7); } -void m68040_fpu_op0(void) +void m68040_fpu_op0(m68ki_cpu_core *m68k) { switch ((REG_IR >> 6) & 0x3) { case 0: { - UINT16 w2 = OPER_I_16(); + UINT16 w2 = OPER_I_16(m68k); switch ((w2 >> 13) & 0x7) { case 0x0: // FPU ALU FP, FP case 0x2: // FPU ALU ea, FP { - fpgen_rm_reg(w2); + fpgen_rm_reg(m68k, w2); break; } case 0x3: // FMOVE FP, ea { - fmove_reg_mem(w2); + fmove_reg_mem(m68k, w2); break; } case 0x4: // FMOVE ea, FPCR case 0x5: // FMOVE FPCR, ea { - fmove_fpcr(w2); + fmove_fpcr(m68k, w2); break; } case 0x6: // FMOVEM ea, list case 0x7: // FMOVEM list, ea { - fmovem(w2); + fmovem(m68k, w2); break; } @@ -787,12 +787,12 @@ void m68040_fpu_op0(void) case 2: // FBcc disp16 { - fbcc16(); + fbcc16(m68k); break; } case 3: // FBcc disp32 { - fbcc32(); + fbcc32(m68k); break; } @@ -800,7 +800,7 @@ void m68040_fpu_op0(void) } } -void m68040_fpu_op1(void) +void m68040_fpu_op1(m68ki_cpu_core *m68k) { int ea = REG_IR & 0x3f; @@ -808,14 +808,14 @@ void m68040_fpu_op1(void) { case 0: // FSAVE <ea> { - WRITE_EA_32(ea, 0x00000000); + WRITE_EA_32(m68k, ea, 0x00000000); // TODO: correct state frame break; } case 1: // FRESTORE <ea> { - READ_EA_32(ea); + READ_EA_32(m68k, ea); // TODO: correct state frame break; } diff --git a/src/emu/cpu/m68000/m68kmake.c b/src/emu/cpu/m68000/m68kmake.c index ae43d725c14..1a82b5e118f 100644 --- a/src/emu/cpu/m68000/m68kmake.c +++ b/src/emu/cpu/m68000/m68kmake.c @@ -781,7 +781,7 @@ void get_base_name(char* base_name, opcode_struct* op) /* Write the name of an opcode handler function */ void write_function_name(FILE* filep, char* base_name) { - fprintf(filep, "static void %s(void)\n", base_name); + fprintf(filep, "static void %s(m68ki_cpu_core *m68k)\n", base_name); } void add_opcode_output_table_entry(opcode_struct* op, char* name) @@ -870,17 +870,17 @@ void generate_opcode_handler(FILE* filep, body_struct* body, replace_struct* rep /* Add any replace strings needed */ if(ea_mode != EA_MODE_NONE) { - sprintf(str, "EA_%s_8()", g_ea_info_table[ea_mode].ea_add); + sprintf(str, "EA_%s_8(m68k)", g_ea_info_table[ea_mode].ea_add); add_replace_string(replace, ID_OPHANDLER_EA_AY_8, str); - sprintf(str, "EA_%s_16()", g_ea_info_table[ea_mode].ea_add); + sprintf(str, "EA_%s_16(m68k)", g_ea_info_table[ea_mode].ea_add); add_replace_string(replace, ID_OPHANDLER_EA_AY_16, str); - sprintf(str, "EA_%s_32()", g_ea_info_table[ea_mode].ea_add); + sprintf(str, "EA_%s_32(m68k)", g_ea_info_table[ea_mode].ea_add); add_replace_string(replace, ID_OPHANDLER_EA_AY_32, str); - sprintf(str, "OPER_%s_8()", g_ea_info_table[ea_mode].ea_add); + sprintf(str, "OPER_%s_8(m68k)", g_ea_info_table[ea_mode].ea_add); add_replace_string(replace, ID_OPHANDLER_OPER_AY_8, str); - sprintf(str, "OPER_%s_16()", g_ea_info_table[ea_mode].ea_add); + sprintf(str, "OPER_%s_16(m68k)", g_ea_info_table[ea_mode].ea_add); add_replace_string(replace, ID_OPHANDLER_OPER_AY_16, str); - sprintf(str, "OPER_%s_32()", g_ea_info_table[ea_mode].ea_add); + sprintf(str, "OPER_%s_32(m68k)", g_ea_info_table[ea_mode].ea_add); add_replace_string(replace, ID_OPHANDLER_OPER_AY_32, str); } diff --git a/src/emu/cpu/m68000/m68kmame.c b/src/emu/cpu/m68000/m68kmame.c index b4bc9ef0dca..af0f06d02e3 100644 --- a/src/emu/cpu/m68000/m68kmame.c +++ b/src/emu/cpu/m68000/m68kmame.c @@ -1,10 +1,12 @@ #include <stdio.h> #include <stdlib.h> -#include "m68k.h" +#include "m68kcpu.h" #include "m68000.h" /* global access */ +static void *token; + m68k_memory_interface m68k_memory_intf; offs_t m68k_encrypted_opcode_start[MAX_CPU]; offs_t m68k_encrypted_opcode_end[MAX_CPU]; @@ -138,12 +140,12 @@ static const m68k_memory_interface interface_d32 = }; -static void set_irq_line(int irqline, int state) +static void set_irq_line(m68ki_cpu_core *m68k, int irqline, int state) { if (irqline == INPUT_LINE_NMI) irqline = 7; - m68k_set_virq(irqline, state == ASSERT_LINE ? 1 : 0); + m68k_set_virq(m68k, irqline, state == ASSERT_LINE ? 1 : 0); } @@ -151,18 +153,23 @@ static void set_irq_line(int irqline, int state) * 68000 section ****************************************************************************/ +static int irq_callback_frontend(void *param, int vector) +{ + return (*(int (*)(int))param)(vector); +} + static void m68000_init(int index, int clock, const void *config, int (*irqcallback)(int)) { - m68k_init(); - m68k_set_cpu_type(M68K_CPU_TYPE_68000); + m68ki_cpu_core *m68k = token = m68k_init(); + m68k_set_cpu_type(m68k, M68K_CPU_TYPE_68000); m68k_memory_intf = interface_d16; - m68k_state_register("m68000", index); - m68k_set_int_ack_callback(irqcallback); + m68k_state_register(m68k, "m68000", index); + m68k_set_int_ack_callback(m68k, irqcallback, irq_callback_frontend); } static void m68000_reset(void) { - m68k_pulse_reset(); + m68k_pulse_reset(token); } static void m68000_exit(void) @@ -172,19 +179,20 @@ static void m68000_exit(void) static int m68000_execute(int cycles) { - return m68k_execute(cycles); + return m68k_execute(token, cycles); } static void m68000_get_context(void *dst) { - m68k_get_context(dst); + if (dst) + *(void **)dst = token; } static void m68000_set_context(void *src) { if (m68k_memory_intf.read8 != program_read_byte_16be) m68k_memory_intf = interface_d16; - m68k_set_context(src); + token = *(void **)src; } static offs_t m68000_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram) @@ -200,16 +208,16 @@ static offs_t m68000_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UIN static void m68008_init(int index, int clock, const void *config, int (*irqcallback)(int)) { - m68k_init(); - m68k_set_cpu_type(M68K_CPU_TYPE_68008); + m68ki_cpu_core *m68k = token = m68k_init(); + m68k_set_cpu_type(m68k, M68K_CPU_TYPE_68008); m68k_memory_intf = interface_d8; - m68k_state_register("m68008", index); - m68k_set_int_ack_callback(irqcallback); + m68k_state_register(m68k, "m68008", index); + m68k_set_int_ack_callback(m68k, irqcallback, irq_callback_frontend); } static void m68008_reset(void) { - m68k_pulse_reset(); + m68k_pulse_reset(token); } static void m68008_exit(void) @@ -219,19 +227,20 @@ static void m68008_exit(void) static int m68008_execute(int cycles) { - return m68k_execute(cycles); + return m68k_execute(token, cycles); } static void m68008_get_context(void *dst) { - m68k_get_context(dst); + if (dst) + *(void **)dst = token; } static void m68008_set_context(void *src) { if (m68k_memory_intf.read8 != program_read_byte_8be) m68k_memory_intf = interface_d8; - m68k_set_context(src); + token = *(void **)src; } static offs_t m68008_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram) @@ -249,11 +258,11 @@ static offs_t m68008_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UIN static void m68010_init(int index, int clock, const void *config, int (*irqcallback)(int)) { - m68k_init(); - m68k_set_cpu_type(M68K_CPU_TYPE_68010); + m68ki_cpu_core *m68k = token = m68k_init(); + m68k_set_cpu_type(m68k, M68K_CPU_TYPE_68010); m68k_memory_intf = interface_d16; - m68k_state_register("m68010", index); - m68k_set_int_ack_callback(irqcallback); + m68k_state_register(m68k, "m68010", index); + m68k_set_int_ack_callback(m68k, irqcallback, irq_callback_frontend); } static offs_t m68010_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram) @@ -270,16 +279,16 @@ static offs_t m68010_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UIN static void m68020_init(int index, int clock, const void *config, int (*irqcallback)(int)) { - m68k_init(); - m68k_set_cpu_type(M68K_CPU_TYPE_68020); + m68ki_cpu_core *m68k = token = m68k_init(); + m68k_set_cpu_type(m68k, M68K_CPU_TYPE_68020); m68k_memory_intf = interface_d32; - m68k_state_register("m68020", index); - m68k_set_int_ack_callback(irqcallback); + m68k_state_register(m68k, "m68020", index); + m68k_set_int_ack_callback(m68k, irqcallback, irq_callback_frontend); } static void m68020_reset(void) { - m68k_pulse_reset(); + m68k_pulse_reset(token); } static void m68020_exit(void) @@ -289,19 +298,20 @@ static void m68020_exit(void) static int m68020_execute(int cycles) { - return m68k_execute(cycles); + return m68k_execute(token, cycles); } static void m68020_get_context(void *dst) { - m68k_get_context(dst); + if (dst) + *(void **)dst = token; } static void m68020_set_context(void *src) { if (m68k_memory_intf.read8 != program_read_byte_32be) m68k_memory_intf = interface_d32; - m68k_set_context(src); + token = *(void **)src; } static offs_t m68020_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram) @@ -318,11 +328,11 @@ static offs_t m68020_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UIN static void m68ec020_init(int index, int clock, const void *config, int (*irqcallback)(int)) { - m68k_init(); - m68k_set_cpu_type(M68K_CPU_TYPE_68EC020); + m68ki_cpu_core *m68k = token = m68k_init(); + m68k_set_cpu_type(m68k, M68K_CPU_TYPE_68EC020); m68k_memory_intf = interface_d32; - m68k_state_register("m68ec020", index); - m68k_set_int_ack_callback(irqcallback); + m68k_state_register(m68k, "m68ec020", index); + m68k_set_int_ack_callback(m68k, irqcallback, irq_callback_frontend); } static offs_t m68ec020_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram) @@ -340,16 +350,16 @@ static offs_t m68ec020_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const U static void m68040_init(int index, int clock, const void *config, int (*irqcallback)(int)) { - m68k_init(); - m68k_set_cpu_type(M68K_CPU_TYPE_68040); + m68ki_cpu_core *m68k = token = m68k_init(); + m68k_set_cpu_type(m68k, M68K_CPU_TYPE_68040); m68k_memory_intf = interface_d32; - m68k_state_register("m68040", index); - m68k_set_int_ack_callback(irqcallback); + m68k_state_register(m68k, "m68040", index); + m68k_set_int_ack_callback(m68k, irqcallback, irq_callback_frontend); } static void m68040_reset(void) { - m68k_pulse_reset(); + m68k_pulse_reset(token); } static void m68040_exit(void) @@ -359,19 +369,20 @@ static void m68040_exit(void) static int m68040_execute(int cycles) { - return m68k_execute(cycles); + return m68k_execute(token, cycles); } static void m68040_get_context(void *dst) { - m68k_get_context(dst); + if (dst) + *(void **)dst = token; } static void m68040_set_context(void *src) { if (m68k_memory_intf.read8 != program_read_byte_32be) m68k_memory_intf = interface_d32; - m68k_set_context(src); + token = *(void **)src; } static offs_t m68040_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram) @@ -388,48 +399,49 @@ static offs_t m68040_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UIN static void m68000_set_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(0, info->i); break; - case CPUINFO_INT_INPUT_STATE + 1: set_irq_line(1, info->i); break; - case CPUINFO_INT_INPUT_STATE + 2: set_irq_line(2, info->i); break; - case CPUINFO_INT_INPUT_STATE + 3: set_irq_line(3, info->i); break; - case CPUINFO_INT_INPUT_STATE + 4: set_irq_line(4, info->i); break; - case CPUINFO_INT_INPUT_STATE + 5: set_irq_line(5, info->i); break; - case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(6, info->i); break; - case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(7, info->i); break; - - case CPUINFO_INT_PC: m68k_set_reg(M68K_REG_PC, info->i&0x00ffffff); break; - case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(M68K_REG_PC, info->i); break; + case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(m68k, 0, info->i); break; + case CPUINFO_INT_INPUT_STATE + 1: set_irq_line(m68k, 1, info->i); break; + case CPUINFO_INT_INPUT_STATE + 2: set_irq_line(m68k, 2, info->i); break; + case CPUINFO_INT_INPUT_STATE + 3: set_irq_line(m68k, 3, info->i); break; + case CPUINFO_INT_INPUT_STATE + 4: set_irq_line(m68k, 4, info->i); break; + case CPUINFO_INT_INPUT_STATE + 5: set_irq_line(m68k, 5, info->i); break; + case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(m68k, 6, info->i); break; + case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(m68k, 7, info->i); break; + + case CPUINFO_INT_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i&0x00ffffff); break; + case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(M68K_REG_SP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(M68K_REG_ISP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(M68K_REG_USP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(M68K_REG_SR, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(M68K_REG_D0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(M68K_REG_D1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(M68K_REG_D2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(M68K_REG_D3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(M68K_REG_D4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(M68K_REG_D5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(M68K_REG_D6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(M68K_REG_D7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(M68K_REG_A0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(M68K_REG_A1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(M68K_REG_A2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(M68K_REG_A3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(M68K_REG_A4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(M68K_REG_A5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(M68K_REG_A6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(M68K_REG_A7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: m68k_set_reg(M68K_REG_PREF_ADDR, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(m68k, M68K_REG_SP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(m68k, M68K_REG_ISP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(m68k, M68K_REG_USP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(m68k, M68K_REG_SR, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(m68k, M68K_REG_D0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(m68k, M68K_REG_D1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(m68k, M68K_REG_D2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(m68k, M68K_REG_D3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(m68k, M68K_REG_D4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(m68k, M68K_REG_D5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(m68k, M68K_REG_D6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(m68k, M68K_REG_D7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(m68k, M68K_REG_A0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(m68k, M68K_REG_A1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(m68k, M68K_REG_A2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(m68k, M68K_REG_A3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(m68k, M68K_REG_A4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(m68k, M68K_REG_A5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(m68k, M68K_REG_A6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(m68k, M68K_REG_A7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: m68k_set_reg(m68k, M68K_REG_PREF_ADDR, info->i); break; /* --- the following bits of info are set as pointers to data or functions --- */ - case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(info->f); break; - case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback((void (*)(unsigned int,int))(info->f)); break; - case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(info->f); break; - case CPUINFO_PTR_M68K_TAS_CALLBACK: m68k_set_tas_instr_callback((int (*)(void))(info->f)); break; + case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(m68k, info->f); break; + case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback(m68k, (void (*)(unsigned int,int))(info->f)); break; + case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(m68k, info->f); break; + case CPUINFO_PTR_M68K_TAS_CALLBACK: m68k_set_tas_instr_callback(m68k, (int (*)(void))(info->f)); break; } } @@ -439,12 +451,13 @@ static void m68000_set_info(UINT32 state, cpuinfo *info) void m68000_get_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; int sr; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = m68k_get_context(NULL); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(void *); break; case CPUINFO_INT_INPUT_LINES: info->i = 8; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = -1; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -466,41 +479,41 @@ void m68000_get_info(UINT32 state, cpuinfo *info) case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_INPUT_STATE + 0: info->i = 0; /* there is no level 0 */ break; - case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(1); break; - case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(2); break; - case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(3); break; - case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(4); break; - case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(5); break; - case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(6); break; - case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(7); break; - - case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(NULL, M68K_REG_PPC); break; - - case CPUINFO_INT_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC)&0x00ffffff; break; - case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC); break; + case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(m68k, 1); break; + case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(m68k, 2); break; + case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(m68k, 3); break; + case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(m68k, 4); break; + case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(m68k, 5); break; + case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(m68k, 6); break; + case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(m68k, 7); break; + + case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(m68k, M68K_REG_PPC); break; + + case CPUINFO_INT_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC)&0x00ffffff; break; + case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(NULL, M68K_REG_SP); break; - case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(NULL, M68K_REG_ISP); break; - case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(NULL, M68K_REG_USP); break; - case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(NULL, M68K_REG_SR); break; - case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(NULL, M68K_REG_D0); break; - case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(NULL, M68K_REG_D1); break; - case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(NULL, M68K_REG_D2); break; - case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(NULL, M68K_REG_D3); break; - case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(NULL, M68K_REG_D4); break; - case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(NULL, M68K_REG_D5); break; - case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(NULL, M68K_REG_D6); break; - case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(NULL, M68K_REG_D7); break; - case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(NULL, M68K_REG_A0); break; - case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(NULL, M68K_REG_A1); break; - case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(NULL, M68K_REG_A2); break; - case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(NULL, M68K_REG_A3); break; - case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(NULL, M68K_REG_A4); break; - case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(NULL, M68K_REG_A5); break; - case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(NULL, M68K_REG_A6); break; - case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(NULL, M68K_REG_A7); break; - case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(NULL, M68K_REG_PREF_ADDR); break; - case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(NULL, M68K_REG_PREF_DATA); break; + case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(m68k, M68K_REG_SP); break; + case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(m68k, M68K_REG_ISP); break; + case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(m68k, M68K_REG_USP); break; + case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(m68k, M68K_REG_SR); break; + case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(m68k, M68K_REG_D0); break; + case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(m68k, M68K_REG_D1); break; + case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(m68k, M68K_REG_D2); break; + case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(m68k, M68K_REG_D3); break; + case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(m68k, M68K_REG_D4); break; + case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(m68k, M68K_REG_D5); break; + case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(m68k, M68K_REG_D6); break; + case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(m68k, M68K_REG_D7); break; + case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(m68k, M68K_REG_A0); break; + case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(m68k, M68K_REG_A1); break; + case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(m68k, M68K_REG_A2); break; + case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(m68k, M68K_REG_A3); break; + case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(m68k, M68K_REG_A4); break; + case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(m68k, M68K_REG_A5); break; + case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(m68k, M68K_REG_A6); break; + case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(m68k, M68K_REG_A7); break; + case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(m68k, M68K_REG_PREF_ADDR); break; + case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(m68k, M68K_REG_PREF_DATA); break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = m68000_set_info; break; @@ -512,7 +525,7 @@ void m68000_get_info(UINT32 state, cpuinfo *info) case CPUINFO_PTR_EXECUTE: info->execute = m68000_execute; break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m68000_dasm; break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k->remaining_cycles; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "68000"); break; @@ -522,7 +535,7 @@ void m68000_get_info(UINT32 state, cpuinfo *info) case CPUINFO_STR_CORE_CREDITS: strcpy(info->s, "Copyright Karl Stenerud. All rights reserved. (2.1 fixes HJB)"); break; case CPUINFO_STR_FLAGS: - sr = m68k_get_reg(NULL, M68K_REG_SR); + sr = m68k_get_reg(m68k, M68K_REG_SR); sprintf(info->s, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", sr & 0x8000 ? 'T':'.', sr & 0x4000 ? '?':'.', @@ -542,29 +555,29 @@ void m68000_get_info(UINT32 state, cpuinfo *info) sr & 0x0001 ? 'C':'.'); break; - case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(NULL, M68K_REG_PC)); break; - case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(NULL, M68K_REG_SR)); break; - case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(NULL, M68K_REG_SP)); break; - case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(NULL, M68K_REG_ISP)); break; - case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(NULL, M68K_REG_USP)); break; - case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(NULL, M68K_REG_D0)); break; - case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(NULL, M68K_REG_D1)); break; - case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(NULL, M68K_REG_D2)); break; - case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(NULL, M68K_REG_D3)); break; - case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(NULL, M68K_REG_D4)); break; - case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(NULL, M68K_REG_D5)); break; - case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(NULL, M68K_REG_D6)); break; - case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(NULL, M68K_REG_D7)); break; - case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(NULL, M68K_REG_A0)); break; - case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(NULL, M68K_REG_A1)); break; - case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(NULL, M68K_REG_A2)); break; - case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(NULL, M68K_REG_A3)); break; - case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(NULL, M68K_REG_A4)); break; - case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(NULL, M68K_REG_A5)); break; - case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(NULL, M68K_REG_A6)); break; - case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(NULL, M68K_REG_A7)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(NULL, M68K_REG_PREF_ADDR)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(NULL, M68K_REG_PREF_DATA)); break; + case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(m68k, M68K_REG_PC)); break; + case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(m68k, M68K_REG_SR)); break; + case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(m68k, M68K_REG_SP)); break; + case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(m68k, M68K_REG_ISP)); break; + case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(m68k, M68K_REG_USP)); break; + case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(m68k, M68K_REG_D0)); break; + case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(m68k, M68K_REG_D1)); break; + case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(m68k, M68K_REG_D2)); break; + case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(m68k, M68K_REG_D3)); break; + case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(m68k, M68K_REG_D4)); break; + case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(m68k, M68K_REG_D5)); break; + case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(m68k, M68K_REG_D6)); break; + case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(m68k, M68K_REG_D7)); break; + case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(m68k, M68K_REG_A0)); break; + case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(m68k, M68K_REG_A1)); break; + case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(m68k, M68K_REG_A2)); break; + case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(m68k, M68K_REG_A3)); break; + case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(m68k, M68K_REG_A4)); break; + case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(m68k, M68K_REG_A5)); break; + case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(m68k, M68K_REG_A6)); break; + case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(m68k, M68K_REG_A7)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(m68k, M68K_REG_PREF_ADDR)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(m68k, M68K_REG_PREF_DATA)); break; } } @@ -572,6 +585,7 @@ void m68000_get_info(UINT32 state, cpuinfo *info) static void m68008_set_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ @@ -584,45 +598,46 @@ static void m68008_set_info(UINT32 state, cpuinfo *info) case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(6, info->i); break; case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(7, info->i); break; - case CPUINFO_INT_PC: m68k_set_reg(M68K_REG_PC, info->i&0x00ffffff); break; - case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(M68K_REG_PC, info->i); break; + case CPUINFO_INT_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i&0x00ffffff); break; + case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(M68K_REG_SP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(M68K_REG_ISP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(M68K_REG_USP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(M68K_REG_SR, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(M68K_REG_D0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(M68K_REG_D1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(M68K_REG_D2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(M68K_REG_D3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(M68K_REG_D4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(M68K_REG_D5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(M68K_REG_D6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(M68K_REG_D7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(M68K_REG_A0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(M68K_REG_A1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(M68K_REG_A2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(M68K_REG_A3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(M68K_REG_A4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(M68K_REG_A5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(M68K_REG_A6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(M68K_REG_A7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(m68k, M68K_REG_SP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(m68k, M68K_REG_ISP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(m68k, M68K_REG_USP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(m68k, M68K_REG_SR, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(m68k, M68K_REG_D0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(m68k, M68K_REG_D1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(m68k, M68K_REG_D2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(m68k, M68K_REG_D3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(m68k, M68K_REG_D4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(m68k, M68K_REG_D5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(m68k, M68K_REG_D6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(m68k, M68K_REG_D7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(m68k, M68K_REG_A0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(m68k, M68K_REG_A1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(m68k, M68K_REG_A2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(m68k, M68K_REG_A3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(m68k, M68K_REG_A4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(m68k, M68K_REG_A5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(m68k, M68K_REG_A6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(m68k, M68K_REG_A7, info->i); break; /* --- the following bits of info are set as pointers to data or functions --- */ - case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(info->f); break; - case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback((void (*)(unsigned int,int))(info->f)); break; - case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(info->f); break; + case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(m68k, info->f); break; + case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback(m68k, (void (*)(unsigned int,int))(info->f)); break; + case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(m68k, info->f); break; } } void m68008_get_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; int sr; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = m68k_get_context(NULL); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(void *); break; case CPUINFO_INT_INPUT_LINES: info->i = 8; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = -1; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -644,41 +659,41 @@ void m68008_get_info(UINT32 state, cpuinfo *info) case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_INPUT_STATE + 0: info->i = 0; /* there is no level 0 */ break; - case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(1); break; - case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(2); break; - case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(3); break; - case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(4); break; - case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(5); break; - case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(6); break; - case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(7); break; - - case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(NULL, M68K_REG_PPC); break; - - case CPUINFO_INT_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC)&0x00ffffff; break; - case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC); break; + case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(m68k, 1); break; + case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(m68k, 2); break; + case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(m68k, 3); break; + case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(m68k, 4); break; + case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(m68k, 5); break; + case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(m68k, 6); break; + case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(m68k, 7); break; + + case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(m68k, M68K_REG_PPC); break; + + case CPUINFO_INT_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC)&0x00ffffff; break; + case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(NULL, M68K_REG_SP); break; - case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(NULL, M68K_REG_ISP); break; - case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(NULL, M68K_REG_USP); break; - case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(NULL, M68K_REG_SR); break; - case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(NULL, M68K_REG_D0); break; - case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(NULL, M68K_REG_D1); break; - case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(NULL, M68K_REG_D2); break; - case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(NULL, M68K_REG_D3); break; - case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(NULL, M68K_REG_D4); break; - case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(NULL, M68K_REG_D5); break; - case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(NULL, M68K_REG_D6); break; - case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(NULL, M68K_REG_D7); break; - case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(NULL, M68K_REG_A0); break; - case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(NULL, M68K_REG_A1); break; - case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(NULL, M68K_REG_A2); break; - case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(NULL, M68K_REG_A3); break; - case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(NULL, M68K_REG_A4); break; - case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(NULL, M68K_REG_A5); break; - case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(NULL, M68K_REG_A6); break; - case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(NULL, M68K_REG_A7); break; - case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(NULL, M68K_REG_PREF_ADDR); break; - case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(NULL, M68K_REG_PREF_DATA); break; + case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(m68k, M68K_REG_SP); break; + case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(m68k, M68K_REG_ISP); break; + case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(m68k, M68K_REG_USP); break; + case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(m68k, M68K_REG_SR); break; + case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(m68k, M68K_REG_D0); break; + case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(m68k, M68K_REG_D1); break; + case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(m68k, M68K_REG_D2); break; + case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(m68k, M68K_REG_D3); break; + case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(m68k, M68K_REG_D4); break; + case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(m68k, M68K_REG_D5); break; + case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(m68k, M68K_REG_D6); break; + case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(m68k, M68K_REG_D7); break; + case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(m68k, M68K_REG_A0); break; + case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(m68k, M68K_REG_A1); break; + case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(m68k, M68K_REG_A2); break; + case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(m68k, M68K_REG_A3); break; + case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(m68k, M68K_REG_A4); break; + case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(m68k, M68K_REG_A5); break; + case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(m68k, M68K_REG_A6); break; + case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(m68k, M68K_REG_A7); break; + case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(m68k, M68K_REG_PREF_ADDR); break; + case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(m68k, M68K_REG_PREF_DATA); break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = m68008_set_info; break; @@ -690,7 +705,7 @@ void m68008_get_info(UINT32 state, cpuinfo *info) case CPUINFO_PTR_EXECUTE: info->execute = m68008_execute; break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m68008_dasm; break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k->remaining_cycles; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "68008"); break; @@ -700,7 +715,7 @@ void m68008_get_info(UINT32 state, cpuinfo *info) case CPUINFO_STR_CORE_CREDITS: strcpy(info->s, "Copyright Karl Stenerud. All rights reserved. (2.1 fixes HJB)"); break; case CPUINFO_STR_FLAGS: - sr = m68k_get_reg(NULL, M68K_REG_SR); + sr = m68k_get_reg(m68k, M68K_REG_SR); sprintf(info->s, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", sr & 0x8000 ? 'T':'.', sr & 0x4000 ? '?':'.', @@ -720,29 +735,29 @@ void m68008_get_info(UINT32 state, cpuinfo *info) sr & 0x0001 ? 'C':'.'); break; - case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(NULL, M68K_REG_PC)); break; - case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(NULL, M68K_REG_SR)); break; - case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(NULL, M68K_REG_SP)); break; - case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(NULL, M68K_REG_ISP)); break; - case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(NULL, M68K_REG_USP)); break; - case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(NULL, M68K_REG_D0)); break; - case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(NULL, M68K_REG_D1)); break; - case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(NULL, M68K_REG_D2)); break; - case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(NULL, M68K_REG_D3)); break; - case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(NULL, M68K_REG_D4)); break; - case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(NULL, M68K_REG_D5)); break; - case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(NULL, M68K_REG_D6)); break; - case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(NULL, M68K_REG_D7)); break; - case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(NULL, M68K_REG_A0)); break; - case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(NULL, M68K_REG_A1)); break; - case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(NULL, M68K_REG_A2)); break; - case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(NULL, M68K_REG_A3)); break; - case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(NULL, M68K_REG_A4)); break; - case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(NULL, M68K_REG_A5)); break; - case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(NULL, M68K_REG_A6)); break; - case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(NULL, M68K_REG_A7)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(NULL, M68K_REG_PREF_ADDR)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(NULL, M68K_REG_PREF_DATA)); break; + case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(m68k, M68K_REG_PC)); break; + case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(m68k, M68K_REG_SR)); break; + case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(m68k, M68K_REG_SP)); break; + case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(m68k, M68K_REG_ISP)); break; + case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(m68k, M68K_REG_USP)); break; + case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(m68k, M68K_REG_D0)); break; + case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(m68k, M68K_REG_D1)); break; + case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(m68k, M68K_REG_D2)); break; + case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(m68k, M68K_REG_D3)); break; + case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(m68k, M68K_REG_D4)); break; + case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(m68k, M68K_REG_D5)); break; + case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(m68k, M68K_REG_D6)); break; + case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(m68k, M68K_REG_D7)); break; + case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(m68k, M68K_REG_A0)); break; + case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(m68k, M68K_REG_A1)); break; + case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(m68k, M68K_REG_A2)); break; + case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(m68k, M68K_REG_A3)); break; + case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(m68k, M68K_REG_A4)); break; + case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(m68k, M68K_REG_A5)); break; + case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(m68k, M68K_REG_A6)); break; + case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(m68k, M68K_REG_A7)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(m68k, M68K_REG_PREF_ADDR)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(m68k, M68K_REG_PREF_DATA)); break; } } @@ -755,12 +770,13 @@ void m68008_get_info(UINT32 state, cpuinfo *info) static void m68010_set_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_REGISTER + M68K_VBR: m68k_set_reg(M68K_REG_VBR, info->i); break; - case CPUINFO_INT_REGISTER + M68K_SFC: m68k_set_reg(M68K_REG_SFC, info->i); break; - case CPUINFO_INT_REGISTER + M68K_DFC: m68k_set_reg(M68K_REG_DFC, info->i); break; + case CPUINFO_INT_REGISTER + M68K_VBR: m68k_set_reg(m68k, M68K_REG_VBR, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SFC: m68k_set_reg(m68k, M68K_REG_SFC, info->i); break; + case CPUINFO_INT_REGISTER + M68K_DFC: m68k_set_reg(m68k, M68K_REG_DFC, info->i); break; default: m68000_set_info(state, info); break; } @@ -768,12 +784,13 @@ static void m68010_set_info(UINT32 state, cpuinfo *info) void m68010_get_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_REGISTER + M68K_VBR: info->i = m68k_get_reg(NULL, M68K_REG_VBR); break; - case CPUINFO_INT_REGISTER + M68K_SFC: info->i = m68k_get_reg(NULL, M68K_REG_SFC); break; - case CPUINFO_INT_REGISTER + M68K_DFC: info->i = m68k_get_reg(NULL, M68K_REG_DFC); break; + case CPUINFO_INT_REGISTER + M68K_VBR: info->i = m68k_get_reg(m68k, M68K_REG_VBR); break; + case CPUINFO_INT_REGISTER + M68K_SFC: info->i = m68k_get_reg(m68k, M68K_REG_SFC); break; + case CPUINFO_INT_REGISTER + M68K_DFC: info->i = m68k_get_reg(m68k, M68K_REG_DFC); break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = m68010_set_info; break; @@ -782,9 +799,9 @@ void m68010_get_info(UINT32 state, cpuinfo *info) /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "68010"); break; - case CPUINFO_STR_REGISTER + M68K_SFC: sprintf(info->s, "SFC:%X", m68k_get_reg(NULL, M68K_REG_SFC)); break; - case CPUINFO_STR_REGISTER + M68K_DFC: sprintf(info->s, "DFC:%X", m68k_get_reg(NULL, M68K_REG_DFC)); break; - case CPUINFO_STR_REGISTER + M68K_VBR: sprintf(info->s, "VBR:%08X", m68k_get_reg(NULL, M68K_REG_VBR)); break; + case CPUINFO_STR_REGISTER + M68K_SFC: sprintf(info->s, "SFC:%X", m68k_get_reg(m68k, M68K_REG_SFC)); break; + case CPUINFO_STR_REGISTER + M68K_DFC: sprintf(info->s, "DFC:%X", m68k_get_reg(m68k, M68K_REG_DFC)); break; + case CPUINFO_STR_REGISTER + M68K_VBR: sprintf(info->s, "VBR:%08X", m68k_get_reg(m68k, M68K_REG_VBR)); break; default: m68000_get_info(state, info); break; } @@ -798,63 +815,65 @@ void m68010_get_info(UINT32 state, cpuinfo *info) static void m68020_set_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(0, info->i); break; - case CPUINFO_INT_INPUT_STATE + 1: set_irq_line(1, info->i); break; - case CPUINFO_INT_INPUT_STATE + 2: set_irq_line(2, info->i); break; - case CPUINFO_INT_INPUT_STATE + 3: set_irq_line(3, info->i); break; - case CPUINFO_INT_INPUT_STATE + 4: set_irq_line(4, info->i); break; - case CPUINFO_INT_INPUT_STATE + 5: set_irq_line(5, info->i); break; - case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(6, info->i); break; - case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(7, info->i); break; - - case CPUINFO_INT_PC: m68k_set_reg(M68K_REG_PC, info->i); break; - case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(M68K_REG_PC, info->i); break; + case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(m68k, 0, info->i); break; + case CPUINFO_INT_INPUT_STATE + 1: set_irq_line(m68k, 1, info->i); break; + case CPUINFO_INT_INPUT_STATE + 2: set_irq_line(m68k, 2, info->i); break; + case CPUINFO_INT_INPUT_STATE + 3: set_irq_line(m68k, 3, info->i); break; + case CPUINFO_INT_INPUT_STATE + 4: set_irq_line(m68k, 4, info->i); break; + case CPUINFO_INT_INPUT_STATE + 5: set_irq_line(m68k, 5, info->i); break; + case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(m68k, 6, info->i); break; + case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(m68k, 7, info->i); break; + + case CPUINFO_INT_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i); break; + case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(M68K_REG_SP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(M68K_REG_ISP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(M68K_REG_USP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(M68K_REG_SR, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(M68K_REG_D0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(M68K_REG_D1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(M68K_REG_D2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(M68K_REG_D3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(M68K_REG_D4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(M68K_REG_D5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(M68K_REG_D6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(M68K_REG_D7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(M68K_REG_A0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(M68K_REG_A1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(M68K_REG_A2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(M68K_REG_A3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(M68K_REG_A4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(M68K_REG_A5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(M68K_REG_A6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(M68K_REG_A7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_MSP: m68k_set_reg(M68K_REG_MSP, info->i); break; /* 68020+ */ - case CPUINFO_INT_REGISTER + M68K_CACR: m68k_set_reg(M68K_REG_CACR, info->i); break; /* 68020+ */ - case CPUINFO_INT_REGISTER + M68K_CAAR: m68k_set_reg(M68K_REG_CAAR, info->i); break; /* 68020+ */ - case CPUINFO_INT_REGISTER + M68K_VBR: m68k_set_reg(M68K_REG_VBR, info->i); break; /* 68010+ */ - case CPUINFO_INT_REGISTER + M68K_SFC: m68k_set_reg(M68K_REG_SFC, info->i); break; /* 68010+ */ - case CPUINFO_INT_REGISTER + M68K_DFC: m68k_set_reg(M68K_REG_DFC, info->i); break; /* 68010+ */ + case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(m68k, M68K_REG_SP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(m68k, M68K_REG_ISP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(m68k, M68K_REG_USP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(m68k, M68K_REG_SR, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(m68k, M68K_REG_D0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(m68k, M68K_REG_D1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(m68k, M68K_REG_D2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(m68k, M68K_REG_D3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(m68k, M68K_REG_D4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(m68k, M68K_REG_D5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(m68k, M68K_REG_D6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(m68k, M68K_REG_D7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(m68k, M68K_REG_A0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(m68k, M68K_REG_A1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(m68k, M68K_REG_A2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(m68k, M68K_REG_A3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(m68k, M68K_REG_A4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(m68k, M68K_REG_A5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(m68k, M68K_REG_A6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(m68k, M68K_REG_A7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_MSP: m68k_set_reg(m68k, M68K_REG_MSP, info->i); break; /* 68020+ */ + case CPUINFO_INT_REGISTER + M68K_CACR: m68k_set_reg(m68k, M68K_REG_CACR, info->i); break; /* 68020+ */ + case CPUINFO_INT_REGISTER + M68K_CAAR: m68k_set_reg(m68k, M68K_REG_CAAR, info->i); break; /* 68020+ */ + case CPUINFO_INT_REGISTER + M68K_VBR: m68k_set_reg(m68k, M68K_REG_VBR, info->i); break; /* 68010+ */ + case CPUINFO_INT_REGISTER + M68K_SFC: m68k_set_reg(m68k, M68K_REG_SFC, info->i); break; /* 68010+ */ + case CPUINFO_INT_REGISTER + M68K_DFC: m68k_set_reg(m68k, M68K_REG_DFC, info->i); break; /* 68010+ */ /* --- the following bits of info are set as pointers to data or functions --- */ - case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(info->f); break; - case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback((void (*)(unsigned int,int))(info->f)); break; - case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(info->f); break; + case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(m68k, info->f); break; + case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback(m68k, (void (*)(unsigned int,int))(info->f)); break; + case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(m68k, info->f); break; } } void m68020_get_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; int sr; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = m68k_get_context(NULL); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(void *); break; case CPUINFO_INT_INPUT_LINES: info->i = 8; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = -1; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -876,47 +895,47 @@ void m68020_get_info(UINT32 state, cpuinfo *info) case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_INPUT_STATE + 0: info->i = 0; /* there is no level 0 */ break; - case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(1); break; - case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(2); break; - case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(3); break; - case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(4); break; - case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(5); break; - case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(6); break; - case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(7); break; - - case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(NULL, M68K_REG_PPC); break; - - case CPUINFO_INT_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC); break; - case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC); break; + case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(m68k, 1); break; + case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(m68k, 2); break; + case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(m68k, 3); break; + case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(m68k, 4); break; + case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(m68k, 5); break; + case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(m68k, 6); break; + case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(m68k, 7); break; + + case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(m68k, M68K_REG_PPC); break; + + case CPUINFO_INT_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC); break; + case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(NULL, M68K_REG_SP); break; - case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(NULL, M68K_REG_ISP); break; - case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(NULL, M68K_REG_USP); break; - case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(NULL, M68K_REG_SR); break; - case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(NULL, M68K_REG_D0); break; - case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(NULL, M68K_REG_D1); break; - case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(NULL, M68K_REG_D2); break; - case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(NULL, M68K_REG_D3); break; - case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(NULL, M68K_REG_D4); break; - case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(NULL, M68K_REG_D5); break; - case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(NULL, M68K_REG_D6); break; - case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(NULL, M68K_REG_D7); break; - case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(NULL, M68K_REG_A0); break; - case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(NULL, M68K_REG_A1); break; - case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(NULL, M68K_REG_A2); break; - case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(NULL, M68K_REG_A3); break; - case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(NULL, M68K_REG_A4); break; - case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(NULL, M68K_REG_A5); break; - case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(NULL, M68K_REG_A6); break; - case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(NULL, M68K_REG_A7); break; - case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(NULL, M68K_REG_PREF_ADDR); break; - case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(NULL, M68K_REG_PREF_DATA); break; - case CPUINFO_INT_REGISTER + M68K_MSP: info->i = m68k_get_reg(NULL, M68K_REG_MSP); /* 68020+ */ break; - case CPUINFO_INT_REGISTER + M68K_CACR: info->i = m68k_get_reg(NULL, M68K_REG_CACR); /* 68020+ */ break; - case CPUINFO_INT_REGISTER + M68K_CAAR: info->i = m68k_get_reg(NULL, M68K_REG_CAAR); /* 68020+ */ break; - case CPUINFO_INT_REGISTER + M68K_VBR: info->i = m68k_get_reg(NULL, M68K_REG_VBR); /* 68010+ */ break; - case CPUINFO_INT_REGISTER + M68K_SFC: info->i = m68k_get_reg(NULL, M68K_REG_SFC); /* 68010" */ break; - case CPUINFO_INT_REGISTER + M68K_DFC: info->i = m68k_get_reg(NULL, M68K_REG_DFC); /* 68010+ */ break; + case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(m68k, M68K_REG_SP); break; + case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(m68k, M68K_REG_ISP); break; + case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(m68k, M68K_REG_USP); break; + case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(m68k, M68K_REG_SR); break; + case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(m68k, M68K_REG_D0); break; + case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(m68k, M68K_REG_D1); break; + case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(m68k, M68K_REG_D2); break; + case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(m68k, M68K_REG_D3); break; + case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(m68k, M68K_REG_D4); break; + case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(m68k, M68K_REG_D5); break; + case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(m68k, M68K_REG_D6); break; + case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(m68k, M68K_REG_D7); break; + case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(m68k, M68K_REG_A0); break; + case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(m68k, M68K_REG_A1); break; + case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(m68k, M68K_REG_A2); break; + case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(m68k, M68K_REG_A3); break; + case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(m68k, M68K_REG_A4); break; + case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(m68k, M68K_REG_A5); break; + case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(m68k, M68K_REG_A6); break; + case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(m68k, M68K_REG_A7); break; + case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(m68k, M68K_REG_PREF_ADDR); break; + case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(m68k, M68K_REG_PREF_DATA); break; + case CPUINFO_INT_REGISTER + M68K_MSP: info->i = m68k_get_reg(m68k, M68K_REG_MSP); /* 68020+ */ break; + case CPUINFO_INT_REGISTER + M68K_CACR: info->i = m68k_get_reg(m68k, M68K_REG_CACR); /* 68020+ */ break; + case CPUINFO_INT_REGISTER + M68K_CAAR: info->i = m68k_get_reg(m68k, M68K_REG_CAAR); /* 68020+ */ break; + case CPUINFO_INT_REGISTER + M68K_VBR: info->i = m68k_get_reg(m68k, M68K_REG_VBR); /* 68010+ */ break; + case CPUINFO_INT_REGISTER + M68K_SFC: info->i = m68k_get_reg(m68k, M68K_REG_SFC); /* 68010" */ break; + case CPUINFO_INT_REGISTER + M68K_DFC: info->i = m68k_get_reg(m68k, M68K_REG_DFC); /* 68010+ */ break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = m68020_set_info; break; @@ -928,7 +947,7 @@ void m68020_get_info(UINT32 state, cpuinfo *info) case CPUINFO_PTR_EXECUTE: info->execute = m68020_execute; break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m68020_dasm; break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k->remaining_cycles; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "68020"); break; @@ -938,7 +957,7 @@ void m68020_get_info(UINT32 state, cpuinfo *info) case CPUINFO_STR_CORE_CREDITS: strcpy(info->s, "Copyright Karl Stenerud. All rights reserved. (2.1 fixes HJB)"); break; case CPUINFO_STR_FLAGS: - sr = m68k_get_reg(NULL, M68K_REG_SR); + sr = m68k_get_reg(m68k, M68K_REG_SR); sprintf(info->s, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", sr & 0x8000 ? 'T':'.', sr & 0x4000 ? 't':'.', @@ -958,35 +977,35 @@ void m68020_get_info(UINT32 state, cpuinfo *info) sr & 0x0001 ? 'C':'.'); break; - case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(NULL, M68K_REG_PC)); break; - case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(NULL, M68K_REG_SR)); break; - case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(NULL, M68K_REG_SP)); break; - case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(NULL, M68K_REG_ISP)); break; - case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(NULL, M68K_REG_USP)); break; - case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(NULL, M68K_REG_D0)); break; - case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(NULL, M68K_REG_D1)); break; - case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(NULL, M68K_REG_D2)); break; - case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(NULL, M68K_REG_D3)); break; - case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(NULL, M68K_REG_D4)); break; - case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(NULL, M68K_REG_D5)); break; - case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(NULL, M68K_REG_D6)); break; - case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(NULL, M68K_REG_D7)); break; - case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(NULL, M68K_REG_A0)); break; - case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(NULL, M68K_REG_A1)); break; - case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(NULL, M68K_REG_A2)); break; - case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(NULL, M68K_REG_A3)); break; - case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(NULL, M68K_REG_A4)); break; - case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(NULL, M68K_REG_A5)); break; - case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(NULL, M68K_REG_A6)); break; - case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(NULL, M68K_REG_A7)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(NULL, M68K_REG_PREF_ADDR)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(NULL, M68K_REG_PREF_DATA)); break; - case CPUINFO_STR_REGISTER + M68K_MSP: sprintf(info->s, "MSP:%08X", m68k_get_reg(NULL, M68K_REG_MSP)); break; - case CPUINFO_STR_REGISTER + M68K_CACR: sprintf(info->s, "CCR:%08X", m68k_get_reg(NULL, M68K_REG_CACR)); break; - case CPUINFO_STR_REGISTER + M68K_CAAR: sprintf(info->s, "CAR:%08X", m68k_get_reg(NULL, M68K_REG_CAAR)); break; - case CPUINFO_STR_REGISTER + M68K_SFC: sprintf(info->s, "SFC:%X", m68k_get_reg(NULL, M68K_REG_SFC)); break; - case CPUINFO_STR_REGISTER + M68K_DFC: sprintf(info->s, "DFC:%X", m68k_get_reg(NULL, M68K_REG_DFC)); break; - case CPUINFO_STR_REGISTER + M68K_VBR: sprintf(info->s, "VBR:%08X", m68k_get_reg(NULL, M68K_REG_VBR)); break; + case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(m68k, M68K_REG_PC)); break; + case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(m68k, M68K_REG_SR)); break; + case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(m68k, M68K_REG_SP)); break; + case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(m68k, M68K_REG_ISP)); break; + case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(m68k, M68K_REG_USP)); break; + case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(m68k, M68K_REG_D0)); break; + case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(m68k, M68K_REG_D1)); break; + case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(m68k, M68K_REG_D2)); break; + case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(m68k, M68K_REG_D3)); break; + case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(m68k, M68K_REG_D4)); break; + case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(m68k, M68K_REG_D5)); break; + case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(m68k, M68K_REG_D6)); break; + case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(m68k, M68K_REG_D7)); break; + case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(m68k, M68K_REG_A0)); break; + case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(m68k, M68K_REG_A1)); break; + case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(m68k, M68K_REG_A2)); break; + case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(m68k, M68K_REG_A3)); break; + case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(m68k, M68K_REG_A4)); break; + case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(m68k, M68K_REG_A5)); break; + case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(m68k, M68K_REG_A6)); break; + case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(m68k, M68K_REG_A7)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(m68k, M68K_REG_PREF_ADDR)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(m68k, M68K_REG_PREF_DATA)); break; + case CPUINFO_STR_REGISTER + M68K_MSP: sprintf(info->s, "MSP:%08X", m68k_get_reg(m68k, M68K_REG_MSP)); break; + case CPUINFO_STR_REGISTER + M68K_CACR: sprintf(info->s, "CCR:%08X", m68k_get_reg(m68k, M68K_REG_CACR)); break; + case CPUINFO_STR_REGISTER + M68K_CAAR: sprintf(info->s, "CAR:%08X", m68k_get_reg(m68k, M68K_REG_CAAR)); break; + case CPUINFO_STR_REGISTER + M68K_SFC: sprintf(info->s, "SFC:%X", m68k_get_reg(m68k, M68K_REG_SFC)); break; + case CPUINFO_STR_REGISTER + M68K_DFC: sprintf(info->s, "DFC:%X", m68k_get_reg(m68k, M68K_REG_DFC)); break; + case CPUINFO_STR_REGISTER + M68K_VBR: sprintf(info->s, "VBR:%08X", m68k_get_reg(m68k, M68K_REG_VBR)); break; } } @@ -998,10 +1017,11 @@ void m68020_get_info(UINT32 state, cpuinfo *info) static void m68ec020_set_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_PC: m68k_set_reg(M68K_REG_PC, info->i&0x00ffffff); break; + case CPUINFO_INT_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i&0x00ffffff); break; default: m68020_set_info(state, info); break; } @@ -1009,11 +1029,12 @@ static void m68ec020_set_info(UINT32 state, cpuinfo *info) void m68ec020_get_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 24; break; - case CPUINFO_INT_REGISTER + REG_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC)&0x00ffffff; break; + case CPUINFO_INT_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC)&0x00ffffff; break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = m68ec020_set_info; break; @@ -1036,63 +1057,65 @@ void m68ec020_get_info(UINT32 state, cpuinfo *info) #if HAS_M68040 static void m68040_set_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; switch (state) { /* --- the following bits of info are set as 64-bit signed integers --- */ - case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(0, info->i); break; - case CPUINFO_INT_INPUT_STATE + 1: set_irq_line(1, info->i); break; - case CPUINFO_INT_INPUT_STATE + 2: set_irq_line(2, info->i); break; - case CPUINFO_INT_INPUT_STATE + 3: set_irq_line(3, info->i); break; - case CPUINFO_INT_INPUT_STATE + 4: set_irq_line(4, info->i); break; - case CPUINFO_INT_INPUT_STATE + 5: set_irq_line(5, info->i); break; - case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(6, info->i); break; - case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(7, info->i); break; - - case CPUINFO_INT_PC: m68k_set_reg(M68K_REG_PC, info->i); break; - case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(M68K_REG_PC, info->i); break; + case CPUINFO_INT_INPUT_STATE + 0: set_irq_line(m68k, 0, info->i); break; + case CPUINFO_INT_INPUT_STATE + 1: set_irq_line(m68k, 1, info->i); break; + case CPUINFO_INT_INPUT_STATE + 2: set_irq_line(m68k, 2, info->i); break; + case CPUINFO_INT_INPUT_STATE + 3: set_irq_line(m68k, 3, info->i); break; + case CPUINFO_INT_INPUT_STATE + 4: set_irq_line(m68k, 4, info->i); break; + case CPUINFO_INT_INPUT_STATE + 5: set_irq_line(m68k, 5, info->i); break; + case CPUINFO_INT_INPUT_STATE + 6: set_irq_line(m68k, 6, info->i); break; + case CPUINFO_INT_INPUT_STATE + 7: set_irq_line(m68k, 7, info->i); break; + + case CPUINFO_INT_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i); break; + case CPUINFO_INT_REGISTER + M68K_PC: m68k_set_reg(m68k, M68K_REG_PC, info->i); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(M68K_REG_SP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(M68K_REG_ISP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(M68K_REG_USP, info->i); break; - case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(M68K_REG_SR, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(M68K_REG_D0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(M68K_REG_D1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(M68K_REG_D2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(M68K_REG_D3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(M68K_REG_D4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(M68K_REG_D5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(M68K_REG_D6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(M68K_REG_D7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(M68K_REG_A0, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(M68K_REG_A1, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(M68K_REG_A2, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(M68K_REG_A3, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(M68K_REG_A4, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(M68K_REG_A5, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(M68K_REG_A6, info->i); break; - case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(M68K_REG_A7, info->i); break; - case CPUINFO_INT_REGISTER + M68K_MSP: m68k_set_reg(M68K_REG_MSP, info->i); break; /* 68020+ */ - case CPUINFO_INT_REGISTER + M68K_CACR: m68k_set_reg(M68K_REG_CACR, info->i); break; /* 68020+ */ - case CPUINFO_INT_REGISTER + M68K_CAAR: m68k_set_reg(M68K_REG_CAAR, info->i); break; /* 68020+ */ - case CPUINFO_INT_REGISTER + M68K_VBR: m68k_set_reg(M68K_REG_VBR, info->i); break; /* 68010+ */ - case CPUINFO_INT_REGISTER + M68K_SFC: m68k_set_reg(M68K_REG_SFC, info->i); break; /* 68010+ */ - case CPUINFO_INT_REGISTER + M68K_DFC: m68k_set_reg(M68K_REG_DFC, info->i); break; /* 68010+ */ + case CPUINFO_INT_REGISTER + M68K_SP: m68k_set_reg(m68k, M68K_REG_SP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_ISP: m68k_set_reg(m68k, M68K_REG_ISP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_USP: m68k_set_reg(m68k, M68K_REG_USP, info->i); break; + case CPUINFO_INT_REGISTER + M68K_SR: m68k_set_reg(m68k, M68K_REG_SR, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D0: m68k_set_reg(m68k, M68K_REG_D0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D1: m68k_set_reg(m68k, M68K_REG_D1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D2: m68k_set_reg(m68k, M68K_REG_D2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D3: m68k_set_reg(m68k, M68K_REG_D3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D4: m68k_set_reg(m68k, M68K_REG_D4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D5: m68k_set_reg(m68k, M68K_REG_D5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D6: m68k_set_reg(m68k, M68K_REG_D6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_D7: m68k_set_reg(m68k, M68K_REG_D7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A0: m68k_set_reg(m68k, M68K_REG_A0, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A1: m68k_set_reg(m68k, M68K_REG_A1, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A2: m68k_set_reg(m68k, M68K_REG_A2, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A3: m68k_set_reg(m68k, M68K_REG_A3, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A4: m68k_set_reg(m68k, M68K_REG_A4, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A5: m68k_set_reg(m68k, M68K_REG_A5, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A6: m68k_set_reg(m68k, M68K_REG_A6, info->i); break; + case CPUINFO_INT_REGISTER + M68K_A7: m68k_set_reg(m68k, M68K_REG_A7, info->i); break; + case CPUINFO_INT_REGISTER + M68K_MSP: m68k_set_reg(m68k, M68K_REG_MSP, info->i); break; /* 68020+ */ + case CPUINFO_INT_REGISTER + M68K_CACR: m68k_set_reg(m68k, M68K_REG_CACR, info->i); break; /* 68020+ */ + case CPUINFO_INT_REGISTER + M68K_CAAR: m68k_set_reg(m68k, M68K_REG_CAAR, info->i); break; /* 68020+ */ + case CPUINFO_INT_REGISTER + M68K_VBR: m68k_set_reg(m68k, M68K_REG_VBR, info->i); break; /* 68010+ */ + case CPUINFO_INT_REGISTER + M68K_SFC: m68k_set_reg(m68k, M68K_REG_SFC, info->i); break; /* 68010+ */ + case CPUINFO_INT_REGISTER + M68K_DFC: m68k_set_reg(m68k, M68K_REG_DFC, info->i); break; /* 68010+ */ /* --- the following bits of info are set as pointers to data or functions --- */ - case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(info->f); break; - case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback((void (*)(unsigned int,int))(info->f)); break; - case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(info->f); break; + case CPUINFO_PTR_M68K_RESET_CALLBACK: m68k_set_reset_instr_callback(m68k, info->f); break; + case CPUINFO_PTR_M68K_CMPILD_CALLBACK: m68k_set_cmpild_instr_callback(m68k, (void (*)(unsigned int,int))(info->f)); break; + case CPUINFO_PTR_M68K_RTE_CALLBACK: m68k_set_rte_instr_callback(m68k, info->f); break; } } void m68040_get_info(UINT32 state, cpuinfo *info) { + m68ki_cpu_core *m68k = token; int sr; switch (state) { /* --- the following bits of info are returned as 64-bit signed integers --- */ - case CPUINFO_INT_CONTEXT_SIZE: info->i = m68k_get_context(NULL); break; + case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(void *); break; case CPUINFO_INT_INPUT_LINES: info->i = 8; break; case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = -1; break; case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_BE; break; @@ -1114,47 +1137,47 @@ void m68040_get_info(UINT32 state, cpuinfo *info) case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break; case CPUINFO_INT_INPUT_STATE + 0: info->i = 0; /* there is no level 0 */ break; - case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(1); break; - case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(2); break; - case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(3); break; - case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(4); break; - case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(5); break; - case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(6); break; - case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(7); break; - - case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(NULL, M68K_REG_PPC); break; - - case CPUINFO_INT_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC); break; - case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(NULL, M68K_REG_PC); break; + case CPUINFO_INT_INPUT_STATE + 1: info->i = m68k_get_virq(m68k, 1); break; + case CPUINFO_INT_INPUT_STATE + 2: info->i = m68k_get_virq(m68k, 2); break; + case CPUINFO_INT_INPUT_STATE + 3: info->i = m68k_get_virq(m68k, 3); break; + case CPUINFO_INT_INPUT_STATE + 4: info->i = m68k_get_virq(m68k, 4); break; + case CPUINFO_INT_INPUT_STATE + 5: info->i = m68k_get_virq(m68k, 5); break; + case CPUINFO_INT_INPUT_STATE + 6: info->i = m68k_get_virq(m68k, 6); break; + case CPUINFO_INT_INPUT_STATE + 7: info->i = m68k_get_virq(m68k, 7); break; + + case CPUINFO_INT_PREVIOUSPC: info->i = m68k_get_reg(m68k, M68K_REG_PPC); break; + + case CPUINFO_INT_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC); break; + case CPUINFO_INT_REGISTER + M68K_PC: info->i = m68k_get_reg(m68k, M68K_REG_PC); break; case CPUINFO_INT_SP: - case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(NULL, M68K_REG_SP); break; - case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(NULL, M68K_REG_ISP); break; - case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(NULL, M68K_REG_USP); break; - case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(NULL, M68K_REG_SR); break; - case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(NULL, M68K_REG_D0); break; - case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(NULL, M68K_REG_D1); break; - case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(NULL, M68K_REG_D2); break; - case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(NULL, M68K_REG_D3); break; - case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(NULL, M68K_REG_D4); break; - case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(NULL, M68K_REG_D5); break; - case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(NULL, M68K_REG_D6); break; - case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(NULL, M68K_REG_D7); break; - case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(NULL, M68K_REG_A0); break; - case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(NULL, M68K_REG_A1); break; - case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(NULL, M68K_REG_A2); break; - case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(NULL, M68K_REG_A3); break; - case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(NULL, M68K_REG_A4); break; - case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(NULL, M68K_REG_A5); break; - case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(NULL, M68K_REG_A6); break; - case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(NULL, M68K_REG_A7); break; - case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(NULL, M68K_REG_PREF_ADDR); break; - case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(NULL, M68K_REG_PREF_DATA); break; - case CPUINFO_INT_REGISTER + M68K_MSP: info->i = m68k_get_reg(NULL, M68K_REG_MSP); /* 68020+ */ break; - case CPUINFO_INT_REGISTER + M68K_CACR: info->i = m68k_get_reg(NULL, M68K_REG_CACR); /* 68020+ */ break; - case CPUINFO_INT_REGISTER + M68K_CAAR: info->i = m68k_get_reg(NULL, M68K_REG_CAAR); /* 68020+ */ break; - case CPUINFO_INT_REGISTER + M68K_VBR: info->i = m68k_get_reg(NULL, M68K_REG_VBR); /* 68010+ */ break; - case CPUINFO_INT_REGISTER + M68K_SFC: info->i = m68k_get_reg(NULL, M68K_REG_SFC); /* 68010" */ break; - case CPUINFO_INT_REGISTER + M68K_DFC: info->i = m68k_get_reg(NULL, M68K_REG_DFC); /* 68010+ */ break; + case CPUINFO_INT_REGISTER + M68K_SP: info->i = m68k_get_reg(m68k, M68K_REG_SP); break; + case CPUINFO_INT_REGISTER + M68K_ISP: info->i = m68k_get_reg(m68k, M68K_REG_ISP); break; + case CPUINFO_INT_REGISTER + M68K_USP: info->i = m68k_get_reg(m68k, M68K_REG_USP); break; + case CPUINFO_INT_REGISTER + M68K_SR: info->i = m68k_get_reg(m68k, M68K_REG_SR); break; + case CPUINFO_INT_REGISTER + M68K_D0: info->i = m68k_get_reg(m68k, M68K_REG_D0); break; + case CPUINFO_INT_REGISTER + M68K_D1: info->i = m68k_get_reg(m68k, M68K_REG_D1); break; + case CPUINFO_INT_REGISTER + M68K_D2: info->i = m68k_get_reg(m68k, M68K_REG_D2); break; + case CPUINFO_INT_REGISTER + M68K_D3: info->i = m68k_get_reg(m68k, M68K_REG_D3); break; + case CPUINFO_INT_REGISTER + M68K_D4: info->i = m68k_get_reg(m68k, M68K_REG_D4); break; + case CPUINFO_INT_REGISTER + M68K_D5: info->i = m68k_get_reg(m68k, M68K_REG_D5); break; + case CPUINFO_INT_REGISTER + M68K_D6: info->i = m68k_get_reg(m68k, M68K_REG_D6); break; + case CPUINFO_INT_REGISTER + M68K_D7: info->i = m68k_get_reg(m68k, M68K_REG_D7); break; + case CPUINFO_INT_REGISTER + M68K_A0: info->i = m68k_get_reg(m68k, M68K_REG_A0); break; + case CPUINFO_INT_REGISTER + M68K_A1: info->i = m68k_get_reg(m68k, M68K_REG_A1); break; + case CPUINFO_INT_REGISTER + M68K_A2: info->i = m68k_get_reg(m68k, M68K_REG_A2); break; + case CPUINFO_INT_REGISTER + M68K_A3: info->i = m68k_get_reg(m68k, M68K_REG_A3); break; + case CPUINFO_INT_REGISTER + M68K_A4: info->i = m68k_get_reg(m68k, M68K_REG_A4); break; + case CPUINFO_INT_REGISTER + M68K_A5: info->i = m68k_get_reg(m68k, M68K_REG_A5); break; + case CPUINFO_INT_REGISTER + M68K_A6: info->i = m68k_get_reg(m68k, M68K_REG_A6); break; + case CPUINFO_INT_REGISTER + M68K_A7: info->i = m68k_get_reg(m68k, M68K_REG_A7); break; + case CPUINFO_INT_REGISTER + M68K_PREF_ADDR: info->i = m68k_get_reg(m68k, M68K_REG_PREF_ADDR); break; + case CPUINFO_INT_REGISTER + M68K_PREF_DATA: info->i = m68k_get_reg(m68k, M68K_REG_PREF_DATA); break; + case CPUINFO_INT_REGISTER + M68K_MSP: info->i = m68k_get_reg(m68k, M68K_REG_MSP); /* 68020+ */ break; + case CPUINFO_INT_REGISTER + M68K_CACR: info->i = m68k_get_reg(m68k, M68K_REG_CACR); /* 68020+ */ break; + case CPUINFO_INT_REGISTER + M68K_CAAR: info->i = m68k_get_reg(m68k, M68K_REG_CAAR); /* 68020+ */ break; + case CPUINFO_INT_REGISTER + M68K_VBR: info->i = m68k_get_reg(m68k, M68K_REG_VBR); /* 68010+ */ break; + case CPUINFO_INT_REGISTER + M68K_SFC: info->i = m68k_get_reg(m68k, M68K_REG_SFC); /* 68010" */ break; + case CPUINFO_INT_REGISTER + M68K_DFC: info->i = m68k_get_reg(m68k, M68K_REG_DFC); /* 68010+ */ break; /* --- the following bits of info are returned as pointers to data or functions --- */ case CPUINFO_PTR_SET_INFO: info->setinfo = m68040_set_info; break; @@ -1166,7 +1189,7 @@ void m68040_get_info(UINT32 state, cpuinfo *info) case CPUINFO_PTR_EXECUTE: info->execute = m68040_execute; break; case CPUINFO_PTR_BURN: info->burn = NULL; break; case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m68040_dasm; break; - case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k_ICount; break; + case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m68k->remaining_cycles; break; /* --- the following bits of info are returned as NULL-terminated strings --- */ case CPUINFO_STR_NAME: strcpy(info->s, "68040"); break; @@ -1176,7 +1199,7 @@ void m68040_get_info(UINT32 state, cpuinfo *info) case CPUINFO_STR_CORE_CREDITS: strcpy(info->s, "Copyright Karl Stenerud. All rights reserved. (2.1 fixes HJB)"); break; case CPUINFO_STR_FLAGS: - sr = m68k_get_reg(NULL, M68K_REG_SR); + sr = m68k_get_reg(m68k, M68K_REG_SR); sprintf(info->s, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", sr & 0x8000 ? 'T':'.', sr & 0x4000 ? 't':'.', @@ -1196,35 +1219,35 @@ void m68040_get_info(UINT32 state, cpuinfo *info) sr & 0x0001 ? 'C':'.'); break; - case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(NULL, M68K_REG_PC)); break; - case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(NULL, M68K_REG_SR)); break; - case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(NULL, M68K_REG_SP)); break; - case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(NULL, M68K_REG_ISP)); break; - case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(NULL, M68K_REG_USP)); break; - case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(NULL, M68K_REG_D0)); break; - case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(NULL, M68K_REG_D1)); break; - case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(NULL, M68K_REG_D2)); break; - case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(NULL, M68K_REG_D3)); break; - case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(NULL, M68K_REG_D4)); break; - case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(NULL, M68K_REG_D5)); break; - case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(NULL, M68K_REG_D6)); break; - case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(NULL, M68K_REG_D7)); break; - case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(NULL, M68K_REG_A0)); break; - case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(NULL, M68K_REG_A1)); break; - case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(NULL, M68K_REG_A2)); break; - case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(NULL, M68K_REG_A3)); break; - case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(NULL, M68K_REG_A4)); break; - case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(NULL, M68K_REG_A5)); break; - case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(NULL, M68K_REG_A6)); break; - case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(NULL, M68K_REG_A7)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(NULL, M68K_REG_PREF_ADDR)); break; - case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(NULL, M68K_REG_PREF_DATA)); break; - case CPUINFO_STR_REGISTER + M68K_MSP: sprintf(info->s, "MSP:%08X", m68k_get_reg(NULL, M68K_REG_MSP)); break; - case CPUINFO_STR_REGISTER + M68K_CACR: sprintf(info->s, "CCR:%08X", m68k_get_reg(NULL, M68K_REG_CACR)); break; - case CPUINFO_STR_REGISTER + M68K_CAAR: sprintf(info->s, "CAR:%08X", m68k_get_reg(NULL, M68K_REG_CAAR)); break; - case CPUINFO_STR_REGISTER + M68K_SFC: sprintf(info->s, "SFC:%X", m68k_get_reg(NULL, M68K_REG_SFC)); break; - case CPUINFO_STR_REGISTER + M68K_DFC: sprintf(info->s, "DFC:%X", m68k_get_reg(NULL, M68K_REG_DFC)); break; - case CPUINFO_STR_REGISTER + M68K_VBR: sprintf(info->s, "VBR:%08X", m68k_get_reg(NULL, M68K_REG_VBR)); break; + case CPUINFO_STR_REGISTER + M68K_PC: sprintf(info->s, "PC :%08X", m68k_get_reg(m68k, M68K_REG_PC)); break; + case CPUINFO_STR_REGISTER + M68K_SR: sprintf(info->s, "SR :%04X", m68k_get_reg(m68k, M68K_REG_SR)); break; + case CPUINFO_STR_REGISTER + M68K_SP: sprintf(info->s, "SP :%08X", m68k_get_reg(m68k, M68K_REG_SP)); break; + case CPUINFO_STR_REGISTER + M68K_ISP: sprintf(info->s, "ISP:%08X", m68k_get_reg(m68k, M68K_REG_ISP)); break; + case CPUINFO_STR_REGISTER + M68K_USP: sprintf(info->s, "USP:%08X", m68k_get_reg(m68k, M68K_REG_USP)); break; + case CPUINFO_STR_REGISTER + M68K_D0: sprintf(info->s, "D0 :%08X", m68k_get_reg(m68k, M68K_REG_D0)); break; + case CPUINFO_STR_REGISTER + M68K_D1: sprintf(info->s, "D1 :%08X", m68k_get_reg(m68k, M68K_REG_D1)); break; + case CPUINFO_STR_REGISTER + M68K_D2: sprintf(info->s, "D2 :%08X", m68k_get_reg(m68k, M68K_REG_D2)); break; + case CPUINFO_STR_REGISTER + M68K_D3: sprintf(info->s, "D3 :%08X", m68k_get_reg(m68k, M68K_REG_D3)); break; + case CPUINFO_STR_REGISTER + M68K_D4: sprintf(info->s, "D4 :%08X", m68k_get_reg(m68k, M68K_REG_D4)); break; + case CPUINFO_STR_REGISTER + M68K_D5: sprintf(info->s, "D5 :%08X", m68k_get_reg(m68k, M68K_REG_D5)); break; + case CPUINFO_STR_REGISTER + M68K_D6: sprintf(info->s, "D6 :%08X", m68k_get_reg(m68k, M68K_REG_D6)); break; + case CPUINFO_STR_REGISTER + M68K_D7: sprintf(info->s, "D7 :%08X", m68k_get_reg(m68k, M68K_REG_D7)); break; + case CPUINFO_STR_REGISTER + M68K_A0: sprintf(info->s, "A0 :%08X", m68k_get_reg(m68k, M68K_REG_A0)); break; + case CPUINFO_STR_REGISTER + M68K_A1: sprintf(info->s, "A1 :%08X", m68k_get_reg(m68k, M68K_REG_A1)); break; + case CPUINFO_STR_REGISTER + M68K_A2: sprintf(info->s, "A2 :%08X", m68k_get_reg(m68k, M68K_REG_A2)); break; + case CPUINFO_STR_REGISTER + M68K_A3: sprintf(info->s, "A3 :%08X", m68k_get_reg(m68k, M68K_REG_A3)); break; + case CPUINFO_STR_REGISTER + M68K_A4: sprintf(info->s, "A4 :%08X", m68k_get_reg(m68k, M68K_REG_A4)); break; + case CPUINFO_STR_REGISTER + M68K_A5: sprintf(info->s, "A5 :%08X", m68k_get_reg(m68k, M68K_REG_A5)); break; + case CPUINFO_STR_REGISTER + M68K_A6: sprintf(info->s, "A6 :%08X", m68k_get_reg(m68k, M68K_REG_A6)); break; + case CPUINFO_STR_REGISTER + M68K_A7: sprintf(info->s, "A7 :%08X", m68k_get_reg(m68k, M68K_REG_A7)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_ADDR: sprintf(info->s, "PAR:%08X", m68k_get_reg(m68k, M68K_REG_PREF_ADDR)); break; + case CPUINFO_STR_REGISTER + M68K_PREF_DATA: sprintf(info->s, "PDA:%08X", m68k_get_reg(m68k, M68K_REG_PREF_DATA)); break; + case CPUINFO_STR_REGISTER + M68K_MSP: sprintf(info->s, "MSP:%08X", m68k_get_reg(m68k, M68K_REG_MSP)); break; + case CPUINFO_STR_REGISTER + M68K_CACR: sprintf(info->s, "CCR:%08X", m68k_get_reg(m68k, M68K_REG_CACR)); break; + case CPUINFO_STR_REGISTER + M68K_CAAR: sprintf(info->s, "CAR:%08X", m68k_get_reg(m68k, M68K_REG_CAAR)); break; + case CPUINFO_STR_REGISTER + M68K_SFC: sprintf(info->s, "SFC:%X", m68k_get_reg(m68k, M68K_REG_SFC)); break; + case CPUINFO_STR_REGISTER + M68K_DFC: sprintf(info->s, "DFC:%X", m68k_get_reg(m68k, M68K_REG_DFC)); break; + case CPUINFO_STR_REGISTER + M68K_VBR: sprintf(info->s, "VBR:%08X", m68k_get_reg(m68k, M68K_REG_VBR)); break; } } diff --git a/src/emu/cpu/m68000/m68kmame.h b/src/emu/cpu/m68000/m68kmame.h index 0d9425f302f..31b0f75c7f0 100644 --- a/src/emu/cpu/m68000/m68kmame.h +++ b/src/emu/cpu/m68000/m68kmame.h @@ -56,69 +56,66 @@ #define M68K_USE_64_BIT OPT_OFF -#define m68ki_remaining_cycles m68k_ICount - - extern m68k_memory_interface m68k_memory_intf; extern offs_t m68k_encrypted_opcode_start[MAX_CPU]; extern offs_t m68k_encrypted_opcode_end[MAX_CPU]; -#define m68k_read_memory_8(address) (*m68k_memory_intf.read8)(address) -#define m68k_read_memory_16(address) (*m68k_memory_intf.read16)(address) -#define m68k_read_memory_32(address) (*m68k_memory_intf.read32)(address) +#define m68k_read_memory_8(M, A) (*m68k_memory_intf.read8)(A) +#define m68k_read_memory_16(M, A) (*m68k_memory_intf.read16)(A) +#define m68k_read_memory_32(M, A) (*m68k_memory_intf.read32)(A) -#define m68k_read_immediate_16(address) (*m68k_memory_intf.readimm16)(address) -#define m68k_read_immediate_32(address) m68kx_read_immediate_32(address) -#define m68k_read_pcrelative_8(address) m68kx_read_pcrelative_8(address) -#define m68k_read_pcrelative_16(address) m68kx_read_pcrelative_16(address) -#define m68k_read_pcrelative_32(address) m68kx_read_pcrelative_32(address) +#define m68k_read_immediate_16(M, A) (*m68k_memory_intf.readimm16)(A) +#define m68k_read_immediate_32(M, A) m68kx_read_immediate_32(M, A) +#define m68k_read_pcrelative_8(M, A) m68kx_read_pcrelative_8(M, A) +#define m68k_read_pcrelative_16(M, A) m68kx_read_pcrelative_16(M, A) +#define m68k_read_pcrelative_32(M, A) m68kx_read_pcrelative_32(M, A) -#define m68k_read_disassembler_16(address) m68k_read_immediate_16(address) -#define m68k_read_disassembler_32(address) m68kx_read_immediate_32(address) +#define m68k_read_disassembler_16(M, A) m68k_read_immediate_16(M, A) +#define m68k_read_disassembler_32(M, A) m68kx_read_immediate_32(M, A) -#define m68k_write_memory_8(address, value) (*m68k_memory_intf.write8)(address, value) -#define m68k_write_memory_16(address, value) (*m68k_memory_intf.write16)(address, value) -#define m68k_write_memory_32(address, value) (*m68k_memory_intf.write32)(address, value) -#define m68k_write_memory_32_pd(address, value) m68kx_write_memory_32_pd(address, value) +#define m68k_write_memory_8(M, A, V) (*m68k_memory_intf.write8)(A, V) +#define m68k_write_memory_16(M, A, V) (*m68k_memory_intf.write16)(A, V) +#define m68k_write_memory_32(M, A, V) (*m68k_memory_intf.write32)(A, V) +#define m68k_write_memory_32_pd(M, A, V) m68kx_write_memory_32_pd(M, A, V) -INLINE unsigned int m68k_read_immediate_32(unsigned int address); -INLINE unsigned int m68k_read_pcrelative_8(unsigned int address); -INLINE unsigned int m68k_read_pcrelative_16(unsigned int address); -INLINE unsigned int m68k_read_pcrelative_32(unsigned int address); -INLINE void m68k_write_memory_32_pd(unsigned int address, unsigned int value); +INLINE unsigned int m68k_read_immediate_32(m68ki_cpu_core *m68k, unsigned int address); +INLINE unsigned int m68k_read_pcrelative_8(m68ki_cpu_core *m68k, unsigned int address); +INLINE unsigned int m68k_read_pcrelative_16(m68ki_cpu_core *m68k, unsigned int address); +INLINE unsigned int m68k_read_pcrelative_32(m68ki_cpu_core *m68k, unsigned int address); +INLINE void m68k_write_memory_32_pd(m68ki_cpu_core *m68k, unsigned int address, unsigned int value); -INLINE unsigned int m68kx_read_immediate_32(unsigned int address) +INLINE unsigned int m68kx_read_immediate_32(m68ki_cpu_core *m68k, unsigned int address) { - return ((m68k_read_immediate_16(address) << 16) | m68k_read_immediate_16((address)+2)); + return ((m68k_read_immediate_16(m68k, address) << 16) | m68k_read_immediate_16(m68k, (address)+2)); } -INLINE unsigned int m68kx_read_pcrelative_8(unsigned int address) +INLINE unsigned int m68kx_read_pcrelative_8(m68ki_cpu_core *m68k, unsigned int address) { if (address >= m68k_encrypted_opcode_start[cpu_getactivecpu()] && address < m68k_encrypted_opcode_end[cpu_getactivecpu()]) - return ((m68k_read_immediate_16(address&~1)>>(8*(1-(address & 1))))&0xff); + return ((m68k_read_immediate_16(m68k, address&~1)>>(8*(1-(address & 1))))&0xff); else - return m68k_read_memory_8(address); + return m68k_read_memory_8(m68k, address); } -INLINE unsigned int m68kx_read_pcrelative_16(unsigned int address) +INLINE unsigned int m68kx_read_pcrelative_16(m68ki_cpu_core *m68k, unsigned int address) { if (address >= m68k_encrypted_opcode_start[cpu_getactivecpu()] && address < m68k_encrypted_opcode_end[cpu_getactivecpu()]) - return m68k_read_immediate_16(address); + return m68k_read_immediate_16(m68k, address); else - return m68k_read_memory_16(address); + return m68k_read_memory_16(m68k, address); } -INLINE unsigned int m68kx_read_pcrelative_32(unsigned int address) +INLINE unsigned int m68kx_read_pcrelative_32(m68ki_cpu_core *m68k, unsigned int address) { if (address >= m68k_encrypted_opcode_start[cpu_getactivecpu()] && address < m68k_encrypted_opcode_end[cpu_getactivecpu()]) - return m68k_read_immediate_32(address); + return m68k_read_immediate_32(m68k, address); else - return m68k_read_memory_32(address); + return m68k_read_memory_32(m68k, address); } @@ -127,7 +124,7 @@ INLINE unsigned int m68kx_read_pcrelative_32(unsigned int address) * A real 68k first writes the high word to [address+2], and then writes the * low word to [address]. */ -INLINE void m68kx_write_memory_32_pd(unsigned int address, unsigned int value) +INLINE void m68kx_write_memory_32_pd(m68ki_cpu_core *m68k, unsigned int address, unsigned int value) { (*m68k_memory_intf.write16)(address+2, value>>16); (*m68k_memory_intf.write16)(address, value&0xffff); |