Subversion Repositories Kolibri OS

Rev

Rev 585 | 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.  
  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.     mcall 0, <100,230>, <100,110>, 0x03AABBCC, 0x805080D0, 0x005080D0
  91.     mcall 71, 1 ,header
  92.     mcall 8,<15,42>,<40,20>,2,0xaaaaaa
  93.     call  draw_buttons
  94.     mov   edx,6
  95.     add   ecx,30 shl 16
  96.     mcall
  97.     call  draw_buttons
  98.    
  99.     mcall 4, <25,25>, 0x80ffffff,text1
  100.     mov   edx,text2
  101.    
  102.     add   ebx,3 shl 16+20
  103.     mcall
  104.     mov   edx,text3
  105.     add   ebx,30
  106.     sub   ebx,3 shl 16
  107.     mcall
  108.    
  109.     mcall 12, 2            ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà
  110.                    ; 2, çàêîí÷èëè ðèñîâàòü
  111.  
  112.     ret                ; âûõîäèì èç ïðîöåäóðû
  113.  
  114. draw_buttons:
  115.     pusha
  116.     add   ebx,50 shl 16
  117.     inc   edx
  118.     mcall
  119.     add   ebx,50 shl 16
  120.     inc   edx
  121.     mcall
  122.     add   ebx,50 shl 16
  123.     inc   edx
  124.     mcall
  125.     popa
  126.     ret
  127. ;---------------------------------------------------------------------
  128. ;---  ÄÀÍÍÛÅ ÏÐÎÃÐÀÌÌÛ  ----------------------------------------------
  129. ;---------------------------------------------------------------------
  130. header db ' ATAPI Device Tray Control',0
  131. text3 db 'eject   eject   eject   eject',0
  132. text2 db 'load    load    load    load',0
  133. text1 db '/cd0/   /cd1/   /cd2/   /cd3/',0
  134. ;---------------------------------------------------------------------
  135.    
  136. I_END:                   ; ìåòêà êîíöà ïðîãðàììû
  137.