📄 diskio.cod
字号:
; 681 : psid->dwSerialNumOffset = pDstOffset - (PCHAR) psid;
00068 e0450007 sub r0, r5, r7
0006c e587000c str r0, [r7, #0xC]
00070 |$L37177|
00070 e51ba068 ldr r10, [r11, #-0x68]
00074 ea000008 b |$L37178|
00078 |$L37173|
; 683 : SetLastError(ERROR_INVALID_PARAMETER);
00078 e3a00057 mov r0, #0x57
0007c eb000000 bl SetLastError
; 684 : return FALSE;
00080 e3a06000 mov r6, #0
00084 e1a0a006 mov r10, r6
00088 e59b9008 ldr r9, [r11, #8]
0008c e59b8004 ldr r8, [r11, #4]
00090 e59b7000 ldr r7, [r11]
00094 e51b506c ldr r5, [r11, #-0x6C]
00098 ea00002c b |$L36903|
0009c |$L37178|
; 685 : }
; 686 :
; 687 : pmy_geom_desc=&my_geom_desc;
; 688 :
; 689 :
; 690 : #if (USE_SPI || USE_SPI_EMULATION)
; 691 :
; 692 : if (spi_read_serial(0, pmy_geom_desc) == NO) {
; 693 : return FALSE;
; 694 : }
; 695 :
; 696 : #else
; 697 :
; 698 : if (mmc_read_serial(0, pmy_geom_desc) == NO) {
0009c e3e01063 mvn r1, #0x63
000a0 e08b1001 add r1, r11, r1
000a4 e3a00000 mov r0, #0
000a8 eb000000 bl mmc_read_serial
000ac e3500000 cmp r0, #0
; 699 : return FALSE;
000b0 0a000022 beq |$L37190|
; 700 : }
; 701 :
; 702 :
; 703 : #endif
; 704 :
; 705 :
; 706 :
; 707 :
; 708 :
; 709 :
; 710 :
; 711 : psid->dwFlags = MANUFACTUREID_INVALID;
000b4 e3a0a001 mov r10, #1
000b8 e587a004 str r10, [r7, #4]
; 712 :
; 713 : str_length=strlen(&my_geom_desc.serialNum[0]);
000bc e3e00057 mvn r0, #0x57
000c0 e08b0000 add r0, r11, r0
000c4 eb000000 bl strlen
000c8 e1a01800 mov r1, r0, lsl #16
000cc e1a02821 mov r2, r1, lsr #16
; 714 :
; 715 :
; 716 : if (cBytes == sizeof(*psid)) {
000d0 e3580010 cmp r8, #0x10
000d4 1a000008 bne |$L36914|
; 717 : psid->dwSize = cBytes + str_length + 1;
000d8 e1a00802 mov r0, r2, lsl #16
000dc e1a01820 mov r1, r0, lsr #16
000e0 e2812011 add r2, r1, #0x11
000e4 e5872000 str r2, [r7]
; 718 : SetLastError(ERROR_INSUFFICIENT_BUFFER);
000e8 e3a0007a mov r0, #0x7A
000ec eb000000 bl SetLastError
; 729 :
; 730 : return (GetLastError() == ERROR_SUCCESS);
000f0 e1a0a006 mov r10, r6
; 672 : return FALSE;
000f4 e1a0000a mov r0, r10
; 731 : }
000f8 e91baff0 ldmdb r11, {r4 - r11, sp, pc}
000fc |$L36914|
; 719 : return FALSE;
; 720 : }
; 721 :
; 722 : memcpy(pDstOffset, &my_geom_desc.serialNum[0], str_length + 1);
000fc e1a04802 mov r4, r2, lsl #16
00100 e1a00824 mov r0, r4, lsr #16
00104 e2802001 add r2, r0, #1
00108 e3e01057 mvn r1, #0x57
0010c e08b1001 add r1, r11, r1
00110 e1a00005 mov r0, r5
00114 eb000000 bl memcpy
; 723 :
; 724 : pDstOffset += (str_length + 1);
00118 e0853824 add r3, r5, r4, lsr #16
0011c e2830001 add r0, r3, #1
; 725 :
; 726 : psid->dwSize = pDstOffset - (PCHAR)psid;
00120 e0401007 sub r1, r0, r7
00124 e5871000 str r1, [r7]
; 727 :
; 728 : *pcBytes = min(psid->dwSize, cBytes);
00128 e1510008 cmp r1, r8
0012c 21a01008 movcs r1, r8
00130 e5891000 str r1, [r9]
; 729 :
; 730 : return (GetLastError() == ERROR_SUCCESS);
00134 eb000000 bl GetLastError
00138 e3500000 cmp r0, #0
0013c 0a000003 beq |$L36903|
00140 |$L37190|
00140 e1a0a006 mov r10, r6
; 672 : return FALSE;
00144 e1a0000a mov r0, r10
; 731 : }
00148 e91baff0 ldmdb r11, {r4 - r11, sp, pc}
; 729 :
; 730 : return (GetLastError() == ERROR_SUCCESS);
0014c e51ba068 ldr r10, [r11, #-0x68]
00150 |$L36903|
; 672 : return FALSE;
00150 e1a0000a mov r0, r10
; 731 : }
00154 e91baff0 ldmdb r11, {r4 - r11, sp, pc}
ENDP ; |GetStorageID|
00158 |$L37175|
00158 |$L37192|
00158 |$L37172|
; 682 : } __except (EXCEPTION_EXECUTE_HANDLER) {
00158 e3a00001 mov r0, #1
0015c |$L37174|
0015c e1a0f00e mov pc, lr
00160 |$L37200|
00160 00000000 DCD |??_C@_1CM@FFGP@?$AAE?$AAn?$AAt?$AAe?$AAr?$AA?5?$AAG?$AAe?$AAt?$AAS?$AAt?$AAo?$AAr?$AAa?$AAg?$AAe?$AAI?$AAD?$AA?5?$AA?$AN@|
00164 |$L37195|
EXPORT |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| [ DATA ] ; `string'
EXPORT |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| [ DATA ] ; `string'
EXPORT |InitDisk|
IMPORT |mmc_init|
IMPORT |mmc_drive_open|
IMPORT |controller_s|
00000 AREA |.text| { |InitDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$InitDisk|, PDATA, SELECTION=5, ASSOC=|.text| { |InitDisk| } ; comdat associative
|$T37209| DCD |InitDisk|
DCD 0x40002b01
00000 AREA |.rdata| { |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@| DCB "m"
DCB 0x0, "m", 0x0, "c", 0x0, "_", 0x0, "i", 0x0, "n", 0x0, "i"
DCB 0x0, "t", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "r", 0x0, "e"
DCB 0x0, "t", 0x0, "u", 0x0, "r", 0x0, "n", 0x0, " ", 0x0, "F"
DCB 0x0, "A", 0x0, "L", 0x0, "S", 0x0, "E", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@| DCB "m"
DCB 0x0, "m", 0x0, "c", 0x0, "_", 0x0, "d", 0x0, "r", 0x0, "i"
DCB 0x0, "v", 0x0, "e", 0x0, "_", 0x0, "o", 0x0, "p", 0x0, "e"
DCB 0x0, "n", 0x0, "(", 0x0, ")", 0x0, " ", 0x0, "r", 0x0, "e"
DCB 0x0, "t", 0x0, "u", 0x0, "r", 0x0, "n", 0x0, " ", 0x0, "F"
DCB 0x0, "A", 0x0, "L", 0x0, "S", 0x0, "E", 0x0, 0xd, 0x0, 0xa
DCB 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Ogsy
00000 AREA |.text| { |InitDisk| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |InitDisk| PROC
; 739 : {
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M37207|
00004 e1a05000 mov r5, r0
; 740 : #if (USE_MEMMODE)
; 741 :
; 742 : ULONG virt_address;
; 743 :
; 744 : #endif
; 745 :
; 746 :
; 747 : PDEVICE_CONTROLLER pc;
; 748 :
; 749 : pc = &controller_s[0];
00008 e59f4098 ldr r4, [pc, #0x98]
; 750 :
; 751 :
; 752 :
; 753 : #if (USE_MEMMODE)
; 754 : virtreg=NULL;
; 755 : #endif
; 756 :
; 757 : #if (USE_MMC)
; 758 :
; 759 :
; 760 :
; 761 : #endif
; 762 :
; 763 :
; 764 :
; 765 :
; 766 :
; 767 : #if (USE_MEMMODE)
; 768 :
; 769 : virtreg = VirtualAlloc(
; 770 : 0,
; 771 : 4096,
; 772 : MEM_RESERVE,
; 773 : PAGE_NOACCESS);
; 774 : if (virtreg == NULL) {
; 775 : DEBUGMSG(ZONE_WARNING,
; 776 : (TEXT("MMCDISK:mmcinit VirtualAlloc failed %d\r\n"), GetLastError()));
; 777 : goto init_dfail;
; 778 : }
; 779 :
; 780 :
; 781 : #if (USE_MMC)
; 782 : virt_address=myAdapters[0].portIO | 0x80000000;
; 783 : #else
; 784 : virt_address=SPI_BASE_ADDR | 0x80000000;
; 785 :
; 786 : #endif
; 787 :
; 788 : if (!VirtualCopy(
; 789 : virtreg,
; 790 : (PVOID)virt_address,
; 791 : 4096,
; 792 : PAGE_READWRITE|PAGE_NOCACHE)) {
; 793 : DEBUGMSG(ZONE_WARNING,
; 794 : (TEXT("MMCDISK:mmcinit VirtualCopy failed %d\r\n"), GetLastError()));
; 795 : goto init_dfail;
; 796 : }
; 797 :
; 798 :
; 799 : #if (USE_MMC)
; 800 : myAdapters[0].portIO = (UINT32) virtreg;
; 801 : #else
; 802 : pc->register_file_address = (unsigned char * ) virtreg;
; 803 : #endif
; 804 :
; 805 :
; 806 : #endif
; 807 :
; 808 :
; 809 :
; 810 : #if (USE_SPI || USE_SPI_EMULATION)
; 811 : if (spi_init() == FALSE) {
; 812 : return 1;
; 813 : }
; 814 :
; 815 : if (spi_drive_open(0) == FALSE) {
; 816 : return 1;
; 817 : }
; 818 : #else
; 819 :
; 820 : if (mmc_init() == FALSE) {
0000c eb000000 bl mmc_init
00010 e3500000 cmp r0, #0
; 821 : RETAILMSG(1, (TEXT("mmc_init() return FALSE\r\n")));
00014 059f0088 ldreq r0, [pc, #0x88]
00018 0a000004 beq |$L37206|
; 822 : return 1;
; 823 : }
; 824 :
; 825 : if (mmc_drive_open(0) == FALSE) {
0001c e3a00000 mov r0, #0
00020 eb000000 bl mmc_drive_open
00024 e3500000 cmp r0, #0
00028 1a000003 bne |$L36922|
; 826 : RETAILMSG(1, (TEXT("mmc_drive_open() return FALSE\r\n")));
0002c e59f006c ldr r0, [pc, #0x6C]
00030 |$L37206|
00030 eb000000 bl NKDbgPrintfW
; 827 : return 1;
00034 e3a00001 mov r0, #1
; 846 :
; 847 :
; 848 : #if (USE_MEMMODE)
; 849 :
; 850 : init_dfail:
; 851 :
; 852 :
; 853 :
; 855 :
; 856 :
; 857 :
; 858 :
; 859 :
; 860 : return 1;
; 861 : #endif
; 862 :
; 863 : }
00038 e8bd8030 ldmia sp!, {r4, r5, pc}
0003c |$L36922|
; 828 : }
; 829 :
; 830 :
; 831 :
; 832 :
; 833 : #endif
; 834 :
; 835 : pDisk->d_fLBAMode = TRUE;
0003c e3a03001 mov r3, #1
; 836 :
; 837 : pDisk->d_DiskInfo.di_bytes_per_sect = BYTES_PER_SECTOR;
00040 e3a00c02 mov r0, #2, 24
00044 e5853038 str r3, [r5, #0x38]
00048 e5850024 str r0, [r5, #0x24]
; 838 : pDisk->d_DiskInfo.di_cylinders = pc->drive[0].num_cylinders;
0004c e5940000 ldr r0, [r4]
00050 e1d010b8 ldrh r1, [r0, #8]
00054 e1a02801 mov r2, r1, lsl #16
00058 e1a00822 mov r0, r2, lsr #16
0005c e5850028 str r0, [r5, #0x28]
; 839 : pDisk->d_DiskInfo.di_heads = pc->drive[0].num_heads;
00060 e5941000 ldr r1, [r4]
00064 e1d100b4 ldrh r0, [r1, #4]
00068 e1a02800 mov r2, r0, lsl #16
0006c e1a01822 mov r1, r2, lsr #16
00070 e585102c str r1, [r5, #0x2C]
; 840 : pDisk->d_DiskInfo.di_sectors = pc->drive[0].sec_p_track;
00074 e5940000 ldr r0, [r4]
00078 e1d010b6 ldrh r1, [r0, #6]
0007c e1a02801 mov r2, r1, lsl #16
00080 e1a00822 mov r0, r2, lsr #16
00084 e5850030 str r0, [r5, #0x30]
; 841 : pDisk->d_DiskInfo.di_total_sectors = pc->drive[0].total_lba;
00088 e5941000 ldr r1, [r4]
0008c e5910000 ldr r0, [r1]
; 842 : pDisk->d_DiskInfo.di_flags = DISK_INFO_FLAG_MBR;
00090 e5853034 str r3, [r5, #0x34]
00094 e5850020 str r0, [r5, #0x20]
; 843 :
; 844 :
; 845 : return 0;
00098 e3a00000 mov r0, #0
; 846 :
; 847 :
; 848 : #if (USE_MEMMODE)
; 849 :
; 850 : init_dfail:
; 851 :
; 852 :
; 853 :
; 855 :
; 856 :
; 857 :
; 858 :
; 859 :
; 860 : return 1;
; 861 : #endif
; 862 :
; 863 : }
0009c e8bd8030 ldmia sp!, {r4, r5, pc}
000a0 |$L37211|
000a0 00000000 DCD |??_C@_1EA@LMJJ@?$AAm?$AAm?$AAc?$AA_?$AAd?$AAr?$AAi?$AAv?$AAe?$AA_?$AAo?$AAp?$AAe?$AAn?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt@|
000a4 00000000 DCD |??_C@_1DE@JBKA@?$AAm?$AAm?$AAc?$AA_?$AAi?$AAn?$AAi?$AAt?$AA?$CI?$AA?$CJ?$AA?5?$AAr?$AAe?$AAt?$AAu?$AAr?$AAn?$AA?5?$AAF?$AAA@|
000a8 00000000 DCD |controller_s|
000ac |$M37208|
ENDP ; |InitDisk|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -