Пустая панелька и кучка деталей вокруг нее не используются. Были нужны для отладки.
История создания и описание
Это эмулятор ВП1-14 и прилегающих регистров БК с использованием ПС/2 клавиатуры. Изначально планировался полноценный контроллер ПС/2, с двусторонним обменом с БК сканкодами, новым вектором прерывания, программным управлением фичами. Но в мелкую ЦПЛД оно не влезло, ставить большую – совсем не экономно, а дополнять плату еще 5-6 корпусами регистров – лень (надо заказывать ПП, а это опять не экономно). И, главное – нафиг оно никому не надо. В итоге получилась урезанная версия, однако, эмулирующая ВП1-14 и еще несколько сопутствующих битов АП БК.
Теоретически, доработать до полноценного контроллера можно, но вот нужно ли?
Основные элементы конструкции:
- АТМЕГА8, работающая на 16 МГц;
- CPLD на 64 макроячейки EPM7064SLC-10;
- 74LS27;
- кварц на 16 МГц и несколько дискретных элементов;
- два разъема ДИН-64
Основные задачи, решаемые устройством:
- клава БК, даже новая, ущербная и дребезжащая. Кроме того, после ПС-шной раскладки, работать на ней неудобно. Говорят, пленки и сами клавиши уже в дефиците. А кое-где исчезли и ВП1-14.
- существующая схема подключения ПС/2 клавы не предполагает замены ВП1-14, и обрабатывает «СТОП» через реле, что не очень здорово.
- это была единственная периферия БК, не смоделированная автором на новой элементной базе. Таким образом, кроме ВМ1, вся обвязка БК может быть выполнена на кЕтайских комплектующих.
[свернуть]
Технические характеристики
Со стороны ПС/2:
- сброс и инициализация клавы; двусторонний обмен с ней
- обработка всех поступающих сканкодов, в т.ч. такого ада, как Break и PrintScreen.
- возможность выбора переключения раскладки по ctrl-shift и alt-shift
- автоповтор при нажатой клавише
- зажигание светодиодов, куда ж без них )))
Со стороны БК:
- обработка клавиши «СТОП» двумя способами: выдачей вектора VIRQ 000004 и импульсом (подробнее – ниже)
- Эмуляция регистров ВП1-14: 177660 и 177662
- эмуляция бита 06 регистра 177716 (клавиша нажата) и 012го бита того же регистра – блокировка прерывания от «СТОП»)
- выдача векторов прерывания – 4, 60, 274
- перезагрузка БК по CTRL-ALT-DEL
[свернуть]
Соответствие клавиш БК – ПС
Esc – КТ
F1 – ПОВТ
F2 – -|->
F3 – |<--
F4 – |-->
F5 – ИНД СУ
F6 – БЛК РЕД
F7 – ШАГ
F8 – СБР
F9-F12 – ничего
Printscreen – ничего не происходит, но запрос обрабатывается.
Scroll Lock – ничего не происходит, но светодиодик зажигается и гаснет
Pause/Break – «СТОП»
CapsLock – он и есть капслок
Ctrl – СУ
Alt – АР2
Insert – хз что за клавиша, посылает код 13
Home – ВС
Page Up – хз что за клавиша, посылает код 16
Page Down – хз что за клавиша, посылает код 7
Delete – |<--
END – хз что за клавиша, посылает код 6
Numlock – перевод циферной клавиатуры в клаву управления, светодиод зажигается.
В режиме нумлок клавиши соответствуют тому, что на них нарисовано. Клавиша 5 – КТ.
CTRL-ALT-DELETE работает для любого DELETE – и отдельного, и на циферной клавиатуре. Нумлок не влияет.
WIN LEFT – РУС, с переключением раскладки клавы
WIN RIGHT – ЛАТ, с переключением раскладки клавы
В основном соответствует клавишам по эмулятору Калмыкова. Но некоторые, кажущиеся более логичными вещи – заменены
Теоретически, раскладка изменяема - в рамках записей таблицы перекодировки в ЕЕПРОМ. Но не все клавиши там прошиты, большинство управляющих клавиш обрабатываются программно и изменить их нельзя.
[свернуть]
Доработка БК
К сожалению, просто включить в МПИ и радоваться не получилось. Мысль была, что при нажатой клавише ШАГ, в регистре 662 будет 0, но при этом 0 будет и в бите 06 регистра 716. Это оказалось совсем не так. С регистром 716 проблем не было, а в 662 было рандомное число.
Вообщем, ВП1-14 придется отключить. Причем, одна из ВП1-14 срала на шину, даже при отключенном (и подтянутом к +5В) выводе 30 (CS). Посему, просто отсоедините вывод 42 ВП1-14 от +5В. Можете посадить его на выключатель.
Плохая новость в том, что без ВП1-14 БК не запустится. Для запуска необходимо подключить данное устройство (ну или обратно подключить ВП1-14).
Если у Вас нет ВП1-14, то и не надо. Убедитесь только, что резистор R4 (во всех БК он R4) запаян.
Следующая проблема – клавиша «СТОП». Эмуляция по VIRQ – это, конечно, здорово, но проблема в том, векторное прерывание – оно маскируемо и зачастую БК этим балуется. Например, при загрузке с магнитной ленты. Вероятно, при работе с дисководом тоже. Так что просто так Вы уже не выйдете. Если не охота дорабатывать, и кнопка «СТОП» есть на основной клаве (без ВП1-14 она работает), можете пользоваться ей. Если хочется аутентичности при работе с ПС/2 клавой, необходимо вывод 1 D1.1 (ЛН1) БК соединить со свободным выводом МПИ, а со стороны устройства к этому же выводу присоединить вывод 16 АТМЕГи. Таким образом контроллер будет посылать короткий импульс на вход Д1.1, имитируя нажатие клавиши «СТОП». По-другому никак – ни HALT, ни его засинхронизированная на CLC версия на МПИ не выведены.
При этом нужно выбрать режим работы контроллера перемычкой (проверяется при включении, менять в процессе работы нельзя)
Также перемычкой на тех же условиях выбирается способ переключения раскладки CTRL-SHIFT или ALT-SHIFT.
[свернуть]
Схема устройства
Известные косяки
Все основные косяки связаны с особенностями архитектуры БК и/или его ПО.
- клавиша "/"/"|" (в русской раскладке ПС "") - при переводе в "РУС" БК выдает букву Э. Это связано с особенностью драйвера БК, который код слеша в русском режиме не воспринимает. А локально переводить из рус в лат и потом обратно - слишком много чести. Прямой слэш всегда есть в английской раскладке )))
- если программа БК не обрабатывает ЛАТ/РУС, а Вы переключили раскладку (например, в мониторе БК11), Вы получите английскую раскладку БК ))) Лечится обратным переводом раскладки. В БК ВП1-14 передает всего 128 кодов, а остальное делает драйвер. Контроллер клавы же переключает раскладку внутри себя каждый раз, он не знает, что там на стороне БК и знать не может.
- косяк с таймингами шины. Из-за того, что разные процессоры и разные платы показали разное время задержки СИНКа и ДИНа, пришлось сделать переключатель таймингов и вывести их наружу. Подбирать экспериментально на конкретном экземпляре БК. На БК-10 с 3 МГц у меня пошло при TIM0 – замкнут, TIM1 – рамкнут. На БК-11 с 4 МГц и на ней же с 6 МГц - TIM0 – замкнут, TIM1 – замкнут. Но, чую, что дело не в частотах, а в конкретной плате и процессоре. Возможно, БК при неправильных таймингах не будет даже запускаться (но врядли). Как проверить – запустить в бейсике программу:
10 ? oct$(PEEK(&O177662))
20 goto 10
И нажимать на клавиши – должны высвечиваться коды клавиш. Если будет выдавать ошибку – это не Ваши тайминги, возьмите другие (всего 4 варианта и есть). Проверить в течение нескольких минут для уверенности.
Заодно проверить и 177716:
10 ? oct$(PEEK(&O177716))
20 goto 10
При нажатии и отпускании любой буквенной клавиши значение должно меняться.
Еще можно проверить в играх, и вообще по работе подобрать наиболее удачный вариант. Тайминги можно менять при включенной БК и работающих программах. Учитываем, что замкнуто – 0, разомкнуто – 1. 0(TIM1)0(TIM0) – самоe быстрое, для 6 МГц, и далее – по убывающей. 01 – типа 4 МГц (хотя на 4х и при 00 работало), 10 – 3 МГц, 11 – предположим, 2 МГц. Если работает – оставляйте. Лучше не будет, не пытайтесь. Это, значит, именно Ваш.
- поскольку реализован запрет прерывания от «СТОПа», как в БК11(М) (которого нет в БК-10), при работе через вектор 000004, при операциях с 012м битом регистра 177716 возможно отключение прерывания по СТОП. Лечение – или пользуйтесь режимом импульса, или не лазьте в этот бит )))
Косяки с пс/2 клавами.
Несмотря на то, что устройство обеспечивает принудительную инициализацию клавиатуры, даже если она не ответила с первого раза, не все клавиатуры смогли запуститься с ним.
Были проверены:
Genius KB220e (разъем ПС/2) - совместима
Logitech (разъем УСБ) – не запустилась
Genius KB06X (разъем ПС/2) – пустилась, работала, но не мигала светодиодами. Однако с ПС она тоже вела себя странно, есть подозрение на неисправность самой клавиатуры.
[свернуть]
Варианты поставки
Исходников не будет.
Прошивка для АТмеги8 (программа и ЕЕПРОМ (перекодировка ПС-БК), писать и то, и другое):
PS2_BK_ATMEGA.zip
Прошивка ЕПМ7064:
ps2_cpld.zip
Фьюзы АТМЕГИ:
Некоторые узлы ПЛИС (может, помогут кому в дальнейших разработках):
Узел задержки управляющих сигналов (SYNC_RES(ET) - импульс сброса защелок адреса после переднего фронта SYNCa):
Узел управления векторного прерывания (одного, в ус-ве соединены последовательно для двух прерываний (4 и 60/274) - см.ниже):
Общая схема для информации - остальные узлы стандартные, смысла приводить их нет:
Проект закрыт, развития не будет.
[свернуть]