User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 131

Тема: Баг формата SZX

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

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

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

    По умолчанию

    неправильно для чего? Для Z80 это правильно и возможно.

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

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

    Пока добавил при загрузке SZX проверку ячейки *(PC-1) если взведен флаг ZXSTZF_EILAST. Это хорошо работает. Но в теории возможна ситуации когда может привести к неправильной интерпретации состояния, как в рассмотреном выше случае с возвратом из NMI по RETI/RETN, в этом случае будет взведен флаг ZXSTZF_EILAST, что приведет к взведению флага IX/IY в загрузчике SZX, если *(PC-1) окажется равным #DD/#FD. Других случаев кроме возврата из NMI когда это может дать ошибочное состояние не вижу.

    Если предыдущая инструкция была LD A,#DD, это не приведет к взведению флага IX/IY, т.к. флаг ZXSTZF_EILAST будет сброшен. Он взводится только после выполнения #DD/FD префикса или EI.

    Написал Jonathan Needle с просьбой зарезервировать флаги ZXSTZF_IXLAST и ZXSTZF_IYLAST. Если зарезервирует, можно будет их использовать вместо анализа предыдущего байта по ZXSTZF_EILAST.
    Последний раз редактировалось ZXMAK; 12.11.2024 в 12:51.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

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

  3. #2

    Регистрация
    02.05.2015
    Адрес
    г. Таллин, Эстония
    Сообщений
    1,691
    Спасибо Благодарностей отдано 
    302
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    159 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    при срабатывании точки останова внутри префиксной инструкции процессор останавливается на следующей инструкции вводя пользоваля в замешательство, т.к. на этой интсрукции нет точки останова. Ну и как уже упоминалось выше, если вся память забита префиксом такое завершение инструкции приведет к зависанию эмулятора.
    А как отрабатывают цепочку префиксов железные отладчики, например, в Скорпе?
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  4. #3

    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    142
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    54
    Поблагодарили
    33 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    А как отрабатывают цепочку префиксов железные отладчики, например, в Скорпе?
    Я там выше уже писал, но, видимо, не совсем ясно выразился. Для случая конкретно SZX, а не поведения/эмуляции Z80 «вообще», какая разница? Вроде, конкретно для SZX есть две reference implementations. Ладно, одна без исходников (или нет?), но вторая-то с открытыми исходниками. Если снапшот ни в одной из них не работает, надо просто посмотреть, как сделано в reference implementation и повторить.

  5. #4

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    А как отрабатывают цепочку префиксов железные отладчики, например, в Скорпе?
    Железный отладчик (процессор) не может остановиться в середине цепочки префиксов, т.к. пока не закончится команда, прерывание сработать не может. А даже 100500 префиксов подряд - это для процессора одна команда.

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

    Bedazzle(12.11.2024)

  6. #5

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Железный отладчик (процессор) не может остановиться в середине цепочки префиксов, т.к. пока не закончится команда, прерывание сработать не может. А даже 100500 префиксов подряд - это для процессора одна команда.
    он и до конца цепочки ei остановиться не сможет, но это не повод считать всю цепочку одной командой
    Прихожу без разрешения, сею смерть и разрушение...

  7. #6

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    он и до конца цепочки ei остановиться не сможет, но это не повод считать всю цепочку одной командой
    Это все равно в процессоре по разному реализовано.
    Длинный префикс для процессора это все же одна команда.

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

    Кстати, технически для Z80 EI и DI - это одна и та же команда. Просто одна взводит флаг, другая сбрасывает.
    И та, и другая блокируют сигнал от триггера IFF1.

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


  8. #7

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Это все равно в процессоре по разному реализовано.
    Длинный префикс для процессора это все же одна команда.
    с чего бы? префикс тоже всего-навсего "что-то сбрасывает и взводит" - без оглядки на следующий опкод
    Прихожу без разрешения, сею смерть и разрушение...

  9. #8

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    с чего бы? префикс тоже всего-навсего "что-то сбрасывает и взводит" - без оглядки на следующий опкод
    Да, но технически это реализовано по-разному, и в разных частях процессора.

  10. #9

    Регистрация
    07.10.2006
    Сообщений
    1,731
    Спасибо Благодарностей отдано 
    257
    Спасибо Благодарностей получено 
    275
    Поблагодарили
    167 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Написал Jonathan Needle с просьбой зарезервировать флаги ZXSTZF_IXLAST и ZXSTZF_IYLAST. Если зарезервирует, можно будет их использовать вместо анализа предыдущего байта по ZXSTZF_EILAST.
    Это полумеры, для полноты картины ещё можно добавить флаги для информации о текущем машинном цикле, чтобы можно было разрывать команду даже внутри чтения кода операции. Ну и, само собой, после префиксов #CB, #ED, перед чтением операнда и в процессе его чтения.

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

    Reobne(13.11.2024)

  11. #10

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

    По умолчанию

    Цитата Сообщение от Spectramine Посмотреть сообщение
    Это полумеры, для полноты картины ещё можно добавить флаги для информации о текущем машинном цикле, чтобы можно было разрывать команду даже внутри чтения кода операции. Ну и, само собой, после префиксов #CB, #ED, перед чтением операнда и в процессе его чтения.
    может и так, но такая детализация обычному эмулятору ни к чему, т.к. в отладчике всеравно какой там такт инструкции, т.к. пользователь в отладчике видит только инструкции и на второй такт инструкции точку останова всеравно не поставит. А вот в средину префиксной инструкции может поставить.

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Это все равно в процессоре по разному реализовано.
    Длинный префикс для процессора это все же одна команда.
    Почему-же одна. Это много инструкций.

    Например: #DD,#FD, #23 - это три инструкции:
    1) переключение в режим подмены HL на IX
    2) переключение в режим подмены HL на IY
    3) INC HL
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Баг в W1793 (1818ВГ93).
    от xolod в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 18
    Последнее: 19.03.2019, 14:18
  2. Баг в depacker от hrust1.3?
    от moroz1999 в разделе Программирование
    Ответов: 65
    Последнее: 17.04.2014, 10:39
  3. [Atari]баг игры NINJA?
    от denpopov в разделе Atari
    Ответов: 13
    Последнее: 16.03.2014, 07:20
  4. BUG in SZX snapshots ???
    от VELESOFT в разделе Эмуляторы
    Ответов: 1
    Последнее: 12.09.2009, 13:28

Ваши права

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