📄 fat.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4237
TTL C:\WINCE500\PLATFORM\Ep93xx\Src\Bootloader\Common\.\fat.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |g_pReadBuffStart| [ DATA ]
EXPORT |g_ReadBuffLenInClusters| [ DATA ]
00000 AREA |.bss|, NOINIT
|g_pReadBuffStart| % 0x4
|g_ReadBuffLenInClusters| % 0x4
00000 AREA |.data|, DATA
COMMON |g_FileInfo|, 0x1c
COMMON |g_FATParms|, 0x43
00008 AREA |.bss|, NOINIT
|?CurrentSector@?1??GetNextCluster@@9@9| % 0x4 ; `GetNextCluster'::`2'::CurrentSector
00000 AREA |.rdata|, DATA, READONLY
|EdbgVendorIds| DCW 0x0
DCW 0x0
DCD 0x4033
DCB 0x1
DCB 0x0
DCB "AD", 0x0
% 3
DCW 0x1050
DCW 0x940
DCD 0x4005
DCB 0x1
DCB 0x0
DCB "LS", 0x0
% 3
DCW 0x1050
DCW 0x940
DCD 0x2078
DCB 0x1
DCB 0x0
DCB "LS", 0x0
% 3
DCW 0x10ec
DCW 0x8029
DCD 0xc0f0
DCB 0x1
DCB 0x0
DCB "KS", 0x0
% 3
DCW 0x10ec
DCW 0x8129
DCD 0x0
DCB 0x4
DCB 0x0
DCB "RT", 0x0
% 3
DCW 0x10ec
DCW 0x8139
DCD 0x900b
DCB 0x4
DCB 0x0
DCB "RT", 0x0
% 3
DCW 0x10ec
DCW 0x8139
DCD 0xd0c9
DCB 0x4
DCB 0x0
DCB "RT", 0x0
% 3
DCW 0x10ec
DCW 0x8139
DCD 0xe04c
DCB 0x4
DCB 0x0
DCB "RT", 0x0
% 3
DCW 0x1186
DCW 0x1300
DCD 0x50ba
DCB 0x4
DCB 0x0
DCB "DL", 0x0
% 3
DCW 0x100b
DCW 0x20
DCD 0xa0cc
DCB 0x5
DCB 0x0
DCB "NG", 0x0
% 3
DCW 0x10b7
DCW 0x9050
DCD 0x6008
DCB 0x6
DCB 0x0
DCB "3C", 0x0
% 3
DCW 0x10b7
DCW 0x9200
DCD 0x476
DCB 0x6
DCB 0x0
DCB "3C", 0x0
% 3
DCW 0x8086
DCW 0x1039
DCD 0x4033
DCB 0x7
DCB 0x1
DCB "IN", 0x0
% 3
DCW 0x8086
DCW 0x103a
DCD 0x4033
DCB 0x7
DCB 0x1
DCB "IN", 0x0
% 3
DCW 0x8086
DCW 0x1051
DCD 0x4033
DCB 0x7
DCB 0x1
DCB "IN", 0x0
% 3
DCW 0x8086
DCW 0x1229
DCD 0x4033
DCB 0x7
DCB 0x1
DCB "IN", 0x0
% 3
DCW 0x8086
DCW 0x2449
DCD 0x4033
DCB 0x7
DCB 0x1
DCB "IN", 0x0
% 3
EXPORT |GetNextCluster|
EXPORT |??_C@_0CO@EODDONOK@ERROR?3?5GetNextCluster?5?9?5bad?5clus@| [ DATA ] ; `string'
EXPORT |??_C@_0DB@JADKCOOO@ERROR?3?5GetNextCluster?5?9?5unable?5t@| [ DATA ] ; `string'
IMPORT |ReadSectors|
IMPORT |EdbgOutputDebugString|
IMPORT |__rt_udiv|
; File c:\wince500\platform\ep93xx\src\bootloader\common\fat.c
00000 AREA |.text| { |GetNextCluster| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$GetNextCluster|, PDATA, SELECTION=5, ASSOC=|.text| { |GetNextCluster| } ; comdat associative
|$T38586| DCD |$L38585|
DCD 0x40010204
00000 AREA |.rdata| { |??_C@_0DB@JADKCOOO@ERROR?3?5GetNextCluster?5?9?5unable?5t@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@JADKCOOO@ERROR?3?5GetNextCluster?5?9?5unable?5t@| DCB "ERROR: "
DCB "GetNextCluster - unable to read sector.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CO@EODDONOK@ERROR?3?5GetNextCluster?5?9?5bad?5clus@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CO@EODDONOK@ERROR?3?5GetNextCluster?5?9?5bad?5clus@| DCB "ERROR: "
DCB "GetNextCluster - bad cluster number.", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |GetNextCluster| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |GetNextCluster| PROC
; 262 : {
00000 |$L38585|
00000 e1a0c00d mov r12, sp
00004 e92d0001 stmdb sp!, {r0}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd034 sub sp, sp, #0x34
00010 |$M38583|
; 263 : ULONG Sector = 0;
00010 e3a03000 mov r3, #0
00014 e58d3010 str r3, [sp, #0x10]
; 264 : ULONG ByteOffset = 0;
00018 e3a03000 mov r3, #0
0001c e58d3004 str r3, [sp, #4]
; 265 : PUCHAR pSectorCache = (PUCHAR)SECTOR_CACHE_START; // Sector cache is where the sector used to read the FAT cluster chains lives.
00020 e3a03982 mov r3, #0x82, 18
00024 e58d300c str r3, [sp, #0xC]
; 266 : static ULONG CurrentSector = 0;
; 267 : ULONG NextCluster = 0;
00028 e3a03000 mov r3, #0
0002c e58d3008 str r3, [sp, #8]
; 268 : #if !defined( NDEF_DWF_NEW_FAT_12_CODE )
; 269 : USHORT uShort1, uShort2;
; 270 : #endif // ( NDEF_DWF_NEW_FAT_12_CODE )
; 271 :
; 272 :
; 273 : // If we're passed an EOF cluster, return it.
; 274 : //
; 275 : if (IsEOFCluster(Cluster))
00030 e59d003c ldr r0, [sp, #0x3C]
00034 eb000000 bl IsEOFCluster
00038 e58d001c str r0, [sp, #0x1C]
0003c e59d301c ldr r3, [sp, #0x1C]
00040 e3530000 cmp r3, #0
00044 0a000002 beq |$L38275|
; 276 : return(Cluster);
00048 e59d303c ldr r3, [sp, #0x3C]
0004c e58d3018 str r3, [sp, #0x18]
00050 ea0000e4 b |$L38265|
00054 |$L38275|
; 277 :
; 278 : // Is caller giving us a valid cluster?
; 279 : //
; 280 : if (!IsDataCluster(Cluster))
00054 e59d003c ldr r0, [sp, #0x3C]
00058 eb000000 bl IsDataCluster
0005c e58d0020 str r0, [sp, #0x20]
00060 e59d3020 ldr r3, [sp, #0x20]
00064 e3530000 cmp r3, #0
00068 1a000004 bne |$L38276|
; 281 : {
; 282 : SERPRINT("ERROR: GetNextCluster - bad cluster number.\r\n");
0006c e59f0390 ldr r0, [pc, #0x390]
00070 eb000000 bl EdbgOutputDebugString
; 283 : return(0); // 0 isn't a valid cluster number (at least for our purposes).
00074 e3a03000 mov r3, #0
00078 e58d3018 str r3, [sp, #0x18]
0007c ea0000d9 b |$L38265|
00080 |$L38276|
; 284 : }
; 285 :
; 286 : // Compute sector where our FAT entry lives.
; 287 : //
; 288 : switch(g_FATParms.FATType)
00080 e59f3378 ldr r3, [pc, #0x378]
00084 e5933000 ldr r3, [r3]
00088 e58d3024 str r3, [sp, #0x24]
0008c e59d3024 ldr r3, [sp, #0x24]
00090 e3530000 cmp r3, #0
00094 0a000003 beq |$L38282|
00098 e59d3024 ldr r3, [sp, #0x24]
0009c e3530002 cmp r3, #2
000a0 0a000020 beq |$L38283|
000a4 ea00003d b |$L38285|
000a8 |$L38282|
; 289 : {
; 290 : case FAT_12:
; 291 : Sector = (Cluster * 3) / 2; // Every FAT12 cluster is 1.5 bytes.
000a8 e59d203c ldr r2, [sp, #0x3C]
000ac e3a03003 mov r3, #3
000b0 e0010392 mul r1, r2, r3
000b4 e3a00002 mov r0, #2
000b8 eb000000 bl __rt_udiv
000bc e58d0010 str r0, [sp, #0x10]
; 292 : ByteOffset = Sector % g_FATParms.BytesPerSect;
000c0 e59f1338 ldr r1, [pc, #0x338]
000c4 e5d13020 ldrb r3, [r1, #0x20]
000c8 e1a03403 mov r3, r3, lsl #8
000cc e1a02803 mov r2, r3, lsl #16
000d0 e1a02822 mov r2, r2, lsr #16
000d4 e5d1301f ldrb r3, [r1, #0x1F]
000d8 e1830002 orr r0, r3, r2
000dc e59d1010 ldr r1, [sp, #0x10]
000e0 eb000000 bl __rt_udiv
000e4 e58d1004 str r1, [sp, #4]
; 293 : Sector /= g_FATParms.BytesPerSect;
000e8 e59f1310 ldr r1, [pc, #0x310]
000ec e5d13020 ldrb r3, [r1, #0x20]
000f0 e1a03403 mov r3, r3, lsl #8
000f4 e1a02803 mov r2, r3, lsl #16
000f8 e1a02822 mov r2, r2, lsr #16
000fc e5d1301f ldrb r3, [r1, #0x1F]
00100 e1830002 orr r0, r3, r2
00104 e59d1010 ldr r1, [sp, #0x10]
00108 eb000000 bl __rt_udiv
0010c e58d0010 str r0, [sp, #0x10]
; 294 : Sector += g_FATParms.FATLBA;
00110 e59d2010 ldr r2, [sp, #0x10]
00114 e59f32e4 ldr r3, [pc, #0x2E4]
00118 e5933004 ldr r3, [r3, #4]
0011c e0823003 add r3, r2, r3
00120 e58d3010 str r3, [sp, #0x10]
; 295 : break;
00124 ea00003a b |$L38279|
00128 |$L38283|
; 296 : case FAT_32:
; 297 : Sector = Cluster * sizeof(ULONG);
00128 e59d203c ldr r2, [sp, #0x3C]
0012c e3a03004 mov r3, #4
00130 e0030392 mul r3, r2, r3
00134 e58d3010 str r3, [sp, #0x10]
; 298 : ByteOffset = Sector % g_FATParms.BytesPerSect;
00138 e59f12c0 ldr r1, [pc, #0x2C0]
0013c e5d13020 ldrb r3, [r1, #0x20]
00140 e1a03403 mov r3, r3, lsl #8
00144 e1a02803 mov r2, r3, lsl #16
00148 e1a02822 mov r2, r2, lsr #16
0014c e5d1301f ldrb r3, [r1, #0x1F]
00150 e1830002 orr r0, r3, r2
00154 e59d1010 ldr r1, [sp, #0x10]
00158 eb000000 bl __rt_udiv
0015c e58d1004 str r1, [sp, #4]
; 299 : Sector /= g_FATParms.BytesPerSect;
00160 e59f1298 ldr r1, [pc, #0x298]
00164 e5d13020 ldrb r3, [r1, #0x20]
00168 e1a03403 mov r3, r3, lsl #8
0016c e1a02803 mov r2, r3, lsl #16
00170 e1a02822 mov r2, r2, lsr #16
00174 e5d1301f ldrb r3, [r1, #0x1F]
00178 e1830002 orr r0, r3, r2
0017c e59d1010 ldr r1, [sp, #0x10]
00180 eb000000 bl __rt_udiv
00184 e58d0010 str r0, [sp, #0x10]
; 300 : Sector += g_FATParms.FATLBA;
00188 e59d2010 ldr r2, [sp, #0x10]
0018c e59f326c ldr r3, [pc, #0x26C]
00190 e5933004 ldr r3, [r3, #4]
00194 e0823003 add r3, r2, r3
00198 e58d3010 str r3, [sp, #0x10]
; 301 : break;
0019c ea00001c b |$L38279|
001a0 |$L38285|
; 302 : case FAT_16:
; 303 : default:
; 304 : Sector = Cluster * sizeof(USHORT);
001a0 e59d203c ldr r2, [sp, #0x3C]
001a4 e3a03002 mov r3, #2
001a8 e0030392 mul r3, r2, r3
001ac e58d3010 str r3, [sp, #0x10]
; 305 : ByteOffset = Sector % g_FATParms.BytesPerSect;
001b0 e59f1248 ldr r1, [pc, #0x248]
001b4 e5d13020 ldrb r3, [r1, #0x20]
001b8 e1a03403 mov r3, r3, lsl #8
001bc e1a02803 mov r2, r3, lsl #16
001c0 e1a02822 mov r2, r2, lsr #16
001c4 e5d1301f ldrb r3, [r1, #0x1F]
001c8 e1830002 orr r0, r3, r2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -