⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diskio.cod

📁 ARM对MMC卡的编程文档
💻 COD
📖 第 1 页 / 共 5 页
字号:
  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 + -