1 // license:BSD-3-Clause
2 // copyright-holders:Fabio Priuli
3 #ifndef MAME_BUS_SPC1000_FDD_H
4 #define MAME_BUS_SPC1000_FDD_H
5 
6 #pragma once
7 
8 #include "exp.h"
9 #include "cpu/z80/z80.h"
10 #include "imagedev/floppy.h"
11 #include "machine/i8255.h"
12 #include "machine/upd765.h"
13 
14 //**************************************************************************
15 //  TYPE DEFINITIONS
16 //**************************************************************************
17 
18 // ======================> spc1000_fdd_exp_device
19 
20 class spc1000_fdd_exp_device : public device_t, public device_spc1000_card_interface
21 {
22 public:
23 	// construction/destruction
24 	spc1000_fdd_exp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
25 
26 protected:
27 	// device-level overrides
28 	virtual void device_start() override;
29 	virtual void device_reset() override;
30 	virtual void device_add_mconfig(machine_config &config) override;
31 	virtual const tiny_rom_entry *device_rom_region() const override;
32 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
33 
34 	virtual uint8_t read(offs_t offset) override;
35 	virtual void write(offs_t offset, uint8_t data) override;
36 
37 private:
38 	static constexpr device_timer_id TIMER_TC = 0;
39 
40 	// internal state
41 	required_device<z80_device> m_cpu;
42 	required_device<upd765a_device> m_fdc;
43 	required_device<i8255_device> m_ppi;
44 
45 	floppy_image_device *m_fd0;
46 	floppy_image_device *m_fd1;
47 
48 	emu_timer *m_timer_tc;
49 
50 	uint8_t m_i8255_0_pc;
51 	uint8_t m_i8255_1_pc;
52 	uint8_t m_i8255_portb;
53 
54 	void i8255_b_w(uint8_t data);
55 	uint8_t i8255_c_r();
56 	void i8255_c_w(uint8_t data);
57 
58 	uint8_t tc_r();
59 	void control_w(uint8_t data);
60 
61 	void sd725_io(address_map &map);
62 	void sd725_mem(address_map &map);
63 };
64 
65 
66 // device type definition
67 DECLARE_DEVICE_TYPE(SPC1000_FDD_EXP, spc1000_fdd_exp_device)
68 
69 #endif // MAME_BUS_SPC1000_FDD_H
70