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

📄 atapiio.cod

📁 2440 CE500BSP包, EBOOT可用DEBUG版调试
💻 COD
📖 第 1 页 / 共 5 页
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4091 

	TTL	D:\WINCE500\PLATFORM\smdk2440\DRIVERS\atapi\.\atapiio.cpp
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "

	EXPORT	|??_C@_1JA@EFHCDLIF@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAS?$AAe?$AAn?$AAd?$AAI?$AAO?$AAC@| [ DATA ] ; `string'
	EXPORT	|??_C@_1JI@FLPKJPFG@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAS?$AAe?$AAn?$AAd?$AAI?$AAO?$AAC@| [ DATA ] ; `string'
	EXPORT	|?GetError@CDisk@@QAAEXZ|		; CDisk::GetError
	EXPORT	|?WriteSectorCount@CDisk@@QAAXE@Z|	; CDisk::WriteSectorCount
	EXPORT	|?WriteSectorNumber@CDisk@@QAAXE@Z|	; CDisk::WriteSectorNumber
	EXPORT	|?WriteLowCount@CDisk@@QAAXE@Z|		; CDisk::WriteLowCount
	EXPORT	|?WriteHighCount@CDisk@@QAAXE@Z|	; CDisk::WriteHighCount
	EXPORT	|?SelectDevice@CDisk@@QAAXXZ|		; CDisk::SelectDevice
	EXPORT	|?WriteDriveHeadReg@CDisk@@QAAXE@Z|	; CDisk::WriteDriveHeadReg
	EXPORT	|?WriteCommand@CDisk@@QAAXE@Z|		; CDisk::WriteCommand
	EXPORT	|?GetAltStatus@CDisk@@QAAEXZ|		; CDisk::GetAltStatus
	EXPORT	|?WaitOnBusy@CDisk@@QAAEH@Z|		; CDisk::WaitOnBusy
	EXPORT	|?SendIOCommand@CDisk@@QAAHKKE@Z|	; CDisk::SendIOCommand
	IMPORT	|NKDbgPrintfW|
	IMPORT	|dpCurSettings|
	IMPORT	|CeLogData|
	IMPORT	|__rt_udiv|

  00000			 AREA	 |.pdata|, PDATA
|$T32250| DCD	|$L32249|
	DCD	0x4000bb04
; File d:\wince500\platform\smdk2440\drivers\atapi\atapiio.cpp

  00000			 AREA	 |.rdata| { |??_C@_1JI@FLPKJPFG@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAS?$AAe?$AAn?$AAd?$AAI?$AAO?$AAC@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JI@FLPKJPFG@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAS?$AAe?$AAn?$AAd?$AAI?$AAO?$AAC@| 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, "S", 0x0, "e", 0x0, "n", 0x0, "d", 0x0, "I", 0x0, "O"
	DCB	0x0, "C", 0x0, "o", 0x0, "m", 0x0, "m", 0x0, "a", 0x0, "n"
	DCB	0x0, "d", 0x0, ">", 0x0, " ", 0x0, "F", 0x0, "a", 0x0, "i"
	DCB	0x0, "l", 0x0, "e", 0x0, "d", 0x0, " ", 0x0, "t", 0x0, "o"
	DCB	0x0, " ", 0x0, "s", 0x0, "e", 0x0, "n", 0x0, "d", 0x0, " "
	DCB	0x0, "c", 0x0, "o", 0x0, "m", 0x0, "m", 0x0, "a", 0x0, "n"
	DCB	0x0, "d", 0x0, ";", 0x0, " ", 0x0, "s", 0x0, "t", 0x0, "a"
	DCB	0x0, "t", 0x0, "u", 0x0, "s", 0x0, "(", 0x0, "%", 0x0, "x"
	DCB	0x0, ")", 0x0, ",", 0x0, " ", 0x0, "e", 0x0, "r", 0x0, "r"
	DCB	0x0, "o", 0x0, "r", 0x0, "(", 0x0, "%", 0x0, "x", 0x0, ")"
	DCB	0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0	; `string'

  00000			 AREA	 |.rdata| { |??_C@_1JA@EFHCDLIF@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAS?$AAe?$AAn?$AAd?$AAI?$AAO?$AAC@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JA@EFHCDLIF@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAS?$AAe?$AAn?$AAd?$AAI?$AAO?$AAC@| 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, "S", 0x0, "e", 0x0, "n", 0x0, "d", 0x0, "I", 0x0, "O"
	DCB	0x0, "C", 0x0, "o", 0x0, "m", 0x0, "m", 0x0, "a", 0x0, "n"
	DCB	0x0, "d", 0x0, ">", 0x0, " ", 0x0, "s", 0x0, "e", 0x0, "c"
	DCB	0x0, "t", 0x0, "o", 0x0, "r", 0x0, "(", 0x0, "%", 0x0, "d"
	DCB	0x0, ")", 0x0, ",", 0x0, " ", 0x0, "s", 0x0, "e", 0x0, "c"
	DCB	0x0, "t", 0x0, "o", 0x0, "r", 0x0, "s", 0x0, " ", 0x0, "l"
	DCB	0x0, "e", 0x0, "f", 0x0, "t", 0x0, "(", 0x0, "%", 0x0, "x"
	DCB	0x0, ")", 0x0, ",", 0x0, " ", 0x0, "c", 0x0, "o", 0x0, "m"
	DCB	0x0, "m", 0x0, "a", 0x0, "n", 0x0, "d", 0x0, "(", 0x0, "%"
	DCB	0x0, "x", 0x0, ")", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Odt

  00000			 AREA	 |.text|, CODE, ARM

  00000		 |?SendIOCommand@CDisk@@QAAHKKE@Z| PROC	; CDisk::SendIOCommand

; 30   : {

  00000		 |$L32249|
  00000	e1a0c00d	 mov         r12, sp
  00004	e92d000f	 stmdb       sp!, {r0 - r3}
  00008	e92d5000	 stmdb       sp!, {r12, lr}
  0000c	e24dd030	 sub         sp, sp, #0x30
  00010		 |$M32247|

; 31   :     DEBUGMSG(ZONE_IO, (TEXT(
; 32   :         "Atapi!CDisk::SendIOCommand> sector(%d), sectors left(%x), command(%x)\r\n"
; 33   :         ), dwStartSector,dwNumberOfSectors,bCmd));

  00010	e59f32cc	 ldr         r3, [pc, #0x2CC]
  00014	e5933440	 ldr         r3, [r3, #0x440]
  00018	e3130008	 tst         r3, #8
  0001c	0a000007	 beq         |$L32237|
  00020	e5dd3044	 ldrb        r3, [sp, #0x44]
  00024	e59d2040	 ldr         r2, [sp, #0x40]
  00028	e59d103c	 ldr         r1, [sp, #0x3C]
  0002c	e59f02b4	 ldr         r0, [pc, #0x2B4]
  00030	eb000000	 bl          NKDbgPrintfW
  00034	e3a03001	 mov         r3, #1
  00038	e58d301c	 str         r3, [sp, #0x1C]
  0003c	ea000001	 b           |$L32238|
  00040		 |$L32237|
  00040	e3a03000	 mov         r3, #0
  00044	e58d301c	 str         r3, [sp, #0x1C]
  00048		 |$L32238|

; 34   : 
; 35   :     if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_IOCOMMAND, &bCmd, sizeof(bCmd), 0, CELZONE_ALWAYSON, 0, FALSE);

  00048	e59f3294	 ldr         r3, [pc, #0x294]
  0004c	e5933440	 ldr         r3, [r3, #0x440]
  00050	e3130902	 tst         r3, #2, 18
  00054	0a00000d	 beq         |$L31948|
  00058	e3a03000	 mov         r3, #0
  0005c	e58d300c	 str         r3, [sp, #0xC]
  00060	e3a03000	 mov         r3, #0
  00064	e58d3008	 str         r3, [sp, #8]
  00068	e3a03101	 mov         r3, #1, 2
  0006c	e58d3004	 str         r3, [sp, #4]
  00070	e3a03000	 mov         r3, #0
  00074	e58d3000	 str         r3, [sp]
  00078	e3a03001	 mov         r3, #1
  0007c	e28d2044	 add         r2, sp, #0x44
  00080	e3a01d86	 mov         r1, #0x86, 26
  00084	e3811003	 orr         r1, r1, #3
  00088	e3a00001	 mov         r0, #1
  0008c	eb000000	 bl          CeLogData
  00090		 |$L31948|

; 36   : 
; 37   :     SelectDevice();

  00090	e59d0038	 ldr         r0, [sp, #0x38]
  00094	eb000000	 bl          |?SelectDevice@CDisk@@QAAXXZ|

; 38   : 
; 39   :     if (WaitOnBusy(FALSE)) {

  00098	e3a01000	 mov         r1, #0
  0009c	e59d0038	 ldr         r0, [sp, #0x38]
  000a0	eb000000	 bl          |?WaitOnBusy@CDisk@@QAAEH@Z|
  000a4	e5cd0020	 strb        r0, [sp, #0x20]
  000a8	e5dd3020	 ldrb        r3, [sp, #0x20]
  000ac	e3530000	 cmp         r3, #0
  000b0	0a000017	 beq         |$L31949|

; 40   :         DEBUGMSG(ZONE_IO, (TEXT(
; 41   :             "Atapi!CDisk::SendIOCommand> Failed to send command; status(%x), error(%x)\r\n"
; 42   :             ), GetAltStatus(),GetError()));

  000b4	e59f3228	 ldr         r3, [pc, #0x228]
  000b8	e5933440	 ldr         r3, [r3, #0x440]
  000bc	e3130008	 tst         r3, #8
  000c0	0a00000e	 beq         |$L32239|
  000c4	e59d0038	 ldr         r0, [sp, #0x38]
  000c8	eb000000	 bl          |?GetError@CDisk@@QAAEXZ|
  000cc	e5cd0021	 strb        r0, [sp, #0x21]
  000d0	e59d0038	 ldr         r0, [sp, #0x38]
  000d4	eb000000	 bl          |?GetAltStatus@CDisk@@QAAEXZ|
  000d8	e5cd0022	 strb        r0, [sp, #0x22]
  000dc	e5dd3021	 ldrb        r3, [sp, #0x21]
  000e0	e1a02003	 mov         r2, r3
  000e4	e5dd3022	 ldrb        r3, [sp, #0x22]
  000e8	e1a01003	 mov         r1, r3
  000ec	e59f01ec	 ldr         r0, [pc, #0x1EC]
  000f0	eb000000	 bl          NKDbgPrintfW
  000f4	e3a03001	 mov         r3, #1
  000f8	e58d3024	 str         r3, [sp, #0x24]
  000fc	ea000001	 b           |$L32240|
  00100		 |$L32239|
  00100	e3a03000	 mov         r3, #0
  00104	e58d3024	 str         r3, [sp, #0x24]
  00108		 |$L32240|

; 43   :         return FALSE;

  00108	e3a03000	 mov         r3, #0
  0010c	e58d3018	 str         r3, [sp, #0x18]
  00110	ea00006e	 b           |$L31945|
  00114		 |$L31949|

; 44   :     }
; 45   : 
; 46   :     // to transfer 256 sectors, set number of sectors to 0
; 47   :     if (dwNumberOfSectors == MAX_SECT_PER_COMMAND) {

  00114	e59d3040	 ldr         r3, [sp, #0x40]
  00118	e3530c01	 cmp         r3, #1, 24
  0011c	1a000001	 bne         |$L31952|

; 48   :         dwNumberOfSectors = 0;

  00120	e3a03000	 mov         r3, #0
  00124	e58d3040	 str         r3, [sp, #0x40]
  00128		 |$L31952|

; 49   :     }
; 50   : 
; 51   :     WriteSectorCount((BYTE)dwNumberOfSectors);

  00128	e59d3040	 ldr         r3, [sp, #0x40]
  0012c	e20310ff	 and         r1, r3, #0xFF
  00130	e59d0038	 ldr         r0, [sp, #0x38]
  00134	eb000000	 bl          |?WriteSectorCount@CDisk@@QAAXE@Z|

; 52   :     if (m_fLBAMode == TRUE) {

  00138	e59d3038	 ldr         r3, [sp, #0x38]
  0013c	e2833c06	 add         r3, r3, #6, 24
  00140	e2833094	 add         r3, r3, #0x94
  00144	e5933000	 ldr         r3, [r3]
  00148	e3530001	 cmp         r3, #1
  0014c	1a000023	 bne         |$L31954|

; 53   :         WriteSectorNumber( (BYTE)dwStartSector);

  00150	e59d303c	 ldr         r3, [sp, #0x3C]
  00154	e20310ff	 and         r1, r3, #0xFF
  00158	e59d0038	 ldr         r0, [sp, #0x38]
  0015c	eb000000	 bl          |?WriteSectorNumber@CDisk@@QAAXE@Z|

; 54   :         WriteLowCount((BYTE)(dwStartSector >> 8));

  00160	e59d303c	 ldr         r3, [sp, #0x3C]
  00164	e1a03423	 mov         r3, r3, lsr #8
  00168	e20310ff	 and         r1, r3, #0xFF
  0016c	e59d0038	 ldr         r0, [sp, #0x38]
  00170	eb000000	 bl          |?WriteLowCount@CDisk@@QAAXE@Z|

; 55   :         WriteHighCount((BYTE)(dwStartSector >> 16));

  00174	e59d303c	 ldr         r3, [sp, #0x3C]
  00178	e1a03823	 mov         r3, r3, lsr #16
  0017c	e20310ff	 and         r1, r3, #0xFF
  00180	e59d0038	 ldr         r0, [sp, #0x38]
  00184	eb000000	 bl          |?WriteHighCount@CDisk@@QAAXE@Z|

; 56   :         WriteDriveHeadReg((BYTE)((dwStartSector >> 24) | ATA_HEAD_LBA_MODE) | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2));

  00188	e59d3038	 ldr         r3, [sp, #0x38]
  0018c	e2833b01	 add         r3, r3, #1, 22
  00190	e2833084	 add         r3, r3, #0x84
  00194	e5933000	 ldr         r3, [r3]
  00198	e3530000	 cmp         r3, #0
  0019c	1a000002	 bne         |$L32241|
  001a0	e3a030a0	 mov         r3, #0xA0
  001a4	e58d3028	 str         r3, [sp, #0x28]
  001a8	ea000001	 b           |$L32242|
  001ac		 |$L32241|
  001ac	e3a030b0	 mov         r3, #0xB0
  001b0	e58d3028	 str         r3, [sp, #0x28]
  001b4		 |$L32242|
  001b4	e59d303c	 ldr         r3, [sp, #0x3C]
  001b8	e1a03c23	 mov         r3, r3, lsr #24
  001bc	e38330e0	 orr         r3, r3, #0xE0
  001c0	e20330ff	 and         r3, r3, #0xFF
  001c4	e1a02003	 mov         r2, r3
  001c8	e59d3028	 ldr         r3, [sp, #0x28]
  001cc	e1823003	 orr         r3, r2, r3
  001d0	e20310ff	 and         r1, r3, #0xFF
  001d4	e59d0038	 ldr         r0, [sp, #0x38]
  001d8	eb000000	 bl          |?WriteDriveHeadReg@CDisk@@QAAXE@Z|

; 57   :     }
; 58   :     else {

  001dc	ea000036	 b           |$L31959|
  001e0		 |$L31954|

; 59   :         DWORD dwSectors = m_DiskInfo.di_sectors;

  001e0	e59d3038	 ldr         r3, [sp, #0x38]
  001e4	e2833e6b	 add         r3, r3, #0x6B, 28
  001e8	e5933000	 ldr         r3, [r3]
  001ec	e58d3010	 str         r3, [sp, #0x10]

; 60   :         DWORD dwHeads = m_DiskInfo.di_heads;

  001f0	e59d3038	 ldr         r3, [sp, #0x38]
  001f4	e2833c06	 add         r3, r3, #6, 24
  001f8	e28330ac	 add         r3, r3, #0xAC
  001fc	e5933000	 ldr         r3, [r3]
  00200	e58d3014	 str         r3, [sp, #0x14]

; 61   :         WriteSectorNumber((BYTE)((dwStartSector % dwSectors) + 1));

  00204	e59d103c	 ldr         r1, [sp, #0x3C]
  00208	e59d0010	 ldr         r0, [sp, #0x10]
  0020c	eb000000	 bl          __rt_udiv
  00210	e2813001	 add         r3, r1, #1
  00214	e20310ff	 and         r1, r3, #0xFF
  00218	e59d0038	 ldr         r0, [sp, #0x38]
  0021c	eb000000	 bl          |?WriteSectorNumber@CDisk@@QAAXE@Z|

; 62   :         WriteLowCount((BYTE) (dwStartSector /(dwSectors*dwHeads)));

  00220	e59d2010	 ldr         r2, [sp, #0x10]
  00224	e59d3014	 ldr         r3, [sp, #0x14]
  00228	e0000392	 mul         r0, r2, r3
  0022c	e59d103c	 ldr         r1, [sp, #0x3C]
  00230	eb000000	 bl          __rt_udiv
  00234	e20010ff	 and         r1, r0, #0xFF
  00238	e59d0038	 ldr         r0, [sp, #0x38]
  0023c	eb000000	 bl          |?WriteLowCount@CDisk@@QAAXE@Z|

; 63   :         WriteHighCount((BYTE)((dwStartSector /(dwSectors*dwHeads)) >> 8));

  00240	e59d2010	 ldr         r2, [sp, #0x10]
  00244	e59d3014	 ldr         r3, [sp, #0x14]
  00248	e0000392	 mul         r0, r2, r3
  0024c	e59d103c	 ldr         r1, [sp, #0x3C]
  00250	eb000000	 bl          __rt_udiv
  00254	e1a03420	 mov         r3, r0, lsr #8
  00258	e20310ff	 and         r1, r3, #0xFF
  0025c	e59d0038	 ldr         r0, [sp, #0x38]
  00260	eb000000	 bl          |?WriteHighCount@CDisk@@QAAXE@Z|

; 64   :         WriteDriveHeadReg((BYTE)(((dwStartSector/dwSectors)% dwHeads) | ((m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2)));

  00264	e59d3038	 ldr         r3, [sp, #0x38]
  00268	e2833b01	 add         r3, r3, #1, 22
  0026c	e2833084	 add         r3, r3, #0x84
  00270	e5933000	 ldr         r3, [r3]
  00274	e3530000	 cmp         r3, #0
  00278	1a000002	 bne         |$L32243|
  0027c	e3a030a0	 mov         r3, #0xA0
  00280	e58d302c	 str         r3, [sp, #0x2C]
  00284	ea000001	 b           |$L32244|
  00288		 |$L32243|
  00288	e3a030b0	 mov         r3, #0xB0
  0028c	e58d302c	 str         r3, [sp, #0x2C]
  00290		 |$L32244|
  00290	e59d103c	 ldr         r1, [sp, #0x3C]
  00294	e59d0010	 ldr         r0, [sp, #0x10]
  00298	eb000000	 bl          __rt_udiv
  0029c	e1a01000	 mov         r1, r0
  002a0	e59d0014	 ldr         r0, [sp, #0x14]
  002a4	eb000000	 bl          __rt_udiv
  002a8	e59d302c	 ldr         r3, [sp, #0x2C]
  002ac	e1813003	 orr         r3, r1, r3
  002b0	e20310ff	 and         r1, r3, #0xFF
  002b4	e59d0038	 ldr         r0, [sp, #0x38]
  002b8	eb000000	 bl          |?WriteDriveHeadReg@CDisk@@QAAXE@Z|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -