1. Мои буфера BUF_TMR_CUR, BUF_SYS_CON и т.д. не выполняют никакой логической функции.
2. Логическую функцию - обьединение по 'ИЛИ' выполняет U9.
Вид для печати
1. Мои буфера BUF_TMR_CUR, BUF_SYS_CON и т.д. не выполняют никакой логической функции.
2. Логическую функцию - обьединение по 'ИЛИ' выполняет U9.
Нет смысла ссылаться на версию схемы, где все выходило в одну шину, т.к. это был незаконченный вариант.
Альтернативы названию OE -я не вижу. Во всяком случае знак '&' точно запутает. Да, чаще всего OE используется для перевода выходов в 3-ье сотояние. Но вполне себе стандартны микросхемы, использующие OE для перевода выходов в 0 или 1 (в зависимости от полярности). Например 74151.
Я утверждал что "&" хуже не сделает (в шутку).
Я не утверждал что "&" поможет.
Если делать правильно (с моей точки зрения) - то надо вернуть схемы "И", это отобразит суть.
Забавно, что если переводить схему в верилог, то там эти "И" будут явно указаны.
В "честной" поячеечной схеме эти "И" тоже будут видны.
А вот на твоей промежуточной схеме - их нет, они неочевидны.
Впрочем, проект твой, так что, конечно, я ни на чем не настаиваю.
Обновленная версия.
В том числе и с учетом замечаний 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. Следует заметить, что схема опроса клавиатуры имеет немалую логическую избыточность, и на втором этапе реверса оптимизирована.[свернуть]
Контроллер ОЗУ и адресного пространства ЦП, частичный компаратор адресов для каналов K0, K1, K2 для 1801ВП1-120, регистры доступа к планам 0176640 и 0176642, ловушка адреса. Вроде всё. Контроллер ОЗУ и адресного пространства ПП поинтереснее будет.
- - - Добавлено - - -
А зачем в схеме в скобках (ХМ1-031)? Ведь там реальная схема может отличаться.
- - - Добавлено - - -
Ну эта особенность описана в самом ТО, так что секретом не является.
Да, это в ТО не описано. Но я об этом писал неоднократно. Перед чтением кода нажатой клавиши можно прочесть регистр 0177704 и узнать на каких линиях Y ещё нажаты клавиши при "замороженном" X.
А при чем тут схемотехника УКНЦ? Просто написать программу, которая в большой буфер будет последовательно считывать регистр 0177702. А потом проанализировать. Следующие значения должны быть на один больше, если не так, то попали на момент изменения счетчиков.
Тоже в ТО не описано. Но об этом я также писал, что одновременное нажатие клавиш на одной линии Y не распознается.
А вот это не понял. Ведь регистр 0177702 можно только читать, его нельзя писать.
Контроллер ОЗУ ПП еще не сфоткан)
- - - Добавлено - - -
Так написано на кристалле, поэтому тоже обозначил. Разумеется схема ХМ1-031 будет отличаться. Надо пометить на схеме, что это все же обновленная версия ХМ1-031.
- - - Добавлено - - -
Тут надо уточнить, что одновременное в смысле момента нажатия. А вот нажатые неодновременно, но удерживаемые одновременно - распознаются.
- - - Добавлено - - -
Ну да. Мы можем всегда прочитать значение X, Y и состояние входов Y.
Не распознаются, если стоят на одной линии Y. Я писал программу SCAN.SAV, которая показывает скэн-коды клавиш, можете попробовать на реальной УКНЦ.
- - - Добавлено - - -
И смысл? Программный опрос это когда я устанавливаю значение линий X и после прочитываю состояние линий Y, и уже на основе анализа полученной информации определяю какая клавиша нажата. А здесь можно только следить за счетчиком X, а установить его нельзя. Да и при нажатии клавиши происходит "заморозка" счета.
Счет можно размораживать сразу же после заморозки.
Программно отслеживая можно самим следить, какие клавиши нажаты, какие отжаты. Однако, как я уже писал, это не будет неэффективно, т.к. очень медленно.
- - - Добавлено - - -
Может быть вы пробовали на ХМ1-031? На нем вполне может различаться не только таймер, но и контроллер клавиатуры.
Там же целых три регистра памяти состояния линий Y. Тем более при отрицательном значении счетчика (когда установлен X3) реально сканирования линий Y не проводится, а сравнивается предпоследнее и последнее сканирование. И если ранее была нажатая клавиша на линии Y, а потом её не стало, то и формируется код отжатия.
Titus, может быть мы друг друга не понимаем. Приведу конкретный пример. На одной линии Y6 находятся клавиши АР2, ТАБ, УПР, ГРАФ, АЛФ, 0(доп), .(доп), ВВОД(доп). Я нажимаю АР2 и получаю код нажатия 006. Не отпуская её последовательно друг за другом я нажимаю клавиши ТАБ, УПР, ГРАФ, АЛФ, 0(доп), .(доп), ВВОД(доп). При этом никаких кодов нажатия не получаю. У нас нажаты все восемь клавиш на линии Y6, получили код нажатия только самой первой нажатой клавиши. Теперь последовательно отпускаем клавиши в такой же последовательности, что и нажимали. Первой отжимаем АР2, соответственно никакого кода отжатия не получим, т.к. нажаты ещё семь клавиш. И только тогда, когда отожмем последнюю клавишу ВВОД(доп), линия Y6 полностью освободится, тогда получим код отжатия 0206.
- - - Добавлено - - -
Тут есть ещё один очень неприятный момент. Вывод на дешифратор DC_CTR_X стробируется сигналом CLK_KBD1_16. В момент "заморозки" останавливается генератор и по идее на линии CLK_KBD1_16 должен остаться низкий уровень, соответственно на выбранной линии X должен остаться низкий уровень и можно прочесть текущее состояние линий Y. А без "заморозки" во время чтения линий Y можно попасть в другой полупериод сигнала CLK_KBD1_16, соответственно на линиях X не будет "бегущего нуля", соответственно с линий Y прочтутся одни нули.
Alex_K, в силу этой особенности тетрис2 Петра Высотина рассчитанный на 2-ух игроков на одной машине - малоиграбельным получился...правда там есть режим 1-го игрока (это с пакета "ИГРУШКА-3" (1993г.), который в коммерческом виде не обнаружен и по отдельности не все игры с него есть, там был ещё "СпейсБэттл" )
https://pic.maxiol.com/thumbs2/15744...2115910065.png
Увы, на практике это не наблюдается. Набил в ОЗУ ПП маленькую программку, которая при установке бита готовности клавиатуры прочитывает сначала с регистра 0177704 состояние линий Y, а потом с регистра 0177702 код клавиши. Так вот, при "замороженном" счетчике активна линия Y нажатой клавиши.
Программка набивается с адреса 024000, результаты пишет, начиная с адреса 025000. Запускать с адреса 024000 нажатием пробела (особенность пультового отладчика ПП). Выход - отжатие СТОП, если начнется автоповтор, то ещё раз нажать СТОП.
Код:MTPS #200 24000: 106427 000200
MOV #25000,R3 24004: 012703 025000
1$: TSTB @#177700 24010: 105737 177700
BPL 1$ 24014: 100375
MOV @#177704,R0 24016: 013700 177704
MOV @#177702,R1 24022: 013701 177702
CMP R1,#204 24026: 020127 000204
BEQ 2$ 24032: 001405
TSTB R1 24034: 105701
BMI 1$ 24036: 100764
MOV R0,(R3)+ 24040: 010023
MOV R1,(R3)+ 24042: 010123
BR 1$ 24044: 000761
2$: HALT 24046: 000000
Внешнее, память - без разница
Проц выставил адрес, выставил SYNC, подождал, снял адрес, выставил данные, выставил DOUT
Устройство по SYNC определило свой адрес, по DOUT прочитала данные, выставила RPLY
Проц снимает данные, DOUT и снимает SYNC
Устройство по снятию DOUT снимает RPLY
- - - Добавлено - - -
Думаю, зависит от скорострельности.
Пардон, написал DIN, на самом деле DOUT
Поправил
Проверил правильность схемы от G19 до выходов X - все точно.
Т.е. при 0 на выходе G19, выходы X неактивны.
Видимо, надо проверить до G19.
А не может ли просто линия Y не успеть разрядиться, ведь клавиатура - это изрядная емкость? Попробуйте в тест поставить значительную задержку между заморозкой и чтением Y.
И еще можно попробовать после заморозки установить EP = 1, чтобы гарантированно отключить X, и прочитать Y.
Только надо не забыть перед этим записать в KBD_BUS нули, чтобы Y не притянулся на землю.
- - - Добавлено - - -
Обновленная версия схемы 1515ХМ2-001-Optimized - rev 49
Нарисованы дополнительные диаграммы работы таймера, и исправлены мелкие косметиеческие недочеты.
Подробное описание особенностей работы таймера:
Тактовая частота таймера CLK_TMR задается двумя битами регистра состояния таймера TMR_STATE[1..2]. В зависимости от их состояния, частота тактирования таймера может быть выбрана: CLК1_3, CLK1_6, CLK1_12 и CLK1_24. Что соответствует периодам: 0.48мкс, 0.96мкс, 1.92мкс и 3.84мкс. Из частоты тактирования таймера выделяется основная частота CLK_TMR1_4, и несколько вспомогательных фаз этой частоты. Частота CLK_TMR1_4 равна CLK_TMR / 4, поэтому периоды счета таймера будут: 1.92мкс, 3.84мкс, 7.68мкс и 15.36мкс соответственно. Учитывая, что скважность CLK1_3 равна 66.6%, итоговая ширина фазовых импульсов при данной тактовой частоте таймера будет отличаться от CLK1_6, CLK1_12 и CLK1_24, скважность которых равна 50%.
Один период CLK_TMR1_4 можно условно разделить на 8 тактов (0..7).
Такт 0:
Если разрешена загрузка буферного регистра в счетчик (в режиме остановки таймера, либо по событиям TMR_ZERO_EVENT или EXT_EVENT), то в этом такте происходит копирование буферного регистра LATCH_TMR_BUF в счетчик CTR_TMR_CUR.
Так же, если в предыдущем такте был активен сигнал TMR_BUF_WRITE (запись в буферный регистр), то происходит одновременная загрузка буферного регистра новым значением, и загрузка этого же значения в счетчик.
Если же сигнал TMR_BUF_WRITE стал активен в этом такте, то его действие откладывается до следующего такта, равно как и ответ RPLY.
Такт 1..7:
Возможна свободная загрузка в буферный регистр LATCH_TMR_BUF по TMR_BUF_WRITE.
Такт 2..3:
Никаких действий не совершается.
Такт 4:
Если таймер в режиме счета, то по переднему фронту такта происходит вычитание единицы из содержимого счетчика.
Такт 5:
Если регистр текущего значения LATCH_TMR_CUR до этого такта не находился в режиме чтения по TMR_CUR_READ, а так же регистр текущего значения не был заморожен по TMR_CUR_FREEZE, то в этом такте содержимое счетчика CTR_TMR_CUR переписывается в регистр текущего значения LATCH_TMR_CUR.
Если сигнал TMR_CUR_READ стал активен в этом такте, то его действие откладывается до следующего такта, равно, как и ответ RPLY.
Такт 0..4, 6..7:
Возможно свободное чтение регистра текущего значения LATCH_TMR_CUR по TMR_CUR_READ.
Такт 6:
Никаких действий не совершается.
Такт 7:
Если счетчик запущен и в этом такте равен нулю, а так же SYS_CON[13] = 0, то по переднему фронту такта формируется событие TMR_ZERO_EVENT. Если же SYS_CON[13] = 1, то выставляется сигнал IRQ (который в УКНЦ не используется). Снимается IRQ однократной установкой SYS_CON[13] = 0.
Также в этом такте формируется событие EXT_EVENT, если с предыдущего такта было изменение уровня на входе EXT.
По окончанию событий TMR_ZERO_EVENT или TMR_ZERO_EVENT (по заднему фронту такта 7) формируются события TMR_ZERO_READY и EXT_READY, соответственно. При наличии хотя бы одного из них, формируется событие TMR_CUR_FREEZE, замораживающее регистр текущего значения таймера. Сбрасываются события TMR_ZERO_READY и EXT_READY по чтению регистра текущего значения таймера.
Если произошло событие TMR_ZERO_EVENT, и при этом уже установлен TMR_ZERO_READY (т.е. не был прочитан замороженный регистр текущего значения таймера), то выставляется бит TMR_STATE[3] (TMR_OVER), который сбрасывается по чтению регистра состояния таймера TMR_STATE.
Особенности работы таймера и ошибки:
1. При записи значения в буферный регистр LATCH_TMR_BUF в режиме остановленного счета, с вероятностью 1/8 цикл записи может быть продлен до одиного такта таймера. Что соответствует 0.32мкс, 0.48мкс, 0.96мкс и 1.92мкс, или же 2, 3, 6 и 12 такта ПП, соответственно.
2. При чтении регистра текущего значения LATCH_TMR_CUR, с вероятностью 1/8 цикл записи может быть так же продлен, как и в пункте 1, в независимости от того, идет счет или нет.
3. При остановленном таймере, цикл продвижения значения от записи в буферный регистр LATCH_TMR_BUF до регистра текущего значения LATCH_TMR_CUR следующий. После записи значения в буферный регистр LATCH_TMR_BUF, продвижение его в счетчик CTR_TMR_CUR может задержаться на время до 8 тактов таймера. Дальнейшее продвижение числа в регистр текущего значения LATCH_TMR_CUR задержится еще на 5 тактов таймера. Если же в момент продвижения числа в LATCH_TMR_CUR, была попытка читать регистр текущего значения, то продвижение числа задержится еще на 8 тактов. И так может происходить до бесконечности, если перед тактом копирования числа в LATCH_TMR_CUR, было произведено чтение регистра текущего значения.
4. Весьма подозрителен тот факт, что при записи в буферный регистр LATCH_TMR_BUF, сигнал записи REG_BUF_LOAD может быть продлен на 1 такт таймера, относительно окончания сигнала TMR_BUF_WRITE. Таким образом, сигнал TMR_BUF_WRITE может пропасть, ввиду окончания записи процессором данных на шину, т.к. по записи в LATCH_TMR_BUF устанавливается RPLY, а в регистр LATCH_TMR_BUF все еще будет записываться состояние шины. И чем больше период тактирования таймера, тем вероятность данной ошибки выше. Максимальная задержка записи может быть 12 тактов ПП.
Рекомендации по работе с таймером:
1. При остановленном таймере записывать новое значение в буферный регистр при минимальном периоде тактирования таймера (2мс).
2. Не насиловать регистр текущего значения постоянными чтениями, особенно при большом периоде тактирования таймера, чтобы дать содержимому счетчика переписаться в регистр текущего значения.
[свернуть]
Тогда надо проверить с активным EP.
Окей, значит EP действует как положено. Надо проверять линию CLK_KBD1_16.
- - - Добавлено - - -
Да, похоже, перепутал полярность CLK_KBD1_16, когда счетчик из отрицательного переделывал в положительный)
Значит надо будет переписать описание с учетом этого.
- - - Добавлено - - -
Нет, не перепутывал) Еще страннее)
- - - Добавлено - - -
Нашел. У микросхемы Y_MEMORY_C вход C должен быть инверсный.
В общем да, полярность CLK_KBD1_16 была перепутана из-за того, что счетчик сначала был с отрицательным счетом, а я его переделал в положительный.
Кроме того, вместо /CLK_KBD_0B на COMP_ENABLE почему-то был заведен KEY_READY. Я еще удивился, зачем оно так, т.к. ничего не делает.
А теперь все встало на свои места. И теперь клавиатура работает именно так, как говорил Alex_K, т.е. при заморозке на линиях X все еще находятся активный сигнал.
Интересно, что контроллер прекрасно работал и в прежней перепутанной версии, но немного по другому.
- - - Добавлено - - -
Да, по схеме все так и есть.
Да, разумеется, попозже.
Признак, по которому можно определить, что пересидел за реверсом ХМ2-001, это когда в новостях аббревиатуру EP (Единая Россиия) автоматически читаешь, как EP - бит разрешения вывода на шину Y)))
https://pic.maxiol.com/images2/15745...4841820.01.png