PDA

Просмотр полной версии : PS/2 и RTC2 через порт клавиатуры



Denn
17.01.2019, 18:11
Доброго дня.

В данной теме вниманию общественности предлагаю вариант подключения к ПРК "Орион-128" альтернативных клавиатуры PS/2 и часов реального времени с СОЗУ на базе м/сх DS1307. Красота данного решения заключается в простоте и минимализме.
Оба устройства подключаются к существующему в любом Орионе самому главному порту #F4xx, параллельно штатной клавиатуре (или её эмуляции на МК). При этом функционал родной клавиатуры никак не нарушается, и она, в свою очередь, никак не влияет на работу подключенных новых устройств.

Принципиальная схема (v1.0):

http://denn.ru/8bit/orion/128/kbrd/ps2_rtc@kbrd.jpg


На схеме не указан чип RTC DS1307 с кварцевым резонатором и распиновка разъёма клавиатуры PS/2, на данном этапе отображена только идея коммутации.

Принцип работы. В штатном режиме, порт #F4xx настроен следующим образом: линии "А" на вывод, а линии "В" на ввод. Для сканирования штатной клавиатуры (формат РК86) применяется т.н. "бегущий нолик", т.е. выходы порта "А" принимают только следующие состояния:



0 1 1 1 1 1 1 1
1 0 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 1 0 1 1 1 1
1 1 1 1 0 1 1 1
1 1 1 1 1 0 1 1
1 1 1 1 1 1 0 1
1 1 1 1 1 1 1 0


Т.о. одновременно двух лог."0" на выходах порта "А" не бывает. Эта особенность и используется для организации четырёх виртуальных выходов для управления новыми устройствами через занятые линии. Пары соседних линий порта с помощью элементов "ИЛИ" объединяются в одиночные, образуя новые виртуальные выходы. Для управления новыми устройствами достаточно одновременно выставлять лог."0" на соответствующих парах порта #F400. После сеанса связи с новым устройством, выходы порта "А" возвращаются в изначальное состояние (по-умолчанию, FEh), и Орион готов к работе со штатной клавиатурой, а новые устройства в режиме паузы/сна.

Для приёма сигналов используются линии порта "В", которые, согласно схемотехнике РК'шной клавиатуры, подтянуты резисторами 2 ком к шине питания, т.о. на них сформирована лог."1", а для выставления лог."0" достаточно коммутировать на землю через транзисторный ключ или ЛЭ с ОК на выходе. В режиме "спячки" новые устройства не должны выставлять лог."0" на линиях порта "В".
RTC изначально удовлетворяет этим условиям, а вот с клавиатурой пришлось "похимичить", сделав работу с линией CLK в инверсной логике. Дело в том, что в обычном режиме клавиатура PS/2 может сама в произвольный момент (относительно работы процедуры сканирования штатной клавиатуры) выдавать данные, и т.о. может возникнуть коллизия. Поэтому клавиатура PS/2 принудительно переводится в режим ожидания прижиманием линии CLK к земле, и только во время её опроса линия будет освобождаться драйвером и производиться обработка байтовых посылок.

Пока разработка на стадии идеи, макетирование и написание ПО будет позже :)

Конструктивно девайс можно оформить в виде переходника между штатной клавиатурой Ориона и материнской платой или наМГТФить непосредственно на выводах порта ВВ55.

Error404
18.01.2019, 01:09
Игры лазающие в порт клавиатуры очень запросто могут выдавать одновременно несколько нулевых битов для сканирования одновременно нажатых клавиш, что теоретически может привести к нарушению работы дивайсов висящих на I2C на клавиатурном порту A. Может, использовать половинку порта С работающую на вывод? На ввод можно как и есть использвать порт "В". Даже если оставить вывод на магнитофон и светодиод Рус-ЛАТ (я например не использую ни тот ни другой), то остается 2 нигде не использующихся бита порта С. Если использовать их под SCL, то оставшиеся (магнитофон и светодиод Рус-ЛАТ) можно параллельно вывести на SDA 2х устройств I2C. Не будет использоваться доп. корпус ИЛИ, все развяжется на полдюжине диодов и резисторов.

Denn
18.01.2019, 12:47
Игры лазающие в порт клавиатуры очень запросто могут выдавать одновременно несколько нулевых битов для сканирования одновременно нажатых клавиш, что теоретически может привести к нарушению работы дивайсов висящих на I2C на клавиатурном порту A.

Мысль интересная. Очевидно там могут быть только проверки на стрелки, пробел и [ВК]. Надо будет проанализировать этот момент. Возможно придётся "раскидать" сигналы не по смежным битам.



Может, использовать половинку порта С работающую на вывод? На ввод можно как и есть использвать порт "В". Даже если оставить вывод на магнитофон и светодиод Рус-ЛАТ (я например не использую ни тот ни другой), то остается 2 нигде не использующихся бита порта С.

Не использующиеся в клавиатуре уже все задействованы! РС1 и РС2 использованы для переключения банков большого ROM-диска, SROM™ и ЭД™.

Также ампутировать магнитофон и светик РУС/ЛАТ никак нельзя, это ж святое! :) И, самое важное, оно поддержано в разнообразном орионовском ПО ;)

Error404
18.01.2019, 13:35
Мысль интересная. Очевидно там могут быть только проверки на стрелки, пробел и [ВК]. Надо будет проанализировать этот момент. Возможно придётся "раскидать" сигналы не по смежным битам.


Еще в адаптациях от Спектрума часто использовался "SINCLAIR-джойстик" - там их два: основной на клавишах 6, 7, 8, 9, 0 и дополнительный на 1, 2, 3, 4, 5.
В принципе если эти варианты учесть, то даже при переназначении клавиш можно назначать "неконфликтующие варианты". Остальное покажет практика: все способы опроса (зависящие от замороченности авторов кода опроса) заранее все равно не учесть.

Denn
18.01.2019, 13:59
Остальное покажет практика: все способы опроса (зависящие от замороченности авторов кода опроса) заранее все равно не учесть.

Практика показывает, что далее приглашения Монитора дело не доходит :)
А программированием под Орион нынче не занимаются, и вероятность того что будут, стремится к нулю.. ((

Stampmaker
18.01.2019, 14:28
А программированием под Орион нынче не занимаются, и вероятность того что будут, стремится к нулю.. ((

особенно написанием игр с обращением напрямую к порту клавиатуры


а вот, кстати, может кто в курсе, какие именно существующие для Ориона игры используют прямое обращение к клаве? сомневаюсь, что таковых много и что они капец какие интересные, что хочется в них играть снова и снова.

Error404
18.01.2019, 14:34
особенно написанием игр с обращением напрямую к порту клавиатуры


а вот, кстати, может кто в курсе, какие именно существующие для Ориона игры используют прямое обращение к клаве? сомневаюсь, что таковых много и что они капец какие интересные, что хочется в них играть снова и снова.

Из тех во что стоит играть это все адаптации со Спектрума - как под 8080 (DTE, SilentService, JetSet), так и под z80 (их сохранилось поболее - порядка 80 штук, там 100% прямой опрос клавы), а также подозреваю что и в некоторых оригинальных 8080 играх Ориона, например от LucksianKey (Kort, Almaz). Это навскидку из того что вспоминается, некоторые игры 8080 я вообще не запускал.

Собственно я и имел в виду под "практика покажет" - тупо в игрушки поиграть. :)

Denn
18.01.2019, 14:56
Собственно я и имел в виду под "практика покажет" - тупо в игрушки поиграть. :)

Мне кажется, в этом случае клиент не будет ставить альтернативные RTC и PS/2-клавиатуру, а соберёт "классику" и на этом успокоится.

Часы и "нормальная" клавиатура это всё же с прицелом на работу на Орионе, кмк..

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

Кстати, ни разу не встречал обсуждений орионовских игр и вообще какого-либо софта. Либо с ПО всем всё предельно ясно-понятно (в отличие от того же Спектрума и иже с ним), либо никто вообще ни разу не пользовался. Если второй вариант, то возникает вопрос: для чего вообще компьютер? Но это так, лирика..

Error404
18.01.2019, 15:05
Мне кажется, в этом случае клиент не будет ставить альтернативные RTC и PS/2-клавиатуру, а соберёт "классику" и на этом успокоится.
Часы и "нормальная" клавиатура это всё же с прицелом на работу на Орионе, кмк..


пожалуй так. Но все равно надо бы раскидать биты порта чтобы минимизировать ложные срабатывания.
я сам бывает лажу в порт клавиатуры мимо Монитора, причем сугубо в системных целях, но это в-основном лазание в порт С чтобы прочитать состояние управляющих клавиш, и только в одном месте такое непотребство позволяю себе - в драйвере консоли.



Кстати, ни разу не встречал обсуждений орионовских игр и вообще какого-либо софта. Либо с ПО всё предельно ясно-понятно, либо никто вообще ни разу не пользовался. Если второй вариант, то возникает вопрос: для чего вообще компьютер? Но это так, лирика..

Да, тоже сложилось такое мнение. Народ в-основном собирается любители попаять. Опять же желание поболтать на тему ПО наверное возникнет в том случае если начать что-то самому делать из ПО. В этом смысле жаль, что мало кто делает что-то хотя бы несложное из ПО. Ну или даже если любители паять, то для своих аппаратных самоделок что-то бы закодили (типа драйвера), уже было бы интересно обсудить.

Denn
18.01.2019, 15:26
я сам бывает лажу в порт клавиатуры мимо Монитора, причем сугубо в системных целях, но это в-основном лазание в порт С чтобы прочитать состояние управляющих клавиш

Не без этого :) По возможности стараюсь пользовать стандартное (например, сканирование клавы через F81Bh), но если требуемого функционала нет (опрос клавиш Ctrl, Shift, ALF), то приходится лазить в порт, иначе никак.



Опять же желание поболтать на тему ПО наверное возникнет в том случае если начать что-то самому делать из ПО.

А как же на Спектрумах? Там же далеко не все кодят, обсуждают как раз простые юзеры.



В этом смысле жаль, что мало кто делает что-то хотя бы несложное из ПО. Ну или даже если любители паять, то для своих аппаратных самоделок что-то бы закодили (типа драйвера), уже было бы интересно обсудить.

Была бы интересна хоть какая-то движуха. А так вообще не понятно зачем русские 8-битки, и ещё более не понятно зачем их сейчас собирают..

Denn
27.06.2019, 15:06
После детального изучения вопроса, а именно разбора Мониторных процедур опроса стандартной РК86-клавиатуры и некоторого мыслительного процесса по оптимизации, родилась вторая версия схемы подключения PS/2-клавиатуры и часов DS1307 "поверх" родной матрицы, а также добавился интерфейс для SDHC-карты:

http://denn.ru//8bit/orion/128/kbrd/ps2_rtc_sdhc+rk.jpg


В случае полного отказа от РК'шной клавиатуры, схема ощутимо упрощается:


http://denn.ru//8bit/orion/128/kbrd/ps2_rtc_sdhc@f4.jpg



Идеологически изменён узел обработки сигнала PS2_CLK. Дело в том, что процедуры Монитора сканирования матрицы оставляют линию порта A в состоянии 11111110 (FEh), т.е. младший бит установлен в "0". Это как раз можно использовать для "придавливания" клока к земле для блокировки передачи данных PS/2-клавиатурой, пока исполняется код вне процедуры её обслуживания (на Орионе мы работаем с клавиатурой не по прерываниям, как на писи, а по факту опроса). При этом линия PA4 выступает в роли гейта прохождения данных на вход порта PB0.
Принцип дешифрации сигналов управления новыми устройствами сохранён, но изменены некоторые линии порта A - выполнено перемежение т.о., чтобы сигналы не складывались из соседних битов.

К сожалению, подключиться непосредственно "поверх" реализации стандартной РК-клавиатуры на МК (от Caro), без доработки последней, не получится, т.к. выходы МК работают не в режиме ОК с подтяжкой к питанию, как это сделано в аппаратной реализации матрицы, т.о. завести внешние сигналы PBx напрямую не получится, придётся делать развязку на диодах/резисторах.


Часть схемы относящаяся к SDHC (ниже волнистой линии) - полностью самостоятельная, и может быть опущена. В варианте "поверх РК-матрицы" преобразование 5-вольтовых лог. уровней в 3,3-вольтовые делается неявно с помощью микросхемы серии 74AC (74HC), соответственно питание последней производится не от основного питания ПРК (5в), а берётся с выхода 3,3-вольтового преобразователя!
В отдельном варианте схемы преобразование уровней выполнено на пассивных элементах.

Error404
27.06.2019, 17:47
Прослеживается некоторое удобство оттого что схемы РК и питерской МС7007 (пришедший от РК) используют одинаково запрограммированный порт - подключение и драйвер этой периферии получается универсальным.
вот только в варианте МС7007 требует уточнения факт "процедуры Монитора сканирования матрицы оставляют линию порта A в состоянии 11111110 (FEh),"

И не понятно что имелось в виду под "В случае полного отказа от РК'шной клавиатуры".

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

Кстати, как отработает схема если вместо "бегущего нуля" туда пульнут все биты нулевыми (для проверки всех линий клавиатуры сразу)?

Denn
27.06.2019, 18:11
Прослеживается некоторое удобство оттого что схемы РК и питерской МС7007 (пришедший от РК) используют одинаково запрограммированный порт - подключение и драйвер этой периферии получается универсальным.

Увы, универсальности тут не получается. Матрица 7007-ой совсем иначе устроена, соответствий с РК86 никаких нет. Более того, управляющие клавиши также включены в матрицу, соответственно их состояние нельзя "нахаляву" прочитать из порта "С".



вот только в варианте МС7007 требует уточнения факт "процедуры Монитора сканирования матрицы оставляют линию порта A в состоянии 11111110 (FEh),"

В нашем случае важно состояние бита PA0. Но даже если он в "свободном полёте" окажется не "0", то всего лишь "поток сознания" от PS/2 клавиатуры не будет дожидаться её опроса. Такая ситуация может быть конфликтной в случае попыток одновременной работы на двух клавиатурах, что в реальности маловероятно, ибо бессмысленно. В остальном никаких проблем.



И не понятно что имелось в виду под "В случае полного отказа от РК'шной клавиатуры".

Имеется в виду использование Ориона с новым ПО онли. Т.е. подключение старой клавиатуры изначально не предполагается.



Кстати, как отработает схема если вместо "бегущего нуля" туда пульнут все биты нулевыми (для проверки всех линий клавиатуры сразу)?

Это нестрашная ситуация, она происходит каждый раз при аппаратном сбросе, в момент настройки порта ВВ55, который, как мы помним, имеет свойство при этом скидывать все выходные линии в "0". PS/2-клавиатура останется на "паузе", т.к. линия клока будет прижата к "0". Часы никак не среагируют на одновременное обнуление линий сигналов SCL и SDA. SDHC-карта без накачки клока (он заведён с отдельно линии PC3) никак реагировать не будет.