Subversion Repositories Kolibri OS

Rev

Rev 532 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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