User Tag List

Страница 56 из 66 ПерваяПервая ... 525354555657585960 ... ПоследняяПоследняя
Показано с 551 по 560 из 803

Тема: Реверс-инжиниринг Z80

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    982
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    оффтоп
    сорри. пьян.

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

  3. #2

    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    982
    Спасибо Благодарностей отдано 
    51
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    164 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    тут наверно надо смотреть времянки между RES и RES_TCLK кто из них раньше (позже) относительно клока.

  4. #3

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

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    тут наверно надо смотреть времянки между RES и RES_TCLK кто из них раньше (позже) относительно клока.
    Это не важно, т.к. триггер синхронный, и гонка сигналов на него не влияет.

  5. #4

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

    По умолчанию

    Еще одна интересная особенность Z80, которая выяснилась при моделировании. Вернее, она видна и по схеме, но не приходило в голову об этом подумать.

    Во время сброса процессора, сбрасывается не только счетчик PC, но еще и IR.
    Это происходит из-за того, что во время ресета принудительно выбраны PC и IR одновременно. Поэтому при любой записи в PC (в такте T2) или IR (в такте T4), запись идет в оба этих регистра. А так как при сбросе обнуляется регистр инкремента PCR, то каждый цикл записи идет запись 0 в PC и IR, пока не сняли ресет.

  6. #5

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

    По умолчанию

    Дошел до модели АЛУ, и тут наткнулся на подозрение, что такая конструкция переводится в схему не так, как казалось бы должно:

    Код:
        always @ (negedge clk)                                              // RS-триггер выбора фазы работы АЛУ
        begin
            if (start_alu)
                sel_alu_low = 1;
            else if (req_alu_high)
                sel_alu_low = 0;
        end
    Код:
        always @ (negedge clk)                                              // Регистр фиксации младшего полубайта результата
        begin                                                               //
            if (sel_alu_low)                                                //  
                alu_low <= alu_out[7:4];                                    //
        end                                                                 //
    Но второй триггер почему-то защелкивает результат на 1 такт CLK раньше чем должен.
    Совершенно непонятно, как это может быть.


  7. #6

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

    По умолчанию

    Все, отбой, разобрался.
    Это из-за использования неблокирующего присваивания в первом триггере. Странно, что на графике выход триггера выглядит абсолютно правильно, а симулируется неправильно.

  8. #7

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

    По умолчанию Описание работы команд ADD/ADC/SBC HL,dd

    Одна из самых нестандартных команд для Z80. Для работы сделаны множество патчей в тех или иных блоках Z80.

    Описание на примере команды ADD/ADC HL,DE:

    Цикл M1:

    T1-T3 - выборка кода команды и завершение предыдущей ALU-операции
    T4 - ALUA = L
    * Загрузка в регистр PCR текущей выбранной регистровой пары HL (побочка от какой команды?)

    Цикл M4:

    T1 - ALUB = E
    * Инкремент PCR
    T2 - сложение младших полубайтов
    * Запись PCR в выбранный по умолчанию регистр WZ (фактически в WZ записывается HL + 1)
    (побочка от функционала записи декрементированного PC для блочных команд, чтоибы вернуться к началу блочной команды)
    T3 - сложение старших полубайтов и запись результата в L
    влияние на флаги P/V, Z, S (только для ADC/SBC)
    влияние на флаг C
    T4 - ALUA = H
    флаг C записать во флаг H

    Цикл M5:

    Т1 - ALUB = D
    T2 - сложение младших полубайтов
    T3 - сложение старших полубайтов и запись результата в H

    Цикл М1:

    Т1 - нет стандартного ALU-цикла
    T2 - влияние на флаги P/V, Z, S (только для ADC/SBC)
    влияние на флаг C
    Т3 - нет стандартной записи результата
    T4 - сохранение флагов в регистре F

    Замечание: флаг N устанавливается для любой стандартной АЛУ-операции
    флаг H устанавливается для любой АЛУ-операции
    Последний раз редактировалось Titus; 17.11.2024 в 21:51.

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

    Reobne(17.11.2024)

  9. #8

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

    По умолчанию

    Не смотря на не очень высокий интерес массовой публики к подробным (а уже не подробные, лаконичные) разборам особенностей выполнения команд, все же буду выкладывать интересное)
    А именно егодня начал распутываться загадочный клубок с побочной записью/чтением регистра WZ (в некоторых документах его называют MEMPTR).
    Обновил чуть выше уже опубликованный сценарий работы команд ADD/ADC/SBC HL,dd, с добавлением комментариев, где, как и почему происходит влияние на регистр WZ.

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

    Фактически, после окончания цикла M1, в котором блок PCR был занят инкрементом PC, а затем IR, блок брошен на произвол судьбы, как пропеллер сорвавшийся с вентилятора) И как только ему попадается какое-то число, он его инкрементирует или декрементирует и обратно выплевывает на шину PCRBUS. В большинстве случаев от этого ничего плохого не происходит, если вдруг какой-то участок схемы, где применялось неполное декодирование условий, вдруг взял и сработал не тогда, когда надо. В нашем случае он сработал два раз, первый раз в такте M1.T4 (тут еще не знаю, побочка от какого функционала), а второй раз в такте M4.T2. Вот тут совершенно четко понятно из-за чего. В этом такте (а так же M4.T4) блочные команды откатывают PC на два шага назад, чтобы вернуться к начальному адресу блочной команды. Но как оказалось, цикл M4 использует для вычислений и команда ADD, функционал которой реализован массовыми патчами разных участков схемы. Работе команды ADD это не помешало, так как запись младшего байта результата происходит в M4.T3, т.е. посередине между M4.T2 и M4.T4. Видимо, авторы проверили, все норм работает, а то, что там попутно куда-то полетели данные в WZ, ну и фиг с ними)
    Последний раз редактировалось Titus; 17.11.2024 в 21:54.

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

    Reobne(24.11.2024), zebest(18.11.2024)

  10. #9

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

    По умолчанию

    Да уж, тема заглохла)

    Можно закрывать лавочку за отсутствием интересующихся)

  11. #10

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    5,043
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    327
    Спасибо Благодарностей получено 
    339
    Поблагодарили
    260 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Можно закрывать лавочку за отсутствием интересующихся)
    или за отсутствием у них времени на достаточное погружение в тему
    ведь чтоб задать правильный вопрос, надо знать б0льшую часть ответа
    да еще отрывочно излагаешь, надо бы оформить в статью нормальную
    Прихожу без разрешения, сею смерть и разрушение...

Страница 56 из 66 ПерваяПервая ... 525354555657585960 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Реверс МК-92
    от Случайность в разделе Программируемые калькуляторы
    Ответов: 58
    Последнее: 26.01.2026, 14:25
  2. Ответов: 33
    Последнее: 22.01.2026, 14:50
  3. Ответов: 1739
    Последнее: 09.01.2025, 10:55
  4. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  5. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46

Ваши права

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