📄 ide.cod
字号:
00014 e5cd3000 strb r3, [sp]
; 292 :
; 293 : if (dwPeriod == 0)
00018 e59d3020 ldr r3, [sp, #0x20]
0001c e3530000 cmp r3, #0
00020 1a000001 bne |$L38894|
; 294 : dwPeriod = dwTimeOut;
00024 e59d301c ldr r3, [sp, #0x1C]
00028 e58d3020 str r3, [sp, #0x20]
0002c |$L38894|
0002c |$L38896|
; 295 :
; 296 : while( TRUE)
; 297 : {
; 298 : bStatusRead = GetAltStatus();
0002c eb000000 bl GetAltStatus
00030 e5cd0008 strb r0, [sp, #8]
00034 e5dd3008 ldrb r3, [sp, #8]
00038 e5cd3000 strb r3, [sp]
; 299 : switch (bStatusType) {
0003c e5dd3018 ldrb r3, [sp, #0x18]
00040 e58d300c str r3, [sp, #0xC]
00044 e59d300c ldr r3, [sp, #0xC]
00048 e3530001 cmp r3, #1
0004c 0a00000f beq |$L38902|
00050 e59d300c ldr r3, [sp, #0xC]
00054 e3530002 cmp r3, #2
00058 0a000011 beq |$L38905|
0005c e59d300c ldr r3, [sp, #0xC]
00060 e3530003 cmp r3, #3
00064 0a000013 beq |$L38907|
00068 e59d300c ldr r3, [sp, #0xC]
0006c e3530004 cmp r3, #4
00070 0a000015 beq |$L38909|
00074 e59d300c ldr r3, [sp, #0xC]
00078 e3530005 cmp r3, #5
0007c 0a000017 beq |$L38911|
00080 e59d300c ldr r3, [sp, #0xC]
00084 e3530006 cmp r3, #6
00088 0a000019 beq |$L38913|
0008c ea00001c b |$L38899|
00090 |$L38902|
; 300 : case WAIT_TYPE_BUSY:
; 301 : if (bStatusRead & ATA_STATUS_BUSY)
00090 e5dd3000 ldrb r3, [sp]
00094 e3130080 tst r3, #0x80
00098 0a000000 beq |$L38903|
; 302 : {
; 303 : // DEBUGMSG(ZONE_IO, (TEXT("ATAPI:WaitForDisc - WAIT_TYPE_BUSY\r\n")));
; 304 : goto ExitDone;
0009c ea000026 b |$ExitDone$38904|
000a0 |$L38903|
; 305 : }
; 306 : break;
000a0 ea000017 b |$L38899|
000a4 |$L38905|
; 307 :
; 308 : case WAIT_TYPE_NOT_BUSY:
; 309 : if (!(bStatusRead & ATA_STATUS_BUSY))
000a4 e5dd3000 ldrb r3, [sp]
000a8 e3130080 tst r3, #0x80
000ac 1a000000 bne |$L38906|
; 310 : {
; 311 : // DEBUGMSG(ZONE_IO, (TEXT("ATAPI:WaitForDisc - WAIT_TYPE_NOT_BUSY\r\n")));
; 312 : goto ExitDone;
000b0 ea000021 b |$ExitDone$38904|
000b4 |$L38906|
; 313 : }
; 314 : break;
000b4 ea000012 b |$L38899|
000b8 |$L38907|
; 315 :
; 316 : case WAIT_TYPE_READY:
; 317 : if (bStatusRead & ATA_STATUS_READY)
000b8 e5dd3000 ldrb r3, [sp]
000bc e3130040 tst r3, #0x40
000c0 0a000000 beq |$L38908|
; 318 : {
; 319 : // DEBUGMSG(ZONE_IO, (TEXT("ATAPI:WaitForDisc - WAIT_TYPE_READY\r\n")));
; 320 : // DelayInuSec(100);
; 321 : goto ExitDone;
000c4 ea00001c b |$ExitDone$38904|
000c8 |$L38908|
; 322 : }
; 323 : break;
000c8 ea00000d b |$L38899|
000cc |$L38909|
; 324 :
; 325 : case WAIT_TYPE_DRQ:
; 326 : if (bStatusRead & ATA_STATUS_DATA_REQ)
000cc e5dd3000 ldrb r3, [sp]
000d0 e3130008 tst r3, #8
000d4 0a000000 beq |$L38910|
; 327 : {
; 328 : // DEBUGMSG(ZONE_IO, (TEXT("ATAPI:WaitForDisc - WAIT_TYPE_DRQ\r\n")));
; 329 : goto ExitDone;
000d8 ea000017 b |$ExitDone$38904|
000dc |$L38910|
; 330 : }
; 331 : break;
000dc ea000008 b |$L38899|
000e0 |$L38911|
; 332 :
; 333 : case WAIT_TYPE_NOT_DRQ:
; 334 : if (!(bStatusRead & ATA_STATUS_DATA_REQ))
000e0 e5dd3000 ldrb r3, [sp]
000e4 e3130008 tst r3, #8
000e8 1a000000 bne |$L38912|
; 335 : {
; 336 : // DEBUGMSG(ZONE_IO, (TEXT("ATAPI:WaitForDisc - WAIT_TYPE_NOT_DRQ\r\n")));
; 337 : goto ExitDone;
000ec ea000012 b |$ExitDone$38904|
000f0 |$L38912|
; 338 : }
; 339 : break;
000f0 ea000003 b |$L38899|
000f4 |$L38913|
; 340 :
; 341 : case WAIT_TYPE_ERROR:
; 342 : if (bStatusRead & ATA_STATUS_ERROR)
000f4 e5dd3000 ldrb r3, [sp]
000f8 e3130001 tst r3, #1
000fc 0a000000 beq |$L38914|
; 343 : {
; 344 : // DEBUGMSG(ZONE_IO, (TEXT("ATAPI:WaitForDisc - WAIT_TYPE_ERROR\r\n")));
; 345 : goto ExitDone;
00100 ea00000d b |$ExitDone$38904|
00104 |$L38914|
00104 |$L38899|
; 346 : }
; 347 : break;
; 348 : }
; 349 : if ((int)dwTimeOut > 0)
00104 e59d301c ldr r3, [sp, #0x1C]
00108 e3530000 cmp r3, #0
0010c da000006 ble |$L38916|
; 350 : {
; 351 : DelayInuSec(dwPeriod);
00110 e59d0020 ldr r0, [sp, #0x20]
00114 eb000000 bl DelayInuSec
; 352 : dwTimeOut -= dwPeriod;
00118 e59d201c ldr r2, [sp, #0x1C]
0011c e59d3020 ldr r3, [sp, #0x20]
00120 e0423003 sub r3, r2, r3
00124 e58d301c str r3, [sp, #0x1C]
; 353 : }
; 354 : else
00128 ea000002 b |$L38917|
0012c |$L38916|
; 355 : {
; 356 : // DEBUGMSG(ZONE_ERROR, (TEXT("ATAPI:WaitForDisc - TimeOut !!! WaitType = %ld Status=%02X\r\n"), bStatusType, bStatusRead));
; 357 : return ERROR_GEN_FAILURE;
0012c e3a0301f mov r3, #0x1F
00130 e58d3004 str r3, [sp, #4]
00134 ea000002 b |$L38892|
00138 |$L38917|
; 358 : }
; 359 : }
00138 eaffffbb b |$L38896|
0013c |$ExitDone$38904|
; 360 :
; 361 : ExitDone:
; 362 : return ERROR_SUCCESS;
0013c e3a03000 mov r3, #0
00140 e58d3004 str r3, [sp, #4]
00144 |$L38892|
; 355 : {
; 356 : // DEBUGMSG(ZONE_ERROR, (TEXT("ATAPI:WaitForDisc - TimeOut !!! WaitType = %ld Status=%02X\r\n"), bStatusType, bStatusRead));
; 357 : return ERROR_GEN_FAILURE;
00144 e59d0004 ldr r0, [sp, #4]
; 363 : }
00148 e28dd010 add sp, sp, #0x10
0014c e89d6000 ldmia sp, {sp, lr}
00150 e12fff1e bx lr
00154 |$M39457|
ENDP ; |WaitForDisc_P|
EXPORT |WaitForDisc|
00000 AREA |.text| { |WaitForDisc| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$WaitForDisc|, PDATA, SELECTION=5, ASSOC=|.text| { |WaitForDisc| } ; comdat associative
|$T39467| DCD |$L39466|
DCD 0x40001104
; Function compile flags: /Ods
00000 AREA |.text| { |WaitForDisc| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |WaitForDisc| PROC
; 365 : {
00000 |$L39466|
00000 e1a0c00d mov r12, sp
00004 e92d0003 stmdb sp!, {r0, r1}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd00c sub sp, sp, #0xC
00010 |$M39464|
; 366 : DWORD dwPeriod =0;
00010 e3a03000 mov r3, #0
00014 e58d3000 str r3, [sp]
; 367 : return WaitForDisc_P(bStatusType, dwTimeOut, dwPeriod);
00018 e59d2000 ldr r2, [sp]
0001c e59d1018 ldr r1, [sp, #0x18]
00020 e5dd0014 ldrb r0, [sp, #0x14]
00024 eb000000 bl WaitForDisc_P
00028 e58d0008 str r0, [sp, #8]
0002c e59d3008 ldr r3, [sp, #8]
00030 e58d3004 str r3, [sp, #4]
00034 e59d0004 ldr r0, [sp, #4]
; 368 : }
00038 e28dd00c add sp, sp, #0xC
0003c e89d6000 ldmia sp, {sp, lr}
00040 e12fff1e bx lr
00044 |$M39465|
ENDP ; |WaitForDisc|
EXPORT |ide_enable|
EXPORT |??_C@_0BI@DOMOKOHO@Enable?5IDE?5controller?$AN?6?$AA@| [ DATA ] ; `string'
IMPORT |EdbgOutputDebugString|
00000 AREA |.text| { |ide_enable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$ide_enable|, PDATA, SELECTION=5, ASSOC=|.text| { |ide_enable| } ; comdat associative
|$T39474| DCD |$L39473|
DCD 0x40001a01
00000 AREA |.rdata| { |??_C@_0BI@DOMOKOHO@Enable?5IDE?5controller?$AN?6?$AA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0BI@DOMOKOHO@Enable?5IDE?5controller?$AN?6?$AA@| DCB "Enable IDE c"
DCB "ontroller", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |ide_enable| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |ide_enable| PROC
; 370 : {
00000 |$L39473|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M39471|
; 371 :
; 372 : SERPRINT("Enable IDE controller\r\n");
00004 e59f0058 ldr r0, [pc, #0x58]
00008 eb000000 bl EdbgOutputDebugString
; 373 :
; 374 : *IDE_CFG = 0;
0000c e59f204c ldr r2, [pc, #0x4C]
00010 e3a03000 mov r3, #0
00014 e5823000 str r3, [r2]
; 375 :
; 376 : //
; 377 : // Initialize the IDE interface to PIO mode 4.
; 378 : //
; 379 : *IDE_CFG = IDE_CFG_IDEEN | IDE_CFG_PIOEN | IDE_CFG_PIO4 | (1 <<IDE_CFG_WST_SHIFT);
00018 e59f2040 ldr r2, [pc, #0x40]
0001c e3a03d05 mov r3, #5, 26
00020 e3833003 orr r3, r3, #3
00024 e5823000 str r3, [r2]
; 380 :
; 381 : *IDE_CTRL = IDE_CTRL_DIOR | IDE_CTRL_DIOW | CSDA_DATA_REG;
00028 e3a03102 mov r3, #2, 2
0002c e383280a orr r2, r3, #0xA, 16
00030 e3a03062 mov r3, #0x62
00034 e5823000 str r3, [r2]
; 382 :
; 383 :
; 384 : //
; 385 : // Make sure that MDMA and UDMA are disabled.
; 386 : //
; 387 : *IDE_MDMAOP = 0;
00038 e59f201c ldr r2, [pc, #0x1C]
0003c e3a03000 mov r3, #0
00040 e5823000 str r3, [r2]
; 388 : *IDE_UDMAOP = 0;
00044 e59f200c ldr r2, [pc, #0xC]
00048 e3a03000 mov r3, #0
0004c e5823000 str r3, [r2]
; 389 :
; 390 : // SelectDevice();
; 391 : // WriteDriveController( ATA_CTRL_ENABLE_INTR);
; 392 : // SelectDevice();
; 393 : // WriteAltDriveController(ATA_CTRL_ENABLE_INTR);
; 394 : //
; 395 : }
00050 e49de004 ldr lr, [sp], #4
00054 e12fff1e bx lr
00058 |$L39476|
00058 800a000c DCD 0x800a000c
0005c 800a0008 DCD 0x800a0008
00060 800a0004 DCD 0x800a0004
00064 00000000 DCD |??_C@_0BI@DOMOKOHO@Enable?5IDE?5controller?$AN?6?$AA@|
00068 |$M39472|
ENDP ; |ide_enable|
EXPORT |??_C@_0CP@GPAFOMID@ATAPI?3?3ResetController?5Drive?52?5s@| [ DATA ] ; `string'
EXPORT |??_C@_0CK@FFOACHGO@ATAPI?3?3ResetController?5no?5second@| [ DATA ] ; `string'
EXPORT |??_C@_0EC@LGMMBIF@ATAPIPCI?3AtaResetController?5no?5r@| [ DATA ] ; `string'
EXPORT |ide_reset|
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
|$T39483| DCD |$L39482|
DCD 0x40005b02
00000 AREA |.rdata| { |??_C@_0EC@LGMMBIF@ATAPIPCI?3AtaResetController?5no?5r@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0EC@LGMMBIF@ATAPIPCI?3AtaResetController?5no?5r@| DCB "ATAPIPCI:At"
DCB "aResetController no response after %d reset attempts", 0xd
DCB 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CK@FFOACHGO@ATAPI?3?3ResetController?5no?5second@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CK@FFOACHGO@ATAPI?3?3ResetController?5no?5second@| DCB "ATAPI::Re"
DCB "setController no second device", 0xd, 0xa, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_0CP@GPAFOMID@ATAPI?3?3ResetController?5Drive?52?5s@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_0CP@GPAFOMID@ATAPI?3?3ResetController?5Drive?52?5s@| DCB "ATAPI::R"
DCB "esetController Drive 2 status = 0x%X", 0xd, 0xa, 0x0 ; `string'
; Function compile flags: /Ods
00000 AREA |.text| { |ide_reset| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |ide_reset| PROC
; 397 : {
00000 |$L39482|
00000 e52de004 str lr, [sp, #-4]!
00004 e24dd010 sub sp, sp, #0x10
00008 |$M39480|
; 398 : DWORD dwAttempts;
; 399 : BYTE bStatus;
; 400 :
; 401 :
; 402 : // if( m_BootDeviceType == BOOT_FROM_PCMCIA)
; 403 : // {
; 404 : // DEBUGMSG(ZONE_INFO, (TEXT("ide_reset: entered.\r\n")));
; 405 : // WAIT_IDE_BUSY;
; 406 : // WRITE_IDE_UCHAR(IDE_ALT_CTRL_REG,IDE_ALT_CTRL_SRST | IDE_ALT_CTRL_DSBL_INTR);
; 407 : // DelayInMsec(4);
; 408 : // WRITE_IDE_UCHAR(IDE_ALT_CTRL_REG,IDE_ALT_CTRL_DSBL_INTR);
; 409 : // WAIT_IDE_NOT_DRDY;
; 410 : // WAIT_IDE_BUSY;
; 411 : // if(IS_IDE_ERROR)
; 412 : // {
; 413 : // DEBUGMSG(1, (TEXT("WARNING: Drive reset failed.\r\n")));
; 414 : // }
; 415 : //
; 416 : // DEBUGMSG(ZONE_INFO, (TEXT("ide_reset: done.\r\n")));
; 417 : // return 0;
; 418 : // }
; 419 : //
; 420 : // WriteAltDriveController( 0x8);
; 421 : // Read the status first
; 422 : bStatus = GetBaseStatus();
00008 eb000000 bl GetBaseStatus
0000c e5cd000c strb r0, [sp, #0xC]
00010 e5dd300c ldrb r3, [sp, #0xC]
00014 e5cd3004 strb r3, [sp, #4]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -