Здравствуйте!
Да, вы правильно уловили логику работы клавиатурных прерываний и сканкодов. В общем случае, при нажатии клавиши вам отправляется сканкод нажатой клавиши, а при отпускании - сначала сканкод `0xF0` (который указывает на отпускание клавиши), а затем сам сканкод отпущенной клавиши.
Если в вашем случае после отпускания клавиши не приходит ожидаемый брейк-код (сканкод отпущенной клавиши) или грамотно не распознаются все коды, это может быть вызвано несколькими факторами:
1. **Состояние контроллера клавиатуры**: Возможно, контроллер клавиатуры нужно настроить или сбросить. Проверьте, правильно ли установлены режимы работы контроллера, который обрабатывает клавиатурные прерывания.
2. **Проблемы аппаратного обеспечения или виртуализации**: Иногда в средах виртуализации, таких как QEMU, могут возникать проблемы с эмуляцией определенных устройств. Убедитесь, что используемая вами версия QEMU поддерживает правильную эмуляцию контроллера клавиатуры.
3. **Обработка прерываний**: Убедитесь, что ваш код правильно обрабатывает все входящие прерывания. Возможно, вам стоит реализовать специальную логику для игнорирования или корректной обработки кодов `0xF0`.
4. **Настройки BIOS/UEFI**: В редких случаях некоторые настройки BIOS/UEFI могут влиять на работу клавиатуры. Иногда стоит проверить настройки виртуальной машины на предмет поддержки клавиатурных функций.
5. **Документация и примеры**: Посмотрите на документацию QEMU и примеры, которые могут проиллюстрировать, как именно они работают с клавиатурными входами и прерываниями.
Если после всех ваших проверок проблемы сохраняются, возможно, стоит обратиться к сообществу QEMU или разработчикам, чтобы получить помощь в диагностике неполадки.