diff options
author | 2022-09-25 19:54:31 -0400 | |
---|---|---|
committer | 2022-09-25 19:57:28 -0400 | |
commit | 7e61dc3a3dacb645de7554eadf7e43ff62b47914 (patch) | |
tree | 195bc4ac035bf85ae44f6a7c61386887680d4f5a /src | |
parent | 32ba5268e8805da1f20da7bc4b17d41c9e8ab985 (diff) |
arm: Eliminate big-endian bus variant not actually implemented until ARM6 (which is also not emulated here)
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/cpu/arm/arm.cpp | 35 | ||||
-rw-r--r-- | src/devices/cpu/arm/arm.h | 18 | ||||
-rw-r--r-- | src/tools/unidasm.cpp | 1 |
3 files changed, 12 insertions, 42 deletions
diff --git a/src/devices/cpu/arm/arm.cpp b/src/devices/cpu/arm/arm.cpp index f2d2b35c37f..8a33692fcaf 100644 --- a/src/devices/cpu/arm/arm.cpp +++ b/src/devices/cpu/arm/arm.cpp @@ -1,7 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Bryan McPhail, Phil Stroffolino /* - ARM 2/3/6 Emulation (26 bit address bus) + ARM 2/3 Emulation (26 bit address bus, no separate PSRs) Todo: - Timing - Currently very approximated, nothing relies on proper timing so far. @@ -220,8 +220,7 @@ enum /***************************************************************************/ -DEFINE_DEVICE_TYPE(ARM, arm_cpu_device, "arm_le", "ARM (little)") -DEFINE_DEVICE_TYPE(ARM_BE, arm_be_cpu_device, "arm_be", "ARM (big)") +DEFINE_DEVICE_TYPE(ARM, arm_cpu_device, "arm_cpu", "ARM") device_memory_interface::space_config_vector arm_cpu_device::memory_space_config() const @@ -232,27 +231,20 @@ device_memory_interface::space_config_vector arm_cpu_device::memory_space_config } arm_cpu_device::arm_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : arm_cpu_device(mconfig, ARM, tag, owner, clock, ENDIANNESS_LITTLE) + : arm_cpu_device(mconfig, ARM, tag, owner, clock) { } -arm_cpu_device::arm_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, endianness_t endianness) +arm_cpu_device::arm_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : cpu_device(mconfig, type, tag, owner, clock) - , m_program_config("program", endianness, 32, 26, 0) - , m_endian(endianness) + , m_program_config("program", ENDIANNESS_LITTLE, 32, 26, 0) , m_copro_type(copro_type::UNKNOWN_CP15) { std::fill(std::begin(m_sArmRegister), std::end(m_sArmRegister), 0); } -arm_be_cpu_device::arm_be_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : arm_cpu_device(mconfig, ARM_BE, tag, owner, clock, ENDIANNESS_BIG) -{ -} - - void arm_cpu_device::cpu_write32( int addr, uint32_t data ) { @@ -342,7 +334,7 @@ void arm_cpu_device::execute_run() /* load instruction */ uint32_t pc = R15; - uint32_t insn = m_pr32( pc & ADDRESS_MASK ); + uint32_t insn = m_cache.read_dword( pc & ADDRESS_MASK ); switch (insn >> INSN_COND_SHIFT) { @@ -447,10 +439,10 @@ void arm_cpu_device::arm_check_irq_state() { uint32_t pc = R15+4; /* save old pc (already incremented in pipeline) */; - /* Exception priorities (from ARM6, not specifically ARM2/3): + /* Exception priorities for ARM2/3: Reset - Data abort + Data abort or address exception FIRQ IRQ Prefetch abort @@ -496,16 +488,7 @@ void arm_cpu_device::device_start() { m_program = &space(AS_PROGRAM); - if(m_program->endianness() == ENDIANNESS_LITTLE) - { - m_program->cache(m_cachele); - m_pr32 = [this](offs_t address) -> u32 { return m_cachele.read_dword(address); }; - } - else - { - m_program->cache(m_cachebe); - m_pr32 = [this](offs_t address) -> u32 { return m_cachebe.read_dword(address); }; - } + m_program->cache(m_cache); save_item(NAME(m_sArmRegister)); save_item(NAME(m_coproRegister)); diff --git a/src/devices/cpu/arm/arm.h b/src/devices/cpu/arm/arm.h index bfa16724463..aeafa3c0d7b 100644 --- a/src/devices/cpu/arm/arm.h +++ b/src/devices/cpu/arm/arm.h @@ -41,7 +41,7 @@ protected: ARM32_IR13, ARM32_IR14, ARM32_SR13, ARM32_SR14 }; - arm_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, endianness_t endianness); + arm_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override; @@ -64,8 +64,7 @@ protected: virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; address_space_config m_program_config; - memory_access<26, 2, 0, ENDIANNESS_LITTLE>::cache m_cachele; - memory_access<26, 2, 0, ENDIANNESS_BIG>::cache m_cachebe; + memory_access<26, 2, 0, ENDIANNESS_LITTLE>::cache m_cache; int m_icount; uint32_t m_sArmRegister[27]; @@ -73,8 +72,6 @@ protected: uint8_t m_pendingIrq; uint8_t m_pendingFiq; address_space *m_program; - std::function<u32 (offs_t)> m_pr32; - endianness_t m_endian; copro_type m_copro_type; void cpu_write32( int addr, uint32_t data ); @@ -103,15 +100,6 @@ protected: }; -class arm_be_cpu_device : public arm_cpu_device -{ -public: - // construction/destruction - arm_be_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -}; - - -DECLARE_DEVICE_TYPE(ARM, arm_cpu_device) -DECLARE_DEVICE_TYPE(ARM_BE, arm_be_cpu_device) +DECLARE_DEVICE_TYPE(ARM, arm_cpu_device) #endif // MAME_CPU_ARM_ARM_H diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index 3751db851a5..e9d99c82255 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -387,7 +387,6 @@ static const dasm_table_entry dasm_table[] = { "arc", be, 0, []() -> util::disasm_interface * { return new arc_disassembler; } }, { "arcompact", le, 0, []() -> util::disasm_interface * { return new arcompact_disassembler; } }, { "arm", le, 0, []() -> util::disasm_interface * { return new arm_disassembler; } }, - { "arm_be", be, 0, []() -> util::disasm_interface * { return new arm_disassembler; } }, { "arm7", le, 0, []() -> util::disasm_interface * { arm7_unidasm.t_flag = false; return new arm7_disassembler(&arm7_unidasm); } }, { "arm7_be", be, 0, []() -> util::disasm_interface * { arm7_unidasm.t_flag = false; return new arm7_disassembler(&arm7_unidasm); } }, { "arm7thumb", le, 0, []() -> util::disasm_interface * { arm7_unidasm.t_flag = true; return new arm7_disassembler(&arm7_unidasm); } }, |