1111#include " emu.h"
1212#include " a2diskiing.h"
1313
14+ #include " machine/wozfdc.h"
15+ #include " imagedev/floppy.h"
16+
1417#include " formats/ap2_dsk.h"
1518#include " formats/as_dsk.h"
1619#include " formats/fs_prodos.h"
1720
18- /* **************************************************************************
19- PARAMETERS
20- ***************************************************************************/
21+
22+ namespace {
2123
2224// **************************************************************************
2325// GLOBAL VARIABLES
2426// **************************************************************************
2527
26- DEFINE_DEVICE_TYPE (A2BUS_DISKIING , a2bus_diskiing_device, " a2diskiing" , " Apple Disk II NG controller (16-sector)" )
27- DEFINE_DEVICE_TYPE (A2BUS_DISKIING13 , a2bus_diskiing13_device, " diskii13" , " Apple Disk II NG controller (13-sector)" )
28- DEFINE_DEVICE_TYPE (A2BUS_APPLESURANCE , a2bus_applesurance_device, " a2surance" , " Applesurance Diagnostic Controller" )
29- DEFINE_DEVICE_TYPE (A2BUS_AGAT7_FDC , a2bus_agat7flop_device, " agat7_flop" , " Agat-7 140K floppy card" )
30- DEFINE_DEVICE_TYPE (A2BUS_AGAT9_FDC , a2bus_agat9flop_device, " agat9_flop" , " Agat-9 140K floppy card" )
31-
32- #define WOZFDC_TAG " wozfdc"
3328#define DISKII_ROM_REGION " diskii_rom"
3429
3530static void a2_floppies (device_slot_interface &device)
@@ -62,6 +57,104 @@ ROM_START( agat9 )
6257 ROM_LOAD ( " shugart9.rom" , 0x0000 , 0x0100 , CRC (964a0ce2) SHA1 (bf955189ebffe874c20ef649a3db8177dc16af61) )
6358ROM_END
6459
60+
61+ // **************************************************************************
62+ // TYPE DEFINITIONS
63+ // **************************************************************************
64+
65+ class diskiing_device :
66+ public device_t ,
67+ public device_a2bus_card_interface
68+ {
69+ protected:
70+ // construction/destruction
71+ diskiing_device (const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
72+
73+ virtual void device_start () override ATTR_COLD;
74+ virtual void device_reset () override ATTR_COLD;
75+ virtual void device_add_mconfig (machine_config &config) override ATTR_COLD;
76+ virtual const tiny_rom_entry *device_rom_region () const override ATTR_COLD;
77+
78+ // overrides of standard a2bus slot functions
79+ virtual uint8_t read_c0nx (uint8_t offset) override ;
80+ virtual void write_c0nx (uint8_t offset, uint8_t data) override ;
81+ virtual uint8_t read_cnxx (uint8_t offset) override ;
82+ virtual void reset_from_bus () override ;
83+
84+ required_region_ptr<uint8_t > m_rom;
85+ required_device<diskii_fdc_device> m_wozfdc;
86+ required_device_array<floppy_connector, 2 > m_floppy;
87+
88+ private:
89+ static void floppy_formats (format_registration &fr);
90+ };
91+
92+ class a2bus_diskiing_device : public diskiing_device
93+ {
94+ public:
95+ a2bus_diskiing_device (const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
96+ };
97+
98+ class a2bus_diskiing13_device : public diskiing_device
99+ {
100+ public:
101+ a2bus_diskiing13_device (const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
102+
103+ protected:
104+ virtual void device_add_mconfig (machine_config &config) override ATTR_COLD;
105+ virtual const tiny_rom_entry *device_rom_region () const override ATTR_COLD;
106+
107+ private:
108+ static void floppy_formats (format_registration &fr);
109+ };
110+
111+ class a2bus_applesurance_device : public diskiing_device
112+ {
113+ public:
114+ a2bus_applesurance_device (const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
115+
116+ protected:
117+ virtual const tiny_rom_entry *device_rom_region () const override ATTR_COLD;
118+
119+ virtual void device_reset () override ATTR_COLD;
120+
121+ virtual uint8_t read_cnxx (uint8_t offset) override ;
122+ virtual uint8_t read_c800 (uint16_t offset) override ;
123+
124+ virtual void write_c800 (uint16_t offset, uint8_t data) override
125+ {
126+ if (offset == 0x7ff )
127+ {
128+ m_c800_bank = data & 1 ;
129+ }
130+ }
131+
132+ virtual bool take_c800 () const override { return true ; }
133+
134+ virtual void reset_from_bus () override ;
135+
136+ private:
137+ int m_c800_bank;
138+ };
139+
140+ class a2bus_agat7flop_device : public diskiing_device
141+ {
142+ public:
143+ a2bus_agat7flop_device (const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
144+
145+ protected:
146+ virtual const tiny_rom_entry *device_rom_region () const override ATTR_COLD;
147+ };
148+
149+ class a2bus_agat9flop_device : public diskiing_device
150+ {
151+ public:
152+ a2bus_agat9flop_device (const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
153+
154+ protected:
155+ virtual const tiny_rom_entry *device_rom_region () const override ATTR_COLD;
156+ };
157+
65158void diskiing_device::floppy_formats (format_registration &fr)
66159{
67160 fr.add (FLOPPY_A213S_FORMAT );
@@ -136,9 +229,9 @@ const tiny_rom_entry *a2bus_agat9flop_device::device_rom_region() const
136229diskiing_device::diskiing_device (const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
137230 device_t (mconfig, type, tag, owner, clock),
138231 device_a2bus_card_interface (mconfig, *this ),
139- m_wozfdc (*this , WOZFDC_TAG ),
140- m_floppy (*this , " %u " , 0U ),
141- m_rom( nullptr )
232+ m_rom (*this , DISKII_ROM_REGION ),
233+ m_wozfdc (*this , " wozfdc " ),
234+ m_floppy (* this , " %u " , 0U )
142235{
143236}
144237
@@ -174,7 +267,6 @@ a2bus_agat9flop_device::a2bus_agat9flop_device(const machine_config &mconfig, co
174267
175268void diskiing_device::device_start ()
176269{
177- m_rom = device ().machine ().root_device ().memregion (this ->subtag (DISKII_ROM_REGION ).c_str ())->base ();
178270}
179271
180272void diskiing_device::device_reset ()
@@ -217,7 +309,7 @@ uint8_t diskiing_device::read_cnxx(uint8_t offset)
217309
218310uint8_t a2bus_applesurance_device::read_cnxx (uint8_t offset)
219311{
220- return m_rom[offset+ 0x800 ];
312+ return m_rom[offset + 0x800 ];
221313}
222314
223315uint8_t a2bus_applesurance_device::read_c800 (uint16_t offset)
@@ -232,7 +324,7 @@ uint8_t a2bus_applesurance_device::read_c800(uint16_t offset)
232324 return m_rom[offset];
233325 }
234326
235- return m_rom[offset+ 0x800 ];
327+ return m_rom[offset + 0x800 ];
236328}
237329
238330void a2bus_applesurance_device::device_reset ()
@@ -246,3 +338,12 @@ void a2bus_applesurance_device::reset_from_bus()
246338 m_c800_bank = 1 ;
247339 diskiing_device::reset_from_bus ();
248340}
341+
342+ } // anonymous namespace
343+
344+
345+ DEFINE_DEVICE_TYPE_PRIVATE (A2BUS_DISKIING , device_a2bus_card_interface, a2bus_diskiing_device, " a2diskiing" , " Apple Disk II NG controller (16-sector)" )
346+ DEFINE_DEVICE_TYPE_PRIVATE (A2BUS_DISKIING13 , device_a2bus_card_interface, a2bus_diskiing13_device, " diskii13" , " Apple Disk II NG controller (13-sector)" )
347+ DEFINE_DEVICE_TYPE_PRIVATE (A2BUS_APPLESURANCE , device_a2bus_card_interface, a2bus_applesurance_device, " a2surance" , " Applesurance Diagnostic Controller" )
348+ DEFINE_DEVICE_TYPE_PRIVATE (A2BUS_AGAT7_FDC , device_a2bus_card_interface, a2bus_agat7flop_device, " agat7_flop" , " Agat-7 140K floppy card" )
349+ DEFINE_DEVICE_TYPE_PRIVATE (A2BUS_AGAT9_FDC , device_a2bus_card_interface, a2bus_agat9flop_device, " agat9_flop" , " Agat-9 140K floppy card" )
0 commit comments