diff options
Diffstat (limited to 'src/mame/machine/microdrv.h')
-rw-r--r-- | src/mame/machine/microdrv.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/mame/machine/microdrv.h b/src/mame/machine/microdrv.h new file mode 100644 index 00000000000..7d8913aae00 --- /dev/null +++ b/src/mame/machine/microdrv.h @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************* + + microdrv.h + + MESS interface to the Sinclair Microdrive image abstraction code + +*********************************************************************/ + +#pragma once + +#ifndef __MICRODRV__ +#define __MICRODRV__ + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MDV_1 "mdv1" +#define MDV_2 "mdv2" + + +#define MCFG_MICRODRIVE_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, MICRODRIVE, 0) + +#define MCFG_MICRODRIVE_COMMS_OUT_CALLBACK(_write) \ + devcb = µdrive_image_device::set_comms_out_wr_callback(*device, DEVCB_##_write); + + + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +// ======================> microdrive_image_device + +class microdrive_image_device : public device_t, + 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(); + + template<class _Object> static devcb_base &set_comms_out_wr_callback(device_t &device, _Object object) { return downcast<microdrive_image_device &>(device).m_write_comms_out.set_callback(object); } + + // image-level overrides + virtual bool call_load(); + virtual void call_unload(); + virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const 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_write_line m_write_comms_out; + + 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; + + + +#endif |