From dbfff24288ccf868e1901c61b5c079bb9aaeae2b Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 25 May 2020 19:42:13 +0200 Subject: [PATCH] Last memory change fixes (nw) --- src/devices/cpu/m6502/m6502.cpp | 18 ++++++++++--- src/devices/cpu/m6502/m6502.h | 12 +++++++-- src/devices/cpu/m6502/m6504.cpp | 27 -------------------- src/devices/cpu/m6502/m6504.h | 12 --------- src/devices/cpu/m6502/m6507.cpp | 27 -------------------- src/devices/cpu/m6502/m6507.h | 12 --------- src/emu/emumem.cpp | 8 +++--- src/emu/emumem.h | 6 ++--- src/osd/modules/debugger/qt/memorywindow.cpp | 10 ++++---- src/osd/modules/debugger/qt/windowqt.cpp | 1 + 10 files changed, 38 insertions(+), 95 deletions(-) diff --git a/src/devices/cpu/m6502/m6502.cpp b/src/devices/cpu/m6502/m6502.cpp index f3b09d4de78..58ab7f7b313 100644 --- a/src/devices/cpu/m6502/m6502.cpp +++ b/src/devices/cpu/m6502/m6502.cpp @@ -37,16 +37,19 @@ m6502_device::m6502_device(const machine_config &mconfig, device_type type, cons void m6502_device::device_start() { - mintf = std::make_unique(); + mintf = space(AS_PROGRAM).addr_width() > 14 ? std::make_unique() : std::make_unique(); init(); } void m6502_device::init() -{ +{ space(AS_PROGRAM).cache(mintf->cprogram); - space(AS_PROGRAM).specific(mintf->program); space(has_space(AS_OPCODES) ? AS_OPCODES : AS_PROGRAM).cache(mintf->csprogram); + if(space(AS_PROGRAM).addr_width() > 14) + space(AS_PROGRAM).specific(mintf->program); + else + space(AS_PROGRAM).specific(mintf->program14); sync_w.resolve_safe(); @@ -544,6 +547,15 @@ void m6502_device::mi_default::write(uint16_t adr, uint8_t val) program.write_byte(adr, val); } +uint8_t m6502_device::mi_default14::read(uint16_t adr) +{ + return program14.read_byte(adr); +} + +void m6502_device::mi_default14::write(uint16_t adr, uint8_t val) +{ + program14.write_byte(adr, val); +} m6502_mcu_device::m6502_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : m6502_device(mconfig, type, tag, owner, clock) diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h index c7a0390971a..413925efa0d 100644 --- a/src/devices/cpu/m6502/m6502.h +++ b/src/devices/cpu/m6502/m6502.h @@ -35,8 +35,9 @@ protected: public: memory_access<16, 0, 0, ENDIANNESS_LITTLE>::cache cprogram, csprogram; memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific program; + memory_access<14, 0, 0, ENDIANNESS_LITTLE>::specific program14; - virtual ~memory_interface() {} + virtual ~memory_interface() = default; virtual uint8_t read(uint16_t adr) = 0; virtual uint8_t read_9(uint16_t adr); virtual uint8_t read_sync(uint16_t adr) = 0; @@ -47,13 +48,20 @@ protected: class mi_default : public memory_interface { public: - virtual ~mi_default() {} + virtual ~mi_default() = default; virtual uint8_t read(uint16_t adr) override; virtual uint8_t read_sync(uint16_t adr) override; virtual uint8_t read_arg(uint16_t adr) override; virtual void write(uint16_t adr, uint8_t val) override; }; + class mi_default14 : public mi_default { + public: + virtual ~mi_default14() = default; + virtual uint8_t read(uint16_t adr) override; + virtual void write(uint16_t adr, uint8_t val) override; + }; + enum { STATE_RESET = 0xff00 }; diff --git a/src/devices/cpu/m6502/m6504.cpp b/src/devices/cpu/m6502/m6504.cpp index 98fba662e60..51859f178f5 100644 --- a/src/devices/cpu/m6502/m6504.cpp +++ b/src/devices/cpu/m6502/m6504.cpp @@ -19,30 +19,3 @@ m6504_device::m6504_device(const machine_config &mconfig, const char *tag, devic program_config.m_addr_width = 13; sprogram_config.m_addr_width = 13; } - -void m6504_device::device_start() -{ - mintf = std::make_unique(); - - init(); -} - -uint8_t m6504_device::mi_6504::read(uint16_t adr) -{ - return program.read_byte(adr & 0x1fff); -} - -uint8_t m6504_device::mi_6504::read_sync(uint16_t adr) -{ - return csprogram.read_byte(adr & 0x1fff); -} - -uint8_t m6504_device::mi_6504::read_arg(uint16_t adr) -{ - return cprogram.read_byte(adr & 0x1fff); -} - -void m6504_device::mi_6504::write(uint16_t adr, uint8_t val) -{ - program.write_byte(adr & 0x1fff, val); -} diff --git a/src/devices/cpu/m6502/m6504.h b/src/devices/cpu/m6502/m6504.h index fa2d81edc4c..bf4dee43a76 100644 --- a/src/devices/cpu/m6502/m6504.h +++ b/src/devices/cpu/m6502/m6504.h @@ -16,18 +16,6 @@ class m6504_device : public m6502_device { public: m6504_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - class mi_6504 : public memory_interface { - public: - virtual ~mi_6504() {} - virtual uint8_t read(uint16_t adr) override; - virtual uint8_t read_sync(uint16_t adr) override; - virtual uint8_t read_arg(uint16_t adr) override; - virtual void write(uint16_t adr, uint8_t val) override; - }; - - virtual void device_start() override; }; diff --git a/src/devices/cpu/m6502/m6507.cpp b/src/devices/cpu/m6502/m6507.cpp index a42aff44c2f..7a102e4b110 100644 --- a/src/devices/cpu/m6502/m6507.cpp +++ b/src/devices/cpu/m6502/m6507.cpp @@ -19,30 +19,3 @@ m6507_device::m6507_device(const machine_config &mconfig, const char *tag, devic program_config.m_addr_width = 13; sprogram_config.m_addr_width = 13; } - -void m6507_device::device_start() -{ - mintf = std::make_unique(); - - init(); -} - -uint8_t m6507_device::mi_6507::read(uint16_t adr) -{ - return program.read_byte(adr & 0x1fff); -} - -uint8_t m6507_device::mi_6507::read_sync(uint16_t adr) -{ - return csprogram.read_byte(adr & 0x1fff); -} - -uint8_t m6507_device::mi_6507::read_arg(uint16_t adr) -{ - return cprogram.read_byte(adr & 0x1fff); -} - -void m6507_device::mi_6507::write(uint16_t adr, uint8_t val) -{ - program.write_byte(adr & 0x1fff, val); -} diff --git a/src/devices/cpu/m6502/m6507.h b/src/devices/cpu/m6502/m6507.h index 4dee57d288f..50466608d2a 100644 --- a/src/devices/cpu/m6502/m6507.h +++ b/src/devices/cpu/m6502/m6507.h @@ -16,18 +16,6 @@ class m6507_device : public m6502_device { public: m6507_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - -protected: - class mi_6507 : public memory_interface { - public: - virtual ~mi_6507() {} - virtual uint8_t read(uint16_t adr) override; - virtual uint8_t read_sync(uint16_t adr) override; - virtual uint8_t read_arg(uint16_t adr) override; - virtual void write(uint16_t adr, uint8_t val) override; - }; - - virtual void device_start() override; }; diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index e48b13d9a51..7a46ba7c039 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -599,25 +599,25 @@ public: // native read NativeType read_native(offs_t offset, NativeType mask) { - return dispatch_read(m_addrmask, offset, mask, m_dispatch_read);; + return dispatch_read(offs_t(-1), offset & m_addrmask, mask, m_dispatch_read);; } // mask-less native read NativeType read_native(offs_t offset) { - return dispatch_read(m_addrmask, offset, uX(0xffffffffffffffffU), m_dispatch_read); + return dispatch_read(offs_t(-1), offset & m_addrmask, uX(0xffffffffffffffffU), m_dispatch_read); } // native write void write_native(offs_t offset, NativeType data, NativeType mask) { - dispatch_write(m_addrmask, offset, data, mask, m_dispatch_write);; + dispatch_write(offs_t(-1), offset & m_addrmask, data, mask, m_dispatch_write);; } // mask-less native write void write_native(offs_t offset, NativeType data) { - dispatch_write(m_addrmask, offset, data, uX(0xffffffffffffffffU), m_dispatch_write);; + dispatch_write(offs_t(-1), offset & m_addrmask, data, uX(0xffffffffffffffffU), m_dispatch_write);; } // virtual access to these functions diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 4554bea5ed6..7767a03846f 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -1053,11 +1053,11 @@ private: const handler_entry_write *const *m_dispatch_write; NativeType read_native(offs_t address, NativeType mask = ~NativeType(0)) { - return dispatch_read(m_addrmask, address, mask, m_dispatch_read);; + return dispatch_read(offs_t(-1), address & m_addrmask, mask, m_dispatch_read);; } void write_native(offs_t address, NativeType data, NativeType mask = ~NativeType(0)) { - dispatch_write(m_addrmask, address, data, mask, m_dispatch_write);; + dispatch_write(offs_t(-1), address & m_addrmask, data, mask, m_dispatch_write);; } void set(address_space *space, std::pair rw); @@ -1272,7 +1272,7 @@ public: template void specific(emu::detail::memory_access_specific &v) { if(Level != emu::detail::handler_entry_dispatch_level(m_config.addr_width())) - fatalerror("Requesting specific() with wrong level, bad address witdh (the config says %d\n", m_config.addr_width()); + fatalerror("Requesting specific() with wrong level, bad address width (the config says %d)\n", m_config.addr_width()); if(AddrShift != m_config.addr_shift()) fatalerror("Requesting specific() with address shift %d while the config says %d\n", AddrShift, m_config.addr_shift()); if(8 << Width != m_config.data_width()) diff --git a/src/osd/modules/debugger/qt/memorywindow.cpp b/src/osd/modules/debugger/qt/memorywindow.cpp index bead6af0cef..fd86d240f2c 100644 --- a/src/osd/modules/debugger/qt/memorywindow.cpp +++ b/src/osd/modules/debugger/qt/memorywindow.cpp @@ -355,7 +355,7 @@ void DebuggerMemView::mousePressEvent(QMouseEvent* event) const offs_t address = memView->addressAtCursorPosition(clickViewPosition); const debug_view_memory_source* source = downcast(memView->source()); address_space* addressSpace = source->space(); - offs_t a = address & space->logaddrmask(); + offs_t a = address & addressSpace->logaddrmask(); if (!addressSpace->device().memory().translate(addressSpace->spacenum(), TRANSLATE_READ_DEBUG, a)) { QToolTip::showText(QCursor::pos(), "Bad address", nullptr); @@ -367,19 +367,19 @@ void DebuggerMemView::mousePressEvent(QMouseEvent* event) switch (addressSpace->data_width()) { case 8: - memValue = space->read_byte(a); + memValue = addressSpace->read_byte(a); break; case 16: - memValue = space->read_word_unaligned(a); + memValue = addressSpace->read_word_unaligned(a); break; case 32: - memValue = space->read_dword_unaligned(a); + memValue = addressSpace->read_dword_unaligned(a); break; case 64: - memValue = space->read_qword_unaligned(a); + memValue = addressSpace->read_qword_unaligned(a); break; } diff --git a/src/osd/modules/debugger/qt/windowqt.cpp b/src/osd/modules/debugger/qt/windowqt.cpp index aa32ffb5220..73d92c632e7 100644 --- a/src/osd/modules/debugger/qt/windowqt.cpp +++ b/src/osd/modules/debugger/qt/windowqt.cpp @@ -12,6 +12,7 @@ #include "deviceswindow.h" #include "debug/debugcpu.h" +#include "debug/debugcon.h" bool WindowQt::s_refreshAll = false; bool WindowQt::s_hideAll = false;