📄 cf.h
字号:
/* Copyright (c) 2002 Supconyb Co.,Ltd.
All rights reserved.
File name:
Abstract:
This File defined functions use for CF card
Current version: 1.0a
Author: ZhaoXin
*/
#include <absacc.h>
sbit reg=P1^4;
sbit reg_select=P1^5;
unsigned char *cf_start_addr=&XBYTE[0xe000];
#define ARCHIVE 0x20
#define DIR 0x10
#define VOL 0x08
#define SYS 0x04
#define HIDDEN 0x02
#define READONLY 0x01
#define NORMAL 0x00
#define CF_CIS (*cf_start_addr)
#define CF_CONFIG (*cf_start_addr)
#define CF_CONFIG_STATUS (*(cf_start_addr+2))
#define CF_REP (*(cf_start_addr+4))
#define CF_DATA (*cf_start_addr)
#define CF_ERROR (*(cf_start_addr+1))
#define CF_FEATURE (*(cf_start_addr+1))
#define CF_SECTOR_COUNT (*(cf_start_addr+2))
#define CF_SECTOR_NUM (*(cf_start_addr+3))
#define CF_CYLINDER_LOW (*(cf_start_addr+4))
#define CF_CYLINDER_HIGH (*(cf_start_addr+5))
#define CF_DRV_HEAD (*(cf_start_addr+6))
#define CF_STATUS (*(cf_start_addr+7))
#define CF_COMM (*(cf_start_addr+7))
#define CF_DATA_EVEN (*(cf_start_addr+8))
#define CF_DATA_ODD (*(cf_start_addr+9))
#define CF_CONTROL (*(cf_start_addr+0x0e))
#define CF_ID (*(cf_start_addr+0x0f))
//xdata unsigned char fat_map[4096]; //8k bytes for mapping Fat table
//for 32Mb CF first sector
code unsigned char BPB[512]={
0xEB,0x3C,0x90,0x2A,0x61,0x28,0x3C,0x58,0x49,0x48,0x43,0x00,0x02,0x01,0x01,0x00,
0x02,0x00,0x02,0x01,0xF6,0xF8,0xF4,0x00,0x3F,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x29,0xA2,0x5C,0xB0,0x5C,0x4E,0x4F,0x20,0x4E,0x41,
0x4D,0x45,0x20,0x20,0x20,0x20,0x46,0x41,0x54,0x31,0x36,0x20,0x20,0x20,
0x33,
0xC9,
0x8E,
0xD1,
0xBC,
0xF0,
0x7B,0x8E,
0xD9,0xB8,
0x00,0x20,
0x8E,0xC0,
0xFC,0xBD,
0x00,0x7C,
0x38,0x4E,0x24,0x7D,0x24,0x8B,0xC1,0x99,0xE8,0x3C,0x01,0x72,0x1C,0x83,0xEB,0x3A,
0x66,0xA1,0x1C,0x7C,0x26,0x66,0x3B,0x07,0x26,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA,
0x02,0x88,0x56,0x02,0x80,0xC3,0x10,0x73,0xEB,0x33,0xC9,0x8A,0x46,0x10,0x98,0xF7,
0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E,0x13,0xD1,0x8B,0x76,0x11,
0x60,0x89,0x46,0xFC,0x89,0x56,0xFE,0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03,
0xC3,0x48,0xF7,0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x00,0xE8,0xE6,
0x00,0x72,0x39,0x26,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE,0xA1,0x7D,0xF3,0xA6,
0x61,0x74,0x32,0x4E,0x74,0x09,0x83,0xC7,0x20,0x3B,0xFB,0x72,0xE6,0xEB,0xDC,0xA0,
0xFB,0x7D,0xB4,0x7D,0x8B,0xF0,0xAC,0x98,0x40,0x74,0x0C,0x48,0x74,0x13,0xB4,0x0E,
0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEF,0xA0,0xFD,0x7D,0xEB,0xE6,0xA0,0xFC,0x7D,0xEB,
0xE1,0xCD,0x16,0xCD,0x19,0x26,0x8B,0x55,0x1A,0x52,0xB0,0x01,0xBB,0x00,0x00,0xE8,
0x3B,0x00,0x72,0xE8,0x5B,0x8A,0x56,0x24,0xBE,0x0B,0x7C,0x8B,0xFC,0xC7,0x46,0xF0,
0x3D,0x7D,0xC7,0x46,0xF4,0x29,0x7D,0x8C,0xD9,0x89,0x4E,0xF2,0x89,0x4E,0xF6,0xC6,
0x06,0x96,0x7D,0xCB,0xEA,0x03,0x00,0x00,0x20,0x0F,0xB6,0xC8,0x66,0x8B,0x46,0xF8,
0x66,0x03,0x46,0x1C,0x66,0x8B,0xD0,0x66,0xC1,0xEA,0x10,0xEB,0x5E,0x0F,0xB6,0xC8,
0x4A,0x4A,0x8A,0x46,0x0D,0x32,0xE4,0xF7,0xE2,0x03,0x46,0xFC,0x13,0x56,0xFE,0xEB,
0x4A,0x52,0x50,0x06,0x53,0x6A,0x01,0x6A,0x10,0x91,0x8B,0x46,0x18,0x96,0x92,0x33,
0xD2,0xF7,0xF6,0x91,0xF7,0xF6,0x42,0x87,0xCA,0xF7,0x76,0x1A,0x8A,0xF2,0x8A,0xE8,
0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01,0x02,0x80,0x7E,0x02,0x0E,0x75,0x04,0xB4,0x42,
0x8B,0xF4,0x8A,0x56,0x24,0xCD,0x13,0x61,0x61,0x72,0x0B,0x40,0x75,0x01,0x42,0x03,
0x5E,0x0B,0x49,0x75,0x06,0xF8,0xC3,0x41,0xBB,0x00,0x00,0x60,0x66,0x6A,0x00,0xEB,
0xB0,0x4E,0x54,0x4C,0x44,0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,0x4E,0x54,
0x4C,0x44,0x52,0x20,0x69,0x73,0x20,0x6D,0x69,0x73,0x73,0x69,0x6E,0x67,0xFF,0x0D,
0x0A,0x44,0x69,0x73,0x6B,0x20,0x65,0x72,0x72,0x6F,0x72,0xFF,0x0D,0x0A,0x50,0x72,
0x65,0x73,0x73,0x20,0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x20,0x74,0x6F,0x20,0x72,
0x65,0x73,0x74,0x61,0x72,0x74,0x0D,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xBF,0xCC,0x55,0xAA
};
struct sCIS
{
unsigned char card_sign[2];
unsigned char def_cylinder_num[2];
unsigned char reserved1[2];
unsigned char def_head_num[2];
unsigned char uf_bytes_per_track[2];
unsigned char uf_bytes_per_sector[2];
unsigned char def_sector_per_track[2];
unsigned char sector_per_card[4];
unsigned char vendor_unique[2];
char serial_num[20];
unsigned char buffer_type[2];
unsigned char buffer_size[2];
unsigned char ECC_bytes[2];
char fireware[8];
char model_num[40];
unsigned char max_wr_sector[2];
unsigned char double_word[2];
unsigned char capabilities[2];
unsigned char reserved2[2];
unsigned char PIO_mode[2];
unsigned char DMA_mode[2];
unsigned char tr_par_valid[2];
unsigned char cur_cylinder_num[2];
unsigned char cur_head_num[2];
unsigned char cur_sector_per_track[2];
unsigned char cur_capacity[4];
unsigned char multi_sector[2];
unsigned char total_sector[4];
unsigned char reserved3[138];
unsigned char security_status[2];
unsigned char vendor[64];
unsigned char power[2];
unsigned char reserved4[182];
};
struct sBoot //512 bytes
{
unsigned char bsJump[3]; //0x00
char OemName[8]; //0x03
unsigned char bsBytesPerSec[2]; //0x0b 2
unsigned char bsSecPerClust; //0x0d 1
unsigned char bsResSectors[2]; //0x0e 2
unsigned char bsFATs; //0x10 1
unsigned char bsRootDirEnts[2]; //0x11 2
unsigned char bsSectors[2]; //0x13 2
unsigned char bsMedia; //0x15 1
unsigned char bsFATsecs[2]; //0x16 2
unsigned char bsSecPerTrack[2]; //0x18 2
unsigned char bsHeads[2]; //0x1a 2
unsigned char bsHiddenSecs[2]; //0x1c 2
unsigned char bsBootCode[2]; //0x1e 2
unsigned char bsHugeSectors[4]; //0x20 2 use if driver>32Mb
unsigned char bsDriveNumber; //0x24 1
unsigned char bsReserved1; //0x25 1
unsigned char bsBootSignature; //0x26 1
unsigned char bsVolumeID[4]; //0x27 4
char bsVolumeLabel[11]; //0x2b 11
char bsFileSysType[8]; //0x36 8
unsigned char unused[512-64];
unsigned char bsSign[2];
// UWORD sysRootDirSecs; // of sectors root dir uses
// ULONG sysFatStart; // first FAT sector
// ULONG sysRootDirStart; // first root directory sector
// ULONG sysDataStart; // first data sector
};
struct sBootInformation
{
unsigned int byte_per_sec;
unsigned char sec_per_clust;
unsigned int reserved_sector;
unsigned char fat_num;
unsigned int root_dir_size;
unsigned int total_sector;
unsigned char media_flag;
unsigned int fat_size;
unsigned int sec_per_track;
unsigned int heads;
unsigned int hidden_sector;
unsigned int boot_code;
unsigned long huge_sec;
unsigned char drive_num;
unsigned char boot_signature;
unsigned char volume_id[4];
char volume_lab[11];
char file_sys_type[8];
};
struct sTime
{
unsigned int hour:5;
unsigned int min:6;
unsigned int sec:5;
};
struct sDate
{
unsigned int year:7;
unsigned int mon:4;
unsigned int day:5;
};
struct sRootDir //32 bytes
{
char file_name[8];
char exten_name[3];
unsigned char file_attribute;
unsigned char reserved[10];
struct sTime last_up_time;
struct sDate last_up_date;
unsigned char first_clust[2];
unsigned char file_size[4];
};
struct sSubDir //32 bytes
{
char file_name[8];
char exten_name[3];
unsigned char file_attribute;
unsigned char reserved[10];
struct sTime last_up_time;
struct sDate last_up_date;
unsigned char first_clust[2];
unsigned char file_size[4];
};
struct sFatNode
{
unsigned int current_clustor;
unsigned int next_clustor;
};
struct sFdtMirror
{
unsigned char file_name[11]; //name:8bytes;extern:3bytes
unsigned char start_clustor[2];
};
struct sFileInfo
{
unsigned int start_clustor;
unsigned long size;
unsigned char pos_sector_in_clustor;
unsigned int file_record_sector;
unsigned int file_pos_in_sector;
unsigned int current_sector;
unsigned int current_in_sector_pos;
unsigned long file_pt;
unsigned int in_fat_sec;
};
bit SerchFreeFAT(unsigned int *clustor_chain,unsigned int data_len,unsigned int start_sector);
//bit DeletFile(unsigned int
char EmptyDirFDT(unsigned int start_sec);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -