Subversion Repositories Kolibri OS

Rev

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

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