]> Shamusworld >> Repos - apple2/blob - src/floppy.h
Moved stuff into trunk (part 2)...
[apple2] / src / floppy.h
1 //\r
2 // Apple 2 floppy disk support\r
3 //\r
4 \r
5 #ifndef __FLOPPY_H__\r
6 #define __FLOPPY_H__\r
7 \r
8 // MAX_PATH isn't defined in stdlib.h on *nix, so we do it here...\r
9 #ifdef __GCCUNIX__\r
10 #include <limits.h>\r
11 #define MAX_PATH                _POSIX_PATH_MAX\r
12 #else\r
13 #include <stdlib.h>                                                             // for MAX_PATH on MinGW/Darwin\r
14 #endif\r
15 #include "types.h"\r
16 \r
17 enum { DT_UNKNOWN, DT_DOS33, DT_PRODOS, DT_NYBBLE };\r
18 \r
19 class FloppyDrive\r
20 {\r
21         public:\r
22                 FloppyDrive();\r
23                 ~FloppyDrive();\r
24 \r
25                 bool LoadImage(const char * filename, uint8 driveNum = 0);\r
26                 bool SaveImage(uint8 driveNum = 0);\r
27                 bool SaveImageAs(const char * filename, uint8 driveNum = 0);\r
28                 void CreateBlankImage(uint8 driveNum = 0);\r
29                 void SwapImages(void);\r
30 \r
31                 // I/O functions ($C0Ex accesses)\r
32 \r
33                 void ControlStepper(uint8 addr);\r
34                 void ControlMotor(uint8 addr);\r
35                 void DriveEnable(uint8 addr);\r
36                 uint8 ReadWrite(void);\r
37                 uint8 GetLatchValue(void);\r
38                 void SetLatchValue(uint8 value);\r
39                 void SetReadMode(void);\r
40                 void SetWriteMode(void);\r
41 \r
42         protected:\r
43                 void DetectImageType(const char * filename, uint8 driveNum);\r
44                 void NybblizeImage(uint8 driveNum);\r
45                 void DenybblizeImage(uint8 driveNum);\r
46 \r
47         private:\r
48                 char imageName[2][MAX_PATH];\r
49                 uint8 * disk[2];\r
50                 uint32 diskSize[2];\r
51                 uint8 diskType[2];\r
52                 bool imageDirty[2];\r
53                 uint8 motorOn;\r
54                 uint8 activeDrive;\r
55                 uint8 ioMode;\r
56                 uint8 latchValue;\r
57                 uint8 phase;\r
58                 uint8 track;\r
59 \r
60                 uint8 nybblizedImage[2][232960];\r
61                 uint32 currentPos;\r
62 \r
63                 // And here are some private class variables (to reduce function redundancy):\r
64                 static uint8 header[21];\r
65                 static uint8 doSector[16];\r
66                 static uint8 poSector[16];\r
67 };\r
68 \r
69 #endif  // __FLOPPY_H__\r