1 // license:BSD-3-Clause
2 // copyright-holders:Barry Rodewald
3 /*
4  * ddi1.h  --  Amstrad DDI-1 Floppy Disk Drive interface
5  *
6  * Provides uPD765A FDC, AMSDOS ROM, and 3" floppy disk drive.
7  * CPC464 only, 664/6128/464+/6128+ already has this hardware built-in (AMSDOS is on the included Burnin' Rubber / BASIC cartridge for the 464+ and 6128+)
8  *
9  */
10 
11 #ifndef MAME_BUS_CPC_DDI1_H
12 #define MAME_BUS_CPC_DDI1_H
13 
14 #pragma once
15 
16 #include "cpcexp.h"
17 #include "imagedev/floppy.h"
18 #include "machine/upd765.h"
19 
20 class cpc_ddi1_device : public device_t, public device_cpc_expansion_card_interface
21 {
22 public:
23 	// construction/destruction
24 	cpc_ddi1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
25 
26 	void motor_w(offs_t offset, uint8_t data);
27 	void fdc_w(offs_t offset, uint8_t data);
28 	uint8_t fdc_r(offs_t offset);
29 	void rombank_w(uint8_t data);
30 
31 protected:
32 	// device-level overrides
33 	virtual void device_start() override;
34 	virtual void device_reset() override;
35 
36 	// optional information overrides
37 	virtual const tiny_rom_entry *device_rom_region() const override;
38 	virtual void device_add_mconfig(machine_config &config) override;
39 	virtual void set_mapping(uint8_t type) override;
WRITE_LINE_MEMBER(romen_w)40 	virtual WRITE_LINE_MEMBER( romen_w ) override { m_romen = state; }
41 
42 private:
43 	cpc_expansion_slot_device *m_slot;
44 
45 	required_device<upd765_family_device> m_fdc;
46 	required_device<floppy_connector> m_connector;
47 
48 	bool m_rom_active;
49 	bool m_romen;
50 };
51 
52 // device type definition
53 DECLARE_DEVICE_TYPE(CPC_DDI1, cpc_ddi1_device)
54 
55 #endif // MAME_BUS_CPC_DDI1_H
56