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
23 enum { DT_EMPTY = 0, DT_WOZ, DT_DOS33, DT_DOS33_HDR, DT_PRODOS, DT_NYBBLE,
25 enum { DLS_OFF, DLS_READ, DLS_WRITE };
35 bool LoadImage(const char * filename, uint8_t driveNum = 0);
36 bool SaveImage(uint8_t driveNum = 0);
37 bool SaveImageAs(const char * filename, uint8_t driveNum = 0);
38 void CreateBlankImage(uint8_t driveNum = 0);
39 void SwapImages(void);
40 const char * ImageName(uint8_t driveNum = 0);
41 void EjectImage(uint8_t driveNum = 0);
42 bool IsEmpty(uint8_t driveNum = 0);
43 bool IsWriteProtected(uint8_t driveNum = 0);
44 void SetWriteProtect(bool, uint8_t driveNum = 0);
45 int DriveLightStatus(uint8_t driveNum = 0);
46 void SaveState(FILE *);
47 void LoadState(FILE *);
50 uint32_t ReadLong(FILE *);
51 void WriteLong(FILE *, uint32_t);
53 // I/O functions ($C0Ex accesses)
56 void ControlStepper(uint8_t addr);
57 void ControlMotor(uint8_t addr);
58 void DriveEnable(uint8_t addr);
59 void SetShiftLoadSwitch(uint8_t state);
60 void SetReadWriteSwitch(uint8_t state);
61 uint8_t DataRegister(void);
62 void DataRegister(uint8_t);
63 void RunSequencer(uint32_t);
66 void DetectImageType(const char * filename, uint8_t driveNum);
67 void WriteBits(uint8_t * dest, const uint8_t * src, uint16_t bits, uint16_t * start);
68 void WOZifyImage(uint8_t driveNum);
71 char imageName[2][MAX_PATH];
79 public: // temp, for testing... :-P
87 uint32_t currentPos[2];
90 uint8_t slSwitch; // Shift/Load soft switch
91 uint8_t rwSwitch; // Read/Write soft switch
92 uint8_t readPulse; // Disk read head "pulse" signal
93 uint8_t pulseClock; // Disk read head bitstream "pulse clock"
94 uint8_t sequencerState;
95 uint32_t driveOffTimeout;
97 uint16_t trackLength[2];
98 // uint8_t pulseTiming; // WOZ disk "optimal" pulse timing (in 0.25µs)
102 // Exported functions/variables
103 void InstallFloppy(uint8_t slot);
104 extern FloppyDrive floppyDrive[];
105 extern char sequence[];
107 #endif // __FLOPPY_H__