Subversion Repositories Kolibri OS

Rev

Rev 588 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; Óïðàâëåíèå ëîòêàìè äèñêîâûõ ïðèâîäîâ ATAPI
  3. ; 22.07.2007 Mario79 èñõîäíûé âàðèàíò
  4. ;---------------------------------------------------------------------
  5.  
  6.   use32          ; âêëþ÷èòü 32-áèòíûé ðåæèì àññåìáëåðà
  7.   org     0x0         ; àäðåñàöèÿ ñ íóëÿ
  8.  
  9.   db     'MENUET01'  ; 8-áàéòíûé èäåíòèôèêàòîð MenuetOS
  10.   dd     0x01         ; âåðñèÿ çàãîëîâêà (âñåãäà 1)
  11.   dd     START         ; àäðåñ ïåðâîé êîìàíäû
  12.   dd     I_END         ; ðàçìåð ïðîãðàììû
  13.   dd     0x11000      ; êîëè÷åñòâî ïàìÿòè
  14.   dd     0x11000      ; àäðåñ âåðøèíû ñòýêà
  15.   dd     0x0         ; àäðåñ áóôåðà äëÿ ïàðàìåòðîâ (íå èñïîëüçóåòñÿ)
  16.   dd     0x0         ; çàðåçåðâèðîâàíî
  17.  
  18. include 'MACROS.INC' ; ìàêðîñû îáëåã÷àþò æèçíü àññåìáëåðùèêîâ!
  19. include 'lang.inc'
  20.  
  21. ;---------------------------------------------------------------------
  22. ;---  ÍÀ×ÀËÎ ÏÐÎÃÐÀÌÌÛ  ----------------------------------------------
  23. ;---------------------------------------------------------------------
  24.  
  25. START:
  26.  
  27. red:            ; ïåðåðèñîâàòü îêíî
  28.     call draw_window    ; âûçûâàåì ïðîöåäóðó îòðèñîâêè îêíà
  29.  
  30. ;---------------------------------------------------------------------
  31. ;---  ÖÈÊË ÎÁÐÀÁÎÒÊÈ ÑÎÁÛÒÈÉ  ----------------------------------------
  32. ;---------------------------------------------------------------------
  33.  
  34. still:
  35.     mcall 10        ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ
  36.  
  37.     cmp  eax,1        ; ïåðåðèñîâàòü îêíî ?
  38.     je     red        ; åñëè äà - íà ìåòêó red
  39.     cmp  eax,2        ; íàæàòà êëàâèøà ?
  40.     je     key        ; åñëè äà - íà key
  41.     cmp  eax,3        ; íàæàòà êíîïêà ?
  42.     je     button     ; åñëè äà - íà button
  43.  
  44.     jmp  still        ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà
  45.  
  46.  
  47. ;---------------------------------------------------------------------
  48.  
  49.  
  50.   key:            ; íàæàòà êëàâèøà íà êëàâèàòóðå
  51.     mcall 2        ; ôóíêöèÿ 2 - ñ÷èòàòü êîä ñèìâîëà (â ah)
  52.  
  53.     jmp  still        ; âåðíóòüñÿ ê íà÷àëó öèêëà
  54.  
  55. ;---------------------------------------------------------------------
  56.  
  57.   button:
  58.     mcall 17        ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè
  59. ; êíîïêè 2,3,4,5 - load tray CD0/CD1/CD2/CD3
  60.         movzx   ecx, ah
  61.         sub     ecx, 2
  62.         cmp     ecx, 3
  63.         ja      b6
  64.         mcall 24,5
  65.         jmp     red
  66.   b6:
  67. ; êíîïêè 6,7,8,9 - eject tray CD0/CD1/CD2/CD3
  68.         sub     ecx, 4
  69.         cmp     ecx, 3
  70.         ja      b1
  71.         mcall 24,4
  72.         jmp     red
  73.   b1:
  74.     cmp   ah, 1     ; åñëè ÍÅ íàæàòà êíîïêà ñ íîìåðîì 1,
  75.     jne   still     ;  âåðíóòüñÿ
  76.  
  77.   .exit:
  78.     mcall -1        ; èíà÷å êîíåö ïðîãðàììû
  79.  
  80.  
  81.  
  82. ;---------------------------------------------------------------------
  83. ;---  ÎÏÐÅÄÅËÅÍÈÅ È ÎÒÐÈÑÎÂÊÀ ÎÊÍÀ  ----------------------------------
  84. ;---------------------------------------------------------------------
  85.  
  86. draw_window:
  87.     mcall 12, 1            ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà
  88.                    ; 1 - íà÷èíàåì ðèñîâàòü
  89.                    ; ÑÎÇÄÀèÌ ÎÊÍÎ
  90.  
  91.     if lang eq it
  92.                         mcall 0, <100,250>, <100,110>, 0x03AABBCC, 0x805080D0, 0x005080D0
  93.          else
  94.                         mcall 0, <100,230>, <100,110>, 0x03AABBCC, 0x805080D0, 0x005080D0
  95.          end if
  96.     mcall 71, 1 ,header
  97.     mcall 8,<15,42>,<40,20>,2,0xaaaaaa
  98.     call  draw_buttons
  99.     mov   edx,6
  100.     add   ecx,30 shl 16
  101.     mcall
  102.     call  draw_buttons
  103.  
  104.          if lang eq it
  105.                         mcall 4, <16,25>, 0x80ffffff,text1
  106.          else
  107.                         mcall 4, <25,25>, 0x80ffffff,text1
  108.          end if
  109.     mov   edx,text2
  110.  
  111.     add   ebx,3 shl 16+20
  112.     mcall
  113.     mov   edx,text3
  114.     add   ebx,30
  115.     sub   ebx,3 shl 16
  116.     mcall
  117.  
  118.     mcall 12, 2            ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà
  119.                    ; 2, çàêîí÷èëè ðèñîâàòü
  120.  
  121.     ret                ; âûõîäèì èç ïðîöåäóðû
  122.  
  123. draw_buttons:
  124.     pusha
  125.     if lang eq it
  126.                         add   ebx,60 shl 16
  127.          else
  128.                         add   ebx,50 shl 16
  129.          end if
  130.     inc   edx
  131.     mcall
  132.     if lang eq it
  133.                         add   ebx,60 shl 16
  134.          else
  135.                         add   ebx,50 shl 16
  136.          end if
  137.     inc   edx
  138.     mcall
  139.     if lang eq it
  140.                         add   ebx,60 shl 16
  141.          else
  142.                         add   ebx,50 shl 16
  143.          end if
  144.     inc   edx
  145.     mcall
  146.     popa
  147.     ret
  148. ;---------------------------------------------------------------------
  149. ;---  ÄÀÍÍÛÅ ÏÐÎÃÐÀÌÌÛ  ----------------------------------------------
  150. ;---------------------------------------------------------------------
  151. header db ' ATAPI Device Tray Control',0
  152. if lang eq it
  153.         text3 db 'espelli   espelli   espelli   espelli',0
  154.         text2 db 'carica    carica    carica    carica',0
  155.         text1 db '/cd0/     /cd1/     /cd2/     /cd3/',0
  156. else
  157.         text3 db 'eject   eject   eject   eject',0
  158.         text2 db 'load    load    load    load',0
  159.         text1 db '/cd0/   /cd1/   /cd2/   /cd3/',0
  160. end if
  161.  
  162. ;---------------------------------------------------------------------
  163.  
  164. I_END:                   ; ìåòêà êîíöà ïðîãðàììû
  165.