mirror of
https://github.com/holub/mame
synced 2025-06-04 11:56:28 +03:00
104 lines
3.1 KiB
C++
104 lines
3.1 KiB
C++
/*********************************************************************
|
|
|
|
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
|