diff options
Diffstat (limited to 'src/devices/bus/astrocde/rom.cpp')
-rw-r--r-- | src/devices/bus/astrocde/rom.cpp | 41 |
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"); +} |