diff options
author | 2015-09-13 08:41:44 +0200 | |
---|---|---|
committer | 2015-09-13 08:41:44 +0200 | |
commit | f88cefad27a1737c76e09d99c9fb43e173506081 (patch) | |
tree | 2d8167d03579c46e226471747eb4407bd00ed6fa /src/devices/bus/scsi/scsihle.h | |
parent | e92ac9e0fa8e99869894bea00589bbb526be30aa (diff) |
Move all devices into separate part of src tree (nw)
Diffstat (limited to 'src/devices/bus/scsi/scsihle.h')
-rw-r--r-- | src/devices/bus/scsi/scsihle.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/devices/bus/scsi/scsihle.h b/src/devices/bus/scsi/scsihle.h new file mode 100644 index 00000000000..5f638149ffd --- /dev/null +++ b/src/devices/bus/scsi/scsihle.h @@ -0,0 +1,92 @@ +// license:BSD-3-Clause +// copyright-holders:smf +/* + +scsihle.h + +Base class for HLE'd SCSI devices. + +*/ + +#ifndef _SCSIHLE_H_ +#define _SCSIHLE_H_ + +#include "scsi.h" +#include "machine/t10spc.h" + +INPUT_PORTS_EXTERN( scsihle ); + +class scsihle_device : public device_t, + public scsi_port_interface, + public virtual t10spc +{ +public: + // construction/destruction + scsihle_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + + virtual int GetDeviceID(); // hack for legacy_scsi_host_adapter::get_device + + virtual DECLARE_WRITE_LINE_MEMBER( input_sel ); + virtual DECLARE_WRITE_LINE_MEMBER( input_ack ); + virtual DECLARE_WRITE_LINE_MEMBER( input_rst ); + virtual DECLARE_WRITE_LINE_MEMBER( input_data0 ) { if (state) m_input_data |= 0x01; else m_input_data &= ~0x01; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data1 ) { if (state) m_input_data |= 0x02; else m_input_data &= ~0x02; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data2 ) { if (state) m_input_data |= 0x04; else m_input_data &= ~0x04; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data3 ) { if (state) m_input_data |= 0x08; else m_input_data &= ~0x08; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data4 ) { if (state) m_input_data |= 0x10; else m_input_data &= ~0x10; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data5 ) { if (state) m_input_data |= 0x20; else m_input_data &= ~0x20; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data6 ) { if (state) m_input_data |= 0x40; else m_input_data &= ~0x40; } + virtual DECLARE_WRITE_LINE_MEMBER( input_data7 ) { if (state) m_input_data |= 0x80; else m_input_data &= ~0x80; } + +protected: + // device-level overrides + virtual ioport_constructor device_input_ports() const; + virtual void device_start(); + virtual void device_reset(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + +private: + required_ioport m_scsi_id; + void data_out(UINT8 data); + void scsi_out_req_delay(UINT8 state); + void scsi_change_phase(UINT8 newphase); + int get_scsi_cmd_len(int cbyte); + UINT8 scsibus_driveno(UINT8 drivesel); + void scsibus_read_data(); + void scsibus_write_data(); + void scsibus_exec_command(); + void dump_command_bytes(); + void dump_data_bytes(int count); + void dump_bytes(UINT8 *buff, int count); + + emu_timer *req_timer; + emu_timer *sel_timer; + emu_timer *dataout_timer; + + UINT8 cmd_idx; + UINT8 is_linked; + + UINT8 buffer[ 1024 ]; + UINT16 data_idx; + int bytes_left; + int data_last; + + int scsiID; + UINT8 m_input_data; +}; + +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_0)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_1)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_2)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_3)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_4)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_5)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_6)[]; +extern const input_device_default DEVICE_INPUT_DEFAULTS_NAME(SCSI_ID_7)[]; + +#define MCFG_SCSIDEV_ADD(_tag, _option, _type, _id) \ + MCFG_DEVICE_MODIFY(_tag ) \ + MCFG_SLOT_OPTION_ADD( _option, _type ) \ + MCFG_SLOT_OPTION_DEVICE_INPUT_DEFAULTS( _option, _id ) \ + MCFG_SLOT_DEFAULT_OPTION( _option ) +#endif |