Subversion Repositories Kolibri OS

Rev

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