User Tag List

Страница 8 из 14 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 131

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

  1. #71

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    в каком "следующем"? ты ТЕКУЩИЙ проверяешь ПОСЛЕ префикса!
    "текущего" цикла нет. Есть предыдущий, есть следующий. Между ними и происходит сохранение или просмотр состояния в отладчике. Чтобы узнать что DD/FD префикс в предыдущем цикле был "инвалидный" нужно предсказать что прочитается из памяти по адресу PC. Полноценно это можно сделать только выполнив следующий цикл. Предсказать что прочитается и не выполнять следующий цикл по результату предсказания не получится.

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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    значит, делай с "отработкой логики устройств", в чём проблема-то?

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

  2. #72

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

    По умолчанию

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

  3. #73

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

    По умолчанию

    Я опять потерялся. Вот мы обсуждаем, в цепочке префиксов может ли придти прерывание, да когда отработает, да что устройство внешнее может банку памяти подменить... А разве в снап пишется инфа о подключенных устройствах?
    Тогда ведь это баг формата если пользаватель в эмуле может добавить, или убрать устройство? Может, оно пзу подменило, а пзу в снап не сохранено, и хз, куда улетит эмуляция при загрузке?
    Последний раз редактировалось Bedazzle; 14.11.2024 в 20:15.
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  4. #74

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Я опять потерялся. Вот мы обсуждаем, в цепочке префиксов может ли придти прерывание
    прерывание между префикса прийти не может, также как и между двумя EI. Но обрабатывается каждый префикс отдельно по одному, а не все разом.

    Цитата Сообщение от Titus Посмотреть сообщение
    А как ты вообще решаешь такой вопрос эмуляции Z80, что пока Z80 выполняет одну команду, он уже читает опкод другой команды? )
    эмулятор что читает то и обрабатывает

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

  5. #75

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    "текущего" цикла нет. Есть предыдущий, есть следующий.
    когда мы с ним уже работаем (вне зависимости от степени отработки) - он текущий

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Чтобы узнать что DD/FD префикс в предыдущем цикле был "инвалидный" нужно предсказать что прочитается из памяти по адресу PC. Полноценно это можно сделать только выполнив следующий цикл. Предсказать что прочитается и не выполнять следующий цикл по результату предсказания не получится.
    ё-моё, полноценно можно это сделать через полноценную ТОЛЬКО ВЫБОРКУ!
    ВЫПОЛНЯТЬ инструкцию НЕ требуется, приращение pc НЕ требуется
    изменение в эмуле аппаратного контекста НЕ требуется

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

    не тупи, это ЭМУЛЬ, перед выборкой всё ДЕТЕРМИНИРОВАНО!
    Прихожу без разрешения, сею смерть и разрушение...

  6. #76

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

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    А разве в снап пишется инфа о подключенных устройствах?
    https://www.spectaculator.com/docs/zx-state/intro.shtml

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

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Может, оно пзу подменило, а пзу в снап не сохранено,
    я недавно сконвертил игрушку (для запуска из ROM, InterfaceII) - работает.

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

    Bedazzle(14.11.2024)

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

  8. #77

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    У Z80 такой возможности нет.
    Z80 тоже имеет конвейер)

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

  9. #78

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

    По умолчанию

    Спасибо! Век - живи, век - учись...
    Heavy on the disasm
    Eric and the disasm
    Mask 3: Venom strikes disasm
    Bard's disasm

  10. #79

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    ё-моё, полноценно можно это сделать через полноценную ТОЛЬКО ВЫБОРКУ!
    ВЫПОЛНЯТЬ инструкцию НЕ требуется, приращение pc НЕ требуется
    изменение в эмуле аппаратного контекста НЕ требуется
    Главная причина, почему выборка опкодов для анализа без выполнения инструкции невозможна, связана с состоянием внешней схемы и стейт-машин, которые реагируют на действия процессора. Для внешней схемы каждая выборка Z80 из памяти - это реальная операция с шиной, которая изменяет её состояние.

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

    Внешняя логика реагирует на сигналы процессора (MREQ, RD, IOREQ, адресная шина, шина данных и т.д.), поэтому даже два одинаковых обращения к одной и той же ячейке памяти происходят в разных состояниях схемы и могут приводить к разным результатам.

    Если вы выполняете "имитацию" выборки для анализа, то схема уже перейдёт в изменённое состояние. Когда процессор начнёт реальное выполнение, его взаимодействие с шиной нарушит ожидаемую последовательность действий, что приведёт к сбоям в тайминге и работе внешних устройств.

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

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    не тупи, это ЭМУЛЬ, перед выборкой всё ДЕТЕРМИНИРОВАНО!
    Ваше утверждение о полной детерминированности эмуляции некорректно. Даже в эмуляторе есть недетерминированные факторы, такие как пользовательский ввод, время прихода внешних сигналов (например, от дисплея, звуковой карты, системного таймера), а также поведение схемы при загрузке снэпшота.

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

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

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

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

    Цитата Сообщение от Titus Посмотреть сообщение
    Если эмулятор это не отрабатывает, зачем так педантично стремиться другие вещи отследить типа пререключения страниц в момент выборки предсказания префикса)
    А зачем эмулировать конвейер, если его наличие или отсутствие никак на эмуляцию не влияет?

    С режимом префикса совсем другая ситуация. Если снэпшот сохранён в момент, когда процессор находился в режиме префикса, то отсутствие информации о текущем состоянии префикса в снэпшоте приведёт к его сбросу. Это может нарушить корректное выполнение программы после восстановления, поскольку процессор окажется в неверном состоянии.

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

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

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

  11. #80

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    А зачем эмулировать конвейер, если его наличие или отсутствие никак на эмуляцию не влияет?
    Как зачем?
    Допустим, выполняется RET.
    В эмуляторе у тебя прочитается опкод C9, затем процессор перейдет по адресу возврата.
    А на реале прочитается и следующий за C9 байт. А там, допустим, уже размещен какой-то порт, спроецированный в память, чтение которого приводит к каким-то действиям.
    Понятно, что на оригинальном спектруме такого нет, но мало ли какие клоны бывают. Да и вообще, если эмулируется не спектрум, а другая система на Z80.

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

    Или более реалистичный пример.

    Ты выполняешь код, находящийся на границах двух страниц памяти, одна из которых медленная, другая быстрая.
    C9 находится в последней ячейке медленной страницы.
    Таким образом, если ты читаешь из памяти только C9, то тайминги одни, а если конвейер прочел и следующий байт из следующей быстрой страницы памяти, то тайминги другие.

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

    Reobne(16.11.2024)

Страница 8 из 14 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя

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

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

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

Ваши права

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