Subversion Repositories Kolibri OS

Rev

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

Rev 532 Rev 551
1
;
1
;
2
;    MIXER
2
;    MIXER
3
;
3
;
4
;    Compile with FASM
4
;    Compile with FASM
5
;
5
;
6
 
6
 
7
include 'lang.inc'
7
include 'lang.inc'
8
include '..\..\..\macros.inc'
8
include '..\..\..\macros.inc'
9
 
9
 
10
 
10
 
11
use32
11
use32
12
 org	0x0
12
 org	0x0
13
 db	'MENUET01'    ; header
13
 db	'MENUET01'    ; header
14
 dd	0x01	      ; header version
14
 dd	0x01	      ; header version
15
 dd	START	      ; entry point
15
 dd	START	      ; entry point
16
 dd	I_END	      ; image size
16
 dd	I_END	      ; image size
17
 dd	0x1000        ; required memory
17
 dd	0x1000        ; required memory
18
 dd	0x1000        ; esp
18
 dd	0x1000        ; esp
19
 dd	0x0 , 0x0     ; I_Param , I_Path
19
 dd	0x0 , 0x0     ; I_Param , I_Path
20
 
20
 
21
 
21
 
22
 
22
 
23
START:                          ; start of execution
23
START:                          ; start of execution
24
 
24
 
25
  red:                          ; redraw
25
  red:                          ; redraw
26
    call draw_window            ; at first, draw the window
26
    call draw_window            ; at first, draw the window
27
 
27
 
28
 
28
 
29
still:
29
still:
30
 
30
 
31
    mov  eax,10                 ; wait here for event
31
    mov  eax,10                 ; wait here for event
32
    mcall
32
    mcall
33
 
33
 
34
    cmp  eax,1                  ; redraw request ?
34
    cmp  eax,1                  ; redraw request ?
35
    jz   red
35
    jz   red
36
    cmp  eax,2                  ; key in buffer ?
36
    cmp  eax,2                  ; key in buffer ?
37
    jz   key
37
    jz   key
38
    cmp  eax,3                  ; button in buffer ?
38
    cmp  eax,3                  ; button in buffer ?
39
    jz   button
39
    jz   button
40
 
40
 
41
    jmp  still
41
    jmp  still
42
 
42
 
43
  key:                          ; key
43
  key:                          ; key
44
    mov  eax,2                  ; just read it and ignore
44
    mov  eax,2                  ; just read it and ignore
45
    mcall
45
    mcall
46
 
46
 
47
    jmp  still
47
    jmp  still
48
 
48
 
49
  button:                       ; button
49
  button:                       ; button
50
    mov  eax,17
50
    mov  eax,17
51
    mcall
51
    mcall
52
 
52
 
53
    cmp  ah,1                   ; button id=1 ?
53
    cmp  ah,1                   ; button id=1 ?
54
    jnz  noclose
54
    jnz  noclose
55
    or   eax,-1                 ; close this program
55
    or   eax,-1                 ; close this program
56
    mcall
56
    mcall
57
  noclose:
57
  noclose:
58
 
58
 
59
    cmp  ah,101
59
    cmp  ah,101
60
    jnz  nochange
60
    jnz  nochange
61
    xor  byte [usecard], 3      ; 1 <-> 2
61
    xor  byte [usecard], 3      ; 1 <-> 2
62
 
62
 
63
    call drawusedcard
63
    call drawusedcard
64
 
64
 
65
  nochange:
65
  nochange:
66
 
66
 
67
    cmp  byte [usecard],byte 1
67
    cmp  byte [usecard],byte 1
68
    jnz  usesb16II
68
    jnz  usesb16II
69
 
69
 
70
; SOUND BLASTER 16
70
; SOUND BLASTER 16
71
 
71
 
72
 
72
 
73
  usesb16:
73
  usesb16:
74
 
74
 
75
    mov  al,20
75
    mov  al,20
76
    cmp  ah,al
76
    cmp  ah,al
77
    jge  nomain
77
    jge  nomain
78
 
78
 
79
    mov  ecx,0
79
    mov  ecx,0
80
    cmp  ah,12
80
    cmp  ah,12
81
    jnz  nomain12
81
    jnz  nomain12
82
    mov  ecx,3*16+3
82
    mov  ecx,3*16+3
83
  nomain12:
83
  nomain12:
84
    cmp  ah,13
84
    cmp  ah,13
85
    jnz  nomain13
85
    jnz  nomain13
86
    mov  ecx,7*16+7
86
    mov  ecx,7*16+7
87
  nomain13:
87
  nomain13:
88
    cmp  ah,14
88
    cmp  ah,14
89
    jnz  nomain14
89
    jnz  nomain14
90
    mov  ecx,11*16+11
90
    mov  ecx,11*16+11
91
  nomain14:
91
  nomain14:
92
    cmp  ah,15
92
    cmp  ah,15
93
    jnz  nomain15
93
    jnz  nomain15
94
    mov  ecx,15*16+15
94
    mov  ecx,15*16+15
95
  nomain15:
95
  nomain15:
96
 
96
 
97
    mov  eax,25
97
    mov  eax,25
98
    mov  ebx,1
98
    mov  ebx,1
99
    mcall
99
    mcall
100
 
100
 
101
    jmp  still
101
    jmp  still
102
 
102
 
103
  nomain:
103
  nomain:
104
 
104
 
105
    mov  al,30
105
    mov  al,30
106
    cmp  ah,al
106
    cmp  ah,al
107
    jge  nocd
107
    jge  nocd
108
 
108
 
109
    mov  ecx,0
109
    mov  ecx,0
110
 
110
 
111
    cmp  ah,22
111
    cmp  ah,22
112
    jnz  nocd12
112
    jnz  nocd12
113
    mov  ecx,3*16+3
113
    mov  ecx,3*16+3
114
  nocd12:
114
  nocd12:
115
    cmp  ah,23
115
    cmp  ah,23
116
    jnz  nocd13
116
    jnz  nocd13
117
    mov  ecx,7*16+7
117
    mov  ecx,7*16+7
118
  nocd13:
118
  nocd13:
119
    cmp  ah,24
119
    cmp  ah,24
120
    jnz  nocd14
120
    jnz  nocd14
121
    mov  ecx,11*16+11
121
    mov  ecx,11*16+11
122
  nocd14:
122
  nocd14:
123
    cmp  ah,25
123
    cmp  ah,25
124
    jnz  nocd15
124
    jnz  nocd15
125
    mov  ecx,15*16+15
125
    mov  ecx,15*16+15
126
  nocd15:
126
  nocd15:
127
 
127
 
128
    mov  eax,25
128
    mov  eax,25
129
    mov  ebx,2
129
    mov  ebx,2
130
    mcall
130
    mcall
131
 
131
 
132
    jmp  still
132
    jmp  still
133
 
133
 
134
  nocd:
134
  nocd:
135
 
135
 
136
 
136
 
137
    jmp  still
137
    jmp  still
138
 
138
 
139
 
139
 
140
 
140
 
141
 
141
 
142
; SOUND BLASTER 16 II
142
; SOUND BLASTER 16 II
143
 
143
 
144
  usesb16II:
144
  usesb16II:
145
 
145
 
146
    cld
146
    cld
147
 
147
 
148
    mov  al,20
148
    mov  al,20
149
    cmp  ah,al
149
    cmp  ah,al
150
    jge  IIwnomain
150
    jge  IIwnomain
151
 
151
 
152
    mov  ecx,0
152
    mov  ecx,0
153
    cmp  ah,12
153
    cmp  ah,12
154
    jnz  IIwnomain12
154
    jnz  IIwnomain12
155
    mov  ecx,50
155
    mov  ecx,50
156
  IIwnomain12:
156
  IIwnomain12:
157
    cmp  ah,13
157
    cmp  ah,13
158
    jnz  IIwnomain13
158
    jnz  IIwnomain13
159
    mov  ecx,150
159
    mov  ecx,150
160
  IIwnomain13:
160
  IIwnomain13:
161
    cmp  ah,14
161
    cmp  ah,14
162
    jnz  IIwnomain14
162
    jnz  IIwnomain14
163
    mov  ecx,200
163
    mov  ecx,200
164
  IIwnomain14:
164
  IIwnomain14:
165
    cmp  ah,15
165
    cmp  ah,15
166
    jnz  IIwnomain15
166
    jnz  IIwnomain15
167
    mov  ecx,255
167
    mov  ecx,255
168
  IIwnomain15:
168
  IIwnomain15:
169
 
169
 
170
    mov  eax,28
170
    mov  eax,28
171
    mov  ebx,1
171
    mov  ebx,1
172
    mcall
172
    mcall
173
 
173
 
174
    jmp  still
174
    jmp  still
175
 
175
 
176
  IIwnomain:
176
  IIwnomain:
177
 
177
 
178
    mov  al,30
178
    mov  al,30
179
    cmp  ah,al
179
    cmp  ah,al
180
    jge  IIwnocd
180
    jge  IIwnocd
181
 
181
 
182
    mov  ecx,0
182
    mov  ecx,0
183
 
183
 
184
    cmp  ah,22
184
    cmp  ah,22
185
    jnz  IIwnocd12
185
    jnz  IIwnocd12
186
    mov  ecx,50
186
    mov  ecx,50
187
  IIwnocd12:
187
  IIwnocd12:
188
    cmp  ah,23
188
    cmp  ah,23
189
    jnz  IIwnocd13
189
    jnz  IIwnocd13
190
    mov  ecx,150
190
    mov  ecx,150
191
  IIwnocd13:
191
  IIwnocd13:
192
    cmp  ah,24
192
    cmp  ah,24
193
    jnz  IIwnocd14
193
    jnz  IIwnocd14
194
    mov  ecx,200
194
    mov  ecx,200
195
  IIwnocd14:
195
  IIwnocd14:
196
    cmp  ah,25
196
    cmp  ah,25
197
    jnz  IIwnocd15
197
    jnz  IIwnocd15
198
    mov  ecx,255
198
    mov  ecx,255
199
  IIwnocd15:
199
  IIwnocd15:
200
 
200
 
201
    mov  eax,28
201
    mov  eax,28
202
    mov  ebx,2
202
    mov  ebx,2
203
    mcall
203
    mcall
204
 
204
 
205
    jmp  still
205
    jmp  still
206
 
206
 
207
  IIwnocd:
207
  IIwnocd:
208
 
208
 
209
 
209
 
210
    jmp  still
210
    jmp  still
211
 
211
 
212
 
212
 
213
 
213
 
214
;   *********************************************
214
;   *********************************************
215
;   *******  WINDOW DEFINITIONS AND DRAW ********
215
;   *******  WINDOW DEFINITIONS AND DRAW ********
216
;   *********************************************
216
;   *********************************************
217
 
217
 
218
 
218
 
219
draw_window:
219
draw_window:
220
 
220
 
221
    mov  eax,12                    ; function 12:tell os about windowdraw
221
    mov  eax,12                    ; function 12:tell os about windowdraw
222
    mov  ebx,1                     ; 1, start of draw
222
    mov  ebx,1                     ; 1, start of draw
223
    mcall
223
    mcall
224
 
224
 
225
                                   ; DRAW WINDOW
225
                                   ; DRAW WINDOW
226
    mov  eax,0                     ; function 0 : define and draw window
226
    mov  eax,0                     ; function 0 : define and draw window
227
    mov  ebx,100*65536+195         ; [x start] *65536 + [x size]
227
    mov  ebx,100*65536+195         ; [x start] *65536 + [x size]
228
    mov  ecx,100*65536+140         ; [y start] *65536 + [y size]
228
    mov  ecx,100*65536+140         ; [y start] *65536 + [y size]
229
    mov  edx,[wcolor]              ; color of work area RRGGBB
229
    mov  edx,[wcolor]              ; color of work area RRGGBB
230
    mov  edi,title                 ; WINDOW LABEL
230
    mov  edi,title                 ; WINDOW LABEL
231
    mcall
231
    mcall
232
 
232
 
233
 
233
 
234
    mov  edx,16                    ; button id
234
    mov  edx,16                    ; button id
235
    mov  ebx,10*65536+22
235
    mov  ebx,10*65536+22
236
 
236
 
237
  newbut:
237
  newbut:
238
 
238
 
239
    push edx
239
    push edx
240
 
240
 
241
    mov  esi,[bcolor]
241
    mov  esi,[bcolor]
242
 
242
 
243
    mov  eax,8                     ; function 8 : define and draw button
243
    mov  eax,8                     ; function 8 : define and draw button
244
    mov  ecx,35*65536+8            ; [y start] *65536 + [y size]
244
    mov  ecx,35*65536+8            ; [y start] *65536 + [y size]
245
    dec  edx
245
    dec  edx
246
    mcall
246
    mcall
247
    mov  ecx,45*65536+8            ; [y start] *65536 + [y size]
247
    mov  ecx,45*65536+8            ; [y start] *65536 + [y size]
248
    dec  edx
248
    dec  edx
249
    mcall
249
    mcall
250
    mov  ecx,55*65536+8            ; [y start] *65536 + [y size]
250
    mov  ecx,55*65536+8            ; [y start] *65536 + [y size]
251
    dec  edx
251
    dec  edx
252
    mcall
252
    mcall
253
    mov  ecx,65*65536+8            ; [y start] *65536 + [y size]
253
    mov  ecx,65*65536+8            ; [y start] *65536 + [y size]
254
    dec  edx
254
    dec  edx
255
    mcall
255
    mcall
256
    mov  ecx,75*65536+8            ; [y start] *65536 + [y size]
256
    mov  ecx,75*65536+8            ; [y start] *65536 + [y size]
257
    dec  edx
257
    dec  edx
258
    mcall
258
    mcall
259
 
259
 
260
    pop  edx
260
    pop  edx
261
 
261
 
262
    add  ebx,30*65536
262
    add  ebx,30*65536
263
    add  edx,10
263
    add  edx,10
264
 
264
 
265
    cmp  edx,16+6*10
265
    cmp  edx,16+6*10
266
    jnz  newbut
266
    jnz  newbut
267
 
267
 
268
 
268
 
269
    mov  eax,4                     ; function 4 : write text to window
269
    mov  eax,4                     ; function 4 : write text to window
270
    mov  ebx,10*65536+104          ; [x start] *65536 + [y start]
270
    mov  ebx,10*65536+104          ; [x start] *65536 + [y start]
271
    mov  ecx,0x00ffffff            ; color of text RRGGBB
271
    mov  ecx,0x00ffffff            ; color of text RRGGBB
272
    mov  edx,text                  ; pointer to text beginning
272
    mov  edx,text                  ; pointer to text beginning
273
    mov  esi,29
273
    mov  esi,29
274
    mcall
274
    mcall
275
 
275
 
276
    mov  eax,8                     ; function 8 : define and draw button
276
    mov  eax,8                     ; function 8 : define and draw button
277
    mov  ebx,(5)*65536+185         ; [x start] *65536 + [x size]
277
    mov  ebx,(5)*65536+185         ; [x start] *65536 + [x size]
278
    mov  ecx,120*65536+14          ; [y start] *65536 + [y size]
278
    mov  ecx,120*65536+14          ; [y start] *65536 + [y size]
279
    mov  edx,101                   ; button id
279
    mov  edx,101                   ; button id
280
    mov  esi,[bcolor]              ; button color RRGGBB
280
    mov  esi,[bcolor]              ; button color RRGGBB
281
    mcall
281
    mcall
282
 
282
 
283
    call drawusedcard
283
    call drawusedcard
284
 
284
 
285
    mov  eax,12                    ; function 12:tell os about windowdraw
285
    mov  eax,12                    ; function 12:tell os about windowdraw
286
    mov  ebx,2                     ; 2, end of draw
286
    mov  ebx,2                     ; 2, end of draw
287
    mcall
287
    mcall
288
 
288
 
289
    ret
289
    ret
290
 
290
 
291
 
291
 
292
drawusedcard:
292
drawusedcard:
293
 
293
 
294
    pusha
294
    pusha
295
 
295
 
296
    mov  eax,13
296
    mov  eax,13
297
    mov  ebx,14*65536+160
297
    mov  ebx,14*65536+160
298
    mov  ecx,123*65536+10
298
    mov  ecx,123*65536+10
299
    mov  edx,[bcolor]
299
    mov  edx,[bcolor]
300
    mcall
300
    mcall
301
 
301
 
302
    mov  edx,c1
302
    mov  edx,c1
303
 
303
 
304
    cmp  [usecard],2
304
    cmp  [usecard],2
305
    jnz  nosbcII
305
    jnz  nosbcII
306
    mov  edx,c2
306
    mov  edx,c2
307
  nosbcII:
307
  nosbcII:
308
 
308
 
309
    mov  eax,4
309
    mov  eax,4
310
    mov  ebx,14*65536+123
310
    mov  ebx,14*65536+123
311
    mov  ecx,0x00ffffff
311
    mov  ecx,0x00ffffff
312
    mov  esi,30
312
    mov  esi,30
313
    mcall
313
    mcall
314
 
314
 
315
    popa
315
    popa
316
 
316
 
317
    ret
317
    ret
318
 
318
 
319
 
319
 
320
 
320
 
321
; DATA AREA
321
; DATA AREA
322
 
322
 
323
bcolor  dd  0x5577c8
323
bcolor  dd  0x5577c8
324
 
324
 
325
wcolor  dd  0x13000000
325
wcolor  dd  0x14000000
326
 
326
 
327
 
327
 
328
text:
328
text:
329
    db 'MAIN  CD  WAVE MPU4 AUX1 AUX2'
329
    db 'MAIN  CD  WAVE MPU4 AUX1 AUX2'
330
 
330
 
331
c1  db 'SOUND BLASTER 16 - MIXER I    '
331
c1  db 'SOUND BLASTER 16 - MIXER I    '
332
c2  db 'SOUND BLASTER 16 - MIXER II   '
332
c2  db 'SOUND BLASTER 16 - MIXER II   '
333
 
333
 
334
 
334
 
335
usecard db 0x1
335
usecard db 0x1
336
 
336
 
337
title    db   'MIXER',0
337
title    db   'MIXER',0
338
 
338
 
339
I_END:
339
I_END: