Важная информация

User Tag List

Страница 21 из 29 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 288

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

  1. #201
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,810
    Спасибо Благодарностей отдано 
    1,374
    Спасибо Благодарностей получено 
    1,989
    Поблагодарили
    756 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    Ещё забавно будет для регистровой пары IR...
    Что именно будет забавно для IR? )

  2. #202
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,862
    Спасибо Благодарностей отдано 
    90
    Спасибо Благодарностей получено 
    242
    Поблагодарили
    176 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Например, интересно, чем инкрементируется R (раз на флаги не влияет, то наверное не с помощью АЛУ), и почему именно 7 бит.

  3. #203
    Master
    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    884
    Спасибо Благодарностей отдано 
    44
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    137 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    или я что то пропустил или IR инкрементируется той же схемой что и PC ?

  4. #204
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,810
    Спасибо Благодарностей отдано 
    1,374
    Спасибо Благодарностей получено 
    1,989
    Поблагодарили
    756 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Например, интересно, чем инкрементируется R (раз на флаги не влияет, то наверное не с помощью АЛУ), и почему именно 7 бит.
    Цитата Сообщение от AlexG Посмотреть сообщение
    или я что то пропустил или IR инкрементируется той же схемой что и PC ?
    Для тех, кто не прочитал мой обзор - говорю кратко)
    Конечно тем же самым методом, что и PC)
    Первые два такта команды - это выдача PC на шину и инкремент,
    Следующие два такта команды - это выдача IR на шину и инкремент с ограничением до 7 бит.
    Причем, даже описал, как происходит этот инкремент.
    Сперва регистровая пара пересылается в регистр PCR, а затем уже инкрементированная пересылается в PCR2, а уже из него обратно в регистровый файл.

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

    AlexG (05.09.2024), b2m (05.09.2024), Barmaley_m (05.09.2024)

  6. #205
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,432
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    27
    Поблагодарили
    21 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    интересно было бы посмотреть циклограмму выполнения команд из DD/FD префикса
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  7. #206
    Master
    Регистрация
    27.11.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    884
    Спасибо Благодарностей отдано 
    44
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    137 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Поработаю оракулом: оные префиксы работают как однобайтные команды аля NOP
    ПС: вот только как они взаимодествуют с INT NMI - надо "смотреть"

  8. #207
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,810
    Спасибо Благодарностей отдано 
    1,374
    Спасибо Благодарностей получено 
    1,989
    Поблагодарили
    756 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexG Посмотреть сообщение
    Поработаю оракулом: оные префиксы работают как однобайтные команды аля NOP
    Я думаю, @ZXMAK интересуют не префиксы, а циклы доступа к памяти по индексам)

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

    Цитата Сообщение от AlexG Посмотреть сообщение
    ПС: вот только как они взаимодествуют с INT NMI - надо "смотреть"
    Никак не взаимодействуют. Прерывания могут быть только после окончания выполнения команды.

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

    Кстати, если кто-нибудь сидит на иностранных форумах, на которых обсуждают недокументированные особенности Z80 и всякие другие нюансы работы, киньте им ссылочку сюда.

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

    Похоже, вот тут активно обсуждают баги Z80. Киньте им ссылку, если кто-то там зареган.

  9. #208
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,810
    Спасибо Благодарностей отдано 
    1,374
    Спасибо Благодарностей получено 
    1,989
    Поблагодарили
    756 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Разбор выполнения базовой 4-х тактной команды

    Стандартный цикл выполнения однобайтовой 4-х тактовой команды (без торможения памяти по WAIT):

    Диаграммы (огромная простыня):

    Скрытый текст

    [свернуть]

    Для сравнения взяты две команды: LD D,L и ALU A,L

    • В такте T3 всегда активен SEL_ACC.
    • В такте T3.2.3 (Т3.2/Т4.1) разрывается связь между шинами HBUS и LBUS
      В этом же такте активен R_H, обьединяя шины REG.H и HBUS (для чтения регистра A).
      (Для LD) В этом же такте активен R_L (т.к. REQ_FLAGS = 0), обьединяя шины REG.L и LBUS (для чтения регистра F).
      (REQ_FLAGS = 0 означает, что предыдущая команда не меняла флаги, и надо загрузить флаги из регистра F).
    • По переднему фронту такта T3.3 (Т4.1) сбрасывается REQ_FLAGS.
      В такте Т3.3 (Т4.1) активен SEL_AF (выбор регистра AF).
      (Для ALU) В этом же такте активны сигналы RL_WR и WRITE_REG (т.к. REQ_FLAGS = 1), по которым содержимое флагов с линии LBUS записывается в регистр F.
    • В такте T4 активен SEL_REG_SRC, инициируя выбор регистра источника.
    • В такте T4.2.3 (T4.2/T5.1) активны сигналы R_L (работа с младшей половиной регистровой пары) и READ_REG.
    • В такте T4.3 (T5.1) активен сигнал SEL_HL по которому читается значение HL на шину REGBIT0..15, но на обе шины LBUS и HBUS попадает только младшее значение регистра - L, т.к. команда работает с младшей половиной регистровой пары (активен R_L, а не R_H).

      Работа с АЛУ:
    • В такте T3 активен REQ_ALUB1, по которому в такте T3.2.3 (T3.2/T4.1) активен HBUS_TO_ALUBUS, по которому содержимое регистра A поступает на ALUBUS. А в такте T3.3 (T4.1) содержимое ALUBUS (регистр A) поступает на ALUB.
      (Для ALU) В такте Т3 по SEL_ACC активен сигнал REQ_ALUA, по которому в такте T3.3 (T4.1) активен ALUBUS_TO_ALUA, по которому содержимое ALUBUS (регистр A) поступает на ALUA.
    • В такте T4 активен REQ_ALUB2, по которому в такте T4.2.3 (T4.2/T5.1) активен HBUS_TO_ALUBUS, по которому содержимое регистра L поступает на ALUBUS. А в такте T4.3 (T5.1) содержимое ALUBUS поступает на ALUB.
      (Для LD) В такте T4.3 (T5.1) на шину ALUA принудительно выставляется 0.
    • В такте T4.3.4 (Т5) активен ALU_SEL_LOW. Таким образом на ALU подаются младшие 4 бита аргументов.
      В такте T4.5.6 (Т6) не активен ALU_SEL_LOW. Таким образом на ALU подаются старшие 4 бита аргументов,
      По спаду ALU_SEL_LOW (Т6.1) в регистре REG_ALU_LOW защелкиваются младшие 4 бита результата.
    • (Для ALU) По переднему фронту T1 (T5) устанавливается флаг REQ_FLAGS.
    • (Для LD) В такте T2 (T6) активны SEL_REG_DST и SEL_REG_DST_R, по которым в такте T6.3 (Т7.1) выбирается регистровая пара приемник DE (активен SEL_DE), а также активен RH_WR (запись в старший байт D) и WRITE_REG, по которым содержимое D записывается в регистровый файл.
      (Для ALU) В такте Т2.3 (Т7.1) активны RH_WR, WRITE_REG и SEL_AF, по которым содержимое AF записывается в регистровый файл.
      (Для ALU) В такте Т2.3 (Т7.1) устанавливается SET_PV_Z_S, по которому формируются флаги и защелкиваются в буферном регистре флагов.
      (Для ALU) В такте Т3.2.3 (Т7.2/Т8.1) активен SEL_FLAGS по которому данные из буферного регистра флагов записываются на шину LBUS (биты 5 и 3 шины LBUS не меняются, на них остается предыдущее содержимое - значение регистра A).
      (Для ALU) В такте Т3.3 (Т8.1) активны сигналы RL_WR и WRITE_REG (т.к. REQ_FLAGS = 1), по которым содержимое флагов с линии LBUS записывается в регистр F.


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

    Описание работы ADD A,L и LD D,L простыми словами:

    Пояснение: ALUA и ALUB - это два аргумента ALU.

    • В такте T4 регистровая пара AF всегда читается на шину HBUS/LBUS, независимо от кода команды, а содержимое регистра A на всякий случай загружается в ALUB.
      Для ADD A,L в этом же такте регистр A загружается в ALUA.
    • В такте T5 регистр L загружается в ALUB (перезаписывая ранее загруженное значение A). А для команды LD D,L обнуляется значение ALUA.
    • В такте T6 на шине HBUS и LBUS (они в этом такте запараллелены) появляется значение результата работы ALU. Для ADD A,L - это A + L; для LD D,L - это 0 + L.
    • В такте T7 результат операции записывается с шины HBUS в регистр A (для ADD A,L), или в регистр D (для LD D,L). В этом же такте формируются флаги для ADD A,L в буферном регистре флагов.
    • Для ADD A,L в такте T8 флаги из буферного регистра флагов через LBUS записываются в регистр F (кроме битов 5 и 3, в которых сохраняется предыдущее содержимое, а имено значение регистра A). Надо заметить, что запись флагов в регистр F совпадает с чтением регистра AF следующей команды, и делается это одновременно.
    Последний раз редактировалось Titus; 07.09.2024 в 14:08.

  10. #209
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,810
    Спасибо Благодарностей отдано 
    1,374
    Спасибо Благодарностей получено 
    1,989
    Поблагодарили
    756 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Тадам! И по традиции, тема с подробным разбором не заходит)

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

    Особенности работы команды NOP:

    Не смотря на внешнее бездействие данной команды, внутренне проводится некоторая работа.
    Как и во всех командах, вначале регистр флагов F кешируется, а регистр A засылается в оба аргумента АЛУ.
    Далее, т.к. команда не использует аргументы, результатом работы АЛУ является A + A, но результат никуда не попадает.
    Вот и все.

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

    AlexG (07.09.2024), Barmaley_m (08.09.2024), CodeMaster (08.09.2024)

  12. #210
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,810
    Спасибо Благодарностей отдано 
    1,374
    Спасибо Благодарностей получено 
    1,989
    Поблагодарили
    756 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию Команды LD I/R,A:

    Команды LD I/R,A:

    Не смотря на то, что большинство команд пересылок проходят через АЛУ (посредством сложения с нулем), есть группа команд, для которых сделаны специальные патчи, позволяющие модифицировать этот маршрут. Одна из таких команд LD I/R,A.

    Команда выполняется (не считая префикса) за 5 тактов вместо 4. Это необходимо для того, чтобы приостановить конвейер выборки следующей команды и регенерацию памяти, освободив тем самым в 5-м такте доступ к дополнительному регистровому файлу, в котором расположен регистр IR.

    В такте T4.2 содержимое ARGB (аргумент B), в котором находится только что загруженное значение регистра A выдается на HBUS в обход АЛУ.

    В такте T4.3 (T5.1) активен SEL_IR, по которому в регистр I или R записывается значение регистра A с шины HBUS.

    Интересно то, что 5..3 биты кода команды кодируют регистр, в который происходит запись точно таким же способом, как это делают команды, работающие с регистрами общего назначения. 010 - это регистр I, 011 - это регистр R. При этом сама информация о коде регистра используется лишь частично, а различие между I и R происходит по биту 3, как происходит выбор младшей и старшей части любого другого регистра общего назначения.

    Также интересно, что на самом деле команда LD I/R,A работает даже быстрее (5 тактов), чем простая пересылка типа LD r1,r2 (7 тактов). Оставшиеся 3 такта АЛУ дорабатывает вхолостую.

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

    Barmaley_m (08.09.2024)

Страница 21 из 29 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 1734
    Последнее: 25.08.2024, 19:42
  2. Ответов: 29
    Последнее: 15.11.2023, 09:35
  3. Реверс-инжиниринг игры Boovie
    от Oleg N. Cher в разделе Программирование
    Ответов: 41
    Последнее: 09.01.2022, 23:07
  4. Реверс МК-92
    от Случайность в разделе Программируемые калькуляторы
    Ответов: 55
    Последнее: 24.04.2021, 23:47
  5. Реверс инжиниринг печатной платы
    от Filin в разделе Несортированное железо
    Ответов: 36
    Последнее: 11.03.2018, 22:46

Ваши права

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