User Tag List

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

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

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

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

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

    По умолчанию

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

    Обдумав варианты, решил остановиться на компромисном варианте. При остановке эмулятор пытается завершить префиксную инструкцию, если это не получается в течении большого количества тактов, то останавливает как есть. Таким образом минимизируется вероятность префиксного состояния, которое невозможно корректно сохранить SZX, в то-же время во время загрузки при наличии взведенного флага LAST_EI (который по документации взводится также и для префиксов), производится проверка предыдущего опкода в памяти, если это префикс, то восстанавливается префиксное состояние. Таким образом эмулятор по возможности сохраняет снэпшоты, которые однозначно будут загружены другими эмуляторами, но также при необходимости позволяет сохранить/восстановить и префиксное состояние. Правда такие снэпшоты не будут корректно работать на эмуляторах которые не поддерживают остановку в префиксном состоянии.

    Хотя может кому-то ситуация со всей памятью забитой префиксом покажется нереальной, но вот например тест, который переводит ZX Spectrum +2/3 в такой режим:
    Вложения Вложения
    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

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

    По умолчанию

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

  4. #3

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

    По умолчанию

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

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

  5. #4

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Например имеем последовательность DD DD 00. Прцессор выполнил первый префикс DD, затем эмулятор остановили и сохранили снэпшот, затем при загрузке при чтении следующего DD сработал гейт
    1) с чего бы ему сработать после загрузки, но не сработать после сохранения точно так же?
    2) ну, считай, что не выполнял первый тот DD, всё равно он равносилен нопу, откатить можно
    Прихожу без разрешения, сею смерть и разрушение...

  6. #5

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

    По умолчанию

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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    2) ну, считай, что не выполнял первый тот DD, всё равно он равносилен нопу, откатить можно
    при выполнении все модули уже эмулятора изменили состояние, увидев чтение из памяти, изменение такта и состояние процессора. Откатить всё проблематично - чтото обязательно сломается, причем оно может сломаться практически каждый раз раз при остановке, если эмулятор будет каждый раз при остановке откатывать выполнение.

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

  7. #6

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    до сохранения процессор с взведенным флагом префикса. После загрузки это состояние не сохраняется и процессор будет выполнять инструкцию как обычную не префиксную.
    ну при чём тут ФЛАГ, да еще такой, которого внешние устройства не видят?
    я спросил, с чего бы ГЕЙТУ сработать в одном случае и не сработать в другом?
    при совершенно одинаковых вводных-то

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

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

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

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

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

  8. #7

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    ну при чём тут ФЛАГ, да еще такой, которого внешние устройства не видят?
    я спросил, с чего бы ГЕЙТУ сработать в одном случае и не сработать в другом?
    при совершенно одинаковых вводных-то
    если об этом речь, то срабатывать гейту при отладочном чтении памяти как-то неправильно. Т.е. пока не выполнишь операцию точно не узнаешь, сработает он или нет. Полноценное чтение может например добавить лишнюю задержку для contended модели.

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

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

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

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

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

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

Ваши права

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