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

📄 cdio.cod

📁 2440 CE500BSP包, EBOOT可用DEBUG版调试
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00398	e58d303c	 str         r3, [sp, #0x3C]
  0039c	ea000130	 b           |$L32097|
  003a0		 |$L32114|

; 40   :                 RAW_READ_INFO *prri = (RAW_READ_INFO *)pIOReq->pInBuf;

  003a0	e59d30c0	 ldr         r3, [sp, #0xC0]
  003a4	e2833018	 add         r3, r3, #0x18
  003a8	e5933000	 ldr         r3, [r3]
  003ac	e58d3008	 str         r3, [sp, #8]

; 41   :                 if (prri && (pIOReq->dwInBufSize == sizeof(RAW_READ_INFO)) && pIOReq->pOutBuf) {

  003b0	e59d3008	 ldr         r3, [sp, #8]
  003b4	e3530000	 cmp         r3, #0
  003b8	0a000033	 beq         |$L32118|
  003bc	e59d30c0	 ldr         r3, [sp, #0xC0]
  003c0	e283301c	 add         r3, r3, #0x1C
  003c4	e5933000	 ldr         r3, [r3]
  003c8	e3530010	 cmp         r3, #0x10
  003cc	1a00002e	 bne         |$L32118|
  003d0	e59d30c0	 ldr         r3, [sp, #0xC0]
  003d4	e2833020	 add         r3, r3, #0x20
  003d8	e5933000	 ldr         r3, [r3]
  003dc	e3530000	 cmp         r3, #0
  003e0	0a000029	 beq         |$L32118|

; 42   :                     CDROM_READ cdr;
; 43   :                     cdr.StartAddr.Mode = CDROM_ADDR_LBA;

  003e4	e3a03000	 mov         r3, #0
  003e8	e58d3010	 str         r3, [sp, #0x10]

; 44   :                     cdr.bRawMode = TRUE;

  003ec	e3a03001	 mov         r3, #1
  003f0	e58d301c	 str         r3, [sp, #0x1C]

; 45   :                     cdr.sgcount = 1;

  003f4	e3a03001	 mov         r3, #1
  003f8	e58d3024	 str         r3, [sp, #0x24]

; 46   :                     cdr.TrackMode = CDDA;

  003fc	e3a03002	 mov         r3, #2
  00400	e58d3020	 str         r3, [sp, #0x20]

; 47   :                     cdr.StartAddr.Address.lba = prri->DiskOffset.LowPart;

  00404	e59d3008	 ldr         r3, [sp, #8]
  00408	e5933000	 ldr         r3, [r3]
  0040c	e58d3014	 str         r3, [sp, #0x14]

; 48   :                     cdr.TransferLength = (DWORD)(prri->SectorCount & 0xffffffff);

  00410	e59d3008	 ldr         r3, [sp, #8]
  00414	e2831008	 add         r1, r3, #8
  00418	e5d13003	 ldrb        r3, [r1, #3]
  0041c	e1a02403	 mov         r2, r3, lsl #8
  00420	e5d13002	 ldrb        r3, [r1, #2]
  00424	e1833002	 orr         r3, r3, r2
  00428	e1a02403	 mov         r2, r3, lsl #8
  0042c	e5d13001	 ldrb        r3, [r1, #1]
  00430	e1833002	 orr         r3, r3, r2
  00434	e1a02403	 mov         r2, r3, lsl #8
  00438	e5d13000	 ldrb        r3, [r1]
  0043c	e1833002	 orr         r3, r3, r2
  00440	e58d3018	 str         r3, [sp, #0x18]

; 49   :                     cdr.sglist[0].sb_buf = pIOReq->pOutBuf;

  00444	e59d30c0	 ldr         r3, [sp, #0xC0]
  00448	e2833020	 add         r3, r3, #0x20
  0044c	e5933000	 ldr         r3, [r3]
  00450	e58d3028	 str         r3, [sp, #0x28]

; 50   :                     cdr.sglist[0].sb_len = pIOReq->dwOutBufSize;

  00454	e59d30c0	 ldr         r3, [sp, #0xC0]
  00458	e2833024	 add         r3, r3, #0x24
  0045c	e5933000	 ldr         r3, [r3]
  00460	e58d302c	 str         r3, [sp, #0x2C]

; 51   :                     dwError = ReadCdRom(&cdr, pIOReq->pBytesReturned);

  00464	e59d30c0	 ldr         r3, [sp, #0xC0]
  00468	e2833028	 add         r3, r3, #0x28
  0046c	e5932000	 ldr         r2, [r3]
  00470	e28d1010	 add         r1, sp, #0x10
  00474	e59d00bc	 ldr         r0, [sp, #0xBC]
  00478	eb000000	 bl          |?ReadCdRom@CPCIDiskAndCD@@QAAKPAUCDROM_READ@@PAK@Z|
  0047c	e58d0058	 str         r0, [sp, #0x58]
  00480	e59d3058	 ldr         r3, [sp, #0x58]
  00484	e58d3004	 str         r3, [sp, #4]

; 52   :                 } else {

  00488	ea000001	 b           |$L32121|
  0048c		 |$L32118|

; 53   :                     dwError = ERROR_INVALID_PARAMETER;

  0048c	e3a03057	 mov         r3, #0x57
  00490	e58d3004	 str         r3, [sp, #4]
  00494		 |$L32121|

; 54   :                 }    
; 55   :             }    
; 56   :             break;

  00494	ea0000f0	 b           |$L32103|
  00498		 |$L32122|

; 57   :         case IOCTL_CDROM_TEST_UNIT_READY:
; 58   :             if (!AtapiIsUnitReady(pIOReq)) {

  00498	e59d10c0	 ldr         r1, [sp, #0xC0]
  0049c	e59d00bc	 ldr         r0, [sp, #0xBC]
  004a0	eb000000	 bl          |?AtapiIsUnitReady@CPCIDiskAndCD@@QAAHPAU_IOREQ@@@Z|
  004a4	e58d005c	 str         r0, [sp, #0x5C]
  004a8	e59d305c	 ldr         r3, [sp, #0x5C]
  004ac	e3530000	 cmp         r3, #0
  004b0	1a000001	 bne         |$L32123|

; 59   :                 dwError = ERROR_NOT_READY;

  004b4	e3a03015	 mov         r3, #0x15
  004b8	e58d3004	 str         r3, [sp, #4]
  004bc		 |$L32123|

; 60   :             }
; 61   :             break;   

  004bc	ea0000e6	 b           |$L32103|
  004c0		 |$L32124|

; 62   :         case IOCTL_CDROM_DISC_INFO:
; 63   :             if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  004c0	e59d00bc	 ldr         r0, [sp, #0xBC]
  004c4	eb000000	 bl          |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|
  004c8	e58d0060	 str         r0, [sp, #0x60]
  004cc	e59d3060	 ldr         r3, [sp, #0x60]
  004d0	e3530000	 cmp         r3, #0
  004d4	1a000002	 bne         |$L32125|
  004d8	e3a03015	 mov         r3, #0x15
  004dc	e58d303c	 str         r3, [sp, #0x3C]
  004e0	ea0000df	 b           |$L32097|
  004e4		 |$L32125|

; 64   :             dwError = AtapiGetDiscInfo(pIOReq);

  004e4	e59d10c0	 ldr         r1, [sp, #0xC0]
  004e8	e59d00bc	 ldr         r0, [sp, #0xBC]
  004ec	eb000000	 bl          |?AtapiGetDiscInfo@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|
  004f0	e58d0064	 str         r0, [sp, #0x64]
  004f4	e59d3064	 ldr         r3, [sp, #0x64]
  004f8	e58d3004	 str         r3, [sp, #4]

; 65   :             break;    

  004fc	ea0000d6	 b           |$L32103|
  00500		 |$L32126|

; 66   :         case IOCTL_CDROM_EJECT_MEDIA:
; 67   :             dwError = AtapiLoadMedia(TRUE);

  00500	e3a01001	 mov         r1, #1
  00504	e59d00bc	 ldr         r0, [sp, #0xBC]
  00508	eb000000	 bl          |?AtapiLoadMedia@CPCIDiskAndCD@@QAAKH@Z|
  0050c	e58d0068	 str         r0, [sp, #0x68]
  00510	e59d3068	 ldr         r3, [sp, #0x68]
  00514	e58d3004	 str         r3, [sp, #4]

; 68   :             break;

  00518	ea0000cf	 b           |$L32103|
  0051c		 |$L32127|

; 69   :         case IOCTL_CDROM_LOAD_MEDIA:
; 70   :             dwError = AtapiLoadMedia(FALSE);

  0051c	e3a01000	 mov         r1, #0
  00520	e59d00bc	 ldr         r0, [sp, #0xBC]
  00524	eb000000	 bl          |?AtapiLoadMedia@CPCIDiskAndCD@@QAAKH@Z|
  00528	e58d006c	 str         r0, [sp, #0x6C]
  0052c	e59d306c	 ldr         r3, [sp, #0x6C]
  00530	e58d3004	 str         r3, [sp, #4]

; 71   :             break;

  00534	ea0000c8	 b           |$L32103|
  00538		 |$L32128|

; 72   :         case IOCTL_CDROM_GET_SENSE_DATA:
; 73   :             {
; 74   :                 CD_SENSE_DATA *pSenseData = (CD_SENSE_DATA *)pIOReq->pOutBuf;

  00538	e59d30c0	 ldr         r3, [sp, #0xC0]
  0053c	e2833020	 add         r3, r3, #0x20
  00540	e5933000	 ldr         r3, [r3]
  00544	e58d3030	 str         r3, [sp, #0x30]

; 75   :                 if ((pSenseData == NULL) || 
; 76   :                     (pIOReq->dwOutBufSize < sizeof(CD_SENSE_DATA))) {

  00548	e59d3030	 ldr         r3, [sp, #0x30]
  0054c	e3530000	 cmp         r3, #0
  00550	0a000004	 beq         |$L32133|
  00554	e59d30c0	 ldr         r3, [sp, #0xC0]
  00558	e2833024	 add         r3, r3, #0x24
  0055c	e5933000	 ldr         r3, [r3]
  00560	e3530012	 cmp         r3, #0x12
  00564	2a000002	 bcs         |$L32132|
  00568		 |$L32133|

; 77   :                     dwError = ERROR_INVALID_PARAMETER;

  00568	e3a03057	 mov         r3, #0x57
  0056c	e58d3004	 str         r3, [sp, #4]

; 78   :                 } else {

  00570	ea00000d	 b           |$L32134|
  00574		 |$L32132|

; 79   :                     dwError = AtapiGetSenseInfo(pSenseData)? ERROR_SUCCESS : ERROR_GEN_FAILURE;

  00574	e59d1030	 ldr         r1, [sp, #0x30]
  00578	e59d00bc	 ldr         r0, [sp, #0xBC]
  0057c	eb000000	 bl          |?AtapiGetSenseInfo@CPCIDiskAndCD@@QAAHPAU_CD_SENSE_DATA@@@Z|
  00580	e58d0070	 str         r0, [sp, #0x70]
  00584	e59d3070	 ldr         r3, [sp, #0x70]
  00588	e3530000	 cmp         r3, #0
  0058c	0a000002	 beq         |$L32721|
  00590	e3a03000	 mov         r3, #0
  00594	e58d3074	 str         r3, [sp, #0x74]
  00598	ea000001	 b           |$L32722|
  0059c		 |$L32721|
  0059c	e3a0301f	 mov         r3, #0x1F
  005a0	e58d3074	 str         r3, [sp, #0x74]
  005a4		 |$L32722|
  005a4	e59d3074	 ldr         r3, [sp, #0x74]
  005a8	e58d3004	 str         r3, [sp, #4]
  005ac		 |$L32134|

; 80   :                 }    
; 81   :             }    
; 82   :             break;

  005ac	ea0000aa	 b           |$L32103|
  005b0		 |$L32135|

; 83   :         case IOCTL_CDROM_ISSUE_INQUIRY:
; 84   :             {
; 85   :                 INQUIRY_DATA *pInquiryData = (INQUIRY_DATA *)pIOReq->pOutBuf;

  005b0	e59d30c0	 ldr         r3, [sp, #0xC0]
  005b4	e2833020	 add         r3, r3, #0x20
  005b8	e5933000	 ldr         r3, [r3]
  005bc	e58d3034	 str         r3, [sp, #0x34]

; 86   :                 if ((pInquiryData == NULL) || 
; 87   :                     (pIOReq->dwOutBufSize< sizeof(INQUIRY_DATA))) {

  005c0	e59d3034	 ldr         r3, [sp, #0x34]
  005c4	e3530000	 cmp         r3, #0
  005c8	0a000004	 beq         |$L32140|
  005cc	e59d30c0	 ldr         r3, [sp, #0xC0]
  005d0	e2833024	 add         r3, r3, #0x24
  005d4	e5933000	 ldr         r3, [r3]
  005d8	e3530060	 cmp         r3, #0x60
  005dc	2a000002	 bcs         |$L32139|
  005e0		 |$L32140|

; 88   :                     dwError = ERROR_INVALID_PARAMETER;

  005e0	e3a03057	 mov         r3, #0x57
  005e4	e58d3004	 str         r3, [sp, #4]

; 89   :                 } else {

  005e8	ea00000d	 b           |$L32141|
  005ec		 |$L32139|

; 90   :                     dwError = AtapiIssueInquiry(pInquiryData)? ERROR_SUCCESS : ERROR_GEN_FAILURE;

  005ec	e59d1034	 ldr         r1, [sp, #0x34]
  005f0	e59d00bc	 ldr         r0, [sp, #0xBC]
  005f4	eb000000	 bl          |?AtapiIssueInquiry@CPCIDiskAndCD@@QAAHPAU_INQUIRY_DATA@@@Z|
  005f8	e58d0078	 str         r0, [sp, #0x78]
  005fc	e59d3078	 ldr         r3, [sp, #0x78]
  00600	e3530000	 cmp         r3, #0
  00604	0a000002	 beq         |$L32723|
  00608	e3a03000	 mov         r3, #0
  0060c	e58d307c	 str         r3, [sp, #0x7C]
  00610	ea000001	 b           |$L32724|
  00614		 |$L32723|
  00614	e3a0301f	 mov         r3, #0x1F
  00618	e58d307c	 str         r3, [sp, #0x7C]
  0061c		 |$L32724|
  0061c	e59d307c	 ldr         r3, [sp, #0x7C]
  00620	e58d3004	 str         r3, [sp, #4]
  00624		 |$L32141|

; 91   :                 }  
; 92   :             }
; 93   :             break;

  00624	ea00008c	 b           |$L32103|
  00628		 |$L32142|

; 94   :         case IOCTL_CDROM_READ_TOC:
; 95   :             {
; 96   :                 if (!AtapiIsUnitReadyEx()) return ERROR_NOT_READY;

  00628	e59d00bc	 ldr         r0, [sp, #0xBC]
  0062c	eb000000	 bl          |?AtapiIsUnitReadyEx@CPCIDiskAndCD@@QAAHXZ|
  00630	e58d0080	 str         r0, [sp, #0x80]
  00634	e59d3080	 ldr         r3, [sp, #0x80]
  00638	e3530000	 cmp         r3, #0
  0063c	1a000002	 bne         |$L32143|
  00640	e3a03015	 mov         r3, #0x15
  00644	e58d303c	 str         r3, [sp, #0x3C]
  00648	ea000085	 b           |$L32097|
  0064c		 |$L32143|

; 97   :                 CDROM_TOC *pTOC = NULL;

  0064c	e3a03000	 mov         r3, #0
  00650	e58d3038	 str         r3, [sp, #0x38]

; 98   :                 if (pIOReq->pInBuf && (pIOReq->dwInBufSize == sizeof(CDROM_TOC))) {

  00654	e59d30c0	 ldr         r3, [sp, #0xC0]
  00658	e2833018	 add         r3, r3, #0x18
  0065c	e5933000	 ldr         r3, [r3]
  00660	e3530000	 cmp         r3, #0
  00664	0a000009	 beq         |$L32146|
  00668	e59d30c0	 ldr         r3, [sp, #0xC0]
  0066c	e283301c	 add         r3, r3, #0x1C
  00670	e5933000	 ldr         r3, [r3]

⌨️ 快捷键说明

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