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

📄 drive.cod

📁 Ep93XX TionProV2 BSP
💻 COD
📖 第 1 页 / 共 3 页
字号:

  00104	e1dd30b2	 ldrh        r3, [sp, #2]
  00108	e1a0e003	 mov         lr, r3
  0010c	e59f1088	 ldr         r1, [pc, #0x88]
  00110	e5d1303e	 ldrb        r3, [r1, #0x3E]
  00114	e1a03403	 mov         r3, r3, lsl #8
  00118	e1a02803	 mov         r2, r3, lsl #16
  0011c	e1a02822	 mov         r2, r2, lsr #16
  00120	e5d1303d	 ldrb        r3, [r1, #0x3D]
  00124	e1833002	 orr         r3, r3, r2
  00128	e1a00003	 mov         r0, r3
  0012c	e1a0100e	 mov         r1, lr
  00130	eb000000	 bl          __rt_sdiv
  00134	e1a03801	 mov         r3, r1, lsl #16
  00138	e1a03823	 mov         r3, r3, lsr #16
  0013c	e1cd30b2	 strh        r3, [sp, #2]

; 151  :     *pS = (UCHAR)(Temp % g_FATParms.phy_sectspertrk) + 1;

  00140	e1dd30b2	 ldrh        r3, [sp, #2]
  00144	e1a0e003	 mov         lr, r3
  00148	e59f104c	 ldr         r1, [pc, #0x4C]
  0014c	e5d1303e	 ldrb        r3, [r1, #0x3E]
  00150	e1a03403	 mov         r3, r3, lsl #8
  00154	e1a02803	 mov         r2, r3, lsl #16
  00158	e1a02822	 mov         r2, r2, lsr #16
  0015c	e5d1303d	 ldrb        r3, [r1, #0x3D]
  00160	e1833002	 orr         r3, r3, r2
  00164	e1a00003	 mov         r0, r3
  00168	e1a0100e	 mov         r1, lr
  0016c	eb000000	 bl          __rt_sdiv
  00170	e20130ff	 and         r3, r1, #0xFF
  00174	e2833001	 add         r3, r3, #1
  00178	e20320ff	 and         r2, r3, #0xFF
  0017c	e59d301c	 ldr         r3, [sp, #0x1C]
  00180	e5c32000	 strb        r2, [r3]

; 152  : #else   //  ( NDEF_DWF_NEW_LBA_2_CHS )    
; 153  :     *pC = (USHORT)(LBA / (g_FATParms.NumHeads * g_FATParms.SectsPerTrack));
; 154  :     Temp = (USHORT)(LBA % (g_FATParms.NumHeads * g_FATParms.SectsPerTrack));
; 155  :     *pH = (UCHAR)(Temp / g_FATParms.SectsPerTrack);
; 156  :     *pS = (UCHAR)(Temp % g_FATParms.SectsPerTrack) + 1;
; 157  : #endif  //  ( NDEF_DWF_NEW_LBA_2_CHS )    
; 158  :     return(0); 

  00184	e3a03000	 mov         r3, #0
  00188	e58d3004	 str         r3, [sp, #4]
  0018c		 |$L38250|

; 142  :         return(-1);

  0018c	e59d0004	 ldr         r0, [sp, #4]

; 159  : }

  00190	e28dd008	 add         sp, sp, #8
  00194	e89d6000	 ldmia       sp, {sp, lr}
  00198	e12fff1e	 bx          lr
  0019c		 |$L38355|
  0019c	00000000	 DCD         |g_FATParms|
  001a0		 |$M38351|

			 ENDP  ; |LBA2PCHS|

	EXPORT	|ReadSectors|
	EXPORT	|??_C@_0DH@GOICPAPP@ERROR?3?5Unable?5to?5reset?5disk?5cont@| [ DATA ] ; `string'
	EXPORT	|??_C@_0BM@PFGACKNB@ERROR?3?5Status?50x?$CFx?3?5?$CC?$CFs?$CC?4?$AN?6?$AA@| [ DATA ] ; `string'
	IMPORT	|BIOS_ReadSectors|
	IMPORT	|ide_reset|
	IMPORT	|EdbgOutputDebugString|
	IMPORT	|memset|

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

  00000			 AREA	 |.pdata$$ReadSectors|, PDATA, SELECTION=5, ASSOC=|.text| { |ReadSectors| } ; comdat associative
|$T38364| DCD	|$L38363|
	DCD	0x40007004

  00000			 AREA	 |.rdata| { |??_C@_0BM@PFGACKNB@ERROR?3?5Status?50x?$CFx?3?5?$CC?$CFs?$CC?4?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BM@PFGACKNB@ERROR?3?5Status?50x?$CFx?3?5?$CC?$CFs?$CC?4?$AN?6?$AA@| DCB "E"
	DCB	"RROR: Status 0x%x: ""%s"".", 0xd, 0xa, 0x0 ; `string'

  00000			 AREA	 |.rdata| { |??_C@_0DH@GOICPAPP@ERROR?3?5Unable?5to?5reset?5disk?5cont@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DH@GOICPAPP@ERROR?3?5Unable?5to?5reset?5disk?5cont@| DCB "ERROR: "
	DCB	"Unable to reset disk controller (Drive=0x%x).", 0xd, 0xa
	DCB	0x0					; `string'
; Function compile flags: /Ods

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

  00000		 |ReadSectors| PROC

; 166  : {

  00000		 |$L38363|
  00000	e1a0c00d	 mov         r12, sp
  00004	e92d000f	 stmdb       sp!, {r0 - r3}
  00008	e92d5000	 stmdb       sp!, {r12, lr}
  0000c	e24dd01c	 sub         sp, sp, #0x1C
  00010		 |$M38361|

; 167  :     USHORT uMaxSector = 1;

  00010	e3a03001	 mov         r3, #1
  00014	e1cd30b0	 strh        r3, [sp]

; 168  :     USHORT uReadSector;
; 169  :     UCHAR  Status = 0;

  00018	e3a03000	 mov         r3, #0
  0001c	e5cd3002	 strb        r3, [sp, #2]

; 170  : 
; 171  :     // Check arguments.
; 172  :     //
; 173  :     if (!pBuffer)

  00020	e59d3030	 ldr         r3, [sp, #0x30]
  00024	e3530000	 cmp         r3, #0
  00028	1a000002	 bne         |$L38276|

; 174  :         return(FALSE);

  0002c	e3a03000	 mov         r3, #0
  00030	e5cd3008	 strb        r3, [sp, #8]
  00034	ea00005a	 b           |$L38272|
  00038		 |$L38276|

; 175  : //  SERPRINT("ReadSectors %d %d.\r\n", LBA, nSectors);
; 176  : 
; 177  :     // Clear memory before read...
; 178  :     memset( pBuffer, 0, (nSectors * g_FATParms.BytesPerSect) );

  00038	e1dd32bc	 ldrh        r3, [sp, #0x2C]
  0003c	e1a00003	 mov         r0, r3
  00040	e59f1170	 ldr         r1, [pc, #0x170]
  00044	e5d13020	 ldrb        r3, [r1, #0x20]
  00048	e1a03403	 mov         r3, r3, lsl #8
  0004c	e1a02803	 mov         r2, r3, lsl #16
  00050	e1a02822	 mov         r2, r2, lsr #16
  00054	e5d1301f	 ldrb        r3, [r1, #0x1F]
  00058	e1833002	 orr         r3, r3, r2
  0005c	e0020390	 mul         r2, r0, r3
  00060	e3a01000	 mov         r1, #0
  00064	e59d0030	 ldr         r0, [sp, #0x30]
  00068	eb000000	 bl          memset
  0006c		 |$L38278|

; 179  :     
; 180  :     // Call the BIOS to read a sector.
; 181  :     //
; 182  :     while(nSectors>0)

  0006c	e1dd32bc	 ldrh        r3, [sp, #0x2C]
  00070	e3530000	 cmp         r3, #0
  00074	da00003b	 ble         |$L38279|

; 183  :     {
; 184  :         uReadSector = MIN(nSectors,uMaxSector);

  00078	e1dd32bc	 ldrh        r3, [sp, #0x2C]
  0007c	e1a02003	 mov         r2, r3
  00080	e1dd30b0	 ldrh        r3, [sp]
  00084	e1520003	 cmp         r2, r3
  00088	aa000002	 bge         |$L38358|
  0008c	e1dd32bc	 ldrh        r3, [sp, #0x2C]
  00090	e58d300c	 str         r3, [sp, #0xC]
  00094	ea000001	 b           |$L38359|
  00098		 |$L38358|
  00098	e1dd30b0	 ldrh        r3, [sp]
  0009c	e58d300c	 str         r3, [sp, #0xC]
  000a0		 |$L38359|
  000a0	e59d300c	 ldr         r3, [sp, #0xC]
  000a4	e1a03803	 mov         r3, r3, lsl #16
  000a8	e1a03823	 mov         r3, r3, lsr #16
  000ac	e1cd30b4	 strh        r3, [sp, #4]

; 185  :         if ((Status = BIOS_ReadSectors(Drive, LBA, (BYTE)uReadSector, pBuffer)) != 0)

  000b0	e59d3030	 ldr         r3, [sp, #0x30]
  000b4	e1dd20b4	 ldrh        r2, [sp, #4]
  000b8	e20220ff	 and         r2, r2, #0xFF
  000bc	e59d1028	 ldr         r1, [sp, #0x28]
  000c0	e5dd0024	 ldrb        r0, [sp, #0x24]
  000c4	eb000000	 bl          BIOS_ReadSectors
  000c8	e5cd0010	 strb        r0, [sp, #0x10]
  000cc	e5dd3010	 ldrb        r3, [sp, #0x10]
  000d0	e5cd3002	 strb        r3, [sp, #2]
  000d4	e5dd3002	 ldrb        r3, [sp, #2]
  000d8	e3530000	 cmp         r3, #0
  000dc	0a000008	 beq         |$L38281|

; 186  :         {
; 187  :             // If the read failed, retry the operation and reset the controller each time...
; 188  :             //if (BIOS_ResetDisk(Drive))
; 189  :             if ( ide_reset() )

  000e0	eb000000	 bl          ide_reset
  000e4	e58d0014	 str         r0, [sp, #0x14]
  000e8	e59d3014	 ldr         r3, [sp, #0x14]
  000ec	e3530000	 cmp         r3, #0
  000f0	0a000003	 beq         |$L38282|

; 190  :             {
; 191  :                 SERPRINT("ERROR: Unable to reset disk controller (Drive=0x%x).\r\n", Drive);

  000f4	e5dd1024	 ldrb        r1, [sp, #0x24]
  000f8	e59f00bc	 ldr         r0, [pc, #0xBC]
  000fc	eb000000	 bl          EdbgOutputDebugString

; 192  :                 break;

  00100	ea000018	 b           |$L38279|
  00104		 |$L38282|
  00104		 |$L38281|

; 193  :             }
; 194  :         }
; 195  :         nSectors -= uReadSector;

  00104	e1dd30b4	 ldrh        r3, [sp, #4]
  00108	e1a02003	 mov         r2, r3
  0010c	e1dd32bc	 ldrh        r3, [sp, #0x2C]
  00110	e0433002	 sub         r3, r3, r2
  00114	e1a03803	 mov         r3, r3, lsl #16
  00118	e1a03823	 mov         r3, r3, lsr #16
  0011c	e1cd32bc	 strh        r3, [sp, #0x2C]

; 196  :         LBA      += uReadSector;

  00120	e1dd20b4	 ldrh        r2, [sp, #4]
  00124	e59d3028	 ldr         r3, [sp, #0x28]
  00128	e0833002	 add         r3, r3, r2
  0012c	e58d3028	 str         r3, [sp, #0x28]

; 197  :         pBuffer  += uReadSector * g_FATParms.BytesPerSect;

  00130	e1dd30b4	 ldrh        r3, [sp, #4]
  00134	e1a00003	 mov         r0, r3
  00138	e59f1078	 ldr         r1, [pc, #0x78]
  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	e1833002	 orr         r3, r3, r2
  00154	e0020390	 mul         r2, r0, r3
  00158	e59d3030	 ldr         r3, [sp, #0x30]
  0015c	e0833002	 add         r3, r3, r2
  00160	e58d3030	 str         r3, [sp, #0x30]

; 198  :     }

  00164	eaffffc0	 b           |$L38278|
  00168		 |$L38279|

; 199  : 
; 200  :     if (Status)

  00168	e5dd3002	 ldrb        r3, [sp, #2]
  0016c	e3530000	 cmp         r3, #0
  00170	0a000009	 beq         |$L38284|

; 201  :     {
; 202  : //      SERPRINT("ERROR: Unable to read %d sector(s) at CHS = 0x%x:0x%x:0x%x  (Status=0x%x).\r\n", nSectors, c, h, s, Status);
; 203  :         SERPRINT("ERROR: Status 0x%x: \"%s\".\r\n", Status, GetErrorText(Status));

  00174	e5dd0002	 ldrb        r0, [sp, #2]
  00178	eb000000	 bl          GetErrorText
  0017c	e58d0018	 str         r0, [sp, #0x18]
  00180	e59d2018	 ldr         r2, [sp, #0x18]
  00184	e5dd1002	 ldrb        r1, [sp, #2]
  00188	e59f0024	 ldr         r0, [pc, #0x24]
  0018c	eb000000	 bl          EdbgOutputDebugString

; 204  :         return(FALSE);

  00190	e3a03000	 mov         r3, #0
  00194	e5cd3008	 strb        r3, [sp, #8]
  00198	ea000001	 b           |$L38272|
  0019c		 |$L38284|

; 205  :     }
; 206  : 
; 207  :     return(TRUE);

  0019c	e3a03001	 mov         r3, #1
  001a0	e5cd3008	 strb        r3, [sp, #8]
  001a4		 |$L38272|

; 174  :         return(FALSE);

  001a4	e5dd0008	 ldrb        r0, [sp, #8]

; 208  : }

  001a8	e28dd01c	 add         sp, sp, #0x1C
  001ac	e89d6000	 ldmia       sp, {sp, lr}
  001b0	e12fff1e	 bx          lr
  001b4		 |$L38366|
  001b4	00000000	 DCD         |??_C@_0BM@PFGACKNB@ERROR?3?5Status?50x?$CFx?3?5?$CC?$CFs?$CC?4?$AN?6?$AA@|
  001b8	00000000	 DCD         |g_FATParms|
  001bc	00000000	 DCD         |??_C@_0DH@GOICPAPP@ERROR?3?5Unable?5to?5reset?5disk?5cont@|
  001c0		 |$M38362|

			 ENDP  ; |ReadSectors|

	END

⌨️ 快捷键说明

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