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

📄 fat16listdirectory.lst

📁 C51实现的FAT32文件系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 155      =2          BYTE    Reserved2[12];
 156      =2          DWORD   TrailSig;
 157      =2  };
 158      =2  
 159      =2  struct FATSDirStr                       //FAT目录结构 短文件名
 160      =2  {
 161      =2          CHAR    Name[11];
 162      =2          BYTE    Attr;
 163      =2          BYTE    NTRes;
 164      =2          BYTE    CrtTimeTenth;
 165      =2          WORD    CrtTime;
 166      =2          WORD    CrtDate;
 167      =2          WORD    LstAccDate;
 168      =2          WORD    FstClusHI;
 169      =2          WORD    WrtTime;
 170      =2          WORD    WrtDate;
 171      =2          WORD    FstClusLO;
 172      =2          DWORD   FileSize;
 173      =2  };
 174      =2  
 175      =2  struct FATLDirStr                       //FAT目录结构 长文件名
 176      =2  {
 177      =2          BYTE    Ord;
 178      =2          BYTE    Name1[10];
 179      =2          BYTE    Attr;
 180      =2          BYTE    Type;
 181      =2          BYTE    Chksum;
 182      =2          BYTE    Name2[12];
 183      =2          WORD    FstClusLO;
 184      =2          BYTE    Name3[4];
 185      =2  };
 186      =2  
C51 COMPILER V6.23a  FAT16LISTDIRECTORY                                                    12/24/2004 00:11:43 PAGE 10  

 187      =2  struct FATStr                                   //FAT参数表
 188      =2  {
 189      =2  //      BYTE    ClusSecCnt;                     //当前簇扇区计数
 190      =2          DWORD   CurrentDirectory;       //当前目录入口(簇号)
 191      =2          BYTE    SecPerClus;                     //每簇扇区数    1 2 4 8 16 32 64 128
 192      =2          DWORD   RootClus;                       //根目录开始的簇
 193      =2          BYTE    RootSectors;            //根目录占用的扇区数
 194      =2          DWORD   ClusSec;                        //簇开始的扇区
 195      =2          DWORD   FATSz;                          //FAT表大小(扇区)
 196      =2          DWORD   FATSec;                         //FAT表开始扇区
 197      =2          DWORD   FSISec;                         //FSI所在扇区
 198      =2          DWORD   FSIFreeCount;           //空闲簇数
 199      =2          DWORD   FSINxtFree;                     //空闲簇搜索指针
 200      =2  };
 201      =2  
 202      =2  struct FCBStr
 203      =2  {
 204      =2          CHAR    FileName[12];           //文件名
 205      =2          DWORD   Size;                           //文件大小
 206      =2          DWORD   FirstCluster;           //第一个簇
 207      =2          DWORD   LastCluster;            //最近一次读到的簇号
 208      =2          DWORD   ClusSecCnt;                     //当前簇扇区计数
 209      =2          DWORD   ByteCnt;                        //当前字节计数
 210      =2  };
 211      =2  
 212      =2  struct FATTableStr
 213      =2  {
 214      =2          DWORD   Sector;
 215      =2          union FATUin
 216      =2          {
 217      =2                  DWORD   F32[128];
 218      =2                  WORD    F16[256];
 219      =2                  BYTE    F12[512];
 220      =2          }FAT;
 221      =2  };
 222      =2  
 223      =2  struct FATClusterStr
 224      =2  {
 225      =2          BYTE    SecOffset;                              //扇区偏移量
 226      =2          DWORD   Sector;                         //扇区号
 227      =2          DWORD   Cluster;                        //簇号
 228      =2  };
 229      =2  
 230      =2  #ifndef _LIBRARY_DEFINE
           =2  xdata BYTE DiskBuffer[512];
           =2 
           =2  xdata struct StorageMediaStr StorageMedia;
           =2  xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
           =2  xdata struct FATStr FAT;
           =2  xdata struct FCBStr FCB[FAT_MAX_FCB];
           =2  xdata CHAR LongFileName[256]; 
           =2  xdata struct FATTableStr FATTable;
           =2  xdata struct DPTStr *DPT;                      //分区表结构指针
           =2  xdata struct BootSecStr *BOOTSEC;              //引导扇区结构指针
           =2  xdata struct FAT32FSInfoStr *FSI;              //FAT32扩展信息
           =2  xdata struct FATSDirStr *sDIR;         //FAT目录结构指针
           =2  xdata struct FATLDirStr *lDIR;         //FAT目录结构指针
           =2 #endif
 245      =2  #endif
 246      =2  
 247      =2  extern xdata BYTE DiskBuffer[512];
 248      =2  
C51 COMPILER V6.23a  FAT16LISTDIRECTORY                                                    12/24/2004 00:11:43 PAGE 11  

 249      =2  extern xdata struct StorageMediaStr StorageMedia;
 250      =2  extern xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
 251      =2  extern xdata struct FATStr FAT;
 252      =2  extern xdata struct FCBStr FCB[FAT_MAX_FCB];
 253      =2  extern xdata CHAR LongFileName[256]; 
 254      =2  extern xdata struct FATTableStr FATTable;
 255      =2  extern xdata struct DPTStr *DPT;                //分区表结构指针
 256      =2  extern xdata struct BootSecStr *BOOTSEC;        //引导扇区结构指针
 257      =2  extern xdata struct FAT32FSInfoStr *FSI;        //FAT32扩展信息
 258      =2  extern xdata struct FATSDirStr *sDIR;           //FAT目录结构指针
 259      =2  extern xdata struct FATLDirStr *lDIR;           //FAT目录结构指针
 260      =2  
 261      =2  extern void FATInit(void);
 262      =2  extern BYTE FATSelectMedia(BYTE Media);
 263      =2  extern BYTE FATFindPartitions(void);
 264      =2  extern BYTE FATMountPartition(void);
 265      =2  extern BYTE FATMountVolumeID(BYTE Partition);
 266      =2  extern void FATGetPartLongName(struct FATLDirStr *ldp,CHAR *name);
 267      =2  extern DWORD FATDiskSize(void);
 268      =2  extern DWORD FATDiskFreeSize(void);
 269      =2  extern BYTE FATFindDIREntry(CHAR *DirName);
 270      =2  extern BYTE FAT32FindDIREntry(CHAR *DirName);
 271      =2  extern BYTE FAT16FindDIREntry(CHAR *DirName);
 272      =2  void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
 273      =2  extern BYTE FATChangeDirectory(CHAR *DirName);
 274      =2  extern BYTE FATListDirectory(void);
 275      =2  extern BYTE FAT32ListDirectory(void);
 276      =2  extern BYTE FAT16ListDirectory(void);
 277      =2  extern void FATNextCluster(DWORD *CurrentCluster);
 278      =2  extern BYTE FATGetDirName(WORD SecNum);
 279      =2  extern BYTE FATOpenFile(CHAR *filename);
 280      =2  extern void FATCloseFile(BYTE fp);
 281      =2  extern WORD FATReadFile(BYTE fp);
 282      =2  
  11      =1  
   3          #endif
   4          
   5          BYTE FAT16ListDirectory(void);
   6          
   7          BYTE FAT16ListDirectory(void)
   8          {
   9   1              xdata BYTE i,j,m;
  10   1              xdata DWORD Sector;
  11   1              xdata struct FATClusterStr ReadCluster;
  12   1      
  13   1              if (FAT.CurrentDirectory==FAT.RootClus)                                         //根目录
  14   1              {
  15   2                      Sector=FAT.CurrentDirectory;
  16   2                      for(m=0;m<FAT.RootSectors;m++)
  17   2                      {
  18   3                              StorageMedia.ReadSector(Sector++,DiskBuffer);
  19   3                              for (i=0;i<16;i++)
  20   3                              {
  21   4                                      if (sDIR[i].Name[0]==0xe5||sDIR[i].Name[0]==0x00) continue;                     //空目录项跳过
  22   4                                      if (sDIR[i].Attr&FAT_ATTR_VOLUME_ID)
  23   4                                              printf("Driver Volume:");
  24   4                                      for(j=0;j<11;j++)
  25   4                                              printf("%c",sDIR[i].Name[j]);
  26   4                                      if (sDIR[i].Attr&FAT_ATTR_DIRECTORY) printf("\t<DIR>"); else printf("\t<FILE>");
  27   4                                      printf("\t%ld",MEMSwap32(sDIR[i].FileSize));
  28   4                                      printf("\n");
  29   4                              }
C51 COMPILER V6.23a  FAT16LISTDIRECTORY                                                    12/24/2004 00:11:43 PAGE 12  

  30   3                      }
  31   2              }
  32   1              else
  33   1              {
  34   2                      ReadCluster.Cluster=FAT.CurrentDirectory;
  35   2                      ReadCluster.SecOffset=0;
  36   2                      while(ReadCluster.Cluster!=FAT_CLUSTER_END16)
  37   2                      {
  38   3                              FATReadCluster(&ReadCluster,DiskBuffer);
  39   3                              for (i=0;i<16;i++)
  40   3                              {
  41   4                                      if (sDIR[i].Name[0]==0xe5||sDIR[i].Name[0]==0x00) continue;                     //空目录项跳过
  42   4                                      if (sDIR[i].Attr&FAT_ATTR_VOLUME_ID)
  43   4                                              printf("Driver Volume:");
  44   4                                      for(j=0;j<11;j++)
  45   4                                              printf("%c",sDIR[i].Name[j]);
  46   4                                      if (sDIR[i].Attr&FAT_ATTR_DIRECTORY) printf("\t<DIR>"); else printf("\t<FILE>");
  47   4                                      printf("\t%ld",MEMSwap32(sDIR[i].FileSize));
  48   4                                      printf("\n");
  49   4                              }
  50   3                      }
  51   2              }
  52   1              return(0);
  53   1      }
C51 COMPILER V6.23a  FAT16LISTDIRECTORY                                                    12/24/2004 00:11:43 PAGE 13  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION FAT16ListDirectory (BEGIN)
                                           ; SOURCE LINE # 7
                                           ; SOURCE LINE # 8
                                           ; SOURCE LINE # 13
0000 900000      E     MOV     DPTR,#FAT+05H
0003 E0                MOVX    A,@DPTR
0004 FC                MOV     R4,A
0005 A3                INC     DPTR
0006 E0                MOVX    A,@DPTR
0007 FD                MOV     R5,A
0008 A3                INC     DPTR
0009 E0                MOVX    A,@DPTR
000A FE                MOV     R6,A
000B A3                INC     DPTR
000C E0                MOVX    A,@DPTR
000D FF                MOV     R7,A
000E 900000      E     MOV     DPTR,#FAT
0011 E0                MOVX    A,@DPTR
0012 F8                MOV     R0,A
0013 A3                INC     DPTR
0014 E0                MOVX    A,@DPTR
0015 F9                MOV     R1,A
0016 A3                INC     DPTR
0017 E0                MOVX    A,@DPTR
0018 FA                MOV     R2,A
0019 A3                INC     DPTR
001A E0                MOVX    A,@DPTR
001B FB                MOV     R3,A
001C C3                CLR     C
001D 120000      E     LCALL   ?C?ULCMP
0020 6003              JZ      $ + 5H
0022 020000      R     LJMP    ?C0001
                                           ; SOURCE LINE # 14
                                           ; SOURCE LINE # 15
0025 900000      E     MOV     DPTR,#FAT
0028 E0                MOVX    A,@DPTR
0029 FC                MOV     R4,A
002A A3                INC     DPTR
002B E0                MOVX    A,@DPTR
002C FD                MOV     R5,A
002D A3                INC     DPTR
002E E0                MOVX    A,@DPTR
002F FE                MOV     R6,A
0030 A3                INC     DPTR
0031 E0                MOVX    A,@DPTR
0032 FF                MOV     R7,A
0033 900000      R     MOV     DPTR,#Sector
0036 120000      E     LCALL   ?C?LSTXDATA
                                           ; SOURCE LINE # 16
0039 E4                CLR     A
003A 900000      R     MOV     DPTR,#m
003D F0                MOVX    @DPTR,A
003E         ?C0002:
003E 900000      E     MOV     DPTR,#FAT+09H
0041 E0                MOVX    A,@DPTR
0042 FF                MOV     R7,A
0043 900000      R     MOV     DPTR,#m
0046 E0                MOVX    A,@DPTR
0047 C3                CLR     C
C51 COMPILER V6.23a  FAT16LISTDIRECTORY                                                    12/24/2004 00:11:43 PAGE 14  

0048 9F                SUBB    A,R7
0049 4003              JC      $ + 5H
004B 020000      R     LJMP    ?C0016
                                           ; SOURCE LINE # 17
                                           ; SOURCE LINE # 18
004E A3                INC     DPTR
004F 120000      E     LCALL   ?C?LLDIXDATA1
0052 7B01              MOV     R3,#01H
0054 7A00        E     MOV     R2,#HIGH DiskBuffer
0056 7900        E     MOV     R1,#LOW DiskBuffer
0058 C002              PUSH    AR2
005A 900000      E     MOV     DPTR,#StorageMedia+08H
005D A3                INC     DPTR
005E E0                MOVX    A,@DPTR
005F FA                MOV     R2,A
0060 A3                INC     DPTR
0061 E0                MOVX    A,@DPTR
0062 F582              MOV     DPL,A
0064 8A83              MOV     DPH,R2
0066 D002              POP     AR2

⌨️ 快捷键说明

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