PDA

Просмотр полной версии : Вариант контроллера PS/2 для БК



kisser81
21.09.2016, 23:03
http://s45.radikal.ru/i108/1609/dd/4248ce7d19b8.jpg
Пустая панелька и кучка деталей вокруг нее не используются. Были нужны для отладки.

Это эмулятор ВП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.


http://s16.radikal.ru/i191/1609/91/ef7743b67b07t.jpg (http://radikal.ru/big/5ngf5td0r82id)
Несмотря на кажущуюся сложность, все вполне паябельно МГТФом (с его зачисткой) за 1 вечер, если делать один разъем МПИ. Если делать елку и 2 – то за 2 вечера. Главное не запутаться в выводах ПЛИС и МПИ.


Все основные косяки связаны с особенностями архитектуры БК и/или его ПО.
- клавиша "/"/"|" (в русской раскладке ПС "") - при переводе в "РУС" БК выдает букву Э. Это связано с особенностью драйвера БК, который код слеша в русском режиме не воспринимает. А локально переводить из рус в лат и потом обратно - слишком много чести. Прямой слэш всегда есть в английской раскладке )))
- если программа БК не обрабатывает ЛАТ/РУС, а Вы переключили раскладку (например, в мониторе БК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 (программа и ЕЕПРОМ (перекодировка ПС-БК), писать и то, и другое):
58764
Прошивка ЕПМ7064:
58765
Фьюзы АТМЕГИ:
http://s019.radikal.ru/i626/1611/b9/6f4fceb8915ft.jpg (http://radikal.ru/big/34yeixi9suksa)
Некоторые узлы ПЛИС (может, помогут кому в дальнейших разработках):
Узел задержки управляющих сигналов (SYNC_RES(ET) - импульс сброса защелок адреса после переднего фронта SYNCa):
http://s019.radikal.ru/i639/1611/c5/e10b919f034dt.jpg (http://radikal.ru/big/hmnofkmp4bw89)
Узел управления векторного прерывания (одного, в ус-ве соединены последовательно для двух прерываний (4 и 60/274) - см.ниже):
http://s017.radikal.ru/i444/1611/df/d4f21fe33de0t.jpg (http://radikal.ru/big/hfplqped4fil4)
Общая схема для информации - остальные узлы стандартные, смысла приводить их нет:
http://s015.radikal.ru/i330/1611/c3/87c79f6532d2t.jpg (http://radikal.ru/big/u1enoe6y2w0f3)
Проект закрыт, развития не будет.

Vslav
22.09.2016, 00:08
> Учитывая крайне сильную заинтересованность народа
А разве есть сильная заинтересованность? У меня сейчас челнок плат готовится в производство, я хотел туда платку аналогичного проекта на STM32+EPM3032 - делает точно то же самое, но с USB клавой и в формате замены самой 014-ой - садится на ее место. А раз такой проект появился уже готовый, то задумался, стОит ли мне изготавливать платку под мой.

MM
22.09.2016, 01:45
1. Звонок на МПИ БК - он вовсе не меньше, чем на др. ДПП с 1801/1806 сериями, т.е. Ч_У_Д_О_В_И_Щ_Н_Ы_Й. Например, SYNC на БК0011/М имеет отрицательную иголку единицы нс - т.е., если кратко - от Б22 до входа в новодел - резистор МЛТ-0.125 200 ом, далее конденсатор КМ5А 51 пф ( не менее )на общий, - далее - стандартное обрабатывание сигнала SYNC в соответствии с ГОСТ( для пассивного устройства ). Внутри БИС 1801-й серии с входом "SYNC" используются конструктивные особенности структур для реализации аналогичной цепочки ( черепашье быстродействие ).
В самой БК0011М применяется цепочка из R66 100 ом и С51 330 пф .
2. Если ВП1-014 при установленном фиксированном "+5в." на выв.30 "CS" срет на МПИ по своим рабочим битам ( особенно в БК0010 , в БК0011-там немного навеса есть на эти адреса )- то ВП1-014 - безусловно под замену. Рекомендуемый способ отключения ВП1-014-- в разрез выв. 30 и др.элементов конструктива М-ЭВМ установить резистор МЛТ-0.125 2 ком, и проволоку от выв. 30 ВП1-014 вывести на свободный контакт разъема МПИ. Для отключения ВП1-014 на этот контакт разъема МПИ достаточно подать сигнал +5в. 10 ма. Подавать "+5 в." следует до прихода цикла SYNC. Аналогичным образом можно поступить и с сигналом нажатия клавиши - для БК0011М это выв. 07 Д2.5 561ПУ4 - трек до него перерезается, в разрез монтируется резистор МЛТ-0.125 ~10 ком. Проволоку от выв.07 561ПУ4 так же протягивают на свободный контакт разъема МПИ. При работе от внешнего блока PS/2 блок должен сам выставлять уровни на эту проволоку, при отключении блока PS/2 - освобождатьэту проволоку от сигналов "0в." и "+5в." 9 (3-е состояние ). По клавише "Стоп"- просто вывести в блок PS/2 эту линию от 1801ВМ1- кнопка бывет полезна вне зависимости от фантазий программера (т.е. как на БК0010 ). Для БК0011М - это выв. 01 ДД1 555ЛН1. Подавать импульсы длительностью менее 1 цикла SYNC - в районе ~1 мкс.
3. Думается, для придания большей привлекательности тиражному новоделу блока "PS/2" его надо оформить в виде плока Бейсика для БК0011/М,с оставлением 1 шт. колодки РС24-7 под нужды пользователя и установления 1 шт. разъема PS/2. Дополнительные сигналы с ДПП БК подать через доп. разъем типа ОНП-КГ-56-10 ( сигналы DOUT, INIT, VIRQ, IAKI, IAKO, Press, Halt, CSWP014, 0v). Следует так же проработать вариант работы БК при отключении новодела со своей стандартной клавой на ВП1-014 ( в части внешнего VIRQ ).
4. Пожелание пользователей. Нельзя ли сделать программу-конфигуратор кодов клавиш - что бы пользователь сам мог настроить код каждой кнопки при соотвествующих режимах ? Основные вызовы в таком конфигараторе следует использовать от БК0010 ( 1801РЕ2-017 ) .
Ну и как максимум - переключаемые раскладки...

OrionExt
22.09.2016, 02:42
Вот, похоже, без ПЛИС не как не обойтись. Та же фигня.

- - - Добавлено - - -

Схему не видать. Очков для нашего форума не купил. Продают?)

kisser81
22.09.2016, 10:09
>стОит ли мне изготавливать платку под мой
Vslav, если в предложении нет смайлов, не значит, что в нем нет сарказма. Надеюсь, я сохранил кучу времени разработчикам (для) БК и показал примерный объем рынка ))))

Ч_У_Д_О_В_И_Щ_Н_Ы_Й
ММ, упор был на минимальные переделки БК, даже за счет усложнения самого устройства. И никаких аналоговых вставок в цифровые цепи. Отключить ВП1-14 оказалось проще всего по питанию. В таком режиме на выводе 20 благодаря R4 устанавливается высокий уровень, который транслируется на АП2. А уже в устройстве отдельно устанавливается бит 06, и АП2 не мешает, т.к. ОК.
Никаких доработок не будет, а уж тем более - тиража (см. выше). Клава ПС/2 подключена - и достаточно. Если Vslav подключит USB - то вопрос с клавами будет решен на всю оставшуюся БКшную жизнь.

похоже, без ПЛИС не как не обойтись
Ну почему же - если завести SYNC на прерывание STM32 72МГц, то, вероятно, он сможет обрабатывать БКшные транзакции. Цепь трансляции Iaki-Iako еще требуется, но там и прерываний порядочно

Схему не видать
Кто ж знал, что даже файл во вложении будет откорректирован? У меня не такой большой опыт публикаций здесь. Заменил на внешнюю ссылку.

svinka
22.09.2016, 20:45
1. стандартное обрабатывание сигнала SYNC в соответствии с ГОСТ( для пассивного устройства ).
Здесь пожалуйста поподробней. Мне ли одному кажется, что в ГОСТе на эту тему - ошибка

MM
22.09.2016, 22:13
Здесь пожалуйста поподробней. Мне ли одному кажется, что в ГОСТе на эту тему - ошибка
http://www.forum.pk-fpga.ru/viewtopic.php?f=20&t=5425&sid=d1b4cd3fcb0b3cf9b0824a5fd899da42
( IE8 что-то не позволяет просмотреть это пост, в отличии от состояния форума ПК-ФПГА на 2015 год ).
На МПИ имеет место огромные перекрестные помехи ( "звон" ), заметные только счастливым обладателям многоканальных осликов с частотой дискретизации от 1 ггц/канал. Впрочем, на аналоговые ослы от 200 честных мегагерц ( полосы пропускания ) тоже заметны, но видятся как "незначительные возмущения" ).
*
Если не сложно, пожалуйста, приведите цитату ( лучше - скриншот ) участка ГОСТ МПИ с ошибкой. К-во разрядов адреса за ошибку не считать.

svinka
22.09.2016, 23:06
3.4.4 Сигнал ОБМ на линии "Синхронизация обмена" вырабатывается ведущим. Передний фронт этого сигнала служит признаком выдачи адреса на шину обмена информацией. Сигнал ОБМ сохраняет активный уровень до окончания текущего цикла обращения к магистрали.

выделил

MM
22.09.2016, 23:42
3.4.4 Сигнал ОБМ на линии "Синхронизация обмена" вырабатывается ведущим. Передний фронт этого сигнала служит признаком выдачи адреса на шину обмена информацией. Сигнал ОБМ сохраняет активный уровень до окончания текущего цикла обращения к магистрали.

выделил
Предположим, сигнал ОБМ из цитаты эквивалентен сигналу СИА из ТО МС1201.03 :
http://storage1.static.itmages.ru/i/16/0922/h_1474576922_8210330_51d4054805.jpg (http://itmages.ru/image/view/4924770/51d40548)

Не будет ли возможности выделить на диаграмме сомнительный участок ?

svinka
22.09.2016, 23:53
да очень просто. На диаграмме пассивного устройства до перехода СИА в низкий уровень на шине ДА адрес уже как 75нс готовенький. Более того, этот переход СИА в низкий -признак того что адрес очень быстро уберут (25нс). 75нс - это после успокоения всех звонов, кстати.

Правильно, по-моему, так (для ОБМ в ГОСТ):

Низкий уровень этого сигнала служит признаком выдачи адреса на шину обмена информацией

gid
23.09.2016, 10:04
Низкий уровень этого сигнала служит признаком выдачи адреса на шину обмена информацией
Вот это как раз неправильно.
Адрес фиксируется принимающими устройствами стробом СИА единожды. Иначе, как узнать при держащемся низком уровне сигнала, какие данные на шине АД истинные, какие из них адрес, какие - данные, и когда их фиксировать, чтобы обработать?
В ГОСТЕ нет ошибок, там просто написано таким наукообразным языком, что не сразу понятно, что они хотели сказать, особенно в современное время, когда образ мышления другой. Я обычно смысл написанного по диаграммам, там же приведённым, уточняю.

svinka
23.09.2016, 16:14
1. Чтобы знать в какой фазе находится шина (в фазе передачи адреса или в фазе передачи данных) служит уровень сигнал СИА
2. Существуют специальный тип триггеров которые называются защелки (latch). Работают по уровню. Термин "защелка адреса" часто встречается. Пример - микросхема КР580ИР82. Можно и нужно фиксировать адрес по уровню
3. А всегда ли Вам нужен адрес? Или Вам нужен сигнал что это Ваш адрес? В какой момент вы его формируете? В адресной фазе шины?
4. Инженеры того времени предполагали,что сначала адрес нужно обработать, а потом фиксировать сигнал, что вы в диапазоне.

MM
23.09.2016, 17:35
...
4. Инженеры того времени предполагали,что сначала адрес нужно обработать, а потом фиксировать сигнал, что вы в диапазоне.
Да, так точно . Сам Преснухин так велел !
Но, если есть задача сделать крайнюю минимизацию Э3, можно использовать Д-триггера с динамической синхронизацией и асинхронным сбросом ( 533ТМ9 и т.п. ), и сначала фиксировать Весь адрес на МПИ, а потом логикой/ППЗУ декодировать нужные диапазоны/ячейки. При этом абсолютно обязательно при окончании цикла SYNC сбросить контент группы триггеров. Такое решени применяется в т.ч. при использовании малопотребляющих ИС типа 564/561 ( что вообще-то не рекомендуется - их быстродействия может совсем не хватить ).
Пример - участок Э3 селектора адресов IDE/USB в "мультикарте БК".

svinka
24.09.2016, 22:50
сначала фиксировать Весь адрес на МПИ
Если нужен доступ к отдельным регистрам ввода/вывода устройств, то можно и не фиксировать. Еще есть микросхемы контроллеров, которые сами фиксируют.
Нужно фиксировать лишь младшие разряды адреса и потом их дешифрировать или сначала дешифрировать младшие разряды адреса а фиксировать лишь нужные сигналы обращения к регистрам.

А схему в нормальном масштабе как посмотреть?

MM
25.09.2016, 02:48
Если нужен доступ к ...
А схему в нормальном масштабе как посмотреть?
Схема мультикарты БК :
http://i011.radikal.ru/1309/02/718748f7fb22.jpg
Это всё, что прислал разработчик. При осмотре на экране щелкните неправильной кнопкой мыши и из меню выберите "сохранить изображение"- оно будет сохранено с хорошим разрешением. Если нужен 2-й лист Э3 - он в теме о мультикарте с хорошим разрешением ( там мало ИС ).
Если не получается загрузить изображение - пишите мне на почту MMTEMA@MAIL.RU - вышлю почтой JPEG.

kisser81
21.11.2016, 10:31
В шапке выложены прошивки контроллера и ПЛИС (раздел варианты поставки)