📄 fdbios.h
字号:
/*
Floppy Disk Tools v1.1 Final version write by 孙宝建
12-15-2002
*/
#ifndef _FDBIOS_H
#define _FDBIOS_H
#include "commcpp.h"
#include "..\common\commcpp.h" // added by classview
#define NO_FD 0xFFFF
#define INVALID_BUFFER 0XFFFE
#define STATUS_WRITE 0XFFFC
#define STATUS_READ 0XFFFB
#define CONTROL_OVER_TIME 0XFFFA
#define OVER_TIMES 0XFFF9
#define NO_INT 0XFFF8
#define EXCEPT_TERMINATE 0XFFF7
#define INCORRECT_TRACK 0xFFF6
#define ID_CRC 0XFFF5
#define TRACK_ERR 0XFFF4
#define BAD_TRACK 0XFFF3
#define ADDRESS_ID 0XFFF2
#define NO_RESPONSE 0XFFF1
#define READ_KEY_FILE_FAIL 0XFFF0
#define FAIL 0
#define VALID_COMMAND 0X1
#define LOST_ID 0X2
#define WRITE_PROTECT 0X3
#define OVER_LAST_SECTOR 0X4
#define DMA_OVER_TIME 0X8
#define DATA_CRC 0X10
#define CONTRL_ID 0X20
#define OVER_TIME 0X80
#define UNKNOWN_ERROR 0X0001
#define MAX_BUFFER_SIZE 20000
#define MAX_ERROR_BUFF_SIZE 200
#define MAX_SECTOR_ID 50
#define MAX_RETRY 3
#define READ_TIME 0
#define IO_DELAY 0
#define COMMAND8_DELAY 0
#define COMMANDF_DELAY 0
#define COMMAND7_DELAY 0
#define START_MOTOR_DELAY 125
#define SHUT_MOTOR_DELAY 0
#define DMA_IO_DELAY 0
#define RESPONSE_TIME 0
#define RESPONSE_TIMES 1
#define CONTROL_TIME 200
#define RESET_TIME 0
#define DELAY_WRITE_CRC_SECTOR 0
#define DELAY_EXIST_DISK 0
#define MAX_WAIT 1
#define WAIT_INT_TIME 30000
#define READ_DISK 0x46
#define WRITE_DISK 0x4A
#define VERIFY_DISK 0x42
#define WRITEREADY(uc) ( (uc&0x80))// && ( !(uc&0x40) ) )
#define READREADY(uc) ( (uc&0x80) )//&& (uc&0x40) )
#define COMPLETE(uc) ( (uc&0x80) && (!(uc&0x20 || uc&0x10)) && (uc&0x40) )
#define MAX_BUFFER_BYTES 0XFFEF
#define OPEN_KEY_FILE_FAIL 0XFFEE
#define READ_SECOTOR_FAIL 0XFFED
#define WRITE_SECOTOR_FAIL 0XFFEC
#define FORMAT_FAIL 0XFFEB
#define SUCCESS 0XFFEA
#define CANNT_FIND_TRACK 0XFFE9
#define NO_CRC 0xFFE8
#define READ_SECTOR_FAIL 0XFFE7
#define WRITE_SECTOR_FAIL 0XFFE6
#define OVER_MAX_SECTOR_ID 0xFFE5
#define cmReadID 202
#define cmMkKV 203
#define cmMkRS 204
#define cmRdRSID 205
#define cmRdKVID 206
#define cmMkRS2002 207
#define cmMkKVV70 222
#define cmMkRSAll 223
typedef struct tag_SectorID
{
CHAR ucTrack;
CHAR ucHead;
CHAR ucSector;
CHAR ucBytesOfSectorCode;
}SECTOR_ID,*PSECTOR_ID;
class CFDBios
{
private:
CHAR *pBuffer;
CHAR ucMotorCtrl;
CHAR ucDiskNumber;
CHAR ucResult;
CHAR *pcIntFlag;
int *puTimeCount;
int uTimeCount;
BOOL bMotorWork;
protected:
CHAR ucRetValueBuffer[8];
public:
SECTOR_ID SectorId[MAX_SECTOR_ID];
ULONG uError;
private:
BOOL IsReadReady(void);
BOOL IsWriteReady(void);
BOOL IsComplete(void);
BOOL GetResult(void);
BOOL CanRetry();
void Delay(int Count);
void IoDelay(int delaytimes);
void StartDMA(CHAR cCommand,CHAR ucnSectors,int ucBytesOfSector,
char *pBuffer);
void ClearCommand(void);
int GetSectorBytes(int ucSectorBytesCode);
protected:
BOOL ExistDisk(void);
BOOL IsTrack(USHORT ucTrack);
BOOL GetErr(int uCount);
BOOL Reset(void);
BOOL SendCommand(USHORT ucCommand);
BOOL GotoTrack(USHORT ucTrack);
void TranResult(CHAR Result);
void ResetController(void);
void StartMotor(void);
void ShutMotor(void);
void GetErrInfo(void);
int ReadDMACount(void);
int GetTimeCount(void);
void DisableINT(void);
void EnableINT(void);
public:
CFDBios(char *p,ULONG ulBufferLength);
CFDBios(void){bMotorWork=FALSE;};
void DetectFD(void);
BOOL Init(char *p,ULONG ulBufferLength);
BOOL CRCVerify(void);
BOOL ReadSector(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSecotrBytesCode,CHAR ucLastSector,
CHAR ucSecotrL);
BOOL ReadSectorEx(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSectorBytesCode,CHAR ucLastSector,
CHAR ucSectorL,int uReadBytes);
BOOL WriteSector(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSecotrBytesCode,CHAR ucLastSector,
CHAR ucSecotrL);
BOOL WriteSectorEx(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSectorBytesCode,CHAR ucLastSector,
CHAR ucSectorL,int uReadBytes);
BOOL WriteCRCSector(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSectorBytesCode,CHAR ucLastSector,
CHAR ucSectorL);
BOOL WriteDelSector(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSectorBytesCode,CHAR ucLastSector,
CHAR ucSectorL);
BOOL ReadTrack(CHAR ucTrack,CHAR ucHead,CHAR ucStartSector,
CHAR ucnSectors,CHAR ucSectorBytesCode,CHAR ucLastSector,
CHAR ucSectorL);
BOOL ReadID(CHAR ucHead);
/* BOOL Format(CHAR ucTrack,CHAR ucHead,CHAR ucnSectors,
CHAR ucSectorBytesCode,CHAR ucSectorL,
CHAR ucSectorFillCode);
*/
BOOL Format(USHORT ucTrack,USHORT ucHead,
USHORT ucnSectors,USHORT ucSectorBytesCode,
USHORT ucSectorL,USHORT ucSectorFillCode);
void DisplayError(char *p);
};
class CFDTool:public CFDBios
{
private:
CHAR *puBuffer;
protected:
int Analysice(PSECTOR_ID pID,int Count);
public:
int uStatus;
enum {
NO_ENOUGH_MEMORY =0xFFFF
};
private:
protected:
public:
CFDTool();
virtual CFDTool::~CFDTool();
int ReadID(CHAR ucTrack,CHAR ucHead,
int uReadTimes,PSECTOR_ID pID);
int ReadKV3KID(PSECTOR_ID p);
int ReadRiSingID(PSECTOR_ID p);
int MakeRiSingKeyDisk2002(void);
int MakeKV3KKeyDisk(char *pszFileName);
int MakeKV3KKeyDiskV70(char *pszFileName);
int MakeRiSingKeyDisk(void);
int MakeRiSingKeyDiskAll(void);
int Format1440(CHAR ucTrack,CHAR ucHead);
void DisplayError(char *psErr);
};
#endif //_FDBIOS_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -