📄 cdio.cod
字号:
00b2c e1833002 orr r3, r3, r2
00b30 e1a02403 mov r2, r3, lsl #8
00b34 e5d13000 ldrb r3, [r1]
00b38 e1833002 orr r3, r3, r2
00b3c e3530001 cmp r3, #1
00b40 0a000015 beq |$L32756|
00b44 e59d1068 ldr r1, [sp, #0x68]
00b48 e5d13003 ldrb r3, [r1, #3]
00b4c e1a02403 mov r2, r3, lsl #8
00b50 e5d13002 ldrb r3, [r1, #2]
00b54 e1833002 orr r3, r3, r2
00b58 e1a02403 mov r2, r3, lsl #8
00b5c e5d13001 ldrb r3, [r1, #1]
00b60 e1833002 orr r3, r3, r2
00b64 e1a02403 mov r2, r3, lsl #8
00b68 e5d13000 ldrb r3, [r1]
00b6c e1833002 orr r3, r3, r2
00b70 e3530000 cmp r3, #0
00b74 0a000008 beq |$L32756|
00b78 e3a030dc mov r3, #0xDC
00b7c e59f2410 ldr r2, [pc, #0x410]
00b80 e59f1404 ldr r1, [pc, #0x404]
00b84 e59f0404 ldr r0, [pc, #0x404]
00b88 eb000000 bl NKDbgPrintfW
00b8c e6000010 DCD 0xe6000010
00b90 e3a03000 mov r3, #0
00b94 e58d303c str r3, [sp, #0x3C]
00b98 ea000001 b |$L32757|
00b9c |$L32756|
00b9c e3a03001 mov r3, #1
00ba0 e58d303c str r3, [sp, #0x3C]
00ba4 |$L32757|
; 221 :
; 222 : DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:ReadCdRom Address=%ld Mode=%02X Length=%ld TrackMode=%02X\r\n"), CurAddr.Address, CurAddr.Mode, pReadInfo->TransferLength, pReadInfo->TrackMode));
00ba4 e59f33e0 ldr r3, [pc, #0x3E0]
00ba8 e5933440 ldr r3, [r3, #0x440]
00bac e2032008 and r2, r3, #8
00bb0 e59f33d4 ldr r3, [pc, #0x3D4]
00bb4 e5933440 ldr r3, [r3, #0x440]
00bb8 e2033080 and r3, r3, #0x80
00bbc e1923003 orrs r3, r2, r3
00bc0 0a00001f beq |$L32758|
00bc4 e59d3068 ldr r3, [sp, #0x68]
00bc8 e2831010 add r1, r3, #0x10
00bcc e1d130d3 ldrsb r3, [r1, #3]
00bd0 e1a02403 mov r2, r3, lsl #8
00bd4 e5d13002 ldrb r3, [r1, #2]
00bd8 e1833002 orr r3, r3, r2
00bdc e1a02403 mov r2, r3, lsl #8
00be0 e5d13001 ldrb r3, [r1, #1]
00be4 e1833002 orr r3, r3, r2
00be8 e1a02403 mov r2, r3, lsl #8
00bec e5d13000 ldrb r3, [r1]
00bf0 e1833002 orr r3, r3, r2
00bf4 e58d3000 str r3, [sp]
00bf8 e59d3068 ldr r3, [sp, #0x68]
00bfc e2831008 add r1, r3, #8
00c00 e5d13003 ldrb r3, [r1, #3]
00c04 e1a02403 mov r2, r3, lsl #8
00c08 e5d13002 ldrb r3, [r1, #2]
00c0c e1833002 orr r3, r3, r2
00c10 e1a02403 mov r2, r3, lsl #8
00c14 e5d13001 ldrb r3, [r1, #1]
00c18 e1833002 orr r3, r3, r2
00c1c e1a02403 mov r2, r3, lsl #8
00c20 e5d13000 ldrb r3, [r1]
00c24 e1833002 orr r3, r3, r2
00c28 e59d2010 ldr r2, [sp, #0x10]
00c2c e59d1014 ldr r1, [sp, #0x14]
00c30 e59f0350 ldr r0, [pc, #0x350]
00c34 eb000000 bl NKDbgPrintfW
00c38 e3a03001 mov r3, #1
00c3c e58d3040 str r3, [sp, #0x40]
00c40 ea000001 b |$L32759|
00c44 |$L32758|
00c44 e3a03000 mov r3, #0
00c48 e58d3040 str r3, [sp, #0x40]
00c4c |$L32759|
; 223 :
; 224 : // If in MSF format then convert it to LBA
; 225 : if (CurAddr.Mode == CDROM_ADDR_MSF) {
00c4c e59d3010 ldr r3, [sp, #0x10]
00c50 e3530001 cmp r3, #1
00c54 1a00000d bne |$L32215|
; 226 : CDROM_MSF_TO_LBA(&CurAddr);
00c58 e3a03000 mov r3, #0
00c5c e58d3010 str r3, [sp, #0x10]
00c60 e5dd3016 ldrb r3, [sp, #0x16]
00c64 e1a01003 mov r1, r3
00c68 e3a0303c mov r3, #0x3C
00c6c e0020391 mul r2, r1, r3
00c70 e5dd3015 ldrb r3, [sp, #0x15]
00c74 e0821003 add r1, r2, r3
00c78 e3a0304b mov r3, #0x4B
00c7c e0020391 mul r2, r1, r3
00c80 e5dd3014 ldrb r3, [sp, #0x14]
00c84 e0823003 add r3, r2, r3
00c88 e2433096 sub r3, r3, #0x96
00c8c e58d3014 str r3, [sp, #0x14]
00c90 |$L32215|
; 227 : }
; 228 : // Verify that the transfer count is not 0
; 229 : if ((pReadInfo->TransferLength == 0) ||
; 230 : (pReadInfo->sgcount == 0)) {
00c90 e59d3068 ldr r3, [sp, #0x68]
00c94 e2831008 add r1, r3, #8
00c98 e5d13003 ldrb r3, [r1, #3]
00c9c e1a02403 mov r2, r3, lsl #8
00ca0 e5d13002 ldrb r3, [r1, #2]
00ca4 e1833002 orr r3, r3, r2
00ca8 e1a02403 mov r2, r3, lsl #8
00cac e5d13001 ldrb r3, [r1, #1]
00cb0 e1833002 orr r3, r3, r2
00cb4 e1a02403 mov r2, r3, lsl #8
00cb8 e5d13000 ldrb r3, [r1]
00cbc e1833002 orr r3, r3, r2
00cc0 e3530000 cmp r3, #0
00cc4 0a00000d beq |$L32218|
00cc8 e59d3068 ldr r3, [sp, #0x68]
00ccc e2831014 add r1, r3, #0x14
00cd0 e5d13003 ldrb r3, [r1, #3]
00cd4 e1a02403 mov r2, r3, lsl #8
00cd8 e5d13002 ldrb r3, [r1, #2]
00cdc e1833002 orr r3, r3, r2
00ce0 e1a02403 mov r2, r3, lsl #8
00ce4 e5d13001 ldrb r3, [r1, #1]
00ce8 e1833002 orr r3, r3, r2
00cec e1a02403 mov r2, r3, lsl #8
00cf0 e5d13000 ldrb r3, [r1]
00cf4 e1833002 orr r3, r3, r2
00cf8 e3530000 cmp r3, #0
00cfc 1a000002 bne |$L32217|
00d00 |$L32218|
; 231 : return ERROR_INVALID_PARAMETER;
00d00 e3a03057 mov r3, #0x57
00d04 e58d3038 str r3, [sp, #0x38]
00d08 ea00009a b |$L32203|
00d0c |$L32217|
; 232 : }
; 233 :
; 234 : if( pReadInfo->bRawMode) {
00d0c e59d3068 ldr r3, [sp, #0x68]
00d10 e283100c add r1, r3, #0xC
00d14 e1d130d3 ldrsb r3, [r1, #3]
00d18 e1a02403 mov r2, r3, lsl #8
00d1c e5d13002 ldrb r3, [r1, #2]
00d20 e1833002 orr r3, r3, r2
00d24 e1a02403 mov r2, r3, lsl #8
00d28 e5d13001 ldrb r3, [r1, #1]
00d2c e1833002 orr r3, r3, r2
00d30 e1a02403 mov r2, r3, lsl #8
00d34 e5d13000 ldrb r3, [r1]
00d38 e1833002 orr r3, r3, r2
00d3c e3530000 cmp r3, #0
00d40 0a000002 beq |$L32219|
; 235 : wSectorSize = CDROM_RAW_SECTOR_SIZE;
00d44 e3a03e93 mov r3, #0x93, 28
00d48 e1cd31b8 strh r3, [sp, #0x18]
; 236 : } else {
00d4c ea000001 b |$L32220|
00d50 |$L32219|
; 237 : wSectorSize = CDROM_SECTOR_SIZE;
00d50 e3a03b02 mov r3, #2, 22
00d54 e1cd31b8 strh r3, [sp, #0x18]
00d58 |$L32220|
; 238 : }
; 239 :
; 240 : pSgBuf = &(pReadInfo->sglist[0]);
00d58 e59d3068 ldr r3, [sp, #0x68]
00d5c e2833018 add r3, r3, #0x18
00d60 e58d3008 str r3, [sp, #8]
; 241 :
; 242 : if (IsDMASupported()) {
00d64 e59d0064 ldr r0, [sp, #0x64]
00d68 eb000000 bl |?IsDMASupported@CDisk@@QAAHXZ|
00d6c e58d0044 str r0, [sp, #0x44]
00d70 e59d3044 ldr r3, [sp, #0x44]
00d74 e3530000 cmp r3, #0
00d78 0a00003a beq |$L32221|
; 243 : dwError = ReadCdRomDMA(CurAddr.Address.lba, pReadInfo->TransferLength, wSectorSize, pReadInfo->sgcount, pSgBuf);
00d7c e59d3008 ldr r3, [sp, #8]
00d80 e58d3004 str r3, [sp, #4]
00d84 e59d3068 ldr r3, [sp, #0x68]
00d88 e2831014 add r1, r3, #0x14
00d8c e5d13003 ldrb r3, [r1, #3]
00d90 e1a02403 mov r2, r3, lsl #8
00d94 e5d13002 ldrb r3, [r1, #2]
00d98 e1833002 orr r3, r3, r2
00d9c e1a02403 mov r2, r3, lsl #8
00da0 e5d13001 ldrb r3, [r1, #1]
00da4 e1833002 orr r3, r3, r2
00da8 e1a02403 mov r2, r3, lsl #8
00dac e5d13000 ldrb r3, [r1]
00db0 e1833002 orr r3, r3, r2
00db4 e58d3000 str r3, [sp]
00db8 e1dd31b8 ldrh r3, [sp, #0x18]
00dbc e59d2068 ldr r2, [sp, #0x68]
00dc0 e2820008 add r0, r2, #8
00dc4 e5d02003 ldrb r2, [r0, #3]
00dc8 e1a01402 mov r1, r2, lsl #8
00dcc e5d02002 ldrb r2, [r0, #2]
00dd0 e1822001 orr r2, r2, r1
00dd4 e1a01402 mov r1, r2, lsl #8
00dd8 e5d02001 ldrb r2, [r0, #1]
00ddc e1822001 orr r2, r2, r1
00de0 e1a01402 mov r1, r2, lsl #8
00de4 e5d02000 ldrb r2, [r0]
00de8 e1822001 orr r2, r2, r1
00dec e59d1014 ldr r1, [sp, #0x14]
00df0 e59d0064 ldr r0, [sp, #0x64]
00df4 e5900000 ldr r0, [r0]
00df8 e280e058 add lr, r0, #0x58
00dfc e59d0064 ldr r0, [sp, #0x64]
00e00 e59e4000 ldr r4, [lr]
00e04 e1a0e00f mov lr, pc
00e08 e12fff14 bx r4
00e0c e58d0048 str r0, [sp, #0x48]
00e10 e59d3048 ldr r3, [sp, #0x48]
00e14 e58d3034 str r3, [sp, #0x34]
; 244 : if (dwError == ERROR_SUCCESS) {
00e18 e59d3034 ldr r3, [sp, #0x34]
00e1c e3530000 cmp r3, #0
00e20 1a00000f bne |$L32222|
; 245 : *(pBytesReturned) = pReadInfo->TransferLength * wSectorSize;
00e24 e59d3068 ldr r3, [sp, #0x68]
00e28 e2830008 add r0, r3, #8
00e2c e1dd11b8 ldrh r1, [sp, #0x18]
00e30 e5d03003 ldrb r3, [r0, #3]
00e34 e1a02403 mov r2, r3, lsl #8
00e38 e5d03002 ldrb r3, [r0, #2]
00e3c e1833002 orr r3, r3, r2
00e40 e1a02403 mov r2, r3, lsl #8
00e44 e5d03001 ldrb r3, [r0, #1]
00e48 e1833002 orr r3, r3, r2
00e4c e1a02403 mov r2, r3, lsl #8
00e50 e5d03000 ldrb r3, [r0]
00e54 e1833002 orr r3, r3, r2
00e58 e0020193 mul r2, r3, r1
00e5c e59d306c ldr r3, [sp, #0x6C]
00e60 e5832000 str r2, [r3]
00e64 |$L32222|
; 246 : }
; 247 : } else {
00e64 ea000041 b |$L32223|
00e68 |$L32221|
; 248 : SetupCdRomRead(pReadInfo->bRawMode, CurAddr.Address.lba, pReadInfo->TransferLength, &CmdPkt);
00e68 e28d3020 add r3, sp, #0x20
00e6c e58d3000 str r3, [sp]
00e70 e59d3068 ldr r3, [sp, #0x68]
00e74 e2831008 add r1, r3, #8
00e78 e5d13003 ldrb r3, [r1, #3]
00e7c e1a02403 mov r2, r3, lsl #8
00e80 e5d13002 ldrb r3, [r1, #2]
00e84 e1833002 orr r3, r3, r2
00e88 e1a02403 mov r2, r3, lsl #8
00e8c e5d13001 ldrb r3, [r1, #1]
00e90 e1833002 orr r3, r3, r2
00e94 e1a02403 mov r2, r3, lsl #8
00e98 e5d13000 ldrb r3, [r1]
00e9c e1833002 orr r3, r3, r2
00ea0 e59d2014 ldr r2, [sp, #0x14]
00ea4 e59d1068 ldr r1, [sp, #0x68]
00ea8 e281e00c add lr, r1, #0xC
00eac e1de10d3 ldrsb r1, [lr, #3]
00eb0 e1a00401 mov r0, r1, lsl #8
00eb4 e5de1002 ldrb r1, [lr, #2]
00eb8 e1811000 orr r1, r1, r0
00ebc e1a00401 mov r0, r1, lsl #8
00ec0 e5de1001 ldrb r1, [lr, #1]
00ec4 e1811000 orr r1, r1, r0
00ec8 e1a00401 mov r0, r1, lsl #8
00ecc e5de1000 ldrb r1, [lr]
00ed0 e1811000 orr r1, r1, r0
00ed4 e59d0064 ldr r0, [sp, #0x64]
00ed8 eb000000 bl |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z|
; 249 :
; 250 : if (AtapiSendCommand(&CmdPkt, wSectorSize, IsDMASupported())) {
00edc e59d0064 ldr r0, [sp, #0x64]
00ee0 eb000000 bl |?IsDMASupported@CDisk@@QAAHXZ|
00ee4 e58d004c str r0, [sp, #0x4C]
00ee8 e59d304c ldr r3, [sp, #0x4C]
00eec e1dd21b8 ldrh r2, [sp, #0x18]
00ef0 e28d1020 add r1, sp, #0x20
00ef4 e59d0064 ldr r0, [sp, #0x64]
00ef8 eb000000 bl |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
00efc e58d0050 str r0, [sp, #0x50]
00f00 e59d3050 ldr r3, [sp, #0x50]
00f04 e3530000 cmp r3, #0
00f08 0a000016 beq |$L32224|
; 251 : if (!AtapiReceiveData(pSgBuf, pReadInfo->sgcount,pBytesReturned)) {
00f0c e59d306c ldr r3, [sp, #0x6C]
00f10 e59d2068 ldr r2, [sp, #0x68]
00f14 e2820014 add r0, r2, #0x14
00f18 e5d02003 ldrb r2, [r0, #3]
00f1c e1a01402 mov r1, r2, lsl #8
00f20 e5d02002 ldrb r2, [r0, #2]
00f24 e1822001 orr r2, r2, r1
00f28 e1a01402 mov r1, r2, lsl #8
00f2c e5d02001 ldrb r2, [r0, #1]
00f30 e1822001 orr r2, r2, r1
00f34 e1a01402 mov r1, r2, lsl #8
00f38 e5d02000 ldrb r2, [r0]
00f3c e1822001 orr r2, r2, r1
00f40 e59d1008 ldr r1, [sp, #8]
00f44 e59d0064 ldr r0, [sp, #0x64]
00f48 eb000000 bl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -