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 };
18 enum { DLS_OFF, DLS_READ, DLS_WRITE };
26 bool LoadImage(const char * filename, uint8_t driveNum = 0);
27 bool SaveImage(uint8_t driveNum = 0);
28 bool SaveImageAs(const char * filename, uint8_t driveNum = 0);
29 void CreateBlankImage(uint8_t driveNum = 0);
30 void SwapImages(void);
31 const char * ImageName(uint8_t driveNum = 0);
32 void EjectImage(uint8_t driveNum = 0);
33 bool IsEmpty(uint8_t driveNum = 0);
34 bool IsWriteProtected(uint8_t driveNum = 0);
35 void SetWriteProtect(bool, uint8_t driveNum = 0);
36 int DriveLightStatus(uint8_t driveNum = 0);
38 // I/O functions ($C0Ex accesses)
40 void ControlStepper(uint8_t addr);
41 void ControlMotor(uint8_t addr);
42 void DriveEnable(uint8_t addr);
43 uint8_t ReadWrite(void);
44 uint8_t GetLatchValue(void);
45 void SetLatchValue(uint8_t value);
46 void SetReadMode(void);
47 void SetWriteMode(void);
50 void DetectImageType(const char * filename, uint8_t driveNum);
51 void NybblizeImage(uint8_t driveNum);
52 void DenybblizeImage(uint8_t driveNum);
55 char imageName[2][MAX_PATH];
60 bool writeProtected[2];
69 uint8_t nybblizedImage[2][232960];
72 // And here are some private class variables (to reduce function redundancy):
73 static uint8_t header[21];
74 static uint8_t doSector[16];
75 static uint8_t poSector[16];
76 static char nameBuf[MAX_PATH];
79 #endif // __FLOPPY_H__