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

📄 cdio.cod

📁 2440 CE500BSP包, EBOOT可用DEBUG版调试
💻 COD
📖 第 1 页 / 共 5 页
字号:
  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 + -