diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 93b3c01bf..6697d6e26 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -151,7 +151,8 @@ Возвращаемое значение: * если буфер пуст, возвращается eax=1 * если буфер непуст, то возвращается al=0, ah=код нажатой клавиши, - биты 16-23 содержат сканкод нажатой клавиши, + биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII, + в режме сканкодов биты обнулены. биты 23-31 обнулены * если есть "горячая клавиша", то возвращается al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш), diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index af863fe71..1d4660561 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -149,7 +149,8 @@ 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, - bits 16-23 = contain scancode for pressed key, + bits 16-23 = contain scancode for pressed key in ASCII mode, + in the scancodes mode this bits cleared. bits 23-31 = zero * if there is "hotkey", function returns al=2, ah=scancode of the pressed key (0 for control keys), diff --git a/kernel/trunk/hid/keyboard.inc b/kernel/trunk/hid/keyboard.inc index 829330d08..69201f278 100644 --- a/kernel/trunk/hid/keyboard.inc +++ b/kernel/trunk/hid/keyboard.inc @@ -492,7 +492,14 @@ send_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 + push ecx + cmp [keyboard_mode], 0; return from keymap + je @f + + xor ch, ch +@@: + mov [KEY_COUNT+eax], ch ; actually KEY_BUFF + EAX - 1 + pop ecx sub eax, 120+2 .exit.irq1: ret