📄 atapiio.cod
字号:
; 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 + -