/kernel/trunk/const.inc |
---|
205,7 → 205,7 |
WIN_TEMP_XY equ (OS_BASE+0x000F300) |
KEY_COUNT equ (OS_BASE+0x000F400) |
KEY_BUFF equ (OS_BASE+0x000F401) |
KEY_BUFF equ (OS_BASE+0x000F401) ; 120*2 + 2*2 = 244 bytes, actually 255 bytes |
BTN_COUNT equ (OS_BASE+0x000F500) |
BTN_BUFF equ (OS_BASE+0x000F501) |
/kernel/trunk/docs/sysfuncr.txt |
---|
151,7 → 151,8 |
Возвращаемое значение: |
* если буфер пуст, возвращается eax=1 |
* если буфер непуст, то возвращается al=0, ah=код нажатой клавиши, |
старшее слово регистра eax обнулено |
биты 16-23 содержат сканкод нажатой клавиши, |
биты 23-31 обнулены |
* если есть "горячая клавиша", то возвращается |
al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш), |
старшее слово регистра eax содержит состояние управляющих клавиш |
/kernel/trunk/docs/sysfuncs.txt |
---|
148,7 → 148,9 |
Returned value: |
* if the buffer is empty, function returns eax=1 |
* if the buffer is not empty, function returns al=0, |
ah=code of the pressed key, high word of eax is zero |
ah=code of the pressed key, |
bits 16-23 = contain scancode for pressed key, |
bits 23-31 = zero |
* if there is "hotkey", function returns al=2, |
ah=scancode of the pressed key (0 for control keys), |
high word of eax contains a status of control keys at the moment |
/kernel/trunk/gui/event.inc |
---|
454,7 → 454,11 |
cmp al, 120 |
jae .result ;overflow |
inc byte[KEY_COUNT] |
mov [KEY_COUNT+1+eax], dl |
mov [KEY_BUFF+eax], dl |
; store empty scancode |
add eax, 120+2 |
mov [KEY_BUFF+eax], byte 0 |
sub eax, 120+2 |
;-------------------------------------- |
align 4 |
.result: |
/kernel/trunk/hid/keyboard.inc |
---|
488,7 → 488,12 |
jae .exit.irq1 |
inc eax |
mov [KEY_COUNT], al |
mov [KEY_COUNT+eax], bl |
; store ascii or scancode |
mov [KEY_COUNT+eax], bl ; actually KEY_BUFF + EAX - 1 |
; store original scancode |
add eax, 120+2 |
mov [KEY_COUNT+eax], ch ; actually KEY_BUFF + EAX - 1 |
sub eax, 120+2 |
.exit.irq1: |
ret |
;--------------------------------------------------------------------- |
/kernel/trunk/kernel.asm |
---|
3129,8 → 3129,10 |
jne .finish |
cmp [KEY_COUNT], byte 0 |
je .finish |
movzx eax, byte [KEY_BUFF] |
movzx ax, byte [KEY_BUFF + 120 + 2] |
shl eax, 8 |
mov al, byte [KEY_BUFF] |
shl eax, 8 |
push eax |
dec byte [KEY_COUNT] |
and byte [KEY_COUNT], 127 |
3139,6 → 3141,9 |
mov eax, KEY_BUFF + 1 |
mov ebx, KEY_BUFF |
call memmove |
add eax, 120 + 2 |
add ebx, 120 + 2 |
call memmove |
pop eax |
;-------------------------------------- |
align 4 |