Subversion Repositories Kolibri OS

Rev

Rev 585 | Rev 3587 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
585 mario79 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 - получить идентификатор нажатой кнопки
588 diamond 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
585 mario79 65
  b6:
588 diamond 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
585 mario79 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:			 ; метка конца программы