diff options
Diffstat (limited to 'src/devices/bus/z88/ram.cpp')
-rw-r--r-- | src/devices/bus/z88/ram.cpp | 107 |
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") |