⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdbios.h

📁 dos下直接对软盘控制器操作的C++类, 用它可以制作
💻 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 + -