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.  
  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.     cmp   ah,2
  59.     jne   b3
  60.     mov   dword [load_tray.name],cd0
  61.     jmp   b5.1
  62.   b3:
  63.     cmp   ah,3
  64.     jne   b4
  65.     mov   dword [load_tray.name],cd1
  66.     jmp   b5.1
  67.   b4:
  68.     cmp   ah,4
  69.     jne   b5
  70.     mov   dword [load_tray.name],cd2
  71.     jmp   b5.1
  72.   b5:
  73.     cmp   ah,5
  74.     jne   b6
  75.     mov   dword [load_tray.name],cd3
  76.   .1:  
  77.      mcall 70, load_tray
  78.     jmp   red
  79.   b6:
  80.     cmp   ah,6
  81.     jne   b7
  82.     mov   dword [eject_tray.name],cd0
  83.     jmp   b9.1
  84.   b7:
  85.     cmp   ah,7
  86.     jne   b8
  87.     mov   dword [eject_tray.name],cd1
  88.     jmp   b9.1
  89.   b8:
  90.     cmp   ah,8
  91.     jne   b9
  92.     mov   dword [eject_tray.name],cd2
  93.     jmp   b9.1
  94.   b9:
  95.     cmp   ah,9
  96.     jne   b1
  97.     mov   dword [eject_tray.name],cd3
  98.   .1:  
  99.      mcall 70, eject_tray
  100.     jmp   red
  101.   b1:
  102.     cmp   ah, 1     ; åñëè ÍÅ íàæàòà êíîïêà ñ íîìåðîì 1,
  103.     jne   still     ;  âåðíóòüñÿ
  104.  
  105.   .exit:
  106.     mcall -1        ; èíà÷å êîíåö ïðîãðàììû
  107.  
  108.  
  109.  
  110. ;---------------------------------------------------------------------
  111. ;---  ÎÏÐÅÄÅËÅÍÈÅ È ÎÒÐÈÑÎÂÊÀ ÎÊÍÀ  ----------------------------------
  112. ;---------------------------------------------------------------------
  113.  
  114. draw_window:
  115.     mcall 12, 1            ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà
  116.                    ; 1 - íà÷èíàåì ðèñîâàòü
  117.                    ; ÑÎÇÄÀèÌ ÎÊÍÎ
  118.  
  119.     mcall 0, <100,230>, <100,110>, 0x03AABBCC, 0x805080D0, 0x005080D0
  120.     mcall 71, 1 ,header
  121.     mcall 8,<15,42>,<40,20>,2,0xaaaaaa
  122.     call  draw_buttons
  123.     mov   edx,6
  124.     add   ecx,30 shl 16
  125.     mcall
  126.     call  draw_buttons
  127.    
  128.     mcall 4, <25,25>, 0x80ffffff,text1
  129.     mov   edx,text2
  130.    
  131.     add   ebx,3 shl 16+20
  132.     mcall
  133.     mov   edx,text3
  134.     add   ebx,30
  135.     sub   ebx,3 shl 16
  136.     mcall
  137.    
  138.     mcall 12, 2            ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà
  139.                    ; 2, çàêîí÷èëè ðèñîâàòü
  140.  
  141.     ret                ; âûõîäèì èç ïðîöåäóðû
  142.  
  143. draw_buttons:
  144.     pusha
  145.     add   ebx,50 shl 16
  146.     inc   edx
  147.     mcall
  148.     add   ebx,50 shl 16
  149.     inc   edx
  150.     mcall
  151.     add   ebx,50 shl 16
  152.     inc   edx
  153.     mcall
  154.     popa
  155.     ret
  156. ;---------------------------------------------------------------------
  157. ;---  ÄÀÍÍÛÅ ÏÐÎÃÐÀÌÌÛ  ----------------------------------------------
  158. ;---------------------------------------------------------------------
  159. header db ' ATAPI Device Tray Control',0
  160. text3 db 'eject   eject   eject   eject',0
  161. text2 db 'load    load    load    load',0
  162. text1 db '/cd0/   /cd1/   /cd2/   /cd3/',0
  163. cd0:  db '/cd0/1/',0
  164. cd1:  db '/cd1/1/',0
  165. cd2:  db '/cd2/1/',0
  166. cd3:  db '/cd3/1/',0
  167. ;---------------------------------------------------------------------
  168. load_tray:
  169.     .subfunction dd   11
  170.     .rezerv   dd   0
  171.     .rezerv1  dd   0
  172.     .rezerv2  dd   0
  173.     .rezerv3  dd   0
  174.     db 0
  175.     .name: dd cd0
  176.  
  177. eject_tray:
  178.     .subfunction dd   10
  179.     .rezerv   dd   0
  180.     .rezerv1  dd   0
  181.     .rezerv2  dd   0
  182.     .rezerv3  dd   0
  183.     db 0
  184.     .name: dd cd0
  185.    
  186. I_END:                   ; ìåòêà êîíöà ïðîãðàììû
  187.