No changes between revisions
/programs/system/keybi/keybi.asm |
0,0 → 1,162 |
|
; Keyboard indicators v0.1 |
; by Albom |
|
use32 |
org 0 |
db 'MENUET01' |
dd 1 |
dd _start |
dd _end |
dd _memory |
dd _stack |
dd _param |
dd 0 |
|
|
_start: |
|
call _key_set |
call _wnd_draw |
|
_event_wait: |
|
mov eax, 10 |
int 0x40 |
|
cmp eax, 1 |
jne @f |
call _wnd_draw |
|
@@: |
cmp eax, 2 |
jne @f |
call _key_check |
|
@@: |
cmp eax, 3 |
jne @f |
call _btn_check |
|
@@: |
|
|
jmp _event_wait |
|
_key_set: |
mov eax, 66 |
mov edx, 0 |
mov ebx, 4 |
mov cl, 69 |
int 0x40 |
|
mov eax, 66 |
mov edx, 0 |
mov ebx, 4 |
mov cl, 58 |
int 0x40 |
|
mov eax, 66 |
mov edx, 0 |
mov ebx, 4 |
mov cl, 70 |
int 0x40 |
|
ret |
|
|
_wnd_draw: |
pusha |
|
mov eax, 12 |
mov ebx, 1 |
int 0x40 |
|
xor eax, eax |
mov ebx, 10*65536+100 |
mov ecx, 10*65536+30 |
mov edx, 0x34ffffff |
mov edi, _ind |
int 0x40 |
|
call _indicators_check |
|
mov eax, 12 |
mov ebx, 2 |
int 0x40 |
|
popa |
ret |
|
_key_check: |
pusha |
mov eax, 2 |
int 0x40 |
|
call _indicators_check |
|
popa |
ret |
|
_btn_check: |
pusha |
mov eax, 17 |
int 0x40 |
cmp ah, 1 |
jne @f |
mov eax, -1 |
int 0x40 |
@@: |
popa |
ret |
|
|
_indicators_check: |
pusha |
mov eax, 66 |
mov ebx, 3 |
int 40h |
|
test_ins: |
test eax, 0x80 |
jz @f |
mov [_ind], '*' |
jmp test_caps |
@@: |
mov [_ind], 'o' |
|
test_caps: |
test eax, 0x40 |
jz @f |
mov [_ind+1], '*' |
jmp test_scroll |
@@: |
mov [_ind+1], 'o' |
|
test_scroll: |
test eax, 0x100 |
jz @f |
mov [_ind+2], '*' |
jmp test_ok |
@@: |
mov [_ind+2], 'o' |
|
test_ok: |
mov eax, 71 |
mov ebx, 1 |
mov ecx, _ind |
int 0x40 |
popa |
ret |
|
_ind db 'ooo', 0 |
|
_param: |
rb 256 |
|
_end: |
|
align 32 |
rb 2048 |
_stack: |
_memory: |