diff options
author | MooglyGuy <therealmogminer@gmail.com> | 2019-03-16 01:20:23 +0100 |
---|---|---|
committer | MooglyGuy <therealmogminer@gmail.com> | 2019-03-16 01:20:35 +0100 |
commit | e23c64eb76c1ab9a1465d0101272c9df058bddad (patch) | |
tree | 0081923f553d774056e2eb8a6c50271ad1c20f52 | |
parent | 6b430378e1b28d9edbf7e6bd9a2cc554ee3f593b (diff) |
-astrohome: Added cassette support for the AstroBASIC cartridge. [Ryan Holtz, BallyAlley]
-rw-r--r-- | hash/astrocde.xml | 1 | ||||
-rw-r--r-- | src/devices/bus/astrocde/rom.cpp | 35 | ||||
-rw-r--r-- | src/devices/bus/astrocde/rom.h | 21 | ||||
-rw-r--r-- | src/devices/bus/astrocde/slot.cpp | 3 | ||||
-rw-r--r-- | src/devices/bus/astrocde/slot.h | 3 | ||||
-rw-r--r-- | src/mame/drivers/astrohome.cpp | 1 |
6 files changed, 62 insertions, 2 deletions
diff --git a/hash/astrocde.xml b/hash/astrocde.xml index 55549fe2167..a9d04e40760 100644 --- a/hash/astrocde.xml +++ b/hash/astrocde.xml @@ -132,6 +132,7 @@ <year>1981</year> <publisher>Astrovision</publisher> <part name="cart" interface="astrocde_cart"> + <feature name="slot" value="rom_cass" /> <dataarea name="rom" size="4096"> <rom name="astrobas.bin" size="4096" crc="70514687" sha1="a2ac8995a6217b7190aa9b18f49261c0ed3c6b5a" offset="0" /> </dataarea> diff --git a/src/devices/bus/astrocde/rom.cpp b/src/devices/bus/astrocde/rom.cpp index fcebedfc81d..3850678057e 100644 --- a/src/devices/bus/astrocde/rom.cpp +++ b/src/devices/bus/astrocde/rom.cpp @@ -20,6 +20,7 @@ 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_CASS, astrocade_rom_cass_device, "astrocade_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"); +} diff --git a/src/devices/bus/astrocde/rom.h b/src/devices/bus/astrocde/rom.h index 0471ada8dd1..efd17b16ded 100644 --- a/src/devices/bus/astrocde/rom.h +++ b/src/devices/bus/astrocde/rom.h @@ -6,6 +6,7 @@ #pragma once #include "slot.h" +#include "imagedev/cassette.h" // ======================> astrocade_rom_device @@ -64,10 +65,30 @@ private: uint8_t m_base_bank; }; +// ======================> astrocade_rom_cass_device + +class astrocade_rom_cass_device : public astrocade_rom_device +{ +public: + // construction/destruction + astrocade_rom_cass_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // reading and writing + virtual DECLARE_READ8_MEMBER(read_rom) override; + +private: + virtual void device_start() override { } + virtual void device_reset() override { } + virtual void device_add_mconfig(machine_config &config) override; + + required_device<cassette_image_device> m_cassette; +}; + // device type definition DECLARE_DEVICE_TYPE(ASTROCADE_ROM_STD, astrocade_rom_device) DECLARE_DEVICE_TYPE(ASTROCADE_ROM_256K, astrocade_rom_256k_device) DECLARE_DEVICE_TYPE(ASTROCADE_ROM_512K, astrocade_rom_512k_device) +DECLARE_DEVICE_TYPE(ASTROCADE_ROM_CASS, astrocade_rom_cass_device) #endif // MAME_BUS_ASTROCADE_ROM_H diff --git a/src/devices/bus/astrocde/slot.cpp b/src/devices/bus/astrocde/slot.cpp index b83b8e576ad..2aa78be98d9 100644 --- a/src/devices/bus/astrocde/slot.cpp +++ b/src/devices/bus/astrocde/slot.cpp @@ -104,7 +104,8 @@ static const astrocade_slot slot_list[] = { { ASTROCADE_STD, "rom" }, { ASTROCADE_256K, "rom_256k" }, - { ASTROCADE_512K, "rom_512k" } + { ASTROCADE_512K, "rom_512k" }, + { ASTROCADE_CASS, "rom_cass" } }; static int astrocade_get_pcb_id(const char *slot) diff --git a/src/devices/bus/astrocde/slot.h b/src/devices/bus/astrocde/slot.h index 88c34fa0d8e..419f4672985 100644 --- a/src/devices/bus/astrocde/slot.h +++ b/src/devices/bus/astrocde/slot.h @@ -19,7 +19,8 @@ enum { ASTROCADE_STD = 0, ASTROCADE_256K, - ASTROCADE_512K + ASTROCADE_512K, + ASTROCADE_CASS }; diff --git a/src/mame/drivers/astrohome.cpp b/src/mame/drivers/astrohome.cpp index ceceb0c6dc5..4924462bd15 100644 --- a/src/mame/drivers/astrohome.cpp +++ b/src/mame/drivers/astrohome.cpp @@ -201,6 +201,7 @@ static void astrocade_cart(device_slot_interface &device) device.option_add_internal("rom", ASTROCADE_ROM_STD); device.option_add_internal("rom_256k", ASTROCADE_ROM_256K); device.option_add_internal("rom_512k", ASTROCADE_ROM_512K); + device.option_add_internal("rom_cass", ASTROCADE_ROM_CASS); } static void astrocade_exp(device_slot_interface &device) |