summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ti99x/990_tap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/ti99x/990_tap.h')
-rw-r--r--src/devices/bus/ti99x/990_tap.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/devices/bus/ti99x/990_tap.h b/src/devices/bus/ti99x/990_tap.h
new file mode 100644
index 00000000000..09e2e30da0a
--- /dev/null
+++ b/src/devices/bus/ti99x/990_tap.h
@@ -0,0 +1,63 @@
+// license:GPL-2.0+
+// copyright-holders:Raphael Nabet
+/*
+ 990_tap.h: include file for 990_tap.c
+*/
+
+extern const device_type TI990_TAPE_CTRL;
+#define MAX_TAPE_UNIT 4
+
+struct tape_unit_t
+{
+ device_image_interface *img; // image descriptor
+ bool bot; // TRUE if we are at the beginning of tape
+ bool eot; // TRUE if we are at the end of tape
+ bool wp; // TRUE if tape is write-protected
+};
+
+class tap_990_device : public device_t
+{
+public:
+ tap_990_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ template<class _Object> static devcb_base &static_set_int_callback(device_t &device, _Object object)
+ {
+ return downcast<tap_990_device &>(device).m_int_line.set_callback(object);
+ }
+
+ DECLARE_READ16_MEMBER( read );
+ DECLARE_WRITE16_MEMBER( write );
+
+ void set_tape(int id, device_image_interface *img, bool bot, bool eot, bool wp)
+ {
+ m_tape[id].img = img;
+ m_tape[id].bot = bot;
+ m_tape[id].eot = eot;
+ m_tape[id].wp = wp;
+ }
+
+protected:
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+private:
+ int cur_tape_unit();
+ void update_interrupt();
+ void cmd_read_binary_forward();
+ void cmd_record_skip_forward();
+ void cmd_record_skip_reverse();
+ void cmd_rewind();
+ void cmd_rewind_and_offline();
+ void read_transport_status();
+ void execute_command();
+
+ devcb_write_line m_int_line;
+
+ UINT16 m_w[8];
+
+ tape_unit_t m_tape[MAX_TAPE_UNIT];
+};
+
+#define MCFG_TI990_TAPE_INT_HANDLER( _intcallb ) \
+ devcb = &tap_990_device::static_set_int_callback( *device, DEVCB_##_intcallb );