Function 2 (get the code of the pressed key) for AL = 0 in EAX bits 16-23 = contain scancode for pressed key

git-svn-id: svn://kolibrios.org@4588 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2014-02-25 01:03:37 +00:00
parent 15fd6b2c81
commit ce96116465
6 changed files with 23 additions and 6 deletions

View File

@ -205,7 +205,7 @@ FDD_BUFF equ (OS_BASE+0x000D000) ;512
WIN_TEMP_XY equ (OS_BASE+0x000F300) WIN_TEMP_XY equ (OS_BASE+0x000F300)
KEY_COUNT equ (OS_BASE+0x000F400) 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_COUNT equ (OS_BASE+0x000F500)
BTN_BUFF equ (OS_BASE+0x000F501) BTN_BUFF equ (OS_BASE+0x000F501)

View File

@ -151,7 +151,8 @@
Возвращаемое значение: Возвращаемое значение:
* если буфер пуст, возвращается eax=1 * если буфер пуст, возвращается eax=1
* если буфер непуст, то возвращается al=0, ah=код нажатой клавиши, * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
старшее слово регистра eax обнулено биты 16-23 содержат сканкод нажатой клавиши,
биты 23-31 обнулены
* если есть "горячая клавиша", то возвращается * если есть "горячая клавиша", то возвращается
al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш), al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
старшее слово регистра eax содержит состояние управляющих клавиш старшее слово регистра eax содержит состояние управляющих клавиш

View File

@ -148,7 +148,9 @@ Parameters:
Returned value: Returned value:
* if the buffer is empty, function returns eax=1 * if the buffer is empty, function returns eax=1
* if the buffer is not empty, function returns al=0, * 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, * if there is "hotkey", function returns al=2,
ah=scancode of the pressed key (0 for control keys), ah=scancode of the pressed key (0 for control keys),
high word of eax contains a status of control keys at the moment high word of eax contains a status of control keys at the moment

View File

@ -454,7 +454,11 @@ align 4
cmp al, 120 cmp al, 120
jae .result ;overflow jae .result ;overflow
inc byte[KEY_COUNT] 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 align 4
.result: .result:

View File

@ -488,7 +488,12 @@ send_scancode:
jae .exit.irq1 jae .exit.irq1
inc eax inc eax
mov [KEY_COUNT], al 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: .exit.irq1:
ret ret
;--------------------------------------------------------------------- ;---------------------------------------------------------------------

View File

@ -3129,7 +3129,9 @@ sys_getkey:
jne .finish jne .finish
cmp [KEY_COUNT], byte 0 cmp [KEY_COUNT], byte 0
je .finish 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 shl eax, 8
push eax push eax
dec byte [KEY_COUNT] dec byte [KEY_COUNT]
@ -3139,6 +3141,9 @@ sys_getkey:
mov eax, KEY_BUFF + 1 mov eax, KEY_BUFF + 1
mov ebx, KEY_BUFF mov ebx, KEY_BUFF
call memmove call memmove
add eax, 120 + 2
add ebx, 120 + 2
call memmove
pop eax pop eax
;-------------------------------------- ;--------------------------------------
align 4 align 4