User Tag List

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

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

  1. #1

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

    По умолчанию Баг формата SZX

    Интересно узнать статистику - какие эмуляторы умеют корректно загружать этот SZX снэпшот.
    Вложения Вложения
    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

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

    По умолчанию

    А есть такие вообще? Пока что на всех игра сбрасывается, включая Спектакулятор. Штош там за баг-то такой?

  4. #3

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

    По умолчанию

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

    Я таким образом и пофиксил загрузку этого снэпшота в ZXMAK2.

    Вручную можно пофиксить уменьшив PC на 1, но такой способ собъёт тайминг. Правильнее просто взвести соответствующий флаг префикса.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  5. #4

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Баг в том, что если выполнение остановлено во время префиксной инструкции, то после сохранения в SZX теряется информация о префиксе, в SZX есть только флаг что была инструкция заблокировавшая прерывания, а какая именно информации нет. Впринципе это восстанавливается если прочитать предыдущую перед PC ячейку, ведь сам флаг что прерывания заблочены инструкцией говорит что процессор находится в состоянии в которое не мог попасть при возврате из подпрограммы или джампом, соответственно можно быть уверенным, что он выполнял предыдущий байт.

    Я таким образом и пофиксил загрузку этого снэпшота в ZXMAK2.

    Вручную можно пофиксить уменьшив PC на 1, но такой способ собъёт тайминг. Правильнее просто взвести соответствующий флаг префикса.
    Так это не баг формата. Формат предполагает, что префиксные инструкции нельзя разрывать, они должны быть выполнены до конца перед сохранением снапа. Это баг эмулятора, сохранившего такой снап

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

    Вообще цепочки префиксов прерывать конечно можно (и иногда нужно), нельзя прерывать команду после значимого префикса.
    Последний раз редактировалось Spectramine; 11.11.2024 в 15:34.

  6. #5

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

    По умолчанию

    Цитата Сообщение от Spectramine Посмотреть сообщение
    Так это не баг формата. Формат предполагает, что префиксные инструкции нельзя разрывать, они должны быть выполнены до конца перед сохранением снапа. Это баг эмулятора, сохранившего такой снап
    кто сказал что нельзя? Я тоже поначалу подумал, что логичным решением было-бы завершить префиксную инструкцию перед сохранением инструкции.Однако тогда получится, что такой формат не всегда позволяет сохранить снэпшот. Если вся память будет заполнена префиксом, то в SZX невозможно будет сохранить такое состояние - попытка сохранения приведет к вечному ожиданию завершения префикса.

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

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

  7. #6

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

    По умолчанию

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

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

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

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Второй момент - при при таком подходе сохранение SZX будет сбивать состояние процессора, заставляя его выполнить дополнительную инструкцию, таким образом сохраненный снэпшот будет битым, т.к. не будет отражать точное состояние процессора в момент сохранения.
    Нет, не будет, нужно сохранять снапшот после полного выполнения последней команды, либо во время цепочки префиксов, но не после значимого префикса.
    Последний раз редактировалось Spectramine; 11.11.2024 в 15:34.

  8. #7

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Баг в том, что если выполнение остановлено во время префиксной инструкции, то после сохранения в SZX теряется информация о префиксе
    а почему PC устанавливается некорректно ?

  9. #8

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

    По умолчанию

    ну почти
    - доктор, у меня болит, когда делаю вот так...
    - не делайте так!
    кстати, sna/z80 еще сохранять нельзя в цепочке ei, пока INTR не закончился; насчёт szx не помню, возможно, тоже
    Прихожу без разрешения, сею смерть и разрушение...

  10. #9

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    кстати, sna/z80 еще сохранять нельзя в цепочке ei, пока INTR не закончился; насчёт szx не помню, возможно, тоже
    В szx есть флаг временного запрещения прерывания, ZXSTZF_EILAST.

  11. #10

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

    По умолчанию

    Мнэээ, а о чём спор? Я, конечно, как Ходжа Насреддин, ничего не понимаю в эмуляторах, но я точно читал документацию для zx-state формат. И там ясно написано, если не читается и в Spectaculator и в FUSE, посмотрите в FUSE как надо записывать.

Страница 1 из 14 12345 ... ПоследняяПоследняя

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

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

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

Ваши права

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