Важная информация

User Tag List

Страница 6 из 14 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 131

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

  1. #51

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,090
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    152
    Поблагодарили
    100 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Недоумеваю
    1. Геморрой развели из-за синтетической ситуации, когда ВСЯ память забита префиксами. Накой вообще такое сохранять? Оно и осмысленной работы не делает, и не отлаживается.
    2. Не припомню эмуляторов с отладчиками (за исключением онлайн игрушки со схемой z80), в которой шаги не по инструкциям, а по байтам. Какая от этого практическая польза?

    Бага нет.
    Если хочешь чтобы szx сохранял внутреннее состояние z80 с фазами опкодов - просто надо новый блок в формат добавить. Но никто кроме тебя его не будет поддерживать (потому что это не нужно). И да, придется свою имплементацию мутить, а не использовать libspectrum (хотя может libspectrum позволяет кастомные блоки сохранять и хэндлить - тогда вообще проблем нет).
    Последний раз редактировалось Dexus; 13.11.2024 в 08:59.

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

    jerri(13.11.2024)

  2. #52

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    В случае, когда вся память заполнена префиксом #DD или #FD, процессор перманентно всегда находится в префиксном режиме, не выходя из него. Поэтому это просто приведет к вечному зависанию эмулятора при попытке сохранить снэпшот. Такое поведение неправильное.
    1. Нельзя всю память заполнить префиксами. Все равно настанет адрес 0000, где находится ПЗУ, а там уже команда.
    2. Если же эмулируется клон, у которого вместо ПЗУ может встать ОЗУ, и тогда действительно можно заполнить всю память префиксами, то... такой снапшот никому не нужен, т.к. он никогда не будет работать на реале) Вся память в префиксах - это вечный зависон и отсутствие программы)

  3. #53

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    1. Нельзя всю память заполнить префиксами. Все равно настанет адрес 0000, где находится ПЗУ, а там уже команда.
    2. Если же эмулируется клон, у которого вместо ПЗУ может встать ОЗУ, и тогда действительно можно заполнить всю память префиксами, то... такой снапшот никому не нужен, т.к. он никогда не будет работать на реале) Вся память в префиксах - это вечный зависон и отсутствие программы)
    На +2А/+3 вместо ПЗУ может встать ОЗУ (чисто для информации).

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

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

  4. #54

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

    По умолчанию

    Цитата Сообщение от Spectramine Посмотреть сообщение
    На +2А/+3 вместо ПЗУ может встать ОЗУ (чисто для информации).

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

    И насчет синтетической ситуации с полностью заполненной индексным префиксом памятью - это не обязательно, даже просто выполнение цепочки индексных префиксов вполне может быть сохранено в SZX - после любого некорректного префикса, т.е. не последнего префикса в цепочке (корректного).
    возникает вопрос, как остановить выполение именно на таком так называемом "корректном" префиксе? Чтобы проверить корректный ли префикс или нет - нужно выполнить цикл, чтобы процессор прочитал ячейку памяти, однако если память заполнена префиксами, то на новом цикле префикс опять взведен и опять нужно проверить "корректный" ли префикс, для чего снова нужно выполнить цикл и так до бесконечности по кругу.

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

  5. #55

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Таким образом проверить "корректный" ли префикс невозможно.
    Если это твой эмулятор Z80, то ты можешь проверить все, что угодно.
    Сделай проверку, что если после выборки префикса DD/FD идет снова выборка префикса DD/FD, то помечай, что префикс 'некорректный', как ты его называешь.

  6. #56

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

    По умолчанию

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

  7. #57

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Если это твой эмулятор Z80, то ты можешь проверить все, что угодно.
    Сделай проверку, что если после выборки префикса DD/FD идет снова выборка префикса DD/FD, то помечай, что префикс 'некорректный', как ты его называешь.
    Так в том-то и дело, чтобы сделать проверку - нужно выполнить цикл, а после выполнения цикла нужно проверять уже новое состояние, т.е. нужно опять выполнить цикл и так до бесконечности.

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

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

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

  8. #58

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

    По умолчанию

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

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

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

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

  9. #59

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    и тогда если в текущий M1 операция от такого префикса не зависит - сохраняться можно в этот момент
    вот это условие проверить проблематично. Как узнать в новом M1 операция зависит от префикса или нет?
    Для этого нужно выполнить цикл, чтобы процессор полноценно сделал выборку опкода, тогда станет понятно зависит или нет.
    Но когда новый цикл M1 будет выполнен, то может оказаться что выбран новый опкод #DD/#FD, и требуется еще один цикл М1, чтобы проверить новое состояние. И так до бесконечности.

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

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

  10. #60

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

    По умолчанию

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

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

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

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

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

Ваши права

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