1 // license:GPL-2.0+
2 // copyright-holders:Dirk Best
3 /**********************************************************************
4 
5     EPSON TF-20
6 
7     Dual 5.25" floppy drive with HX-20 factory option
8 
9 **********************************************************************/
10 
11 #ifndef MAME_BUS_EPSON_SIO_TF20_H
12 #define MAME_BUS_EPSON_SIO_TF20_H
13 
14 #pragma once
15 
16 #include "epson_sio.h"
17 #include "cpu/z80/z80.h"
18 #include "imagedev/floppy.h"
19 #include "machine/ram.h"
20 #include "machine/upd765.h"
21 #include "machine/z80sio.h"
22 
23 
24 //**************************************************************************
25 //  TYPE DEFINITIONS
26 //**************************************************************************
27 
28 class epson_tf20_device : public device_t,
29 							public device_epson_sio_interface
30 {
31 public:
32 	// construction/destruction
33 	epson_tf20_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
34 
35 protected:
36 	// device-level overrides
37 	virtual void device_start() override;
38 	virtual void device_reset() override;
39 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
40 
41 	// optional information overrides
42 	virtual const tiny_rom_entry *device_rom_region() const override;
43 	virtual void device_add_mconfig(machine_config &config) override;
44 	virtual ioport_constructor device_input_ports() const override;
45 
46 	// device_epson_sio_interface overrides
47 	virtual void tx_w(int level) override;
48 	virtual void pout_w(int level) override;
49 
50 private:
51 	IRQ_CALLBACK_MEMBER( irq_callback );
52 	DECLARE_WRITE_LINE_MEMBER( txda_w );
53 	DECLARE_WRITE_LINE_MEMBER( dtra_w );
54 
55 	// from sio output
56 	DECLARE_WRITE_LINE_MEMBER( rxc_w );
57 	DECLARE_WRITE_LINE_MEMBER( pinc_w );
58 
59 	uint8_t rom_disable_r();
60 	uint8_t upd765_tc_r();
61 	void fdc_control_w(uint8_t data);
62 
63 	void cpu_io(address_map &map);
64 	void cpu_mem(address_map &map);
65 
66 	required_device<cpu_device> m_cpu;
67 	required_device<ram_device> m_ram;
68 	required_device<upd765a_device> m_fdc;
69 	required_device<upd7201_device> m_mpsc;
70 	required_device<epson_sio_device> m_sio_output;
71 	required_device_array<floppy_connector, 2> m_fd;
72 
73 	emu_timer *m_timer_serial;
74 	emu_timer *m_timer_tc;
75 
76 	int m_rxc;
77 	int m_txda;
78 	int m_dtra;
79 	int m_pinc;
80 
81 	epson_sio_device *m_sio_input;
82 
83 	static constexpr XTAL XTAL_CR1 = XTAL(8'000'000);
84 	static constexpr XTAL XTAL_CR2 = XTAL(4'915'200);
85 };
86 
87 
88 // device type definition
89 DECLARE_DEVICE_TYPE(EPSON_TF20, epson_tf20_device)
90 
91 
92 #endif // MAME_BUS_EPSON_SIO_TF20_H
93