Subversion Repositories Kolibri OS

Rev

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