492 lines
8.6 KiB
NASM
492 lines
8.6 KiB
NASM
|
|
||
|
;
|
||
|
; MIXER
|
||
|
;
|
||
|
; Compile with FASM
|
||
|
;
|
||
|
|
||
|
use32
|
||
|
|
||
|
org 0x0
|
||
|
db 'MENUET00' ; 8 byte id
|
||
|
dd 38 ; required os
|
||
|
dd START ; program start
|
||
|
dd I_END ; program image size
|
||
|
dd 0x1000 ; reguired amount of memory
|
||
|
dd 0x1000
|
||
|
dd 0x00000000 ; reserved=no extended header
|
||
|
|
||
|
include 'lang.inc'
|
||
|
include 'macros.inc'
|
||
|
|
||
|
START: ; start of execution
|
||
|
|
||
|
|
||
|
call draw_window ; at first, draw the window
|
||
|
|
||
|
|
||
|
still:
|
||
|
|
||
|
mov eax,10 ; wait here for event
|
||
|
int 0x40
|
||
|
|
||
|
cmp eax,1 ; redraw request ?
|
||
|
jz red
|
||
|
cmp eax,2 ; key in buffer ?
|
||
|
jz key
|
||
|
cmp eax,3 ; button in buffer ?
|
||
|
jz button
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
red: ; redraw
|
||
|
call draw_window
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
key: ; key
|
||
|
mov eax,2 ; just read it and ignore
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
button: ; button
|
||
|
mov eax,17
|
||
|
int 0x40
|
||
|
|
||
|
cmp ah,1 ; button id=1 ?
|
||
|
jnz noclose
|
||
|
mov eax,-1 ; close this program
|
||
|
int 0x40
|
||
|
noclose:
|
||
|
|
||
|
cmp ah,101
|
||
|
jnz nochange
|
||
|
mov al,byte [usecard]
|
||
|
cld
|
||
|
inc al
|
||
|
and al,3
|
||
|
cmp al,0
|
||
|
jnz nozer
|
||
|
mov al,1
|
||
|
nozer:
|
||
|
mov byte [usecard],al
|
||
|
|
||
|
call drawusedcard
|
||
|
|
||
|
nochange:
|
||
|
|
||
|
cmp byte [usecard],byte 1
|
||
|
jz usesb16
|
||
|
|
||
|
cmp byte [usecard],byte 2
|
||
|
jnz nousesb16II
|
||
|
jmp usesb16II
|
||
|
nousesb16II:
|
||
|
|
||
|
cmp byte [usecard],byte 3
|
||
|
jnz nousewss
|
||
|
jmp usewss
|
||
|
nousewss:
|
||
|
|
||
|
|
||
|
|
||
|
; SOUND BLASTER 16
|
||
|
|
||
|
|
||
|
usesb16:
|
||
|
|
||
|
|
||
|
cld
|
||
|
|
||
|
mov al,20
|
||
|
cmp ah,al
|
||
|
jge nomain
|
||
|
|
||
|
mov ecx,0
|
||
|
cmp ah,12
|
||
|
jnz nomain12
|
||
|
mov ecx,3*16+3
|
||
|
nomain12:
|
||
|
cmp ah,13
|
||
|
jnz nomain13
|
||
|
mov ecx,7*16+7
|
||
|
nomain13:
|
||
|
cmp ah,14
|
||
|
jnz nomain14
|
||
|
mov ecx,11*16+11
|
||
|
nomain14:
|
||
|
cmp ah,15
|
||
|
jnz nomain15
|
||
|
mov ecx,15*16+15
|
||
|
nomain15:
|
||
|
|
||
|
mov eax,25
|
||
|
mov ebx,1
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
nomain:
|
||
|
|
||
|
mov al,30
|
||
|
cmp ah,al
|
||
|
jge nocd
|
||
|
|
||
|
mov ecx,0
|
||
|
|
||
|
cmp ah,22
|
||
|
jnz nocd12
|
||
|
mov ecx,3*16+3
|
||
|
nocd12:
|
||
|
cmp ah,23
|
||
|
jnz nocd13
|
||
|
mov ecx,7*16+7
|
||
|
nocd13:
|
||
|
cmp ah,24
|
||
|
jnz nocd14
|
||
|
mov ecx,11*16+11
|
||
|
nocd14:
|
||
|
cmp ah,25
|
||
|
jnz nocd15
|
||
|
mov ecx,15*16+15
|
||
|
nocd15:
|
||
|
|
||
|
mov eax,25
|
||
|
mov ebx,2
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
nocd:
|
||
|
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
; SOUND BLASTER 16 II
|
||
|
|
||
|
usesb16II:
|
||
|
|
||
|
cld
|
||
|
|
||
|
mov al,20
|
||
|
cmp ah,al
|
||
|
jge IIwnomain
|
||
|
|
||
|
mov ecx,0
|
||
|
cmp ah,12
|
||
|
jnz IIwnomain12
|
||
|
mov ecx,50
|
||
|
IIwnomain12:
|
||
|
cmp ah,13
|
||
|
jnz IIwnomain13
|
||
|
mov ecx,150
|
||
|
IIwnomain13:
|
||
|
cmp ah,14
|
||
|
jnz IIwnomain14
|
||
|
mov ecx,200
|
||
|
IIwnomain14:
|
||
|
cmp ah,15
|
||
|
jnz IIwnomain15
|
||
|
mov ecx,255
|
||
|
IIwnomain15:
|
||
|
|
||
|
mov eax,28
|
||
|
mov ebx,1
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
IIwnomain:
|
||
|
|
||
|
mov al,30
|
||
|
cmp ah,al
|
||
|
jge IIwnocd
|
||
|
|
||
|
mov ecx,0
|
||
|
|
||
|
cmp ah,22
|
||
|
jnz IIwnocd12
|
||
|
mov ecx,50
|
||
|
IIwnocd12:
|
||
|
cmp ah,23
|
||
|
jnz IIwnocd13
|
||
|
mov ecx,150
|
||
|
IIwnocd13:
|
||
|
cmp ah,24
|
||
|
jnz IIwnocd14
|
||
|
mov ecx,200
|
||
|
IIwnocd14:
|
||
|
cmp ah,25
|
||
|
jnz IIwnocd15
|
||
|
mov ecx,255
|
||
|
IIwnocd15:
|
||
|
|
||
|
mov eax,28
|
||
|
mov ebx,2
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
IIwnocd:
|
||
|
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
; WINDOWS SOUND SYSTEM
|
||
|
|
||
|
usewss:
|
||
|
|
||
|
cld
|
||
|
|
||
|
mov al,20
|
||
|
cmp ah,al
|
||
|
jge wnomain
|
||
|
|
||
|
mov ecx,255
|
||
|
cmp ah,12
|
||
|
jnz wnomain12
|
||
|
mov ecx,200
|
||
|
wnomain12:
|
||
|
cmp ah,13
|
||
|
jnz wnomain13
|
||
|
mov ecx,150
|
||
|
wnomain13:
|
||
|
cmp ah,14
|
||
|
jnz wnomain14
|
||
|
mov ecx,70
|
||
|
wnomain14:
|
||
|
cmp ah,15
|
||
|
jnz wnomain15
|
||
|
mov ecx,0
|
||
|
wnomain15:
|
||
|
|
||
|
mov eax,27
|
||
|
mov ebx,1
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
wnomain:
|
||
|
|
||
|
mov al,30
|
||
|
cmp ah,al
|
||
|
jge wnocd
|
||
|
|
||
|
mov ecx,255
|
||
|
|
||
|
cmp ah,22
|
||
|
jnz wnocd12
|
||
|
mov ecx,200
|
||
|
wnocd12:
|
||
|
cmp ah,23
|
||
|
jnz wnocd13
|
||
|
mov ecx,150
|
||
|
wnocd13:
|
||
|
cmp ah,24
|
||
|
jnz wnocd14
|
||
|
mov ecx,70
|
||
|
wnocd14:
|
||
|
cmp ah,25
|
||
|
jnz wnocd15
|
||
|
mov ecx,0
|
||
|
wnocd15:
|
||
|
|
||
|
mov eax,27
|
||
|
mov ebx,2
|
||
|
int 0x40
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
wnocd:
|
||
|
|
||
|
|
||
|
jmp still
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
; *********************************************
|
||
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||
|
; *********************************************
|
||
|
|
||
|
|
||
|
draw_window:
|
||
|
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,1 ; 1, start of draw
|
||
|
int 0x40
|
||
|
|
||
|
; DRAW WINDOW
|
||
|
mov eax,0 ; function 0 : define and draw window
|
||
|
mov ebx,100*65536+195 ; [x start] *65536 + [x size]
|
||
|
mov ecx,100*65536+140 ; [y start] *65536 + [y size]
|
||
|
mov edx,[wcolor] ; color of work area RRGGBB
|
||
|
mov esi,0x8099bbff ; color of grab bar RRGGBB,8->color glide
|
||
|
mov edi,0x0099bbee ; color of frames RRGGBB
|
||
|
int 0x40
|
||
|
|
||
|
; WINDOW LABEL
|
||
|
mov eax,4 ; function 4 : write text to window
|
||
|
mov ebx,8*65536+8 ; [x start] *65536 + [y start]
|
||
|
mov ecx,0x00ffffff ; color of text RRGGBB
|
||
|
mov edx,labelt ; pointer to text beginning
|
||
|
mov esi,labellen-labelt ; text length
|
||
|
int 0x40
|
||
|
|
||
|
; CLOSE BUTTON
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov ebx,(195-19)*65536+12 ; [x start] *65536 + [x size]
|
||
|
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
||
|
mov edx,1 ; button id
|
||
|
mov esi,0x22aacc ; button color RRGGBB
|
||
|
; int 0x40
|
||
|
|
||
|
mov edx,16 ; button id
|
||
|
mov ebx,10*65536
|
||
|
|
||
|
newbut:
|
||
|
|
||
|
push edx
|
||
|
push ebx
|
||
|
|
||
|
mov esi,[bcolor]
|
||
|
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov bx,22 ; [x start] *65536 + [x size]
|
||
|
mov ecx,35*65536+8 ; [y start] *65536 + [y size]
|
||
|
dec edx
|
||
|
int 0x40
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov bx,22 ; [x start] *65536 + [x size]
|
||
|
mov ecx,45*65536+8 ; [y start] *65536 + [y size]
|
||
|
dec edx
|
||
|
int 0x40
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov bx,22 ; [x start] *65536 + [x size]
|
||
|
mov ecx,55*65536+8 ; [y start] *65536 + [y size]
|
||
|
dec edx
|
||
|
int 0x40
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov bx,22 ; [x start] *65536 + [x size]
|
||
|
mov ecx,65*65536+8 ; [y start] *65536 + [y size]
|
||
|
dec edx
|
||
|
int 0x40
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov bx,22 ; [x start] *65536 + [x size]
|
||
|
mov ecx,75*65536+8 ; [y start] *65536 + [y size]
|
||
|
dec edx
|
||
|
int 0x40
|
||
|
|
||
|
pop ebx
|
||
|
pop edx
|
||
|
|
||
|
add ebx,30*65536
|
||
|
add edx,10
|
||
|
|
||
|
cmp edx,16+6*10
|
||
|
jz butdone
|
||
|
|
||
|
jmp newbut
|
||
|
|
||
|
butdone:
|
||
|
|
||
|
|
||
|
mov eax,4 ; function 4 : write text to window
|
||
|
mov ebx,10*65536+104 ; [x start] *65536 + [y start]
|
||
|
mov ecx,0x00ffffff ; color of text RRGGBB
|
||
|
mov edx,text ; pointer to text beginning
|
||
|
mov esi,29
|
||
|
int 0x40
|
||
|
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
mov ebx,(5)*65536+185 ; [x start] *65536 + [x size]
|
||
|
mov ecx,120*65536+14 ; [y start] *65536 + [y size]
|
||
|
mov edx,101 ; button id
|
||
|
mov esi,[bcolor] ; button color RRGGBB
|
||
|
int 0x40
|
||
|
|
||
|
call drawusedcard
|
||
|
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,2 ; 2, end of draw
|
||
|
int 0x40
|
||
|
|
||
|
ret
|
||
|
|
||
|
|
||
|
drawusedcard:
|
||
|
|
||
|
pusha
|
||
|
|
||
|
mov eax,13
|
||
|
mov ebx,14*65536+160
|
||
|
mov ecx,123*65536+10
|
||
|
mov edx,[bcolor]
|
||
|
int 0x40
|
||
|
|
||
|
mov eax,[usecard]
|
||
|
mov edx,c3
|
||
|
|
||
|
cmp al,1
|
||
|
jnz nosbc
|
||
|
mov edx,c1
|
||
|
nosbc:
|
||
|
cmp al,2
|
||
|
jnz nosbcII
|
||
|
mov edx,c2
|
||
|
nosbcII:
|
||
|
cmp al,3
|
||
|
jnz nowssc
|
||
|
mov edx,c3
|
||
|
nowssc:
|
||
|
|
||
|
mov eax,4
|
||
|
mov ebx,14*65536+123
|
||
|
mov ecx,0x00ffffff
|
||
|
mov esi,30
|
||
|
int 0x40
|
||
|
|
||
|
popa
|
||
|
|
||
|
ret
|
||
|
|
||
|
|
||
|
|
||
|
; DATA AREA
|
||
|
|
||
|
bcolor dd 0x5577c8
|
||
|
|
||
|
wcolor dd 0x03000000
|
||
|
|
||
|
|
||
|
text:
|
||
|
db 'MAIN CD WAVE MPU4 AUX1 AUX2'
|
||
|
|
||
|
c1 db 'SOUND BLASTER 16 - MIXER I '
|
||
|
c2 db 'SOUND BLASTER 16 - MIXER II '
|
||
|
c3 db 'WINDOWS SOUND SYSTEM '
|
||
|
|
||
|
|
||
|
usecard dd 0x1
|
||
|
|
||
|
labelt:
|
||
|
db 'MIXER'
|
||
|
labellen:
|
||
|
|
||
|
I_END:
|
||
|
|
||
|
|
||
|
|