summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/z88/ram.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/z88/ram.cpp')
-rw-r--r--src/devices/bus/z88/ram.cpp107
1 files changed, 99 insertions, 8 deletions
diff --git a/src/devices/bus/z88/ram.cpp b/src/devices/bus/z88/ram.cpp
index 6ba311908f9..c697e40c7b0 100644
--- a/src/devices/bus/z88/ram.cpp
+++ b/src/devices/bus/z88/ram.cpp
@@ -11,18 +11,97 @@
#include "emu.h"
#include "ram.h"
-/***************************************************************************
- IMPLEMENTATION
-***************************************************************************/
+
+namespace {
//**************************************************************************
-// GLOBAL VARIABLES
+// TYPE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(Z88_32K_RAM, z88_32k_ram_device, "z88_32k_ram", "Z88 32KB RAM")
-DEFINE_DEVICE_TYPE(Z88_128K_RAM, z88_128k_ram_device, "z88_128k_ram", "Z88 128KB RAM")
-DEFINE_DEVICE_TYPE(Z88_512K_RAM, z88_512k_ram_device, "z88_512k_ram", "Z88 512KB RAM")
-DEFINE_DEVICE_TYPE(Z88_1024K_RAM, z88_1024k_ram_device, "z88_1024k_ram", "Z88 1024KB RAM")
+// ======================> z88_32k_ram_device
+
+class z88_32k_ram_device : public device_t,
+ public device_nvram_interface,
+ public device_z88cart_interface
+{
+public:
+ // construction/destruction
+ z88_32k_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ z88_32k_ram_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device_t implementations
+ virtual void device_start() override ATTR_COLD;
+
+ // device_nvram_interface implementation
+ virtual void nvram_default() override
+ {
+ }
+ virtual bool nvram_read(util::read_stream &file) override
+ {
+ auto const [err, actual] = util::read(file, get_cart_base(), get_cart_size());
+ return !err && (actual == get_cart_size());
+ }
+ virtual bool nvram_write(util::write_stream &file) override
+ {
+ auto const [err, actual] = util::write(file, get_cart_base(), get_cart_size());
+ return !err;
+ }
+
+ // z88cart_interface implementation
+ virtual uint8_t read(offs_t offset) override;
+ virtual void write(offs_t offset, uint8_t data) override;
+ virtual uint8_t* get_cart_base() override;
+ virtual uint32_t get_cart_size() override { return 0x8000; }
+
+protected:
+ // internal state
+ uint8_t * m_ram;
+};
+
+// ======================> z88_128k_ram_device
+
+class z88_128k_ram_device : public z88_32k_ram_device
+{
+public:
+ // construction/destruction
+ z88_128k_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // z88cart_interface implementation
+ virtual uint32_t get_cart_size() override { return 0x20000; }
+};
+
+// ======================> z88_512k_ram_device
+
+class z88_512k_ram_device : public z88_32k_ram_device
+{
+public:
+ // construction/destruction
+ z88_512k_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // z88cart_interface implementation
+ virtual uint32_t get_cart_size() override { return 0x80000; }
+};
+
+// ======================> z88_1024k_ram_device
+
+class z88_1024k_ram_device : public z88_32k_ram_device
+{
+public:
+ // construction/destruction
+ z88_1024k_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // z88cart_interface overrides
+ virtual uint32_t get_cart_size() override { return 0x100000; }
+};
+
+/***************************************************************************
+ IMPLEMENTATION
+***************************************************************************/
//**************************************************************************
// LIVE DEVICE
@@ -109,3 +188,15 @@ void z88_32k_ram_device::write(offs_t offset, uint8_t data)
{
m_ram[offset & (get_cart_size() - 1)] = data;
}
+
+} // anonymous namespace
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE_PRIVATE(Z88_32K_RAM, device_z88cart_interface, z88_32k_ram_device, "z88_32k_ram", "Z88 32KB RAM")
+DEFINE_DEVICE_TYPE_PRIVATE(Z88_128K_RAM, device_z88cart_interface, z88_128k_ram_device, "z88_128k_ram", "Z88 128KB RAM")
+DEFINE_DEVICE_TYPE_PRIVATE(Z88_512K_RAM, device_z88cart_interface, z88_512k_ram_device, "z88_512k_ram", "Z88 512KB RAM")
+DEFINE_DEVICE_TYPE_PRIVATE(Z88_1024K_RAM, device_z88cart_interface, z88_1024k_ram_device, "z88_1024k_ram", "Z88 1024KB RAM")