Rev 485 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | ; |
2 | ; SOUND BLASTER |
||
3 | ; |
||
4 | ; Compile with FASM for Menuet |
||
5 | ; |
||
6 | |||
7 | include 'lang.inc' |
||
485 | heavyiron | 8 | include '..\..\..\macros.inc' |
31 | halyavin | 9 | |
10 | use32 |
||
11 | |||
12 | org 0x0 |
||
13 | |||
14 | db 'MENUET01' ; 8 byte id |
||
15 | dd 0x01 |
||
16 | dd START ; program start |
||
17 | dd I_END ; program image size |
||
18 | dd 0x80000 ; required amount of memory |
||
19 | dd 0xfff0 ; stack position |
||
20 | dd 0,0 |
||
21 | |||
22 | |||
23 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
24 | |||
25 | vol_data dd 0x40000 |
||
26 | playposition dd 0x20000 |
||
27 | next_tic dd 0x0 |
||
28 | onoff dd 0x0 |
||
29 | pause_between_songs dd 100 |
||
30 | delay dd 100 |
||
31 | repeat_song db 0 |
||
32 | mono_stereo dd 1 |
||
33 | |||
34 | |||
35 | ; 0x10000 data from hd |
||
36 | ; 0x20000 play position for sb |
||
37 | ; 0x40000 volume indicator data |
||
38 | |||
39 | |||
40 | START: ; start of execution |
||
41 | |||
42 | call draw_window ; at first, draw the window |
||
43 | |||
44 | mov eax,26 |
||
45 | mov ebx,9 |
||
485 | heavyiron | 46 | mcall |
31 | halyavin | 47 | mov [next_tic],eax |
48 | |||
49 | still: |
||
50 | |||
51 | mov [delay],145 |
||
52 | cmp [mono_stereo],2 |
||
53 | jne no_stereo |
||
54 | mov [delay],73 |
||
55 | no_stereo: |
||
56 | |||
57 | mov eax,55 |
||
58 | mov ebx,2 |
||
59 | mov ecx,0 |
||
60 | mov edx,[mono_stereo] |
||
485 | heavyiron | 61 | mcall |
31 | halyavin | 62 | |
63 | mov eax,23 ; wait here for event |
||
64 | mov ebx,1 |
||
485 | heavyiron | 65 | mcall |
31 | halyavin | 66 | |
67 | cmp eax,0 |
||
68 | jne do_task |
||
69 | |||
70 | still2: |
||
71 | |||
72 | cmp [onoff],0 |
||
73 | je still |
||
74 | |||
75 | mov eax,26 |
||
76 | mov ebx,9 |
||
485 | heavyiron | 77 | mcall |
31 | halyavin | 78 | mov ebx,[next_tic] |
79 | cmp eax,ebx |
||
80 | jge play_wave_block |
||
81 | |||
82 | mov edi,[next_tic] |
||
83 | sub edi,eax |
||
84 | mov eax,[delay] |
||
85 | sub eax,edi |
||
86 | mov edi,eax |
||
87 | call draw_volume |
||
88 | |||
89 | jmp still |
||
90 | |||
91 | do_task: |
||
92 | |||
93 | cmp eax,1 ; redraw request ? |
||
94 | je red |
||
95 | cmp eax,2 ; key in buffer ? |
||
96 | je key |
||
97 | cmp eax,3 ; button in buffer ? |
||
98 | je button |
||
99 | |||
100 | cmp eax,16+4 |
||
101 | jne no_irman |
||
102 | mov eax,42 |
||
103 | mov ebx,4 |
||
485 | heavyiron | 104 | mcall |
31 | halyavin | 105 | dec [ir_count] |
106 | cmp bl,140 |
||
107 | jne no_first |
||
108 | mov [ir_count],3 |
||
109 | no_first: |
||
110 | cmp [ir_count],0 |
||
111 | jne no_irman |
||
112 | call give_wav |
||
113 | cmp bl,215 |
||
114 | je play |
||
115 | mov ah,4 |
||
116 | ;; cmp bl,55 |
||
117 | ;; je rev |
||
118 | mov ah,3 |
||
119 | ;;; cmp bl,183 |
||
120 | ;;; je rev |
||
121 | cmp bl,127 |
||
122 | jne no_block_dec |
||
123 | add [block],65536/512*10 |
||
124 | no_block_dec: |
||
125 | cmp bl,191 |
||
126 | jne no_block_inc |
||
127 | sub [block],65536/512*10 |
||
128 | no_block_inc: |
||
129 | jmp still |
||
130 | no_irman: |
||
131 | |||
132 | jmp still |
||
133 | |||
134 | play_wave_block: |
||
135 | |||
136 | mov eax,55 ; load wave |
||
137 | mov ebx,0 |
||
138 | mov ecx,[playposition] |
||
485 | heavyiron | 139 | mcall |
31 | halyavin | 140 | |
141 | mov eax,55 ; play wave |
||
142 | mov ebx,1 |
||
485 | heavyiron | 143 | mcall |
31 | halyavin | 144 | |
145 | mov eax,26 |
||
146 | mov ebx,9 |
||
485 | heavyiron | 147 | mcall |
31 | halyavin | 148 | add eax,[delay] |
149 | mov [next_tic],eax |
||
150 | |||
151 | call draw_wave |
||
152 | call read_wav |
||
153 | |||
154 | jmp still |
||
155 | |||
156 | red: ; redraw |
||
157 | call draw_window |
||
158 | jmp still |
||
159 | |||
160 | key: ; key |
||
161 | mov eax,2 ; just read it and ignore |
||
485 | heavyiron | 162 | mcall |
31 | halyavin | 163 | jmp still2 |
164 | |||
165 | button: ; button |
||
166 | mov eax,17 ; get id |
||
485 | heavyiron | 167 | mcall |
31 | halyavin | 168 | |
169 | cmp ah,6 |
||
170 | jne no_ir |
||
171 | call enable_ir |
||
172 | jmp still |
||
173 | no_ir: |
||
174 | |||
175 | cmp ah,7 |
||
176 | jne no_file_name |
||
177 | call read_string |
||
178 | jmp still |
||
179 | no_file_name: |
||
180 | |||
181 | cmp ah,2 ; button id=2 |
||
182 | jne noplay |
||
183 | play: |
||
184 | mov eax,[onoff] |
||
185 | not eax |
||
186 | and eax,1 |
||
187 | mov [onoff],eax |
||
188 | mov [playposition],0x20000 |
||
189 | mov [block],2 |
||
190 | call read_header |
||
191 | call read_wav |
||
192 | ; mov [next_tic],0 |
||
193 | jmp still |
||
194 | |||
195 | noplay: |
||
196 | |||
197 | cmp ah,3 |
||
198 | jb no_rev |
||
199 | cmp ah,4 |
||
200 | jg no_rev |
||
201 | sub ah,3 |
||
202 | shr eax,8 |
||
203 | imul eax,4000 |
||
204 | sub eax,2000 |
||
205 | add [block],eax |
||
206 | cmp [block],0x0f000000 |
||
207 | jb block_ok |
||
208 | mov [block],2 |
||
209 | block_ok: |
||
210 | call display_progress |
||
211 | jmp still2 |
||
212 | no_rev: |
||
213 | |||
214 | cmp ah,5 ; repeat song ? |
||
215 | jne no_repeat |
||
216 | mov al,[repeat_song] |
||
217 | inc al |
||
218 | and eax,1 |
||
219 | mov [repeat_song],al |
||
220 | shl eax,2 |
||
221 | mov eax,[repeat_text+eax] |
||
222 | mov [text+40*5+31],eax |
||
223 | call draw_window |
||
224 | jmp still |
||
225 | repeat_text: db 'OFF ON ' |
||
226 | no_repeat: |
||
227 | |||
228 | |||
229 | cmp ah,1 |
||
230 | jne noclose |
||
231 | cmp [infrared_enabled],1 |
||
232 | jne no_dis |
||
233 | mov eax,45 |
||
234 | mov ebx,1 |
||
235 | mov ecx,4 |
||
485 | heavyiron | 236 | mcall |
31 | halyavin | 237 | mov eax,46 |
238 | mov ebx,1 |
||
239 | mov ecx,0x3f0 |
||
240 | mov edx,0x3ff |
||
485 | heavyiron | 241 | mcall |
31 | halyavin | 242 | no_dis: |
243 | mov eax,-1 ; close this program |
||
485 | heavyiron | 244 | mcall |
31 | halyavin | 245 | noclose: |
246 | |||
247 | jmp still2 |
||
248 | |||
249 | |||
250 | give_wav: |
||
251 | |||
252 | pusha |
||
253 | |||
254 | mov eax,55 |
||
255 | mov ebx,0 |
||
256 | mov ecx,0x20000 |
||
485 | heavyiron | 257 | mcall |
31 | halyavin | 258 | |
259 | popa |
||
260 | ret |
||
261 | |||
262 | ir_count db 0x0 |
||
263 | |||
264 | |||
265 | drop_rate dd 100 |
||
266 | |||
267 | draw_volume: |
||
268 | |||
269 | ; edi = tic to show |
||
270 | |||
271 | ret |
||
272 | |||
273 | pusha |
||
274 | |||
275 | add edi,[vol_data] |
||
276 | |||
277 | mov eax,[drop_rate] |
||
278 | cmp eax,2 |
||
279 | jb no_drop |
||
280 | sub eax,2 |
||
281 | no_drop: |
||
282 | mov [drop_rate],eax |
||
283 | |||
284 | movzx eax,byte [edi] |
||
285 | cmp eax,[drop_rate] |
||
286 | jge drop_ok |
||
287 | mov eax,[drop_rate] |
||
288 | mov [edi],al |
||
289 | jmp fixed_drop |
||
290 | drop_ok: |
||
291 | mov [drop_rate],eax |
||
292 | fixed_drop: |
||
293 | |||
294 | mov eax,13 |
||
295 | mov ebx,320*65536+20 |
||
296 | mov ecx,50*65536+1 |
||
297 | movzx edx,byte [edi] |
||
298 | shr edx,1 |
||
299 | mov esi,128 |
||
300 | sub esi,edx |
||
301 | add ecx,esi |
||
302 | mov edx,0x00ff00 |
||
485 | heavyiron | 303 | mcall |
31 | halyavin | 304 | |
305 | mov eax,13 |
||
306 | mov ebx,320*65536+20 |
||
307 | movzx edx,byte [edi] |
||
308 | shr edx,1 |
||
309 | mov ecx,edx |
||
310 | add ecx,(50+128)*65536+1 |
||
311 | shl edx,16 |
||
312 | sub ecx,edx |
||
313 | mov edx,0xff0000 |
||
485 | heavyiron | 314 | mcall |
31 | halyavin | 315 | |
316 | popa |
||
317 | |||
318 | ret |
||
319 | |||
320 | |||
321 | read_header: |
||
322 | |||
323 | pusha |
||
324 | |||
325 | mov dword [file_info+4],0 ; block to read |
||
326 | mov dword [file_info+8],1 ; blocks to read |
||
327 | mov dword [file_info+12],0x10000+1024 ; return data pointer |
||
328 | mov dword [file_info+16],0x60000 ; work area for os |
||
329 | |||
330 | mov eax,58 |
||
331 | mov ebx,file_info |
||
485 | heavyiron | 332 | mcall |
31 | halyavin | 333 | |
334 | movzx eax,byte [0x10000+1024+12+10] |
||
335 | mov [channels],eax |
||
336 | movzx eax,byte [0x10000+1024+12+20] |
||
337 | mov [bytes_per_sample],eax |
||
338 | |||
339 | cmp [0x10000+1024],dword 'RIFF' |
||
340 | jne unknownformat |
||
341 | cmp [0x10000+1024+8],dword 'WAVE' |
||
342 | jne unknownformat |
||
343 | |||
344 | mov [addb],128 |
||
345 | cmp [channels],1 |
||
346 | je addb_ok |
||
347 | mov [addb],256 |
||
348 | addb_ok: |
||
349 | cmp [bytes_per_sample],1 |
||
350 | je addb_ok2 |
||
351 | mov [addb],256 |
||
352 | addb_ok2: |
||
353 | |||
354 | mov [bmul],256 |
||
355 | cmp [addb],256 |
||
356 | je bmok |
||
357 | mov [bmul],512 |
||
358 | bmok: |
||
359 | |||
360 | cmp [bytes_per_sample],4 |
||
361 | jne no16s |
||
362 | mov [addb],512 ;mono_stereo |
||
363 | mov ecx,[mono_stereo] |
||
364 | shr ecx,1 |
||
365 | shr [addb],cl |
||
366 | mov [bmul],128 ;mono_stereo |
||
367 | shl [bmul],cl |
||
368 | no16s: |
||
369 | |||
370 | popa |
||
371 | |||
372 | ret |
||
373 | |||
374 | unknownformat: |
||
375 | |||
376 | mov [onoff],0 |
||
377 | |||
378 | call display_progress |
||
379 | |||
380 | mov eax,13 |
||
381 | mov ebx,190*65536+10 |
||
382 | mov ecx,104*65536+10 |
||
383 | mov edx,0xff0000 |
||
485 | heavyiron | 384 | mcall |
31 | halyavin | 385 | pusha |
386 | |||
387 | mov eax,5 |
||
388 | mov ebx,[pause_between_songs] |
||
485 | heavyiron | 389 | mcall |
31 | halyavin | 390 | |
391 | popa |
||
392 | mov eax,13 |
||
393 | mov edx,0x000000 |
||
485 | heavyiron | 394 | mcall |
31 | halyavin | 395 | |
396 | popa |
||
397 | |||
398 | ret |
||
399 | |||
400 | |||
401 | |||
402 | channels dd 0x0 ; 1=mono, 2 stereo |
||
403 | bytes_per_sample dd 0x0 ; 1=8 2=2*8/16 4=16 |
||
404 | |||
405 | buffer dd 0x20000 |
||
406 | |||
407 | block dd 0x2 |
||
408 | addb dd 256 ; 128 = mono 8 bit , 256 = stereo 8 bit/16 bit mono |
||
409 | bmul dd 0x0 ; 512 = mono 8 bit , 256 = stereo 8 bit/16 bit mono |
||
410 | |||
411 | file_size dd 100 |
||
412 | |||
413 | current_play dd wavfile+40*0 |
||
414 | |||
415 | |||
416 | read_wav: |
||
417 | |||
418 | pusha |
||
419 | |||
420 | new_file: |
||
421 | |||
422 | mov edx,[block] |
||
423 | |||
424 | newread: |
||
425 | |||
426 | mov dword [file_info+4],edx ; block to read |
||
427 | mov dword [file_info+8],1 ; blocks to read |
||
428 | mov dword [file_info+12],0x10000+1024 ; return data pointer |
||
429 | mov dword [file_info+16],0x60000 ; work area for os |
||
430 | |||
431 | mov eax,58 |
||
432 | mov ebx,file_info |
||
485 | heavyiron | 433 | mcall |
31 | halyavin | 434 | |
435 | |||
436 | pusha |
||
437 | mov eax,11 |
||
485 | heavyiron | 438 | mcall |
31 | halyavin | 439 | cmp eax,1 |
440 | jne no_wd |
||
441 | call draw_window |
||
442 | no_wd: |
||
443 | popa |
||
444 | |||
445 | pusha |
||
446 | mov eax,38 |
||
447 | mov ebx,1*65536+128 |
||
448 | mov ecx,71*65536+71 |
||
449 | add ebx,25*65536+25 |
||
450 | mov edx,0x555555 |
||
485 | heavyiron | 451 | ; mcall |
31 | halyavin | 452 | mov eax,38 |
453 | mov ebx,[esp+32-12] |
||
454 | and ebx,65536/512 -1 |
||
455 | or ebx,1*65536 |
||
456 | add ebx,25*65536+25 |
||
457 | mov ecx,71*65536+71 |
||
458 | mov edx,0x999999 |
||
485 | heavyiron | 459 | ; mcall |
31 | halyavin | 460 | popa |
461 | |||
462 | cmp eax,0 |
||
463 | je conp |
||
464 | |||
465 | movzx eax,byte [repeat_song] |
||
466 | inc eax |
||
467 | and eax,1 |
||
468 | imul eax,40 |
||
469 | mov [current_play],wavfile |
||
470 | play_ok: |
||
471 | |||
472 | mov [onoff],1 |
||
473 | mov [playposition],0x20000 |
||
474 | mov [block],20 |
||
475 | |||
476 | mov eax,5 |
||
477 | mov ebx,[pause_between_songs] |
||
478 | add ebx,[delay] |
||
485 | heavyiron | 479 | mcall |
31 | halyavin | 480 | |
481 | call read_header |
||
482 | |||
483 | cmp [onoff],0 |
||
484 | je noplay2 |
||
485 | cmp [repeat_song],0 |
||
486 | je noplay2 |
||
487 | |||
488 | call display_progress |
||
489 | |||
490 | jmp new_file |
||
491 | |||
492 | noplay2: |
||
493 | |||
494 | mov [onoff],0 |
||
495 | mov [block],2 |
||
496 | call display_progress |
||
497 | |||
498 | popa |
||
499 | ret |
||
500 | conp: |
||
501 | |||
502 | mov [file_size],ebx |
||
503 | |||
504 | mov esi,0x10000+1024 ; 8 bit stereo & 16 bit mono |
||
505 | mov edi,edx |
||
506 | sub edi,[block] |
||
507 | imul edi,[bmul] |
||
508 | add edi,[buffer] |
||
509 | mov ecx,512 |
||
510 | |||
511 | movedata: |
||
512 | |||
513 | mov al,[esi+1] |
||
514 | |||
515 | cmp [bytes_per_sample],4 ; for 16 bit stereo |
||
516 | jne no_16_stereo |
||
517 | mov al,[esi+1] |
||
518 | add al,128 |
||
519 | no_16_stereo: |
||
520 | |||
521 | cmp [bytes_per_sample],1 ; for 16 bit mono |
||
522 | je no_16_mono |
||
523 | cmp [channels],2 |
||
524 | je no_16_mono |
||
525 | mov al,[esi+1] |
||
526 | add al,128 |
||
527 | no_16_mono: |
||
528 | |||
529 | mov [edi],al |
||
530 | mov eax,[bytes_per_sample] |
||
531 | cmp [mono_stereo],1 |
||
532 | je bps1 |
||
533 | mov eax,[bytes_per_sample] |
||
534 | push ecx |
||
535 | mov ecx,[mono_stereo] |
||
536 | dec ecx |
||
537 | shr eax,cl |
||
538 | pop ecx |
||
539 | bps1: |
||
540 | add esi,eax ; 2;[bytes_per_sample] ; / mono_stereo |
||
541 | add edi,1 |
||
542 | loop movedata |
||
543 | |||
544 | add edx,1 |
||
545 | mov ecx,[block] |
||
546 | add ecx,[addb] |
||
547 | cmp edx,ecx |
||
548 | jbe newread |
||
549 | |||
550 | mov ecx,[addb] |
||
551 | add [block],ecx |
||
552 | |||
553 | call display_progress |
||
554 | |||
555 | rewr: |
||
556 | |||
557 | popa |
||
558 | |||
559 | call set_vol_data |
||
560 | |||
561 | ret |
||
562 | |||
563 | |||
564 | set_vol_data: |
||
565 | |||
566 | ; ret |
||
567 | |||
568 | pusha |
||
569 | |||
570 | mov eax,65536 |
||
571 | xor edx,edx |
||
572 | mov ebx,[delay] |
||
573 | div ebx |
||
574 | push eax |
||
575 | |||
576 | mov esi,[playposition] |
||
577 | mov edi,[vol_data] |
||
578 | mov ecx,[delay] |
||
579 | |||
580 | svd: |
||
581 | |||
582 | mov eax,0 |
||
583 | mov edx,100 |
||
584 | svd3: |
||
585 | movzx ebx,byte [esi] |
||
586 | cmp ebx,128 |
||
587 | jge svd2 |
||
588 | mov ebx,0 |
||
589 | svd2: |
||
590 | sub ebx,128 |
||
591 | shl ebx,1 |
||
592 | |||
593 | cmp ebx,ebp |
||
594 | jbe svd4 |
||
595 | mov edx,ebx |
||
596 | svd4: |
||
597 | |||
598 | inc esi |
||
599 | inc eax |
||
600 | cmp eax,[esp] |
||
601 | jb svd3 |
||
602 | |||
603 | mov [edi],dl |
||
604 | inc edi |
||
605 | loop svd |
||
606 | |||
607 | pop eax |
||
608 | popa |
||
609 | |||
610 | ret |
||
611 | |||
612 | |||
613 | addr dd 0x0 |
||
614 | ya dd 0x0 |
||
615 | |||
616 | |||
617 | read_string: |
||
618 | |||
619 | mov [onoff],0 |
||
620 | |||
621 | mov [addr],wavfile |
||
622 | mov [ya],30 |
||
623 | |||
624 | mov edi,[addr] |
||
625 | mov al,'_' |
||
626 | mov ecx,32 |
||
627 | rep stosb |
||
628 | |||
629 | call print_text |
||
630 | |||
631 | mov edi,[addr] |
||
632 | |||
633 | f11: |
||
634 | mov eax,10 |
||
485 | heavyiron | 635 | mcall |
31 | halyavin | 636 | cmp eax,2 |
637 | jne read_done |
||
638 | mov eax,2 |
||
485 | heavyiron | 639 | mcall |
31 | halyavin | 640 | shr eax,8 |
641 | cmp eax,13 |
||
642 | je read_done |
||
643 | cmp eax,8 |
||
644 | jnz nobsl |
||
645 | cmp edi,[addr] |
||
646 | jz f11 |
||
647 | sub edi,1 |
||
648 | mov [edi],byte '_' |
||
649 | call print_text |
||
650 | jmp f11 |
||
651 | nobsl: |
||
652 | cmp eax,dword 31 |
||
653 | jbe f11 |
||
654 | cmp eax,dword 95 |
||
655 | jb keyok |
||
656 | sub eax,32 |
||
657 | keyok: |
||
658 | mov [edi],al |
||
659 | |||
660 | call print_text |
||
661 | |||
662 | add edi,1 |
||
663 | mov esi,[addr] |
||
664 | add esi,32 |
||
665 | cmp esi,edi |
||
666 | jnz f11 |
||
667 | |||
668 | read_done: |
||
669 | |||
670 | mov ecx,[addr] |
||
671 | add ecx,38 |
||
672 | sub ecx,edi |
||
673 | mov eax,0 |
||
674 | cld |
||
675 | rep stosb |
||
676 | |||
677 | call print_text |
||
678 | |||
679 | ret |
||
680 | |||
681 | |||
682 | print_text: |
||
683 | |||
684 | display_progress: |
||
685 | |||
686 | pusha |
||
687 | |||
688 | mov eax,13 ; gray progress bar |
||
689 | mov ebx,25*65536+215 |
||
690 | mov ecx,61*65536+8 |
||
691 | mov edx,[border] |
||
485 | heavyiron | 692 | mcall |
31 | halyavin | 693 | |
694 | cmp [onoff],1 |
||
695 | je yes_playing |
||
696 | mov [block],0 |
||
697 | mov [file_size],100*512 |
||
698 | yes_playing: |
||
699 | mov eax,[block] ; yellow progress bar |
||
700 | imul eax,214 |
||
701 | xor edx,edx |
||
702 | mov ebx,[file_size] |
||
703 | shr ebx,9 |
||
704 | or ebx,1 |
||
705 | div ebx |
||
706 | mov ebx,eax |
||
707 | and ebx,0xff |
||
708 | mov eax,13 |
||
709 | add ebx,25*65536 |
||
710 | mov ecx,61*65536+1 |
||
711 | mov edx,[drawp] |
||
712 | newbar: |
||
485 | heavyiron | 713 | mcall |
31 | halyavin | 714 | add edx,0x101010 |
715 | add ecx,1*65536 |
||
716 | cmp ecx,65*65536 |
||
717 | jb newbar |
||
718 | newbar2: |
||
485 | heavyiron | 719 | mcall |
31 | halyavin | 720 | sub edx,0x101010 |
721 | add ecx,1*65536 |
||
722 | cmp ecx,69*65536 |
||
723 | jb newbar2 |
||
724 | |||
725 | |||
726 | mov eax,[block] |
||
727 | imul eax,214-30 |
||
728 | xor edx,edx |
||
729 | mov ebx,[file_size] |
||
730 | shr ebx,9 |
||
731 | or ebx,1 |
||
732 | div ebx |
||
733 | mov ebx,eax |
||
734 | shl ebx,16 |
||
735 | add ebx,25*65536+30 |
||
736 | mov ecx,61*65536+9 |
||
737 | mov edx,0xeeeeff |
||
738 | mov eax,13 |
||
739 | mov edi,5 |
||
740 | newb: |
||
485 | heavyiron | 741 | ; mcall |
31 | halyavin | 742 | add ebx,1*65536-2 |
743 | add ecx,1*65536-2 |
||
744 | sub edx,0x332211;3366aa |
||
745 | dec edi |
||
746 | jnz newb |
||
747 | |||
748 | |||
749 | noyellow: |
||
750 | |||
751 | mov esi,[current_play] |
||
752 | mov edi,now_playing |
||
753 | mov ecx,40 |
||
754 | cld |
||
755 | rep movsb |
||
756 | |||
757 | mov eax,13 |
||
758 | mov ebx,42*65536+33*6 |
||
759 | mov ecx,114*65536+11 |
||
760 | mov edx,0x000000 |
||
485 | heavyiron | 761 | mcall |
31 | halyavin | 762 | |
763 | mov eax,4 |
||
764 | mov ebx,42*65536+117 |
||
765 | mov ecx,[textc] |
||
766 | mov edx,now_playing |
||
767 | mov esi,38 |
||
485 | heavyiron | 768 | mcall |
31 | halyavin | 769 | |
770 | popa |
||
771 | |||
772 | ret |
||
773 | |||
774 | |||
775 | shape_window: |
||
776 | |||
777 | ret |
||
778 | |||
779 | pusha |
||
780 | |||
781 | mov eax,50 |
||
782 | mov ebx,0 |
||
783 | mov ecx,shape_reference |
||
485 | heavyiron | 784 | mcall |
31 | halyavin | 785 | |
786 | mov eax,50 |
||
787 | mov ebx,1 |
||
788 | mov ecx,4 |
||
485 | heavyiron | 789 | mcall |
31 | halyavin | 790 | |
791 | popa |
||
792 | |||
793 | ret |
||
794 | |||
795 | |||
796 | shape_reference: |
||
797 | |||
798 | times 1 db 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 |
||
799 | times 9 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
||
800 | |||
801 | infrared_enabled db 0x0 |
||
802 | |||
803 | |||
804 | enable_ir: |
||
805 | |||
806 | pusha |
||
807 | |||
808 | mov eax,46 |
||
809 | mov ebx,0 |
||
810 | mov ecx,0x3f0 |
||
811 | mov edx,0x3ff |
||
485 | heavyiron | 812 | mcall |
31 | halyavin | 813 | |
814 | mov eax,45 |
||
815 | mov ebx,0 |
||
816 | mov ecx,4 |
||
485 | heavyiron | 817 | mcall |
31 | halyavin | 818 | |
819 | mov eax,40 |
||
820 | mov ebx,10000b shl 16 + 111b |
||
485 | heavyiron | 821 | mcall |
31 | halyavin | 822 | |
823 | mov [infrared_enabled],1 |
||
824 | |||
825 | popa |
||
826 | |||
827 | ret |
||
828 | |||
829 | |||
830 | |||
831 | ; ********************************************* |
||
832 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
||
833 | ; ********************************************* |
||
834 | |||
835 | |||
836 | draw_window: |
||
837 | |||
838 | pusha |
||
839 | |||
840 | inc [next_tic] |
||
841 | |||
842 | mov eax,12 ; function 12:tell os about windowdraw |
||
843 | mov ebx,1 ; 1, start of draw |
||
485 | heavyiron | 844 | mcall |
31 | halyavin | 845 | ; DRAW WINDOW |
846 | mov eax,0 ; function 0 : define and draw window |
||
847 | mov ebx,100*65536+320 ; [x start] *65536 + [x size] |
||
848 | mov ecx,100*65536+140 ; [y start] *65536 + [y size] |
||
849 | mov edx,[bgr] |
||
551 | spraid | 850 | or edx,0x14000000 ; color of work area RRGGBB,8->color gl |
485 | heavyiron | 851 | mov edi,title ; WINDOW LABEL |
852 | mcall |
||
31 | halyavin | 853 | |
485 | heavyiron | 854 | |
31 | halyavin | 855 | mov eax,8 ; START/STOP - id 2 |
856 | mov ebx,24*65536+77 |
||
857 | mov ecx,80*65536+16 |
||
858 | mov edx,2 |
||
859 | mov esi,[border] |
||
485 | heavyiron | 860 | mcall |
31 | halyavin | 861 | |
862 | inc edx ; << / >> - id 3 , 4 |
||
863 | add ebx,86*65536-57 |
||
864 | mov eax,8 |
||
485 | heavyiron | 865 | mcall |
31 | halyavin | 866 | inc edx |
867 | add ebx,24*65536 |
||
868 | mov eax,8 |
||
485 | heavyiron | 869 | mcall |
31 | halyavin | 870 | |
871 | mov eax,8 ; REPEAT |
||
872 | add ebx,29*65536+54 |
||
873 | inc edx |
||
485 | heavyiron | 874 | mcall |
31 | halyavin | 875 | |
876 | mov eax,8 ; enable infrared |
||
877 | add ebx,98*65536-33 |
||
878 | add ecx,10*65536+10 |
||
879 | inc edx |
||
485 | heavyiron | 880 | mcall |
31 | halyavin | 881 | |
882 | pusha |
||
883 | mov eax,8 |
||
884 | mov ebx,25*65536+9 |
||
885 | mov ecx,115*65536+9 |
||
886 | inc edx |
||
485 | heavyiron | 887 | mcall |
31 | halyavin | 888 | popa |
889 | |||
890 | mov eax,4 |
||
891 | shr ecx,16 |
||
892 | mov bx,cx |
||
893 | add ebx,2*65536+4 |
||
894 | mov ecx,0xffffff |
||
895 | mov edx,infrared_text |
||
896 | mov esi,10 |
||
485 | heavyiron | 897 | mcall |
31 | halyavin | 898 | add ebx,11 |
899 | add edx,10 |
||
900 | mov eax,4 |
||
485 | heavyiron | 901 | mcall |
31 | halyavin | 902 | |
903 | mov ebx,25*65536+35 ; draw info text with function 4 |
||
904 | mov ecx,[textc] |
||
905 | mov edx,text |
||
906 | mov esi,40 |
||
907 | newline: |
||
908 | mov eax,4 |
||
485 | heavyiron | 909 | mcall |
31 | halyavin | 910 | add ebx,10 |
911 | add edx,40 |
||
912 | cmp [edx],byte 'x' |
||
913 | jne newline |
||
914 | |||
915 | call display_progress |
||
916 | |||
917 | call draw_wave |
||
918 | |||
919 | mov eax,12 |
||
920 | mov ebx,2 |
||
485 | heavyiron | 921 | mcall |
31 | halyavin | 922 | |
923 | popa |
||
924 | ret |
||
925 | |||
926 | |||
927 | |||
928 | |||
929 | draw_wave: |
||
930 | |||
931 | ; ret |
||
932 | |||
933 | pusha |
||
934 | |||
935 | mov eax,13 |
||
936 | mov ebx,260*65536+43 |
||
937 | mov ecx,42*65536+32 |
||
938 | mov edx,[border] |
||
485 | heavyiron | 939 | mcall |
31 | halyavin | 940 | |
941 | mov esi,[playposition] |
||
942 | mov ebx,260 |
||
943 | npix: |
||
944 | mov eax,1 |
||
945 | inc ebx |
||
946 | movzx ecx,byte [esi] |
||
947 | shr ecx,3 |
||
948 | add ecx,42 |
||
949 | mov edx,[drawc];0x2255aa |
||
485 | heavyiron | 950 | mcall |
31 | halyavin | 951 | |
952 | add esi,2 |
||
953 | |||
954 | cmp ebx,300 |
||
955 | jbe npix |
||
956 | |||
957 | popa |
||
958 | |||
959 | ret |
||
960 | |||
961 | |||
962 | ; DATA AREA |
||
963 | |||
964 | infrared_text: db 'IRMAN INFRAR ' |
||
965 | |||
966 | |||
967 | textc dd 0xffffff |
||
968 | bgr dd 0x00000000 |
||
969 | drawc dd 0x2255aa |
||
970 | drawp dd 0x8011aa |
||
971 | border dd 0x5577aa |
||
972 | |||
973 | text: |
||
974 | db 'Define SB, HD & partition with setup ' |
||
975 | db 'If clipping change "delay" in source ' |
||
976 | db ' ' |
||
977 | db ' ' |
||
978 | db ' ' |
||
979 | db ' START/STOP << >> REPEAT:OFF ' |
||
980 | db 'x <- END MARKER, DONT DELETE ' |
||
981 | now_playing: |
||
982 | db ' ' |
||
983 | db 'xx ' |
||
984 | |||
985 | file_info: |
||
986 | |||
987 | dd 0 ; read |
||
988 | dd 0 |
||
989 | dd 0 |
||
990 | dd 0 |
||
991 | dd 0 |
||
992 | |||
993 | wavfile: |
||
994 | db '/HD/1/MENUET/MUSIC/FILE7.WAV',0 |
||
995 | db ' ' |
||
996 | |||
997 | |||
485 | heavyiron | 998 | title db ' WAVE PLAYER : 8b Mono - 16b Stereo',0 |
31 | halyavin | 999 | |
1000 | I_END:->><>><> |