Subversion Repositories Kolibri OS

Rev

Rev 425 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
425 victor 1
$Revision: 431 $
431 serge 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