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

📄 cdio.cod

📁 2440 CE500BSP包, EBOOT可用DEBUG版调试
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00674	e3530fc9	 cmp         r3, #0xC9, 30
  00678	1a000004	 bne         |$L32146|

; 99   :                     pTOC = (CDROM_TOC *)pIOReq->pInBuf;

  0067c	e59d30c0	 ldr         r3, [sp, #0xC0]
  00680	e2833018	 add         r3, r3, #0x18
  00684	e5933000	 ldr         r3, [r3]
  00688	e58d3038	 str         r3, [sp, #0x38]

; 100  :                 } else 

  0068c	ea00000d	 b           |$L32148|
  00690		 |$L32146|

; 101  :                 if (pIOReq->pOutBuf && (pIOReq->dwOutBufSize == sizeof(CDROM_TOC))) {

  00690	e59d30c0	 ldr         r3, [sp, #0xC0]
  00694	e2833020	 add         r3, r3, #0x20
  00698	e5933000	 ldr         r3, [r3]
  0069c	e3530000	 cmp         r3, #0
  006a0	0a000008	 beq         |$L32150|
  006a4	e59d30c0	 ldr         r3, [sp, #0xC0]
  006a8	e2833024	 add         r3, r3, #0x24
  006ac	e5933000	 ldr         r3, [r3]
  006b0	e3530fc9	 cmp         r3, #0xC9, 30
  006b4	1a000003	 bne         |$L32150|

; 102  :                     pTOC = (CDROM_TOC *)pIOReq->pOutBuf;

  006b8	e59d30c0	 ldr         r3, [sp, #0xC0]
  006bc	e2833020	 add         r3, r3, #0x20
  006c0	e5933000	 ldr         r3, [r3]
  006c4	e58d3038	 str         r3, [sp, #0x38]
  006c8		 |$L32150|
  006c8		 |$L32148|

; 103  :                 }    
; 104  :                 if (pTOC == NULL) {

  006c8	e59d3038	 ldr         r3, [sp, #0x38]
  006cc	e3530000	 cmp         r3, #0
  006d0	1a000002	 bne         |$L32152|

; 105  :                     dwError = ERROR_INVALID_PARAMETER;

  006d4	e3a03057	 mov         r3, #0x57
  006d8	e58d3004	 str         r3, [sp, #4]

; 106  :                 } else {

  006dc	ea00000d	 b           |$L32153|
  006e0		 |$L32152|

; 107  :                     dwError = AtapiGetToc(pTOC) ? ERROR_SUCCESS : ERROR_GEN_FAILURE;

  006e0	e59d1038	 ldr         r1, [sp, #0x38]
  006e4	e59d00bc	 ldr         r0, [sp, #0xBC]
  006e8	eb000000	 bl          |?AtapiGetToc@CPCIDiskAndCD@@QAAHPAU_CDROM_TOC@@@Z|
  006ec	e58d0084	 str         r0, [sp, #0x84]
  006f0	e59d3084	 ldr         r3, [sp, #0x84]
  006f4	e3530000	 cmp         r3, #0
  006f8	0a000002	 beq         |$L32725|
  006fc	e3a03000	 mov         r3, #0
  00700	e58d3088	 str         r3, [sp, #0x88]
  00704	ea000001	 b           |$L32726|
  00708		 |$L32725|
  00708	e3a0301f	 mov         r3, #0x1F
  0070c	e58d3088	 str         r3, [sp, #0x88]
  00710		 |$L32726|
  00710	e59d3088	 ldr         r3, [sp, #0x88]
  00714	e58d3004	 str         r3, [sp, #4]
  00718		 |$L32153|

; 108  :                 }  
; 109  :             }
; 110  :             break;                

  00718	ea00004f	 b           |$L32103|
  0071c		 |$L32154|

; 111  : ///////////////////// DVD ///////////////////////////////////////                
; 112  :         case IOCTL_DVD_START_SESSION:
; 113  :         case IOCTL_DVD_READ_KEY:
; 114  :             if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  0071c	e59d00bc	 ldr         r0, [sp, #0xBC]
  00720	eb000000	 bl          |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|
  00724	e58d008c	 str         r0, [sp, #0x8C]
  00728	e59d308c	 ldr         r3, [sp, #0x8C]
  0072c	e3530000	 cmp         r3, #0
  00730	1a000002	 bne         |$L32155|
  00734	e3a03015	 mov         r3, #0x15
  00738	e58d303c	 str         r3, [sp, #0x3C]
  0073c	ea000048	 b           |$L32097|
  00740		 |$L32155|

; 115  :             dwError = DVDReadKey(pIOReq);

  00740	e59d10c0	 ldr         r1, [sp, #0xC0]
  00744	e59d00bc	 ldr         r0, [sp, #0xBC]
  00748	eb000000	 bl          |?DVDReadKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  0074c	e58d0090	 str         r0, [sp, #0x90]
  00750	e59d3090	 ldr         r3, [sp, #0x90]
  00754	e58d3004	 str         r3, [sp, #4]

; 116  :             break;

  00758	ea00003f	 b           |$L32103|
  0075c		 |$L32156|

; 117  :         case IOCTL_DVD_END_SESSION:
; 118  :         case IOCTL_DVD_SEND_KEY:
; 119  :             if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  0075c	e59d00bc	 ldr         r0, [sp, #0xBC]
  00760	eb000000	 bl          |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|
  00764	e58d0094	 str         r0, [sp, #0x94]
  00768	e59d3094	 ldr         r3, [sp, #0x94]
  0076c	e3530000	 cmp         r3, #0
  00770	1a000002	 bne         |$L32157|
  00774	e3a03015	 mov         r3, #0x15
  00778	e58d303c	 str         r3, [sp, #0x3C]
  0077c	ea000038	 b           |$L32097|
  00780		 |$L32157|

; 120  :             dwError = DVDSendKey(pIOReq);

  00780	e59d10c0	 ldr         r1, [sp, #0xC0]
  00784	e59d00bc	 ldr         r0, [sp, #0xBC]
  00788	eb000000	 bl          |?DVDSendKey@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  0078c	e58d0098	 str         r0, [sp, #0x98]
  00790	e59d3098	 ldr         r3, [sp, #0x98]
  00794	e58d3004	 str         r3, [sp, #4]

; 121  :             break;

  00798	ea00002f	 b           |$L32103|
  0079c		 |$L32158|

; 122  :         case IOCTL_DVD_GET_REGION:
; 123  :             dwError = DVDGetRegion(pIOReq);

  0079c	e59d10c0	 ldr         r1, [sp, #0xC0]
  007a0	e59d00bc	 ldr         r0, [sp, #0xBC]
  007a4	eb000000	 bl          |?DVDGetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  007a8	e58d009c	 str         r0, [sp, #0x9C]
  007ac	e59d309c	 ldr         r3, [sp, #0x9C]
  007b0	e58d3004	 str         r3, [sp, #4]

; 124  :             break;

  007b4	ea000028	 b           |$L32103|
  007b8		 |$L32159|

; 125  :         case IOCTL_DVD_SET_REGION:
; 126  :             dwError = DVDSetRegion(pIOReq);

  007b8	e59d10c0	 ldr         r1, [sp, #0xC0]
  007bc	e59d00bc	 ldr         r0, [sp, #0xBC]
  007c0	eb000000	 bl          |?DVDSetRegion@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  007c4	e58d00a0	 str         r0, [sp, #0xA0]
  007c8	e59d30a0	 ldr         r3, [sp, #0xA0]
  007cc	e58d3004	 str         r3, [sp, #4]

; 127  :             break;    

  007d0	ea000021	 b           |$L32103|
  007d4		 |$L32160|

; 128  : ///////////////////// CDAUDIO ///////////////////////////////////                
; 129  :         case IOCTL_CDROM_READ_Q_CHANNEL:
; 130  :             if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  007d4	e59d00bc	 ldr         r0, [sp, #0xBC]
  007d8	eb000000	 bl          |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|
  007dc	e58d00a4	 str         r0, [sp, #0xA4]
  007e0	e59d30a4	 ldr         r3, [sp, #0xA4]
  007e4	e3530000	 cmp         r3, #0
  007e8	1a000002	 bne         |$L32161|
  007ec	e3a03015	 mov         r3, #0x15
  007f0	e58d303c	 str         r3, [sp, #0x3C]
  007f4	ea00001a	 b           |$L32097|
  007f8		 |$L32161|

; 131  :             dwError = AtapiReadQChannel(pIOReq);

  007f8	e59d10c0	 ldr         r1, [sp, #0xC0]
  007fc	e59d00bc	 ldr         r0, [sp, #0xBC]
  00800	eb000000	 bl          |?AtapiReadQChannel@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  00804	e58d00a8	 str         r0, [sp, #0xA8]
  00808	e59d30a8	 ldr         r3, [sp, #0xA8]
  0080c	e58d3004	 str         r3, [sp, #4]

; 132  :             break;

  00810	ea000011	 b           |$L32103|
  00814		 |$L32162|

; 133  :         case IOCTL_CDROM_PLAY_AUDIO_MSF:
; 134  :         case IOCTL_CDROM_SEEK_AUDIO_MSF:
; 135  :         case IOCTL_CDROM_RESUME_AUDIO:
; 136  :         case IOCTL_CDROM_STOP_AUDIO:
; 137  :         case IOCTL_CDROM_PAUSE_AUDIO:
; 138  :         case IOCTL_CDROM_SCAN_AUDIO:
; 139  :             if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  00814	e59d00bc	 ldr         r0, [sp, #0xBC]
  00818	eb000000	 bl          |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|
  0081c	e58d00ac	 str         r0, [sp, #0xAC]
  00820	e59d30ac	 ldr         r3, [sp, #0xAC]
  00824	e3530000	 cmp         r3, #0
  00828	1a000002	 bne         |$L32163|
  0082c	e3a03015	 mov         r3, #0x15
  00830	e58d303c	 str         r3, [sp, #0x3C]
  00834	ea00000a	 b           |$L32097|
  00838		 |$L32163|

; 140  :             dwError = ControlAudio(pIOReq);

  00838	e59d10c0	 ldr         r1, [sp, #0xC0]
  0083c	e59d00bc	 ldr         r0, [sp, #0xBC]
  00840	eb000000	 bl          |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  00844	e58d00b0	 str         r0, [sp, #0xB0]
  00848	e59d30b0	 ldr         r3, [sp, #0xB0]
  0084c	e58d3004	 str         r3, [sp, #4]

; 141  :             break;

  00850	ea000001	 b           |$L32103|
  00854		 |$L32164|

; 142  :         default:
; 143  :             dwError = ERROR_NOT_SUPPORTED;

  00854	e3a03032	 mov         r3, #0x32
  00858	e58d3004	 str         r3, [sp, #4]
  0085c		 |$L32103|

; 144  :             break;
; 145  :     }        
; 146  :     return dwError;

  0085c	e59d3004	 ldr         r3, [sp, #4]
  00860	e58d303c	 str         r3, [sp, #0x3C]
  00864		 |$L32097|

; 23   : ///////////////////// ATAPI  /////////////////////////////////////                
; 24   :         case IOCTL_CDROM_READ_SG:
; 25   :             // Verify that the buffer is of valid size
; 26   :             {
; 27   :                 if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  00864	e59d003c	 ldr         r0, [sp, #0x3C]

; 147  : }

  00868	e28dd0b4	 add         sp, sp, #0xB4
  0086c	e89d6000	 ldmia       sp, {sp, lr}
  00870	e12fff1e	 bx          lr
  00874		 |$L32740|
  00874	00000000	 DCD         |??_C@_1EO@MDEOOFHJ@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AAP?$AAe?$AAr?$AAf?$AAo?$AAr?$AAm?$AAI?$AAo?$AAc?$AAt?$AAl?$AA?3?$AA?5@|
  00878	00000000	 DCD         |dpCurSettings|
  0087c		 |$M32737|

			 ENDP  ; |?AtapiIoctl@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::AtapiIoctl

	IMPORT	|?StallExecution@CDisk@@QAAXK@Z|	; CDisk::StallExecution
	IMPORT	|GetTickCount|

  00008			 AREA	 |.pdata|, PDATA
|$T32746| DCD	|$L32745|
	DCD	0x40002b04
; Function compile flags: /Odt

  0087c			 AREA	 |.text|, CODE, ARM

  0087c		 |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ| PROC ; CPCIDiskAndCD::AtapiIsUnitReadyEx

; 151  : {

  0087c		 |$L32745|
  0087c	e1a0c00d	 mov         r12, sp
  00880	e92d0001	 stmdb       sp!, {r0}
  00884	e92d5000	 stmdb       sp!, {r12, lr}
  00888	e24dd010	 sub         sp, sp, #0x10
  0088c		 |$M32743|

; 152  :     DWORD dwCount;
; 153  :     for (dwCount = 0; dwCount < 5; dwCount++) {

  0088c	e3a03000	 mov         r3, #0
  00890	e58d3000	 str         r3, [sp]
  00894	ea000002	 b           |$L32169|
  00898		 |$L32170|
  00898	e59d3000	 ldr         r3, [sp]
  0089c	e2833001	 add         r3, r3, #1
  008a0	e58d3000	 str         r3, [sp]
  008a4		 |$L32169|
  008a4	e59d3000	 ldr         r3, [sp]
  008a8	e3530005	 cmp         r3, #5
  008ac	2a000011	 bcs         |$L32171|

; 154  :         if (AtapiIsUnitReady()) {

  008b0	e3a01000	 mov         r1, #0
  008b4	e59d0018	 ldr         r0, [sp, #0x18]
  008b8	eb000000	 bl          |?AtapiIsUnitReady@CPCIDiskAndCD@@QAAHPAU_IOREQ@@@Z|
  008bc	e58d0008	 str         r0, [sp, #8]
  008c0	e59d3008	 ldr         r3, [sp, #8]
  008c4	e3530000	 cmp         r3, #0
  008c8	0a000006	 beq         |$L32172|

; 155  :             m_dwLastCheckTime = GetTickCount();

  008cc	eb000000	 bl          GetTickCount
  008d0	e58d000c	 str         r0, [sp, #0xC]
  008d4	e59d3018	 ldr         r3, [sp, #0x18]
  008d8	e2832e6d	 add         r2, r3, #0x6D, 28
  008dc	e59d300c	 ldr         r3, [sp, #0xC]
  008e0	e5823000	 str         r3, [r2]

; 156  :             break;

  008e4	ea000003	 b           |$L32171|
  008e8		 |$L32172|

; 157  :         }    
; 158  :         StallExecution(100);

  008e8	e3a01064	 mov         r1, #0x64
  008ec	e59d0018	 ldr         r0, [sp, #0x18]
  008f0	eb000000	 bl          |?StallExecution@CDisk@@QAAXK@Z|

; 159  :     }

  008f4	eaffffe7	 b           |$L32170|
  008f8		 |$L32171|

; 160  :     if (dwCount == 5)

  008f8	e59d3000	 ldr         r3, [sp]
  008fc	e3530005	 cmp         r3, #5

⌨️ 快捷键说明

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