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

📄 fdtool.cpp

📁 使用C语言编写的一些操作FLOPPY DISK的函数
💻 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 + -