summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/i860/i860.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/i860/i860.c')
-rw-r--r--src/emu/cpu/i860/i860.c515
1 files changed, 193 insertions, 322 deletions
diff --git a/src/emu/cpu/i860/i860.c b/src/emu/cpu/i860/i860.c
index 0eb956b9b4b..0ea1be31177 100644
--- a/src/emu/cpu/i860/i860.c
+++ b/src/emu/cpu/i860/i860.c
@@ -22,349 +22,220 @@ TODO: Separate out i860XR and i860XP (make different types, etc).
#include "debugger.h"
#include "i860.h"
-/**************************************************************************
- * Functions specified by GET_INFO
- **************************************************************************/
-static CPU_INIT( i860 )
-{
- i860_state_t *cpustate = get_safe_token(device);
- cpustate->device = device;
- cpustate->program = &device->space(AS_PROGRAM);
- reset_i860(cpustate);
- i860_set_pin(device, DEC_PIN_BUS_HOLD, 0);
- i860_set_pin(device, DEC_PIN_RESET, 0);
- cpustate->single_stepping = 0;
+/* Control register numbers. */
+enum {
+ CR_FIR = 0,
+ CR_PSR = 1,
+ CR_DIRBASE = 2,
+ CR_DB = 3,
+ CR_FSR = 4,
+ CR_EPSR = 5
+};
- device->save_item(NAME(cpustate->iregs));
- device->save_item(NAME(cpustate->cregs));
- device->save_item(NAME(cpustate->frg));
- device->save_item(NAME(cpustate->pc));
-}
-static CPU_RESET( i860 )
-{
- i860_state_t *cpustate = get_safe_token(device);
- reset_i860(cpustate);
-}
+const device_type I860 = &device_creator<i860_cpu_device>;
-extern CPU_DISASSEMBLE( i860 );
-
-/**************************************************************************
- * The actual decode and execute code.
- **************************************************************************/
-#include "i860dec.c"
+i860_cpu_device::i860_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : cpu_device(mconfig, I860, "i860XR", tag, owner, clock, "i860xr", __FILE__)
+ , m_program_config("program", ENDIANNESS_LITTLE, 64, 32, 0)
+{
+}
-/**************************************************************************
- * Generic set_info/get_info
- **************************************************************************/
+void i860_cpu_device::device_start()
+{
+ m_program = &space(AS_PROGRAM);
+ reset_i860();
+ i860_set_pin(DEC_PIN_BUS_HOLD, 0);
+ i860_set_pin(DEC_PIN_RESET, 0);
+ m_single_stepping = 0;
+
+ save_item(NAME(m_iregs));
+ save_item(NAME(m_cregs));
+ save_item(NAME(m_frg));
+ save_item(NAME(m_pc));
+
+ state_add( I860_PC, "PC", m_pc).formatstr("%08X");
+ state_add( I860_FIR, "FIR", m_cregs[CR_FIR]).formatstr("%08X");
+ state_add( I860_PSR, "PSR", m_cregs[CR_PSR]).formatstr("%08X");
+ state_add( I860_DIRBASE, "DIRBASE", m_cregs[CR_DIRBASE]).formatstr("%08X");
+ state_add( I860_DB, "DB", m_cregs[CR_DB]).formatstr("%08X");
+ state_add( I860_FSR, "FSR", m_cregs[CR_FSR]).formatstr("%08X");
+ state_add( I860_EPSR, "EPSR", m_cregs[CR_EPSR]).formatstr("%08X");
+ state_add( I860_R0, "R0", m_iregs[0]).formatstr("%08X");
+ state_add( I860_R1, "R1", m_iregs[1]).formatstr("%08X");
+ state_add( I860_R2, "R2", m_iregs[2]).formatstr("%08X");
+ state_add( I860_R3, "R3", m_iregs[3]).formatstr("%08X");
+ state_add( I860_R4, "R4", m_iregs[4]).formatstr("%08X");
+ state_add( I860_R5, "R5", m_iregs[5]).formatstr("%08X");
+ state_add( I860_R6, "R6", m_iregs[6]).formatstr("%08X");
+ state_add( I860_R7, "R7", m_iregs[7]).formatstr("%08X");
+ state_add( I860_R8, "R8", m_iregs[8]).formatstr("%08X");
+ state_add( I860_R9, "R9", m_iregs[9]).formatstr("%08X");
+ state_add( I860_R10, "R10", m_iregs[10]).formatstr("%08X");
+ state_add( I860_R11, "R11", m_iregs[11]).formatstr("%08X");
+ state_add( I860_R12, "R12", m_iregs[12]).formatstr("%08X");
+ state_add( I860_R13, "R13", m_iregs[13]).formatstr("%08X");
+ state_add( I860_R14, "R14", m_iregs[14]).formatstr("%08X");
+ state_add( I860_R15, "R15", m_iregs[15]).formatstr("%08X");
+ state_add( I860_R16, "R16", m_iregs[16]).formatstr("%08X");
+ state_add( I860_R17, "R17", m_iregs[17]).formatstr("%08X");
+ state_add( I860_R18, "R18", m_iregs[18]).formatstr("%08X");
+ state_add( I860_R19, "R19", m_iregs[19]).formatstr("%08X");
+ state_add( I860_R20, "R20", m_iregs[20]).formatstr("%08X");
+ state_add( I860_R21, "R21", m_iregs[21]).formatstr("%08X");
+ state_add( I860_R22, "R22", m_iregs[22]).formatstr("%08X");
+ state_add( I860_R23, "R23", m_iregs[23]).formatstr("%08X");
+ state_add( I860_R24, "R24", m_iregs[24]).formatstr("%08X");
+ state_add( I860_R25, "R25", m_iregs[25]).formatstr("%08X");
+ state_add( I860_R26, "R26", m_iregs[26]).formatstr("%08X");
+ state_add( I860_R27, "R27", m_iregs[27]).formatstr("%08X");
+ state_add( I860_R28, "R28", m_iregs[28]).formatstr("%08X");
+ state_add( I860_R29, "R29", m_iregs[29]).formatstr("%08X");
+ state_add( I860_R30, "R30", m_iregs[30]).formatstr("%08X");
+ state_add( I860_R31, "R31", m_iregs[31]).formatstr("%08X");
+
+ state_add( I860_F0, "F0", m_freg[0]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F1, "F1", m_freg[1]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F2, "F2", m_freg[2]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F3, "F3", m_freg[3]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F4, "F4", m_freg[4]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F5, "F5", m_freg[5]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F6, "F6", m_freg[6]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F7, "F7", m_freg[7]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F8, "F8", m_freg[8]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F9, "F9", m_freg[9]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F10, "F10", m_freg[10]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F11, "F11", m_freg[11]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F12, "F12", m_freg[12]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F13, "F13", m_freg[13]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F14, "F14", m_freg[14]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F15, "F15", m_freg[15]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F16, "F16", m_freg[16]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F17, "F17", m_freg[17]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F18, "F18", m_freg[18]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F19, "F19", m_freg[19]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F20, "F20", m_freg[20]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F21, "F21", m_freg[21]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F22, "F22", m_freg[22]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F23, "F23", m_freg[23]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F24, "F24", m_freg[24]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F25, "F25", m_freg[25]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F26, "F26", m_freg[26]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F27, "F27", m_freg[27]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F28, "F28", m_freg[28]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F29, "F29", m_freg[29]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F30, "F30", m_freg[30]).callimport().callexport().formatstr("%08X");
+ state_add( I860_F31, "F31", m_freg[31]).callimport().callexport().formatstr("%08X");
+
+ state_add(STATE_GENPC, "curpc", m_pc).noshow();
+
+ m_icountptr = &m_icount;
+}
-#define CPU_SET_INFO_F(fnum) cpustate->frg[0+(4*fnum)] = (info->i & 0x000000ff); \
- cpustate->frg[1+(4*fnum)] = (info->i & 0x0000ff00) >> 8; \
- cpustate->frg[2+(4*fnum)] = (info->i & 0x00ff0000) >> 16; \
- cpustate->frg[3+(4*fnum)] = (info->i & 0xff000000) >> 24;
-static CPU_SET_INFO( i860 )
+void i860_cpu_device::state_import(const device_state_entry &entry)
{
- i860_state_t *cpustate = get_safe_token(device);
+#define I860_SET_INFO_F(fnum) m_frg[0+(4*fnum)] = (m_freg[fnum] & 0x000000ff); \
+ m_frg[1+(4*fnum)] = (m_freg[fnum] & 0x0000ff00) >> 8; \
+ m_frg[2+(4*fnum)] = (m_freg[fnum] & 0x00ff0000) >> 16; \
+ m_frg[3+(4*fnum)] = (m_freg[fnum] & 0xff000000) >> 24;
- switch(state)
+ switch (entry.index())
{
- case CPUINFO_INT_PC:
- case CPUINFO_INT_REGISTER + I860_PC: cpustate->pc = info->i & 0xffffffff; break;
-
- case CPUINFO_INT_REGISTER + I860_FIR: cpustate->cregs[CR_FIR] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_PSR: cpustate->cregs[CR_PSR] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_DIRBASE: cpustate->cregs[CR_DIRBASE] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_DB: cpustate->cregs[CR_DB] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_FSR: cpustate->cregs[CR_FSR] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_EPSR: cpustate->cregs[CR_EPSR] = info->i & 0xffffffff; break;
-
- case CPUINFO_INT_REGISTER + I860_R0: cpustate->iregs[0] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R1: cpustate->iregs[1] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R2: cpustate->iregs[2] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R3: cpustate->iregs[3] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R4: cpustate->iregs[4] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R5: cpustate->iregs[5] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R6: cpustate->iregs[6] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R7: cpustate->iregs[7] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R8: cpustate->iregs[8] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R9: cpustate->iregs[9] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R10: cpustate->iregs[10] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R11: cpustate->iregs[11] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R12: cpustate->iregs[12] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R13: cpustate->iregs[13] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R14: cpustate->iregs[14] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R15: cpustate->iregs[15] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R16: cpustate->iregs[16] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R17: cpustate->iregs[17] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R18: cpustate->iregs[18] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R19: cpustate->iregs[19] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R20: cpustate->iregs[20] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R21: cpustate->iregs[21] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R22: cpustate->iregs[22] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R23: cpustate->iregs[23] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R24: cpustate->iregs[24] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R25: cpustate->iregs[25] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R26: cpustate->iregs[26] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R27: cpustate->iregs[27] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R28: cpustate->iregs[28] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R29: cpustate->iregs[29] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R30: cpustate->iregs[30] = info->i & 0xffffffff; break;
- case CPUINFO_INT_REGISTER + I860_R31: cpustate->iregs[31] = info->i & 0xffffffff; break;
-
- case CPUINFO_INT_REGISTER + I860_F0: CPU_SET_INFO_F(0); break;
- case CPUINFO_INT_REGISTER + I860_F1: CPU_SET_INFO_F(1); break;
- case CPUINFO_INT_REGISTER + I860_F2: CPU_SET_INFO_F(2); break;
- case CPUINFO_INT_REGISTER + I860_F3: CPU_SET_INFO_F(3); break;
- case CPUINFO_INT_REGISTER + I860_F4: CPU_SET_INFO_F(4); break;
- case CPUINFO_INT_REGISTER + I860_F5: CPU_SET_INFO_F(5); break;
- case CPUINFO_INT_REGISTER + I860_F6: CPU_SET_INFO_F(6); break;
- case CPUINFO_INT_REGISTER + I860_F7: CPU_SET_INFO_F(7); break;
- case CPUINFO_INT_REGISTER + I860_F8: CPU_SET_INFO_F(8); break;
- case CPUINFO_INT_REGISTER + I860_F9: CPU_SET_INFO_F(9); break;
- case CPUINFO_INT_REGISTER + I860_F10: CPU_SET_INFO_F(10); break;
- case CPUINFO_INT_REGISTER + I860_F11: CPU_SET_INFO_F(11); break;
- case CPUINFO_INT_REGISTER + I860_F12: CPU_SET_INFO_F(12); break;
- case CPUINFO_INT_REGISTER + I860_F13: CPU_SET_INFO_F(13); break;
- case CPUINFO_INT_REGISTER + I860_F14: CPU_SET_INFO_F(14); break;
- case CPUINFO_INT_REGISTER + I860_F15: CPU_SET_INFO_F(15); break;
- case CPUINFO_INT_REGISTER + I860_F16: CPU_SET_INFO_F(16); break;
- case CPUINFO_INT_REGISTER + I860_F17: CPU_SET_INFO_F(17); break;
- case CPUINFO_INT_REGISTER + I860_F18: CPU_SET_INFO_F(18); break;
- case CPUINFO_INT_REGISTER + I860_F19: CPU_SET_INFO_F(19); break;
- case CPUINFO_INT_REGISTER + I860_F20: CPU_SET_INFO_F(20); break;
- case CPUINFO_INT_REGISTER + I860_F21: CPU_SET_INFO_F(21); break;
- case CPUINFO_INT_REGISTER + I860_F22: CPU_SET_INFO_F(22); break;
- case CPUINFO_INT_REGISTER + I860_F23: CPU_SET_INFO_F(23); break;
- case CPUINFO_INT_REGISTER + I860_F24: CPU_SET_INFO_F(24); break;
- case CPUINFO_INT_REGISTER + I860_F25: CPU_SET_INFO_F(25); break;
- case CPUINFO_INT_REGISTER + I860_F26: CPU_SET_INFO_F(26); break;
- case CPUINFO_INT_REGISTER + I860_F27: CPU_SET_INFO_F(27); break;
- case CPUINFO_INT_REGISTER + I860_F28: CPU_SET_INFO_F(28); break;
- case CPUINFO_INT_REGISTER + I860_F29: CPU_SET_INFO_F(29); break;
- case CPUINFO_INT_REGISTER + I860_F30: CPU_SET_INFO_F(30); break;
- case CPUINFO_INT_REGISTER + I860_F31: CPU_SET_INFO_F(31); break;
+ case I860_F0: I860_SET_INFO_F(0); break;
+ case I860_F1: I860_SET_INFO_F(1); break;
+ case I860_F2: I860_SET_INFO_F(2); break;
+ case I860_F3: I860_SET_INFO_F(3); break;
+ case I860_F4: I860_SET_INFO_F(4); break;
+ case I860_F5: I860_SET_INFO_F(5); break;
+ case I860_F6: I860_SET_INFO_F(6); break;
+ case I860_F7: I860_SET_INFO_F(7); break;
+ case I860_F8: I860_SET_INFO_F(8); break;
+ case I860_F9: I860_SET_INFO_F(9); break;
+ case I860_F10: I860_SET_INFO_F(10); break;
+ case I860_F11: I860_SET_INFO_F(11); break;
+ case I860_F12: I860_SET_INFO_F(12); break;
+ case I860_F13: I860_SET_INFO_F(13); break;
+ case I860_F14: I860_SET_INFO_F(14); break;
+ case I860_F15: I860_SET_INFO_F(15); break;
+ case I860_F16: I860_SET_INFO_F(16); break;
+ case I860_F17: I860_SET_INFO_F(17); break;
+ case I860_F18: I860_SET_INFO_F(18); break;
+ case I860_F19: I860_SET_INFO_F(19); break;
+ case I860_F20: I860_SET_INFO_F(20); break;
+ case I860_F21: I860_SET_INFO_F(21); break;
+ case I860_F22: I860_SET_INFO_F(22); break;
+ case I860_F23: I860_SET_INFO_F(23); break;
+ case I860_F24: I860_SET_INFO_F(24); break;
+ case I860_F25: I860_SET_INFO_F(25); break;
+ case I860_F26: I860_SET_INFO_F(26); break;
+ case I860_F27: I860_SET_INFO_F(27); break;
+ case I860_F28: I860_SET_INFO_F(28); break;
+ case I860_F29: I860_SET_INFO_F(29); break;
+ case I860_F30: I860_SET_INFO_F(30); break;
+ case I860_F31: I860_SET_INFO_F(31); break;
}
}
-#define CPU_GET_INFO_INT_F(fnum) (info->i = cpustate->frg[0+(4*fnum)] | \
- cpustate->frg[1+(4*fnum)] << 8 | \
- cpustate->frg[2+(4*fnum)] << 16 | \
- cpustate->frg[3+(4*fnum)] << 24)
-
-#define CPU_GET_INFO_STR_F(fnum) (sprintf(info->s, "F%d : %08x", fnum, cpustate->frg[0+(4*fnum)] | \
- cpustate->frg[1+(4*fnum)] << 8 | \
- cpustate->frg[2+(4*fnum)] << 16 | \
- cpustate->frg[3+(4*fnum)] << 24))
-
-CPU_GET_INFO( i860 )
+void i860_cpu_device::state_export(const device_state_entry &entry)
{
- i860_state_t *cpustate = (device != NULL && device->token() != NULL) ? get_safe_token(device) : NULL;
+#define I860_GET_INFO_F(fnum) m_freg[fnum] = m_frg[0+(4*fnum)] | ( m_frg[1+(4*fnum)] << 8 ) | ( m_frg[2+(4*fnum)] << 16 ) | ( m_frg[3+(4*fnum)] << 24)
- switch (state)
+ switch (entry.index())
{
- /* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(i860_state_t); break;
- case CPUINFO_INT_INPUT_LINES: info->i = 0; break;
- case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0x00000000; break;
- case CPUINFO_INT_ENDIANNESS: info->i = ENDIANNESS_LITTLE; break;
- case CPUINFO_INT_CLOCK_MULTIPLIER: info->i = 1; break;
- case CPUINFO_INT_CLOCK_DIVIDER: info->i = 1; break;
- case CPUINFO_INT_MIN_INSTRUCTION_BYTES: info->i = 4; break;
- case CPUINFO_INT_MAX_INSTRUCTION_BYTES: info->i = 4; break;
- case CPUINFO_INT_MIN_CYCLES: info->i = 1; break;
- case CPUINFO_INT_MAX_CYCLES: info->i = 8; break;
-
- case CPUINFO_INT_DATABUS_WIDTH + AS_PROGRAM: info->i = 64; break;
- case CPUINFO_INT_ADDRBUS_WIDTH + AS_PROGRAM: info->i = 32; break;
- case CPUINFO_INT_ADDRBUS_SHIFT + AS_PROGRAM: info->i = 0; break;
- case CPUINFO_INT_DATABUS_WIDTH + AS_DATA: info->i = 0; break;
- case CPUINFO_INT_ADDRBUS_WIDTH + AS_DATA: info->i = 0; break;
- case CPUINFO_INT_ADDRBUS_SHIFT + AS_DATA: info->i = 0; break;
- case CPUINFO_INT_DATABUS_WIDTH + AS_IO: info->i = 0; break;
- case CPUINFO_INT_ADDRBUS_WIDTH + AS_IO: info->i = 0; break;
- case CPUINFO_INT_ADDRBUS_SHIFT + AS_IO: info->i = 0; break;
-
- case CPUINFO_INT_PC:
- case CPUINFO_INT_REGISTER + I860_PC: info->i = cpustate->pc; break;
- case CPUINFO_INT_PREVIOUSPC: info->i = cpustate->ppc; break;
-
- case CPUINFO_INT_REGISTER + I860_FIR: info->i = cpustate->cregs[CR_FIR]; break;
- case CPUINFO_INT_REGISTER + I860_PSR: info->i = cpustate->cregs[CR_PSR]; break;
- case CPUINFO_INT_REGISTER + I860_DIRBASE: info->i = cpustate->cregs[CR_DIRBASE]; break;
- case CPUINFO_INT_REGISTER + I860_DB: info->i = cpustate->cregs[CR_DB]; break;
- case CPUINFO_INT_REGISTER + I860_FSR: info->i = cpustate->cregs[CR_FSR]; break;
- case CPUINFO_INT_REGISTER + I860_EPSR: info->i = cpustate->cregs[CR_EPSR]; break;
-
- case CPUINFO_INT_REGISTER + I860_R0: info->i = cpustate->iregs[0]; break;
- case CPUINFO_INT_REGISTER + I860_R1: info->i = cpustate->iregs[1]; break;
- case CPUINFO_INT_REGISTER + I860_R2: info->i = cpustate->iregs[2]; break;
- case CPUINFO_INT_REGISTER + I860_R3: info->i = cpustate->iregs[3]; break;
- case CPUINFO_INT_REGISTER + I860_R4: info->i = cpustate->iregs[4]; break;
- case CPUINFO_INT_REGISTER + I860_R5: info->i = cpustate->iregs[5]; break;
- case CPUINFO_INT_REGISTER + I860_R6: info->i = cpustate->iregs[6]; break;
- case CPUINFO_INT_REGISTER + I860_R7: info->i = cpustate->iregs[7]; break;
- case CPUINFO_INT_REGISTER + I860_R8: info->i = cpustate->iregs[8]; break;
- case CPUINFO_INT_REGISTER + I860_R9: info->i = cpustate->iregs[9]; break;
- case CPUINFO_INT_REGISTER + I860_R10: info->i = cpustate->iregs[10]; break;
- case CPUINFO_INT_REGISTER + I860_R11: info->i = cpustate->iregs[11]; break;
- case CPUINFO_INT_REGISTER + I860_R12: info->i = cpustate->iregs[12]; break;
- case CPUINFO_INT_REGISTER + I860_R13: info->i = cpustate->iregs[13]; break;
- case CPUINFO_INT_REGISTER + I860_R14: info->i = cpustate->iregs[14]; break;
- case CPUINFO_INT_REGISTER + I860_R15: info->i = cpustate->iregs[15]; break;
- case CPUINFO_INT_REGISTER + I860_R16: info->i = cpustate->iregs[16]; break;
- case CPUINFO_INT_REGISTER + I860_R17: info->i = cpustate->iregs[17]; break;
- case CPUINFO_INT_REGISTER + I860_R18: info->i = cpustate->iregs[18]; break;
- case CPUINFO_INT_REGISTER + I860_R19: info->i = cpustate->iregs[19]; break;
- case CPUINFO_INT_REGISTER + I860_R20: info->i = cpustate->iregs[20]; break;
- case CPUINFO_INT_REGISTER + I860_R21: info->i = cpustate->iregs[21]; break;
- case CPUINFO_INT_REGISTER + I860_R22: info->i = cpustate->iregs[22]; break;
- case CPUINFO_INT_REGISTER + I860_R23: info->i = cpustate->iregs[23]; break;
- case CPUINFO_INT_REGISTER + I860_R24: info->i = cpustate->iregs[24]; break;
- case CPUINFO_INT_REGISTER + I860_R25: info->i = cpustate->iregs[25]; break;
- case CPUINFO_INT_REGISTER + I860_R26: info->i = cpustate->iregs[26]; break;
- case CPUINFO_INT_REGISTER + I860_R27: info->i = cpustate->iregs[27]; break;
- case CPUINFO_INT_REGISTER + I860_R28: info->i = cpustate->iregs[28]; break;
- case CPUINFO_INT_REGISTER + I860_R29: info->i = cpustate->iregs[29]; break;
- case CPUINFO_INT_REGISTER + I860_R30: info->i = cpustate->iregs[30]; break;
- case CPUINFO_INT_REGISTER + I860_R31: info->i = cpustate->iregs[31]; break;
-
- case CPUINFO_INT_REGISTER + I860_F0: CPU_GET_INFO_INT_F(0); break;
- case CPUINFO_INT_REGISTER + I860_F1: CPU_GET_INFO_INT_F(1); break;
- case CPUINFO_INT_REGISTER + I860_F2: CPU_GET_INFO_INT_F(2); break;
- case CPUINFO_INT_REGISTER + I860_F3: CPU_GET_INFO_INT_F(3); break;
- case CPUINFO_INT_REGISTER + I860_F4: CPU_GET_INFO_INT_F(4); break;
- case CPUINFO_INT_REGISTER + I860_F5: CPU_GET_INFO_INT_F(5); break;
- case CPUINFO_INT_REGISTER + I860_F6: CPU_GET_INFO_INT_F(6); break;
- case CPUINFO_INT_REGISTER + I860_F7: CPU_GET_INFO_INT_F(7); break;
- case CPUINFO_INT_REGISTER + I860_F8: CPU_GET_INFO_INT_F(8); break;
- case CPUINFO_INT_REGISTER + I860_F9: CPU_GET_INFO_INT_F(9); break;
- case CPUINFO_INT_REGISTER + I860_F10: CPU_GET_INFO_INT_F(10); break;
- case CPUINFO_INT_REGISTER + I860_F11: CPU_GET_INFO_INT_F(11); break;
- case CPUINFO_INT_REGISTER + I860_F12: CPU_GET_INFO_INT_F(12); break;
- case CPUINFO_INT_REGISTER + I860_F13: CPU_GET_INFO_INT_F(13); break;
- case CPUINFO_INT_REGISTER + I860_F14: CPU_GET_INFO_INT_F(14); break;
- case CPUINFO_INT_REGISTER + I860_F15: CPU_GET_INFO_INT_F(15); break;
- case CPUINFO_INT_REGISTER + I860_F16: CPU_GET_INFO_INT_F(16); break;
- case CPUINFO_INT_REGISTER + I860_F17: CPU_GET_INFO_INT_F(17); break;
- case CPUINFO_INT_REGISTER + I860_F18: CPU_GET_INFO_INT_F(18); break;
- case CPUINFO_INT_REGISTER + I860_F19: CPU_GET_INFO_INT_F(19); break;
- case CPUINFO_INT_REGISTER + I860_F20: CPU_GET_INFO_INT_F(20); break;
- case CPUINFO_INT_REGISTER + I860_F21: CPU_GET_INFO_INT_F(21); break;
- case CPUINFO_INT_REGISTER + I860_F22: CPU_GET_INFO_INT_F(22); break;
- case CPUINFO_INT_REGISTER + I860_F23: CPU_GET_INFO_INT_F(23); break;
- case CPUINFO_INT_REGISTER + I860_F24: CPU_GET_INFO_INT_F(24); break;
- case CPUINFO_INT_REGISTER + I860_F25: CPU_GET_INFO_INT_F(25); break;
- case CPUINFO_INT_REGISTER + I860_F26: CPU_GET_INFO_INT_F(26); break;
- case CPUINFO_INT_REGISTER + I860_F27: CPU_GET_INFO_INT_F(27); break;
- case CPUINFO_INT_REGISTER + I860_F28: CPU_GET_INFO_INT_F(28); break;
- case CPUINFO_INT_REGISTER + I860_F29: CPU_GET_INFO_INT_F(29); break;
- case CPUINFO_INT_REGISTER + I860_F30: CPU_GET_INFO_INT_F(30); break;
- case CPUINFO_INT_REGISTER + I860_F31: CPU_GET_INFO_INT_F(31); break;
-
-
- /* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_FCT_SET_INFO: info->setinfo = CPU_SET_INFO_NAME(i860); break;
- case CPUINFO_FCT_INIT: info->init = CPU_INIT_NAME(i860); break;
- case CPUINFO_FCT_RESET: info->reset = CPU_RESET_NAME(i860); break;
- case CPUINFO_FCT_EXIT: info->exit = NULL; break;
- case CPUINFO_FCT_EXECUTE: info->execute = CPU_EXECUTE_NAME(i860); break;
- case CPUINFO_FCT_BURN: info->burn = NULL; break;
- case CPUINFO_FCT_DISASSEMBLE: info->disassemble = CPU_DISASSEMBLE_NAME(i860); break;
- case CPUINFO_FCT_DEBUG_INIT: info->debug_init = NULL; break;
- case CPUINFO_FCT_TRANSLATE: info->translate = NULL; break;
- case CPUINFO_FCT_READ: info->read = NULL; break;
- case CPUINFO_FCT_WRITE: info->write = NULL; break;
- case CPUINFO_FCT_READOP: info->readop = NULL; break;
- case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &cpustate->icount; break;
+ case I860_F0: I860_GET_INFO_F(0); break;
+ case I860_F1: I860_GET_INFO_F(1); break;
+ case I860_F2: I860_GET_INFO_F(2); break;
+ case I860_F3: I860_GET_INFO_F(3); break;
+ case I860_F4: I860_GET_INFO_F(4); break;
+ case I860_F5: I860_GET_INFO_F(5); break;
+ case I860_F6: I860_GET_INFO_F(6); break;
+ case I860_F7: I860_GET_INFO_F(7); break;
+ case I860_F8: I860_GET_INFO_F(8); break;
+ case I860_F9: I860_GET_INFO_F(9); break;
+ case I860_F10: I860_GET_INFO_F(10); break;
+ case I860_F11: I860_GET_INFO_F(11); break;
+ case I860_F12: I860_GET_INFO_F(12); break;
+ case I860_F13: I860_GET_INFO_F(13); break;
+ case I860_F14: I860_GET_INFO_F(14); break;
+ case I860_F15: I860_GET_INFO_F(15); break;
+ case I860_F16: I860_GET_INFO_F(16); break;
+ case I860_F17: I860_GET_INFO_F(17); break;
+ case I860_F18: I860_GET_INFO_F(18); break;
+ case I860_F19: I860_GET_INFO_F(19); break;
+ case I860_F20: I860_GET_INFO_F(20); break;
+ case I860_F21: I860_GET_INFO_F(21); break;
+ case I860_F22: I860_GET_INFO_F(22); break;
+ case I860_F23: I860_GET_INFO_F(23); break;
+ case I860_F24: I860_GET_INFO_F(24); break;
+ case I860_F25: I860_GET_INFO_F(25); break;
+ case I860_F26: I860_GET_INFO_F(26); break;
+ case I860_F27: I860_GET_INFO_F(27); break;
+ case I860_F28: I860_GET_INFO_F(28); break;
+ case I860_F29: I860_GET_INFO_F(29); break;
+ case I860_F30: I860_GET_INFO_F(30); break;
+ case I860_F31: I860_GET_INFO_F(31); break;
+ }
+}
- /* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "i860XR"); break;
- case CPUINFO_STR_FAMILY: strcpy(info->s, "Intel i860"); break;
- case CPUINFO_STR_VERSION: strcpy(info->s, "0.1"); break;
- case CPUINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break;
- case CPUINFO_STR_CREDITS: strcpy(info->s, "Jason Eckhardt"); break;
+void i860_cpu_device::device_reset()
+{
+ reset_i860();
+}
- case CPUINFO_STR_FLAGS:
- strcpy(info->s, ""); break;
- case CPUINFO_STR_REGISTER + I860_PC: sprintf(info->s, "PC : %08x", cpustate->pc); break;
- case CPUINFO_STR_REGISTER + I860_FIR: sprintf(info->s, "FIR : %08x", cpustate->cregs[CR_FIR]); break;
- case CPUINFO_STR_REGISTER + I860_PSR: sprintf(info->s, "PSR : %08x", cpustate->cregs[CR_PSR]); break;
- case CPUINFO_STR_REGISTER + I860_DIRBASE: sprintf(info->s, "DIRBASE : %08x", cpustate->cregs[CR_DIRBASE]);break;
- case CPUINFO_STR_REGISTER + I860_DB: sprintf(info->s, "DB : %08x", cpustate->cregs[CR_DB]); break;
- case CPUINFO_STR_REGISTER + I860_FSR: sprintf(info->s, "FSR : %08x", cpustate->cregs[CR_FSR]); break;
- case CPUINFO_STR_REGISTER + I860_EPSR: sprintf(info->s, "EPSR : %08x", cpustate->cregs[CR_EPSR]); break;
+offs_t i860_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE( i860 );
+ return CPU_DISASSEMBLE_NAME(i860)(this, buffer, pc, oprom, opram, options);
+}
- case CPUINFO_STR_REGISTER + I860_R0: sprintf(info->s, "R0 : %08x", cpustate->iregs[0]); break;
- case CPUINFO_STR_REGISTER + I860_R1: sprintf(info->s, "R1 : %08x", cpustate->iregs[1]); break;
- case CPUINFO_STR_REGISTER + I860_R2: sprintf(info->s, "R2 : %08x", cpustate->iregs[2]); break;
- case CPUINFO_STR_REGISTER + I860_R3: sprintf(info->s, "R3 : %08x", cpustate->iregs[3]); break;
- case CPUINFO_STR_REGISTER + I860_R4: sprintf(info->s, "R4 : %08x", cpustate->iregs[4]); break;
- case CPUINFO_STR_REGISTER + I860_R5: sprintf(info->s, "R5 : %08x", cpustate->iregs[5]); break;
- case CPUINFO_STR_REGISTER + I860_R6: sprintf(info->s, "R6 : %08x", cpustate->iregs[6]); break;
- case CPUINFO_STR_REGISTER + I860_R7: sprintf(info->s, "R7 : %08x", cpustate->iregs[7]); break;
- case CPUINFO_STR_REGISTER + I860_R8: sprintf(info->s, "R8 : %08x", cpustate->iregs[8]); break;
- case CPUINFO_STR_REGISTER + I860_R9: sprintf(info->s, "R9 : %08x", cpustate->iregs[9]); break;
- case CPUINFO_STR_REGISTER + I860_R10: sprintf(info->s, "R10 : %08x", cpustate->iregs[10]); break;
- case CPUINFO_STR_REGISTER + I860_R11: sprintf(info->s, "R11 : %08x", cpustate->iregs[11]); break;
- case CPUINFO_STR_REGISTER + I860_R12: sprintf(info->s, "R12 : %08x", cpustate->iregs[12]); break;
- case CPUINFO_STR_REGISTER + I860_R13: sprintf(info->s, "R13 : %08x", cpustate->iregs[13]); break;
- case CPUINFO_STR_REGISTER + I860_R14: sprintf(info->s, "R14 : %08x", cpustate->iregs[14]); break;
- case CPUINFO_STR_REGISTER + I860_R15: sprintf(info->s, "R15 : %08x", cpustate->iregs[15]); break;
- case CPUINFO_STR_REGISTER + I860_R16: sprintf(info->s, "R16 : %08x", cpustate->iregs[16]); break;
- case CPUINFO_STR_REGISTER + I860_R17: sprintf(info->s, "R17 : %08x", cpustate->iregs[17]); break;
- case CPUINFO_STR_REGISTER + I860_R18: sprintf(info->s, "R18 : %08x", cpustate->iregs[18]); break;
- case CPUINFO_STR_REGISTER + I860_R19: sprintf(info->s, "R19 : %08x", cpustate->iregs[19]); break;
- case CPUINFO_STR_REGISTER + I860_R20: sprintf(info->s, "R20 : %08x", cpustate->iregs[20]); break;
- case CPUINFO_STR_REGISTER + I860_R21: sprintf(info->s, "R21 : %08x", cpustate->iregs[21]); break;
- case CPUINFO_STR_REGISTER + I860_R22: sprintf(info->s, "R22 : %08x", cpustate->iregs[22]); break;
- case CPUINFO_STR_REGISTER + I860_R23: sprintf(info->s, "R23 : %08x", cpustate->iregs[23]); break;
- case CPUINFO_STR_REGISTER + I860_R24: sprintf(info->s, "R24 : %08x", cpustate->iregs[24]); break;
- case CPUINFO_STR_REGISTER + I860_R25: sprintf(info->s, "R25 : %08x", cpustate->iregs[25]); break;
- case CPUINFO_STR_REGISTER + I860_R26: sprintf(info->s, "R26 : %08x", cpustate->iregs[26]); break;
- case CPUINFO_STR_REGISTER + I860_R27: sprintf(info->s, "R27 : %08x", cpustate->iregs[27]); break;
- case CPUINFO_STR_REGISTER + I860_R28: sprintf(info->s, "R28 : %08x", cpustate->iregs[28]); break;
- case CPUINFO_STR_REGISTER + I860_R29: sprintf(info->s, "R29 : %08x", cpustate->iregs[29]); break;
- case CPUINFO_STR_REGISTER + I860_R30: sprintf(info->s, "R30 : %08x", cpustate->iregs[30]); break;
- case CPUINFO_STR_REGISTER + I860_R31: sprintf(info->s, "R31 : %08x", cpustate->iregs[31]); break;
- case CPUINFO_STR_REGISTER + I860_F0: CPU_GET_INFO_STR_F(0); break;
- case CPUINFO_STR_REGISTER + I860_F1: CPU_GET_INFO_STR_F(1); break;
- case CPUINFO_STR_REGISTER + I860_F2: CPU_GET_INFO_STR_F(2); break;
- case CPUINFO_STR_REGISTER + I860_F3: CPU_GET_INFO_STR_F(3); break;
- case CPUINFO_STR_REGISTER + I860_F4: CPU_GET_INFO_STR_F(4); break;
- case CPUINFO_STR_REGISTER + I860_F5: CPU_GET_INFO_STR_F(5); break;
- case CPUINFO_STR_REGISTER + I860_F6: CPU_GET_INFO_STR_F(6); break;
- case CPUINFO_STR_REGISTER + I860_F7: CPU_GET_INFO_STR_F(7); break;
- case CPUINFO_STR_REGISTER + I860_F8: CPU_GET_INFO_STR_F(8); break;
- case CPUINFO_STR_REGISTER + I860_F9: CPU_GET_INFO_STR_F(9); break;
- case CPUINFO_STR_REGISTER + I860_F10: CPU_GET_INFO_STR_F(10); break;
- case CPUINFO_STR_REGISTER + I860_F11: CPU_GET_INFO_STR_F(11); break;
- case CPUINFO_STR_REGISTER + I860_F12: CPU_GET_INFO_STR_F(12); break;
- case CPUINFO_STR_REGISTER + I860_F13: CPU_GET_INFO_STR_F(13); break;
- case CPUINFO_STR_REGISTER + I860_F14: CPU_GET_INFO_STR_F(14); break;
- case CPUINFO_STR_REGISTER + I860_F15: CPU_GET_INFO_STR_F(15); break;
- case CPUINFO_STR_REGISTER + I860_F16: CPU_GET_INFO_STR_F(16); break;
- case CPUINFO_STR_REGISTER + I860_F17: CPU_GET_INFO_STR_F(17); break;
- case CPUINFO_STR_REGISTER + I860_F18: CPU_GET_INFO_STR_F(18); break;
- case CPUINFO_STR_REGISTER + I860_F19: CPU_GET_INFO_STR_F(19); break;
- case CPUINFO_STR_REGISTER + I860_F20: CPU_GET_INFO_STR_F(20); break;
- case CPUINFO_STR_REGISTER + I860_F21: CPU_GET_INFO_STR_F(21); break;
- case CPUINFO_STR_REGISTER + I860_F22: CPU_GET_INFO_STR_F(22); break;
- case CPUINFO_STR_REGISTER + I860_F23: CPU_GET_INFO_STR_F(23); break;
- case CPUINFO_STR_REGISTER + I860_F24: CPU_GET_INFO_STR_F(24); break;
- case CPUINFO_STR_REGISTER + I860_F25: CPU_GET_INFO_STR_F(25); break;
- case CPUINFO_STR_REGISTER + I860_F26: CPU_GET_INFO_STR_F(26); break;
- case CPUINFO_STR_REGISTER + I860_F27: CPU_GET_INFO_STR_F(27); break;
- case CPUINFO_STR_REGISTER + I860_F28: CPU_GET_INFO_STR_F(28); break;
- case CPUINFO_STR_REGISTER + I860_F29: CPU_GET_INFO_STR_F(29); break;
- case CPUINFO_STR_REGISTER + I860_F30: CPU_GET_INFO_STR_F(30); break;
- case CPUINFO_STR_REGISTER + I860_F31: CPU_GET_INFO_STR_F(31); break;
- }
-}
+/**************************************************************************
+ * The actual decode and execute code.
+ **************************************************************************/
+#include "i860dec.c"
-DEFINE_LEGACY_CPU_DEVICE(I860, i860);