X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ffloppy.h;h=12b5e98453d9d925d2f3556b0540252a523a3696;hb=f36d026c7b8b398b88765ec5b67a3c767fe5fbad;hp=45e8ce41000530afb21edefac27f3748b92afd03;hpb=eeb2935c12ef41a63049126748c2574b324403a5;p=apple2 diff --git a/src/floppy.h b/src/floppy.h old mode 100755 new mode 100644 index 45e8ce4..12b5e98 --- a/src/floppy.h +++ b/src/floppy.h @@ -1,69 +1,76 @@ -// -// Apple 2 floppy disk support -// - -#ifndef __FLOPPY_H__ -#define __FLOPPY_H__ - -// MAX_PATH isn't defined in stdlib.h on *nix, so we do it here... -#ifdef __GCCUNIX__ -#include -#define MAX_PATH _POSIX_PATH_MAX -#else -#include // for MAX_PATH on MinGW/Darwin -#endif -#include "types.h" - -enum { DT_UNKNOWN, DT_DOS33, DT_PRODOS, DT_NYBBLE }; - -class FloppyDrive -{ - public: - FloppyDrive(); - ~FloppyDrive(); - - bool LoadImage(const char * filename, uint8 driveNum = 0); - bool SaveImage(uint8 driveNum = 0); - bool SaveImageAs(const char * filename, uint8 driveNum = 0); - void CreateBlankImage(uint8 driveNum = 0); - void SwapImages(void); - - // I/O functions ($C0Ex accesses) - - void ControlStepper(uint8 addr); - void ControlMotor(uint8 addr); - void DriveEnable(uint8 addr); - uint8 ReadWrite(void); - uint8 GetLatchValue(void); - void SetLatchValue(uint8 value); - void SetReadMode(void); - void SetWriteMode(void); - - protected: - void DetectImageType(const char * filename, uint8 driveNum); - void NybblizeImage(uint8 driveNum); - void DenybblizeImage(uint8 driveNum); - - private: - char imageName[2][MAX_PATH]; - uint8 * disk[2]; - uint32 diskSize[2]; - uint8 diskType[2]; - bool imageDirty[2]; - uint8 motorOn; - uint8 activeDrive; - uint8 ioMode; - uint8 latchValue; - uint8 phase; - uint8 track; - - uint8 nybblizedImage[2][232960]; - uint32 currentPos; - - // And here are some private class variables (to reduce function redundancy): - static uint8 header[21]; - static uint8 doSector[16]; - static uint8 poSector[16]; -}; - -#endif // __FLOPPY_H__ +// +// Apple 2 floppy disk support +// + +#ifndef __FLOPPY_H__ +#define __FLOPPY_H__ + +// MAX_PATH isn't defined in stdlib.h on *nix, so we do it here... +#ifdef __GCCUNIX__ +#include +#define MAX_PATH _POSIX_PATH_MAX +#else +#include // for MAX_PATH on MinGW/Darwin +#endif +#include + +enum { DT_UNKNOWN, DT_DOS33, DT_DOS33_HDR, DT_PRODOS, DT_NYBBLE }; + +class FloppyDrive +{ + public: + FloppyDrive(); + ~FloppyDrive(); + + bool LoadImage(const char * filename, uint8_t driveNum = 0); + bool SaveImage(uint8_t driveNum = 0); + bool SaveImageAs(const char * filename, uint8_t driveNum = 0); + void CreateBlankImage(uint8_t driveNum = 0); + void SwapImages(void); + const char * GetImageName(uint8_t driveNum = 0); + void EjectImage(uint8_t driveNum = 0); + bool DriveIsEmpty(uint8_t driveNum = 0); + bool DiskIsWriteProtected(uint8_t driveNum = 0); + void SetWriteProtect(bool, uint8_t driveNum = 0); + + // I/O functions ($C0Ex accesses) + + void ControlStepper(uint8_t addr); + void ControlMotor(uint8_t addr); + void DriveEnable(uint8_t addr); + uint8_t ReadWrite(void); + uint8_t GetLatchValue(void); + void SetLatchValue(uint8_t value); + void SetReadMode(void); + void SetWriteMode(void); + + protected: + void DetectImageType(const char * filename, uint8_t driveNum); + void NybblizeImage(uint8_t driveNum); + void DenybblizeImage(uint8_t driveNum); + + private: + char imageName[2][MAX_PATH]; + uint8_t * disk[2]; + uint32_t diskSize[2]; + uint8_t diskType[2]; + bool imageDirty[2]; + bool writeProtected[2]; + uint8_t motorOn; + uint8_t activeDrive; + uint8_t ioMode; + uint8_t latchValue; + uint8_t phase; + uint8_t track; + + uint8_t nybblizedImage[2][232960]; + uint32_t currentPos; + + // And here are some private class variables (to reduce function redundancy): + static uint8_t header[21]; + static uint8_t doSector[16]; + static uint8_t poSector[16]; + static char nameBuf[MAX_PATH]; +}; + +#endif // __FLOPPY_H__