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

📄 ata_emu.c

📁 PDA上的CF CARD 文件系统的建立程式
💻 C
字号:
//#include <sys/syscall.h>


#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <direct.h>
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <string.h>

/**** added by chilong 11/11/2001 ****/
//#include <stdio.h>

//#include "filesys/include/FileSys.h"
#include "../include/fat1x.h"
#include"../include/ata_emu.h"
#include"../include/ata_pcc.h"
/**** added by chilong 11/11/2001 ****/

int ghCardDev;
extern int CF_Format(void);
extern short FAT_get_hd_chs(unsigned short *sectorBuffer);

int CFInit(void)
{
	int i, ret;
	unsigned char buffer[512];

	_mkdir("c:\\EmuBin");
	ghCardDev = _open("c:\\EmuBin\\cfcard32m.bin",_O_RDWR | _O_CREAT | _O_BINARY,_S_IREAD | _S_IWRITE);
	if(ghCardDev == -1)
		return 0;
	_lseek(ghCardDev, 0, SEEK_END);
	if(_tell(ghCardDev) > 0)
		return 1;
	//pBuffer=(unsigned char *)malloc(LONG_BLOCK_LENTH);
	memset(buffer, 0, 512);
	_lseek(ghCardDev, 0, SEEK_SET);
	for(i=0; i<0xf500; i++)
	{
		//ret=_write(ghFlashDev,(unsigned char *)gBlockBuffer, BLOCK_LENTH);
		ret=_write(ghCardDev, buffer, 512);
		if(ret == -1)
			return 0;
	}

	FAT_get_hd_chs((unsigned short *)buffer);
	CF_Format();

	return 1;
}

unsigned short  CFCardInCheck(void)
{
	return CARD_IN;
}

/*************************************************************
Fuction: WAIT_COMMAND_AVAILABLE
**************************************************************/
#ifdef FAT_USE_PCMCIA
unsigned short WAIT_COMMAND_AVAILABLE(int driver, unsigned long howLong)
{
  unsigned short result;
  unsigned long timeout;

#if 0
  /**** added by chilong temporaily 11/11/2001 ****/
//  unsigned int i = 0;
  /**** added by chilong temporaily 11/11/2001 ****/

/**** added by chilong 11/11/2001 ****/
#ifdef PCMCIA_DEBUG
  printString("WAIT_COMMAND_AVAILABLE\n\r");
#endif

  timeout = howLong + sc_getTimeStamp();

  /**** added by chilong 11/11/2001 ****/
//  timeout = howLong + 1000;
  /**** added by chilong 11/11/2001 ****/

  /* Wait until BSY = 0 */
  #ifdef FAT_USE_PCMCIA
        result = pcmInport(driver + STATUS_REG);
  #else
        result = inportb(driver + STATUS_REG);
        result = result & 0x00FF;

  #endif

  while ((result & ATA_COMMAND_BUSY) == ATA_COMMAND_BUSY)
  {
        if (timeout < sc_getTimeStamp())
                break;

#if( PCB_V >=5 )
        // if card removed , break of the wait loop immediately
        if( gCFCardStatus != CF_CARD_IN )
                break;
#endif

        #ifdef FAT_USE_PCMCIA
                result = pcmInport(driver + STATUS_REG);

        #else
                result = inportb(driver + STATUS_REG);
                result = result & 0x00FF;

        #endif

  }
  return result;
#endif

  return ATA_DRIVE_READY;
}
#endif
/*************************************************************
Fuction: GET_ERROR_RESULT
          Get the error status reg.
return value: ATA_OK, ATA_FAILURE, ATA_FAIL_BBK, ATA_FAIL_UNC, ATA_FAIL_IDNF
              ATA_FAIL_ABRT, ATA_FAIL_AMNF
**************************************************************/
#ifdef FAT_USE_PCMCIA
unsigned short GET_ERROR_RESULT(int driver)
{

  return ATA_OK;
}
#endif
/*************************************************************
Function: WAIT_COMMAND_RESULT
**************************************************************/
#ifdef FAT_USE_PCMCIA
unsigned short WAIT_COMMAND_RESULT(int driver, unsigned long howLong)
{

  return ATA_DRIVE_READY;
}
#endif


/*************************************************************
Function: ATA_GET_PARAMETER
**************************************************************/
#ifdef FAT_USE_PCMCIA
unsigned short ATA_GET_PARAMETER(int driver, unsigned short *buf)
{
	buf[0]  = 0x848a;
	buf[1]  = 0x01ea;
	buf[2]  = 0x0000;
	buf[3]  = 0x0004;
	buf[4]  = 0x0000;
	buf[5]  = 0x0240;
	buf[6]  = 0x0020;
	buf[7]  = 0x0000;
	buf[8]  = 0xf500;
	buf[9]  = 0x0000;
	strcpy((char *)&buf[10], "223185d0402");
	buf[20] = 0x0002;
	buf[21] = 0x0002;
	buf[22] = 0x0004;
	strcpy((char *)&buf[23], "223185d0402");

	buf[54] = 0x01ea;
	buf[55] = 0x0004;
	buf[56] = 0x0020;


	return ATA_OK;
}
#endif
/*************************************************************
Function: ATA_READ_SECTOR
        Read N sectors from drive
**************************************************************/
unsigned short ATA_READ_SECTOR(int driver, unsigned char secCount, unsigned long startSec, unsigned short *buf)
{
	int offset;
	int ret;

	offset = startSec*512;

	_lseek(ghCardDev, offset, SEEK_SET);

	ret=_read(ghCardDev, buf, secCount*512);
	if(ret==-1)
		return 0xffff;
	else
		return ATA_OK; 

} 

/*************************************************************
Function: ATA_WRITE_SECTOR
        Write N sectors to drive
**************************************************************/
unsigned short ATA_WRITE_SECTOR(int driver, unsigned char secCount, unsigned long startSec, unsigned short *buf)
{
	int offset;
	int ret;

	offset = startSec*512;

	_lseek(ghCardDev, offset, SEEK_SET);

	ret=_write(ghCardDev, buf, secCount*512);
	if(ret==-1)
		return 0xffff;
	else
		return ATA_OK; 

}

/*************************************************************
Function: ATA_READ
**************************************************************/
unsigned short ATA_READ(int driver, unsigned char secCount, unsigned long startSec, unsigned short *buf)
{
  return (ATA_READ_SECTOR(driver, secCount, startSec, buf));
}

/*************************************************************
Function: ATA_WRITE
**************************************************************/
unsigned short ATA_WRITE(int driver, unsigned char secCount, unsigned long startSec, unsigned short *buf)
{
  return (ATA_WRITE_SECTOR(driver, secCount, startSec, buf));
}

//#endif //FAT_ID

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -