User Tag List

Показано с 1 по 10 из 803

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

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

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

    Регистрация
    16.05.2021
    Адрес
    г. Харьков, Украина
    Сообщений
    133
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Если процессор NMOS, то обязательно надо сделать тест. На других архитектурах не надо, т.к. от них нет реверса.
    Нужен конкретно zilog или nmos от других производителей тоже подойдут?

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

  3. #2

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

    По умолчанию

    Цитата Сообщение от Кря Кря Посмотреть сообщение
    Нужен конкретно zilog или nmos от других производителей тоже подойдут?
    А вот этого я не знаю. Я даже не знаю, с какой конкретно модели в проекте Z80 Explorer снимали схему.
    Но, думаю, стоит попробовать на любом NMOS.

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

    Цитата Сообщение от M80 Посмотреть сообщение
    Игрался с z80 и МК. Могу задавать любую частоту, могу анализировать всё что хош. Выставляйте условия.
    Задача такая. Если на спектруме, то по адресу $4000 разместить примерно такой код:

    DI
    LD A,0 (или $FF для второго теста)
    OR A
    NOP (загрузка кеша текущими значениями флагов)
    ADD HL,DE (или SCF) (на все 48Кб)
    В конце выполнения смотрим регистр флагов

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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а теперь внимание, вопрос: выставляется на основании чего?
    На основании кода команды. А именно:



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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    лишним выглядит, операция уже после декодирования известна
    Кому известна? Блоку декодирования команд и флагов) А АЛУ неизвестна. АЛУ как раз ориентируется на флаг, чтобы инвертировать аргумент.

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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    инверсия - НЕ унарный минус! (в дополнительном коде)
    Разумеется. Но по скольку АЛУ всегда делает ADC, а не ADD, то как раз инвертируя входящий перенос и получается вычитание. Вообще, т.к. блок АЛУ 4-битный, он не ориентируется на флаг C, он ориентируется на флаг H. Думаю, поэтому флаг полупереноса вообще и был сделан в процессоре в том числе, т.к. он фактически является связующим переносом между двумя отдельными действиями 4-битного АЛУ.

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

    Кстати, еще из интересного.

    Регистр WZ, выбирается всегда, когда на том или ином этапе выполнения команды не выбран другой регистр. Там так и стоит широкое условие, что если не AF, если не HL, DE и т.д., то тогда выбираем WZ.

    Пока с WZ тоже не разбирался, но думаю, он участвует во всех промежуточных операциях типа вычисления индекса, эффективного адреса относительных переходов и т.д.

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

    И еще кстати - я думаю, что то, что имеется в виду под регистром MEMPTR, от которого в 3 и 5 битах в регистре флагов остаются следы, на самом деле не существует. Это просто остаточный заряд на шинах HBUS/LBUS. А так как LBUS используется для формирования флагов, и во время формирования флагов 3 и 5 биты просто не презаряжаются, а остаются, как есть, то и получается соответствующий результат.

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

    Есть, конечно регистр PCR (так его назвали авторы Z80 Explorer). Может его и можно считать MEMPTR, т.к. через него инкрементируются 16-битные регистры типа PC, IR (7 бит).

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

    Если кому интересно, текущий набросок выглядит так:

    NMOS Z80 - sketch rev.14.pdf

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

    Barmaley_m(23.08.2024), Reobne(23.08.2024)

  4. #3

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Кому известна? Блоку декодирования команд и флагов) А АЛУ неизвестна. АЛУ как раз ориентируется на флаг, чтобы инвертировать аргумент.
    казалось бы, почему декодеру не сообщить тип операции в АЛУ напрямую
    а так выходит, что многие команды флаг по сути портят (для единственного штатного применения)
    ну, и под значениями флагов в доках понимается значение перед выполнением команды, а не в процессе
    Прихожу без разрешения, сею смерть и разрушение...

  5. #4

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а так выходит, что многие команды флаг по сути портят (для единственного штатного применения)
    Выходит, что так. Особенно с флагом полу-переноса.

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

    Цитата Сообщение от goodboy Посмотреть сообщение
    при сложении наверно надо еще записать #0000 в DE.
    Это не обязательно, т.к. мы смотрим флаг S, а на него ADD HL,DE не влияет не зависимо от аргументов.

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

    Цитата Сообщение от goodboy Посмотреть сообщение
    проверил на сером +2
    По твоему тесту сбоя не видать. У тебя NMOS процессор?

  6. #5

    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,289
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    202
    Спасибо Благодарностей получено 
    1,456
    Поблагодарили
    946 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    ADD HL,DE (или SCF) (на все 48Кб)
    при сложении наверно надо еще записать #0000 в DE.
    проверил на сером +2

    Код:
    add hl,de ; a=#00 ; ............... ; F=#44
                a=#FF ; ................; F=#84
    
    SCF ;       a=#00 ; ............... ; F=#45
                a=#FF ; ................; F=#AD
    отличия с эмулем есть !!!
    SpecEmu выдаёт #6C

    Последний раз редактировалось goodboy; 23.08.2024 в 15:51.

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

    Barmaley_m(23.08.2024), Titus(23.08.2024)

  7. #6

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

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    отличия с эмулем есть !!!
    SpecEmu выдаёт #6C
    Ну это из-за другой особенности, из-за CCF, я думаю.

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

    Погулял по транзисторной версии схемы, никакой утечки во всем блоке формирования флагов не нашел
    Значит недокументированное поведение CCF не связано именно с утечкой в блоке флагов.
    Надо будет посмотреть последовательно алгоритм выполнения CCF.

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

    Проследил всю цепочку выполнения CCF.
    Отличия от обычного NOP:
    1. В такте T5 (T4 + 1) копируется кешированный ранее флаг C во флаг H
    2. В такте T6 ничего не происходит
    3. В такте T7 (T4 + 3) копируется инверсная копия H во флаг C.
    4. В такте T8 (Т4 + 4) флаги выставляются на шину LBUS (кроме 3 и 5).

    Поэтому если какой-то глюк и есть в CCF, то его надо искать только в 3 и 5 флагах, т.е. в состоянии LBUS во время выполнения CCF.

    Но на LBUS я тоже не вижу никакого мусора. Туда копировался флаг F перед началом команды, значит флаги 3 и 5 должны были сохраниться.

    Словом, пока не вижу по схеме потенциальных глюков, откуда они взялись в тестах иностранных товарищей.

    А что касается команды SCF, то она работает абсолютно также, как CCF, за единственным исключением - в такте T5 флаг H очищается. Поэтому флаг H=0 при инверсии становится 1, и C становится равной 1.
    Последний раз редактировалось Titus; 23.08.2024 в 20:02.

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

    Barmaley_m(24.08.2024)

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

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

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

Похожие темы

  1. Ответов: 1739
    Последнее: 09.01.2025, 10:55
  2. Ответов: 32
    Последнее: 18.12.2024, 18:19
  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

Ваши права

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