Почему не работает клавиатура? Я пишу ОС на fasm, и столкнулся с проблемой: почему-то не работает прерывание 0х20 для клавиатуры, в дебагегре проверял значение ISR.keyboard.keycode, и он не менялся!Код на GitHub Отрывок из кода:.keyboard: pushad pushf cli mov dx, 0x60 in byte al, dx mov byte [0xB8000], al mov byte [.keycode], al inc dx in byte al, dx and al, 1 out byte dx, al popf popad iretd .keycode db ? ; Я даже индикатор к экрану вывел, но все равно ничего не происходит
Ваш код написан на языке fasm (flat assembler) и похоже, что проблема может быть связана с тем, что вы не правильно обрабатываете прерывание клавиатуры 0x20.
Первое, что нужно проверить, это правильность настройки обработчика прерываний. Убедитесь, что вы правильно установили обработчик прерывания 0x20 в таблице IDT (Interrupt Descriptor Table).
Также, не забудьте установить бит IF (interrupt flag) в регистре флагов, чтобы разрешить прерывания после выполнения вашего обработчика. В вашем коде я вижу, что вы используете cli и popf для управления флагами прерываний, но возможно, что что-то идет не так с их установкой.
Попробуйте также добавить проверку на код клавиши, чтобы убедиться, что действительно получаете данные от клавиатуры. Может быть, проблема не в обработке прерывания, а в самом вводе данных.
Если после всех этих действий проблема не устранится, возможно, стоит обратиться к документации по работе с клавиатурой и прерываниями в fasm, чтобы найти более детальные сведения о том, как правильно настроить обработку данных.
Ваш код написан на языке fasm (flat assembler) и похоже, что проблема может быть связана с тем, что вы не правильно обрабатываете прерывание клавиатуры 0x20.
Первое, что нужно проверить, это правильность настройки обработчика прерываний. Убедитесь, что вы правильно установили обработчик прерывания 0x20 в таблице IDT (Interrupt Descriptor Table).
Также, не забудьте установить бит IF (interrupt flag) в регистре флагов, чтобы разрешить прерывания после выполнения вашего обработчика. В вашем коде я вижу, что вы используете cli и popf для управления флагами прерываний, но возможно, что что-то идет не так с их установкой.
Попробуйте также добавить проверку на код клавиши, чтобы убедиться, что действительно получаете данные от клавиатуры. Может быть, проблема не в обработке прерывания, а в самом вводе данных.
Если после всех этих действий проблема не устранится, возможно, стоит обратиться к документации по работе с клавиатурой и прерываниями в fasm, чтобы найти более детальные сведения о том, как правильно настроить обработку данных.