summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
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
commit31ae2af798310c81b778e81b8c3753d731a809a7 (patch)
treec16d2751ef0a2466b880f8eabc34128f1407234c /src
parentcfad1bef056109099d4bc69a1dd357aadc447c62 (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.h2
-rw-r--r--src/emu/cpu/m68000/m68k.h72
-rw-r--r--src/emu/cpu/m68000/m68k_in.c1968
-rw-r--r--src/emu/cpu/m68000/m68kcpu.c271
-rw-r--r--src/emu/cpu/m68000/m68kcpu.h1129
-rw-r--r--src/emu/cpu/m68000/m68kdasm.c20
-rw-r--r--src/emu/cpu/m68000/m68kfpu.c284
-rw-r--r--src/emu/cpu/m68000/m68kmake.c14
-rw-r--r--src/emu/cpu/m68000/m68kmame.c941
-rw-r--r--src/emu/cpu/m68000/m68kmame.h65
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 = &REG_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 = &REG_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 = &REG_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 = &REG_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 = &REG_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 = &REG_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 = &REG_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);