vak: (Знайка)
[personal profile] vak
Как в DOS происходит ввод с клавиатуры? Есть вызов Int 16h AH=00h, блокирующее чтение символа. Он возвращает в регистре AX два байта: код ASCII и сканкод. Как эти байты образуются и как они соответствуют нажатым клавишам? Я провёл тщательное исследование: написал програмулину и собрал данные с реального компьютера i486.

Когда вы нажимаете кнопку на клавиатуре, биос делает примерно следующее.
  • Если это модификатор, то есть левый-правый Shift или Ctrl ил и Alt или CapsLock или NumLock - обновляется статус. Новый символ не вводится. Иначе преобразуем введённую клавишу в ascii+сканкод, в зависимости от статуса модификаторов.
  • Если нажат Alt, делаем как здесь.
  • Иначе если нажат Ctrl, делаем как здесь.
  • Иначе если:
    • нажат Shift,
    • или включен CapsLock и клавиша - буква,
    • или включен NumLock и клавиша из дополнительной цифровой клавиатуры (с правой стороны)
    - делаем как здесь.
  • Иначе делаем как здесь.
Дополнительная хитрость: клавиша Insert переключает модификатор "Insert" при каждом нажатии. Если нет Alt или Ctrl. Впрочем, большинство досовских программ этот модификатор игнорируют.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org