From bd160043519bbe15ce1ac7ac4ecaadeac6756c17 Mon Sep 17 00:00:00 2001 From: Nigel Barnes Date: Fri, 22 Nov 2019 23:17:15 +0000 Subject: bbc_ramdisc: Added configuration option to select 1MB or 2MB model (nw) --- src/devices/bus/bbc/1mhzbus/ramdisc.cpp | 17 +++++++++++------ src/devices/bus/bbc/1mhzbus/ramdisc.h | 3 +-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/devices/bus/bbc/1mhzbus/ramdisc.cpp b/src/devices/bus/bbc/1mhzbus/ramdisc.cpp index ef3c3265dbe..b5c5973690c 100644 --- a/src/devices/bus/bbc/1mhzbus/ramdisc.cpp +++ b/src/devices/bus/bbc/1mhzbus/ramdisc.cpp @@ -31,6 +31,10 @@ static INPUT_PORTS_START(ramdisc) PORT_CONFNAME(0x01, 0x01, "Power") PORT_CHANGED_MEMBER(DEVICE_SELF, bbc_ramdisc_device, power_changed, 0) PORT_CONFSETTING(0x00, DEF_STR(Off)) PORT_CONFSETTING(0x01, DEF_STR(On)) + PORT_START("SIZE") + PORT_CONFNAME(0x03, 0x02, "RAM Disk Capacity") + PORT_CONFSETTING(0x01, "1MB") + PORT_CONFSETTING(0x02, "2MB") INPUT_PORTS_END //------------------------------------------------- @@ -87,6 +91,7 @@ bbc_ramdisc_device::bbc_ramdisc_device(const machine_config &mconfig, const char , device_bbc_1mhzbus_interface(mconfig, *this) , m_1mhzbus(*this, "1mhzbus") , m_nvram(*this, "nvram") + , m_ram_size(*this, "SIZE") , m_power(*this, "POWER") , m_sector(0) { @@ -99,11 +104,11 @@ bbc_ramdisc_device::bbc_ramdisc_device(const machine_config &mconfig, const char void bbc_ramdisc_device::device_start() { /* define 2mb ram */ - m_ram = std::make_unique(RAM_SIZE); - m_nvram->set_base(m_ram.get(), RAM_SIZE); + m_ram = std::make_unique(0x200000); + m_nvram->set_base(m_ram.get(), 0x200000); /* register for save states */ - save_pointer(NAME(m_ram), RAM_SIZE); + save_pointer(NAME(m_ram), 0x200000); save_item(NAME(m_sector)); } @@ -117,7 +122,7 @@ INPUT_CHANGED_MEMBER(bbc_ramdisc_device::power_changed) /* clear RAM on power off */ if (!newval) { - memset(m_ram.get(), 0xff, RAM_SIZE); + memset(m_ram.get(), 0xff, 0x200000); } } @@ -181,7 +186,7 @@ uint8_t bbc_ramdisc_device::jim_r(offs_t offset) uint8_t data = 0xff; /* power on and sector < 2mb */ - if (m_power->read() && m_sector < RAM_SIZE) + if (m_power->read() && m_sector < (m_ram_size->read() << 8)) { data &= m_ram[(m_sector << 8) | offset]; } @@ -194,7 +199,7 @@ uint8_t bbc_ramdisc_device::jim_r(offs_t offset) void bbc_ramdisc_device::jim_w(offs_t offset, uint8_t data) { /* power on and sector < 2mb */ - if (m_power->read() && m_sector < RAM_SIZE) + if (m_power->read() && m_sector < (m_ram_size->read() << 8)) { m_ram[(m_sector << 8) | offset] = data; } diff --git a/src/devices/bus/bbc/1mhzbus/ramdisc.h b/src/devices/bus/bbc/1mhzbus/ramdisc.h index 52b26284e06..a4955921bcc 100644 --- a/src/devices/bus/bbc/1mhzbus/ramdisc.h +++ b/src/devices/bus/bbc/1mhzbus/ramdisc.h @@ -42,10 +42,9 @@ protected: virtual void jim_w(offs_t offset, uint8_t data) override; private: - static const size_t RAM_SIZE = 0x200000; - required_device m_1mhzbus; required_device m_nvram; + required_ioport m_ram_size; required_ioport m_power; std::unique_ptr m_ram; -- cgit v1.2.3