Бытовой ретро-компьютер своими руками http://forum.pk-fpga.ru:443/ |
|
Цифровая археология 1801: одноклавишный 014 http://forum.pk-fpga.ru:443/viewtopic.php?f=43&t=5550 |
Страница 1 из 1 |
Автор: | Vslav [ 28 июн 2014, 16:47 ] | |||||||||||||||||||||||||||
Заголовок сообщения: | Цифровая археология 1801: одноклавишный 014 | |||||||||||||||||||||||||||
Микросхема 1801ВП1-014 представляет собой контроллер клавиатуры с интерфейсом МПИ. Из широкоизвестных изделий применялся в домашних компьютерах серии БК-001x. После многих лет разработки, применения и использования различных алгоритмов сканирования матриц клавиатуры (с цифровой фильтрацией дребезга контактов, с произвольным перекодированием, с поддержкой нажатия нескольких клавиш одновременно, с опросом в малопотребляющих режимах, в схемах совмещения сигналов матрицы с другими вспомогательными сигналами и прочими сегодняшними "плюшками") было довольно интересно познакомится с алгоритмом сканирования 1801ВП1-014. Но тут ждал сюрприз - никакого сканирования 1801ВП1-014 не производит! Рассмотрим процесс взаимодействия контроллера с матрицей подробнее. Контроллер имеет набор входов "линейки" - условно называются X0-X9. И набор входов-выходов "столбцов" - условно называются Y1-Y7. Роль "столбца" Y0 играет шина "земли". Также имеется две времязадающих схемы, представляющих собой внешние кондесаторы, подключенные к выводам RP1 и RP2. Конденсаторы могут независисмо разряжаться на "землю" внутренним ключом контроллера (выводы RP1 и RP2 являются как входами так и выходами по схеме "открытый коллектор"), заряд конденсторов осуществляется через внешние резисторы. Номиналы RC определяют характерное время, в схеме БК-001х R обычно порядка 200 килоом, С порядка 300 нанофарад и характерное время составляет примерно 60 миллисекунд. Схема на RP1 отвечает за фильтрацию дребезга механических контактов при нажатии клавиш, схема на RP2 отвечает за фильтрацию дребезга при отжатии клавиш. В исходном состоянии все клавиши отжаты, на входах X0-X9 присутствует высокий уровень, задаваемый внешними резисторам, в схеме БК-001х используется номинал 22 килоом. При этом на внутренней цепи ~XANY сформирован высокий уровень, сигнал на внутренней цепи LOCK также имеет высокий уровень. Ключ RP1 открыт и соответствующий конденсатор разряжен. Ключ RP2 закрыт и его конденсатор заряжен. Выводы Y1-Y7 в этот момент работают как входы, транзисторы "открытых коллекторов" закрыты. Через внешние резисторы на входы Y1-Y7 подается низкий уровень, в схеме БК-001х используется номинал 180 килоом. При нажатии клавиши в некотором столбце Yi происходит следующее - на соответствующем входе Yi появляется высокий уровень - через делитель 22/180 килоом. На каждом входе Yi имеется отдельный RS-триггер, который сбрасывается при обнаружении высокого уровня на входе Yi и устанавливается низким уровнем сигнала LOCK (уже после того как клавиши будут обработаны). При сбросе триггера соответстующий выход типа "открытый коллектор" переходит в состояние низкого уровня и вывод Yi начинает работать как выход. Через замкнутую клавишу генерируемый выходом Yi низкий уровень поступает на соответствующий вход Xj. Если же клавиша замкнута в столбце Y0 (который виртуальный, вместо выхода Yn используется "земля") то низкий уровень на вход Xj поступает немедленно, а ни один из триггеров Yi не переходит в сброшенное состояние. Таким образом контроллер по номеру сброшенного триггера Yi (или ни одному не сброшенному) может определеть номер столбца, а по номеру входа Xj может определить номер линии замкнутой клавиши. По обнаружению низкого уровня на любом из входов Xj ключ на RP1 закрывается и конденсатор начинает заряжаться. Простая комбинационная схема формирует код клавиши в зависимости от номера столбца, линейки и состояния управляющих входов SHIFT, CTRL, EC2, EC1. Любопытно что формируемый код можно в этот момент наблюдать в регистре данных, но бит готовности еще не установлен. В момент окончания заряда конденсатора вычисленный код клавиши фиксируется во внутреннем регистре и выставляется запрос на векторное прерывание. В зависимости от кода клавиши при подтверждении прерывания формируется вектор 060 или 274. Любопытно что сформированный запрос на прерывание фиксируется во внутреннем триггере и может быть сброшен только циклом подтверждения прерывания. После считывания кода центральным процессором контроллер ожидает отпускания клавиши - пропадания низкого уровня на входах Xj. Когда клавиша отпущена, ключ RP2 закрывается и конденсатор начинает заряжаться. До момента окончания заряда контроллер игнорирует изменения состояний матрицы клавиатуры - таким нехитрым образом фильтруется дребезг при размыкании контактов. Интересно что базовый адрес внутренних регистров контроллера на шине МПИ формируется внешней схемой (в БК-001х это чип-компаньон 1801ВП1-037), сам контроллер 1801ВП1-014 анализирует только низкий уровень на входе nCS. Для внутреннего декодирования адреса, видимо, оказалось недостаточно выводов в стандартном для 1801-ой серии 42-выводном корпусе - банально некуда было завести выводы ненужные собственно для работы контроллера входы AD15-AD8. Также стоит отметить полное отсутствие тактирования микросхемы - нет никаких тактовых сигналов. Внутри также обнаружился рудиментарный триггер переключателя регистров РУС-ЛАТ, который явно неработоспособен и в схеме БК-001х применяется аналогичный внешний триггер. Сложно сказать, это ошибка схемы или по каким-то соображениям разработчики намерено отказались от этого внутреннего триггера. Несмотря на то что контроллер 1801ВП1-014 является достаточно простым, использует несколько необычный в наши дни алгоритм обработки клавиатурной матрицы и поддерживает одновременное нажатие только одной клавиши, основную свою задачу он выполнил - разгрузил и так не очень быстрый центральный процессор от функций непрерывного сканирования клавиатуры, за что ему следует сказать спасибо. P.S. В приложении традиционно внутренняя схема контроллера, Верилог-описание и тестбенч. Также приложена схема матрицы клавиатуры БК-0011М. На схеме также приведена табличка аппаратных кодов клавиш, которые считываются непосредственно из регистра контроллера (скан-коды, до обработки подпрограммами ПЗУ). |
Автор: | bk-m [ 28 июн 2014, 17:25 ] |
Заголовок сообщения: | Re: Цифровая археология 1801: одноклавишный 014 |
014 разрабатывалась вовсе не для БК-0010, возможно это наследство от прототипа-макета БК-0001 - явно видны черты от 7-битных терминалов и от клавиатур первых ДВК с кодом КОИ-7. |
Автор: | Vslav [ 28 июн 2014, 21:54 ] |
Заголовок сообщения: | Re: Цифровая археология 1801: одноклавишный 014 |
Возможно что и разрабатывался для терминала, я не в курсе. Если у Вас есть больше конкретной информации - отпишитесь, думаю это будет интересно. Мне что-то казалось что 014 применен в пишмашинке "Ромашка", но там обнаружился 8279. Возможности ВП1-014, конечно, скромные, но с учетом входа EC2 и двух векторов прерываний можно изловчится и получать 8-битный код при желании. |
Автор: | bk-m [ 29 июн 2014, 02:03 ] | |||||||||
Заголовок сообщения: | Re: Цифровая археология 1801: одноклавишный 014 | |||||||||
- (изловчились с плохим итоговым результатом ...) В БК используется версия КОИ-8 с псевдографикой, соответственно пришлось его формировать из 7-битного кода выдаваемого ВП1-014 в драйвере клавиатуры со всякими извращениями по двум векторам прерываний. Если-бы этот контроллер клавиатуры делали именно для БК он был бы восьмибитным и более простые драйвера с одним вектором прерывания занимали меньше места, соответственно в Мониторе РЕ2-017 хватило бы места на команды записи на магнитофон и передачи на линию. Там есть соответствующие ЕМТ для записи-передачи но не хватило буквально сотни байт на оформление в виде внешних команд. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |