1 // license: GPL-2.0+
2 // copyright-holders: Dirk Best
3 /***************************************************************************
4
5 Internal floppy drive for SAM Coupe
6
7 ***************************************************************************/
8
9 #include "emu.h"
10 #include "floppy.h"
11 #include "formats/coupedsk.h"
12
13
14 //**************************************************************************
15 // DEVICE DEFINITIONS
16 //**************************************************************************
17
18 DEFINE_DEVICE_TYPE(SAM_FLOPPY, sam_floppy_device, "sam_floppy", "SAM Coupe Internal Floppy")
19
FLOPPY_FORMATS_MEMBER(sam_floppy_device::floppy_formats)20 FLOPPY_FORMATS_MEMBER( sam_floppy_device::floppy_formats )
21 FLOPPY_MGT_FORMAT
22 FLOPPY_FORMATS_END
23
24 static void samcoupe_floppies(device_slot_interface &device)
25 {
26 device.option_add("35dd", FLOPPY_35_DD);
27 }
28
29 //-------------------------------------------------
30 // device_add_mconfig - add device configuration
31 //-------------------------------------------------
32
device_add_mconfig(machine_config & config)33 void sam_floppy_device::device_add_mconfig(machine_config &config)
34 {
35 WD1772(config, m_fdc, 24_MHz_XTAL / 3);
36 FLOPPY_CONNECTOR(config, "fdc:0", samcoupe_floppies, "35dd", sam_floppy_device::floppy_formats);
37 }
38
39
40 //**************************************************************************
41 // LIVE DEVICE
42 //**************************************************************************
43
44 //-------------------------------------------------
45 // sam_floppy_device - constructor
46 //-------------------------------------------------
47
sam_floppy_device(const machine_config & mconfig,const char * tag,device_t * owner,uint32_t clock)48 sam_floppy_device::sam_floppy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
49 device_t(mconfig, SAM_FLOPPY, tag, owner, clock),
50 device_samcoupe_drive_interface(mconfig, *this),
51 m_fdc(*this, "fdc"),
52 m_drive(*this, "fdc:0")
53 {
54 }
55
56 //-------------------------------------------------
57 // device_start - device-specific startup
58 //-------------------------------------------------
59
device_start()60 void sam_floppy_device::device_start()
61 {
62 }
63
64
65 //**************************************************************************
66 // IMPLEMENTATION
67 //**************************************************************************
68
read(offs_t offset)69 uint8_t sam_floppy_device::read(offs_t offset)
70 {
71 floppy_image_device *floppy = m_drive->get_device();
72
73 if (floppy)
74 floppy->ss_w(BIT(offset, 2));
75
76 m_fdc->set_floppy(floppy);
77
78 return m_fdc->read(offset & 0x03);
79 }
80
write(offs_t offset,uint8_t data)81 void sam_floppy_device::write(offs_t offset, uint8_t data)
82 {
83 floppy_image_device *floppy = m_drive->get_device();
84
85 if (floppy)
86 floppy->ss_w(BIT(offset, 2));
87
88 m_fdc->set_floppy(floppy);
89
90 m_fdc->write(offset & 0x03, data);
91 }
92