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
16 #define MAX_PATH _MAX_PATH
22 enum { DFT_UNKNOWN, DT_DOS33, DT_DOS33_HDR, DT_PRODOS, DT_NYBBLE };
23 enum { DLS_OFF, DLS_READ, DLS_WRITE };
31 bool LoadImage(const char * filename, uint8_t driveNum = 0);
32 bool SaveImage(uint8_t driveNum = 0);
33 bool SaveImageAs(const char * filename, uint8_t driveNum = 0);
34 void CreateBlankImage(uint8_t driveNum = 0);
35 void SwapImages(void);
36 const char * ImageName(uint8_t driveNum = 0);
37 void EjectImage(uint8_t driveNum = 0);
38 bool IsEmpty(uint8_t driveNum = 0);
39 bool IsWriteProtected(uint8_t driveNum = 0);
40 void SetWriteProtect(bool, uint8_t driveNum = 0);
41 int DriveLightStatus(uint8_t driveNum = 0);
42 void SaveState(FILE *);
43 void LoadState(FILE *);
46 uint32_t ReadLong(FILE *);
47 void WriteLong(FILE *, uint32_t);
49 // I/O functions ($C0Ex accesses)
52 void ControlStepper(uint8_t addr);
53 void ControlMotor(uint8_t addr);
54 void DriveEnable(uint8_t addr);
55 uint8_t ReadWrite(void);
56 uint8_t GetLatchValue(void);
57 void SetLatchValue(uint8_t value);
58 void SetReadMode(void);
59 void SetWriteMode(void);
62 void DetectImageType(const char * filename, uint8_t driveNum);
63 void NybblizeImage(uint8_t driveNum);
64 void DenybblizeImage(uint8_t driveNum);
67 char imageName[2][MAX_PATH];
72 bool writeProtected[2];
81 uint8_t nybblizedImage[2][232960];
84 // And here are some private class variables (to reduce function redundancy):
85 static uint8_t header[21];
86 static uint8_t doSector[16];
87 static uint8_t poSector[16];
88 static char nameBuf[MAX_PATH];
91 #endif // __FLOPPY_H__