PS2 клавиатура для старых самопальных компов

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

fifan wrote:...только запись в порт/чтение из порта ВВ55 длиться всего 500 нс - успеваем опрашивать PS/2, перкодировать коды клавиатуры, отправить их в порт?
А и не надо! Технология такая: есть 3 байта в ОЗУ, которые отражают текущее состояние порта A, B и C. Когда приходит чтение - тупо отдаем соответствующий байт. А вот когда идет запись, во время самой записи хватаем что есть на шине, делаем черное дело, и пишем байтики в ОЗУ где храниться состояние. PS/2 - полностью в фоне + использование таблиц для уменьшения действий вычислений. Вот так я это вижу. А между записю (любой, как по MOV так и по OUT) и последующим чтением полюбому 4-5 тактов целевой системы (он должен прочитать опкод чтения, ведь так?). А если взять Мегу и распедалить ее до 24МГц (есть у меня человечек, сказал что на его опыте из 10 Мег 8515, которые по идее 16МГц, 8 заработали стабильно на 24МГц, 1 подглючивала интерфейсом и одна не запустилась). Ну а ежели сразу взять быструю мегу? А частоты PS/2 настолько мелкие, что даже если сам опрос будет прерываться чтением/записью целевой системой и то он все успеет.
Caro wrote:
HardWareMan wrote:каково типичное время реагирования на прерывание у разных быстрых чипов (AVR/PIC/etc..)?
Порядка 4..5 тактов.
Т.е. если принять во внимание, что фактическое чтение (ширина строба чтения) всего 1 такт (это наихудший вариант, для ВМ80), то это будет в наихудшем варианте 3,5МГц = 285нс. Это время при 16МГц займет 0,286/(1/16)=4,5 такта. Мдэмс. Мега потратит их тока на реагирование, ниокаком полезном действии речи и быть не может. Нужен камень, что шустрее раза в три. 33МГц...
aviator
Maniac
Posts: 307
Joined: 10 Dec 2008 08:39
Location: Стокгольм, Швеция

Post by aviator »

Я вот что подумал:
1. Берем подходящую по быстродействию ПЛИС и реализуем на ней клавиатурный PS/2 порт, задача которого - настроить клавиатуру в нужный режим и регистрировать клавиатурные события.
2. Сформировать "виртуальную" битовую матрицу клавиатуры в ОЗУ ПЛИС так, чтобы при каждом клавиатурном событии бит, соответствующий клавиши переходил в состояние "нажата" и в состояние "отпущена".
3. На той же ПЛИС реализуем модель ВВ55 - порты, коды настройки и т.п., но при чтении/записи портов мы будем делать следующее:
a) считываем данные, которые послал нам ЦП,
б) берем нашу виртуальную матрицу и сигналы сканирования и логикой формируем сигнал отклика.
в) выставляем отклик в соответствующий "порт".

Вот. При этом для процессора клавиатура будет выглядеть как стандартная матрица.
С уважением, Сергей.
Caro
Fanat
Posts: 88
Joined: 21 Nov 2002 11:09
Location: E-burg/Russia

Post by Caro »

Вполне реально сделать контроллер клавиатуры для Специалиста на ATMega48, по той же схеме, что и для РК86.
Попробую, благо Специалист у меня есть. О результате расскажу :)
User avatar
fifan
Devil
Posts: 913
Joined: 06 Oct 2006 03:17
Location: г.Лянтор,Сургутского р-на,ХМАО

Post by fifan »

В моей схеме время от подачи сигналов на ПЛМ, декодирования номера строки/столбца, запроса ППЗУ, ответа номера столбца/строки и подачи готового номера нажатой клавиши приблизительно 42,8 * 2 нс = 85,6 нс = 0, 0856 мкс. Здесь еще нужно добавить время выборки из ППЗУ (под руками данных нет).
Когда писал программу я учитывал только опрос/ответ по схеме ( спасибо HardWareMan'у за разъяснения): PA+PC -> PB и PB -> PA+PC, а если происходит другая схема сканирования, то тут у меня пас...
User avatar
Lavr
Supreme God
Posts: 16710
Joined: 21 Oct 2009 08:08
Location: Россия

Re: PS2 клавиатура для старых самопальных компов

Post by Lavr »

Приподниму этот топик (ибо сегодня искал довольно долго) и перенесу сюда цитату по сабжу из топика Galaksija.
HardWareMan wrote:Ты не забывай, что вся трудность как раз не в эмуляции ВВ55, а в скорости выдачи данных. Напомню:
1. Цикл обращения в ВВ55. ВМ80 активирует строб примерно на 1-1,5 такта F2 (проверял осциллом, когда свой SVGA Spec делал). При условии, что у Специалиста F2=2МГц, и данные должны быть выданы до перехода 0=>1 на F2, то времени у нас от 500нс до 250нс. Не густо, если учесть что у AVR 1MIPS и он работает на 16МГц, то получается примерно 62,5нс на команду. Стало быть, в 250нс уместится всего 4 команды (в 500 8 соответственно, но мы учитываем наитяжелейший случай). А теперь вспомним время реакции на прерывание - кто-то тут говорил 4 такта (те самые 4 инструкции, не?). Выход: аппаратный слэйв порт (как у 8042) или более быстрый камень (ATXMega, например, или Cortex STM32, но тут вообще комбайн намутить можно).
2. Как происходит опрос ВВ55, в частности клавы? Выставляем 0 на матрицу и сразу же читаем ее. Итог: последовательность STA/LDA. Между фактическими обращениями всего 4 такта, правильно (цикл M1 от LDA). Так сколько времени на апдейт данных? Вывод: нужно заранее хранить все возможные данные от матрицы, чтобы тупо выдавать их по таблице лукапа. А это 2^12 ячеек на 6 бит (первый режим опроса) или 2^6 ячеек на 12 бит (второй вариант опроса), мы же все еще про спец говорим, правильно? Справедливо заметить, что клавиатура Ориона и РК в этом отношении максимально выгодна: всего 256 ячеек на каждый вариант.
Это 2 критических узла эмулятора клавиатуры на ВВ55. Все остальное время можно кушать данные с PS2, парсить их, строить таблички и т.д. и т.п.

PS Как жуткий вариант, можно использовать CS как запрос на прерывание, а потом тупо следить за битами RD/WR в однокомандном цикле (фактически 2 команды, т.к. 2 бита). Может проканать.
iLavr