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

📄 fat32listdirectory.lst

📁 C51实现的FAT32文件系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
           =2  typedef unsigned int WORD;
           =2  typedef unsigned long DWORD;
           =2 #endif
  16      =2  
  17      =2  #ifndef _IDEIO_DEFINE
  18      =2   #define _IDEIO_DEFINE
  19      =2  
  20      =2  //IDE设备基地址
  21      =2  #define IDE_ADDR_BASE                                           0x8000
  22      =2  
  23      =2  //IDE设备寄存器组地址偏移量
  24      =2  #define IDE_ADDR_CTRL                                           0x1000
  25      =2  #define IDE_ADDR_CMD                                            0x0000
  26      =2  
  27      =2  //IDE设备寄存器偏移量
  28      =2  #define IDE_IO_DA0                                              0x01
  29      =2  #define IDE_IO_DA1                                              0x02
  30      =2  #define IDE_IO_DA2                                              0x04
  31      =2  
  32      =2  //IDE设备控制I/O线
  33      =2  #define IDE_IO_RESET                                            P5_0
  34      =2  
  35      =2  //IDE设备数据端口
  36      =2  #define IDE_PORT_DATLSB                                         ACC
  37      =2  #define IDE_PORT_DATMSB                                         DAT16H
  38      =2  
  39      =2  //IDE 函数返回值
  40      =2  #define IDE_SUCCESSFUL                                          0x00
  41      =2  #define IDE_ERROR_RESET                                         0x01
  42      =2  #define IDE_ERROR_DIAGNOSTIC                                    0x01
  43      =2  #define IDE_ERROR_BSY                                           0x10
  44      =2  #define IDE_ERROR_DRQ                                           0x11
  45      =2  #define IDE_ERROR_DRDY                                          0x12
  46      =2  #define IDE_ERROR_NODATA                                        0x13
  47      =2  
  48      =2  //电源管理
  49      =2  #define IDE_POWER_SLEEP                                         0x00
  50      =2  #define IDE_POWER_IDLE                                          0x01
  51      =2  #define IDE_POWER_STANDBY                                       0x02
  52      =2  
  53      =2  //设备编号
  54      =2  #define IDE_DEVICE0                                             0
  55      =2  #define IDE_DEVICE1                                             1
  56      =2  
  57      =2  #define IDE_RESET_HARDWARE                                      0
  58      =2  #define IDE_RESET_SOFTWARE                                      1
C51 COMPILER V6.23a  FAT32LISTDIRECTORY                                                    12/24/2004 00:11:42 PAGE 6   

  59      =2  
  60      =2  #define IDE_DEVICE_MASTER                                       0x00
  61      =2  #define IDE_DEVICE_SLAVE                                        0x10
  62      =2  
  63      =2  //设备类型
  64      =2  #define DRIVER_TYPE_HDD                                         0x01            //硬盘
  65      =2  #define DRIVER_TYPE_CDROM                                       0x02            //光驱
  66      =2  #define DRIVER_TYPE_FLASH                                       0x03            //FLASH
  67      =2  
  68      =2  //IDE扇区读写
  69      =2  #define IDEReadSector(X)                                        IDE.CurrentSector=X; _IDEReadSector()
  70      =2  #define IDEWriteSector(X)                                       IDE.CurrentSector=X; _IDEWriteSector()
  71      =2  
  72      =2  //IDE接口参数表
  73      =2  struct IDEStr                                    
  74      =2  {
  75      =2          BYTE    TotalDevices;           //驱动器数量
  76      =2          BYTE    CurrentDevice;          //当前驱动器
  77      =2          DWORD   CurrentSector;          //当前扇区号
  78      =2          WORD    BytesPerSec;            //每扇区字节数
  79      =2  };
  80      =2  
  81      =2  //IDE设备参数表
  82      =2  struct IDEDeviceStr
  83      =2  {
  84      =2          BYTE    DriverType;             //驱动器类型
  85      =2          DWORD   TotalSectors;           //总扇区数
  86      =2  };
  87      =2  
  88      =2  //硬盘参数表
  89      =2  struct HDDStr                           //硬盘介质参数表
  90      =2  {
  91      =2          BYTE    TotalPartitions;        //分区数
  92      =2          BYTE    CurrentPartition;       //当前分区
  93      =2  };
  94      =2  #ifndef _LIBRARY_DEFINE
           =2  xdata BYTE DiskBuffer[512];
           =2 
           =2  xdata struct IDEStr IDE;
           =2  xdata struct IDEDeviceStr IDEDevice[2];
           =2  xdata struct HDDStr HDD;
           =2 #endif
 101      =2  #endif
 102      =2  
 103      =2  //磁盘缓冲区
 104      =2  extern xdata BYTE DiskBuffer[512];
 105      =2  
 106      =2  extern xdata struct IDEStr IDE;
 107      =2  extern xdata struct IDEDeviceStr IDEDevice[2];
 108      =2  extern xdata struct HDDStr HDD;
 109      =2  
 110      =2  extern void IDEInit(void);
 111      =2  extern BYTE IDEIdentifiedDevice(BYTE DeviceNum);
 112      =2  extern void IDESetCurrentDevice(BYTE DeviceNum);
 113      =2  extern BYTE IDEReset(BYTE bRestMode);
 114      =2  extern BOOL IDEStatus(BYTE flag,BYTE wait,BYTE logic,WORD timeout);
 115      =2  extern void IDEPowerManagement(BYTE cmd);
 116      =2  extern BYTE _IDEReadSector();                   //读一个扇区
 117      =2  extern BYTE _IDEWriteSector();                  //写一个扇区
  10      =1  #include "FAT32.h"
   1      =2  /********************************************************/
   2      =2  /*                                                      */
C51 COMPILER V6.23a  FAT32LISTDIRECTORY                                                    12/24/2004 00:11:42 PAGE 7   

   3      =2  /*  库   名   称:FAT32文件系统函数库                   */
   4      =2  
   5      =2  /*  功 能  描 述:提供对FAT32文件系统按文件名存取       */
   6      =2  /*                                                      */
   7      =2  /*                                                      */
   8      =2  /********************************************************/
   9      =2  
  10      =2  #ifndef _TYPE_DEFINE
           =2  #define _TYPE_DEFINE
           =2  typedef bit BOOL;
           =2  typedef unsigned char BYTE;
           =2  typedef unsigned char CHAR;
           =2  typedef unsigned int WORD;
           =2  typedef unsigned long DWORD;
           =2 #endif
  18      =2  
  19      =2  #ifndef _FAT32_DEFINE
  20      =2   #define _FAT32_DEFINE
  21      =2  
  22      =2  #define FAT32_MAX_FCB                           2
  23      =2  
  24      =2  //文件属性
  25      =2  #define FAT32_ATTR_READ_ONLY                    0x01                    //文件属性:只读
  26      =2  #define FAT32_ATTR_HIDDEN                       0x02                    //文件属性:隐含
  27      =2  #define FAT32_ATTR_SYSTEM                       0x04                    //文件属性:系统
  28      =2  #define FAT32_ATTR_VOLUME_ID                    0x08                    //文件属性:卷ID
  29      =2  #define FAT32_ATTR_DIRECTORY                    0x10                    //文件属性:目录
  30      =2  #define FAT32_ATTR_ARCHIVE                      0x20                    //文件属性:归档
  31      =2  #define FAT32_ATTR_LONG_NAME                    FAT32_ATTR_READ_ONLY+FAT32_ATTR_HIDDEN+FAT32_ATTR_SYSTEM+FAT32_ATTR_VOLUME_
             -ID        //文件属性:长文件名
  32      =2  #define FAT32_ATTR_LONG_NAME_MASK               FAT32_ATTR_READ_ONLY+FAT32_ATTR_HIDDEN+FAT32_ATTR_SYSTEM+FAT32_ATTR_VOL
             -UME_ID+FAT32_ATTR_DIRECTORY+FAT32_ATTR_ARCHIVE        //文件属性:长文件名
  33      =2  #define FAT32_LAST_LONG_ENTRY                   0x40                    //长文件名入口标记
  34      =2  
  35      =2  #define FAT32_ERR_MBR_FLAG                      0x01                    //MBR扇区标志错误       FAT32MountPartition
  36      =2  #define FAT32_ERR_PARTITION_NOT_FOUND           0x02                    //指定分区没找到        FAT32MountVolumeID
  37      =2  #define FAT32_ERR_FILE_OPEN_ERROR               FAT32_MAX_FCB           //文件打开错误
  38      =2  #define FAT32_ERR_DIR_NOT_FOUND                 0x01                    //指定的目录入口没有找到F       FAT32ChangeDirectory
  39      =2  #define FAT32_ERR_NOT_DIR                       0x02                    //不是一个目录入口              FAT32ChangeDirectory
  40      =2  
  41      =2  //#define IO_ERROR                      0x00                            //遇到io错误
  42      =2  //#define NO_IO_ERROR                   0x01                            //没有遇到io错误
  43      =2  
  44      =2  //计算指定簇的开始扇区号
  45      =2  #define ClusterToSector(X)                      FAT32.ClusSec + (X - 2) * FAT32.SecPerClus
  46      =2  
  47      =2  struct BootSecFAT16Str                                  //引导扇区   FAT16  扩展结构
  48      =2  {
  49      =2          BYTE    BS_DrvNum;
  50      =2          BYTE    BS_Reserved1;
  51      =2          BYTE    BS_BootSig;
  52      =2          DWORD   BS_VolID;
  53      =2          char    BS_VolLab[11];
  54      =2          char    BS_FilSysType[8];
  55      =2  };
  56      =2  
  57      =2  struct BootSecFAT32Str                                  //引导扇区   FAT32  扩展结构
  58      =2  {
  59      =2          DWORD   BPB_FATSz32;                    //FAT32扇区总数
  60      =2          WORD    BPB_ExtFlags;
  61      =2          WORD    BPB_FSVer;
  62      =2          DWORD   BPB_RootClus;                   //根目录开始的簇
C51 COMPILER V6.23a  FAT32LISTDIRECTORY                                                    12/24/2004 00:11:42 PAGE 8   

  63      =2          WORD    BPB_FSInfo;
  64      =2          WORD    BPB_BkBootSec;
  65      =2          char    BPB_Reserved[12];
  66      =2          BYTE    BS_DrvNum;
  67      =2          BYTE    BS_Reserved1;
  68      =2          BYTE    BS_BootSig;
  69      =2          DWORD   BS_VolID;
  70      =2          char    BS_VolLab[11];
  71      =2          char    BS_FilSysType[8];
  72      =2  };
  73      =2  
  74      =2  struct BootSecStr                                               //引导扇区结构
  75      =2  {
  76      =2          BYTE    BS_jmpBoot[3];
  77      =2          BYTE    BS_OEMName[8];
  78      =2          WORD    BPB_BytesPerSec;                //每扇区字节数  512
  79      =2          BYTE    BPB_SecPerClus;                 //每簇扇区数    1 2 4 8 16 32 64 128
  80      =2          WORD    BPB_RsvdSecCnt;                 //保留扇区数    0x20
  81      =2          BYTE    BPB_NumFATs;                    //FAT表个数             2
  82      =2          WORD    BPB_RootEntCnt;         
  83      =2          WORD    BPB_TotSec16;
  84      =2          BYTE    BPB_Media;
  85      =2          WORD    BPB_FATSz16;
  86      =2          WORD    BPB_SecPerTrk;
  87      =2          WORD    BPB_NumHeads;
  88      =2          DWORD   BPB_HiddSec;
  89      =2          DWORD   BPB_TotSec32;
  90      =2          union   FATUni
  91      =2          {
  92      =2                  struct BootSecFAT32Str  F32;
  93      =2                  struct BootSecFAT16Str  F16;
  94      =2          }FAT;
  95      =2  
  96      =2  };
  97      =2  
  98      =2  struct DPTStr                           //分区表结构
  99      =2  {
 100      =2          BYTE    BootFlag;
 101      =2          BYTE    CHSBegin[3];
 102      =2          BYTE    TypeCode;
 103      =2          BYTE    CHSEnd[3];
 104      =2          DWORD   LBABegin;
 105      =2          DWORD   CntSec;
 106      =2  };
 107      =2  
 108      =2  struct sDPTStr                          //简化的分区表
 109      =2  {
 110      =2          BYTE    TypeCode;
 111      =2          DWORD   LBABegin;
 112      =2          DWORD   CntSec;
 113      =2  };
 114      =2  
 115      =2  struct FAT32FSInfoStr           //FAT32扩展信息结构
 116      =2  {
 117      =2          DWORD   LeadSig;
 118      =2          BYTE    Reserved1[480];
 119      =2          DWORD   StrucSig;
 120      =2          DWORD   FreeCount;
 121      =2          DWORD   NxtFree;
 122      =2          BYTE    Reserved2[12];
 123      =2          DWORD   TrailSig;
 124      =2  };
C51 COMPILER V6.23a  FAT32LISTDIRECTORY                                                    12/24/2004 00:11:42 PAGE 9   

 125      =2  
 126      =2  struct FAT32SDirStr                     //FAT目录结构 短文件名
 127      =2  {
 128      =2          CHAR    Name[11];
 129      =2          BYTE    Attr;
 130      =2          BYTE    NTRes;
 131      =2          BYTE    CrtTimeTenth;
 132      =2          WORD    CrtTime;
 133      =2          WORD    CrtDate;
 134      =2          WORD    LstAccDate;
 135      =2          WORD    FstClusHI;
 136      =2          WORD    WrtTime;
 137      =2          WORD    WrtDate;
 138      =2          WORD    FstClusLO;
 139      =2          DWORD   FileSize;
 140      =2  };
 141      =2  
 142      =2  struct FAT32LDirStr                     //FAT目录结构 长文件名
 143      =2  {
 144      =2          BYTE    Ord;
 145      =2          BYTE    Name1[10];
 146      =2          BYTE    Attr;
 147      =2          BYTE    Type;
 148      =2          BYTE    Chksum;
 149      =2          BYTE    Name2[12];
 150      =2          WORD    FstClusLO;
 151      =2          BYTE    Name3[4];
 152      =2  };
 153      =2  
 154      =2  struct FAT32Str                                 //FAT32参数表
 155      =2  {
 156      =2          BYTE    ClusSecCnt;                     //当前簇扇区计数
 157      =2          DWORD   CurrentDirectory;       //当前目录入口(簇号)
 158      =2          BYTE    SecPerClus;                     //每簇扇区数    1 2 4 8 16 32 64 128

⌨️ 快捷键说明

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