1212#include " FloppyDiskTypes.h"
1313#include " DriveTypes.h"
1414#include " CoreComponent.h"
15+ #include " TrackDevice.h"
1516
1617namespace vamiga {
1718
@@ -52,8 +53,8 @@ class FloppyDiskImage;
5253 * - a disk usually occupies 84 * 2 * 12.664 = 2.127.552 MFM bytes
5354 */
5455
55- class FloppyDisk : public CoreObject {
56-
56+ class FloppyDisk : public CoreObject , public TrackDevice {
57+
5758 friend class FloppyDrive ;
5859 friend class ADFEncoder ;
5960 friend class EADFEncoder ;
@@ -62,13 +63,6 @@ class FloppyDisk : public CoreObject {
6263 friend class DiskEncoder ;
6364
6465 friend class EADFFactory ;
65- /*
66- friend class ADFFile; // TODO: REMOVE
67- friend class EADFFile; // TODO: REMOVE
68- friend class EADFFactory; // TODO: REMOVE
69- friend class IMGFile; // TODO: REMOVE
70- friend class STFile; // TODO: REMOVE
71- */
7266
7367public:
7468
@@ -140,8 +134,42 @@ class FloppyDisk : public CoreObject {
140134
141135 const char *objectName () const override { return " Disk" ; }
142136 void _dump (Category category, std::ostream &os) const override ;
143-
144-
137+
138+
139+ //
140+ // Methods from LinearDevice
141+ //
142+
143+ isize size () const override { fatalError; }
144+ void read (u8 *dst, isize offset, isize count) const override { fatalError; }
145+ void write (const u8 *src, isize offset, isize count) override { fatalError; }
146+
147+
148+ //
149+ // Methods from BlockDevice
150+ //
151+
152+ public:
153+
154+ isize capacity () const override { return numCyls () * numHeads () * numSectors (0 ); }
155+ isize bsize () const override { return 512 ; }
156+ void readBlock (u8 *dst, isize nr) const override { fatalError; }
157+ void writeBlock (const u8 *src, isize nr) override { fatalError; }
158+
159+
160+ //
161+ // Methods from TrackDevice
162+ //
163+
164+ isize numCyls () const override { return diameter == Diameter::INCH_525 ? 42 : 84 ; }
165+ isize numHeads () const override { return 2 ; }
166+ isize numSectors (isize t) const override { return density == Density::DD ? 11 : 22 ; }
167+
168+ // isize numCyls() const { return diameter == Diameter::INCH_525 ? 42 : 84; }
169+ // isize numHeads() const { return 2; }
170+ // isize numTracks() const { return diameter == Diameter::INCH_525 ? 84 : 168; }
171+
172+
145173 //
146174 // Serializing
147175 //
@@ -186,11 +214,13 @@ class FloppyDisk : public CoreObject {
186214
187215 Diameter getDiameter () const { return diameter; }
188216 Density getDensity () const { return density; }
189-
217+
218+ /*
190219 isize numCyls() const { return diameter == Diameter::INCH_525 ? 42 : 84; }
191220 isize numHeads() const { return 2; }
192221 isize numTracks() const { return diameter == Diameter::INCH_525 ? 84 : 168; }
193-
222+ */
223+
194224 bool isWriteProtected () const { return flags & long (DiskFlags::PROTECTED); }
195225 void setWriteProtection (bool value) { value ? flags |= long (DiskFlags::PROTECTED) : flags &= ~long (DiskFlags::PROTECTED); }
196226
@@ -216,12 +246,12 @@ class FloppyDisk : public CoreObject {
216246 void writeBit (Cylinder c, Head h, isize offset, bool value);
217247
218248 // Reads a byte from disk
219- u8 readByte (Track t, isize offset) const ;
220- u8 readByte (Cylinder c, Head h, isize offset) const ;
249+ u8 read8 (Track t, isize offset) const ;
250+ u8 read8 (Cylinder c, Head h, isize offset) const ;
221251
222252 // Writes a byte to disk
223- void writeByte (Track t, isize offset, u8 value);
224- void writeByte (Cylinder c, Head h, isize offset, u8 value);
253+ void write8 (Track t, isize offset, u8 value);
254+ void write8 (Cylinder c, Head h, isize offset, u8 value);
225255
226256
227257 //
0 commit comments