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

📄 dvdioctl.cod

📁 PXA270的BSP
💻 COD
📖 第 1 页 / 共 4 页
字号:
; 351  :       dwError = ERROR_GEN_FAILURE;

  000ec	e3a0501f	 mov         r5, #0x1F
  000f0		 |$L32972|

; 352  :     }    
; 353  : 
; 354  :     return dwError;

  000f0	e1a00005	 mov         r0, r5

; 355  : }

  000f4	e28dd034	 add         sp, sp, #0x34
  000f8	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  000fc	e12fff1e	 bx          lr
  00100		 |$M33195|

			 ENDP  ; |?DVDSendKey@CDisk@@QAAKPAU_IOREQ@@@Z|, CDisk::DVDSendKey

	EXPORT	|?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| ; CDisk::DVDSetRegion

  00000			 AREA	 |.text| { |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T33206| DCD	|$L33205|
	DCD	0x40000200
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| PROC ; CDisk::DVDSetRegion

; 358  : {

  00000		 |$L33205|
  00000		 |$M33203|

; 359  :     // TODO: Implement Me
; 360  :     return ERROR_NOT_SUPPORTED;

  00000	e3a00032	 mov         r0, #0x32

; 361  : }

  00004	e12fff1e	 bx          lr
  00008		 |$M33204|

			 ENDP  ; |?DVDSetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, CDisk::DVDSetRegion

	EXPORT	|?DVDGetCopySystem@CDisk@@QAAHPAE@Z|	; CDisk::DVDGetCopySystem

  00000			 AREA	 |.text| { |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?DVDGetCopySystem@CDisk@@QAAHPAE@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| } ; comdat associative
|$T33218| DCD	|$L33217|
	DCD	0x40002c02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?DVDGetCopySystem@CDisk@@QAAHPAE@Z| PROC ; CDisk::DVDGetCopySystem

; 364  : {   

  00000		 |$L33217|
  00000	e92d47f0	 stmdb       sp!, {r4 - r10, lr}
  00004	e24dd02c	 sub         sp, sp, #0x2C
  00008		 |$M33215|
  00008	e1a05001	 mov         r5, r1
  0000c	e1a06000	 mov         r6, r0

; 365  :     BOOL fSuccess = TRUE;
; 366  :     ATAPI_COMMAND_PACKET    CmdPkt;
; 367  :     PRDVDCDB  pCmd = (PRDVDCDB)&CmdPkt;
; 368  :     RDVDFMT_Copy fmtCopy;
; 369  :     SGX_BUF SgBuf;
; 370  :     DWORD dwRet;
; 371  :     
; 372  :     memset( &CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));

  00010	e3a02014	 mov         r2, #0x14
  00014	e3a01000	 mov         r1, #0
  00018	e28d0018	 add         r0, sp, #0x18
  0001c	e3a04001	 mov         r4, #1
  00020	eb000000	 bl          memset

; 373  : 
; 374  :     pCmd->OpCode= DVDOP_READ_DVD_STRUC;
; 375  :     pCmd->Format= DVDSTRUC_FMT_COPY;
; 376  :     pCmd->Len = sizeof (RDVDFMT_Copy) << 8;         //Endian Swap the length
; 377  : //    pCmd->Len = keyLength << 8;
; 378  : 
; 379  :     SgBuf.sb_len = sizeof(RDVDFMT_Copy);
; 380  :     SgBuf.sb_buf = (PBYTE) &fmtCopy;
; 381  : 
; 382  : 
; 383  :     m_dwDeviceFlags &= ~DFLAGS_MEDIA_ISDVD;

  00024	e5963004	 ldr         r3, [r6, #4]
  00028	e3a0a0ad	 mov         r10, #0xAD
  0002c	e3a07001	 mov         r7, #1
  00030	e3c33080	 bic         r3, r3, #0x80
  00034	e5863004	 str         r3, [r6, #4]
  00038	e3a08b02	 mov         r8, #2, 22
  0003c	e3a09008	 mov         r9, #8
  00040	e28de010	 add         lr, sp, #0x10

; 384  : 
; 385  :     if (AtapiSendCommand(&CmdPkt)) {

  00044	e3a03000	 mov         r3, #0
  00048	e3a02000	 mov         r2, #0
  0004c	e28d1018	 add         r1, sp, #0x18
  00050	e1a00006	 mov         r0, r6
  00054	e5cda018	 strb        r10, [sp, #0x18]
  00058	e5cd701f	 strb        r7, [sp, #0x1F]
  0005c	e1cd82b0	 strh        r8, [sp, #0x20]
  00060	e58d900c	 str         r9, [sp, #0xC]
  00064	e58de008	 str         lr, [sp, #8]
  00068	eb000000	 bl          |?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
  0006c	e3500000	 cmp         r0, #0
  00070	0a000009	 beq         |$L32992|

; 386  :         if (AtapiReceiveData(&SgBuf, 1, &dwRet)) {

  00074	e28d3000	 add         r3, sp, #0
  00078	e3a02001	 mov         r2, #1
  0007c	e28d1008	 add         r1, sp, #8
  00080	e1a00006	 mov         r0, r6
  00084	eb000000	 bl          |?AtapiReceiveData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|
  00088	e3500000	 cmp         r0, #0
  0008c	0a000003	 beq         |$L32995|

; 387  :              *pbCopySystem = (BYTE)(fmtCopy.Data);

  00090	e59d3014	 ldr         r3, [sp, #0x14]
  00094	e5c53000	 strb        r3, [r5]

; 388  :         }    
; 389  :     } else {

  00098	ea000000	 b           |$L32995|
  0009c		 |$L32992|

; 390  :         fSuccess = FALSE;

  0009c	e3a04000	 mov         r4, #0
  000a0		 |$L32995|

; 391  :     }
; 392  :     return fSuccess;

  000a0	e1a00004	 mov         r0, r4

; 393  : }

  000a4	e28dd02c	 add         sp, sp, #0x2C
  000a8	e8bd47f0	 ldmia       sp!, {r4 - r10, lr}
  000ac	e12fff1e	 bx          lr
  000b0		 |$M33216|

			 ENDP  ; |?DVDGetCopySystem@CDisk@@QAAHPAE@Z|, CDisk::DVDGetCopySystem

	EXPORT	|?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| ; CDisk::DVDGetRegion
	IMPORT	|MapPtrToProcess|
	IMPORT	|GetCallerProcess|

  00000			 AREA	 |.text| { |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T33232| DCD	|$L33231|
	DCD	0x40004302
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z| PROC ; CDisk::DVDGetRegion

; 210  : {

  00000		 |$L33231|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004	e24dd02c	 sub         sp, sp, #0x2C
  00008		 |$M33229|
  00008	e1a04001	 mov         r4, r1
  0000c	e1a06000	 mov         r6, r0

; 211  :     DWORD dwError = ERROR_SUCCESS;
; 212  :     DWORD dwLength;
; 213  :     SGX_BUF SgBuf;
; 214  :     DWORD dwRet;
; 215  :     RKFMT_RPC rpcData;
; 216  :     PDVD_REGIONCE preg;
; 217  :     ATAPI_COMMAND_PACKET    CmdPkt;
; 218  : 
; 219  :     memset( &CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));

  00010	e3a02014	 mov         r2, #0x14
  00014	e3a01000	 mov         r1, #0
  00018	e28d0018	 add         r0, sp, #0x18
  0001c	e3a05000	 mov         r5, #0
  00020	eb000000	 bl          memset

; 220  :     preg = (PDVD_REGIONCE)MapPtrToProcess((LPVOID)pIOReq->pOutBuf, GetCallerProcess());

  00024	eb000000	 bl          GetCallerProcess
  00028	e1a01000	 mov         r1, r0
  0002c	e5940020	 ldr         r0, [r4, #0x20]
  00030	eb000000	 bl          MapPtrToProcess
  00034	e1a04000	 mov         r4, r0

; 221  : 
; 222  :     DVDGetCopySystem(&(preg->CopySystem)); 

  00038	e2841004	 add         r1, r4, #4
  0003c	e1a00006	 mov         r0, r6
  00040	eb000000	 bl          |?DVDGetCopySystem@CDisk@@QAAHPAE@Z|

; 223  :     if (m_dwDeviceFlags & DFLAGS_MEDIA_ISDVD) {

  00044	e5963004	 ldr         r3, [r6, #4]
  00048	e3130080	 tst         r3, #0x80
  0004c	0a00002a	 beq         |$L32914|

; 224  :         memset( &CmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));

  00050	e3a02014	 mov         r2, #0x14
  00054	e3a01000	 mov         r1, #0
  00058	e28d0018	 add         r0, sp, #0x18
  0005c	eb000000	 bl          memset

; 225  : 
; 226  :         dwLength = DVDSetupReadTitleKey(&CmdPkt, DvdGetRPC, 0, 0);

  00060	e3a03000	 mov         r3, #0
  00064	e3a02000	 mov         r2, #0
  00068	e3a01008	 mov         r1, #8
  0006c	e28d0018	 add         r0, sp, #0x18
  00070	eb000000	 bl          |?DVDSetupReadTitleKey@@YAKPAU_ATAPI_COMMAND_PACKET@@EEK@Z|

; 227  :         
; 228  :         SgBuf.sb_len = sizeof(RKFMT_RPC);

  00074	e3a02008	 mov         r2, #8

; 229  :         SgBuf.sb_buf = (PBYTE) &rpcData;

  00078	e28d3008	 add         r3, sp, #8
  0007c	e58d2014	 str         r2, [sp, #0x14]
  00080	e58d3010	 str         r3, [sp, #0x10]

; 230  :         
; 231  :         if (AtapiSendCommand(&CmdPkt)) {

  00084	e3a03000	 mov         r3, #0
  00088	e3a02000	 mov         r2, #0
  0008c	e28d1018	 add         r1, sp, #0x18
  00090	e1a00006	 mov         r0, r6
  00094	eb000000	 bl          |?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
  00098	e3500000	 cmp         r0, #0
  0009c	0a000012	 beq         |$L32906|

; 232  :             if (AtapiReceiveData(&SgBuf, 1, &dwRet)) {

  000a0	e28d3000	 add         r3, sp, #0
  000a4	e3a02001	 mov         r2, #1
  000a8	e28d1010	 add         r1, sp, #0x10
  000ac	e1a00006	 mov         r0, r6
  000b0	eb000000	 bl          |?AtapiReceiveData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|
  000b4	e3500000	 cmp         r0, #0
  000b8	0a000009	 beq         |$L32907|

; 233  :                 if (rpcData.ResetCounts & 0xc0) {

  000bc	e5dd300c	 ldrb        r3, [sp, #0xC]
  000c0	e31300c0	 tst         r3, #0xC0
  000c4	0a000008	 beq         |$L32906|

; 234  :                     preg->SystemRegion = rpcData.SystemRegion ^ 0xff;

  000c8	e5dd300d	 ldrb        r3, [sp, #0xD]
  000cc	e1e03003	 mvn         r3, r3
  000d0	e5c43006	 strb        r3, [r4, #6]

; 235  :                     preg->ResetCount = rpcData.ResetCounts & 0x07;

  000d4	e5dd300c	 ldrb        r3, [sp, #0xC]
  000d8	e2033007	 and         r3, r3, #7
  000dc	e5c43007	 strb        r3, [r4, #7]

; 236  :                 } else {
; 237  :                     // TODO: This is a virgin drive.  Should we set the region ??? 
; 238  :                     // TODO: For now send back the default region
; 239  :                     DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("Atapi:Brand new drive !!!\r\n")));
; 240  :                     preg->SystemRegion = (BYTE)DEFAULT_DECODER_REGION;
; 241  :                     preg->ResetCount = 0;
; 242  :                 }
; 243  :             } else {

  000e0	ea000005	 b           |$L32914|
  000e4		 |$L32907|

; 244  :                 DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("Atapi:DVDGetRegion failed on recieve\r\n")));
; 245  :                 dwError = ERROR_READ_FAULT;

  000e4	e3a0501e	 mov         r5, #0x1E

; 246  :             }        
; 247  :         } else {

  000e8	ea000003	 b           |$L32914|
  000ec		 |$L32906|

; 248  :           // Probably a RPC I Drive        
; 249  :             preg->SystemRegion = (BYTE)DEFAULT_DECODER_REGION;
; 250  :             preg->ResetCount = 0;

  000ec	e3a02000	 mov         r2, #0
  000f0	e3a03001	 mov         r3, #1
  000f4	e5c42007	 strb        r2, [r4, #7]
  000f8	e5c43006	 strb        r3, [r4, #6]
  000fc		 |$L32914|

; 251  :         }    
; 252  :     }    
; 253  :     return dwError;

  000fc	e1a00005	 mov         r0, r5

; 254  : }

  00100	e28dd02c	 add         sp, sp, #0x2C
  00104	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00108	e12fff1e	 bx          lr
  0010c		 |$M33230|

			 ENDP  ; |?DVDGetRegion@CDisk@@QAAKPAU_IOREQ@@@Z|, CDisk::DVDGetRegion

	END

⌨️ 快捷键说明

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