diff options
Diffstat (limited to 'src/mess/devices/microdrv.h')
-rw-r--r-- | src/mess/devices/microdrv.h | 103 |
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 |