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
18 enum { DFT_UNKNOWN, DT_DOS33, DT_DOS33_HDR, DT_PRODOS, DT_NYBBLE };
19 enum { DLS_OFF, DLS_READ, DLS_WRITE };
27 bool LoadImage(const char * filename, uint8_t driveNum = 0);
28 bool SaveImage(uint8_t driveNum = 0);
29 bool SaveImageAs(const char * filename, uint8_t driveNum = 0);
30 void CreateBlankImage(uint8_t driveNum = 0);
31 void SwapImages(void);
32 const char * ImageName(uint8_t driveNum = 0);
33 void EjectImage(uint8_t driveNum = 0);
34 bool IsEmpty(uint8_t driveNum = 0);
35 bool IsWriteProtected(uint8_t driveNum = 0);
36 void SetWriteProtect(bool, uint8_t driveNum = 0);
37 int DriveLightStatus(uint8_t driveNum = 0);
38 void SaveState(FILE *);
39 void LoadState(FILE *);
42 uint32_t ReadLong(FILE *);
43 void WriteLong(FILE *, uint32_t);
45 // I/O functions ($C0Ex accesses)
48 void ControlStepper(uint8_t addr);
49 void ControlMotor(uint8_t addr);
50 void DriveEnable(uint8_t addr);
51 uint8_t ReadWrite(void);
52 uint8_t GetLatchValue(void);
53 void SetLatchValue(uint8_t value);
54 void SetReadMode(void);
55 void SetWriteMode(void);
58 void DetectImageType(const char * filename, uint8_t driveNum);
59 void NybblizeImage(uint8_t driveNum);
60 void DenybblizeImage(uint8_t driveNum);
63 char imageName[2][MAX_PATH];
68 bool writeProtected[2];
77 uint8_t nybblizedImage[2][232960];
80 // And here are some private class variables (to reduce function redundancy):
81 static uint8_t header[21];
82 static uint8_t doSector[16];
83 static uint8_t poSector[16];
84 static char nameBuf[MAX_PATH];
87 #endif // __FLOPPY_H__