0,0 → 1,186 |
; |
; Óïðàâëåíèå ëîòêàìè äèñêîâûõ ïðèâîäîâ ATAPI |
; 22.07.2007 Mario79 èñõîäíûé âàðèàíò |
;--------------------------------------------------------------------- |
|
use32 ; âêëþ÷èòü 32-áèòíûé ðåæèì àññåìáëåðà |
org 0x0 ; àäðåñàöèÿ ñ íóëÿ |
|
db 'MENUET01' ; 8-áàéòíûé èäåíòèôèêàòîð MenuetOS |
dd 0x01 ; âåðñèÿ çàãîëîâêà (âñåãäà 1) |
dd START ; àäðåñ ïåðâîé êîìàíäû |
dd I_END ; ðàçìåð ïðîãðàììû |
dd 0x11000 ; êîëè÷åñòâî ïàìÿòè |
dd 0x11000 ; àäðåñ âåðøèíû ñòýêà |
dd 0x0 ; àäðåñ áóôåðà äëÿ ïàðàìåòðîâ (íå èñïîëüçóåòñÿ) |
dd 0x0 ; çàðåçåðâèðîâàíî |
|
include 'MACROS.INC' ; ìàêðîñû îáëåã÷àþò æèçíü àññåìáëåðùèêîâ! |
|
;--------------------------------------------------------------------- |
;--- ÍÀ×ÀËÎ ÏÐÎÃÐÀÌÌÛ ---------------------------------------------- |
;--------------------------------------------------------------------- |
|
START: |
|
red: ; ïåðåðèñîâàòü îêíî |
call draw_window ; âûçûâàåì ïðîöåäóðó îòðèñîâêè îêíà |
|
;--------------------------------------------------------------------- |
;--- ÖÈÊË ÎÁÐÀÁÎÒÊÈ ÑÎÁÛÒÈÉ ---------------------------------------- |
;--------------------------------------------------------------------- |
|
still: |
mcall 10 ; ôóíêöèÿ 10 - æäàòü ñîáûòèÿ |
|
cmp eax,1 ; ïåðåðèñîâàòü îêíî ? |
je red ; åñëè äà - íà ìåòêó red |
cmp eax,2 ; íàæàòà êëàâèøà ? |
je key ; åñëè äà - íà key |
cmp eax,3 ; íàæàòà êíîïêà ? |
je button ; åñëè äà - íà button |
|
jmp still ; åñëè äðóãîå ñîáûòèå - â íà÷àëî öèêëà |
|
|
;--------------------------------------------------------------------- |
|
|
key: ; íàæàòà êëàâèøà íà êëàâèàòóðå |
mcall 2 ; ôóíêöèÿ 2 - ñ÷èòàòü êîä ñèìâîëà (â ah) |
|
jmp still ; âåðíóòüñÿ ê íà÷àëó öèêëà |
|
;--------------------------------------------------------------------- |
|
button: |
mcall 17 ; 17 - ïîëó÷èòü èäåíòèôèêàòîð íàæàòîé êíîïêè |
cmp ah,2 |
jne b3 |
mov dword [load_tray.name],cd0 |
jmp b5.1 |
b3: |
cmp ah,3 |
jne b4 |
mov dword [load_tray.name],cd1 |
jmp b5.1 |
b4: |
cmp ah,4 |
jne b5 |
mov dword [load_tray.name],cd2 |
jmp b5.1 |
b5: |
cmp ah,5 |
jne b6 |
mov dword [load_tray.name],cd3 |
.1: |
mcall 70, load_tray |
jmp red |
b6: |
cmp ah,6 |
jne b7 |
mov dword [eject_tray.name],cd0 |
jmp b9.1 |
b7: |
cmp ah,7 |
jne b8 |
mov dword [eject_tray.name],cd1 |
jmp b9.1 |
b8: |
cmp ah,8 |
jne b9 |
mov dword [eject_tray.name],cd2 |
jmp b9.1 |
b9: |
cmp ah,9 |
jne b1 |
mov dword [eject_tray.name],cd3 |
.1: |
mcall 70, eject_tray |
jmp red |
b1: |
cmp ah, 1 ; åñëè ÍÅ íàæàòà êíîïêà ñ íîìåðîì 1, |
jne still ; âåðíóòüñÿ |
|
.exit: |
mcall -1 ; èíà÷å êîíåö ïðîãðàììû |
|
|
|
;--------------------------------------------------------------------- |
;--- ÎÏÐÅÄÅËÅÍÈÅ È ÎÒÐÈÑÎÂÊÀ ÎÊÍÀ ---------------------------------- |
;--------------------------------------------------------------------- |
|
draw_window: |
mcall 12, 1 ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà |
; 1 - íà÷èíàåì ðèñîâàòü |
; ÑÎÇÄÀèÌ ÎÊÍÎ |
|
mcall 0, <100,230>, <100,110>, 0x03AABBCC, 0x805080D0, 0x005080D0 |
mcall 71, 1 ,header |
mcall 8,<15,42>,<40,20>,2,0xaaaaaa |
call draw_buttons |
mov edx,6 |
add ecx,30 shl 16 |
mcall |
call draw_buttons |
|
mcall 4, <25,25>, 0x80ffffff,text1 |
mov edx,text2 |
|
add ebx,3 shl 16+20 |
mcall |
mov edx,text3 |
add ebx,30 |
sub ebx,3 shl 16 |
mcall |
|
mcall 12, 2 ; ôóíêöèÿ 12: ñîîáùèòü ÎÑ îá îòðèñîâêå îêíà |
; 2, çàêîí÷èëè ðèñîâàòü |
|
ret ; âûõîäèì èç ïðîöåäóðû |
|
draw_buttons: |
pusha |
add ebx,50 shl 16 |
inc edx |
mcall |
add ebx,50 shl 16 |
inc edx |
mcall |
add ebx,50 shl 16 |
inc edx |
mcall |
popa |
ret |
;--------------------------------------------------------------------- |
;--- ÄÀÍÍÛÅ ÏÐÎÃÐÀÌÌÛ ---------------------------------------------- |
;--------------------------------------------------------------------- |
header db ' ATAPI Device Tray Control',0 |
text3 db 'eject eject eject eject',0 |
text2 db 'load load load load',0 |
text1 db '/cd0/ /cd1/ /cd2/ /cd3/',0 |
cd0: db '/cd0/1/',0 |
cd1: db '/cd1/1/',0 |
cd2: db '/cd2/1/',0 |
cd3: db '/cd3/1/',0 |
;--------------------------------------------------------------------- |
load_tray: |
.subfunction dd 11 |
.rezerv dd 0 |
.rezerv1 dd 0 |
.rezerv2 dd 0 |
.rezerv3 dd 0 |
db 0 |
.name: dd cd0 |
|
eject_tray: |
.subfunction dd 10 |
.rezerv dd 0 |
.rezerv1 dd 0 |
.rezerv2 dd 0 |
.rezerv3 dd 0 |
db 0 |
.name: dd cd0 |
|
I_END: ; ìåòêà êîíöà ïðîãðàììû |