📄 atapipci.cod
字号:
; 277 : DEBUGMSG(ZONE_INIT, (_T(
; 278 : "Atapi!CPCIDisk::Init> Failed to configure port; device(%u)\r\n"
; 279 : ), m_dwDeviceId));
00824 e59f3108 ldr r3, [pc, #0x108]
00828 e5933440 ldr r3, [r3, #0x440]
0082c e3130001 tst r3, #1
00830 0a000008 beq |$L32497|
00834 e59d3028 ldr r3, [sp, #0x28]
00838 e2833b01 add r3, r3, #1, 22
0083c e2833088 add r3, r3, #0x88
00840 e5931000 ldr r1, [r3]
00844 e59f00e4 ldr r0, [pc, #0xE4]
00848 eb000000 bl NKDbgPrintfW
0084c e3a03001 mov r3, #1
00850 e58d300c str r3, [sp, #0xC]
00854 ea000001 b |$L32498|
00858 |$L32497|
00858 e3a03000 mov r3, #0
0085c e58d300c str r3, [sp, #0xC]
00860 |$L32498|
; 280 : goto exit;
00860 ea00002a b |$L32101|
00864 |$L32097|
; 281 : }
; 282 :
; 283 : // assign the appropriate folder name
; 284 : m_szDiskName = (IsCDRomDevice() ? g_szPCICDRomDisk : g_szPCIHardDisk);
00864 e59d0028 ldr r0, [sp, #0x28]
00868 eb000000 bl |?IsCDRomDevice@CDisk@@QAAHXZ|
0086c e58d0010 str r0, [sp, #0x10]
00870 e59d3010 ldr r3, [sp, #0x10]
00874 e3530000 cmp r3, #0
00878 0a000003 beq |$L32499|
0087c e59f30a8 ldr r3, [pc, #0xA8]
00880 e5933000 ldr r3, [r3]
00884 e58d3014 str r3, [sp, #0x14]
00888 ea000002 b |$L32500|
0088c |$L32499|
0088c e59f3094 ldr r3, [pc, #0x94]
00890 e5933000 ldr r3, [r3]
00894 e58d3014 str r3, [sp, #0x14]
00898 |$L32500|
00898 e59d3028 ldr r3, [sp, #0x28]
0089c e2833c06 add r3, r3, #6, 24
008a0 e28320b8 add r2, r3, #0xB8
008a4 e59d3014 ldr r3, [sp, #0x14]
008a8 e5823000 str r3, [r2]
; 285 :
; 286 : // reserve memory for DMA buffers
; 287 : m_pStartMemory = (LPBYTE)VirtualAlloc(NULL, 0x10000, MEM_RESERVE, PAGE_READWRITE);
008ac e3a03004 mov r3, #4
008b0 e3a02a02 mov r2, #2, 20
008b4 e3a01801 mov r1, #1, 16
008b8 e3a00000 mov r0, #0
008bc eb000000 bl VirtualAlloc
008c0 e58d0018 str r0, [sp, #0x18]
008c4 e59d3028 ldr r3, [sp, #0x28]
008c8 e2833c07 add r3, r3, #7, 24
008cc e2832048 add r2, r3, #0x48
008d0 e59d3018 ldr r3, [sp, #0x18]
008d4 e5823000 str r3, [r2]
; 288 : if (!m_pStartMemory) {
008d8 e59d3028 ldr r3, [sp, #0x28]
008dc e2833c07 add r3, r3, #7, 24
008e0 e2833048 add r3, r3, #0x48
008e4 e5933000 ldr r3, [r3]
008e8 e3530000 cmp r3, #0
008ec 1a000001 bne |$L32103|
; 289 : bRet = FALSE;
008f0 e3a03000 mov r3, #0
008f4 e58d3000 str r3, [sp]
008f8 |$L32103|
; 290 : }
; 291 :
; 292 : // finish intialization; i.e., initialize device
; 293 : bRet = CDisk::Init(hActiveKey);
008f8 e59d102c ldr r1, [sp, #0x2C]
008fc e59d0028 ldr r0, [sp, #0x28]
00900 eb000000 bl |?Init@CDisk@@UAAHPAUHKEY__@@@Z|
00904 e58d001c str r0, [sp, #0x1C]
00908 e59d301c ldr r3, [sp, #0x1C]
0090c e58d3000 str r3, [sp]
00910 |$L32101|
00910 |$exit$32100|
; 294 : if (!bRet) {
; 295 : goto exit;
; 296 : }
; 297 :
; 298 : exit:;
; 299 : return bRet;
00910 e59d3000 ldr r3, [sp]
00914 e58d3004 str r3, [sp, #4]
00918 e59d0004 ldr r0, [sp, #4]
; 300 : }
0091c e28dd020 add sp, sp, #0x20
00920 e89d6000 ldmia sp, {sp, lr}
00924 e12fff1e bx lr
00928 |$L32506|
00928 00000000 DCD |g_szPCIHardDisk|
0092c 00000000 DCD |g_szPCICDRomDisk|
00930 00000000 DCD |??_C@_1HK@KNLNCEBN@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAI?$AAn?$AAi?$AAt@|
00934 00000000 DCD |dpCurSettings|
00938 |$M32503|
ENDP ; |?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z|, CPCIDisk::Init
EXPORT |??_C@_1GI@HMCPGEHO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAM?$AAa?$AAi?$AAn@| [ DATA ] ; `string'
IMPORT |?MainIoctl@CDisk@@UAAKPAU_IOREQ@@@Z| ; CDisk::MainIoctl
00048 AREA |.pdata|, PDATA
|$T32514| DCD |$L32513|
DCD 0x40002204
00000 AREA |.rdata| { |??_C@_1GI@HMCPGEHO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAM?$AAa?$AAi?$AAn@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1GI@HMCPGEHO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAM?$AAa?$AAi?$AAn@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "C"
DCB 0x0, "P", 0x0, "C", 0x0, "I", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, ":", 0x0, ":", 0x0, "M", 0x0, "a", 0x0, "i"
DCB 0x0, "n", 0x0, "I", 0x0, "o", 0x0, "c", 0x0, "t", 0x0, "l"
DCB 0x0, ">", 0x0, " ", 0x0, "I", 0x0, "O", 0x0, "C", 0x0, "T"
DCB 0x0, "L", 0x0, "(", 0x0, "%", 0x0, "d", 0x0, ")", 0x0, ","
DCB 0x0, " ", 0x0, "d", 0x0, "e", 0x0, "v", 0x0, "i", 0x0, "c"
DCB 0x0, "e", 0x0, "(", 0x0, "%", 0x0, "d", 0x0, ")", 0x0, " "
DCB 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Odt
00938 AREA |.text|, CODE, ARM
00938 |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z| PROC ; CPCIDisk::MainIoctl
; 314 : {
00938 |$L32513|
00938 e1a0c00d mov r12, sp
0093c e92d0003 stmdb sp!, {r0, r1}
00940 e92d5000 stmdb sp!, {r12, lr}
00944 e24dd00c sub sp, sp, #0xC
00948 |$M32511|
; 315 : DEBUGMSG(ZONE_IOCTL, (_T(
; 316 : "Atapi!CPCIDisk::MainIoctl> IOCTL(%d), device(%d) \r\n"
; 317 : ), pIOReq->dwCode, m_dwDeviceId));
00948 e59f306c ldr r3, [pc, #0x6C]
0094c e5933440 ldr r3, [r3, #0x440]
00950 e3130040 tst r3, #0x40
00954 0a00000b beq |$L32508|
00958 e59d3014 ldr r3, [sp, #0x14]
0095c e2833b01 add r3, r3, #1, 22
00960 e2833088 add r3, r3, #0x88
00964 e5932000 ldr r2, [r3]
00968 e59d3018 ldr r3, [sp, #0x18]
0096c e2833014 add r3, r3, #0x14
00970 e5931000 ldr r1, [r3]
00974 e59f003c ldr r0, [pc, #0x3C]
00978 eb000000 bl NKDbgPrintfW
0097c e3a03001 mov r3, #1
00980 e58d3004 str r3, [sp, #4]
00984 ea000001 b |$L32509|
00988 |$L32508|
00988 e3a03000 mov r3, #0
0098c e58d3004 str r3, [sp, #4]
00990 |$L32509|
; 318 :
; 319 : return CDisk::MainIoctl(pIOReq);
00990 e59d1018 ldr r1, [sp, #0x18]
00994 e59d0014 ldr r0, [sp, #0x14]
00998 eb000000 bl |?MainIoctl@CDisk@@UAAKPAU_IOREQ@@@Z|
0099c e58d0008 str r0, [sp, #8]
009a0 e59d3008 ldr r3, [sp, #8]
009a4 e58d3000 str r3, [sp]
009a8 e59d0000 ldr r0, [sp]
; 320 : }
009ac e28dd00c add sp, sp, #0xC
009b0 e89d6000 ldmia sp, {sp, lr}
009b4 e12fff1e bx lr
009b8 |$L32515|
009b8 00000000 DCD |??_C@_1GI@HMCPGEHO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAM?$AAa?$AAi?$AAn@|
009bc 00000000 DCD |dpCurSettings|
009c0 |$M32512|
ENDP ; |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z|, CPCIDisk::MainIoctl
EXPORT |??_C@_1JM@CNOKLOGO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAC?$AAo?$AAn?$AAf@| [ DATA ] ; `string'
EXPORT |??_C@_1LC@MNNIOALB@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAC?$AAo?$AAn?$AAf@| [ DATA ] ; `string'
IMPORT |CreateEventW|
IMPORT |InterruptInitialize|
00050 AREA |.pdata|, PDATA
|$T32525| DCD |$L32524|
DCD 0x40008904
00000 AREA |.rdata| { |??_C@_1LC@MNNIOALB@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAC?$AAo?$AAn?$AAf@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1LC@MNNIOALB@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAC?$AAo?$AAn?$AAf@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "C"
DCB 0x0, "P", 0x0, "C", 0x0, "I", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, ":", 0x0, ":", 0x0, "C", 0x0, "o", 0x0, "n"
DCB 0x0, "f", 0x0, "i", 0x0, "g", 0x0, "P", 0x0, "o", 0x0, "r"
DCB 0x0, "t", 0x0, ">", 0x0, " ", 0x0, "F", 0x0, "a", 0x0, "i"
DCB 0x0, "l", 0x0, "e", 0x0, "d", 0x0, " ", 0x0, "t", 0x0, "o"
DCB 0x0, " ", 0x0, "i", 0x0, "n", 0x0, "i", 0x0, "t", 0x0, "i"
DCB 0x0, "a", 0x0, "l", 0x0, "i", 0x0, "z", 0x0, "e", 0x0, " "
DCB 0x0, "i", 0x0, "n", 0x0, "t", 0x0, "e", 0x0, "r", 0x0, "r"
DCB 0x0, "u", 0x0, "p", 0x0, "t", 0x0, "(", 0x0, "S", 0x0, "y"
DCB 0x0, "s", 0x0, "I", 0x0, "n", 0x0, "t", 0x0, "r", 0x0, "("
DCB 0x0, "%", 0x0, "d", 0x0, ")", 0x0, ")", 0x0, " ", 0x0, "f"
DCB 0x0, "o", 0x0, "r", 0x0, " ", 0x0, "d", 0x0, "e", 0x0, "v"
DCB 0x0, "i", 0x0, "c", 0x0, "e", 0x0, "(", 0x0, "%", 0x0, "d"
DCB 0x0, ")", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1JM@CNOKLOGO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAC?$AAo?$AAn?$AAf@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1JM@CNOKLOGO@?$AAA?$AAt?$AAa?$AAp?$AAi?$AA?$CB?$AAC?$AAP?$AAC?$AAI?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAC?$AAo?$AAn?$AAf@| DCB "A"
DCB 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i", 0x0, "!", 0x0, "C"
DCB 0x0, "P", 0x0, "C", 0x0, "I", 0x0, "D", 0x0, "i", 0x0, "s"
DCB 0x0, "k", 0x0, ":", 0x0, ":", 0x0, "C", 0x0, "o", 0x0, "n"
DCB 0x0, "f", 0x0, "i", 0x0, "g", 0x0, "P", 0x0, "o", 0x0, "r"
DCB 0x0, "t", 0x0, ">", 0x0, " ", 0x0, "F", 0x0, "a", 0x0, "i"
DCB 0x0, "l", 0x0, "e", 0x0, "d", 0x0, " ", 0x0, "t", 0x0, "o"
DCB 0x0, " ", 0x0, "c", 0x0, "r", 0x0, "e", 0x0, "a", 0x0, "t"
DCB 0x0, "e", 0x0, " ", 0x0, "i", 0x0, "n", 0x0, "t", 0x0, "e"
DCB 0x0, "r", 0x0, "r", 0x0, "u", 0x0, "p", 0x0, "t", 0x0, " "
DCB 0x0, "e", 0x0, "v", 0x0, "e", 0x0, "n", 0x0, "t", 0x0, " "
DCB 0x0, "f", 0x0, "o", 0x0, "r", 0x0, " ", 0x0, "d", 0x0, "e"
DCB 0x0, "v", 0x0, "i", 0x0, "c", 0x0, "e", 0x0, "(", 0x0, "%"
DCB 0x0, "d", 0x0, ")", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Odt
009c0 AREA |.text|, CODE, ARM
009c0 |?ConfigPort@CPCIDisk@@UAAHXZ| PROC ; CPCIDisk::ConfigPort
; 333 : {
009c0 |$L32524|
009c0 e1a0c00d mov r12, sp
009c4 e92d0001 stmdb sp!, {r0}
009c8 e92d5000 stmdb sp!, {r12, lr}
009cc e24dd014 sub sp, sp, #0x14
009d0 |$M32522|
; 334 : m_pATAReg = (PBYTE)m_pPort->m_dwRegBase;
009d0 e59d301c ldr r3, [sp, #0x1C]
009d4 e283303c add r3, r3, #0x3C
009d8 e5933000 ldr r3, [r3]
009dc e2831020 add r1, r3, #0x20
009e0 e59d301c ldr r3, [sp, #0x1C]
009e4 e2832030 add r2, r3, #0x30
009e8 e5913000 ldr r3, [r1]
009ec e5823000 str r3, [r2]
; 335 : m_pATARegAlt = (PBYTE)m_pPort->m_dwRegAlt;
009f0 e59d301c ldr r3, [sp, #0x1C]
009f4 e283303c add r3, r3, #0x3C
009f8 e5933000 ldr r3, [r3]
009fc e2831024 add r1, r3, #0x24
00a00 e59d301c ldr r3, [sp, #0x1C]
00a04 e2832034 add r2, r3, #0x34
00a08 e5913000 ldr r3, [r1]
00a0c e5823000 str r3, [r2]
; 336 : m_pBMCommand = (PBYTE)m_pPort->m_dwBMR;
00a10 e59d301c ldr r3, [sp, #0x1C]
00a14 e283303c add r3, r3, #0x3C
00a18 e5933000 ldr r3, [r3]
00a1c e2831028 add r1, r3, #0x28
00a20 e59d301c ldr r3, [sp, #0x1C]
00a24 e2833c07 add r3, r3, #7, 24
00a28 e283206c add r2, r3, #0x6C
00a2c e5913000 ldr r3, [r1]
00a30 e5823000 str r3, [r2]
; 337 :
; 338 : // this function is called for the master and slave on this channel; if
; 339 : // this has already been called, then exit
; 340 : if (m_pPort->m_hIRQEvent) {
00a34 e59d301c ldr r3, [sp, #0x1C]
00a38 e283303c add r3, r3, #0x3C
00a3c e5933000 ldr r3, [r3]
00a40 e2833030 add r3, r3, #0x30
00a44 e5933000 ldr r3, [r3]
00a48 e3530000 cmp r3, #0
00a4c 0a000009 beq |$L32118|
; 341 : m_dwDeviceFlags |= DFLAGS_DEVICE_INITIALIZED;
00a50 e59d301c ldr r3, [sp, #0x1C]
00a54 e2833e69 add r3, r3, #0x69, 28
00a58 e5933000 ldr r3, [r3]
00a5c e3832101 orr r2, r3, #1, 2
00a60 e59d301c ldr r3, [sp, #0x1C]
00a64 e2833e69 add r3, r3, #0x69, 28
00a68 e5832000 str r2, [r3]
; 342 : return TRUE;
00a6c e3a03001 mov r3, #1
00a70 e58d3000 str r3, [sp]
00a74 ea000053 b |$L32114|
00a78 |$L32118|
; 343 : }
; 344 :
; 345 : // create interrupt event
; 346 : if (NULL == (m_pPort->m_hIRQEvent = CreateEvent(NULL, FALSE, FALSE, NULL))) {
00a78 e3a03000 mov r3, #0
00a7c e3a02000 mov r2, #0
00a80 e3a01000 mov r1, #0
00a84 e3a00000 mov r0, #0
00a88 eb000000 bl CreateEventW
00a8c e58d0004 str r0, [sp, #4]
00a90 e59d301c ldr r3, [sp, #0x1C]
00a94 e283303c add r3, r3, #0x3C
00a98 e5933000 ldr r3, [r3]
00a9c e2832030 add r2, r3, #0x30
00aa0 e59d3004 ldr r3, [sp, #4]
00aa4 e5823000 str r3, [r2]
00aa8 e59d301c ldr r3, [sp, #0x1C]
00aac e283303c add r3, r3, #0x3C
00ab0 e5933000 ldr r3, [r3]
00ab4 e2833030 add r3, r3, #0x30
00ab8 e5933000 ldr r3, [r3]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -