summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/aquarius/ram.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/aquarius/ram.cpp')
-rw-r--r--src/devices/bus/aquarius/ram.cpp110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/devices/bus/aquarius/ram.cpp b/src/devices/bus/aquarius/ram.cpp
new file mode 100644
index 00000000000..753a1fbf3a3
--- /dev/null
+++ b/src/devices/bus/aquarius/ram.cpp
@@ -0,0 +1,110 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Aquarius Memory Cartridges
+
+**********************************************************************/
+
+#include "emu.h"
+#include "ram.h"
+
+
+//**************************************************************************
+// DEVICE DEFINITIONS
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE(AQUARIUS_RAM4, aquarius_ram4_device, "aquarius_ram4", "Aquarius 4K Memory Cartridge")
+DEFINE_DEVICE_TYPE(AQUARIUS_RAM16, aquarius_ram16_device, "aquarius_ram16", "Aquarius 16K Memory Cartridge")
+DEFINE_DEVICE_TYPE(AQUARIUS_RAM32, aquarius_ram32_device, "aquarius_ram32", "Aquarius 32K Memory Cartridge")
+DEFINE_DEVICE_TYPE(AQUARIUS_RAM16P, aquarius_ram16p_device, "aquarius_ram16p", "Aquarius 16K+ Memory Cartridge")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// aquarius_ram_device - constructor
+//-------------------------------------------------
+
+aquarius_ram_device::aquarius_ram_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t size)
+ : device_t(mconfig, type, tag, owner, clock)
+ , device_aquarius_cartridge_interface(mconfig, *this)
+ , m_ram_size(size)
+{
+}
+
+aquarius_ram4_device::aquarius_ram4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : aquarius_ram_device(mconfig, AQUARIUS_RAM4, tag, owner, clock, 0x1000)
+{
+}
+
+aquarius_ram16_device::aquarius_ram16_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : aquarius_ram_device(mconfig, AQUARIUS_RAM16, tag, owner, clock, 0x4000)
+{
+}
+
+aquarius_ram32_device::aquarius_ram32_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : aquarius_ram_device(mconfig, AQUARIUS_RAM32, tag, owner, clock, 0x8000)
+{
+}
+
+aquarius_ram16p_device::aquarius_ram16p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, AQUARIUS_RAM16P, tag, owner, clock)
+ , device_aquarius_cartridge_interface(mconfig, *this)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void aquarius_ram_device::device_start()
+{
+ m_ram = make_unique_clear<uint8_t[]>(m_ram_size);
+
+ save_pointer(NAME(m_ram), m_ram_size);
+}
+
+void aquarius_ram16p_device::device_start()
+{
+ m_ram = make_unique_clear<uint8_t[]>(0x4000);
+
+ save_pointer(NAME(m_ram), 0x4000);
+}
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+uint8_t aquarius_ram_device::mreq_r(offs_t offset)
+{
+ if (offset < m_ram_size)
+ {
+ return m_ram[offset];
+ }
+
+ return 0xff;
+}
+
+void aquarius_ram_device::mreq_w(offs_t offset, uint8_t data)
+{
+ if (offset < m_ram_size)
+ {
+ m_ram[offset] = data;
+ }
+}
+
+
+uint8_t aquarius_ram16p_device::mreq_ce_r(offs_t offset)
+{
+ return m_ram[offset];
+}
+
+void aquarius_ram16p_device::mreq_ce_w(offs_t offset, uint8_t data)
+{
+ m_ram[offset] = data;
+}