Важная информация

User Tag List

Показано с 1 по 10 из 16

Тема: Вариант контроллера PS/2 для БК

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Member
    Регистрация
    29.01.2013
    Адрес
    Москва
    Сообщений
    50
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вариант контроллера PS/2 для БК


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

    История создания и описание


    Это эмулятор ВП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.
    [свернуть]

    Схема устройства



    Несмотря на кажущуюся сложность, все вполне паябельно МГТФом (с его зачисткой) за 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 (программа и ЕЕПРОМ (перекодировка ПС-БК), писать и то, и другое):
    PS2_BK_ATMEGA.zip
    Прошивка ЕПМ7064:
    ps2_cpld.zip
    Фьюзы АТМЕГИ:

    Некоторые узлы ПЛИС (может, помогут кому в дальнейших разработках):
    Узел задержки управляющих сигналов (SYNC_RES(ET) - импульс сброса защелок адреса после переднего фронта SYNCa):

    Узел управления векторного прерывания (одного, в ус-ве соединены последовательно для двух прерываний (4 и 60/274) - см.ниже):

    Общая схема для информации - остальные узлы стандартные, смысла приводить их нет:

    Проект закрыт, развития не будет.
    [свернуть]
    Последний раз редактировалось kisser81; 21.11.2016 в 10:30.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 13
    Последнее: 13.09.2018, 09:12
  2. Ответов: 30
    Последнее: 08.01.2017, 18:24
  3. Львовский вариант 48к
    от Smus в разделе Несортированное железо
    Ответов: 71
    Последнее: 14.04.2015, 21:12
  4. NK-DOS (вариант MS-DOS под TR-DOS)
    от Nomy Graphics в разделе Оси
    Ответов: 30
    Последнее: 03.09.2007, 16:59
  5. INT. Возможный вариант.
    от James DiGreze в разделе Несортированное железо
    Ответов: 0
    Последнее: 21.02.2006, 17:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •