📄 cdaudio.cod
字号:
00220 e5cd3008 strb r3, [sp, #8]
; 53 : CmdPkt.Byte_2 = LBA_MSB(&dwLBAAddr);
00224 e5dd3037 ldrb r3, [sp, #0x37]
00228 e5cd300a strb r3, [sp, #0xA]
; 54 : CmdPkt.Byte_3 = LBA_3rdLSB(&dwLBAAddr);
0022c e5dd3036 ldrb r3, [sp, #0x36]
00230 e5cd300b strb r3, [sp, #0xB]
; 55 : CmdPkt.Byte_4 = LBA_2ndLSB(&dwLBAAddr);
00234 e5dd3035 ldrb r3, [sp, #0x35]
00238 e5cd300c strb r3, [sp, #0xC]
; 56 : CmdPkt.Byte_5 = LBA_LSB(&dwLBAAddr);
0023c e5dd3034 ldrb r3, [sp, #0x34]
00240 e5cd300d strb r3, [sp, #0xD]
; 57 : }
; 58 : break;
00244 ea00003f b |$L32106|
00248 |$L32131|
; 59 : case IOCTL_CDROM_SCAN_AUDIO:
; 60 : {
; 61 : CDROM_SCAN_AUDIO *pScan = (CDROM_SCAN_AUDIO *) pIOReq->pInBuf;
00248 e59d3060 ldr r3, [sp, #0x60]
0024c e2833018 add r3, r3, #0x18
00250 e5933000 ldr r3, [r3]
00254 e58d3038 str r3, [sp, #0x38]
; 62 : if (!pScan || (sizeof(CDROM_SCAN_AUDIO) > pIOReq->dwInBufSize)) {
00258 e59d3038 ldr r3, [sp, #0x38]
0025c e3530000 cmp r3, #0
00260 0a000004 beq |$L32136|
00264 e59d3060 ldr r3, [sp, #0x60]
00268 e283301c add r3, r3, #0x1C
0026c e5933000 ldr r3, [r3]
00270 e3530009 cmp r3, #9
00274 2a000002 bcs |$L32135|
00278 |$L32136|
; 63 : dwError = ERROR_BAD_ARGUMENTS;
00278 e3a030a0 mov r3, #0xA0
0027c e58d3028 str r3, [sp, #0x28]
; 64 : break;
00280 ea000030 b |$L32106|
00284 |$L32135|
; 65 : }
; 66 : CmdPkt.Opcode = ATAPI_PACKET_CMD_SCAN_AUDIO;
00284 e3a030ba mov r3, #0xBA
00288 e5cd3008 strb r3, [sp, #8]
; 67 : CmdPkt.Byte_1 = (pScan->Direction << 4) & 0x10;
0028c e59d3038 ldr r3, [sp, #0x38]
00290 e5d33000 ldrb r3, [r3]
00294 e1a03d83 mov r3, r3, lsl #27
00298 e1a03fa3 mov r3, r3, lsr #31
0029c e20330ff and r3, r3, #0xFF
002a0 e1a03203 mov r3, r3, lsl #4
002a4 e2033010 and r3, r3, #0x10
002a8 e20330ff and r3, r3, #0xFF
002ac e5cd3009 strb r3, [sp, #9]
; 68 : CmdPkt.Byte_2 = pScan->Address[0];
002b0 e59d3038 ldr r3, [sp, #0x38]
002b4 e2833001 add r3, r3, #1
002b8 e5d33000 ldrb r3, [r3]
002bc e5cd300a strb r3, [sp, #0xA]
; 69 : CmdPkt.Byte_3 = pScan->Address[1];
002c0 e59d3038 ldr r3, [sp, #0x38]
002c4 e2833002 add r3, r3, #2
002c8 e5d33000 ldrb r3, [r3]
002cc e5cd300b strb r3, [sp, #0xB]
; 70 : CmdPkt.Byte_4 = pScan->Address[2];
002d0 e59d3038 ldr r3, [sp, #0x38]
002d4 e2833003 add r3, r3, #3
002d8 e5d33000 ldrb r3, [r3]
002dc e5cd300c strb r3, [sp, #0xC]
; 71 : CmdPkt.Byte_5 = pScan->Address[3];
002e0 e59d3038 ldr r3, [sp, #0x38]
002e4 e2833004 add r3, r3, #4
002e8 e5d33000 ldrb r3, [r3]
002ec e5cd300d strb r3, [sp, #0xD]
; 72 : CmdPkt.Byte_9 = pScan->AddressType << 6;
002f0 e59d3038 ldr r3, [sp, #0x38]
002f4 e2833008 add r3, r3, #8
002f8 e5d33000 ldrb r3, [r3]
002fc e1a03c03 mov r3, r3, lsl #24
00300 e1a03f23 mov r3, r3, lsr #30
00304 e20330ff and r3, r3, #0xFF
00308 e1a03303 mov r3, r3, lsl #6
0030c e20330ff and r3, r3, #0xFF
00310 e5cd3011 strb r3, [sp, #0x11]
; 73 : }
; 74 : break;
00314 ea00000b b |$L32106|
00318 |$L32137|
; 75 : case IOCTL_CDROM_STOP_AUDIO:
; 76 : CmdPkt.Opcode = ATAPI_PACKET_CMD_STOP_PLAY_SCAN;
00318 e3a0304e mov r3, #0x4E
0031c e5cd3008 strb r3, [sp, #8]
; 77 : break;
00320 ea000008 b |$L32106|
00324 |$L32138|
; 78 : case IOCTL_CDROM_PAUSE_AUDIO:
; 79 : CmdPkt.Opcode = ATAPI_PACKET_CMD_PAUSE_RESUME;
00324 e3a0304b mov r3, #0x4B
00328 e5cd3008 strb r3, [sp, #8]
; 80 : CmdPkt.Byte_8 = 0;
0032c e3a03000 mov r3, #0
00330 e5cd3010 strb r3, [sp, #0x10]
; 81 : break;
00334 ea000003 b |$L32106|
00338 |$L32139|
; 82 : case IOCTL_CDROM_RESUME_AUDIO:
; 83 : CmdPkt.Opcode = ATAPI_PACKET_CMD_PAUSE_RESUME;
00338 e3a0304b mov r3, #0x4B
0033c e5cd3008 strb r3, [sp, #8]
; 84 : CmdPkt.Byte_8 = 1;
00340 e3a03001 mov r3, #1
00344 e5cd3010 strb r3, [sp, #0x10]
00348 |$L32106|
; 85 : break;
; 86 : }
; 87 :
; 88 : if (ERROR_SUCCESS == dwError) {
00348 e59d3028 ldr r3, [sp, #0x28]
0034c e3530000 cmp r3, #0
00350 1a00002a bne |$L32140|
; 89 : SgBuf.sb_len = 0;
00354 e3a03000 mov r3, #0
00358 e58d3024 str r3, [sp, #0x24]
; 90 : SgBuf.sb_buf = NULL;
0035c e3a03000 mov r3, #0
00360 e58d3020 str r3, [sp, #0x20]
; 91 :
; 92 : if (AtapiSendCommand(&CmdPkt)) {
00364 e3a03000 mov r3, #0
00368 e3a02000 mov r2, #0
0036c e28d1008 add r1, sp, #8
00370 e59d005c ldr r0, [sp, #0x5C]
00374 eb000000 bl |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
00378 e58d0048 str r0, [sp, #0x48]
0037c e59d3048 ldr r3, [sp, #0x48]
00380 e3530000 cmp r3, #0
00384 0a00001a beq |$L32141|
; 93 : if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
00388 e28d3000 add r3, sp, #0
0038c e3a02001 mov r2, #1
00390 e28d1020 add r1, sp, #0x20
00394 e59d005c ldr r0, [sp, #0x5C]
00398 eb000000 bl |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z|
0039c e58d004c str r0, [sp, #0x4C]
003a0 e59d304c ldr r3, [sp, #0x4C]
003a4 e3530000 cmp r3, #0
003a8 1a000010 bne |$L32142|
; 94 : DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::PlayAudioMSF failed on receive\r\n")));
003ac e59f3068 ldr r3, [pc, #0x68]
003b0 e5933440 ldr r3, [r3, #0x440]
003b4 e2032a02 and r2, r3, #2, 20
003b8 e59f305c ldr r3, [pc, #0x5C]
003bc e5933440 ldr r3, [r3, #0x440]
003c0 e2033080 and r3, r3, #0x80
003c4 e1923003 orrs r3, r2, r3
003c8 0a000004 beq |$L32163|
003cc e59f0044 ldr r0, [pc, #0x44]
003d0 eb000000 bl NKDbgPrintfW
003d4 e3a03001 mov r3, #1
003d8 e58d3050 str r3, [sp, #0x50]
003dc ea000001 b |$L32164|
003e0 |$L32163|
003e0 e3a03000 mov r3, #0
003e4 e58d3050 str r3, [sp, #0x50]
003e8 |$L32164|
; 95 : dwError = ERROR_READ_FAULT;
003e8 e3a0301e mov r3, #0x1E
003ec e58d3028 str r3, [sp, #0x28]
003f0 |$L32142|
; 96 : }
; 97 : } else {
003f0 ea000002 b |$L32145|
003f4 |$L32141|
; 98 : // TODO: AtaCheckError()
; 99 : return ERROR_GEN_FAILURE;
003f4 e3a0301f mov r3, #0x1F
003f8 e58d303c str r3, [sp, #0x3C]
003fc ea000001 b |$L32097|
00400 |$L32145|
00400 |$L32140|
; 100 : }
; 101 : }
; 102 :
; 103 : return dwError;
00400 e59d3028 ldr r3, [sp, #0x28]
00404 e58d303c str r3, [sp, #0x3C]
00408 |$L32097|
; 98 : // TODO: AtaCheckError()
; 99 : return ERROR_GEN_FAILURE;
00408 e59d003c ldr r0, [sp, #0x3C]
; 104 : }
0040c e28dd054 add sp, sp, #0x54
00410 e89d6000 ldmia sp, {sp, lr}
00414 e12fff1e bx lr
00418 |$L32170|
00418 00000000 DCD |??_C@_1FA@IDFFGBMO@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AA?3?$AAP?$AAl?$AAa?$AAy?$AAA?$AAu?$AAd?$AAi?$AAo?$AAM?$AAS?$AAF?$AA?5@|
0041c 00000000 DCD |dpCurSettings|
00420 00000000 DCD |??_C@_1EA@PCEDIIOM@?$AAA?$AAT?$AAA?$AAP?$AAI?$AA?3?$AAP?$AAl?$AAa?$AAy?$AAA?$AAu?$AAd?$AAi?$AAo?$AAM?$AAS?$AAF?$AA?5?$AA?9@|
00424 |$M32167|
ENDP ; |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::ControlAudio
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -