?? cdaudio.cod
字號(hào):
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4091
TTL C:\WINCE500\PLATFORM\SMDK2410\DRIVERS\atapi\.\cdaudio.cpp
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| ; CPCIDiskAndCD::ControlAudio
IMPORT |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CPCIDiskAndCD::AtapiSendCommand
IMPORT |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CPCIDiskAndCD::AtapiReceiveData
IMPORT |memset|
; File c:\wince500\platform\smdk2410\drivers\atapi\cdaudio.cpp
00000 AREA |.text| { |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T32168| DCD |$L32167|
DCD 0x40008d02
; Function compile flags: /Ogsy
00000 AREA |.text| { |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| PROC ; CPCIDiskAndCD::ControlAudio
; 15 : {
00000 |$L32167|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 e24dd024 sub sp, sp, #0x24
00008 |$M32165|
00008 e1a05001 mov r5, r1
0000c e1a06000 mov r6, r0
; 16 : ATAPI_COMMAND_PACKET CmdPkt;
; 17 : DWORD dwError = ERROR_SUCCESS;
; 18 : SGX_BUF SgBuf;
; 19 : DWORD dwRet;
; 20 :
; 21 : DEBUGMSG(ZONE_IOCTL, (TEXT("ATAPI:PlayAudioMSF - Entered.\r\n")));
; 22 :
; 23 : memset( (void *)&CmdPkt, 0, sizeof( CmdPkt));
00010 e3a02014 mov r2, #0x14
00014 e3a01000 mov r1, #0
00018 e28d0010 add r0, sp, #0x10
0001c e3a04000 mov r4, #0
00020 eb000000 bl memset
; 24 :
; 25 : switch(pIOReq->dwCode) {
00024 e5952014 ldr r2, [r5, #0x14]
00028 e3a03802 mov r3, #2, 16
0002c e3833080 orr r3, r3, #0x80
00030 e1520003 cmp r2, r3
00034 0a00004f beq |$L32122|
00038 e3a03909 mov r3, #9, 18
0003c e3833004 orr r3, r3, #4
00040 e1520003 cmp r2, r3
00044 0a00002e beq |$L32106|
00048 e3a03909 mov r3, #9, 18
0004c e3833008 orr r3, r3, #8
00050 e1520003 cmp r2, r3
00054 0a000027 beq |$L32128|
00058 e3a03909 mov r3, #9, 18
0005c e383300c orr r3, r3, #0xC
00060 e1520003 cmp r2, r3
00064 0a00001e beq |$L32129|
00068 e3a03909 mov r3, #9, 18
0006c e3833010 orr r3, r3, #0x10
00070 e1520003 cmp r2, r3
00074 0a000018 beq |$L32130|
00078 e3a03909 mov r3, #9, 18
0007c e3833018 orr r3, r3, #0x18
00080 e1520003 cmp r2, r3
00084 1a000051 bne |$L32153|
; 26 : case IOCTL_CDROM_PLAY_AUDIO_MSF:
; 27 : {
; 28 : PCDROM_PLAY_AUDIO_MSF pPlayMSF;
; 29 : pPlayMSF = (PCDROM_PLAY_AUDIO_MSF) pIOReq->pInBuf;
00088 e5953018 ldr r3, [r5, #0x18]
0008c e1b02003 movs r2, r3
; 30 : if (!pPlayMSF || (sizeof(CDROM_PLAY_AUDIO_MSF) > pIOReq->dwInBufSize)) {
00090 0a000036 beq |$L32112|
00094 e595301c ldr r3, [r5, #0x1C]
00098 e3530006 cmp r3, #6
0009c 3a000033 bcc |$L32112|
; 31 : dwError = ERROR_BAD_ARGUMENTS;
; 32 : break;
; 33 : }
; 34 : CmdPkt.Opcode = ATAPI_PACKET_CMD_PLAY_MSF;
000a0 e3a03047 mov r3, #0x47
000a4 e5cd3010 strb r3, [sp, #0x10]
; 35 : CmdPkt.Byte_3 = pPlayMSF->StartingM;
000a8 e5d23000 ldrb r3, [r2]
000ac e5cd3013 strb r3, [sp, #0x13]
; 36 : CmdPkt.Byte_4 = pPlayMSF->StartingS;
000b0 e5d23001 ldrb r3, [r2, #1]
000b4 e5cd3014 strb r3, [sp, #0x14]
; 37 : CmdPkt.Byte_5 = pPlayMSF->StartingF;
000b8 e5d23002 ldrb r3, [r2, #2]
000bc e5cd3015 strb r3, [sp, #0x15]
; 38 : CmdPkt.Byte_6 = pPlayMSF->EndingM;
000c0 e5d23003 ldrb r3, [r2, #3]
000c4 e5cd3016 strb r3, [sp, #0x16]
; 39 : CmdPkt.Byte_7 = pPlayMSF->EndingS;
000c8 e5d23004 ldrb r3, [r2, #4]
000cc e5cd3017 strb r3, [sp, #0x17]
; 40 : CmdPkt.Byte_8 = pPlayMSF->EndingF;
000d0 e5d23005 ldrb r3, [r2, #5]
000d4 e5cd3018 strb r3, [sp, #0x18]
; 41 : }
; 42 : break;
000d8 ea00003c b |$L32153|
000dc |$L32130|
; 82 : case IOCTL_CDROM_RESUME_AUDIO:
; 83 : CmdPkt.Opcode = ATAPI_PACKET_CMD_PAUSE_RESUME;
; 84 : CmdPkt.Byte_8 = 1;
000dc e3a02001 mov r2, #1
; 85 : break;
000e0 ea000000 b |$L32164|
000e4 |$L32129|
; 80 : CmdPkt.Byte_8 = 0;
000e4 e3a02000 mov r2, #0
000e8 |$L32164|
; 78 : case IOCTL_CDROM_PAUSE_AUDIO:
; 79 : CmdPkt.Opcode = ATAPI_PACKET_CMD_PAUSE_RESUME;
000e8 e3a0304b mov r3, #0x4B
; 80 : CmdPkt.Byte_8 = 0;
000ec e5cd3010 strb r3, [sp, #0x10]
000f0 e5cd2018 strb r2, [sp, #0x18]
; 81 : break;
000f4 ea000035 b |$L32153|
000f8 |$L32128|
; 73 : }
; 74 : break;
; 75 : case IOCTL_CDROM_STOP_AUDIO:
; 76 : CmdPkt.Opcode = ATAPI_PACKET_CMD_STOP_PLAY_SCAN;
000f8 e3a0304e mov r3, #0x4E
000fc e5cd3010 strb r3, [sp, #0x10]
; 77 : break;
00100 ea000032 b |$L32153|
00104 |$L32106|
; 43 : case IOCTL_CDROM_SEEK_AUDIO_MSF:
; 44 : {
; 45 : CDROM_SEEK_AUDIO_MSF *pSeekMSF = (CDROM_SEEK_AUDIO_MSF *) pIOReq->pInBuf;
00104 e5953018 ldr r3, [r5, #0x18]
00108 e1b01003 movs r1, r3
; 46 : DWORD dwLBAAddr;
; 47 : if (!pSeekMSF || (sizeof(CDROM_SEEK_AUDIO_MSF) > pIOReq->dwInBufSize)) {
0010c 0a000017 beq |$L32112|
00110 e595301c ldr r3, [r5, #0x1C]
00114 e3530003 cmp r3, #3
00118 3a000014 bcc |$L32112|
; 50 : }
; 51 : dwLBAAddr = CDROM_MSFCOMP_TO_LBA( pSeekMSF->M, pSeekMSF->S, pSeekMSF->F);
0011c e5d13000 ldrb r3, [r1]
00120 e5d12001 ldrb r2, [r1, #1]
00124 e5d11002 ldrb r1, [r1, #2]
00128 e0633203 rsb r3, r3, r3, lsl #4
0012c e0823103 add r3, r2, r3, lsl #2
00130 e0633203 rsb r3, r3, r3, lsl #4
00134 e0833103 add r3, r3, r3, lsl #2
00138 e0833001 add r3, r3, r1
0013c e2433096 sub r3, r3, #0x96
00140 e58d3000 str r3, [sp]
; 52 : CmdPkt.Opcode = ATAPI_PACKET_CMD_SEEK;
; 53 : CmdPkt.Byte_2 = LBA_MSB(&dwLBAAddr);
00144 e5dd3003 ldrb r3, [sp, #3]
; 54 : CmdPkt.Byte_3 = LBA_3rdLSB(&dwLBAAddr);
00148 e5dd2002 ldrb r2, [sp, #2]
; 55 : CmdPkt.Byte_4 = LBA_2ndLSB(&dwLBAAddr);
0014c e5dd1001 ldrb r1, [sp, #1]
; 56 : CmdPkt.Byte_5 = LBA_LSB(&dwLBAAddr);
00150 e5dd0000 ldrb r0, [sp]
00154 e3a0e02b mov lr, #0x2B
00158 e5cd3012 strb r3, [sp, #0x12]
0015c e5cd2013 strb r2, [sp, #0x13]
00160 e5cd1014 strb r1, [sp, #0x14]
00164 e5cd0015 strb r0, [sp, #0x15]
00168 e5cde010 strb lr, [sp, #0x10]
; 57 : }
; 58 : break;
0016c ea000017 b |$L32153|
00170 |$L32112|
; 48 : dwError = ERROR_BAD_ARGUMENTS;
00170 e3a040a0 mov r4, #0xA0
; 49 : break;
00174 ea00002a b |$L32135|
00178 |$L32122|
; 59 : case IOCTL_CDROM_SCAN_AUDIO:
; 60 : {
; 61 : CDROM_SCAN_AUDIO *pScan = (CDROM_SCAN_AUDIO *) pIOReq->pInBuf;
00178 e5953018 ldr r3, [r5, #0x18]
0017c e1b02003 movs r2, r3
; 62 : if (!pScan || (sizeof(CDROM_SCAN_AUDIO) > pIOReq->dwInBufSize)) {
00180 0afffffa beq |$L32112|
00184 e595301c ldr r3, [r5, #0x1C]
00188 e3530009 cmp r3, #9
0018c 3afffff7 bcc |$L32112|
; 63 : dwError = ERROR_BAD_ARGUMENTS;
; 64 : break;
; 65 : }
; 66 : CmdPkt.Opcode = ATAPI_PACKET_CMD_SCAN_AUDIO;
00190 e3a030ba mov r3, #0xBA
00194 e5cd3010 strb r3, [sp, #0x10]
; 67 : CmdPkt.Byte_1 = (pScan->Direction << 4) & 0x10;
00198 e5d23000 ldrb r3, [r2]
0019c e2033010 and r3, r3, #0x10
001a0 e5cd3011 strb r3, [sp, #0x11]
; 68 : CmdPkt.Byte_2 = pScan->Address[0];
001a4 e5d23001 ldrb r3, [r2, #1]
001a8 e5cd3012 strb r3, [sp, #0x12]
; 69 : CmdPkt.Byte_3 = pScan->Address[1];
001ac e5d23002 ldrb r3, [r2, #2]
001b0 e5cd3013 strb r3, [sp, #0x13]
; 70 : CmdPkt.Byte_4 = pScan->Address[2];
001b4 e5d23003 ldrb r3, [r2, #3]
001b8 e5cd3014 strb r3, [sp, #0x14]
; 71 : CmdPkt.Byte_5 = pScan->Address[3];
001bc e5d23004 ldrb r3, [r2, #4]
001c0 e5cd3015 strb r3, [sp, #0x15]
; 72 : CmdPkt.Byte_9 = pScan->AddressType << 6;
001c4 e5d23008 ldrb r3, [r2, #8]
001c8 e20330c0 and r3, r3, #0xC0
001cc e5cd3019 strb r3, [sp, #0x19]
001d0 |$L32153|
; 86 : }
; 87 :
; 88 : if (ERROR_SUCCESS == dwError) {
; 89 : SgBuf.sb_len = 0;
001d0 e3a03000 mov r3, #0
; 90 : SgBuf.sb_buf = NULL;
001d4 e3a02000 mov r2, #0
001d8 e58d300c str r3, [sp, #0xC]
001dc e58d2008 str r2, [sp, #8]
; 91 :
; 92 : if (AtapiSendCommand(&CmdPkt)) {
001e0 e3a03000 mov r3, #0
001e4 e3a02000 mov r2, #0
001e8 e28d1010 add r1, sp, #0x10
001ec e1a00006 mov r0, r6
001f0 eb000000 bl |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
001f4 e3500000 cmp r0, #0
001f8 0a000008 beq |$L32132|
; 93 : if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {
001fc e28d3000 add r3, sp, #0
00200 e3a02001 mov r2, #1
00204 e28d1008 add r1, sp, #8
00208 e1a00006 mov r0, r6
0020c eb000000 bl |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z|
00210 e3500000 cmp r0, #0
00214 1a000002 bne |$L32135|
; 94 : DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::PlayAudioMSF failed on receive\r\n")));
; 95 : dwError = ERROR_READ_FAULT;
00218 e3a0401e mov r4, #0x1E
; 96 : }
; 97 : } else {
0021c ea000000 b |$L32135|
00220 |$L32132|
; 98 : // TODO: AtaCheckError()
; 99 : return ERROR_GEN_FAILURE;
00220 e3a0401f mov r4, #0x1F
00224 |$L32135|
00224 e1a00004 mov r0, r4
; 100 : }
; 101 : }
; 102 :
; 103 : return dwError;
; 104 : }
00228 e28dd024 add sp, sp, #0x24
0022c e8bd4070 ldmia sp!, {r4 - r6, lr}
00230 e12fff1e bx lr
00234 |$M32166|
ENDP ; |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::ControlAudio
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -