1 // license:BSD-3-Clause
2 // copyright-holders:Sergey Svishchev
3 #ifndef MAME_MACHINE_IBM6580_FDC_H
4 #define MAME_MACHINE_IBM6580_FDC_H
5 
6 #pragma once
7 
8 #include "cpu/mcs48/mcs48.h"
9 #include "machine/i8255.h"
10 #include "machine/upd765.h"
11 
12 
13 class dw_fdc_device :  public device_t
14 {
15 public:
16 	dw_fdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
17 
out_data_handler()18 	auto out_data_handler() { return m_out_data.bind(); }
out_clock_handler()19 	auto out_clock_handler() { return m_out_clock.bind(); }
out_strobe_handler()20 	auto out_strobe_handler() { return m_out_strobe.bind(); }
21 
22 	DECLARE_WRITE_LINE_MEMBER(reset_w);
23 	DECLARE_WRITE_LINE_MEMBER(ack_w);
24 
25 protected:
26 	virtual const tiny_rom_entry *device_rom_region() const override;
27 	virtual void device_add_mconfig(machine_config &config) override;
28 
29 	void device_start() override;
30 	void device_reset() override;
31 	void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
32 
33 private:
34 	uint8_t m_bus, m_t0, m_t1, m_p1, m_p2;
35 	emu_timer *m_reset_timer;
36 
37 	devcb_write_line m_out_data;
38 	devcb_write_line m_out_clock;
39 	devcb_write_line m_out_strobe;
40 	required_device<i8048_device> m_mcu;
41 
42 	void bus_w(uint8_t data);
43 	uint8_t bus_r();
44 	void p1_w(uint8_t data);
45 	void p2_w(uint8_t data);
46 	uint8_t p2_r();
47 	DECLARE_READ_LINE_MEMBER(t0_r);
48 	DECLARE_READ_LINE_MEMBER(t1_r);
49 };
50 
51 DECLARE_DEVICE_TYPE(DW_FDC, dw_fdc_device)
52 
53 #endif // MAME_MACHINE_IBM6580_FDC_H
54