Subversion Repositories Kolibri OS

Rev

Rev 588 | 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' ; макросы облегчают жизнь ассемблерщиков!
3587 fedesco 19
include 'lang.inc'
585 mario79 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 - получить идентификатор нажатой кнопки
588 diamond 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
585 mario79 66
  b6:
588 diamond 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
585 mario79 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
 
3587 fedesco 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
585 mario79 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
3587 fedesco 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
585 mario79 109
    mov   edx,text2
3587 fedesco 110
 
585 mario79 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
3587 fedesco 117
 
585 mario79 118
    mcall 12, 2 	   ; функция 12: сообщить ОС об отрисовке окна
119
		   ; 2, закончили рисовать
120
 
121
    ret 	       ; выходим из процедуры
122
 
123
draw_buttons:
124
    pusha
3587 fedesco 125
    if lang eq it
126
			add   ebx,60 shl 16
127
	 else
128
			add   ebx,50 shl 16
129
	 end if
585 mario79 130
    inc   edx
3587 fedesco 131
    mcall
132
    if lang eq it
133
			add   ebx,60 shl 16
134
	 else
135
			add   ebx,50 shl 16
136
	 end if
585 mario79 137
    inc   edx
3587 fedesco 138
    mcall
139
    if lang eq it
140
			add   ebx,60 shl 16
141
	 else
142
			add   ebx,50 shl 16
143
	 end if
585 mario79 144
    inc   edx
3587 fedesco 145
    mcall
585 mario79 146
    popa
147
    ret
148
;---------------------------------------------------------------------
149
;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
150
;---------------------------------------------------------------------
151
header db ' ATAPI Device Tray Control',0
3587 fedesco 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
 
585 mario79 162
;---------------------------------------------------------------------
3587 fedesco 163
 
585 mario79 164
I_END:			 ; метка конца программы