diff options
Diffstat (limited to 'src/devices/cpu/m68000/m68kcpu.cpp')
-rw-r--r-- | src/devices/cpu/m68000/m68kcpu.cpp | 124 |
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 */ |