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

📄 blcommon.cod

📁 EP9315的BSP包(WINCE下的BSP,内有各种驱动的详细的代码)
💻 COD
📖 第 1 页 / 共 2 页
字号:
  0007c	3affffea	 bcc       |$L36948|
  00080		 |$L36950|

; 167  :     }
; 168  :     return TRUE;

  00080	e3a00001	 mov       r0, #1

; 169  : }

  00084	e8bd40f0	 ldmia     sp!, {r4 - r7, lr}
  00088	e12fff1e	 bx        lr
  0008c		 |$M37080|

			 ENDP  ; |KernelRelocate|

	EXPORT	|??_C@_07FKMI@B000FF?6?$AA@| [ DATA ]	; `string'
	EXPORT	|??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@| [ DATA ] ; `string'
	EXPORT	|??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@| [ DATA ] ; `string'
	EXPORT	|??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@| [ DATA ] ; `string'
	EXPORT	|??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@| [ DATA ] ; `string'
	EXPORT	|??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@| [ DATA ] ; `string'
	EXPORT	|??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@| [ DATA ] ; `string'
	IMPORT	|OEMReadData|
	IMPORT	|OEMShowProgress|
	IMPORT	|OEMIsFlashAddr|
	IMPORT	|OEMStartEraseFlash|
	IMPORT	|OEMContinueEraseFlash|
	IMPORT	|OEMFinishEraseFlash|
	IMPORT	|OEMWriteFlash|
	IMPORT	|memcmp|

  00000			 AREA	 |.text| { |DownloadImage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$DownloadImage|, PDATA, SELECTION=5, ASSOC=|.text| { |DownloadImage| } ; comdat associative
|$T37105| DCD	|DownloadImage|
	DCD	0x40009902

  00000			 AREA	 |.rdata| { |??_C@_07FKMI@B000FF?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_07FKMI@B000FF?6?$AA@| DCB "B000FF", 0xa, 0x0	; `string'

  00000			 AREA	 |.rdata| { |??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@| DCB "!OEMVERI"
	DCB	"FYMEMORY: Invalid image", 0xd, 0xa, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@| DCB "Invalid "
	DCB	"Flash Address/Length", 0xd, 0xa, 0x0	; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@| DCB "*"
	DCB	"***** Data record %d corrupted, ABORT!!! ******", 0xd, 0xa
	DCB	0x0					; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@| DCB "*"
	DCB	"***** Checksum failure on record %d, ABORT!!! ******", 0xd
	DCB	0xa, 0x0				; `string'

  00000			 AREA	 |.rdata| { |??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@| DCB "Unable to re"
	DCB	"ad image start/length", 0xd, 0xa, 0x0	; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@| DCB 0xd
	DCB	0xa, "This is not a .BIN file %x %x %x %x %x %x %x", 0xd, 0xa
	DCB	0x0					; `string'
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |DownloadImage| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |DownloadImage| PROC

; 183  : {

  00000	e92d47f0	 stmdb     sp!, {r4 - r10, lr}
  00004	e24dd024	 sub       sp, sp, #0x24
  00008		 |$M37103|
  00008	e1a08000	 mov       r8, r0
  0000c	e1a07001	 mov       r7, r1
  00010	e1a06002	 mov       r6, r2

; 184  :     BYTE hdr[BINHDRSIZE];
; 185  :     DWORD dwRecLen, dwRecChk, dwRecAddr;
; 186  :     BOOL fIsFlash;
; 187  :     LPBYTE lpDest;
; 188  :     int nPkgNum = 0;

  00014	e3a0a000	 mov       r10, #0

; 189  : 
; 190  :     // read the 7 byte "magic number"
; 191  :     if (!OEMReadData (BINHDRSIZE, hdr)
; 192  :         || memcmp (hdr, "B000FF\x0A", BINHDRSIZE)) {

  00018	e28d101c	 add       r1, sp, #0x1C
  0001c	e3a00007	 mov       r0, #7
  00020	e1a0900a	 mov       r9, r10
  00024	eb000000	 bl        OEMReadData
  00028	e3500000	 cmp       r0, #0
  0002c	0a000068	 beq       |$L36986|
  00030	e59f1228	 ldr       r1, [pc, #0x228]
  00034	e3a02007	 mov       r2, #7
  00038	e28d001c	 add       r0, sp, #0x1C
  0003c	eb000000	 bl        memcmp
  00040	e3500000	 cmp       r0, #0
  00044	1a000062	 bne       |$L36986|

; 196  :     }
; 197  : 
; 198  :     // read image start/length
; 199  :     if (!OEMReadData (sizeof (DWORD), (LPBYTE) pdwImageStart)
; 200  :         || !OEMReadData (sizeof (DWORD), (LPBYTE) pdwImageLength)) {

  00048	e1a01008	 mov       r1, r8
  0004c	e3a00004	 mov       r0, #4
  00050	eb000000	 bl        OEMReadData
  00054	e3500000	 cmp       r0, #0
  00058	0a00005a	 beq       |$L36994|
  0005c	e1a01007	 mov       r1, r7
  00060	e3a00004	 mov       r0, #4
  00064	eb000000	 bl        OEMReadData
  00068	e3500000	 cmp       r0, #0
  0006c	0a000055	 beq       |$L36994|

; 203  :     }
; 204  : 
; 205  :     // give the OEM a chance to verify memory
; 206  :     if (g_pOEMVerifyMemory && !g_pOEMVerifyMemory (*pdwImageStart, *pdwImageLength)) {

  00070	e59f01e4	 ldr       r0, [pc, #0x1E4]
  00074	e5902000	 ldr       r2, [r0]
  00078	e3520000	 cmp       r2, #0
  0007c	0a000008	 beq       |$L36996|
  00080	e5971000	 ldr       r1, [r7]
  00084	e5980000	 ldr       r0, [r8]
  00088	e1a0e00f	 mov       lr, pc
  0008c	e12fff12	 bx        r2
  00090	e3500000	 cmp       r0, #0
  00094	1a000002	 bne       |$L36996|

; 207  :         EdbgOutputDebugString ("!OEMVERIFYMEMORY: Invalid image\r\n");

  00098	e59f01b8	 ldr       r0, [pc, #0x1B8]
  0009c	eb000000	 bl        EdbgOutputDebugString
  000a0	ea000063	 b         |$L37098|
  000a4		 |$L36996|

; 208  :         return FALSE;
; 209  :     }
; 210  : 
; 211  :     // check for flash image. Start erasing if it is.
; 212  :     if ((fIsFlash = OEMIsFlashAddr (*pdwImageStart)) 
; 213  :         && !OEMStartEraseFlash (*pdwImageStart, *pdwImageLength)) {

  000a4	e5980000	 ldr       r0, [r8]
  000a8	eb000000	 bl        OEMIsFlashAddr
  000ac	e1b05000	 movs      r5, r0
  000b0	0a00002a	 beq       |$L37017|
  000b4	e5971000	 ldr       r1, [r7]
  000b8	e5980000	 ldr       r0, [r8]
  000bc	eb000000	 bl        OEMStartEraseFlash
  000c0	e3500000	 cmp       r0, #0
  000c4	1a000025	 bne       |$L37017|

; 214  :         EdbgOutputDebugString ("Invalid Flash Address/Length\r\n");

  000c8	e59f0184	 ldr       r0, [pc, #0x184]
  000cc	eb000000	 bl        EdbgOutputDebugString
  000d0	ea000057	 b         |$L37098|
  000d4		 |$L37007|

; 215  :         return FALSE;
; 216  :     }
; 217  : 
; 218  :     // read records (start with address, length, and checksum)
; 219  :     while (OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecAddr)
; 220  :         && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecLen)
; 221  :         && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {

  000d4	e28d1010	 add       r1, sp, #0x10
  000d8	e3a00004	 mov       r0, #4
  000dc	eb000000	 bl        OEMReadData
  000e0	e3500000	 cmp       r0, #0
  000e4	0a000052	 beq       |$L37098|
  000e8	e28d1014	 add       r1, sp, #0x14
  000ec	e3a00004	 mov       r0, #4
  000f0	eb000000	 bl        OEMReadData
  000f4	e3500000	 cmp       r0, #0
  000f8	0a00004d	 beq       |$L37098|

; 222  : 
; 223  :         // check for last record
; 224  :         if (!dwRecAddr && !dwRecChk) {

  000fc	e59d1018	 ldr       r1, [sp, #0x18]
  00100	e3510000	 cmp       r1, #0
  00104	1a000002	 bne       |$L37009|
  00108	e59d0014	 ldr       r0, [sp, #0x14]
  0010c	e3500000	 cmp       r0, #0
  00110	0a000018	 beq       |$L37086|
  00114		 |$L37009|

; 240  :         }
; 241  : 
; 242  :         // map the record address (FLASH data is cached, for example)
; 243  :         lpDest = OEMMapMemAddr (*pdwImageStart, dwRecAddr);

  00114	e5980000	 ldr       r0, [r8]
  00118	eb000000	 bl        OEMMapMemAddr
  0011c	e1a04000	 mov       r4, r0

; 244  : 
; 245  :         // read data block
; 246  :         if (!OEMReadData (dwRecLen, lpDest)) {

  00120	e59d0010	 ldr       r0, [sp, #0x10]
  00124	e1a01004	 mov       r1, r4
  00128	eb000000	 bl        OEMReadData
  0012c	e3500000	 cmp       r0, #0
  00130	0a00001e	 beq       |$L37087|

; 249  :         }
; 250  : 
; 251  :         if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {

  00134	e59d2014	 ldr       r2, [sp, #0x14]
  00138	e1a01004	 mov       r1, r4
  0013c	e59d0010	 ldr       r0, [sp, #0x10]
  00140	eb000000	 bl        VerifyChecksum
  00144	e3500000	 cmp       r0, #0
  00148	0a00001a	 beq       |$L37088|

; 254  :         }
; 255  :         // verify partial checksum
; 256  :         OEMShowProgress (nPkgNum ++);

  0014c	e1a00009	 mov       r0, r9
  00150	e2899001	 add       r9, r9, #1
  00154	eb000000	 bl        OEMShowProgress

; 257  :         if (fIsFlash) {

  00158	e3550000	 cmp       r5, #0

; 258  :             OEMContinueEraseFlash ();

  0015c	1b000000	 blne      OEMContinueEraseFlash
  00160		 |$L37017|
  00160	e3a00004	 mov       r0, #4
  00164	e28d1018	 add       r1, sp, #0x18
  00168	eb000000	 bl        OEMReadData
  0016c	e3500000	 cmp       r0, #0
  00170	1affffd7	 bne       |$L37007|

; 249  :         }
; 250  : 
; 251  :         if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {

  00174	ea00002e	 b         |$L37098|
  00178		 |$L37086|

; 225  : 
; 226  :             // update launch address
; 227  :             *pdwLaunchAddr = dwRecLen;

  00178	e59d0010	 ldr       r0, [sp, #0x10]

; 228  : 
; 229  :             // write to flash if it's flash image
; 230  :             if (fIsFlash) {

  0017c	e3550000	 cmp       r5, #0
  00180	e5860000	 str       r0, [r6]
  00184	0a000007	 beq       |$L37012|

; 231  :                 // finish the flash erase
; 232  :                 if (!OEMFinishEraseFlash ()) {

  00188	eb000000	 bl        OEMFinishEraseFlash
  0018c	e3500000	 cmp       r0, #0

; 233  :                     return FALSE;

  00190	0a000027	 beq       |$L37098|

; 234  :                 }
; 235  :                 if (!OEMWriteFlash (*pdwImageStart, *pdwImageLength)) {

  00194	e5971000	 ldr       r1, [r7]
  00198	e5980000	 ldr       r0, [r8]
  0019c	eb000000	 bl        OEMWriteFlash
  001a0	e3500000	 cmp       r0, #0

; 236  :                     return FALSE;

  001a4	0a000022	 beq       |$L37098|
  001a8		 |$L37012|

; 237  :                 }
; 238  :             }
; 239  :             return TRUE;

  001a8	e3a00001	 mov       r0, #1
  001ac	ea000021	 b         |$L36977|
  001b0		 |$L37087|

; 247  :             EdbgOutputDebugString ("****** Data record %d corrupted, ABORT!!! ******\r\n", nPkgNum);

  001b0	e59f0098	 ldr       r0, [pc, #0x98]

; 248  :             return FALSE;

  001b4	ea000000	 b         |$L37102|
  001b8		 |$L37088|

; 252  :             EdbgOutputDebugString ("****** Checksum failure on record %d, ABORT!!! ******\r\n", nPkgNum);

  001b8	e59f008c	 ldr       r0, [pc, #0x8C]
  001bc		 |$L37102|
  001bc	e1a01009	 mov       r1, r9
  001c0	eb000000	 bl        EdbgOutputDebugString

; 253  :             return FALSE;

  001c4	ea00001a	 b         |$L37098|
  001c8		 |$L36994|

; 201  :         EdbgOutputDebugString ("Unable to read image start/length\r\n");

  001c8	e59f0078	 ldr       r0, [pc, #0x78]
  001cc	eb000000	 bl        EdbgOutputDebugString

; 202  :         return FALSE;

  001d0	ea000017	 b         |$L37098|
  001d4		 |$L36986|

; 193  :         EdbgOutputDebugString ("\r\nThis is not a .BIN file %x %x %x %x %x %x %x\r\n",
; 194  :             hdr[0], hdr[1], hdr[2], hdr[3], hdr[4], hdr[5], hdr[6]);

  001d4	e59d101c	 ldr       r1, [sp, #0x1C]
  001d8	e1dd42b0	 ldrh      r4, [sp, #0x20]
  001dc	e1a00801	 mov       r0, r1, lsl #16
  001e0	e5dd5022	 ldrb      r5, [sp, #0x22]
  001e4	e1a01821	 mov       r1, r1, lsr #16
  001e8	e1a07820	 mov       r7, r0, lsr #16
  001ec	e58d500c	 str       r5, [sp, #0xC]
  001f0	e1a00c01	 mov       r0, r1, lsl #24
  001f4	e1a06c20	 mov       r6, r0, lsr #24
  001f8	e1a00c04	 mov       r0, r4, lsl #24
  001fc	e1a02c20	 mov       r2, r0, lsr #24
  00200	e20200ff	 and       r0, r2, #0xFF
  00204	e1a03421	 mov       r3, r1, lsr #8
  00208	e58d0004	 str       r0, [sp, #4]
  0020c	e1a01424	 mov       r1, r4, lsr #8
  00210	e58d3000	 str       r3, [sp]
  00214	e1a00c07	 mov       r0, r7, lsl #24
  00218	e58d1008	 str       r1, [sp, #8]
  0021c	e1a01c20	 mov       r1, r0, lsr #24
  00220	e59f001c	 ldr       r0, [pc, #0x1C]
  00224	e20630ff	 and       r3, r6, #0xFF
  00228	e1a02427	 mov       r2, r7, lsr #8
  0022c	e20110ff	 and       r1, r1, #0xFF
  00230	eb000000	 bl        EdbgOutputDebugString
  00234		 |$L37098|

; 195  :         return FALSE;

  00234	e1a0000a	 mov       r0, r10
  00238		 |$L36977|

; 259  :         }
; 260  :     }
; 261  : 
; 262  :     return FALSE;
; 263  : }

  00238	e28dd024	 add       sp, sp, #0x24
  0023c	e8bd47f0	 ldmia     sp!, {r4 - r10, lr}
  00240	e12fff1e	 bx        lr
  00244		 |$L37107|
  00244	00000000	 DCD       |??_C@_0DB@FGGA@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@|
  00248	00000000	 DCD       |??_C@_0CE@CEJO@Unable?5to?5read?5image?5start?1lengt@|
  0024c	00000000	 DCD       |??_C@_0DI@IIDL@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@|
  00250	00000000	 DCD       |??_C@_0DD@JCBB@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@|
  00254	00000000	 DCD       |??_C@_0BP@FBFL@Invalid?5Flash?5Address?1Length?$AN?6?$AA@|
  00258	00000000	 DCD       |??_C@_0CC@MOBO@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@|
  0025c	00000000	 DCD       |g_pOEMVerifyMemory|
  00260	00000000	 DCD       |??_C@_07FKMI@B000FF?6?$AA@|
  00264		 |$M37104|

			 ENDP  ; |DownloadImage|


  00000			 AREA	 |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$VerifyChecksum|, PDATA, SELECTION=5, ASSOC=|.text| { |VerifyChecksum| } ; comdat associative
|$T37122| DCD	|VerifyChecksum|
	DCD	0x40001001
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |VerifyChecksum| PROC

; 172  : {

  00000	e92d4030	 stmdb     sp!, {r4, r5, lr}
  00004		 |$M37120|
  00004	e1a03000	 mov       r3, r0
  00008	e1a04002	 mov       r4, r2

; 173  :     // Check the CRC
; 174  :     DWORD dwCRC = 0;

  0000c	e3a05000	 mov       r5, #0
  00010	e1a02005	 mov       r2, r5
  00014	ea000002	 b         |$L37119|
  00018		 |$L36968|

; 177  :         dwCRC += *pbRecord ++;

  00018	e4d10001	 ldrb      r0, [r1], #1
  0001c	e2433001	 sub       r3, r3, #1
  00020	e0822000	 add       r2, r2, r0
  00024		 |$L37119|

; 175  :     DWORD i;
; 176  :     for (i = 0; i < cbRecord; i++)

  00024	e3530000	 cmp       r3, #0
  00028	8afffffa	 bhi       |$L36968|

; 178  :     return dwCRC == dwChksum;

  0002c	e1520004	 cmp       r2, r4
  00030	03a05001	 moveq     r5, #1
  00034	e1a00005	 mov       r0, r5

; 179  : }

  00038	e8bd4030	 ldmia     sp!, {r4, r5, lr}
  0003c	e12fff1e	 bx        lr
  00040		 |$M37121|

			 ENDP  ; |VerifyChecksum|

	END

⌨️ 快捷键说明

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