Subversion Repositories Kolibri OS

Rev

Rev 593 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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