Задать вопрос
@nnGot583
c#, iOS дизассемблирование

Проблема с обработкой клавиатурных прерываний в QEMU?

здравствуйте, не получается обработать брейк коды при отпускании клавиш в QEMU.
Я узнал, что при нажатии на клавишу приходит одно прерывание со сканкодом а при отпускании последовательно два прерывания: сначала скан код 0xf0 а потом сканкод отпущенной клавиши.
Исходя из этого я написал такой код на C для обратки клавиатуры

int f0_was = 0;
int pressed_button = 0;
void KEYBOARD_HANDLER(interrupt_block* block)
{
    if(f0_was != 0)
    {
        f0_was = 0;
        pressed_button = 0;
        goto end;
    }
    
    int scan_code = 0;   
    asm(
        "push %%eax\n"
        "xor %%eax, %%eax\n"
        "in $0x60, %%al\n"                // принимаю сканкод
        "movl %%eax, -12(%%ebp)\n"
        "pop %%eax\n"
        :
        :
        :
    );

    if(scan_code == 0xf0) 
    {
        f0_was = 1; // "тут" я поставил брейкпоинт в надежде что когда отпущу любую клавишу попаду сюда
        goto end;
    }
    if(pressed_button != scan_code)
    {
        pressed_button = scan_code;
        SYMBOL_CONTROL(scan_code);
    }
    end:
}


Я до проверил набор сканкодов контроллера клавиатуры и получил от него 0x41 то есть 2 набор сканкодов. Но брейк коды видимо не приходят после отпускания.

Правильно ли я вообще понимаю как устроенны клавиатурные прерывания?
(Я не проводил каких либо настроек контроллера, может его стоит например перезапустить и заново задать набор?)
  • Вопрос задан
  • 30 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Правильно ли я вообще понимаю как устроенны клавиатурные прерывания?

Пишут такое:
In the default configuration, break codes are the make scan codes with the high bit set; make codes 60h,61h,70h, etc. are not available because the corresponding break codes conflict with prefix codes (code 2Ah is available because the self-test result code AAh is only sent on keyboard initialization). An alternate keyboard configuration can be enabled on AT and later systems with enhanced keyboards, in which break codes are the same as make codes, but prefixed with an F0h scan code.

т.е. понимаешь правильно, но это 1) настройка для альтернативной конфигурации и 2) бывают многобайтовые скан-коды (см. например).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы