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

📄 fat.cod

📁 Ep93XX TionProV2 BSP
💻 COD
📖 第 1 页 / 共 5 页
字号:
; 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 + -