summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/devices/microdrv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/devices/microdrv.h')
-rw-r--r--src/mess/devices/microdrv.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/mess/devices/microdrv.h b/src/mess/devices/microdrv.h
new file mode 100644
index 00000000000..65e72339781
--- /dev/null
+++ b/src/mess/devices/microdrv.h
@@ -0,0 +1,103 @@
+/*********************************************************************
+
+ microdrv.h
+
+ MESS interface to the Sinclair Microdrive image abstraction code
+
+*********************************************************************/
+
+#pragma once
+
+#ifndef __MICRODRV__
+#define __MICRODRV__
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+// ======================> microdrive_interface
+
+struct microdrive_interface
+{
+ devcb_write_line m_out_comms_out_cb;
+ const char * m_interface;
+ device_image_display_info_func m_device_displayinfo;
+};
+
+// ======================> microdrive_image_device
+
+class microdrive_image_device : public device_t,
+ public microdrive_interface,
+ public device_image_interface
+{
+public:
+ // construction/destruction
+ microdrive_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ virtual ~microdrive_image_device();
+
+ // image-level overrides
+ virtual bool call_load();
+ virtual void call_unload();
+ virtual void call_display_info() { if (m_device_displayinfo) m_device_displayinfo(*this); }
+ virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
+
+ virtual iodevice_t image_type() const { return IO_CASSETTE; }
+
+ virtual bool is_readable() const { return 1; }
+ virtual bool is_writeable() const { return 1; }
+ virtual bool is_creatable() const { return 0; }
+ virtual bool must_be_loaded() const { return 0; }
+ virtual bool is_reset_on_load() const { return 0; }
+ virtual const char *image_interface() const { return "ql_cass"; }
+ virtual const char *file_extensions() const { return "mdv"; }
+ virtual const option_guide *create_option_guide() const { return NULL; }
+
+ // specific implementation
+ DECLARE_WRITE_LINE_MEMBER( clk_w );
+ DECLARE_WRITE_LINE_MEMBER( comms_in_w );
+ DECLARE_WRITE_LINE_MEMBER( erase_w );
+ DECLARE_WRITE_LINE_MEMBER( read_write_w );
+ DECLARE_WRITE_LINE_MEMBER( data1_w );
+ DECLARE_WRITE_LINE_MEMBER( data2_w );
+ DECLARE_READ_LINE_MEMBER ( data1_r );
+ DECLARE_READ_LINE_MEMBER ( data2_r );
+protected:
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+private:
+ devcb_resolved_write_line m_out_comms_out_func;
+
+ int m_clk;
+ int m_comms_in;
+ int m_comms_out;
+ int m_erase;
+ int m_read_write;
+
+ UINT8 *m_left;
+ UINT8 *m_right;
+
+ int m_bit_offset;
+ int m_byte_offset;
+
+ emu_timer *m_bit_timer;
+};
+
+// device type definition
+extern const device_type MICRODRIVE;
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+***************************************************************************/
+
+#define MDV_1 "mdv1"
+#define MDV_2 "mdv2"
+
+#define MCFG_MICRODRIVE_ADD(_tag, _config) \
+ MCFG_DEVICE_ADD(_tag, MICRODRIVE, 0) \
+ MCFG_DEVICE_CONFIG(_config)
+
+#define MICRODRIVE_CONFIG(_name) \
+ const microdrive_interface (_name) =
+
+#endif