1 // license:BSD-3-Clause
2 // copyright-holders:Nigel Barnes
3 /**********************************************************************
4 
5     Acorn SCSI Host Adaptor
6 
7 **********************************************************************/
8 
9 
10 #ifndef MAME_BUS_BBC_1MHZBUS_SCSI_H
11 #define MAME_BUS_BBC_1MHZBUS_SCSI_H
12 
13 #include "1mhzbus.h"
14 #include "machine/nscsi_cb.h"
15 
16 
17 //**************************************************************************
18 //  TYPE DEFINITIONS
19 //**************************************************************************
20 
21 class bbc_scsi_device:
22 	public device_t,
23 	public device_bbc_1mhzbus_interface
24 {
25 public:
26 	// construction/destruction
27 	bbc_scsi_device(const machine_config& mconfig, const char* tag, device_t* owner, uint32_t clock);
28 
29 	DECLARE_WRITE_LINE_MEMBER(bsy_w);
30 	DECLARE_WRITE_LINE_MEMBER(req_w);
31 
32 protected:
33 	bbc_scsi_device(const machine_config& mconfig, device_type type, const char* tag, device_t* owner, uint32_t clock);
34 
35 	// device-level overrides
36 	virtual void device_start() override;
37 
38 	// optional information overrides
39 	virtual void device_add_mconfig(machine_config& config) override;
40 
41 	virtual uint8_t fred_r(offs_t offset) override;
42 	virtual void fred_w(offs_t offset, uint8_t data) override;
43 
44 private:
45 	required_device<nscsi_callback_device> m_scsi;
46 
47 	int m_irq_enable;
48 	int m_irq_state;
49 };
50 
51 
52 // ======================> bbc_awhd_device
53 
54 class bbc_awhd_device : public bbc_scsi_device
55 {
56 public:
imperfect_features()57 	static constexpr feature_type imperfect_features() { return feature::DISK; }
58 
59 	// construction/destruction
60 	bbc_awhd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
61 
62 protected:
63 	// optional information overrides
64 	virtual void device_add_mconfig(machine_config &config) override;
65 
66 	virtual uint8_t fred_r(offs_t offset) override;
67 	virtual void fred_w(offs_t offset, uint8_t data) override;
68 	virtual uint8_t jim_r(offs_t offset) override;
69 	virtual void jim_w(offs_t offset, uint8_t data) override;
70 
71 private:
72 	required_device<bbc_1mhzbus_slot_device> m_1mhzbus;
73 };
74 
75 
76 // device type definition
77 DECLARE_DEVICE_TYPE(BBC_SCSI, bbc_scsi_device);
78 DECLARE_DEVICE_TYPE(BBC_AWHD, bbc_awhd_device);
79 
80 
81 #endif /* MAME_BUS_BBC_1MHZBUS_SCSI_H */
82