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

📄 fat.lis

📁 diy硬盘mp3的程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module fat.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DATA\MP3\Player\Code2\fat.c
 0000                   .dbfunc e InitFat _InitFat fV
                        .even
 0000           _InitFat::
 0000 0E940000          xcall push_gset2
 0004 2897              sbiw R28,8
 0006                   .dbline -1
 0006                   .dbline 23
 0006           ; #include <iom128v.h>
 0006           ; #include <macros.h>
 0006           ; #include <string.h>
 0006           ; #include <stdio.h>
 0006           ; #include "vs1001.h"
 0006           ; #include "generic.h"
 0006           ; #include "remote.h"
 0006           ; #include "fat.h"
 0006           ; #include "ata.h"
 0006           ; 
 0006           ; //******************************************************************
 0006           ; //*   FAT Global Variable
 0006           ; //******************************************************************
 0006           ; struct PartRecord Part;
 0006           ; struct BootRecord Boot;
 0006           ; struct FileInfo File;
 0006           ; unsigned long FirstDataSector;
 0006           ; 
 0006           ; //*************************************
 0006           ; // void init_fat(void)
 0006           ; //*************************************
 0006           ; void InitFat(void)
 0006           ; {
 0006                   .dbline 24
 0006           ; ata_read_sector_byte(0, 0, 446, sizeof(Part) , (unsigned char*)&Part); 
 0006 80E0              ldi R24,<_Part
 0008 90E0              ldi R25,>_Part
 000A 9F83              std y+7,R25
 000C 8E83              std y+6,R24
 000E 80E1              ldi R24,16
 0010 90E0              ldi R25,0
 0012 9D83              std y+5,R25
 0014 8C83              std y+4,R24
 0016 8EEB              ldi R24,446
 0018 91E0              ldi R25,1
 001A 9B83              std y+3,R25
 001C 8A83              std y+2,R24
 001E 40E0              ldi R20,0
 0020 50E0              ldi R21,0
 0022 60E0              ldi R22,0
 0024 70E0              ldi R23,0
 0026 6883              std y+0,R22
 0028 7983              std y+1,R23
 002A 9A01              movw R18,R20
 002C 0027              clr R16
 002E 0E940000          xcall _ata_read_sector_byte
 0032                   .dbline 25
 0032           ; ata_read_sector_byte(0, Part.StartLBA, 0, sizeof(Boot) , (unsigned char*)&Boot); 
 0032 80E0              ldi R24,<_Boot
 0034 90E0              ldi R25,>_Boot
 0036 9F83              std y+7,R25
 0038 8E83              std y+6,R24
 003A 84E3              ldi R24,52
 003C 90E0              ldi R25,0
 003E 9D83              std y+5,R25
 0040 8C83              std y+4,R24
 0042 2224              clr R2
 0044 3324              clr R3
 0046 3B82              std y+3,R3
 0048 2A82              std y+2,R2
 004A 40904E01          lds R4,_Part+8+2
 004E 50904F01          lds R5,_Part+8+2+1
 0052 20904C01          lds R2,_Part+8
 0056 30904D01          lds R3,_Part+8+1
 005A 4882              std y+0,R4
 005C 5982              std y+1,R5
 005E 9101              movw R18,R2
 0060 0027              clr R16
 0062 0E940000          xcall _ata_read_sector_byte
 0066                   .dbline 26
 0066           ; FirstDataSector = Part.StartLBA + Boot.ResSectors + (Boot.FATs * Boot.FATSize);
 0066 40903601          lds R4,_Boot+36+2
 006A 50903701          lds R5,_Boot+36+2+1
 006E 20903401          lds R2,_Boot+36
 0072 30903501          lds R3,_Boot+36+1
 0076 60902001          lds R6,_Boot+16
 007A 7724              clr R7
 007C 8824              clr R8
 007E 9924              clr R9
 0080 5A92              st -y,R5
 0082 4A92              st -y,R4
 0084 3A92              st -y,R3
 0086 2A92              st -y,R2
 0088 8301              movw R16,R6
 008A 9401              movw R18,R8
 008C 0E940000          xcall empy32u
 0090 20901E01          lds R2,_Boot+14
 0094 30901F01          lds R3,_Boot+14+1
 0098 4424              clr R4
 009A 5524              clr R5
 009C 80904E01          lds R8,_Part+8+2
 00A0 90904F01          lds R9,_Part+8+2+1
 00A4 60904C01          lds R6,_Part+8
 00A8 70904D01          lds R7,_Part+8+1
 00AC 620C              add R6,R2
 00AE 731C              adc R7,R3
 00B0 841C              adc R8,R4
 00B2 951C              adc R9,R5
 00B4 600E              add R6,R16
 00B6 711E              adc R7,R17
 00B8 821E              adc R8,R18
 00BA 931E              adc R9,R19
 00BC 70920100          sts _FirstDataSector+1,R7
 00C0 60920000          sts _FirstDataSector,R6
 00C4 90920300          sts _FirstDataSector+2+1,R9
 00C8 80920200          sts _FirstDataSector+2,R8
 00CC                   .dbline -2
 00CC                   .dbline 27
 00CC           ; }
 00CC           L1:
 00CC 2896              adiw R28,8
 00CE 0E940000          xcall pop_gset2
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbend
 00D4                   .dbfunc e Clust2LBA _Clust2LBA fl
 00D4           ;          clust -> y+4
                        .even
 00D4           _Clust2LBA::
 00D4 0E940000          xcall push_arg4
 00D8 0E940000          xcall push_gset2
 00DC                   .dbline -1
 00DC                   .dbline 33
 00DC           ; 
 00DC           ; //*************************************
 00DC           ; // unsigned long clust2LBA(unsigned long clust)
 00DC           ; //*************************************
 00DC           ; unsigned long Clust2LBA(unsigned long clust)
 00DC           ; {
 00DC                   .dbline 34
 00DC           ; return ((clust-2) * Boot.SecPerClust) + FirstDataSector;
 00DC 42E0              ldi R20,2
 00DE 50E0              ldi R21,0
 00E0 60E0              ldi R22,0
 00E2 70E0              ldi R23,0
 00E4 FE01              movw R30,R28
 00E6 2480              ldd R2,z+4
 00E8 3580              ldd R3,z+5
 00EA 4680              ldd R4,z+6
 00EC 5780              ldd R5,z+7
 00EE 241A              sub R2,R20
 00F0 350A              sbc R3,R21
 00F2 460A              sbc R4,R22
 00F4 570A              sbc R5,R23
 00F6 60901D01          lds R6,_Boot+13
 00FA 7724              clr R7
 00FC 8824              clr R8
 00FE 9924              clr R9
 0100 9A92              st -y,R9
 0102 8A92              st -y,R8
 0104 7A92              st -y,R7
 0106 6A92              st -y,R6
 0108 8101              movw R16,R2
 010A 9201              movw R18,R4
 010C 0E940000          xcall empy32u
 0110 1801              movw R2,R16
 0112 2901              movw R4,R18
 0114 80900200          lds R8,_FirstDataSector+2
 0118 90900300          lds R9,_FirstDataSector+2+1
 011C 60900000          lds R6,_FirstDataSector
 0120 70900100          lds R7,_FirstDataSector+1
 0124 260C              add R2,R6
 0126 371C              adc R3,R7
 0128 481C              adc R4,R8
 012A 591C              adc R5,R9
 012C 8101              movw R16,R2
 012E 9201              movw R18,R4
 0130                   .dbline -2
 0130           L7:
 0130 0E940000          xcall pop_gset2
 0134 2496              adiw R28,4
 0136                   .dbline 0 ; func end
 0136 0895              ret
 0138                   .dbsym l clust 4 l
 0138                   .dbend
 0138                   .dbfunc e GetNextCluster _GetNextCluster fl
 0138           ;    Fat32_Entry -> y+16
 0138           ; FatSectorOffset -> y+12
 0138           ;   FatSectorNum -> y+8
 0138           ;          Clust -> y+24
                        .even
 0138           _GetNextCluster::
 0138 0E940000          xcall push_arg4
 013C 0E940000          xcall push_gset2
 0140 6497              sbiw R28,20
 0142                   .dbline -1
 0142                   .dbline 49
 0142           ; }
 0142           ; 
 0142           ; //****************************************************************
 0142           ; // unsigned long GetNextCluster(unsigned long Clust)
 0142           ; // 
 0142           ; // Description: 
 0142           ; // Returns the FAT32 Entry for the given Cluster Number. 
 0142           ; // The FAT32 Entry is the next cluster number of the cluster 
 0142           ; // chain. **May return a termination 
 0142           ; // 
 0142           ; // if Fat32_Entry >= 0x0FFFFFF8 EOC (End of Chain) 
 0142           ; // if Fat32_Entry == 0x0FFFFFF7 Bad Cluster 
 0142           ; //****************************************************************
 0142           ; unsigned long GetNextCluster(unsigned long Clust)
 0142           ; {
 0142                   .dbline 54
 0142           ; unsigned long FatSectorNum;
 0142           ; unsigned long FatSectorOffset;
 0142           ; unsigned long Fat32_Entry;
 0142           ; 
 0142           ; FatSectorNum = Part.StartLBA + Boot.ResSectors + ((Clust * 4) / Boot.BytesPerSec);;
 0142 FE01              movw R30,R28
 0144 208C              ldd R2,z+24
 0146 318C              ldd R3,z+25
 0148 428C              ldd R4,z+26
 014A 538C              ldd R5,z+27
 014C 44E0              ldi R20,4
 014E 50E0              ldi R21,0
 0150 60E0              ldi R22,0
 0152 70E0              ldi R23,0
 0154 5A92              st -y,R5
 0156 4A92              st -y,R4
 0158 3A92              st -y,R3
 015A 2A92              st -y,R2
 015C 8A01              movw R16,R20
 015E 9B01              movw R18,R22
 0160 0E940000          xcall empy32u
 0164 20901B01          lds R2,_Boot+11
 0168 30901C01          lds R3,_Boot+11+1
 016C 4424              clr R4
 016E 5524              clr R5
 0170 5A92              st -y,R5
 0172 4A92              st -y,R4
 0174 3A92              st -y,R3
 0176 2A92              st -y,R2
 0178 0E940000          xcall div32u
 017C 20901E01          lds R2,_Boot+14
 0180 30901F01          lds R3,_Boot+14+1
 0184 4424              clr R4
 0186 5524              clr R5
 0188 80904E01          lds R8,_Part+8+2
 018C 90904F01          lds R9,_Part+8+2+1
 0190 60904C01          lds R6,_Part+8
 0194 70904D01          lds R7,_Part+8+1
 0198 620C              add R6,R2
 019A 731C              adc R7,R3
 019C 841C              adc R8,R4
 019E 951C              adc R9,R5
 01A0 600E              add R6,R16
 01A2 711E              adc R7,R17
 01A4 821E              adc R8,R18
 01A6 931E              adc R9,R19
 01A8 FE01              movw R30,R28
 01AA 6086              std z+8,R6
 01AC 7186              std z+9,R7
 01AE 8286              std z+10,R8
 01B0 9386              std z+11,R9
 01B2                   .dbline 54
 01B2                   .dbline 55
 01B2           ; FatSectorOffset = (Clust * 4) % Boot.BytesPerSec;
 01B2 208C              ldd R2,z+24
 01B4 318C              ldd R3,z+25
 01B6 428C              ldd R4,z+26
 01B8 538C              ldd R5,z+27
 01BA 44E0              ldi R20,4
 01BC 50E0              ldi R21,0
 01BE 60E0              ldi R22,0
 01C0 70E0              ldi R23,0
 01C2 5A92              st -y,R5
 01C4 4A92              st -y,R4
 01C6 3A92              st -y,R3
 01C8 2A92              st -y,R2
 01CA 8A01              movw R16,R20
 01CC 9B01              movw R18,R22
 01CE 0E940000          xcall empy32u
 01D2 20901B01          lds R2,_Boot+11
 01D6 30901C01          lds R3,_Boot+11+1
 01DA 4424              clr R4
 01DC 5524              clr R5
 01DE 5A92              st -y,R5
 01E0 4A92              st -y,R4
 01E2 3A92              st -y,R3
 01E4 2A92              st -y,R2
 01E6 0E940000          xcall mod32u
 01EA FE01              movw R30,R28
 01EC 0487              std z+12,R16
 01EE 1587              std z+13,R17
 01F0 2687              std z+14,R18
 01F2 3787              std z+15,R19
 01F4                   .dbline 57
 01F4           ; 

⌨️ 快捷键说明

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