summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m68000/m68kcpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m68000/m68kcpu.cpp')
-rw-r--r--src/devices/cpu/m68000/m68kcpu.cpp124
1 files changed, 73 insertions, 51 deletions
diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp
index c4199ecdf15..e387f946784 100644
--- a/src/devices/cpu/m68000/m68kcpu.cpp
+++ b/src/devices/cpu/m68000/m68kcpu.cpp
@@ -31,6 +31,7 @@ static const char copyright_notice[] =
#include "m68kfpu.hxx"
#include "m68kmmu.h"
+#include "m68kdasm.h"
extern void m68040_fpu_op0(m68000_base_device *m68k);
extern void m68040_fpu_op1(m68000_base_device *m68k);
@@ -1235,9 +1236,9 @@ uint16_t m68000_base_device::m68008_read_immediate_16(offs_t address)
void m68000_base_device::init8(address_space &space, address_space &ospace)
{
m_space = &space;
- m_direct = &space.direct();
+ m_direct = space.direct<0>();
m_ospace = &ospace;
- m_odirect = &ospace.direct();
+ m_odirect = ospace.direct<0>();
// m_cpustate = this;
opcode_xor = 0;
@@ -1274,9 +1275,9 @@ void m68000_base_device::m68000_write_byte(offs_t address, uint8_t data)
void m68000_base_device::init16(address_space &space, address_space &ospace)
{
m_space = &space;
- m_direct = &space.direct();
+ m_direct = space.direct<0>();
m_ospace = &ospace;
- m_odirect = &ospace.direct();
+ m_odirect = ospace.direct<0>();
opcode_xor = 0;
@@ -1301,9 +1302,9 @@ void m68000_base_device::init16(address_space &space, address_space &ospace)
void m68000_base_device::init32(address_space &space, address_space &ospace)
{
m_space = &space;
- m_direct = &space.direct();
+ m_direct = space.direct<0>();
m_ospace = &ospace;
- m_odirect = &ospace.direct();
+ m_odirect = ospace.direct<0>();
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(&m68000_base_device::read_immediate_16, this);
@@ -1520,9 +1521,9 @@ void m68000_base_device::writelong_d32_mmu(offs_t address, uint32_t data)
void m68000_base_device::init32mmu(address_space &space, address_space &ospace)
{
m_space = &space;
- m_direct = &space.direct();
+ m_direct = space.direct<0>();
m_ospace = &ospace;
- m_odirect = &ospace.direct();
+ m_odirect = ospace.direct<0>();
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(&m68000_base_device::read_immediate_16_mmu, this);
@@ -1648,9 +1649,9 @@ void m68000_base_device::writelong_d32_hmmu(offs_t address, uint32_t data)
void m68000_base_device::init32hmmu(address_space &space, address_space &ospace)
{
m_space = &space;
- m_direct = &space.direct();
+ m_direct = space.direct<0>();
m_ospace = &ospace;
- m_odirect = &ospace.direct();
+ m_odirect = ospace.direct<0>();
opcode_xor = WORD_XOR_BE(0);
readimm16 = m68k_readimm16_delegate(&m68000_base_device::read_immediate_16_hmmu, this);
@@ -1714,6 +1715,7 @@ void m68000_base_device::define_state(void)
state_add(M68K_USP, "USP", iotemp).callimport().callexport();
if (cpu_type & MASK_020_OR_LATER)
state_add(M68K_MSP, "MSP", iotemp).callimport().callexport();
+ state_add(M68K_SR, "SR", iotemp).noshow().callimport().callexport();
for (int regnum = 0; regnum < 8; regnum++) {
state_add(M68K_D0 + regnum, string_format("D%d", regnum).c_str(), dar[regnum]);
@@ -2133,80 +2135,100 @@ void m68000_base_device::init_cpu_coldfire(void)
define_state();
}
-CPU_DISASSEMBLE( dasm_m68000 )
+util::disasm_interface *m68000_base_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68000);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68000);
}
-CPU_DISASSEMBLE( dasm_m68008 )
+util::disasm_interface *m68000_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68008);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68000);
}
-CPU_DISASSEMBLE( dasm_m68010 )
+util::disasm_interface *m68301_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68010);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68000);
}
-CPU_DISASSEMBLE( dasm_m68020 )
+util::disasm_interface *m68008_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68020);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68008);
}
-CPU_DISASSEMBLE( dasm_m68030 )
+util::disasm_interface *m68008plcc_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68030);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68008);
}
-CPU_DISASSEMBLE( dasm_m68ec030 )
+util::disasm_interface *m68010_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68EC030);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68010);
}
-CPU_DISASSEMBLE( dasm_m68040 )
+util::disasm_interface *m68ec020_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68040);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68020);
}
-CPU_DISASSEMBLE( dasm_m68ec040 )
+util::disasm_interface *m68020_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68EC040);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68020);
}
-CPU_DISASSEMBLE( dasm_m68lc040 )
+util::disasm_interface *m68020fpu_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_68LC040);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68020);
}
-CPU_DISASSEMBLE( dasm_fscpu32 )
+util::disasm_interface *m68020pmmu_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_FSCPU32);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68020);
}
-CPU_DISASSEMBLE( dasm_coldfire )
+util::disasm_interface *m68020hmmu_device::create_disassembler()
{
- return m68k_disassemble_raw(stream, pc, oprom, opram, M68K_CPU_TYPE_COLDFIRE);
+ return new m68k_disassembler(m68k_disassembler::TYPE_68020);
}
-offs_t m68000_base_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68000)(this, stream, pc, oprom, opram, options); }
-offs_t m68000_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68000)(this, stream, pc, oprom, opram, options); }
-offs_t m68301_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68000)(this, stream, pc, oprom, opram, options); }
-offs_t m68008_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68008)(this, stream, pc, oprom, opram, options); }
-offs_t m68008plcc_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68008)(this, stream, pc, oprom, opram, options); }
-offs_t m68010_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68010)(this, stream, pc, oprom, opram, options); }
-offs_t m68ec020_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, stream, pc, oprom, opram, options); }
-offs_t m68020_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, stream, pc, oprom, opram, options); }
-offs_t m68020fpu_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, stream, pc, oprom, opram, options); }
-offs_t m68020pmmu_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, stream, pc, oprom, opram, options); }
-offs_t m68020hmmu_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68020)(this, stream, pc, oprom, opram, options); }
-offs_t m68ec030_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68ec030)(this, stream, pc, oprom, opram, options); }
-offs_t m68030_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68030)(this, stream, pc, oprom, opram, options); }
-offs_t m68ec040_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68ec040)(this, stream, pc, oprom, opram, options); }
-offs_t m68lc040_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68lc040)(this, stream, pc, oprom, opram, options); }
-offs_t m68040_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68040)(this, stream, pc, oprom, opram, options); }
-offs_t scc68070_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_m68000)(this, stream, pc, oprom, opram, options); }
-offs_t fscpu32_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_fscpu32)(this, stream, pc, oprom, opram, options); }
-offs_t mcf5206e_device::disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) { return CPU_DISASSEMBLE_NAME(dasm_coldfire)(this, stream, pc, oprom, opram, options); }
+util::disasm_interface *m68ec030_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68030);
+}
+
+util::disasm_interface *m68030_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68030);
+}
+
+util::disasm_interface *m68ec040_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68040);
+}
+
+util::disasm_interface *m68lc040_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68040);
+}
+
+util::disasm_interface *m68040_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68040);
+}
+
+util::disasm_interface *scc68070_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68000);
+}
+
+util::disasm_interface *fscpu32_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_68340);
+}
+
+util::disasm_interface *mcf5206e_device::create_disassembler()
+{
+ return new m68k_disassembler(m68k_disassembler::TYPE_COLDFIRE);
+}
/* Service an interrupt request and start exception processing */