📄 diskio.cod
字号:
0014c e2800001 add r0, r0, #1
00150 e1a010a0 mov r1, r0, lsr #1
00154 e50b1030 str r1, [r11, #-0x30]
; 341 :
; 342 : if (i >= 256) i -=256;
00158 e3510c01 cmp r1, #1, 24
0015c 22410c01 subcs r0, r1, #1, 24
00160 250b0030 strcs r0, [r11, #-0x30]
; 343 : else
; 344 : i=0;
00164 350b8030 strcc r8, [r11, #-0x30]
; 345 :
; 346 : pBuf16 += 256;
00168 e51b0048 ldr r0, [r11, #-0x48]
0016c e2800c02 add r0, r0, #2, 24
00170 e50b0048 str r0, [r11, #-0x48]
00174 e50b0044 str r0, [r11, #-0x44]
00178 |$L41601|
; 350 : error = GetDiskStateError(pDisk->d_DiskCardState);
00178 e51b1050 ldr r1, [r11, #-0x50]
0017c ea000010 b |$L41602|
00180 |$L41597|
00180 e59b9000 ldr r9, [r11]
00184 e599001c ldr r0, [r9, #0x1C]
00188 eb000000 bl GetDiskStateError
0018c e1a0a000 mov r10, r0
00190 e3a0501d mov r5, #0x1D
00194 e3a08000 mov r8, #0
00198 e51b005c ldr r0, [r11, #-0x5C]
0019c e50b0060 str r0, [r11, #-0x60]
001a0 e51b2054 ldr r2, [r11, #-0x54]
001a4 e50b2058 str r2, [r11, #-0x58]
001a8 e51b104c ldr r1, [r11, #-0x4C]
001ac e50b1050 str r1, [r11, #-0x50]
001b0 e51b4034 ldr r4, [r11, #-0x34]
001b4 e51b0044 ldr r0, [r11, #-0x44]
001b8 e50b0048 str r0, [r11, #-0x48]
001bc e51b7040 ldr r7, [r11, #-0x40]
001c0 e51b603c ldr r6, [r11, #-0x3C]
001c4 |$L41602|
; 351 : }
; 352 : if (error != ERROR_SUCCESS) {
001c4 e35a0000 cmp r10, #0
; 353 : return error;
001c8 1a000022 bne |$L41277|
; 354 : }
; 355 :
; 356 : if (bytes_this_int == 0) {
001cc e3540000 cmp r4, #0
001d0 1a000007 bne |$L41306|
; 357 : if (pDisk->d_DiskCardState != STATE_OPENED) {
001d4 e599001c ldr r0, [r9, #0x1C]
001d8 e3500003 cmp r0, #3
001dc 0a000002 beq |$L41305|
001e0 |$L41624|
; 358 : return GetDiskStateError(pDisk->d_DiskCardState);
001e0 eb000000 bl GetDiskStateError
001e4 e1a0a000 mov r10, r0
001e8 ea00001a b |$L41277|
001ec |$L41305|
; 359 : }
; 360 : if (sectno < endsect) {
001ec e1570006 cmp r7, r6
001f0 3affffa5 bcc |$L41623|
001f4 |$L41306|
; 361 : continue;
; 362 : }
; 363 : }
; 364 :
; 365 :
; 366 :
; 367 :
; 368 : num_sg--;
001f4 e51b0060 ldr r0, [r11, #-0x60]
001f8 e2500001 subs r0, r0, #1
001fc e50b0060 str r0, [r11, #-0x60]
00200 e50b005c str r0, [r11, #-0x5C]
; 369 : if (num_sg == 0) {
00204 1a000003 bne |$L41307|
00208 |$L41291|
; 379 :
; 380 :
; 381 :
; 382 :
; 383 :
; 384 :
; 385 : OS_WAIT(50);
00208 e3a00032 mov r0, #0x32
0020c eb000000 bl platform_delayms
; 386 :
; 387 : return 0;
00210 e1a0a008 mov r10, r8
00214 ea00000f b |$L41277|
00218 |$L41307|
; 370 : break;
; 371 : }
; 372 : pSg++;
; 373 : pBuf16 = (PUSHORT) MapPtrToProcess((LPVOID)pSg->sb_buf, GetCallerProcess());
00218 eb000000 bl GetCallerProcess
0021c e1a01000 mov r1, r0
00220 e51b2058 ldr r2, [r11, #-0x58]
00224 e5b20008 ldr r0, [r2, #8]!
00228 e50b2058 str r2, [r11, #-0x58]
0022c e50b2054 str r2, [r11, #-0x54]
00230 eb000000 bl MapPtrToProcess
00234 e50b0048 str r0, [r11, #-0x48]
00238 e50b0044 str r0, [r11, #-0x44]
; 374 : bytes_this_sg = pSg->sb_len;
0023c e51b2058 ldr r2, [r11, #-0x58]
00240 e5921004 ldr r1, [r2, #4]
00244 e50b1050 str r1, [r11, #-0x50]
00248 e50b104c str r1, [r11, #-0x4C]
; 375 : if (bytes_this_int) {
0024c e3540000 cmp r4, #0
00250 1affffb5 bne |$aw_continue_sector$41298|
; 376 : goto aw_continue_sector;
; 377 : }
; 378 : }
00254 eaffff8c b |$L41623|
00258 |$L41277|
; 328 : return GetDiskStateError(pDisk->d_DiskCardState);
00258 e1a0000a mov r0, r10
; 388 : }
0025c e91b6ff0 ldmdb r11, {r4 - r11, sp, lr}
00260 e12fff1e bx lr
ENDP ; |MMCWRITE|
00264 |$L41599|
00264 |$L41626|
00264 |$L41596|
; 347 :
; 348 : } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
; 349 : EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
00264 e5901000 ldr r1, [r0]
00268 e5912000 ldr r2, [r1]
0026c e3520117 cmp r2, #0x17, 2
00270 e3a00001 mov r0, #1
00274 13a00000 movne r0, #0
00278 |$L41598|
00278 e1a0f00e mov pc, lr
0027c |$L41592|
0027c |$L41629|
0027c |$L41589|
; 321 : #endif
; 322 :
; 323 : } except (GetExceptionCode() == STATUS_ACCESS_VIOLATION ?
; 324 : EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
0027c e5901000 ldr r1, [r0]
00280 e5912000 ldr r2, [r1]
00284 e3520117 cmp r2, #0x17, 2
00288 e3a00001 mov r0, #1
0028c 13a00000 movne r0, #0
00290 |$L41591|
00290 e1a0f00e mov pc, lr
00294 |$L41631|
EXPORT |DoDiskIO|
EXPORT |??_C@_1GA@LHAD@?$AAM?$AAM?$AAC?$AAD?$AAI?$AAS?$AAK?$AA?3?$AAD?$AAo?$AAD?$AAi?$AAs?$AAk?$AAI?$AAO?$AA?5?$AA?9?$AA?5?$AAC@| [ DATA ] ; `string'
00000 AREA |.text| { |DoDiskIO| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$DoDiskIO|, PDATA, SELECTION=5, ASSOC=|.text| { |DoDiskIO| } ; comdat associative
|$T41647| DCD |DoDiskIO|
DCD 0x40003a01
00000 AREA |.rdata| { |??_C@_1GA@LHAD@?$AAM?$AAM?$AAC?$AAD?$AAI?$AAS?$AAK?$AA?3?$AAD?$AAo?$AAD?$AAi?$AAs?$AAk?$AAI?$AAO?$AA?5?$AA?9?$AA?5?$AAC@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1GA@LHAD@?$AAM?$AAM?$AAC?$AAD?$AAI?$AAS?$AAK?$AA?3?$AAD?$AAo?$AAD?$AAi?$AAs?$AAk?$AAI?$AAO?$AA?5?$AA?9?$AA?5?$AAC@| DCB "M"
DCB 0x0, "M", 0x0, "C", 0x0, "D", 0x0, "I", 0x0, "S", 0x0, "K"
DCB 0x0, ":", 0x0, "D", 0x0, "o", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, "I", 0x0, "O", 0x0, " ", 0x0, "-", 0x0, " "
DCB 0x0, "C", 0x0, "F", 0x0, " ", 0x0, "C", 0x0, "a", 0x0, "r"
DCB 0x0, "d", 0x0, " ", 0x0, "n", 0x0, "o", 0x0, " ", 0x0, "l"
DCB 0x0, "o", 0x0, "n", 0x0, "g", 0x0, "e", 0x0, "r", 0x0, " "
DCB 0x0, "p", 0x0, "r", 0x0, "e", 0x0, "s", 0x0, "e", 0x0, "n"
DCB 0x0, "t", 0x0, "!", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |DoDiskIO| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |DoDiskIO| PROC
; 401 : {
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M41645|
00004 e1a06000 mov r6, r0
00008 e1a05001 mov r5, r1
0000c e1a07002 mov r7, r2
; 402 : DWORD status;
; 403 :
; 404 : DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:DoDiskIO entered\r\n")));
; 405 :
; 406 :
; 407 : pSgr->sr_status = ERROR_IO_PENDING;
00010 e3a00ff9 mov r0, #0xF9, 30
00014 e3800001 orr r0, r0, #1
00018 e587000c str r0, [r7, #0xC]
; 408 :
; 409 : if (pSgr->sr_num_sg > MAX_SG_BUF) {
0001c e5970008 ldr r0, [r7, #8]
00020 e3500008 cmp r0, #8
; 410 : status = ERROR_INVALID_PARAMETER;
00024 83a05057 movhi r5, #0x57
00028 8a000028 bhi |$ddi_exit$41321|
; 411 : goto ddi_exit;
; 412 : }
; 413 :
; 414 : if (pDisk->d_DiskCardState != STATE_OPENED) {
0002c e596001c ldr r0, [r6, #0x1C]
00030 e3500003 cmp r0, #3
00034 0a000002 beq |$L41322|
; 415 : status = GetDiskStateError(pDisk->d_DiskCardState);
00038 eb000000 bl GetDiskStateError
0003c e1a05000 mov r5, r0
; 416 : goto ddi_exit;
00040 ea000022 b |$ddi_exit$41321|
00044 |$L41322|
; 417 : }
; 418 :
; 419 :
; 420 : EnterCriticalSection(&(pDisk->d_DiskCardCrit));
00044 e2864004 add r4, r6, #4
00048 e1a00004 mov r0, r4
0004c eb000000 bl EnterCriticalSection
; 421 :
; 422 : if (pDisk->d_DiskCardState != STATE_OPENED) {
00050 e596001c ldr r0, [r6, #0x1C]
00054 e3500003 cmp r0, #3
00058 0a000001 beq |$L41323|
; 423 : status = GetDiskStateError(pDisk->d_DiskCardState);
0005c eb000000 bl GetDiskStateError
; 424 : goto ddi_leave;
00060 ea000017 b |$L41644|
00064 |$L41323|
; 425 : }
; 426 :
; 427 : if (!IsCardInserted(pDisk)) {
00064 e1a00006 mov r0, r6
00068 eb000000 bl IsCardInserted
0006c e31000ff tst r0, #0xFF
00070 1a000007 bne |$L41325|
; 428 : RETAILMSG(1,
; 429 : (TEXT("MMCDISK:DoDiskIO - CF Card no longer present!\r\n")));
00074 e59f0068 ldr r0, [pc, #0x68]
00078 eb000000 bl NKDbgPrintfW
; 430 : if (pDisk->d_DiskCardState != STATE_DEAD) {
0007c e596301c ldr r3, [r6, #0x1C]
; 431 : pDisk->d_DiskCardState = STATE_REMOVED;
; 432 : }
; 433 : status = DISK_REMOVED_ERROR;
00080 e3a05014 mov r5, #0x14
00084 e3530004 cmp r3, #4
00088 13a00005 movne r0, #5
0008c 1586001c strne r0, [r6, #0x1C]
; 434 : goto ddi_leave;
00090 ea00000c b |$ddi_leave$41324|
00094 |$L41325|
; 435 : }
; 436 :
; 437 :
; 438 :
; 439 :
; 440 :
; 441 : if ((Opcode == DISK_IOCTL_READ) || (Opcode == IOCTL_DISK_READ)){
00094 e3550002 cmp r5, #2
00098 0a000006 beq |$L41329|
0009c e59f003c ldr r0, [pc, #0x3C]
000a0 e1550000 cmp r5, r0
000a4 0a000003 beq |$L41329|
; 443 : } else {
; 444 : status = MMCWRITE(pDisk, pSgr);
000a8 e1a01007 mov r1, r7
000ac e1a00006 mov r0, r6
000b0 eb000000 bl MMCWRITE
000b4 ea000002 b |$L41644|
000b8 |$L41329|
; 442 : status = MMCREAD(pDisk, pSgr);
000b8 e1a01007 mov r1, r7
000bc e1a00006 mov r0, r6
000c0 eb000000 bl MMCREAD
000c4 |$L41644|
000c4 e1a05000 mov r5, r0
000c8 |$ddi_leave$41324|
; 445 : }
; 446 :
; 447 :
; 448 : ddi_leave:
; 449 : LeaveCriticalSection(&(pDisk->d_DiskCardCrit));
000c8 e1a00004 mov r0, r4
000cc eb000000 bl LeaveCriticalSection
000d0 |$ddi_exit$41321|
; 450 :
; 451 : ddi_exit:
; 452 : DEBUGMSG(ZONE_IO, (TEXT("MMCDISK:DoDiskIO done\r\n")));
; 453 : pSgr->sr_status = status;
000d0 e587500c str r5, [r7, #0xC]
; 454 : return status;
000d4 e1a00005 mov r0, r5
; 455 : }
000d8 e8bd40f0 ldmia sp!, {r4 - r7, lr}
000dc e12fff1e bx lr
000e0 |$L41649|
000e0 00075c08 DCD 0x75c08
000e4 00000000 DCD |??_C@_1GA@LHAD@?$AAM?$AAM?$AAC?$AAD?$AAI?$AAS?$AAK?$AA?3?$AAD?$AAo?$AAD?$AAi?$AAs?$AAk?$AAI?$AAO?$AA?5?$AA?9?$AA?5?$AAC@|
000e8 |$M41646|
ENDP ; |DoDiskIO|
EXPORT |FormatSBCS|
00000 AREA |.text| { |FormatSBCS| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$FormatSBCS|, PDATA, SELECTION=5, ASSOC=|.text| { |FormatSBCS| } ; comdat associative
|$T41660| DCD |FormatSBCS|
DCD 0x40001701
; Function compile flags: /Ogsy
00000 AREA |.text| { |FormatSBCS| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |FormatSBCS| PROC
; 465 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M41658|
00004 e1a03000 mov r3, r0
00008 e1a04001 mov r4, r1
; 466 : while (len) {
0000c e3520000 cmp r2, #0
00010 0a00000d beq |$L41342|
00014 |$L41341|
; 467 : if ((*p > 0x20) && (*p < 0x7F)) {
00014 e5d31000 ldrb r1, [r3]
00018 e1a00001 mov r0, r1
0001c e3500020 cmp r0, #0x20
00020 9a000002 bls |$L41343|
00024 e350007f cmp r0, #0x7F
; 468 : *pT = (TCHAR)*p;
00028 e20100ff and r0, r1, #0xFF
0002c 3a000000 bcc |$L41657|
00030 |$L41343|
; 469 : } else {
; 470 : *pT = (TCHAR)'.';
00030 e3a0002e mov r0, #0x2E
00034 |$L41657|
; 466 : while (len) {
00034 e2422001 sub r2, r2, #1
; 469 : } else {
; 470 : *pT = (TCHAR)'.';
00038 e1c400b0 strh r0, [r4]
; 471 : }
; 472 : pT++;
0003c e2844002 add r4, r4, #2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -