; Program manipuluje diodami klawiatury ; ; Autor: bogdan d. ; Kontakt: bogdandr (at) op (dot) pl ; ; nasm -f elf klaw.asm ; ld -s -o klaw klaw.o ; ; Copyright (C) 2005-2007 Bogdan 'bogdro' Drozdowski, bogdandr @ op . pl ; ; Ten program jest wolnym oprogramowaniem; mozesz go rozpowszechniac ; i/lub modyfikowac zgodnie z licencja GNU Lesser General Public License ; (GNU LGPL) w wersji wydanej przez Fundacje Wolnego Oprogramowania; ; wedlug wersji 3 Licencji lub (jesli wolisz) jednej z pozniejszych wersji. ; ; Ten program jest udostepniany z nadzieja, ze bedzie uzyteczny, lecz ; BEZ JAKIEJKOLWIEK GWARANCJI; nawet domyslnej gwarancji PRZYDATNOSCI ; HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. W celu uzyskania ; blizszych informacji - Licencja GNU Lesser General Public License. ; ; Z pewnoscia wraz z niniejszym programem otrzymales tez egzemplarz ; Licencji GNU Lesser General Public License; jesli nie - napisz do ; Fundacji Wolnego Oprogramowania: ; Free Software Foundation ; 51 Franklin Street, Fifth Floor ; Boston, MA 02110-1301 ; USA section .text ; nie musicie z tego korzystac: %include 'bibl/incl/nasm/n_system.inc' %include 'bibl/incl/nasm/n_const.inc' %define KDGETLED 0x4b31 %define KDSETLED 0x4b32 global _start _start: ; 1. otwieramy /dev/console, w trybie tylko do zapisu lub ; korzystamy ze STDOUT mov eax, sys_open ; sys_open = 5 mov ebx, konsola mov ecx, O_WRONLY ; O_WRONLY = 01 mov edx, 777q int 80h cmp eax, 0 jge .ok mov eax, stdout ; stdout = 1 ; 2. pobieramy aktualny stan diod .ok: mov ebx, eax ; EBX = deskryptor pliku mov eax, sys_ioctl ; sys_ioctl = 54 mov ecx, KDGETLED mov edx, stare_diody int 80h mov eax, sys_ioctl ; sys_ioctl = 54 mov ecx, KDSETLED mov edx, 7 ; wszystkie wlaczone int 80h MOV CX, 7 MOV DX, 0A120h call pauza ; przywracamy poprzedni stan diod mov eax, sys_ioctl mov ecx, KDSETLED mov edx, [stare_diody] int 80h cmp ebx, stdout jle .koniec ; nie zamykamy STDOUT mov eax, sys_close int 80h .koniec: wyjscie ; mov eax, 1 ; xor ebx, ebx ; int 80h pauza: push ebx push ecx push edx mov ax, cx shl eax, 16 mov ebx, 1000000 mov ax, dx ; EAX = CX:DX xor edx, edx div ebx mov [t1+timespec.tv_sec], eax ; EAX = ilosc sekund mov ebx, 1000 mov eax, edx mul ebx mov [t1+timespec.tv_nsec], eax ; EAX = ilosc nanosekund mov eax, sys_nanosleep mov ebx, t1 mov ecx, t2 int 80h pop edx pop ecx pop ebx ret ; ============================================== section .data stare_diody dd 0 konsola db '/dev/console',0 struc timespec .tv_sec: resd 1 .tv_nsec: resd 1 endstruc t1 istruc timespec t2 istruc timespec