Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ;
  3. ;    MIXER
  4. ;
  5. ;    Compile with FASM
  6. ;
  7.  
  8. use32
  9.  
  10.                 org   0x0
  11.                 db    'MENUET00'              ; 8 byte id
  12.                 dd    38                      ; required os
  13.                 dd    START                   ; program start
  14.                 dd    I_END                   ; program image size
  15.                 dd    0x1000                  ; reguired amount of memory
  16.                 dd    0x1000
  17.                 dd    0x00000000              ; reserved=no extended header
  18.  
  19. include 'lang.inc'
  20. include 'macros.inc'
  21.  
  22. START:                          ; start of execution
  23.  
  24.  
  25.     call draw_window            ; at first, draw the window
  26.  
  27.  
  28. still:
  29.  
  30.     mov  eax,10                 ; wait here for event
  31.     int  0x40
  32.  
  33.     cmp  eax,1                  ; redraw request ?
  34.     jz   red
  35.     cmp  eax,2                  ; key in buffer ?
  36.     jz   key
  37.     cmp  eax,3                  ; button in buffer ?
  38.     jz   button
  39.  
  40.     jmp  still
  41.  
  42.   red:                          ; redraw
  43.     call draw_window
  44.  
  45.     jmp  still
  46.  
  47.   key:                          ; key
  48.     mov  eax,2                  ; just read it and ignore
  49.     int  0x40
  50.  
  51.     jmp  still
  52.  
  53.   button:                       ; button
  54.     mov  eax,17
  55.     int  0x40
  56.  
  57.     cmp  ah,1                   ; button id=1 ?
  58.     jnz  noclose
  59.     mov  eax,-1                 ; close this program
  60.     int  0x40
  61.   noclose:
  62.  
  63.     cmp  ah,101
  64.     jnz  nochange
  65.     mov  al,byte [usecard]
  66.     cld
  67.     inc  al
  68.     and  al,3
  69.     cmp  al,0
  70.     jnz  nozer
  71.     mov  al,1
  72.   nozer:
  73.     mov  byte [usecard],al
  74.  
  75.     call drawusedcard
  76.  
  77.   nochange:
  78.  
  79.     cmp  byte [usecard],byte 1
  80.     jz   usesb16
  81.  
  82.     cmp  byte [usecard],byte 2
  83.     jnz  nousesb16II
  84.     jmp  usesb16II
  85.   nousesb16II:
  86.  
  87.     cmp  byte [usecard],byte 3
  88.     jnz  nousewss
  89.     jmp  usewss
  90.   nousewss:
  91.  
  92.  
  93.  
  94. ; SOUND BLASTER 16
  95.  
  96.  
  97.   usesb16:
  98.  
  99.  
  100.     cld
  101.  
  102.     mov  al,20
  103.     cmp  ah,al
  104.     jge  nomain
  105.  
  106.     mov  ecx,0
  107.     cmp  ah,12
  108.     jnz  nomain12
  109.     mov  ecx,3*16+3
  110.   nomain12:
  111.     cmp  ah,13
  112.     jnz  nomain13
  113.     mov  ecx,7*16+7
  114.   nomain13:
  115.     cmp  ah,14
  116.     jnz  nomain14
  117.     mov  ecx,11*16+11
  118.   nomain14:
  119.     cmp  ah,15
  120.     jnz  nomain15
  121.     mov  ecx,15*16+15
  122.   nomain15:
  123.  
  124.     mov  eax,25
  125.     mov  ebx,1
  126.     int  0x40
  127.  
  128.     jmp  still
  129.  
  130.   nomain:
  131.  
  132.     mov  al,30
  133.     cmp  ah,al
  134.     jge  nocd
  135.  
  136.     mov  ecx,0
  137.  
  138.     cmp  ah,22
  139.     jnz  nocd12
  140.     mov  ecx,3*16+3
  141.   nocd12:
  142.     cmp  ah,23
  143.     jnz  nocd13
  144.     mov  ecx,7*16+7
  145.   nocd13:
  146.     cmp  ah,24
  147.     jnz  nocd14
  148.     mov  ecx,11*16+11
  149.   nocd14:
  150.     cmp  ah,25
  151.     jnz  nocd15
  152.     mov  ecx,15*16+15
  153.   nocd15:
  154.  
  155.     mov  eax,25
  156.     mov  ebx,2
  157.     int  0x40
  158.  
  159.     jmp  still
  160.  
  161.   nocd:
  162.  
  163.  
  164.     jmp  still
  165.  
  166.  
  167.  
  168.  
  169. ; SOUND BLASTER 16 II
  170.  
  171.   usesb16II:
  172.  
  173.     cld
  174.  
  175.     mov  al,20
  176.     cmp  ah,al
  177.     jge  IIwnomain
  178.  
  179.     mov  ecx,0
  180.     cmp  ah,12
  181.     jnz  IIwnomain12
  182.     mov  ecx,50
  183.   IIwnomain12:
  184.     cmp  ah,13
  185.     jnz  IIwnomain13
  186.     mov  ecx,150
  187.   IIwnomain13:
  188.     cmp  ah,14
  189.     jnz  IIwnomain14
  190.     mov  ecx,200
  191.   IIwnomain14:
  192.     cmp  ah,15
  193.     jnz  IIwnomain15
  194.     mov  ecx,255
  195.   IIwnomain15:
  196.  
  197.     mov  eax,28
  198.     mov  ebx,1
  199.     int  0x40
  200.  
  201.     jmp  still
  202.  
  203.   IIwnomain:
  204.  
  205.     mov  al,30
  206.     cmp  ah,al
  207.     jge  IIwnocd
  208.  
  209.     mov  ecx,0
  210.  
  211.     cmp  ah,22
  212.     jnz  IIwnocd12
  213.     mov  ecx,50
  214.   IIwnocd12:
  215.     cmp  ah,23
  216.     jnz  IIwnocd13
  217.     mov  ecx,150
  218.   IIwnocd13:
  219.     cmp  ah,24
  220.     jnz  IIwnocd14
  221.     mov  ecx,200
  222.   IIwnocd14:
  223.     cmp  ah,25
  224.     jnz  IIwnocd15
  225.     mov  ecx,255
  226.   IIwnocd15:
  227.  
  228.     mov  eax,28
  229.     mov  ebx,2
  230.     int  0x40
  231.  
  232.     jmp  still
  233.  
  234.   IIwnocd:
  235.  
  236.  
  237.     jmp  still
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247. ; WINDOWS SOUND SYSTEM
  248.  
  249.   usewss:
  250.  
  251.     cld
  252.  
  253.     mov  al,20
  254.     cmp  ah,al
  255.     jge  wnomain
  256.  
  257.     mov  ecx,255
  258.     cmp  ah,12
  259.     jnz  wnomain12
  260.     mov  ecx,200
  261.   wnomain12:
  262.     cmp  ah,13
  263.     jnz  wnomain13
  264.     mov  ecx,150
  265.   wnomain13:
  266.     cmp  ah,14
  267.     jnz  wnomain14
  268.     mov  ecx,70
  269.   wnomain14:
  270.     cmp  ah,15
  271.     jnz  wnomain15
  272.     mov  ecx,0
  273.   wnomain15:
  274.  
  275.     mov  eax,27
  276.     mov  ebx,1
  277.     int  0x40
  278.  
  279.     jmp  still
  280.  
  281.   wnomain:
  282.  
  283.     mov  al,30
  284.     cmp  ah,al
  285.     jge  wnocd
  286.  
  287.     mov  ecx,255
  288.  
  289.     cmp  ah,22
  290.     jnz  wnocd12
  291.     mov  ecx,200
  292.   wnocd12:
  293.     cmp  ah,23
  294.     jnz  wnocd13
  295.     mov  ecx,150
  296.   wnocd13:
  297.     cmp  ah,24
  298.     jnz  wnocd14
  299.     mov  ecx,70
  300.   wnocd14:
  301.     cmp  ah,25
  302.     jnz  wnocd15
  303.     mov  ecx,0
  304.   wnocd15:
  305.  
  306.     mov  eax,27
  307.     mov  ebx,2
  308.     int  0x40
  309.  
  310.     jmp  still
  311.  
  312.   wnocd:
  313.  
  314.  
  315.     jmp  still
  316.  
  317.  
  318.  
  319.  
  320. ;   *********************************************
  321. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  322. ;   *********************************************
  323.  
  324.  
  325. draw_window:
  326.  
  327.     mov  eax,12                    ; function 12:tell os about windowdraw
  328.     mov  ebx,1                     ; 1, start of draw
  329.     int  0x40
  330.  
  331.                                    ; DRAW WINDOW
  332.     mov  eax,0                     ; function 0 : define and draw window
  333.     mov  ebx,100*65536+195         ; [x start] *65536 + [x size]
  334.     mov  ecx,100*65536+140         ; [y start] *65536 + [y size]
  335.     mov  edx,[wcolor]              ; color of work area RRGGBB
  336.     mov  esi,0x8099bbff            ; color of grab bar  RRGGBB,8->color glide
  337.     mov  edi,0x0099bbee            ; color of frames    RRGGBB
  338.     int  0x40
  339.  
  340.                                    ; WINDOW LABEL
  341.     mov  eax,4                     ; function 4 : write text to window
  342.     mov  ebx,8*65536+8             ; [x start] *65536 + [y start]
  343.     mov  ecx,0x00ffffff            ; color of text RRGGBB
  344.     mov  edx,labelt                ; pointer to text beginning
  345.     mov  esi,labellen-labelt       ; text length
  346.     int  0x40
  347.  
  348.                                    ; CLOSE BUTTON
  349.     mov  eax,8                     ; function 8 : define and draw button
  350.     mov  ebx,(195-19)*65536+12     ; [x start] *65536 + [x size]
  351.     mov  ecx,5*65536+12            ; [y start] *65536 + [y size]
  352.     mov  edx,1                     ; button id
  353.     mov  esi,0x22aacc              ; button color RRGGBB
  354. ;    int  0x40
  355.  
  356.     mov  edx,16                    ; button id
  357.     mov  ebx,10*65536
  358.  
  359.   newbut:
  360.  
  361.     push edx
  362.     push ebx
  363.  
  364.     mov  esi,[bcolor]
  365.  
  366.     mov  eax,8                     ; function 8 : define and draw button
  367.     mov  bx,22                     ; [x start] *65536 + [x size]
  368.     mov  ecx,35*65536+8            ; [y start] *65536 + [y size]
  369.     dec  edx
  370.     int  0x40
  371.     mov  eax,8                     ; function 8 : define and draw button
  372.     mov  bx,22                     ; [x start] *65536 + [x size]
  373.     mov  ecx,45*65536+8            ; [y start] *65536 + [y size]
  374.     dec  edx
  375.     int  0x40
  376.     mov  eax,8                     ; function 8 : define and draw button
  377.     mov  bx,22                     ; [x start] *65536 + [x size]
  378.     mov  ecx,55*65536+8            ; [y start] *65536 + [y size]
  379.     dec  edx
  380.     int  0x40
  381.     mov  eax,8                     ; function 8 : define and draw button
  382.     mov  bx,22                     ; [x start] *65536 + [x size]
  383.     mov  ecx,65*65536+8            ; [y start] *65536 + [y size]
  384.     dec  edx
  385.     int  0x40
  386.     mov  eax,8                     ; function 8 : define and draw button
  387.     mov  bx,22                     ; [x start] *65536 + [x size]
  388.     mov  ecx,75*65536+8            ; [y start] *65536 + [y size]
  389.     dec  edx
  390.     int  0x40
  391.  
  392.     pop  ebx
  393.     pop  edx
  394.  
  395.     add  ebx,30*65536
  396.     add  edx,10
  397.  
  398.     cmp  edx,16+6*10
  399.     jz   butdone
  400.  
  401.     jmp  newbut
  402.  
  403.   butdone:
  404.  
  405.  
  406.     mov  eax,4                     ; function 4 : write text to window
  407.     mov  ebx,10*65536+104          ; [x start] *65536 + [y start]
  408.     mov  ecx,0x00ffffff            ; color of text RRGGBB
  409.     mov  edx,text                  ; pointer to text beginning
  410.     mov  esi,29
  411.     int  0x40
  412.  
  413.     mov  eax,8                     ; function 8 : define and draw button
  414.     mov  ebx,(5)*65536+185         ; [x start] *65536 + [x size]
  415.     mov  ecx,120*65536+14          ; [y start] *65536 + [y size]
  416.     mov  edx,101                   ; button id
  417.     mov  esi,[bcolor]              ; button color RRGGBB
  418.     int  0x40
  419.  
  420.     call drawusedcard
  421.  
  422.     mov  eax,12                    ; function 12:tell os about windowdraw
  423.     mov  ebx,2                     ; 2, end of draw
  424.     int  0x40
  425.  
  426.     ret
  427.  
  428.  
  429. drawusedcard:
  430.  
  431.     pusha
  432.  
  433.     mov  eax,13
  434.     mov  ebx,14*65536+160
  435.     mov  ecx,123*65536+10
  436.     mov  edx,[bcolor]
  437.     int  0x40
  438.  
  439.     mov  eax,[usecard]
  440.     mov  edx,c3
  441.  
  442.     cmp  al,1
  443.     jnz  nosbc
  444.     mov  edx,c1
  445.   nosbc:
  446.     cmp  al,2
  447.     jnz  nosbcII
  448.     mov  edx,c2
  449.   nosbcII:
  450.     cmp  al,3
  451.     jnz  nowssc
  452.     mov  edx,c3
  453.   nowssc:
  454.  
  455.     mov  eax,4
  456.     mov  ebx,14*65536+123
  457.     mov  ecx,0x00ffffff
  458.     mov  esi,30
  459.     int  0x40
  460.  
  461.     popa
  462.  
  463.     ret
  464.  
  465.  
  466.  
  467. ; DATA AREA
  468.  
  469. bcolor  dd  0x5577c8
  470.  
  471. wcolor  dd  0x03000000
  472.  
  473.  
  474. text:
  475.     db 'MAIN  CD  WAVE MPU4 AUX1 AUX2'
  476.  
  477. c1  db 'SOUND BLASTER 16 - MIXER I    '
  478. c2  db 'SOUND BLASTER 16 - MIXER II   '
  479. c3  db 'WINDOWS SOUND SYSTEM          '
  480.  
  481.  
  482. usecard dd 0x1
  483.  
  484. labelt:
  485.     db   'MIXER'
  486. labellen:
  487.  
  488. I_END:
  489.  
  490.  
  491.  
  492.