📄 cdio.cod
字号:
00900 1a000002 bne |$L32173|
; 161 : return FALSE;
00904 e3a03000 mov r3, #0
00908 e58d3004 str r3, [sp, #4]
0090c ea000001 b |$L32167|
00910 |$L32173|
; 162 : return TRUE;
00910 e3a03001 mov r3, #1
00914 e58d3004 str r3, [sp, #4]
00918 |$L32167|
; 161 : return FALSE;
00918 e59d0004 ldr r0, [sp, #4]
; 163 : }
0091c e28dd010 add sp, sp, #0x10
00920 e89d6000 ldmia sp, {sp, lr}
00924 e12fff1e bx lr
00928 |$M32744|
ENDP ; |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|, CPCIDiskAndCD::AtapiIsUnitReadyEx
EXPORT |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| ; CPCIDiskAndCD::SetupCdRomRead
IMPORT |memset|
00010 AREA |.pdata|, PDATA
|$T32754| DCD |$L32753|
DCD 0x40006e04
; Function compile flags: /Odt
00928 AREA |.text|, CODE, ARM
00928 |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| PROC ; CPCIDiskAndCD::SetupCdRomRead
; 166 : {
00928 |$L32753|
00928 e1a0c00d mov r12, sp
0092c e92d000f stmdb sp!, {r0 - r3}
00930 e92d5000 stmdb sp!, {r12, lr}
00934 e24dd00c sub sp, sp, #0xC
00938 |$M32751|
; 167 : BOOL fIsDVD = (m_dwDeviceFlags & DFLAGS_DEVICE_ISDVD);
00938 e59d3014 ldr r3, [sp, #0x14]
0093c e2833e69 add r3, r3, #0x69, 28
00940 e5933000 ldr r3, [r3]
00944 e2033040 and r3, r3, #0x40
00948 e58d3000 str r3, [sp]
; 168 :
; 169 : memset( pCmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));
0094c e3a02014 mov r2, #0x14
00950 e3a01000 mov r1, #0
00954 e59d0024 ldr r0, [sp, #0x24]
00958 eb000000 bl memset
; 170 :
; 171 :
; 172 : /**** Atapi Packet *****
; 173 : Byte 0 - Cmd/OpCode
; 174 : Byte 1 - N/A
; 175 : Byte 2 - Logical Block (MSB)
; 176 : Byte 2 - Logical Block
; 177 : Byte 2 - Logical Block
; 178 : Byte 2 - Logical Block (LSB)
; 179 : Byte 6 - Reserved
; 180 : Byte 7 - DataLength (MSB)
; 181 : Byte 8 - DataLength (LSB)
; 182 : Byte 9 - Control Byte
; 183 : ****** Atapi Packet ****/
; 184 : pCmdPkt->Byte_1 = 0x00;
0095c e59d3024 ldr r3, [sp, #0x24]
00960 e2832001 add r2, r3, #1
00964 e3a03000 mov r3, #0
00968 e5c23000 strb r3, [r2]
; 185 : pCmdPkt->Byte_2 = LBA_MSB(&dwLBAAddr);
0096c e59d3024 ldr r3, [sp, #0x24]
00970 e2832002 add r2, r3, #2
00974 e5dd301f ldrb r3, [sp, #0x1F]
00978 e5c23000 strb r3, [r2]
; 186 : pCmdPkt->Byte_3 = LBA_3rdLSB(&dwLBAAddr);
0097c e59d3024 ldr r3, [sp, #0x24]
00980 e2832003 add r2, r3, #3
00984 e5dd301e ldrb r3, [sp, #0x1E]
00988 e5c23000 strb r3, [r2]
; 187 : pCmdPkt->Byte_4 = LBA_2ndLSB(&dwLBAAddr);
0098c e59d3024 ldr r3, [sp, #0x24]
00990 e2832004 add r2, r3, #4
00994 e5dd301d ldrb r3, [sp, #0x1D]
00998 e5c23000 strb r3, [r2]
; 188 : pCmdPkt->Byte_5 = LBA_LSB(&dwLBAAddr);
0099c e59d3024 ldr r3, [sp, #0x24]
009a0 e2832005 add r2, r3, #5
009a4 e5dd301c ldrb r3, [sp, #0x1C]
009a8 e5c23000 strb r3, [r2]
; 189 : if (fIsDVD && !bRawMode) {
009ac e59d3000 ldr r3, [sp]
009b0 e3530000 cmp r3, #0
009b4 0a00001f beq |$L32191|
009b8 e59d3018 ldr r3, [sp, #0x18]
009bc e3530000 cmp r3, #0
009c0 1a00001c bne |$L32191|
; 190 : pCmdPkt->Opcode = ATAPI_PACKET_CMD_READ_12;
009c4 e59d2024 ldr r2, [sp, #0x24]
009c8 e3a030a8 mov r3, #0xA8
009cc e5c23000 strb r3, [r2]
; 191 : pCmdPkt->Byte_6 = (BYTE)( dwTransferLength >> 24);
009d0 e59d3020 ldr r3, [sp, #0x20]
009d4 e1a03c23 mov r3, r3, lsr #24
009d8 e20320ff and r2, r3, #0xFF
009dc e59d3024 ldr r3, [sp, #0x24]
009e0 e2833006 add r3, r3, #6
009e4 e5c32000 strb r2, [r3]
; 192 : pCmdPkt->Byte_7 = (BYTE)( (dwTransferLength & 0x00ff0000) >> 16);
009e8 e59d3020 ldr r3, [sp, #0x20]
009ec e20338ff and r3, r3, #0xFF, 16
009f0 e1a03823 mov r3, r3, lsr #16
009f4 e20320ff and r2, r3, #0xFF
009f8 e59d3024 ldr r3, [sp, #0x24]
009fc e2833007 add r3, r3, #7
00a00 e5c32000 strb r2, [r3]
; 193 : pCmdPkt->Byte_8 = (BYTE)( (dwTransferLength & 0x0000ff00) >> 8);
00a04 e59d3020 ldr r3, [sp, #0x20]
00a08 e2033cff and r3, r3, #0xFF, 24
00a0c e1a03423 mov r3, r3, lsr #8
00a10 e20320ff and r2, r3, #0xFF
00a14 e59d3024 ldr r3, [sp, #0x24]
00a18 e2833008 add r3, r3, #8
00a1c e5c32000 strb r2, [r3]
; 194 : pCmdPkt->Byte_9 = (BYTE)( dwTransferLength);
00a20 e59d3020 ldr r3, [sp, #0x20]
00a24 e20320ff and r2, r3, #0xFF
00a28 e59d3024 ldr r3, [sp, #0x24]
00a2c e2833009 add r3, r3, #9
00a30 e5c32000 strb r2, [r3]
; 195 : } else {
00a34 ea00001f b |$L32196|
00a38 |$L32191|
; 196 : pCmdPkt->Opcode = bRawMode ? ATAPI_PACKET_CMD_READ_CD : ATAPI_PACKET_CMD_READ;
00a38 e59d3018 ldr r3, [sp, #0x18]
00a3c e3530000 cmp r3, #0
00a40 0a000002 beq |$L32748|
00a44 e3a030be mov r3, #0xBE
00a48 e58d3008 str r3, [sp, #8]
00a4c ea000001 b |$L32749|
00a50 |$L32748|
00a50 e3a03028 mov r3, #0x28
00a54 e58d3008 str r3, [sp, #8]
00a58 |$L32749|
00a58 e59d3008 ldr r3, [sp, #8]
00a5c e20320ff and r2, r3, #0xFF
00a60 e59d3024 ldr r3, [sp, #0x24]
00a64 e5c32000 strb r2, [r3]
; 197 : pCmdPkt->Byte_6 = 0x00; // Reserved
00a68 e59d3024 ldr r3, [sp, #0x24]
00a6c e2832006 add r2, r3, #6
00a70 e3a03000 mov r3, #0
00a74 e5c23000 strb r3, [r2]
; 198 : pCmdPkt->Byte_7 = (BYTE)( (dwTransferLength & 0x0000ff00) >> 8);
00a78 e59d3020 ldr r3, [sp, #0x20]
00a7c e2033cff and r3, r3, #0xFF, 24
00a80 e1a03423 mov r3, r3, lsr #8
00a84 e20320ff and r2, r3, #0xFF
00a88 e59d3024 ldr r3, [sp, #0x24]
00a8c e2833007 add r3, r3, #7
00a90 e5c32000 strb r2, [r3]
; 199 : pCmdPkt->Byte_8 = (BYTE)( dwTransferLength);
00a94 e59d3020 ldr r3, [sp, #0x20]
00a98 e20320ff and r2, r3, #0xFF
00a9c e59d3024 ldr r3, [sp, #0x24]
00aa0 e2833008 add r3, r3, #8
00aa4 e5c32000 strb r2, [r3]
; 200 : pCmdPkt->Byte_9 = 0x10;
00aa8 e59d3024 ldr r3, [sp, #0x24]
00aac e2832009 add r2, r3, #9
00ab0 e3a03010 mov r3, #0x10
00ab4 e5c23000 strb r3, [r2]
00ab8 |$L32196|
; 201 : }
; 202 :
; 203 : pCmdPkt->Byte_10 = 0;
00ab8 e59d3024 ldr r3, [sp, #0x24]
00abc e283200a add r2, r3, #0xA
00ac0 e3a03000 mov r3, #0
00ac4 e5c23000 strb r3, [r2]
; 204 : return ERROR_SUCCESS;
00ac8 e3a03000 mov r3, #0
00acc e58d3004 str r3, [sp, #4]
00ad0 e59d0004 ldr r0, [sp, #4]
; 205 : }
00ad4 e28dd00c add sp, sp, #0xC
00ad8 e89d6000 ldmia sp, {sp, lr}
00adc e12fff1e bx lr
00ae0 |$M32752|
ENDP ; |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z|, CPCIDiskAndCD::SetupCdRomRead
EXPORT |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CPCIDiskAndCD::AtapiSendCommand
EXPORT |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CPCIDiskAndCD::AtapiReceiveData
EXPORT |??_C@_1GK@KABCJNGE@?$AAd?$AA?3?$AA?2?$AAw?$AAi?$AAn?$AAc?$AAe?$AA5?$AA0?$AA0?$AA?2?$AAp?$AAl?$AAa?$AAt?$AAf?$AAo?$AAr?$AAm@| [ DATA ] ; `string'
EXPORT |??_C@_1FK@FNONLNGN@?$AA?$CF?$AAs?$AA?3?$AA?5?$AAD?$AAE?$AAB?$AAU?$AAG?$AAC?$AAH?$AAK?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?5@| [ DATA ] ; `string'
EXPORT |??_C@_1IE@OEKPKEOD@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AAR?$AAe?$AAa?$AAd?$AAC?$AAd?$AAR?$AAo?$AAm?$AA?5?$AAA?$AAd?$AAd?$AAr@| [ DATA ] ; `string'
EXPORT |?GetBaseStatus@CDisk@@QAAEXZ| ; CDisk::GetBaseStatus
IMPORT |?IsDMASupported@CDisk@@QAAHXZ| ; CDisk::IsDMASupported
IMPORT |memcpy|
00018 AREA |.pdata|, PDATA
|$T32765| DCD |$L32764|
DCD 0x40012e04
00000 AREA |.rdata| { |??_C@_1IE@OEKPKEOD@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AAR?$AAe?$AAa?$AAd?$AAC?$AAd?$AAR?$AAo?$AAm?$AA?5?$AAA?$AAd?$AAd?$AAr@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1IE@OEKPKEOD@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AAR?$AAe?$AAa?$AAd?$AAC?$AAd?$AAR?$AAo?$AAm?$AA?5?$AAA?$AAd?$AAd?$AAr@| DCB "A"
DCB 0x0, "T", 0x0, "A", 0x0, "P", 0x0, "I", 0x0, ":", 0x0, "R"
DCB 0x0, "e", 0x0, "a", 0x0, "d", 0x0, "C", 0x0, "d", 0x0, "R"
DCB 0x0, "o", 0x0, "m", 0x0, " ", 0x0, "A", 0x0, "d", 0x0, "d"
DCB 0x0, "r", 0x0, "e", 0x0, "s", 0x0, "s", 0x0, "=", 0x0, "%"
DCB 0x0, "l", 0x0, "d", 0x0, " ", 0x0, "M", 0x0, "o", 0x0, "d"
DCB 0x0, "e", 0x0, "=", 0x0, "%", 0x0, "0", 0x0, "2", 0x0, "X"
DCB 0x0, " ", 0x0, "L", 0x0, "e", 0x0, "n", 0x0, "g", 0x0, "t"
DCB 0x0, "h", 0x0, "=", 0x0, "%", 0x0, "l", 0x0, "d", 0x0, " "
DCB 0x0, "T", 0x0, "r", 0x0, "a", 0x0, "c", 0x0, "k", 0x0, "M"
DCB 0x0, "o", 0x0, "d", 0x0, "e", 0x0, "=", 0x0, "%", 0x0, "0"
DCB 0x0, "2", 0x0, "X", 0x0, 0xd, 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1FK@FNONLNGN@?$AA?$CF?$AAs?$AA?3?$AA?5?$AAD?$AAE?$AAB?$AAU?$AAG?$AAC?$AAH?$AAK?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?5@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1FK@FNONLNGN@?$AA?$CF?$AAs?$AA?3?$AA?5?$AAD?$AAE?$AAB?$AAU?$AAG?$AAC?$AAH?$AAK?$AA?5?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?5@| DCB "%"
DCB 0x0, "s", 0x0, ":", 0x0, " ", 0x0, "D", 0x0, "E", 0x0, "B"
DCB 0x0, "U", 0x0, "G", 0x0, "C", 0x0, "H", 0x0, "K", 0x0, " "
DCB 0x0, "f", 0x0, "a", 0x0, "i", 0x0, "l", 0x0, "e", 0x0, "d"
DCB 0x0, " ", 0x0, "i", 0x0, "n", 0x0, " ", 0x0, "f", 0x0, "i"
DCB 0x0, "l", 0x0, "e", 0x0, " ", 0x0, "%", 0x0, "s", 0x0, " "
DCB 0x0, "a", 0x0, "t", 0x0, " ", 0x0, "l", 0x0, "i", 0x0, "n"
DCB 0x0, "e", 0x0, " ", 0x0, "%", 0x0, "d", 0x0, " ", 0x0, 0xd
DCB 0x0, 0xa, 0x0, 0x0, 0x0 ; `string'
00000 AREA |.rdata| { |??_C@_1GK@KABCJNGE@?$AAd?$AA?3?$AA?2?$AAw?$AAi?$AAn?$AAc?$AAe?$AA5?$AA0?$AA0?$AA?2?$AAp?$AAl?$AAa?$AAt?$AAf?$AAo?$AAr?$AAm@| }, DATA, READONLY, SELECTION=2 ; comdat any
|??_C@_1GK@KABCJNGE@?$AAd?$AA?3?$AA?2?$AAw?$AAi?$AAn?$AAc?$AAe?$AA5?$AA0?$AA0?$AA?2?$AAp?$AAl?$AAa?$AAt?$AAf?$AAo?$AAr?$AAm@| DCB "d"
DCB 0x0, ":", 0x0, "\\", 0x0, "w", 0x0, "i", 0x0, "n", 0x0, "c"
DCB 0x0, "e", 0x0, "5", 0x0, "0", 0x0, "0", 0x0, "\\", 0x0, "p"
DCB 0x0, "l", 0x0, "a", 0x0, "t", 0x0, "f", 0x0, "o", 0x0, "r"
DCB 0x0, "m", 0x0, "\\", 0x0, "s", 0x0, "m", 0x0, "d", 0x0, "k"
DCB 0x0, "2", 0x0, "4", 0x0, "4", 0x0, "0", 0x0, "\\", 0x0, "d"
DCB 0x0, "r", 0x0, "i", 0x0, "v", 0x0, "e", 0x0, "r", 0x0, "s"
DCB 0x0, "\\", 0x0, "a", 0x0, "t", 0x0, "a", 0x0, "p", 0x0, "i"
DCB 0x0, "\\", 0x0, "c", 0x0, "d", 0x0, "i", 0x0, "o", 0x0, "."
DCB 0x0, "c", 0x0, "p", 0x0, "p", 0x0, 0x0, 0x0 ; `string'
; Function compile flags: /Odt
00ae0 AREA |.text|, CODE, ARM
00ae0 |?ReadCdRom@CPCIDiskAndCD@@QAAKPAUCDROM_READ@@PAK@Z| PROC ; CPCIDiskAndCD::ReadCdRom
; 208 : {
00ae0 |$L32764|
00ae0 e1a0c00d mov r12, sp
00ae4 e92d0007 stmdb sp!, {r0 - r2}
00ae8 e92d5010 stmdb sp!, {r4, r12, lr}
00aec e24dd058 sub sp, sp, #0x58
00af0 |$M32762|
; 209 : ATAPI_COMMAND_PACKET CmdPkt;
; 210 : CDROM_ADDR CurAddr;
; 211 : WORD wSectorSize;
; 212 : DWORD dwError=ERROR_SUCCESS;
00af0 e3a03000 mov r3, #0
00af4 e58d3034 str r3, [sp, #0x34]
; 213 : PSGX_BUF pSgBuf;
; 214 :
; 215 : GetBaseStatus(); // Clear Interrupt if it is already set
00af8 e59d0064 ldr r0, [sp, #0x64]
00afc eb000000 bl |?GetBaseStatus@CDisk@@QAAEXZ|
; 216 :
; 217 : CurAddr = pReadInfo->StartAddr;
00b00 e59d1068 ldr r1, [sp, #0x68]
00b04 e28d0010 add r0, sp, #0x10
00b08 e3a02008 mov r2, #8
00b0c eb000000 bl memcpy
; 218 :
; 219 : // The request must either be in MSF format or LBA format
; 220 : DEBUGCHK(pReadInfo->StartAddr.Mode == CDROM_ADDR_MSF || pReadInfo->StartAddr.Mode == CDROM_ADDR_LBA);
00b10 e59d1068 ldr r1, [sp, #0x68]
00b14 e5d13003 ldrb r3, [r1, #3]
00b18 e1a02403 mov r2, r3, lsl #8
00b1c e5d13002 ldrb r3, [r1, #2]
00b20 e1833002 orr r3, r3, r2
00b24 e1a02403 mov r2, r3, lsl #8
00b28 e5d13001 ldrb r3, [r1, #1]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -