User Tag List

Страница 23 из 174 ПерваяПервая ... 192021222324252627 ... ПоследняяПоследняя
Показано с 221 по 230 из 1740

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

  1. #221

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Правильно. Но я говорю не о фиксации отжатия, а о фиксации нажатия нескольких клавиш на линии Y.
    Titus, может быть мы друг друга не понимаем. Приведу конкретный пример. На одной линии Y6 находятся клавиши АР2, ТАБ, УПР, ГРАФ, АЛФ, 0(доп), .(доп), ВВОД(доп). Я нажимаю АР2 и получаю код нажатия 006. Не отпуская её последовательно друг за другом я нажимаю клавиши ТАБ, УПР, ГРАФ, АЛФ, 0(доп), .(доп), ВВОД(доп). При этом никаких кодов нажатия не получаю. У нас нажаты все восемь клавиш на линии Y6, получили код нажатия только самой первой нажатой клавиши. Теперь последовательно отпускаем клавиши в такой же последовательности, что и нажимали. Первой отжимаем АР2, соответственно никакого кода отжатия не получим, т.к. нажаты ещё семь клавиш. И только тогда, когда отожмем последнюю клавишу ВВОД(доп), линия Y6 полностью освободится, тогда получим код отжатия 0206.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Счет можно размораживать сразу же после заморозки.
    Программно отслеживая можно самим следить, какие клавиши нажаты, какие отжаты. Однако, как я уже писал, это не будет неэффективно, т.к. очень медленно.
    Тут есть ещё один очень неприятный момент. Вывод на дешифратор DC_CTR_X стробируется сигналом CLK_KBD1_16. В момент "заморозки" останавливается генератор и по идее на линии CLK_KBD1_16 должен остаться низкий уровень, соответственно на выбранной линии X должен остаться низкий уровень и можно прочесть текущее состояние линий Y. А без "заморозки" во время чтения линий Y можно попасть в другой полупериод сигнала CLK_KBD1_16, соответственно на линиях X не будет "бегущего нуля", соответственно с линий Y прочтутся одни нули.

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

    hobot(22.11.2019)

  2. #222

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    И только тогда, когда отожмем последнюю клавишу ВВОД(доп), линия Y6 полностью освободится, тогда получим код отжатия 0206.
    Проверю, напишу.

  3. #223

    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    7,161
    Спасибо Благодарностей отдано 
    2,979
    Спасибо Благодарностей получено 
    374
    Поблагодарили
    311 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alex_K, в силу этой особенности тетрис2 Петра Высотина рассчитанный на 2-ух игроков на одной машине - малоиграбельным получился...правда там есть режим 1-го игрока (это с пакета "ИГРУШКА-3" (1993г.), который в коммерческом виде не обнаружен и по отдельности не все игры с него есть, там был ещё "СпейсБэттл" )
    Последний раз редактировалось hobot; 22.11.2019 в 15:06.
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  4. #224

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

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Тут есть ещё один очень неприятный момент. Вывод на дешифратор DC_CTR_X стробируется сигналом CLK_KBD1_16. В момент "заморозки" останавливается генератор и по идее на линии CLK_KBD1_16 должен остаться низкий уровень, соответственно на выбранной линии X должен остаться низкий уровень и можно прочесть текущее состояние линий Y.
    Заморозка происходит в фазе CLK_KBD_0D, когда линии X неактивны. Поэтому на них ничего не останется.

  5. #225

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Заморозка происходит в фазе CLK_KBD_0D, когда линии X неактивны. Поэтому на них ничего не останется.
    Увы, на практике это не наблюдается. Набил в ОЗУ ПП маленькую программку, которая при установке бита готовности клавиатуры прочитывает сначала с регистра 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

  6. #226

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

    По умолчанию

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

    Вопрос - в какой момент процессор в цикле записи во внешнее устройство, снимает свои данные с шины? По началу RPLY или окончанию? Или еще в какой-то момент?

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

  8. #227

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос - в какой момент процессор в цикле записи во внешнее устройство, снимает свои данные с шины? По началу RPLY или окончанию? Или еще в какой-то момент?
    По началу RPLY с небольшим запаздыванием. Снимаются данные и сигнал DOUT. Устройство в ответ должно снять RPLY.

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

    Titus(22.11.2019)

  9. #228

    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    7,507
    Спасибо Благодарностей отдано 
    344
    Спасибо Благодарностей получено 
    714
    Поблагодарили
    596 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Вопрос - в какой момент процессор в цикле записи во внешнее устройство, снимает свои данные с шины? По началу RPLY или окончанию? Или еще в какой-то момент?
    Внешнее, память - без разница
    Проц выставил адрес, выставил SYNC, подождал, снял адрес, выставил данные, выставил DOUT
    Устройство по SYNC определило свой адрес, по DOUT прочитала данные, выставила RPLY
    Проц снимает данные, DOUT и снимает SYNC
    Устройство по снятию DOUT снимает RPLY

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    По началу RPLY с небольшим запаздыванием.
    Думаю, зависит от скорострельности.

    Пардон, написал DIN, на самом деле DOUT

    Поправил

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

    Titus(22.11.2019)

  10. #229

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

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

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Увы, на практике это не наблюдается. Набил в ОЗУ ПП маленькую программку, которая при установке бита готовности клавиатуры прочитывает сначала с регистра 0177704 состояние линий Y, а потом с регистра 0177702 код клавиши. Так вот, при "замороженном" счетчике активна линия Y нажатой клавиши.
    Проверил правильность схемы от 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. Не насиловать регистр текущего значения постоянными чтениями, особенно при большом периоде тактирования таймера, чтобы дать содержимому счетчика переписаться в регистр текущего значения.
    [свернуть]
    Последний раз редактировалось Titus; 22.11.2019 в 20:48.

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

    Alex_K(22.11.2019)

  11. #230

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А не может ли просто линия Y не успеть разрядиться, ведь клавиатура - это изрядная емкость? Попробуйте в тест поставить значительную задержку между заморозкой и чтением Y.
    После проверки установки бита готовности клавиатуры вставил задержку из двух команд CLR R2 / SOB R2,. . Ничего не изменилось. Считываются состояния линий Y.

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

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

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

Эту тему просматривают: 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

Ваши права

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