Наверное у каждого спектрумиста есть в запасах какая-нибудь компактная и удобная клавиатура от ноута или еще чего мобильного, которую бы он хотел видеть на своем спеке, но обычно такие идеи отпадают, если клавиатура пленочная и не может работать в формате PS/2...
А начиналось все здесь. Бравый форумчанин CLR опубликовал решение для переделки любой клавиатуры в формат PS/2, и это отличное решение, но были сложности: большинству Спеков нужно не PS/2, а простую матрицу 5х8 - это раз; надо было как-то выяснять конфигурацию клавиатурной матрицы - это два. Да и сама реализация PS/2 в простых контроллерах, которые работают с PCшной клавой, далека от стандарта - и в этом случае это приводило к "несовместимым диалектам формата PS/2" )
Когда случились новогодние каникулы, я начал призадумываться над тем, как это реализовать иначе.
Учтя все идеи и обсуждения вышеупомянутой ветки, где я немало намусорил (сорри), было получено вот такое решение:
https://github.com/valerium-labs/zx-unikeyboard
За основу взята разработка andykarpov для клавиатурного контроллера на AVR+CPLD, только AVR получает данные не с PS/2, а с нашей ноутбучной матрицы, а в CPLD реализован регистр состояния клавиш и спецкнопок Спека, который Спек может опрашивать как свою штатную клавиатуру (и если кратко - то да, без /WAIT).
Ног надо было побольше, поэтому экспериментировал на ATMega32 для чтения матрицы, а CPLD-часть хоть и удалось упростить, но ПЛИС осталась та же (7128 или 3128). Сейчас поддерживаются клавиатуры до 26 пин.
Как предлагал Eltaron, реализована идея обучаемости схемы. То есть изначально в атмегу заливается обучающая прошивка (она же известна как "тестовая"), которая через компорт при помощи "специальной программы" (скриптик на autoit3) транслирует номера линий нажатых клавиш. Когда опрошена вся клавиатура и получены для каждого клавишного имени ее матричные координаты, строится описание массива клавиш, которое затем компилируется вместе с исходником "рабочей" прошивки. С ней контроллер уже используется на Спеке.
Как это использовать - более подробно изложено в доках проекта, например в этом
Сейчас реализовано на макетке на atmega32-16au и epm7128slc84, но плату развел и заказал под epm3128atc100, жду доставку, поэтому боевой вариант еще не обкатан.
Отлаживал на клавиатуре Asus X200, сейчас добыл еще клавиатуру от Asus X551 на 24 пина, 102-клавишная. На адаптацию такой клавиатуры с нуля уходит минут 10-15, причем бОльшую часть времени занимает составление клавиатурного шаблона с именами клавиш (разумеется, я делал это только единожды). Шаблон можно теперь и не писать в нуля, а взять за основу имеющийся - чтоб попасть в имена клавиш и почти не править исходник рабочей прошивки.
Ну и вот как это сейчас выглядит:
Программа "обучения"
Макет на Спеке.