📄 fs.lst
字号:
PUBLIC fs_initFs?T
PUBLIC fs_isValidFat?T
PUBLIC fs_loadVolumeId?T
PUBLIC fs_verifySanity?T
PUBLIC fs_countDataSectors?T
PUBLIC fs_determineFatType?T
PUBLIC fs_findFirstSectorRootDir?T
PUBLIC fs_initCurrentDir?T
PUBLIC fs_clusterToSector?T
PUBLIC fs_sectorToCluster?T
PUBLIC fs_getNextFreeCluster?T
PUBLIC fs_giveFreeClusterHint?T
PUBLIC fs_findFreeFile?T
PUBLIC fs_findFile?T
PUBLIC fs_getLastCluster?T
PUBLIC fs_getFirstClusterRootDir?T
PUBLIC fs_setFirstClusterInDirEntry?T
PUBLIC fs_initClusterChain?T
PUBLIC fs_flushFs?T
PUBLIC fs_umount?T
PUBLIC fs_clearCluster?T
PUBLIC fs_getFsInfo?T
PUBLIC fs_setFsInfo?T
*** CODE SEGMENT '?PR?fs_initFs?T?fs':
36: eint16 fs_initFs(FileSystem *fs,Partition *part)
00000000 B530 PUSH {R4-R5,LR}
00000002 1C0D MOV R5,R1 ; part
00000004 ---- Variable 'part' assigned to Register 'R5' ----
00000004 1C04 MOV R4,R0 ; fs
00000006 ---- Variable 'fs' assigned to Register 'R4' ----
38: if(!fs_isValidFat(part)){
00000006 1C28 MOV R0,R5 ; part
00000008 F7FF BL fs_isValidFat?T ; T=0x0001 (1)
0000000A FFFA BL fs_isValidFat?T ; T=0x0001 (2)
0000000C 0400 LSL R0,R0,#0x10 ; fs_isValidFat?T
0000000E 1400 ASR R0,R0,#0x10
00000010 2800 CMP R0,#0x0
00000012 D101 BNE L_1 ; T=0x00000018
39: return(-1);
00000014 4800 LDR R0,=0xFFFFFFFF
00000016 E01C B L_2 ; T=0x00000052
40: }
00000018 L_1:
ARM COMPILER V2.42, fs 27/03/06 10:45:50 PAGE 10
41: fs->part=part;
00000018 1C29 MOV R1,R5 ; part
0000001A 1C20 MOV R0,R4 ; fs
0000001C 6001 STR R1,[R0,#0x0] ; fs
42: fs_loadVolumeId(fs,part);
0000001E 1C20 MOV R0,R4 ; fs
00000020 1C29 MOV R1,R5 ; part
00000022 F7FF BL fs_loadVolumeId?T ; T=0x0001 (1)
00000024 FFED BL fs_loadVolumeId?T ; T=0x0001 (2)
43: if(!fs_verifySanity(fs))return(-2);
00000026 1C20 MOV R0,R4 ; fs
00000028 F7FF BL fs_verifySanity?T ; T=0x0001 (1)
0000002A FFEA BL fs_verifySanity?T ; T=0x0001 (2)
0000002C 0400 LSL R0,R0,#0x10 ; fs_verifySanity?T
0000002E 1400 ASR R0,R0,#0x10
00000030 2800 CMP R0,#0x0
00000032 D101 BNE L_3 ; T=0x00000038
00000034 4800 LDR R0,=0xFFFFFFFE
00000036 E00C B L_2 ; T=0x00000052
00000038 L_3:
44: fs_countDataSectors(fs);
00000038 1C20 MOV R0,R4 ; fs
0000003A F7FF BL fs_countDataSectors?T ; T=0x0001 (1)
0000003C FFE1 BL fs_countDataSectors?T ; T=0x0001 (2)
45: fs_determineFatType(fs);
0000003E 1C20 MOV R0,R4 ; fs
00000040 F7FF BL fs_determineFatType?T ; T=0x0001 (1)
00000042 FFDE BL fs_determineFatType?T ; T=0x0001 (2)
46: fs_findFirstSectorRootDir(fs);
00000044 1C20 MOV R0,R4 ; fs
00000046 F7FF BL fs_findFirstSectorRootDir?T ; T=0x0001 (1)
00000048 FFDB BL fs_findFirstSectorRootDir?T ; T=0x0001 (2)
47: fs_initCurrentDir(fs);
0000004A 1C20 MOV R0,R4 ; fs
0000004C F7FF BL fs_initCurrentDir?T ; T=0x0001 (1)
0000004E FFD8 BL fs_initCurrentDir?T ; T=0x0001 (2)
48: return(0);
00000050 2000 MOV R0,#0x0
49: }
00000052 L_2:
00000052 BC30 POP {R4-R5}
00000054 BC08 POP {R3}
00000056 4718 BX R3
00000058 ENDP ; 'fs_initFs?T'
*** CODE SEGMENT '?PR?fs_isValidFat?T?fs':
58: eint16 fs_isValidFat(Partition *part)
00000000 B530 PUSH {R4-R5,LR}
00000002 1C05 MOV R5,R0 ; part
00000004 ---- Variable 'part' assigned to Register 'R5' ----
59: {
00000004 ; SCOPE-START
62: buf=part_getSect(part,0,IOM_MODE_READONLY|IOM_MODE_EXP_REQ); /* Load Volume label */
00000004 1C28 MOV R0,R5 ; part
00000006 2100 MOV R1,#0x0
00000008 2205 MOV R2,#0x5
0000000A F7FF BL part_getSect?T ; T=0x0001 (1)
0000000C FFF9 BL part_getSect?T ; T=0x0001 (2)
0000000E 1C04 MOV R4,R0 ; buf
00000010 ---- Variable 'buf' assigned to Register 'R4' ----
63: if( ex_getb16(buf,0x1FE) != 0xAA55 ){
00000010 1C20 MOV R0,R4 ; buf
00000012 4800 LDR R1,=0x1FE
00000014 F7FF BL ex_getb16?T ; T=0x0001 (1)
00000016 FFF4 BL ex_getb16?T ; T=0x0001 (2)
00000018 0400 LSL R0,R0,#0x10 ; ex_getb16?T
0000001A 0C00 LSR R0,R0,#0x10
ARM COMPILER V2.42, fs 27/03/06 10:45:50 PAGE 11
0000001C 4800 LDR R1,=0xAA55
0000001E 4288 CMP R0,R1
00000020 D001 BEQ L_4 ; T=0x00000026
64: return (0);
00000022 2000 MOV R0,#0x0
00000024 E004 B L_5 ; T=0x00000030
65: }
00000026 L_4:
66: part_relSect(part,buf);
00000026 1C28 MOV R0,R5 ; part
00000028 1C21 MOV R1,R4 ; buf
0000002A F7FF BL part_relSect?T ; T=0x0001 (1)
0000002C FFE9 BL part_relSect?T ; T=0x0001 (2)
67: return(1);
0000002E 2001 MOV R0,#0x1
00000030 ; SCOPE-END
68: }
00000030 L_5:
00000030 BC30 POP {R4-R5}
00000032 BC08 POP {R3}
00000034 4718 BX R3
00000036 ENDP ; 'fs_isValidFat?T'
*** CODE SEGMENT '?PR?fs_loadVolumeId?T?fs':
75: void fs_loadVolumeId(FileSystem *fs, Partition *part)
00000000 B570 PUSH {R4-R6,LR}
00000002 1C0D MOV R5,R1 ; part
00000004 ---- Variable 'part' assigned to Register 'R5' ----
00000004 1C06 MOV R6,R0 ; fs
00000006 ---- Variable 'fs' assigned to Register 'R6' ----
76: {
00000006 ; SCOPE-START
79: buf=part_getSect(part,0,IOM_MODE_READONLY|IOM_MODE_EXP_REQ);
00000006 1C28 MOV R0,R5 ; part
00000008 2100 MOV R1,#0x0
0000000A 2205 MOV R2,#0x5
0000000C F7FF BL part_getSect?T ; T=0x0001 (1)
0000000E FFF8 BL part_getSect?T ; T=0x0001 (2)
00000010 1C04 MOV R4,R0 ; buf
00000012 ---- Variable 'buf' assigned to Register 'R4' ----
81: fs->volumeId.BytesPerSector=ex_getb16(buf,0x0B);
00000012 1C20 MOV R0,R4 ; buf
00000014 210B MOV R1,#0xB
00000016 F7FF BL ex_getb16?T ; T=0x0001 (1)
00000018 FFF3 BL ex_getb16?T ; T=0x0001 (2)
0000001A 1C31 MOV R1,R6 ; fs
0000001C 8088 STRH R0,[R1,#0x4]
82: fs->volumeId.SectorsPerCluster=*((eint8*)(buf+0x0D));
0000001E 1C20 MOV R0,R4 ; buf
00000020 7B41 LDRB R1,[R0,#0xD]
00000022 1C30 MOV R0,R6 ; fs
00000024 7181 STRB R1,[R0,#0x6]
83: fs->volumeId.ReservedSectorCount=ex_getb16(buf,0x0E);
00000026 1C20 MOV R0,R4 ; buf
00000028 210E MOV R1,#0xE
0000002A F7FF BL ex_getb16?T ; T=0x0001 (1)
0000002C FFE9 BL ex_getb16?T ; T=0x0001 (2)
0000002E 1C31 MOV R1,R6 ; fs
00000030 8108 STRH R0,[R1,#0x8]
84: fs->volumeId.NumberOfFats=*((eint8*)(buf+0x10));
00000032 1C20 MOV R0,R4 ; buf
00000034 7C01 LDRB R1,[R0,#0x10]
00000036 1C30 MOV R0,R6 ; fs
00000038 7281 STRB R1,[R0,#0xA]
85: fs->volumeId.RootEntryCount=ex_getb16(buf,0x11);
0000003A 1C20 MOV R0,R4 ; buf
0000003C 2111 MOV R1,#0x11
ARM COMPILER V2.42, fs 27/03/06 10:45:50 PAGE 12
0000003E F7FF BL ex_getb16?T ; T=0x0001 (1)
00000040 FFDF BL ex_getb16?T ; T=0x0001 (2)
00000042 1C31 MOV R1,R6 ; fs
00000044 8188 STRH R0,[R1,#0xC]
86: fs->volumeId.SectorCount16=ex_getb16(buf,0x13);
00000046 1C20 MOV R0,R4 ; buf
00000048 2113 MOV R1,#0x13
0000004A F7FF BL ex_getb16?T ; T=0x0001 (1)
0000004C FFD9 BL ex_getb16?T ; T=0x0001 (2)
0000004E 1C31 MOV R1,R6 ; fs
00000050 81C8 STRH R0,[R1,#0xE]
87: fs->volumeId.FatSectorCount16=ex_getb16(buf,0x16);
00000052 1C20 MOV R0,R4 ; buf
00000054 2116 MOV R1,#0x16
00000056 F7FF BL ex_getb16?T ; T=0x0001 (1)
00000058 FFD3 BL ex_getb16?T ; T=0x0001 (2)
0000005A 1C31 MOV R1,R6 ; fs
0000005C 8208 STRH R0,[R1,#0x10]
88: fs->volumeId.SectorCount32=ex_getb32(buf,0x20);
0000005E 1C20 MOV R0,R4 ; buf
00000060 2120 MOV R1,#0x20
00000062 F7FF BL ex_getb32?T ; T=0x0001 (1)
00000064 FFCD BL ex_getb32?T ; T=0x0001 (2)
00000066 1C31 MOV R1,R6 ; fs
00000068 6148 STR R0,[R1,#0x14]
89: fs->volumeId.FatSectorCount32=ex_getb32(buf,0x24);
0000006A 1C20 MOV R0,R4 ; buf
0000006C 2124 MOV R1,#0x24
0000006E F7FF BL ex_getb32?T ; T=0x0001 (1)
00000070 FFC7 BL ex_getb32?T ; T=0x0001 (2)
00000072 1C31 MOV R1,R6 ; fs
00000074 6188 STR R0,[R1,#0x18]
90: fs->volumeId.RootCluster=ex_getb32(buf,0x2C);
00000076 1C20 MOV R0,R4 ; buf
00000078 212C MOV R1,#0x2C
0000007A F7FF BL ex_getb32?T ; T=0x0001 (1)
0000007C FFC1 BL ex_getb32?T ; T=0x0001 (2)
0000007E 1C31 MOV R1,R6 ; fs
00000080 61C8 STR R0,[R1,#0x1C]
92: part_relSect(part,buf);
00000082 1C28 MOV R0,R5 ; part
00000084 1C21 MOV R1,R4 ; buf
00000086 F7FF BL part_relSect?T ; T=0x0001 (1)
00000088 FFBB BL part_relSect?T ; T=0x0001 (2)
0000008A ; SCOPE-END
94: }
0000008A BC70 POP {R4-R6}
0000008C BC08 POP {R3}
0000008E 4718 BX R3
00000090 ENDP ; 'fs_loadVolumeId?T'
*** CODE SEGMENT '?PR?fs_verifySanity?T?fs':
102: esint16 fs_verifySanity(FileSystem *fs)
00000000 B410 PUSH {R4}
00000002 1C03 MOV R3,R0 ; fs
00000004 ---- Variable 'fs' assigned to Register 'R3' ----
103: {
00000004 ; SCOPE-START
104: esint16 sane=1; /* Sane until proven otherwise */
00000004 2101 MOV R1,#0x1
00000006 ---- Variable 'sane' assigned to Register 'R1' ----
106: if(fs->volumeId.BytesPerSector!=512)sane=0;
00000006 1C18 MOV R0,R3 ; fs
00000008 8880 LDRH R0,[R0,#0x4]
0000000A 4A80 LDR R2,=0x200
0000000C 4290 CMP R0,R2
0000000E D000 BEQ L_6 ; T=0x00000012
ARM COMPILER V2.42, fs 27/03/06 10:45:50 PAGE 13
00000010 2100 MOV R1,#0x0
00000012 L_6:
108: if(!((fs->volumeId.SectorsPerCluster == 1 ) |
00000012 1C18 MOV R0,R3 ; fs
00000014 7980 LDRB R0,[R0,#0x6]
00000016 1C02 MOV R2,R0
00000018 2A02 CMP R2,#0x2
0000001A D101 BNE L_8 ; T=0x00000020
0000001C 2401 MOV R4,#0x1
0000001E E000 B L_9 ; T=0x00000022
00000020 L_8:
00000020 2400 MOV R4,#0x0
00000022 L_9:
00000022 2A01 CMP R2,#0x1
00000024 D101 BNE L_10 ; T=0x0000002A
00000026 2001 MOV R0,#0x1
00000028 E000 B L_11 ; T=0x0000002C
0000002A L_10:
0000002A 2000 MOV R0,#0x0
0000002C L_11:
0000002C 4320 ORR R0,R4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -