1 // license:GPL-2.0+
2 // copyright-holders:Dirk Best
3 /***************************************************************************
4 
5     EACA Colour Genie Floppy Controller Cartridge
6 
7 ***************************************************************************/
8 
9 #ifndef MAME_BUS_CGENIE_EXPANSION_FLOPPY_H
10 #define MAME_BUS_CGENIE_EXPANSION_FLOPPY_H
11 
12 #pragma once
13 
14 #include "expansion.h"
15 #include "imagedev/floppy.h"
16 #include "machine/timer.h"
17 #include "machine/wd_fdc.h"
18 #include "bus/generic/slot.h"
19 
20 
21 //**************************************************************************
22 //  TYPE DEFINITIONS
23 //**************************************************************************
24 
25 // ======================> floppy_controller_device
26 
27 class cgenie_fdc_device : public device_t, public device_cg_exp_interface
28 {
29 public:
30 	// construction/destruction
31 	cgenie_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
32 
33 protected:
34 	virtual const tiny_rom_entry *device_rom_region() const override;
35 	virtual void device_add_mconfig(machine_config &config) override;
36 	virtual void device_start() override;
37 	virtual void device_reset() override;
38 
39 private:
40 	DECLARE_DEVICE_IMAGE_LOAD_MEMBER(socket_load);
41 
42 	DECLARE_WRITE_LINE_MEMBER(intrq_w);
43 
44 	TIMER_DEVICE_CALLBACK_MEMBER(timer_callback);
45 
46 	uint8_t irq_r();
47 	void select_w(uint8_t data);
48 	void command_w(uint8_t data);
49 
50 	void mmio(address_map &map);
51 
52 	DECLARE_FLOPPY_FORMATS(floppy_formats);
53 
54 	required_device<wd2793_device> m_fdc;
55 	required_device<floppy_connector> m_floppy0;
56 	required_device<floppy_connector> m_floppy1;
57 	required_device<floppy_connector> m_floppy2;
58 	required_device<floppy_connector> m_floppy3;
59 	required_device<generic_slot_device> m_socket;
60 
61 	enum
62 	{
63 		IRQ_WDC = 0x40,
64 		IRQ_TIMER = 0x80
65 	};
66 
67 	floppy_image_device *m_floppy;
68 
69 	uint8_t m_irq_status;
70 };
71 
72 // device type definition
73 DECLARE_DEVICE_TYPE(CGENIE_FDC, cgenie_fdc_device)
74 
75 #endif // MAME_BUS_CGENIE_EXPANSION_FLOPPY_H
76