1 // license:BSD-3-Clause
2 // copyright-holders:Nathan Woods
3 /*********************************************************************
4 
5     coco_fdc.h
6 
7     CoCo/Dragon Floppy Disk Controller base classes
8 
9 *********************************************************************/
10 
11 #ifndef MAME_BUS_COCO_COCO_FDC_H
12 #define MAME_BUS_COCO_COCO_FDC_H
13 
14 #include "cococart.h"
15 #include "imagedev/floppy.h"
16 
17 
18 /***************************************************************************
19     TYPE DEFINITIONS
20 ***************************************************************************/
21 
22 // ======================> coco_family_fdc_device_base
23 
24 class coco_family_fdc_device_base :
25 		public device_t,
26 		public device_cococart_interface
27 {
28 public:
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w)29 	DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w) { m_intrq = state; update_lines(); }
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w)30 	DECLARE_WRITE_LINE_MEMBER(fdc_drq_w) { m_drq = state; update_lines(); }
31 
32 	DECLARE_FLOPPY_FORMATS(floppy_formats);
33 
34 protected:
35 	// construction/destruction
coco_family_fdc_device_base(const machine_config & mconfig,device_type type,const char * tag,device_t * owner,u32 clock)36 	coco_family_fdc_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
37 		: device_t(mconfig, type, tag, owner, clock)
38 		, device_cococart_interface(mconfig, *this)
39 	{
40 	};
41 
42 	// device-level overrides
43 	virtual void device_start() override;
44 	virtual void device_reset() override;
45 
46 	// FDC overrides
47 	virtual void update_lines() = 0;
48 	virtual u8 *get_cart_base() override;
49 	virtual memory_region *get_cart_memregion() override;
50 
51 	// accessors
dskreg()52 	u8 dskreg() const { return m_dskreg; }
intrq()53 	bool intrq() const { return m_intrq; }
drq()54 	bool drq() const { return m_drq; }
set_dskreg(u8 data)55 	void set_dskreg(u8 data) { m_dskreg = data; }
56 
57 private:
58 	// registers
59 	u8 m_dskreg;
60 	bool m_intrq;
61 	bool m_drq;
62 };
63 
64 // device type definitions - CoCo FDC
65 DECLARE_DEVICE_TYPE(COCO_FDC,       coco_family_fdc_device_base)
66 DECLARE_DEVICE_TYPE(COCO_FDC_V11,   coco_family_fdc_device_base)
67 DECLARE_DEVICE_TYPE(COCO3_HDB1,     coco_family_fdc_device_base)
68 DECLARE_DEVICE_TYPE(COCO2_HDB1,     coco_family_fdc_device_base)
69 DECLARE_DEVICE_TYPE(CP450_FDC,      coco_family_fdc_device_base)
70 DECLARE_DEVICE_TYPE(CD6809_FDC,     coco_family_fdc_device_base)
71 
72 #endif // MAME_BUS_COCO_COCO_FDC_H
73