📄 fdtool.cpp
字号:
/*************** ASUS CONFIDENTIAL ****************/
/*************** ****************/
/*************** Description : Floppy Library ****************/
/*************** ****************/
/*************** Version: 0.01 ****************/
/*************** ****************/
/*************** Company : ASUSTech ****************/
/*************** ****************/
/*************** Programmer : SE1\hong-bing ****************/
/*************** ****************/
/**********************************************************************/
#include "FDTool.h"
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#ifdef __DJGPP__
#include <unistd.h>
#endif
CFDTool::CFDTool()
{
puBuffer =new BYTE [MAX_BUFFER_SIZE+2];
if(puBuffer==NULL)
{
uError=NO_ENOUGH_MEMORY;
return;
}
Init(puBuffer);
}
CFDTool::~CFDTool()
{
delete []puBuffer;
ShutMotor();
}
int CFDTool::Format1440(BYTE ucTrack,BYTE ucHead)
{
int i;
for(i=0;i<18*4;i+=4)
{
puBuffer[i]=ucTrack;
puBuffer[i+1]=ucHead;
puBuffer[i+2]=i+1;
puBuffer[i+3]=2;
}
if( Format(ucTrack,ucHead,18,2,0x54,0xf6) )
{
return 0;
}
return -1;
}
int CFDTool::ReadID(BYTE ucTrack, BYTE ucHead, int uReadTimes, PSECTOR_ID pID)
{
int i;
if(uReadTimes>MAX_SECTOR_ID )
{
uError=OVER_MAX_SECTOR_ID;
return 0;
}
if( GotoTrack(ucTrack) )
{
for(i=0;i<uReadTimes;i++)
{
if( TFDD::ReadID(ucHead) )
{
pID[i].ucTrack=ucRetValueBuffer[3];
pID[i].ucHead=ucRetValueBuffer[4];
pID[i].ucSector=ucRetValueBuffer[5];
pID[i].ucBytesOfSectorCode=ucRetValueBuffer[6];
}
}
return i;
}
else
{
uError=CANNT_FIND_TRACK;
}
return 0;
}
void CFDTool::DisplayError(char *psErr)
{
switch (uError)
{
// ---- COMMAND ERROR ----
case VALID_COMMAND :sprintf(psErr,"Valid command \n"); break;
case LOST_ID :sprintf(psErr,"Lost sector id\n");break;
case WRITE_PROTECT :sprintf(psErr,"Write protect\n");break;
case OVER_LAST_SECTOR:sprintf(psErr,"Over last sector\n");break;
case DMA_OVER_TIME :sprintf(psErr,"DMA over time\n");break;
// ---- DATA HANDEL ERROR ----
case DATA_CRC :sprintf(psErr,"Data CRC error\n");break;
case CONTRL_ID :sprintf(psErr,"Lost contrl id\n");break;
case OVER_TIMES :sprintf(psErr,"Retry fail\n"); break;
// ---- DEVICE ERROR ----
case NO_FD :sprintf(psErr,"No disk\n"); break;
case INVALID_BUFFER :sprintf(psErr,"Invalid buffer\n"); break;
case NO_ENOUGH_MEMORY:sprintf(psErr,"No enough memory\n"); break;
case STATUS_WRITE :sprintf(psErr,"Controller error:Status write \n"); break;
case STATUS_READ :sprintf(psErr,"Controller error:Status read \n"); break;
case CONTROL_OVER_TIME :sprintf(psErr,"Controller over time\n"); break;
case OVER_TIME :sprintf(psErr,"Over time\n"); break;
case NO_INT :sprintf(psErr,"No int \n"); break;
case EXCEPT_TERMINATE:sprintf(psErr,"Except terminate\n"); break;
case INCORRECT_TRACK :sprintf(psErr,"Incorrect track\n"); break;
case ID_CRC :sprintf(psErr,"Sector id CRC error \n");break;
case TRACK_ERR :sprintf(psErr,"Track error\n");break;
case BAD_TRACK :sprintf(psErr,"Bad track\n");break;
case ADDRESS_ID :sprintf(psErr,"ADDRESS_ID\n");break;
case NO_RESPONSE :sprintf(psErr,"Controller no response \n"); break;
case CANNT_FIND_TRACK:sprintf(psErr,"Can't find track\n");break;
case OVER_MAX_SECTOR_ID:sprintf(psErr,"Over max sector id\n");break;
default :sprintf(psErr,"Unknown error\n");break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -