Продолжаю собирать ретро компьютер "ЮТ-88". В этой части хочу немного рассказать про историю подключения полноценной клавиатуры.
Собственной клавиатуры у этого компьютера не будет, а будет использоваться обычная IBM совместимая клавиатура с разъемом PS/2. Нашел у себя такую клавиатуру от старого компьютера, вернее компьютера уже нет, а вот клавиатура осталась:
На форуме нашел ссылку на прошивку микросхемы ATMEGA48, которая преобразует сигналы нажатий клавиш клавиатуры PS/2 в сигналы, понятные контроллеру КР580ВВ55 компьютера "ЮТ-88", вот часть схемы, отвечающая за работу клавиатуры:
У данной схемы доработано переключение русской и английской раскладки. С помощью триггера режим раскладки фиксируется и светодиод показывает в какой раскладке сейчас работает клавиатура.
С помощью программатора T48 прошил ATMEGA48, далее припаял разъем PS/2 и подключил к нему клавиатуру:
У этой платы имеется возможность установить два разъема PS/2 спереди и сзади, в зависимости от того, как удобнее будет подключать клавиатуру, я установил только спереди.
Ура! Клавиатура работает. В стартовом меню компьютера необходимо выбрать один из режимов работы. Эти режимы можно выбирать как на клавиатуре интерфейсного блока (рассказал про него в прошлой части), так и на большой клавиатуре, но в выбранном режиме будет работать только какая-то одна.
Тестировать клавиатуру буду в режиме "Монитор-F". Сразу стало понятно, что раскладка клавиатуры не совсем соответствует раскладке "ЮТ-88", связано это с особенностью наших ретро компьютеров. Например, буква "Q" в английской раскладке определяется правильно, а вот в русской раскладке она распознается как "Я", а не "Й". Взглянув на схему выше становится понятно, что физическое нажатие на клавишу имитирует соединение на микросхеме КР580ВВ55 соответствующих контактов не зависимо от раскладки, а соответствие букв на кнопке компьютера "ЮТ-88" не такое, как в IBM совместимой. Надо будет когда-нибудь сделать новые наклейки на клавиши.
Еще одна особенность - это переключение русской и английской раскладки, для этого используется "Caps Lock".
В целом реализация прошивки ATMEGA48 для подключения клавиатуры сделана очень даже хорошо, большое спасибо автору. Но выявил и некоторые проблемы: нет возможности ввести символы двоеточие и звездочку, также не работает цифра "4" на дополнительной клавиатуре. С цифрой "4" еще можно как-то смириться, а вот двоеточие и звездочка нужны. Пробовал нажимать клавиши в разных комбинациях, даже получалось через "Ctrl" рисовать псевдографику, но увы, двоеточия и звездочки нет. Начались долгие поиски в интернете решения этой проблемы, но либо у всех все работает правильно, либо никто не заморачивается с этой проблемой.
Забегая вперед хочу сказать, что компьютер не очень стабильным получился, вернее сам компьютер работает без нареканий, а вот всяких не работающих мелочей в нем много, проблема с клавиатурой одна из таких.
Ничего не остается, буду разбираться.
В интернете нашел ссылку на исходники прошивки контроллера подключения клавиатуры PS/2 к компьютеру "Радио-86РК". Как я понял эту прошивку переделывают под разные советские компьютеры.
В исходниках есть файл "table.asm", который мне и нужен. В этом файле содержится схема соответствия клавиш IBM совместимой клавиатуры и клавиатуры компьютера. На следующей фотографии я показал часть программы с таблицей соответствия:
Теперь я решил найти эту таблицу в прошивке к "ЮТ-88". Открыл ее в программе "Xgpro", которая используется программатором T-48, пролистал прошивку немного вниз и нашел область, которая очень похожа на таблицу соответствия:
Само соответствие начинается с ячейки с адресом 0000040E 27 27...:
В файле "table.asm" коды "27 27" соответствуют "KL_F1,Kl_F1", т.е. нажатию клавиши "F1":
Далее следуют коды "00 00" и они соответствуют "Kl_AP2,Kl_AP2" (клавиша "ESC"), далее "0E 0E", соответствующие "Kl_MNS,Kl_MNS" (Клавиша "-" на дополнительной клавиатуре) и т.д. Все коды идут парами, для чего это нужно я не стал разбираться, нет необходимости, просто надо про это помнить.
Теперь нужно понять что содержат сами коды. Для этого потребуется изучить схему самой клавиатуры "ЮТ-88":
Клавиатура состоит из вертикальных и горизонтальных контактов, на пересечении находятся кнопки. Контроллер ATMEGA48 эмулирует нажатие кнопок, вернее "замыкает" соответствующий горизонтальный и вертикальный контакт. Нумерация контактов начинается с нуля и идет слева направо или сверху вниз. Теперь нужно перевести номер колонки и номер строки в бинарный вид, обрезать до 3-х битов, склеить эти значения и получится значение кода, который нужно поместить в таблицу соответствия.
Начинаю сам процесс исправления. Клавиша двоеточия со звездочкой находится на пересечении 1-го столбца (с нуля) и 3-й строки. В бинарном виде это 001 (1) и 011 (3). Склеиваем и получаем код 001011, который соответствует значению "0B" в шестнадцатеричном представлении.
На клавиатуре я выбрал для двоеточия со звездочкой клавишу "|\":
Следующим этапом нашел в файле "table.asm" позицию для выбранной клавиши:
Отсчитал в самой прошивке позицию для определения кода этой клавиши, там содержатся "00 00":
Обратил внимание, что в следующих позициях как раз указаны значения "0B 0B". Автор явно планировал именно на эту клавишу повесить двоеточие и звездочку, но ошибся в позиции. Исправляю "00 00" на "0B 0B", а следующие два байта меняю на "FF FF", т.к. они не задействованы, как это указано в файле "table.asm":
Теперь нужно исправить клавишу "4" на дополнительной клавиатуре. Нахожу ее в "table.asm":
В прошивке отсчитал позицию для этой клавиши:
На схеме клавиатуры кнопка "4" на пересечении 0-го контакта по вертикали и 4-го контакта по горизонтали. Склеиваю код 000 и 100, получаю код 000100, который в шестнадцатеричном представлении "04". В соответствующем адресе прошивки подменяю "FF FF" на "04 04":
Исправленную прошивку загрузил в ATMEGA48, установил микросхему на место.
Тесты работы клавиатуры показали ее правильную работу. Теперь все работает как надо, но в последствии может быть еще внесу какие-нибудь исправления.
Продолжение следует...