2 // Apple 2 floppy disk support
8 // MAX_PATH isn't defined in stdlib.h on *nix, so we do it here...
11 #define MAX_PATH _POSIX_PATH_MAX
13 #include <stdlib.h> // for MAX_PATH on MinGW/Darwin
17 enum { DT_UNKNOWN, DT_DOS33, DT_DOS33_HDR, DT_PRODOS, DT_NYBBLE };
25 bool LoadImage(const char * filename, uint8_t driveNum = 0);
26 bool SaveImage(uint8_t driveNum = 0);
27 bool SaveImageAs(const char * filename, uint8_t driveNum = 0);
28 void CreateBlankImage(uint8_t driveNum = 0);
29 void SwapImages(void);
30 const char * GetImageName(uint8_t driveNum = 0);
31 void EjectImage(uint8_t driveNum = 0);
32 bool DriveIsEmpty(uint8_t driveNum = 0);
33 bool DiskIsWriteProtected(uint8_t driveNum = 0);
34 void SetWriteProtect(bool, uint8_t driveNum = 0);
36 // I/O functions ($C0Ex accesses)
38 void ControlStepper(uint8_t addr);
39 void ControlMotor(uint8_t addr);
40 void DriveEnable(uint8_t addr);
41 uint8_t ReadWrite(void);
42 uint8_t GetLatchValue(void);
43 void SetLatchValue(uint8_t value);
44 void SetReadMode(void);
45 void SetWriteMode(void);
48 void DetectImageType(const char * filename, uint8_t driveNum);
49 void NybblizeImage(uint8_t driveNum);
50 void DenybblizeImage(uint8_t driveNum);
53 char imageName[2][MAX_PATH];
58 bool writeProtected[2];
66 uint8_t nybblizedImage[2][232960];
69 // And here are some private class variables (to reduce function redundancy):
70 static uint8_t header[21];
71 static uint8_t doSector[16];
72 static uint8_t poSector[16];
73 static char nameBuf[MAX_PATH];
76 #endif // __FLOPPY_H__