User Tag List

Страница 75 из 81 ПерваяПервая ... 717273747576777879 ... ПоследняяПоследняя
Показано с 741 по 750 из 803

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

  1. #741

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    я вот о чём:
    А в чем проблема-то? Я не могу догадаться, что тебя смущает) Ну да, не очень ровные оранжевые линии вокруг циферок)

  2. #742

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А в чем проблема-то? Я не могу догадаться, что тебя смущает
    кажется понял, /BASE_SET активирует дешифратор стандартных опкодов. Т.к. до этого был CB опкод, то сигнал был не активен, а на префиксе переключился в активное состояние, т.к. инструкция обрабатывается стандартным декодером. Ладно, с этим сигналом понятно.

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

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

    Если на первых двух полутактов еще более-менее понятно - можно понять какой сейчас префикс, то вот на последнем полутакте выборки флаги уже сброшены. Новые флаги у процессора включатся на следующем полутакте. Поэтому в самый важный момент, когда процессор захватывает опкод нет информации о текущем состоянии префиксов...
    Последний раз редактировалось ZXMAK; 25.12.2024 в 23:59.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  3. #743

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

    По умолчанию

    Опкод недействительный всего пол-такта, между окончанием действия предыдущего опкода и выборкой следующего.
    Эти пол-такта M1.T3.1 (если нет торможения памяти). В этом же полутакте идет установка режима выборки опкода.
    Таким образом, с M1.T3.2 уже в регистре опкода защелкнут и действителен новый опкод, и уже в регистрах префиксов установлен выбор нужного набора команд или префикса.
    Во все остальное время регистр опкода действителен и декодируется в соответствии с текущим режимом.
    Если режим BASE_SET то по ПЛМ базового набора
    Если режим ED_SET или CB_SET то по ПЛМ их наборов

  4. #744

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Опкод недействительный всего пол-такта, между окончанием действия предыдущего опкода и выборкой следующего.
    Эти пол-такта M1.T3.1
    это что, получается, что в промежуток от M1.T1.1 до M1.T2.2 процессор продолжает выполнять предыдущую операцию?

    Цитата Сообщение от Titus Посмотреть сообщение
    Таким образом, с M1.T3.2 уже в регистре опкода защелкнут и действителен новый опкод, и уже в регистрах префиксов установлен выбор нужного набора команд или префикса.
    Это конечно хорошо, но как в M1.T3.1 предсказать какие флаги префиксов будут активированы на M1.T3.2?

    Я хочу отобразить правильно дизассемблированную инструкцию в момент когда ещё идет её выборка, т.е. в M1.T3.1, а не когда она начинает обрабатываться в M1.T3.2...

    По каким сигналам в полу-такте M1.T3.1 можно узнать как процессор будет декодировать текущий опкод?

    Проверил еще раз, вот выборка:

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



    [свернуть]


    1) С самими префиксами ок, по /BASE_SET==0 можно определить что ED/CB/DD/FD - это префикс.

    2) C ED46 ок - по /ED_SET==0 можно определить, что 46 - это опкод с префиксом ED

    3) С DD210000 тоже ок - по /IDX_SET==0 и /BASE_SET==0 можно определить что 21 - это базовая операция с префиксом DD

    4) А вот с CB40 возникает проблема - все перечисленные флаги в M1.T3.1 не активны, /CB_SET станет активным только на следующем полу-такте M1.T3.2. Как понять что 40 это опкод для префикса CB в M1.T3.1 (когда еще идет выборка)?

    Цитата Сообщение от Titus Посмотреть сообщение
    Эти пол-такта M1.T3.1 (если нет торможения памяти).
    а если будет торможение wait, опкод может быть выбран не в момент перехода из M1.T3.1 в M1.T3.2?

    Проверил - выборка похоже всегда идет в M1.T3.1. Если активируется WAIT, то процессор просто откладывает M1.T3.1 на потом:

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



    [свернуть]
    Последний раз редактировалось ZXMAK; 26.12.2024 в 02:43.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #745

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    это что, получается, что в промежуток от M1.T1.1 до M1.T2.2 процессор продолжает выполнять предыдущую операцию?
    Приехали. Конечно)
    У нас же конвейер. Новая операция начинается с поступлением нового опкода в M1.T3.2.

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Это конечно хорошо, но как в M1.T3.1 предсказать какие флаги префиксов будут активированы на M1.T3.2?

    Я хочу отобразить правильно дизассемблированную инструкцию в момент когда ещё идет её выборка, т.е. в M1.T3.1, а не когда она начинает обрабатываться в M1.T3.2...
    Процессору Z80 предсказывать это не нужно. Для него в этот полутакт регистр опкода недействителен и все. Идут переходные процессы.

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Проверил - выборка похоже всегда идет в M1.T3.1. Если активируется WAIT, то процессор просто откладывает M1.T3.1 на потом:
    Да

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

    Я понял, ты все вынашиваешь ту свою идею, что процессор можно остановить в любой такт, и надо иметь возможность его состояние сохранять в любой момент, в том числе в середине последовательности префиксов)

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

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    4) А вот с CB40 возникает проблема - все перечисленные флаги в M1.T3.1 не активны, /CB_SET станет активным только на следующем полу-такте M1.T3.2. Как понять что 40 это опкод для префикса CB в M1.T3.1 (когда еще идет выборка)?
    Если тебе прям очень-очень надо это знать, то это состояние триггера T2956/T2922.

    Сигналы выбора наборов ED_SET, IDX_SET, BASE_SET устанавливаются уже к M1.T3.1
    Тогда как CB_SET задерживается на пол-такта.
    Судя по схеме, это сделано для того, чтобы он за эти пол-такта:
    1. Заблокировал сигнал BASE_SET
    2. Активизировал сигнал SEL_MASK

    SEL_MASK - это сигнал генерации маски битовых операций для АЛУ, которая применяется в BIT/SET/RES.

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

    Barmaley_m(26.12.2024), ZXMAK(26.12.2024)

  6. #746

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Если тебе прям очень-очень надо это знать, то это состояние триггера T2956/T2922.
    работает Я назвал сигнал на затворе T2922 как /CB_SETE (E от early):

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

    [свернуть]


    теперь задача определить моменты, когда процессор читает опкод

    Я правильно понимаю, что опкод всегда читается в M1.T3.1 и это состояние всегда соответствует CLK=0? (точнее в момент posedge CLK, что соответствует переходу из M1.T3.1 в M1.T3.2).

    Пробовал давать WAIT, если WAIT заканчивается на CLK=1, то процессор продолжает ожидание до CLK=0.
    Тоесть можно считать, что выборка опкода происходит всегда при M1=1 && T3==1 && CLK==0?
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  7. #747

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Тоесть можно считать, что выборка опкода происходит всегда при M1=1 && T3==1 && CLK==0?
    Чтение начинается раньше.
    Память может выставлять данные на шину данных уже M1.T2.2.
    И начиная с этого времени шина данных уже проброшена и прописывается во внутренний регистр READ_DATA.
    И все это происходит в течении цикла ожидания, если он есть, и в M1.T3.1 тоже.
    Начиная с M1.T3.1 внутренняя шина /DBUS начинает записываться в регистр опкода. Но при этом эта же шина на этот полу-такт подтягивается к +5, таким образом в этом полутакте в регистр опкода прописывается 0.
    Начиная с M1.T3.2 регистр READ_DATA, в котором уже считается устоявшимся ответ от памяти, пробрасывается на шину /DBUS, и соответственно через нее в регистр опкода.
    При этом одновременно регистр READ_DATA отключается от внешней шины.
    Таким образом, мы можем считать, что по фронту M1.T3.2 внешняя шина данных защелкивается в регистре опкода.
    При этом за пол-такта до этого регистр опкода обнуляется.
    И, наконец, по M1.T3.3 шина /DBUS отключается от регистра опкода, и он продолжает хранить свое значение дальше.

    Но это я описал только момент выборки стандартного опкода.
    Выбор опкода в командах DD/FD/CB идет в M3.T3 и вообще в другом полу-такте.

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

    ZXMAK(26.12.2024)

  8. #748

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    И все это происходит в течении цикла ожидания, если он есть, и в M1.T3.1 тоже.
    да, я это заметил, когда пробовал wait включать во время выборки.


    Правильно ли понял, что независимо от цикла M, по T3 всегда идет выборка из памяти, причем опкод и его данные читаются в T3.1, а при выполнении опкода данные читаются в T3.2? И кстати, почему чтение опкода и его данных занимает 3 полу-такта, а чтение данных при выполнении опкода 4 полу-такта?

    Если это так, можно ли по какому-то сигналу отличить эти два случая, т.е. когда идет выборка опкода и его данных, а когда идет выборка данных при выполнении инструкции
    Последний раз редактировалось ZXMAK; 26.12.2024 в 16:09.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  9. #749

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Правильно ли понял, что независимо от цикла M, по T3 всегда идет выборка из памяти, причем опкод и его данные читаются в T3.1
    Нет, не каждый M-цикл порождает цикл чтения-записи памяти. А только по необходимости.

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    И кстати, почему чтение опкода и его данных занимает 3 полу-такта, а чтение данных при выполнении опкода 4 полу-такта?
    Цикл чтения опкода в M1 укорочен, видимо, это связано с тем, что в M1 надо было упихнуть и цикл чтения опкода, и цикл регенерации памяти, иначе они бы не поместились, если бы были длиннее.

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Если это так, можно ли по какому-то сигналу отличить эти два случая, т.е. когда идет выборка опкода и его данных, а когда идет выборка данных при выполнении инструкции
    Если у тебя активен LOAD_IR, значит идет загрузка регистра опкода.

  10. #750

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Нет, не каждый M-цикл порождает цикл чтения-записи памяти. А только по необходимости.
    тоесть если T3=1 значит идет чтение/запись памяти?
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 75 из 81 ПерваяПервая ... 717273747576777879 ... ПоследняяПоследняя

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

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

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

Ваши права

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