summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/a1bus/a1cassette.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/a1bus/a1cassette.cpp')
-rw-r--r--src/devices/bus/a1bus/a1cassette.cpp59
1 files changed, 51 insertions, 8 deletions
diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp
index 9ab13fb755d..56cd198bac8 100644
--- a/src/devices/bus/a1bus/a1cassette.cpp
+++ b/src/devices/bus/a1bus/a1cassette.cpp
@@ -10,27 +10,61 @@
#include "emu.h"
#include "a1cassette.h"
+
+#include "imagedev/cassette.h"
+
#include "speaker.h"
+
+namespace {
+
/***************************************************************************
PARAMETERS
***************************************************************************/
-//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
#define CASSETTE_ROM_REGION "casrom"
-DEFINE_DEVICE_TYPE(A1BUS_CASSETTE, a1bus_cassette_device, "a1cass", "Apple I cassette board")
-
ROM_START( cassette )
- /* 256-byte cassette interface ROM, in two 82s129 or mmi6301 256x4 proms at locations 3 and 4 on the cassette interface daughtercard (they are labeled "MMI 6301-IJ // 7623L // APPLE-A3" and "MMI 6301-IJ // 7623L // APPLE-A4") */
+ // 256-byte cassette interface ROM, in two 82s129 or mmi6301 256x4 proms at locations 3 and 4 on the cassette interface daughtercard (they are labeled "MMI 6301-IJ // 7623L // APPLE-A3" and "MMI 6301-IJ // 7623L // APPLE-A4")
ROM_REGION(0x100, CASSETTE_ROM_REGION, 0)
ROM_LOAD_NIB_HIGH( "apple-a3.3", 0x0000, 0x0100, CRC(6eae8f52) SHA1(71906932727ef70952ef6afe6b08708df15cd67d) )
ROM_LOAD_NIB_LOW( "apple-a4.4", 0x0000, 0x0100, CRC(94efa977) SHA1(851f3bd6863859a1a6909179a5e5bf744b3d807e) )
ROM_END
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class a1bus_cassette_device:
+ public device_t,
+ public device_a1bus_card_interface
+{
+public:
+ // construction/destruction
+ a1bus_cassette_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ uint8_t cassette_r(offs_t offset);
+ void cassette_w(offs_t offset, uint8_t data);
+
+protected:
+ a1bus_cassette_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+
+ void cassette_toggle_output();
+
+ optional_device<cassette_image_device> m_cassette;
+
+private:
+ required_region_ptr<uint8_t> m_rom;
+ int m_cassette_output_flipflop;
+};
+
//-------------------------------------------------
// device_add_mconfig - add device configuration
//-------------------------------------------------
@@ -76,7 +110,7 @@ a1bus_cassette_device::a1bus_cassette_device(const machine_config &mconfig, devi
void a1bus_cassette_device::device_start()
{
install_device(0xc000, 0xc0ff, read8sm_delegate(*this, FUNC(a1bus_cassette_device::cassette_r)), write8sm_delegate(*this, FUNC(a1bus_cassette_device::cassette_w)));
- install_bank(0xc100, 0xc1ff, "bank_a1cas", &m_rom[0]);
+ install_bank(0xc100, 0xc1ff, &m_rom[0]);
save_item(NAME(m_cassette_output_flipflop));
}
@@ -195,3 +229,12 @@ void a1bus_cassette_device::cassette_w(offs_t offset, uint8_t data)
cassette_toggle_output();
}
+
+} // anonymous namespace
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+DEFINE_DEVICE_TYPE_PRIVATE(A1BUS_CASSETTE, device_a1bus_card_interface, a1bus_cassette_device, "a1cass", "Apple I cassette board")