Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
444 | serge | 1 | $Revision: 431 $ |
2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
3 | ;; ;; |
||
4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
||
5 | ;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;; |
||
6 | ;; Distributed under terms of the GNU General Public License ;; |
||
7 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
8 | |||
1 | ha | 9 | sys_cd_audio: |
10 | |||
11 | cmp word [cdbase],word 0 |
||
12 | jnz @f |
||
13 | mov eax,1 |
||
14 | ret |
||
15 | @@: |
||
16 | |||
17 | ; eax=1 cdplay at ebx 0x00FFSSMM |
||
18 | ; eax=2 get tracklist size of ecx to [ebx] |
||
19 | ; eax=3 stop/pause playing |
||
20 | |||
21 | cmp eax,1 |
||
22 | jnz nocdp |
||
23 | call sys_cdplay |
||
24 | ret |
||
25 | nocdp: |
||
26 | |||
27 | cmp eax,2 |
||
28 | jnz nocdtl |
||
379 | serge | 29 | mov edi,[TASK_BASE] |
115 | poddubny | 30 | add edi,TASKDATA.mem_start |
1 | ha | 31 | add ebx,[edi] |
32 | call sys_cdtracklist |
||
33 | ret |
||
34 | nocdtl: |
||
35 | |||
36 | cmp eax,3 |
||
37 | jnz nocdpause |
||
38 | call sys_cdpause |
||
39 | ret |
||
40 | nocdpause: |
||
41 | |||
42 | mov eax,0xffffff01 |
||
43 | ret |
||
44 | |||
45 | |||
46 | |||
47 | sys_cd_atapi_command: |
||
48 | |||
49 | pushad |
||
50 | |||
51 | mov dx,word [cdbase] |
||
52 | add dx,6 |
||
53 | mov ax,word [cdid] |
||
54 | out dx,al |
||
55 | mov esi,10 |
||
56 | call delay_ms |
||
57 | mov dx,word [cdbase] |
||
58 | add dx,7 |
||
59 | in al,dx |
||
60 | and al,0x80 |
||
61 | cmp al,0 |
||
62 | jnz res |
||
63 | jmp cdl6 |
||
64 | res: |
||
65 | mov dx,word [cdbase] |
||
66 | add dx,7 |
||
67 | mov al,0x8 |
||
68 | out dx,al |
||
69 | mov dx,word [cdbase] |
||
70 | add dx,0x206 |
||
71 | mov al,0xe |
||
72 | out dx,al |
||
73 | mov esi,1 |
||
74 | call delay_ms |
||
75 | mov dx,word [cdbase] |
||
76 | add dx,0x206 |
||
77 | mov al,0x8 |
||
78 | out dx,al |
||
79 | mov esi,30 |
||
80 | call delay_ms |
||
81 | xor cx,cx |
||
82 | cdl5: |
||
83 | inc cx |
||
84 | cmp cx,10 |
||
85 | jz cdl6 |
||
86 | mov dx,word [cdbase] |
||
87 | add dx,7 |
||
88 | in al,dx |
||
89 | and al,0x88 |
||
90 | cmp al,0x00 |
||
91 | jz cdl5 |
||
92 | mov esi,100 |
||
93 | call delay_ms |
||
94 | jmp cdl5 |
||
95 | cdl6: |
||
96 | mov dx,word [cdbase] |
||
97 | add dx,4 |
||
98 | mov al,0 |
||
99 | out dx,al |
||
100 | mov dx,word [cdbase] |
||
101 | add dx,5 |
||
102 | mov al,0 |
||
103 | out dx,al |
||
104 | mov dx,word [cdbase] |
||
105 | add dx,7 |
||
106 | mov al,0xec |
||
107 | out dx,al |
||
108 | mov esi,5 |
||
109 | call delay_ms |
||
110 | mov dx,word [cdbase] |
||
111 | add dx,1 |
||
112 | mov al,0 |
||
113 | out dx,al |
||
114 | add dx,1 |
||
115 | mov al,0 |
||
116 | out dx,al |
||
117 | add dx,1 |
||
118 | mov al,0 |
||
119 | out dx,al |
||
120 | add dx,1 |
||
121 | mov al,0 |
||
122 | out dx,al |
||
123 | add dx,1 |
||
124 | mov al,128 |
||
125 | out dx,al |
||
126 | add dx,2 |
||
127 | mov al,0xa0 |
||
128 | out dx,al |
||
129 | xor cx,cx |
||
130 | mov dx,word [cdbase] |
||
131 | add dx,7 |
||
132 | cdl1: |
||
133 | inc cx |
||
134 | cmp cx,100 |
||
135 | jz cdl2 |
||
136 | in al,dx |
||
137 | and ax,0x88 |
||
138 | cmp al,0x8 |
||
139 | jz cdl2 |
||
140 | mov esi,2 |
||
141 | call delay_ms |
||
142 | jmp cdl1 |
||
143 | cdl2: |
||
144 | |||
145 | popad |
||
146 | ret |
||
147 | |||
148 | |||
149 | sys_cdplay: |
||
150 | |||
151 | mov ax,5 |
||
152 | push ax |
||
153 | push ebx |
||
154 | cdplay: |
||
155 | call sys_cd_atapi_command |
||
156 | cli |
||
157 | mov dx,word [cdbase] |
||
158 | mov ax,0x0047 |
||
159 | out dx,ax |
||
160 | mov al,1 |
||
161 | mov ah,[esp+0] ; min xx |
||
162 | out dx,ax |
||
163 | mov ax,[esp+1] ; fr sec |
||
164 | out dx,ax |
||
165 | mov ax,256+99 |
||
166 | out dx,ax |
||
167 | mov ax,0x0001 |
||
168 | out dx,ax |
||
169 | mov ax,0x0000 |
||
170 | out dx,ax |
||
171 | mov esi,10 |
||
172 | call delay_ms |
||
173 | sti |
||
174 | add dx,7 |
||
175 | in al,dx |
||
176 | test al,1 |
||
177 | jz cdplayok |
||
178 | mov ax,[esp+4] |
||
179 | dec ax |
||
180 | mov [esp+4],ax |
||
181 | cmp ax,0 |
||
182 | jz cdplayfail |
||
183 | jmp cdplay |
||
184 | cdplayfail: |
||
185 | cdplayok: |
||
186 | pop ebx |
||
187 | pop ax |
||
188 | xor eax, eax |
||
189 | ret |
||
190 | |||
191 | |||
192 | sys_cdtracklist: |
||
193 | |||
194 | push ebx |
||
195 | tcdplay: |
||
196 | call sys_cd_atapi_command |
||
197 | mov dx,word [cdbase] |
||
198 | mov ax,0x43+2*256 |
||
199 | out dx,ax |
||
200 | mov ax,0x0 |
||
201 | out dx,ax |
||
202 | mov ax,0x0 |
||
203 | out dx,ax |
||
204 | mov ax,0x0 |
||
205 | out dx,ax |
||
206 | mov ax,200 |
||
207 | out dx,ax |
||
208 | mov ax,0x0 |
||
209 | out dx,ax |
||
210 | in al,dx |
||
211 | mov cx,1000 |
||
212 | mov dx,word [cdbase] |
||
213 | add dx,7 |
||
214 | cld |
||
215 | cdtrnwewait: |
||
216 | mov esi,10 |
||
217 | call delay_ms |
||
218 | in al,dx |
||
219 | and al,128 |
||
220 | cmp al,0 |
||
221 | jz cdtrl1 |
||
222 | loop cdtrnwewait |
||
223 | cdtrl1: |
||
224 | ; read the result |
||
225 | mov ecx,[esp+0] |
||
226 | mov dx,word [cdbase] |
||
227 | cdtrread: |
||
228 | add dx,7 |
||
229 | in al,dx |
||
230 | and al,8 |
||
231 | cmp al,8 |
||
232 | jnz cdtrdone |
||
233 | sub dx,7 |
||
234 | in ax,dx |
||
235 | mov [ecx],ax |
||
236 | add ecx,2 |
||
237 | jmp cdtrread |
||
238 | cdtrdone: |
||
239 | pop ecx |
||
240 | xor eax, eax |
||
241 | ret |
||
242 | |||
243 | |||
244 | sys_cdpause: |
||
245 | |||
246 | call sys_cd_atapi_command |
||
247 | |||
248 | mov dx,word [cdbase] |
||
249 | mov ax,0x004B |
||
250 | out dx,ax |
||
251 | mov ax,0 |
||
252 | out dx,ax |
||
253 | mov ax,0 |
||
254 | out dx,ax |
||
255 | mov ax,0 |
||
256 | out dx,ax |
||
257 | mov ax,0 |
||
258 | out dx,ax |
||
259 | mov ax,0 |
||
260 | out dx,ax |
||
261 | |||
262 | mov esi,10 |
||
263 | call delay_ms |
||
264 | add dx,7 |
||
265 | in al,dx |
||
266 | |||
267 | xor eax, eax |
||
268 | ret |
||
269 |