User Tag List

Страница 22 из 174 ПерваяПервая ... 181920212223242526 ... ПоследняяПоследняя
Показано с 211 по 220 из 1740

Тема: Реверс-инжиниринг УКНЦ (1515ХМ1&2, 1801ВП1, 1801ВМ2)

  1. #211

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Все секреты контроллера клавиатуры УКНЦ

    Обновленная версия.

    В том числе и с учетом замечаний Vslav'а, по поводу уточнений, связанных с внутренней структурой управляемых буферов.
    Так же оптимизирован и переструктуирован контроллер клавиатуры, ввиду того, что у него были части, которые вообще никак не сказывались на функциональности, т.к. обладали логической избыточностью. Например, в RS-триггере сбрасывался бит только в том случае, если он установлен. Тогда как это условие никак не влияет на результат, потому что установлен бит или нет, в итоге он все равно сбрасывается.

    Подробное описание особенностей работы контроллера клавиатуры:


    Тактовая частота контроллера клавиатуры CLK_KBD = 1/24 CLC. CLC = 6.25МГц (0.16мкс). Таким образом, период CLK_KBD = 3.84мкс. Из CLK_KBD формируется рабочая тактовая частота CLK_KBD1_16 = 1/16 CLK_KBD (период 61.44мкс), а так же вспомогательные фазы CLK_KBD_0B и CLK_KBD_0D.

    Счетчик CTR_KBD_Y, управляющий сканированием столбцов Y, тактируется CLK_KBD1_16, и считает циклически от 0 до 0x0F.
    Счетчик CTR_KBD_X, управляющий бегущим нулем на X, тактируется CLK_KBD1_16 * 16 (983.04мкс), считает циклически от 0 до 0x0F, причем, счет 0..0x7 - фаза нажатия клавиш, счет 0x08 - фаза отжатия клавиш, 0x09..0x0F - холостая фаза.

    Таким образом, один полный цикл опроса клавиатуры занимает 15728.64мкс (15.728мс), что равно почти целому кадру развертки.

    На каждый счет CTR_KBD_X, приходится полный цикл сканирования столбцов Y (1..15, 0-й столбец отсутствует).

    Код нажатой клавиши в регистре KBD_DATA формируется из текущего состояния обеих счетчиков. Старший полубайт - это счетчик CTR_KBD_X, младший полубайт - это счетчик CTR_KBD_Y.

    Остановка тактовой частоты CLK_KBD происходит по событию KEY_READY, которое, в свою очередь, формируется по заднему фронту события KEY_MISMATCH, которое формируется всякий раз при нажатии или отжатии клавиши.
    По чтению регистра данных клавиатуры KBD_DATA, снимается событие KEY_READY, и тактовая частота запускается заново.

    Бегущий ноль на линии X промодулирован частотой CLK_KBD1_16. Т.е. активен во время низкого уровня CLK_KBD1_16.
    В этой же тактовой фазе активен сигнал на выходе дешифратора DC_CTR_Y, который управляет сканированием линий Y.



    Основные модули контроллера:

    Y_MEMORY_A, Y_MEMORY_B и Y_MEMORY_C - регистры, запоминающие столбцы Y, в которых нажата хотя бы одна клавиша.
    Y_MEMORY_A - отражает текущее состояние столбцов, т.к. целиком очищается перед фазой сканирования, а устанавливается во время фазы сканирования.
    Y_MEMORY_B - отражает суммарное предыдущее и текущее состояние столбцов с нажатыми клавишами. Регистр не очищается после предыдущего цикла, а устанавливается аналогично Y_MEMORY_A во время фазы сканирования. Очистка Y_MEMORY_B происходит копированием содержимого Y_MEMORY_A во второй фазе цикла.
    Y_MEMORY_C - хранит предыдущую копию Y_MEMORY_B, и обновляется в тактовом цикле CLK_KBD_0D. На основе разницы Y_MEMORY_B и Y_MEMORY_C формируется событие нажатия/отжатия клавиши KEY_MISMATCH.


    Главный цикл опроса клавиатуры состоит из трех фаз - фазы определения нажатия клавиши, фазы определения отжатия клавиши, и холостой фазы.

    Первая фаза - определение нажатия клавиш (счетчик CTR_KBD_X = 0x00..0x07):

    В активной фазе CLK_KBD1_16 (CLK_KBD1_16 = 0) схемой COL_Y_COMP сигнал на выходе дешифратора сравнивается с входами порта Y. В случае наличия на соответствующeй линии нуля (нажата клавиша на пересечении ряда X, и столбца Y), в регистрах Y_MEMORY_A и Y_MEMORY_B устанавливается бит соответствующий столбцу Y. Если обновленное содержимое Y_MEMORY_B отличается от значения, зафиксированного в предыдущем цикле в Y_MEMORY_C, то возникает событие KEY_MISMATCH.

    По окончанию активной фазы CLK_KBD1_16, снимается сигнал с линий X, вследствие чего пропадает сигнал и на линиях Y. Также отключается дешифратор DC_CTR_Y, управляющий компаратором COL_Y_COMP.

    После этого следует короткий импульс тактового цикла CLK_KBD_0D, записывающий текущее значение Y_MEMORY_B в регистр последнего значения Y_MEMORY_C, вследствие чего отключается событие KEY_MISMATCH, если оно было активно. По снятию события KEY_MISMATCH активизируется событие KEY_READY, останавливающее тактирование CLK_KBD, предлагая программе считать из регистра KEY_DATA код нажатой клавиши. После чтения кода клавиши, тактирование CLK_KBD возобновляется.


    Вторая фаза - определение отжатия клавиш (счетчик CTR_KBD_X = 0x08):

    В активной фазе CLK_KBD1_16 (CLK_KBD1_16 = 0) на линии X0 так же появляются тактовые импульсы CLK_KBD1_16, что является побочным эффектом и не используется. Схема сравнения COL_Y_COMP отключена.

    По окончанию активной фазы CLK_KBD1_16, следует короткий импульс тактового цикла CLK_KBD_0B, по которому в регистре Y_MEMORY_B сбрасывается текущий бит, если сброшен такой же бит в регистре Y_MEMORY_A.
    Таким образом, если Y_MEMORY_B все еще помнит клавишу, нажатую в предыдущем цикле, а в текущем цикле она была отпущена (отсутствует в Y_MEMORY_A), возникает событие KEY_MISMATCH.

    После этого следует короткий импульс тактового цикла CLK_KBD_0D, по которому сбрасывается бит в регистре Y_MEMORY_A, соответствующий линии Y. Т.е. фактически происходит очистка Y_MEMORY_A перед следующим циклом.
    Также переписывается Y_MEMORY_B в Y_MEMORY_C, вследствие чего отключается событие KEY_MISMATCH, если оно было активно. По снятию события KEY_MISMATCH активизируется событие KEY_READY, останавливающее тактирование CLK_KBD, предлагая программе считать из регистра KEY_DATA код отжатой клавиши. После чтения кода отжатия клавиши, тактирование CLK_KBD возобновляется.


    Третья фаза - холостая (счетчик CTR_KBD_X = 0x09..0x0F):

    В этой фазе так же появляется бегущий ноль на линиях X, промодулированный по CLK_KBD1_16, однако это никак не используется.


    Влияние EP на опрос клавиатуры:

    EP также, как и активное событие KEY_READY, блокирует установку нажатой клавиши в регистрах Y_MEMORY_A и Y_MEMORY_B в первой фазе цикла опроса. Следует заметить, что блокировка по KEY_READY является излишней, т.к. во время события KEY_READY тактовая частота контроллера клавиатуры остановлена.

    Помимо этого, EP запрещает бегущий ноль на линиях X.

    Также, EP разрешает вывод регистра KBD_BUS на линии Y. Кроме содержимого KBD_BUS (линии Y3..Y15), на линию Y2 выводится тактовая частота контроллера клавиатуры CLK_KBD, а на линию Y1 - сигнал чтения регистра KBD_BUS.


    Условно недокументированные особенности, возможности и ошибки:

    1. Поскольку код нажатия клавиши формируется в момент фактического нажатия, когда счетчики Y и X указывают на конкретную клавишу, в регистре KBD_DATA формируется полный код нажатой клавиши.
    Однако, код отжатия клавиши формируется уже после фактического отжатия клавиши, когда счетчик Y указывает на актуальный столбец, а счетчик X указывает на ряд 0. Поэтому в регистре KBD_DATA формируется неполный код отжатия клавиши, по которому можно определить лишь столбец Y, в котором отпущены все клавиши, но не ряд X.

    2. Из регистра KBD_BUS (177704) можно считывать состояние порта Y в реальном времени.

    3. Из регистра KBD_DATA (177702) можно считывать текущее состояние счетчиков CTR_KBD_X и CTR_KBD_Y. Причем, учитывая, что чтение счетчиков никак не синхронизировано с тактовой частотой контроллера клавиатуры, не исключена возможность чтения счетчиков в промежуточной фазе счета, когда одна часть счетчика уже установлена, а другая нет. Для того, чтобы понять, возможно ли такое попадание в середину фазы счета, надо изучать всю схемотехнику УКНЦ в целом.

    4. Если в течение одного цикла счетчика CTR_KBD_X нажаты и удерживаются две и более клавиши в одном столбце, то первое чтение KBD_DATA, даст код первой зафиксированной в столбце клавиши. Вторая и остальные нажатые в этом цикле, и в этом столбце клавиши, определены не будут. Т.е. фактически одновременное нажатие нескольких клавиш в столбце может привести к потере события нажатия одной из них.

    5. Возможно написание собственного опроса клавиатуры, т.к. программно доступны счетчики X, Y, и состояние порта Y. На практике же такой опрос будет очень медленным, из-за того, что полный цикл сканирования клавиатуры равен почти 16мс, что сопоставимо с размером одного кадра развертки (20мс).

    6. Все биты счетчиков CTR_KBD_X и CTR_KBD_Y сбрасываются по INIT, за исключением бита 0 счетчика CTR_KBD_X, который сбрасывается по DLCO.

    7. Следует заметить, что схема опроса клавиатуры имеет немалую логическую избыточность, и на втором этапе реверса оптимизирована.
    [свернуть]
    Последний раз редактировалось Titus; 21.11.2019 в 21:27.

    Эти 4 пользователя(ей) поблагодарили Titus за это полезное сообщение:

    Alex_K(21.11.2019), electroscat(07.06.2022), troosh(22.11.2019), Vslav(21.11.2019)

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

  3. #212

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос к Alex_K - что у нас интересненького в ХМ2-003 (ХМ1-039)?
    Все еще актуален вопрос.

  4. #213

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос к Alex_K - что у нас интересненького в ХМ2-003 (ХМ1-039)?
    Контроллер ОЗУ и адресного пространства ЦП, частичный компаратор адресов для каналов K0, K1, K2 для 1801ВП1-120, регистры доступа к планам 0176640 и 0176642, ловушка адреса. Вроде всё. Контроллер ОЗУ и адресного пространства ПП поинтереснее будет.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Обновленная версия
    А зачем в схеме в скобках (ХМ1-031)? Ведь там реальная схема может отличаться.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Условно недокументированные особенности, возможности и ошибки:
    Цитата Сообщение от Titus Посмотреть сообщение
    1. Поскольку код нажатия клавиши формируется в момент фактического нажатия, когда счетчики Y и X указывают на конкретную клавишу, в регистре KBD_DATA формируется полный код нажатой клавиши.
    Однако, код отжатия клавиши формируется уже после фактического отжатия клавиши, когда счетчик Y указывает на актуальный столбец, а счетчик X указывает на ряд 0. Поэтому в регистре KBD_DATA формируется неполный код отжатия клавиши, по которому можно определить лишь столбец Y, в котором отпущены все клавиши, но не ряд X.
    Ну эта особенность описана в самом ТО, так что секретом не является.
    Цитата Сообщение от Titus Посмотреть сообщение
    2. Из регистра KBD_BUS (177704) можно считывать состояние порта Y в реальном времени.
    Да, это в ТО не описано. Но я об этом писал неоднократно. Перед чтением кода нажатой клавиши можно прочесть регистр 0177704 и узнать на каких линиях Y ещё нажаты клавиши при "замороженном" X.
    Цитата Сообщение от Titus Посмотреть сообщение
    3. Из регистра KBD_DATA (177702) можно считывать текущее состояние счетчиков CTR_KBD_X и CTR_KBD_Y. Причем, учитывая, что чтение счетчиков никак не синхронизировано с тактовой частотой контроллера клавиатуры, не исключена возможность чтения счетчиков в промежуточной фазе счета, когда одна часть счетчика уже установлена, а другая нет. Для того, чтобы понять, возможно ли такое попадание в середину фазы счета, надо изучать всю схемотехнику УКНЦ в целом.
    А при чем тут схемотехника УКНЦ? Просто написать программу, которая в большой буфер будет последовательно считывать регистр 0177702. А потом проанализировать. Следующие значения должны быть на один больше, если не так, то попали на момент изменения счетчиков.
    Цитата Сообщение от Titus Посмотреть сообщение
    4. Если в течение одного цикла счетчика CTR_KBD_X нажаты и удерживаются две и более клавиши в одном столбце, то первое чтение KBD_DATA, даст код первой зафиксированной в столбце клавиши. Вторая и остальные нажатые в этом цикле, и в этом столбце клавиши, определены не будут. Т.е. фактически одновременное нажатие нескольких клавиш в столбце может привести к потере события нажатия одной из них.
    Тоже в ТО не описано. Но об этом я также писал, что одновременное нажатие клавиш на одной линии Y не распознается.
    Цитата Сообщение от Titus Посмотреть сообщение
    5. Возможно написание собственного опроса клавиатуры, т.к. программно доступны счетчики X, Y, и состояние порта Y. На практике же такой опрос будет очень медленным, из-за того, что полный цикл сканирования клавиатуры равен почти 16мс, что сопоставимо с размером одного кадра развертки (20мс).
    А вот это не понял. Ведь регистр 0177702 можно только читать, его нельзя писать.

  5. #214

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Контроллер ОЗУ и адресного пространства ЦП, частичный компаратор адресов для каналов K0, K1, K2 для 1801ВП1-120, регистры доступа к планам 0176640 и 0176642, ловушка адреса. Вроде всё. Контроллер ОЗУ и адресного пространства ПП поинтереснее будет.
    Контроллер ОЗУ ПП еще не сфоткан)

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    А зачем в схеме в скобках (ХМ1-031)? Ведь там реальная схема может отличаться.
    Так написано на кристалле, поэтому тоже обозначил. Разумеется схема ХМ1-031 будет отличаться. Надо пометить на схеме, что это все же обновленная версия ХМ1-031.

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Тоже в ТО не описано. Но об этом я также писал, что одновременное нажатие клавиш на одной линии Y не распознается.
    Тут надо уточнить, что одновременное в смысле момента нажатия. А вот нажатые неодновременно, но удерживаемые одновременно - распознаются.

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    А вот это не понял. Ведь регистр 0177702 можно только читать, его нельзя писать.
    Ну да. Мы можем всегда прочитать значение X, Y и состояние входов Y.

  6. #215

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Тут надо уточнить, что одновременное в смысле момента нажатия. А вот нажатые неодновременно, но удерживаемые одновременно - распознаются.
    Не распознаются, если стоят на одной линии Y. Я писал программу SCAN.SAV, которая показывает скэн-коды клавиш, можете попробовать на реальной УКНЦ.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Ну да. Мы можем всегда прочитать значение X, Y и состояние входов Y.
    И смысл? Программный опрос это когда я устанавливаю значение линий X и после прочитываю состояние линий Y, и уже на основе анализа полученной информации определяю какая клавиша нажата. А здесь можно только следить за счетчиком X, а установить его нельзя. Да и при нажатии клавиши происходит "заморозка" счета.

  7. #216

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    И смысл? Программный опрос это когда я устанавливаю значение линий X и после прочитываю состояние линий Y, и уже на основе анализа полученной информации определяю какая клавиша нажата. А здесь можно только следить за счетчиком X, а установить его нельзя. Да и при нажатии клавиши происходит "заморозка" счета.
    Счет можно размораживать сразу же после заморозки.
    Программно отслеживая можно самим следить, какие клавиши нажаты, какие отжаты. Однако, как я уже писал, это не будет неэффективно, т.к. очень медленно.

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Не распознаются, если стоят на одной линии Y. Я писал программу SCAN.SAV, которая показывает скэн-коды клавиш, можете попробовать на реальной УКНЦ.
    Может быть вы пробовали на ХМ1-031? На нем вполне может различаться не только таймер, но и контроллер клавиатуры.

  8. #217

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Может быть вы пробовали на ХМ1-031? На нем вполне может различаться не только таймер, но и контроллер клавиатуры.
    Сейчас попробовал на 1515ХМ2-001, всё точно так же.

    Этот пользователь поблагодарил Alex_K за это полезное сообщение:

    hobot(22.11.2019)

  9. #218

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Сейчас попробовал на 1515ХМ2-001, всё точно так же.
    Рассмотрю этот момент.

  10. #219

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,250
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Рассмотрю этот момент.
    Там же целых три регистра памяти состояния линий Y. Тем более при отрицательном значении счетчика (когда установлен X3) реально сканирования линий Y не проводится, а сравнивается предпоследнее и последнее сканирование. И если ранее была нажатая клавиша на линии Y, а потом её не стало, то и формируется код отжатия.

  11. #220

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,701
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    И если ранее была нажатая клавиша на линии Y, а потом её не стало, то и формируется код отжатия.
    Правильно. Но я говорю не о фиксации отжатия, а о фиксации нажатия нескольких клавиш на линии Y.

Страница 22 из 174 ПерваяПервая ... 181920212223242526 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 32
    Последнее: 18.12.2024, 18:19
  2. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  3. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46
  4. Куплю 1515ХМ1-6006, 1515ХМ1−6008
    от moxjemi в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 10.01.2012, 17:23
  5. 1801ВМ2 А и Б
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 2
    Последнее: 03.05.2010, 11:51

Ваши права

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