📄 ide.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 12.20.9615
TTL d:\wince420\platform\ep931x\eboot\.\ide.c
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |g_sectorsread| [ DATA ]
EXPORT |g_bstartcounting| [ DATA ]
EXPORT |g_bLBAMode| [ DATA ]
00000 AREA |.data|, DATA
COMMON |g_drvparms|, 0x6
COMMON |g_bsect|, 0x200
00000 AREA |.bss|, NOINIT
|g_sectorsread| % 0x4
|g_bstartcounting| % 0x1
|g_bLBAMode| % 0x4
00000 AREA |.rdata|, DATA, READONLY
|EdbgVendorIds| DCW 0x0
DCW 0x0
DCD 0x4033
DCB 0x1
DCB "AD", 0x0
DCW 0x1050
DCW 0x940
DCD 0x4005
DCB 0x1
DCB "LS", 0x0
DCW 0x1050
DCW 0x940
DCD 0x2078
DCB 0x1
DCB "LS", 0x0
DCW 0x10ec
DCW 0x8029
DCD 0xc0f0
DCB 0x1
DCB "KS", 0x0
DCW 0x10ec
DCW 0x8129
DCD 0x0
DCB 0x4
DCB "RT", 0x0
DCW 0x10ec
DCW 0x8139
DCD 0x900b
DCB 0x4
DCB "RT", 0x0
DCW 0x10ec
DCW 0x8139
DCD 0xd0c9
DCB 0x4
DCB "RT", 0x0
DCW 0x10ec
DCW 0x8139
DCD 0xe04c
DCB 0x4
DCB "RT", 0x0
DCW 0x1186
DCW 0x1300
DCD 0x50ba
DCB 0x4
DCB "DL", 0x0
DCW 0x100b
DCW 0x20
DCD 0xa0cc
DCB 0x5
DCB "NG", 0x0
DCW 0x10b7
DCW 0x9050
DCD 0x6008
DCB 0x6
DCB "3C", 0x0
DCW 0x10b7
DCW 0x9200
DCD 0x476
DCB 0x6
DCB "3C", 0x0
EXPORT |ide_reset|
EXPORT |??_C@_0BG@HLNO@ide_reset?3?5entered?4?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0BP@NPCA@WARNING?3?5Drive?5reset?5failed?4?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0BD@BAMF@ide_reset?3?5done?4?$AN?6?$AA@| [ DATA ] ; `string'
IMPORT |DelayInMsec|
IMPORT |EdbgOutputDebugString|
; File d:\wince420\platform\ep931x\eboot\ide.c
00000 AREA |.text| { |ide_reset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$ide_reset|, PDATA, SELECTION=5, ASSOC=|.text| { |ide_reset| } ; comdat associative
|$T37359| DCD |ide_reset|
DCD 0x40002001
00000 AREA |.rdata| { |??_C@_0BG@HLNO@ide_reset?3?5entered?4?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BG@HLNO@ide_reset?3?5entered?4?$AN?6?$AA@| DCB "ide_reset: entere"
DCB "d.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BP@NPCA@WARNING?3?5Drive?5reset?5failed?4?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BP@NPCA@WARNING?3?5Drive?5reset?5failed?4?$AN?6?$AA@| DCB "WARNIN"
DCB "G: Drive reset failed.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BD@BAMF@ide_reset?3?5done?4?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BD@BAMF@ide_reset?3?5done?4?$AN?6?$AA@| DCB "ide_reset: done.", 0xd
DCB 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |ide_reset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |ide_reset| PROC
; 77 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M37357|
; 78 :
; 79 : DEBUGMSG(ZONE_INFO, (TEXT("ide_reset: entered.\r\n")));
00004 e59f0070 ldr r0, [pc, #0x70]
00008 eb000000 bl EdbgOutputDebugString
0000c e3a0511d mov r5, #0x1D, 2
00010 |$L37022|
; 80 :
; 81 : WAIT_IDE_BUSY;
00010 e5d50000 ldrb r0, [r5]
00014 e3100080 tst r0, #0x80
00018 1afffffc bne |$L37022|
; 82 : WRITE_IDE_UCHAR(IDE_ALT_CTRL_REG, (IDE_ALT_CTRL_SRST | IDE_ALT_CTRL_DSBL_INTR));
0001c e3a00006 mov r0, #6
00020 e3a04139 mov r4, #0x39, 2
00024 e5c40000 strb r0, [r4]
; 83 : //WAIT_IDE_NOT_BUSY;
; 84 :
; 85 : //
; 86 : // The IDE specification says wait 4 Milliseconds and nothing about waiting for
; 87 : // busy.
; 88 : //
; 89 : DelayInMsec(4);
00028 e3a00004 mov r0, #4
0002c eb000000 bl DelayInMsec
; 90 : WRITE_IDE_UCHAR(IDE_ALT_CTRL_REG, IDE_ALT_CTRL_DSBL_INTR);
00030 e3a03002 mov r3, #2
00034 e5c43000 strb r3, [r4]
00038 |$L37028|
; 91 : WAIT_IDE_NOT_DRDY;
00038 e5d50000 ldrb r0, [r5]
0003c e3100040 tst r0, #0x40
00040 0afffffc beq |$L37028|
00044 |$L37032|
; 92 : WAIT_IDE_BUSY;
00044 e5d50000 ldrb r0, [r5]
00048 e3100080 tst r0, #0x80
0004c 1afffffc bne |$L37032|
; 93 :
; 94 : if(IS_IDE_ERROR)
00050 e5d50000 ldrb r0, [r5]
00054 e3100001 tst r0, #1
; 95 : {
; 96 : RETAILMSG(1, (TEXT("WARNING: Drive reset failed.\r\n")));
00058 159f0018 ldrne r0, [pc, #0x18]
0005c 1b000000 blne EdbgOutputDebugString
; 97 : }
; 98 :
; 99 : DEBUGMSG(ZONE_INFO, (TEXT("ide_reset: done.\r\n")));
00060 e59f000c ldr r0, [pc, #0xC]
00064 eb000000 bl EdbgOutputDebugString
; 100 :
; 101 : return(0);
00068 e3a00000 mov r0, #0
; 102 : }
0006c e8bd4030 ldmia sp!, {r4, r5, lr}
00070 e12fff1e bx lr
00074 |$L37361|
00074 00000000 DCD |??_C@_0BD@BAMF@ide_reset?3?5done?4?$AN?6?$AA@|
00078 00000000 DCD |??_C@_0BP@NPCA@WARNING?3?5Drive?5reset?5failed?4?$AN?6?$AA@|
0007c 00000000 DCD |??_C@_0BG@HLNO@ide_reset?3?5entered?4?$AN?6?$AA@|
00080 |$M37358|
ENDP ; |ide_reset|
EXPORT |id_drive|
EXPORT |??_C@_04GJCL@B6?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_04DLDN@B7?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_04BFOJ@B8?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_04EHPP@B9?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0BK@FHIB@ERROR?3?5Drive?5ID?5failed?4?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_05IFC@B10?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_05FKEE@B11?$AN?6?$AA@| [ DATA ] ; `string'
EXPORT |??_C@_0DJ@BJBM@LBA?5Mode?5?$CIC?3H?3S?5?$DN?5?$CFd?3?$CFd?3?$CFd?5?5addr@| [ DATA ] ; `string'
EXPORT |??_C@_0CD@HPCF@Loading?5image?5from?5hard?5drive?4?4?4@| [ DATA ] ; `string'
IMPORT |memset|
00000 AREA |.text| { |id_drive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$id_drive|, PDATA, SELECTION=5, ASSOC=|.text| { |id_drive| } ; comdat associative
|$T37394| DCD |id_drive|
DCD 0x40006f02
00000 AREA |.rdata| { |??_C@_04GJCL@B6?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_04GJCL@B6?$AN?6?$AA@| DCB "B6", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_04DLDN@B7?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_04DLDN@B7?$AN?6?$AA@| DCB "B7", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_04BFOJ@B8?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_04BFOJ@B8?$AN?6?$AA@| DCB "B8", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_04EHPP@B9?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_04EHPP@B9?$AN?6?$AA@| DCB "B9", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0BK@FHIB@ERROR?3?5Drive?5ID?5failed?4?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BK@FHIB@ERROR?3?5Drive?5ID?5failed?4?$AN?6?$AA@| DCB "ERROR: Driv"
DCB "e ID failed.", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_05IFC@B10?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_05IFC@B10?$AN?6?$AA@| DCB "B10", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_05FKEE@B11?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_05FKEE@B11?$AN?6?$AA@| DCB "B11", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0DJ@BJBM@LBA?5Mode?5?$CIC?3H?3S?5?$DN?5?$CFd?3?$CFd?3?$CFd?5?5addr@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0DJ@BJBM@LBA?5Mode?5?$CIC?3H?3S?5?$DN?5?$CFd?3?$CFd?3?$CFd?5?5addr@| DCB "L"
DCB "BA Mode (C:H:S = %d:%d:%d addressable sectors = %d).", 0xd
DCB 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CD@HPCF@Loading?5image?5from?5hard?5drive?4?4?4@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CD@HPCF@Loading?5image?5from?5hard?5drive?4?4?4@| DCB "Loading im"
DCB "age from hard drive...", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |id_drive| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |id_drive| PROC
; 106 : {
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd084 sub sp, sp, #0x84
00008 |$M37392|
; 107 : USHORT cnt=0;
; 108 : drv_id_hdr hdr;
; 109 :
; 110 : DEBUGMSG(ZONE_BOOTPROG, (TEXT("B6\r\n")));
00008 e59f01a8 ldr r0, [pc, #0x1A8]
0000c eb000000 bl EdbgOutputDebugString
; 111 :
; 112 : // Select the drive.
; 113 : //
; 114 : WRITE_IDE_UCHAR(IDE_DRVHD_REG, IDE_HEAD_DRIVE_1);
00010 e3a05119 mov r5, #0x19, 2
00014 e3a040a0 mov r4, #0xA0
00018 e5c54000 strb r4, [r5]
; 115 :
; 116 : // Reset the drive.
; 117 : //
; 118 : if (ide_reset())
0001c eb000000 bl ide_reset
00020 e3500000 cmp r0, #0
; 119 : return(-1);
00024 1a000021 bne |$L37391|
; 120 :
; 121 : DEBUGMSG(ZONE_BOOTPROG, (TEXT("B7\r\n")));
00028 e59f0184 ldr r0, [pc, #0x184]
0002c eb000000 bl EdbgOutputDebugString
00030 e3a0611d mov r6, #0x1D, 2
00034 |$L37050|
; 122 :
; 123 : WAIT_IDE_BUSY;
00034 e5d60000 ldrb r0, [r6]
00038 e3100080 tst r0, #0x80
0003c 1afffffc bne |$L37050|
; 124 :
; 125 : // Select the drive.
; 126 : //
; 127 : WRITE_IDE_UCHAR(IDE_DRVHD_REG, IDE_HEAD_DRIVE_1);
; 128 :
; 129 : DEBUGMSG(ZONE_BOOTPROG, (TEXT("B8\r\n")));
00040 e59f0168 ldr r0, [pc, #0x168]
00044 e5c54000 strb r4, [r5]
00048 eb000000 bl EdbgOutputDebugString
; 130 :
; 131 : // Identify the drive.
; 132 : //
; 133 : memset(&hdr, 0, sizeof(drv_id_hdr));
0004c e3a02080 mov r2, #0x80
00050 e3a01000 mov r1, #0
00054 e28d0004 add r0, sp, #4
00058 eb000000 bl memset
0005c |$L37057|
; 134 :
; 135 : WAIT_IDE_BUSY;
0005c e5d60000 ldrb r0, [r6]
00060 e3100080 tst r0, #0x80
00064 1afffffc bne |$L37057|
00068 |$L37061|
; 136 : WAIT_IDE_NOT_DRDY;
00068 e5d60000 ldrb r0, [r6]
0006c e3100040 tst r0, #0x40
00070 0afffffc beq |$L37061|
; 137 : WRITE_IDE_UCHAR(IDE_CMD_REG, IDE_IDDRIVE_CMD);
00074 e3a000ec mov r0, #0xEC
00078 e5c60000 strb r0, [r6]
0007c |$L37066|
; 138 : WAIT_IDE_BUSY;
0007c e5d60000 ldrb r0, [r6]
00080 e3100080 tst r0, #0x80
00084 1afffffc bne |$L37066|
00088 |$L37070|
; 139 : WAIT_IDE_NOT_DRQ;
00088 e5d60000 ldrb r0, [r6]
0008c e3100008 tst r0, #8
00090 0afffffc beq |$L37070|
; 140 :
; 141 : DEBUGMSG(ZONE_BOOTPROG, (TEXT("B9\r\n")));
00094 e59f0110 ldr r0, [pc, #0x110]
00098 eb000000 bl EdbgOutputDebugString
; 142 :
; 143 : if(IS_IDE_ERROR)
0009c e5d63000 ldrb r3, [r6]
000a0 e3130001 tst r3, #1
000a4 0a000003 beq |$L37074|
; 144 : {
; 145 : RETAILMSG(1, (TEXT("ERROR: Drive ID failed.\r\n")));
000a8 e59f00f8 ldr r0, [pc, #0xF8]
000ac eb000000 bl EdbgOutputDebugString
000b0 |$L37391|
; 146 : return(-1);
000b0 e3e05000 mvn r5, #0
000b4 ea000031 b |$L37041|
000b8 |$L37074|
; 147 : }
; 148 :
; 149 : DEBUGMSG(ZONE_BOOTPROG, (TEXT("B10\r\n")));
000b8 e59f00e4 ldr r0, [pc, #0xE4]
000bc eb000000 bl EdbgOutputDebugString
; 150 :
; 151 : // Read id info from IDE sector buffer
; 152 : for(cnt = 0 ; cnt < (sizeof(drv_id_hdr) / sizeof(USHORT)) ; cnt++)
000c0 e3a05000 mov r5, #0
000c4 e1a02005 mov r2, r5
000c8 e3a03101 mov r3, #1, 2
000cc |$L37080|
; 153 : *((USHORT *)(&hdr) + cnt) = READ_IDE_USHORT(IDE_DATA_REG);
000cc e28d0004 add r0, sp, #4
000d0 e1d310b0 ldrh r1, [r3]
000d4 e0800082 add r0, r0, r2, lsl #1
000d8 e1c010b0 strh r1, [r0]
000dc e2821001 add r1, r2, #1
000e0 e1a00801 mov r0, r1, lsl #16
000e4 e1a02820 mov r2, r0, lsr #16
000e8 e1a01802 mov r1, r2, lsl #16
000ec e1a02821 mov r2, r1, lsr #16
000f0 e3520040 cmp r2, #0x40
000f4 3afffff4 bcc |$L37080|
; 154 :
; 155 : // Read the remainder of the sector buffer and toss away...
; 156 : //
; 157 : while(READ_IDE_UCHAR(IDE_STAT_REG) & IDE_STATUS_DRQ)
000f8 e5d60000 ldrb r0, [r6]
000fc e3100008 tst r0, #8
00100 0a000003 beq |$L37088|
00104 |$L37087|
; 158 : {
; 159 : READ_IDE_USHORT(IDE_DATA_REG);
00104 e1d300b0 ldrh r0, [r3]
00108 e5d61000 ldrb r1, [r6]
0010c e3110008 tst r1, #8
00110 1afffffb bne |$L37087|
00114 |$L37088|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -