Но во первых часть юзеров сидят на ZX-клаве, и юзать этот функционал в принципе не смогут.
Есть такое. Но сделать выбор драйвера в программе PS/2 или ZX-Keyboard - это можно. Для текстовых редакторов - очень и очень актуально.
В принципе - кому хочется работать с текстом - 200руб за PS/2 клаву отдадут спокойно. А кому не надо, только поиграться - так и доп клавиши не нужны особо.
Во вторых поток какбы не очень синхронизированная вещь, поэтому тут писатели так наговнокодят, что я подумать боюсь
Имеется ввиду работа с портом SCAN-кодов ?
Предлагаю самое простое решение - в контроллере - кольцевой буфер из, скажем, 16 байт.
Туда по кругу записываются коды нажатий (<0x80) и отпущенных (>0x80) клавиш.
Я в курсе, что не все клавиши имеют однобайтовый код, некоторые генерируют несколько байт. Но для удобства и простоты - надо присвоить всем доступным клавишам код от 0 до 126. 127 кодов - более, чем достаточно для PS/2 клавиатуры. То есть функции контроллера - перекодировка скан-кода клавиши в однобайтовый код 0-126 (соответственно - 128-254 при отпускании клавиш) и организация кольцевого буфера.
При считывании порта из программы на Z80 туда просто выплёвывается очередной код клавиши из буфера. Если буфер пуст - выплёвывается 0xFF.
Если буфер переполнен - и шут с ним, лишние коды игнорировать (ну как на PC).
Тогда с точки зрения программы на Z80 очистка буфера - считывать порт клавиатуры, пока не будет считан 0xFF.
Вопрос - хватит ли в AVR ресурсов на эту задумку или там уже всё забито под завязку ?
ЗЫ
Если будет сделана поддержка порта скан-кодов и/или доп. линий, то могу взять на себя написание драйвера клавиатуры под кодировку KOI8-R, например, и выложить исходники для всеобщего обозрения и уюзания. Какой-никакой, а вклад