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

📄 cdio.cod

📁 s3c2410,WinCE的完整BSP包,包含bootloader,driver:atapi,CANBus,CS8900,LCD,flash,USB,touch,
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M32793|
  00004	e1a04000	 mov         r4, r0

; 243  :         return GetLowCount() + ((WORD)GetHighCount() << 8);

  00008	e5942030	 ldr         r2, [r4, #0x30]
  0000c	e5943018	 ldr         r3, [r4, #0x18]
  00010	e0820003	 add         r0, r2, r3
  00014	eb000000	 bl          READ_PORT_UCHAR
  00018	e5942030	 ldr         r2, [r4, #0x30]
  0001c	e594301c	 ldr         r3, [r4, #0x1C]
  00020	e1a04000	 mov         r4, r0
  00024	e0820003	 add         r0, r2, r3
  00028	eb000000	 bl          READ_PORT_UCHAR
  0002c	e0843400	 add         r3, r4, r0, lsl #8
  00030	e1a00803	 mov         r0, r3, lsl #16
  00034	e1a00820	 mov         r0, r0, lsr #16

; 244  :     }

  00038	e8bd4010	 ldmia       sp!, {r4, lr}
  0003c	e12fff1e	 bx          lr
  00040		 |$M32794|

			 ENDP  ; |?GetCount@CDisk@@QAAGXZ|, CDisk::GetCount

	EXPORT	|?SelectDevice@CDisk@@QAAXXZ|		; CDisk::SelectDevice

  00000			 AREA	 |.text| { |?SelectDevice@CDisk@@QAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$?SelectDevice@CDisk@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?SelectDevice@CDisk@@QAAXXZ| } ; comdat associative
|$T32806| DCD	|$L32805|
	DCD	0x40000c01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?SelectDevice@CDisk@@QAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |?SelectDevice@CDisk@@QAAXXZ| PROC	; CDisk::SelectDevice

; 246  :     inline void SelectDevice() {

  00000		 |$L32805|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M32803|

; 247  :         ATA_WRITE_BYTE(m_pATAReg + m_dwDrvHeadOffset, (m_dwDevice == 0 ) ? ATA_HEAD_DRIVE_1 : ATA_HEAD_DRIVE_2);

  00004	e5903484	 ldr         r3, [r0, #0x484]
  00008	e5902030	 ldr         r2, [r0, #0x30]
  0000c	e3530000	 cmp         r3, #0
  00010	e5903020	 ldr         r3, [r0, #0x20]
  00014	03a010a0	 moveq       r1, #0xA0
  00018	13a010b0	 movne       r1, #0xB0
  0001c	e20110ff	 and         r1, r1, #0xFF
  00020	e0820003	 add         r0, r2, r3
  00024	eb000000	 bl          WRITE_PORT_UCHAR

; 248  :     }

  00028	e49de004	 ldr         lr, [sp], #4
  0002c	e12fff1e	 bx          lr
  00030		 |$M32804|

			 ENDP  ; |?SelectDevice@CDisk@@QAAXXZ|, CDisk::SelectDevice

	EXPORT	|?GetBaseStatus@CDisk@@QAAEXZ|		; CDisk::GetBaseStatus
	IMPORT	|CeLogData|
	IMPORT	|?dpCurSettings@@3U_DBGPARAM@@A|	; dpCurSettings

  00000			 AREA	 |.text| { |?GetBaseStatus@CDisk@@QAAEXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$?GetBaseStatus@CDisk@@QAAEXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?GetBaseStatus@CDisk@@QAAEXZ| } ; comdat associative
|$T32817| DCD	|$L32816|
	DCD	0x40001c02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?GetBaseStatus@CDisk@@QAAEXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |?GetBaseStatus@CDisk@@QAAEXZ| PROC	; CDisk::GetBaseStatus

; 257  :     inline BYTE GetBaseStatus() {

  00000		 |$L32816|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004	e24dd014	 sub         sp, sp, #0x14
  00008		 |$M32814|

; 258  :         BYTE bStatus = ATA_READ_BYTE(m_pATAReg + m_dwCommandStatusOffset);

  00008	e5902030	 ldr         r2, [r0, #0x30]
  0000c	e5903024	 ldr         r3, [r0, #0x24]
  00010	e0820003	 add         r0, r2, r3
  00014	eb000000	 bl          READ_PORT_UCHAR

; 259  :         if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_BASESTATUS, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);

  00018	e59f304c	 ldr         r3, [pc, #0x4C]
  0001c	e5cd0010	 strb        r0, [sp, #0x10]
  00020	e5933440	 ldr         r3, [r3, #0x440]
  00024	e3130902	 tst         r3, #2, 18
  00028	0a00000c	 beq         |$L31616|
  0002c	e3a01d86	 mov         r1, #0x86, 26
  00030	e3a0e101	 mov         lr, #1, 2
  00034	e3a04000	 mov         r4, #0
  00038	e3811002	 orr         r1, r1, #2
  0003c	e3a03001	 mov         r3, #1
  00040	e28d2010	 add         r2, sp, #0x10
  00044	e3a00001	 mov         r0, #1
  00048	e58d400c	 str         r4, [sp, #0xC]
  0004c	e58d4008	 str         r4, [sp, #8]
  00050	e58de004	 str         lr, [sp, #4]
  00054	e58d4000	 str         r4, [sp]
  00058	eb000000	 bl          CeLogData
  0005c	e5dd0010	 ldrb        r0, [sp, #0x10]
  00060		 |$L31616|

; 260  :         return bStatus;
; 261  :     }

  00060	e28dd014	 add         sp, sp, #0x14
  00064	e8bd4010	 ldmia       sp!, {r4, lr}
  00068	e12fff1e	 bx          lr
  0006c		 |$L32819|
  0006c	00000000	 DCD         |?dpCurSettings@@3U_DBGPARAM@@A|
  00070		 |$M32815|

			 ENDP  ; |?GetBaseStatus@CDisk@@QAAEXZ|, CDisk::GetBaseStatus

	EXPORT	|?WriteCommand@CDisk@@QAAXE@Z|		; CDisk::WriteCommand

  00000			 AREA	 |.text| { |?WriteCommand@CDisk@@QAAXE@Z| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$?WriteCommand@CDisk@@QAAXE@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?WriteCommand@CDisk@@QAAXE@Z| } ; comdat associative
|$T32827| DCD	|$L32826|
	DCD	0x40000701
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?WriteCommand@CDisk@@QAAXE@Z| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |?WriteCommand@CDisk@@QAAXE@Z| PROC	; CDisk::WriteCommand

; 263  :     inline void WriteCommand(BYTE bCommand) {

  00000		 |$L32826|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M32824|

; 264  :         ATA_WRITE_BYTE(m_pATAReg + m_dwCommandStatusOffset, bCommand);

  00004	e5902030	 ldr         r2, [r0, #0x30]
  00008	e5903024	 ldr         r3, [r0, #0x24]
  0000c	e0820003	 add         r0, r2, r3
  00010	eb000000	 bl          WRITE_PORT_UCHAR

; 265  :     }

  00014	e49de004	 ldr         lr, [sp], #4
  00018	e12fff1e	 bx          lr
  0001c		 |$M32825|

			 ENDP  ; |?WriteCommand@CDisk@@QAAXE@Z|, CDisk::WriteCommand

	EXPORT	|?GetAltStatus@CDisk@@QAAEXZ|		; CDisk::GetAltStatus

  00000			 AREA	 |.text| { |?GetAltStatus@CDisk@@QAAEXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$?GetAltStatus@CDisk@@QAAEXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?GetAltStatus@CDisk@@QAAEXZ| } ; comdat associative
|$T32837| DCD	|$L32836|
	DCD	0x40000701
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?GetAltStatus@CDisk@@QAAEXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |?GetAltStatus@CDisk@@QAAEXZ| PROC	; CDisk::GetAltStatus

; 267  :     inline BYTE GetAltStatus() {

  00000		 |$L32836|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M32834|

; 268  :         return (BYTE) ATA_READ_BYTE(m_pATARegAlt + m_dwAltStatusOffset);

  00004	e5902034	 ldr         r2, [r0, #0x34]
  00008	e5903028	 ldr         r3, [r0, #0x28]
  0000c	e0820003	 add         r0, r2, r3
  00010	eb000000	 bl          READ_PORT_UCHAR

; 269  :     }

  00014	e49de004	 ldr         lr, [sp], #4
  00018	e12fff1e	 bx          lr
  0001c		 |$M32835|

			 ENDP  ; |?GetAltStatus@CDisk@@QAAEXZ|, CDisk::GetAltStatus

	EXPORT	|?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| ; CPCIDiskAndCD::SetupCdRomRead
	IMPORT	|memset|
; File f:\wince500\platform\smdk2410\drivers\atapi\cdio.cpp

  00000			 AREA	 |.text| { |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| } ; comdat associative
|$T32855| DCD	|$L32854|
	DCD	0x40003303
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| PROC ; CPCIDiskAndCD::SetupCdRomRead

; 166  : {

  00000		 |$L32854|
  00000	e1a0c00d	 mov         r12, sp
  00004	e92d0004	 stmdb       sp!, {r2}
  00008	e92d53f0	 stmdb       sp!, {r4 - r9, r12, lr}
  0000c		 |$M32852|
  0000c	e1a07003	 mov         r7, r3
  00010	e1a08001	 mov         r8, r1

; 167  :     BOOL fIsDVD = (m_dwDeviceFlags & DFLAGS_DEVICE_ISDVD);
; 168  : 
; 169  :     memset( pCmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));

  00014	e59d6024	 ldr         r6, [sp, #0x24]
  00018	e5905690	 ldr         r5, [r0, #0x690]
  0001c	e3a02014	 mov         r2, #0x14
  00020	e1a00006	 mov         r0, r6
  00024	e3a01000	 mov         r1, #0
  00028	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;
; 185  :     pCmdPkt->Byte_2 = LBA_MSB(&dwLBAAddr);
; 186  :     pCmdPkt->Byte_3 = LBA_3rdLSB(&dwLBAAddr);
; 187  :     pCmdPkt->Byte_4 = LBA_2ndLSB(&dwLBAAddr);

  0002c	e5dde021	 ldrb        lr, [sp, #0x21]
  00030	e5dd2023	 ldrb        r2, [sp, #0x23]
  00034	e5dd0022	 ldrb        r0, [sp, #0x22]

; 188  :     pCmdPkt->Byte_5 = LBA_LSB(&dwLBAAddr);

  00038	e5dd4020	 ldrb        r4, [sp, #0x20]
  0003c	e3a09000	 mov         r9, #0
  00040	e5c6e004	 strb        lr, [r6, #4]
  00044	e5c62002	 strb        r2, [r6, #2]
  00048	e5c60003	 strb        r0, [r6, #3]
  0004c	e5c64005	 strb        r4, [r6, #5]
  00050	e5c69001	 strb        r9, [r6, #1]

; 189  :     if (fIsDVD && !bRawMode) {

  00054	e3150040	 tst         r5, #0x40
  00058	0a00000b	 beq         |$L32182|
  0005c	e3580000	 cmp         r8, #0
  00060	1a00000b	 bne         |$L32843|

; 190  :         pCmdPkt->Opcode = ATAPI_PACKET_CMD_READ_12;

  00064	e3a000a8	 mov         r0, #0xA8

; 191  :         pCmdPkt->Byte_6 = (BYTE)( dwTransferLength >> 24);

  00068	e1a03c27	 mov         r3, r7, lsr #24

; 192  :         pCmdPkt->Byte_7 = (BYTE)( (dwTransferLength & 0x00ff0000) >> 16);

  0006c	e1a02827	 mov         r2, r7, lsr #16

; 193  :         pCmdPkt->Byte_8 = (BYTE)( (dwTransferLength & 0x0000ff00) >> 8);

  00070	e1a01427	 mov         r1, r7, lsr #8
  00074	e5c60000	 strb        r0, [r6]
  00078	e5c63006	 strb        r3, [r6, #6]
  0007c	e5c62007	 strb        r2, [r6, #7]
  00080	e5c61008	 strb        r1, [r6, #8]

; 194  :         pCmdPkt->Byte_9 = (BYTE)( dwTransferLength);

  00084	e5c67009	 strb        r7, [r6, #9]

; 195  :     } else {

  00088	ea00000b	 b           |$L32187|
  0008c		 |$L32182|

; 196  :         pCmdPkt->Opcode = bRawMode ? ATAPI_PACKET_CMD_READ_CD : ATAPI_PACKET_CMD_READ;

  0008c	e3580000	 cmp         r8, #0
  00090	0a000001	 beq         |$L32841|
  00094		 |$L32843|
  00094	e3a020be	 mov         r2, #0xBE
  00098	ea000000	 b           |$L32842|
  0009c		 |$L32841|
  0009c	e3a02028	 mov         r2, #0x28
  000a0		 |$L32842|

; 197  :         pCmdPkt->Byte_6 = 0x00; // Reserved
; 198  :         pCmdPkt->Byte_7 = (BYTE)( (dwTransferLength & 0x0000ff00) >> 8);

  000a0	e1a03427	 mov         r3, r7, lsr #8

; 199  :         pCmdPkt->Byte_8 = (BYTE)( dwTransferLength);
; 200  :         pCmdPkt->Byte_9 = 0x10;

  000a4	e3a01010	 mov         r1, #0x10
  000a8	e5c63007	 strb        r3, [r6, #7]
  000ac	e5c61009	 strb        r1, [r6, #9]
  000b0	e5c62000	 strb        r2, [r6]
  000b4	e5c69006	 strb        r9, [r6, #6]
  000b8	e5c67008	 strb        r7, [r6, #8]
  000bc		 |$L32187|

; 201  :     }
; 202  : 
; 203  :     pCmdPkt->Byte_10 = 0;          

  000bc	e5c6900a	 strb        r9, [r6, #0xA]

; 204  :     return ERROR_SUCCESS;

  000c0	e3a00000	 mov         r0, #0

; 205  : }

  000c4	e89d63f0	 ldmia       sp, {r4 - r9, sp, lr}
  000c8	e12fff1e	 bx          lr
  000cc		 |$M32853|

			 ENDP  ; |?SetupCdRomRead@CPCIDiskAndCD@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z|, CPCIDiskAndCD::SetupCdRomRead

	EXPORT	|?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CPCIDiskAndCD::AtapiSendCommand
	IMPORT	|?WaitOnBusy@CDisk@@QAAEH@Z|		; CDisk::WaitOnBusy
	IMPORT	|?GetPacketSize@CDisk@@QAAGXZ|		; CDisk::GetPacketSize
	IMPORT	|?IsDRQTypeIRQ@CDisk@@QAAHXZ|		; CDisk::IsDRQTypeIRQ
; File f:\wince500\platform\smdk2410\drivers\atapi\diskmain.h

  00000			 AREA	 |.text| { |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| } ; comdat associative
|$T32923| DCD	|$L32922|
	DCD	0x40008e01
; Function compile flags: /Ogsy
; File f:\wince500\platform\smdk2410\drivers\atapi\cdio.cpp

  00000			 AREA	 |.text| { |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| PROC ; CPCIDiskAndCD::AtapiSendCommand

; 352  : {

  00000		 |$L32922|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004		 |$M32920|
  00004	e1a06003	 mov         r6, r3
  00008	e1a04002	 mov         r4, r2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -