Во, хорошая идея. Надо мне будет тоже маркированные pbs-ки припаять, чтоб "клавиши" замыкать было удобнее.
По вчерашним экспериментам у меня выводы такие:
1. Идея сделать все на двух больших кирпичах с разбегу не прокатывает. В Speccy2010 реализация ps/2 грамотная, но это так не везде. В большинстве случаев протокол ps/2 реализован обрезанным и между этими реализациями будут нестыковки. Может и удастся найти более-менее работающий вариант клавиатурного контроллера на атмеге, но он и для обычного спека работает на пределе быстродействия, а для турбо уже опять все будет мимо.
2. В целом идея использовать ps/2 как промежуточный протокол является компромиссом и с очень большой натяжкой, т.к. он предусматривает передачу "событий", то есть цепочек байт вида "клавиша нажата" и "клавиша отпущена". Это диффы к текущему состоянию клавиатуры, если хоть один из них будет каким-то образом потерян, то контроллер не будет адекватно отражать состояние клавиш. Косяк передачи по интерфейсу маловеротен, тут больше играет роль неуспевание его обработки и переписывание следующим байтом. Мне это напоминает MIDI-интерфейс и зависание звучания инструментов, если в передаче или обработке его событий есть потери.
3. Красивым вариантом обхода всего этого безобразия является использование некоторой схемы с регистром на все имеющиеся клавиши, которая "отражает" их спеку при опросе клавиатуры, и при этом состояние этого регистра постоянно рефрешится опросом актуальной матрицы. Есть такие решения для PS/2 у andykarpov
https://github.com/andykarpov/ps2_cpld_kbd
и leonid-z
https://github.com/leonid-z/zxkeyboard
В обоих случаях атмега получает клавишные события по интерфейсу ps/2, обновляет в своем массиве состояние нужных клавиш и постоянно ПОЛНОСТЬЮ передает его по SPI той самой схеме, которая реализована в CPLD. Это всего 6 байт (40 бит клавиши спека и еще один байт может передавать состояния специальных кнопок навроде ресета, мэджика, турбо и т п).
Только в нашем случае нет необходимости вообще как-то привязываться к PS/2, достаточно этой же атмегой опрашивать некую клавишную матрицу, по некоей таблице соответствия генерить массив состояний клавиш спека и передавать его в регистр CPLD.
Посмотрим, насколько мне хватит тямы что-то из этого сделать.
Две последних CPLD-реализации под завязку используют CPLD, первая - EPM7128, вторая - EPM3064. И судя по всему вдвое больше LE требуется более грамотной реализации SPI slave, а т к во втором случае она слишком лаконична и проста, то где-то должна быть подстава )
Собственно, у меня все равно сейчас для игрушек есть только EPM7064, поэтому начну со второго варианта. И с опроса атмегой какой-нибудь простой матрицы клавиш типа 4х4 для отладочной передачи по SPI. Потом можно будет на эту же атмегу поключить большую матрицу.
To be continued...

