📄 mmcdrv.cod
字号:
0000c e59f6078 ldr r6, [pc, #0x78]
; 545 : #endif
; 546 :
; 547 : MMCSelectController(pc->controller_number, phys_drive);
00010 e1a01004 mov r1, r4
00014 e1d601f4 ldrsh r0, [r6, #0x14]
00018 eb000000 bl MMCSelectController
; 548 :
; 549 : pc->drive_active = (((UINT16)phys_drive) | DRV_ACTIVE);
0001c e59f0064 ldr r0, [pc, #0x64]
00020 e1a03804 mov r3, r4, lsl #16
00024 e1800843 orr r0, r0, r3, asr #16
00028 e1a01800 mov r1, r0, lsl #16
0002c e1a02841 mov r2, r1, asr #16
; 550 :
; 551 :
; 552 : if ( MMC_NO_ERROR != mmcGetStatus ( pc, pc->drive[phys_drive].RCA) )
00030 e5961000 ldr r1, [r6]
00034 e1a00804 mov r0, r4, lsl #16
00038 e1c621be strh r2, [r6, #0x1E]
0003c e1a02820 mov r2, r0, lsr #16
00040 e0810282 add r0, r1, r2, lsl #5
00044 e1d010be ldrh r1, [r0, #0xE]
00048 e1a00006 mov r0, r6
0004c eb000000 bl mmcGetStatus
00050 e3500000 cmp r0, #0
; 553 : {
; 554 : return (YES);
00054 13a00001 movne r0, #1
; 569 : }
00058 18bd8070 ldmneia sp!, {r4 - r6, pc}
; 555 : }
; 556 :
; 557 : if ( dFlag )
0005c e1a00805 mov r0, r5, lsl #16
00060 e1b01820 movs r1, r0, lsr #16
00064 0a000005 beq |$L36675|
; 558 : {
; 559 :
; 560 : if ( pc->mmcRdyState == YES )
00068 e1d602b4 ldrh r0, [r6, #0x24]
0006c e1a01800 mov r1, r0, lsl #16
00070 e1a02821 mov r2, r1, lsr #16
00074 e3520001 cmp r2, #1
; 561 : return NO;
; 562 : else
; 563 :
; 564 : return YES;
00078 e3a00001 mov r0, #1
0007c 1a000000 bne |$L36668|
00080 |$L36675|
; 565 : }
; 566 :
; 567 :
; 568 : return NO;
00080 e3a00000 mov r0, #0
00084 |$L36668|
; 569 : }
00084 e8bd8070 ldmia sp!, {r4 - r6, pc}
00088 |$L36866|
00088 ffff8000 DCD 0xffff8000
0008c 00000000 DCD |controller_s|
00090 |$M36863|
ENDP ; |getDeviceStatus|
EXPORT |setupMMcHostDataRegister|
00000 AREA |.text| { |setupMMcHostDataRegister| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$setupMMcHostDataRegister|, PDATA, SELECTION=5, ASSOC=|.text| { |setupMMcHostDataRegister| } ; comdat associative
|$T36885| DCD |setupMMcHostDataRegister|
DCD 0x40004e01
; Function compile flags: /Ogsy
00000 AREA |.text| { |setupMMcHostDataRegister| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |setupMMcHostDataRegister| PROC
; 593 : {
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M36883|
00004 e1a04001 mov r4, r1
; 594 : #if (USE_SECURITY)
; 595 : if ( cmdIndex & SECURITY_CMD_BIT )
; 596 : {
; 597 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 598 : return;
; 599 : }
; 600 : #endif
; 601 :
; 602 :
; 603 : switch ( cmdIndex )
; 604 : {
00008 e1a00800 mov r0, r0, lsl #16
0000c e1a01820 mov r1, r0, lsr #16
00010 e3510014 cmp r1, #0x14
00014 ca000020 bgt |$L36869|
00018 0a000030 beq |$L36691|
0001c e351000c cmp r1, #0xC
00020 ca00000f bgt |$L36870|
00024 0a00000a beq |$L36697|
00028 e3510000 cmp r1, #0
0002c 4a000040 bmi |$L36687|
00030 e3510002 cmp r1, #2
00034 da000013 ble |$L36700|
00038 e3510008 cmp r1, #8
0003c da00003c ble |$L36687|
00040 e351000a cmp r1, #0xA
00044 da00000f ble |$L36700|
00048 e351000b cmp r1, #0xB
0004c 0a00000a beq |$L36690|
; 671 : break;
; 672 :
; 673 : }
; 674 : }
00050 e8bd8010 ldmia sp!, {r4, pc}
00054 |$L36697|
; 643 :
; 644 : case ERASE_SECTORS:
; 645 : *cmdDatContReg = NO;
; 646 : *blkLength = NO;
; 647 : break;
; 648 :
; 649 : case STOP_TRANSMISSION:
; 650 : if ( multipleRdWr == RCV)
00054 e3a00000 mov r0, #0
00058 e1c400b0 strh r0, [r4]
; 651 :
; 652 :
; 654 :
; 655 : *cmdDatContReg = NO;
; 656 : else
; 657 : *cmdDatContReg = NO;
; 658 : *blkLength = NO;
0005c e1c300b0 strh r0, [r3]
; 671 : break;
; 672 :
; 673 : }
; 674 : }
00060 e8bd8010 ldmia sp!, {r4, pc}
00064 |$L36870|
; 594 : #if (USE_SECURITY)
; 595 : if ( cmdIndex & SECURITY_CMD_BIT )
; 596 : {
; 597 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 598 : return;
; 599 : }
; 600 : #endif
; 601 :
; 602 :
; 603 : switch ( cmdIndex )
; 604 : {
00064 e351000d cmp r1, #0xD
00068 0a000006 beq |$L36700|
0006c e3510010 cmp r1, #0x10
00070 da00002f ble |$L36687|
00074 e3510012 cmp r1, #0x12
00078 ca00002d bgt |$L36687|
0007c |$L36690|
; 605 : case READ_BLOCK:
; 606 : case READ_MULTIPLE_BLOCK:
; 607 : case READ_DAT_UNTIL_STOP:
; 608 : *cmdDatContReg = DATA_ENABLE;
; 609 : *blkLength = DEFAULT_BLK_LENGTH;
0007c e3a01c02 mov r1, #2, 24
; 618 : break;
; 619 :
; 620 : case SEND_WRITE_PROT:
; 621 : *cmdDatContReg = DATA_ENABLE;
00080 e3a00004 mov r0, #4
; 623 : break;
00084 ea000017 b |$L36882|
00088 |$L36700|
; 659 : break;
; 660 :
; 661 :
; 662 : case GO_IDLE_STATE:
; 663 : case SEND_OP_COND:
; 664 : case ALL_SEND_CID:
; 665 : case SEND_CID:
; 666 : case SEND_CSD:
; 667 : case SEND_STATUS:
; 668 : *cmdDatContReg = NO;
00088 e3a00000 mov r0, #0
0008c e1c400b0 strh r0, [r4]
; 669 : *blkLength = NO;
00090 e1c300b0 strh r0, [r3]
; 670 : *noBlocks = NO;
00094 e1c200b0 strh r0, [r2]
; 671 : break;
; 672 :
; 673 : }
; 674 : }
00098 e8bd8010 ldmia sp!, {r4, pc}
0009c |$L36869|
; 594 : #if (USE_SECURITY)
; 595 : if ( cmdIndex & SECURITY_CMD_BIT )
; 596 : {
; 597 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 598 : return;
; 599 : }
; 600 : #endif
; 601 :
; 602 :
; 603 : switch ( cmdIndex )
; 604 : {
0009c e3510026 cmp r1, #0x26
000a0 ca000013 bgt |$L36871|
000a4 0affffea beq |$L36697|
000a8 e3510018 cmp r1, #0x18
000ac ba000020 blt |$L36687|
000b0 e3510019 cmp r1, #0x19
000b4 da000009 ble |$L36691|
000b8 e351001b cmp r1, #0x1B
000bc da000004 ble |$L36695|
000c0 e351001e cmp r1, #0x1E
000c4 1a00001a bne |$L36687|
; 622 : *blkLength = NO;
000c8 e3a01000 mov r1, #0
000cc e3a00004 mov r0, #4
; 623 : break;
000d0 ea000004 b |$L36882|
000d4 |$L36695|
; 636 : #endif
; 637 : case PROGRAM_CSD:
; 638 : case PROGRAM_CID:
; 639 : *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
000d4 e3a0000c mov r0, #0xC
; 640 : *blkLength = 16;
000d8 e3a01010 mov r1, #0x10
; 641 : *noBlocks = 1;
; 642 : break;
000dc ea000010 b |$L36876|
000e0 |$L36691|
; 610 : break;
; 611 :
; 612 : case WRITE_BLOCK:
; 613 : case WRITE_MULTIPLE_BLOCK:
; 614 : case WRITE_DAT_UNTIL_STOP:
; 615 : *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
000e0 e3a0000c mov r0, #0xC
; 616 :
; 617 : *blkLength = DEFAULT_BLK_LENGTH;
000e4 e3a01c02 mov r1, #2, 24
000e8 |$L36882|
; 610 : break;
; 611 :
; 612 : case WRITE_BLOCK:
; 613 : case WRITE_MULTIPLE_BLOCK:
; 614 : case WRITE_DAT_UNTIL_STOP:
; 615 : *cmdDatContReg = (DATA_ENABLE + DATA_WRITE_SET);
000e8 e1c400b0 strh r0, [r4]
; 616 :
; 617 : *blkLength = DEFAULT_BLK_LENGTH;
000ec e1c310b0 strh r1, [r3]
; 671 : break;
; 672 :
; 673 : }
; 674 : }
000f0 e8bd8010 ldmia sp!, {r4, pc}
000f4 |$L36871|
; 594 : #if (USE_SECURITY)
; 595 : if ( cmdIndex & SECURITY_CMD_BIT )
; 596 : {
; 597 : SETUPSPECIALCOMMANDS(cmdIndex, cmdDatContReg, noBlocks, blkLength);
; 598 : return;
; 599 : }
; 600 : #endif
; 601 :
; 602 :
; 603 : switch ( cmdIndex )
; 604 : {
000f4 e3a00f53 mov r0, #0x53, 30
000f8 e3800001 orr r0, r0, #1
000fc e1510000 cmp r1, r0
00100 0a000005 beq |$L36693|
00104 e3a00e17 mov r0, #0x17, 28
00108 e3800003 orr r0, r0, #3
0010c e1510000 cmp r1, r0
00110 1a000007 bne |$L36687|
; 629 : break;
; 630 :
; 631 : case SD_SEND_SCR:
; 632 : *cmdDatContReg = DATA_ENABLE;
; 633 : *blkLength = 8;
00114 e3a01008 mov r1, #8
; 634 : *noBlocks = 1;
; 635 : break;
00118 ea000000 b |$L36877|
0011c |$L36693|
; 627 : *blkLength = (DEFAULT_BLK_LENGTH >> 3);
0011c e3a01040 mov r1, #0x40
00120 |$L36877|
; 624 : #if (USE_SD)
; 625 : case SD_STATUS:
; 626 : *cmdDatContReg = DATA_ENABLE;
00120 e3a00004 mov r0, #4
00124 |$L36876|
00124 e1c400b0 strh r0, [r4]
; 628 : *noBlocks = 1;
00128 e3a00001 mov r0, #1
0012c e1c310b0 strh r1, [r3]
00130 e1c200b0 strh r0, [r2]
00134 |$L36687|
; 671 : break;
; 672 :
; 673 : }
; 674 : }
00134 e8bd8010 ldmia sp!, {r4, pc}
00138 |$M36884|
ENDP ; |setupMMcHostDataRegister|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -