📄 atapiio.cod
字号:
; 159 : }
; 160 : break;
; 161 : }
; 162 : if ((int)dwTimeOut > 0) {
0061c e59d303c ldr r3, [sp, #0x3C]
00620 e3530000 cmp r3, #0
00624 da000007 ble |$L32027|
; 163 : StallExecution(dwPeriod);
00628 e59d1040 ldr r1, [sp, #0x40]
0062c e59d0034 ldr r0, [sp, #0x34]
00630 eb000000 bl |?StallExecution@CDisk@@QAAXK@Z|
; 164 : dwTimeOut -= dwPeriod;
00634 e59d203c ldr r2, [sp, #0x3C]
00638 e59d3040 ldr r3, [sp, #0x40]
0063c e0423003 sub r3, r2, r3
00640 e58d303c str r3, [sp, #0x3C]
; 165 : }
; 166 : else {
00644 ea000011 b |$L32028|
00648 |$L32027|
; 167 : DEBUGMSG(ZONE_ERROR, (TEXT(
; 168 : "Atapi!CDisk::WaitForDisc> timeout; bStatusType(%d); status(%02X)\r\n"
; 169 : ), bStatusType, bStatusRead));
00648 e59f3060 ldr r3, [pc, #0x60]
0064c e5933440 ldr r3, [r3, #0x440]
00650 e3130a02 tst r3, #2, 20
00654 0a000008 beq |$L32349|
00658 e5dd3000 ldrb r3, [sp]
0065c e1a02003 mov r2, r3
00660 e5dd3038 ldrb r3, [sp, #0x38]
00664 e1a01003 mov r1, r3
00668 e59f003c ldr r0, [pc, #0x3C]
0066c eb000000 bl NKDbgPrintfW
00670 e3a03001 mov r3, #1
00674 e58d3028 str r3, [sp, #0x28]
00678 ea000001 b |$L32350|
0067c |$L32349|
0067c e3a03000 mov r3, #0
00680 e58d3028 str r3, [sp, #0x28]
00684 |$L32350|
; 170 : return ERROR_GEN_FAILURE;
00684 e3a0301f mov r3, #0x1F
00688 e58d3004 str r3, [sp, #4]
0068c ea000002 b |$L31985|
00690 |$L32028|
; 171 : }
; 172 : }
00690 eaffff67 b |$L31989|
00694 |$L32025|
00694 |$L32020|
00694 |$L32015|
00694 |$L32010|
00694 |$L32005|
00694 |$L32000|
00694 |$ExitDone$31999|
; 173 : ExitDone:
; 174 : return ERROR_SUCCESS;
00694 e3a03000 mov r3, #0
00698 e58d3004 str r3, [sp, #4]
0069c |$L31985|
; 170 : return ERROR_GEN_FAILURE;
0069c e59d0004 ldr r0, [sp, #4]
; 175 : }
006a0 e28dd02c add sp, sp, #0x2C
006a4 e89d6000 ldmia sp, {sp, lr}
006a8 e12fff1e bx lr
006ac |$L32358|
006ac 00000000 DCD |??_C@_1IG@BEAHCCJI@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006b0 00000000 DCD |dpCurSettings|
006b4 00000000 DCD |??_C@_1FI@EMDNNADC@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006b8 00000000 DCD |??_C@_1FM@GICFJEOP@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006bc 00000000 DCD |??_C@_1FE@KDGCOFIA@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006c0 00000000 DCD |??_C@_1FI@IKJAFINI@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006c4 00000000 DCD |??_C@_1FO@FPPIPLP@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006c8 00000000 DCD |??_C@_1FG@MAJIHCDK@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@|
006cc |$M32355|
ENDP ; |?WaitForDisc@CDisk@@UAAHEKK@Z|, CDisk::WaitForDisc
EXPORT |??_C@_1IG@HOOEGBKE@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@| [ DATA ] ; `string'
EXPORT |?GetReason@CDisk@@QAAEXZ| ; CDisk::GetReason
EXPORT |?WaitForDRQ@CDisk@@UAAHXZ| ; CDisk::WaitForDRQ
00018 AREA |.pdata|, PDATA
|$T32368| DCD |$L32367|
DCD 0x40009404
00000 AREA |.rdata| { |??_C@_1IG@HOOEGBKE@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1IG@HOOEGBKE@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAW?$AAa?$AAi?$AAt?$AAF?$AAo?$AAr@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "C"
DCB 0x0, "D", 0x0, "i", 0x0, "s", 0x0, "k", 0x0, ":", 0x0, ":"
DCB 0x0, "W", 0x0, "a", 0x0, "i", 0x0, "t", 0x0, "F", 0x0, "o"
DCB 0x0, "r", 0x0, "D", 0x0, "R", 0x0, "Q", 0x0, ">", 0x0, " "
DCB 0x0, "s", 0x0, "t", 0x0, "a", 0x0, "t", 0x0, "u", 0x0, "s"
DCB 0x0, "(", 0x0, "%", 0x0, "0", 0x0, "2", 0x0, "X", 0x0, ")"
DCB 0x0, ",", 0x0, " ", 0x0, "e", 0x0, "r", 0x0, "r", 0x0, "o"
DCB 0x0, "r", 0x0, "(", 0x0, "%", 0x0, "0", 0x0, "2", 0x0, "X"
DCB 0x0, ")", 0x0, ",", 0x0, " ", 0x0, "r", 0x0, "e", 0x0, "a"
DCB 0x0, "s", 0x0, "o", 0x0, "n", 0x0, "(", 0x0, "%", 0x0, "0"
DCB 0x0, "2", 0x0, "X", 0x0, ")", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0
DCB 0x0 ; `string'
; Function compile flags: /Odt
006cc AREA |.text|, CODE, ARM
006cc |?WaitForDRQ@CDisk@@UAAHXZ| PROC ; CDisk::WaitForDRQ
; 188 : {
006cc |$L32367|
006cc e1a0c00d mov r12, sp
006d0 e92d0001 stmdb sp!, {r0}
006d4 e92d5000 stmdb sp!, {r12, lr}
006d8 e24dd02c sub sp, sp, #0x2C
006dc |$M32365|
; 189 : DWORD i,j;
; 190 : BYTE bStatus = 0;
006dc e3a03000 mov r3, #0
006e0 e5cd3010 strb r3, [sp, #0x10]
; 191 :
; 192 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_WAITDRQ, NULL, 0, 0, CELZONE_ALWAYSON, 0, FALSE);
006e4 e59f3228 ldr r3, [pc, #0x228]
006e8 e5933440 ldr r3, [r3, #0x440]
006ec e3130902 tst r3, #2, 18
006f0 0a00000d beq |$L32037|
006f4 e3a03000 mov r3, #0
006f8 e58d300c str r3, [sp, #0xC]
006fc e3a03000 mov r3, #0
00700 e58d3008 str r3, [sp, #8]
00704 e3a03101 mov r3, #1, 2
00708 e58d3004 str r3, [sp, #4]
0070c e3a03000 mov r3, #0
00710 e58d3000 str r3, [sp]
00714 e3a03000 mov r3, #0
00718 e3a02000 mov r2, #0
0071c e3a01d86 mov r1, #0x86, 26
00720 e3811007 orr r1, r1, #7
00724 e3a00001 mov r0, #1
00728 eb000000 bl CeLogData
0072c |$L32037|
; 193 :
; 194 : for (i = 0; i < m_dwWaitCheckIter; i++) {
0072c e3a03000 mov r3, #0
00730 e58d3014 str r3, [sp, #0x14]
00734 ea000002 b |$L32038|
00738 |$L32039|
00738 e59d3014 ldr r3, [sp, #0x14]
0073c e2833001 add r3, r3, #1
00740 e58d3014 str r3, [sp, #0x14]
00744 |$L32038|
00744 e59d3034 ldr r3, [sp, #0x34]
00748 e2833c06 add r3, r3, #6, 24
0074c e28330bc add r3, r3, #0xBC
00750 e59d2014 ldr r2, [sp, #0x14]
00754 e5933000 ldr r3, [r3]
00758 e1520003 cmp r2, r3
0075c 2a00004c bcs |$L32040|
; 195 : for (j = 0; j < m_dwWaitSampleTimes; j++) {
00760 e3a03000 mov r3, #0
00764 e58d3018 str r3, [sp, #0x18]
00768 ea000002 b |$L32041|
0076c |$L32042|
0076c e59d3018 ldr r3, [sp, #0x18]
00770 e2833001 add r3, r3, #1
00774 e58d3018 str r3, [sp, #0x18]
00778 |$L32041|
00778 e59d3034 ldr r3, [sp, #0x34]
0077c e2833d1b add r3, r3, #0x1B, 26
00780 e59d2018 ldr r2, [sp, #0x18]
00784 e5933000 ldr r3, [r3]
00788 e1520003 cmp r2, r3
0078c 2a000028 bcs |$L32043|
; 196 : bStatus = GetAltStatus() & (ATA_STATUS_BUSY|ATA_STATUS_DATA_REQ);
00790 e59d0034 ldr r0, [sp, #0x34]
00794 eb000000 bl |?GetAltStatus@CDisk@@QAAEXZ|
00798 e5cd0020 strb r0, [sp, #0x20]
0079c e5dd3020 ldrb r3, [sp, #0x20]
007a0 e2033088 and r3, r3, #0x88
007a4 e20330ff and r3, r3, #0xFF
007a8 e5cd3010 strb r3, [sp, #0x10]
; 197 : if ((bStatus & ATA_STATUS_BUSY) == 0) {
007ac e5dd3010 ldrb r3, [sp, #0x10]
007b0 e3130080 tst r3, #0x80
007b4 1a000017 bne |$L32044|
; 198 : if (bStatus & ATA_STATUS_DATA_REQ){
007b8 e5dd3010 ldrb r3, [sp, #0x10]
007bc e3130008 tst r3, #8
007c0 0a000014 beq |$L32045|
; 199 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);
007c4 e59f3148 ldr r3, [pc, #0x148]
007c8 e5933440 ldr r3, [r3, #0x440]
007cc e3130902 tst r3, #2, 18
007d0 0a00000d beq |$L32046|
007d4 e3a03000 mov r3, #0
007d8 e58d300c str r3, [sp, #0xC]
007dc e3a03000 mov r3, #0
007e0 e58d3008 str r3, [sp, #8]
007e4 e3a03101 mov r3, #1, 2
007e8 e58d3004 str r3, [sp, #4]
007ec e3a03000 mov r3, #0
007f0 e58d3000 str r3, [sp]
007f4 e3a03001 mov r3, #1
007f8 e28d2010 add r2, sp, #0x10
007fc e3a01d86 mov r1, #0x86, 26
00800 e3811008 orr r1, r1, #8
00804 e3a00001 mov r0, #1
00808 eb000000 bl CeLogData
0080c |$L32046|
; 200 : return TRUE;
0080c e3a03001 mov r3, #1
00810 e58d301c str r3, [sp, #0x1C]
00814 ea00003a b |$L32033|
00818 |$L32045|
00818 |$L32044|
; 201 : }
; 202 : }
; 203 : StallExecution(m_dwWaitStallTime);
00818 e59d3034 ldr r3, [sp, #0x34]
0081c e2833c06 add r3, r3, #6, 24
00820 e28330c4 add r3, r3, #0xC4
00824 e5931000 ldr r1, [r3]
00828 e59d0034 ldr r0, [sp, #0x34]
0082c eb000000 bl |?StallExecution@CDisk@@QAAXK@Z|
; 204 : }
00830 eaffffcd b |$L32042|
00834 |$L32043|
; 205 : DEBUGMSG(ZONE_WARNING, (TEXT(
; 206 : "Atapi!CDisk::WaitForDRQ> status(%02X), error(%02X), reason(%02X)\r\n"
; 207 : ), GetAltStatus(), GetError(), GetReason()));
00834 e59f30d8 ldr r3, [pc, #0xD8]
00838 e5933440 ldr r3, [r3, #0x440]
0083c e3130a01 tst r3, #1, 20
00840 0a000010 beq |$L32360|
00844 e59d0034 ldr r0, [sp, #0x34]
00848 eb000000 bl |?GetReason@CDisk@@QAAEXZ|
0084c e5cd0021 strb r0, [sp, #0x21]
00850 e59d0034 ldr r0, [sp, #0x34]
00854 eb000000 bl |?GetError@CDisk@@QAAEXZ|
00858 e5cd0022 strb r0, [sp, #0x22]
0085c e59d0034 ldr r0, [sp, #0x34]
00860 eb000000 bl |?GetAltStatus@CDisk@@QAAEXZ|
00864 e5cd0023 strb r0, [sp, #0x23]
00868 e5dd3021 ldrb r3, [sp, #0x21]
0086c e5dd2022 ldrb r2, [sp, #0x22]
00870 e5dd1023 ldrb r1, [sp, #0x23]
00874 e59f009c ldr r0, [pc, #0x9C]
00878 eb000000 bl NKDbgPrintfW
0087c e3a03001 mov r3, #1
00880 e58d3024 str r3, [sp, #0x24]
00884 ea000001 b |$L32361|
00888 |$L32360|
00888 e3a03000 mov r3, #0
0088c e58d3024 str r3, [sp, #0x24]
00890 |$L32361|
; 208 : }
00890 eaffffa8 b |$L32039|
00894 |$L32040|
; 209 :
; 210 : if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);
00894 e59f3078 ldr r3, [pc, #0x78]
00898 e5933440 ldr r3, [r3, #0x440]
0089c e3130902 tst r3, #2, 18
008a0 0a00000d beq |$L32049|
008a4 e3a03000 mov r3, #0
008a8 e58d300c str r3, [sp, #0xC]
008ac e3a03000 mov r3, #0
008b0 e58d3008 str r3, [sp, #8]
008b4 e3a03101 mov r3, #1, 2
008b8 e58d3004 str r3, [sp, #4]
008bc e3a03000 mov r3, #0
008c0 e58d3000 str r3, [sp]
008c4 e3a03001 mov r3, #1
008c8 e28d2010 add r2, sp, #0x10
008cc e3a01d86 mov r1, #0x86, 26
008d0 e3811008 orr r1, r1, #8
008d4 e3a00001 mov r0, #1
008d8 eb000000 bl CeLogData
008dc |$L32049|
; 211 :
; 212 : return (bStatus == ATA_STATUS_DATA_REQ);
008dc e5dd3010 ldrb r3, [sp, #0x10]
008e0 e3530008 cmp r3, #8
008e4 1a000002 bne |$L32362|
008e8 e3a03001 m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -