libc/kbd: raw-клавиатура — вычерпывание FIFO + селективный wipe модификаторов

- kbd_raw_sync: цикл вычерпывания SIO FIFO (не 1 байт/прерывание) —
  фикс залипания клавиш; overrun-wipe сбрасывает только пострадавшие
  клавиши, не модификаторы (typematic их не перечитывает).
- Гайд docs/kbd-games.md; заметка о Rx-overrun в docs/TODO.md; справочник
  скан-кодов в docs/libc-reference.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-23 19:38:12 +03:00
parent 95c22be9bd
commit 3d586af031
5 changed files with 186 additions and 16 deletions
+12
View File
@@ -276,6 +276,18 @@ Quick wins:
CBL-хука для ЭТОГО прерывания — при движении мыши часть тиков,
которые должны были обслужить CBL-насос, уходят мимо, кольцо
недоливается. Нужно исследование (MAME-дамп/лог трамплина).
- [ ] **kbd_raw: частые Rx-overrun в MAME при тапах** (roomtest,
2026-07-22) — замеры watchpoint-счётчиками: при стабильном
удержании клавиши overrun'ов ноль, но каждый быстрый тап (5 байт:
E0 74 + E0 F0 74 при FIFO 3) даёт overrun. Подозрение: dev-MAME
не эмулирует прерывание SIO на каждый принятый байт (байты
вычерпываются только кадровым IRQ 50 Гц) и/или подаёт пачку без
реальных ~1 мс/байт — на железе per-byte INT должен делать
overrun'ы редкостью. Проверить mame/sources/MAME/src/mame/
sinclair/sprinter.cpp (путь байта клавиатуры → INT) и при
желании поправить dev-MAME. Recovery-политика уже терпима к
частым overrun'ам (селективный wipe, docs/kbd-games.md), но
аккорд «держу →, тапнул ↑» остаётся уязвим.
## Known quirks (зафиксированы, обходы в libc)