summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/astrocde/rom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/astrocde/rom.cpp')
-rw-r--r--src/devices/bus/astrocde/rom.cpp41
1 files changed, 38 insertions, 3 deletions
diff --git a/src/devices/bus/astrocde/rom.cpp b/src/devices/bus/astrocde/rom.cpp
index fcebedfc81d..bb5d6912fc2 100644
--- a/src/devices/bus/astrocde/rom.cpp
+++ b/src/devices/bus/astrocde/rom.cpp
@@ -17,9 +17,10 @@
// astrocade_rom_device - constructor
//-------------------------------------------------
-DEFINE_DEVICE_TYPE(ASTROCADE_ROM_STD, astrocade_rom_device, "astrocade_rom", "Bally Astrocade Standard Carts")
-DEFINE_DEVICE_TYPE(ASTROCADE_ROM_256K, astrocade_rom_256k_device, "astrocade_256k", "Bally Astrocade 256K Carts")
-DEFINE_DEVICE_TYPE(ASTROCADE_ROM_512K, astrocade_rom_512k_device, "astrocade_512k", "Bally Astrocade 512K Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_STD, astrocade_rom_device, "astrocade_rom", "Bally Astrocade Standard Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_256K, astrocade_rom_256k_device, "astrocade_rom_256k", "Bally Astrocade 256K Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_512K, astrocade_rom_512k_device, "astrocade_rom_512k", "Bally Astrocade 512K Carts")
+DEFINE_DEVICE_TYPE(ASTROCADE_ROM_CASS, astrocade_rom_cass_device, "astrocade_rom_cass", "Bally Astrocade AstroBASIC Cart")
astrocade_rom_device::astrocade_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
@@ -42,6 +43,12 @@ astrocade_rom_512k_device::astrocade_rom_512k_device(const machine_config &mconf
{
}
+astrocade_rom_cass_device::astrocade_rom_cass_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : astrocade_rom_device(mconfig, ASTROCADE_ROM_CASS, tag, owner, clock)
+ , m_cassette(*this, "cassette")
+{
+}
+
void astrocade_rom_256k_device::device_start()
{
@@ -95,3 +102,31 @@ READ8_MEMBER(astrocade_rom_512k_device::read_rom)
else // 0x3fc0-0x3fff
return m_base_bank = offset & 0x7f;
}
+
+READ8_MEMBER(astrocade_rom_cass_device::read_rom)
+{
+ if (offset < m_rom_size)
+ return m_rom[offset];
+ else if ((offset & 0x1c00) == 0x1800)
+ {
+ m_cassette->output(+1);
+ return 0xff;
+ }
+ else if ((offset & 0x1c00) == 0x1c00)
+ {
+ m_cassette->output(-1);
+ return m_cassette->input() > 0.0 ? 0 : 1;
+ }
+ return 0xff;
+}
+
+/*-------------------------------------------------
+ mapper specific device configuration
+ -------------------------------------------------*/
+
+void astrocade_rom_cass_device::device_add_mconfig(machine_config &config)
+{
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_STOPPED);
+ m_cassette->set_interface("astrocade_cass");
+}