User Tag List

Страница 10 из 14 ПерваяПервая ... 67891011121314 ПоследняяПоследняя
Показано с 91 по 100 из 131

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

  1. #91

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    еще раз: значит, сохраняй в тот момент, КОГДА состояние префиксов НЕВАЖНО (это даже и для примитивного sna несложно)
    А вот это кстати самый правильный вариант
    С уважением,
    Jerri / Red Triangle.

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

    Titus(25.11.2024)

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

  3. #92

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    ПРИМЕР в студию! ну хотя бы чисто теоретический, что такого ужасного и вселомающего может произойти конкретно ЗА ВРЕМЯ ВЫБОРКИ?
    именно с этого примера и началась эта тема, см. первый пост.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    еще раз: значит, сохраняй в тот момент, КОГДА состояние префиксов НЕВАЖНО (это даже и для примитивного sna несложно)
    Это невозможно, когда процессор остановлен и юзер отлаживает код и вдруг решил пойти на обед, он хочет сохранить текущее состояние в снэпшоте, а не выполнить N циклов и только потом сохранить состояние.

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

  4. #93

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    именно с этого примера и началась эта тема, см. первый пост.
    не подходит, не выполняется условие по исходным (а также не является примером "бага формата", а является примером ССЗБ)

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

    Можно конечно просто запретить пользователю останавливать выполнение на длинных инструкциях, например занимающих 30 кБ памяти на одну инструкцию, чтобы у него просто не было возможности установить точку останова и остановить процессор в нужный момент. Но это не совсем правильно.
    ЕЩЕ РАЗ:
    Цитата Сообщение от Lethargeek Посмотреть сообщение
    значит, сохраняй в тот момент, КОГДА состояние префиксов НЕВАЖНО (это даже и для примитивного sna несложно)
    - - - Добавлено - - -

    и да, что эта тема вообще делает в разделе "ZX Spectrum Software"? даже тут неверно определил
    Прихожу без разрешения, сею смерть и разрушение...

  5. #94

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    ЕЩЕ РАЗ: значит, сохраняй в тот момент, КОГДА состояние префиксов НЕВАЖНО (это даже и для примитивного sna несложно)
    повторюсь, это невозможно, т.к. в SZX формате изначально присутствует баг, который допускает сохранение некоррректных снэпшотов. Без добавления новых флагов это никак не решить.

    Проблема выше уже описывалась, возможно я недостаточно ясно её раскрыл. Попробую объяснить более понятным языком.

    Для случаев с длинными префиксами в SZX предлагается трактовать их как "invalid", и такое префиксное состояние помечать флагом ZXSTZF_EILAST, при этом предполагается, что процессор всегда останавливается на "valid" префиксе.

    Проблема возникает, когда эмулятор сохраняет снэпшот для такого "invalid" префикса, предполагая что после загрузки снэпшота выполнится префикс из текущей ячейки памяти и префикс восстановится. Для блокировки прерываний при этом взводится ZXSTZF_EILAST. Казалось бы всё хорошо. Но нет... После загрузки снэпшота и выборке следующей инструкции она может оказаться далеко не префиксом. Например если выборка приводит к триггеру переключающему память, как это происходит в адресном гейте TRDOS.

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

  6. #95

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

    По умолчанию

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

  7. #96

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

    По умолчанию

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

    Процессору ничего не мешает остановиться после выполнения инструкции префикса, но до начала выполнения префиксной инструкции. Прерывание - да, в таком состоянии процессор не примет, также как и после выполнения EI.

    Не зря же в SZX предусмотрен флаг для состояния после выполнения EI и "invalid" (или если более корректно выражаться - многократного префикса). Но, как описано выше, этот флаг не дает возможность всегда корректно сохранить снэпшот, т.к. подразумеват что при наличии многократного префикса состоянием префикса можно пренебречь, что на практике не всегда так...

    Цитата Сообщение от Titus Посмотреть сообщение
    Кроме того, сколько тебе встречалось на практике программ, где 30 кб префиксов, и кто-то захотел это отладить? Причем так отладить, что шагать пошагово все эти 30Кб) Думаю, что ни разу)
    когда отлаживал multicolor не так уж и редко, может не 30 кБ, но помню были случаи где-то 10-20 кБ, а может и больше 30 кБ. К сожалению уже не помню название демки.
    Последний раз редактировалось ZXMAK; 26.11.2024 в 02:29.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  8. #97

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

    По умолчанию

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

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

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

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

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    когда отлаживал multicolor не так уж и редко, может не 30 кБ, но помню были случаи где-то 10-20 кБ, а может и больше 30 кБ. К сожалению уже не помню название демки.
    Допустим, в мультиколоре у тебя стоит 20кб префиксов. Ну шагнул ты сразу в конец 20кб команды, и что такого? Это единая команда, в процессе нее не может произойти перерывания, нет смысла останавливаться.
    Смысла не больше, чем остановиться внутри любой команды типа LD HL,nnnn. Давай и в ней останавливаться после опкода $21.

  9. #98

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

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Мы опять переходим к обсуждению, которое было выше)
    В смысле остановиться? Процессор неостановим в середине команды. Его можно остановить только ресетом или остановкой тактирования. Как и в середине любой другой команды.
    Реакция на любые внешние раздражители в процессе выполнения команды (в том числе и сверхдлинной) у процессора отсутствуют.
    для эмулятора, где остановка не предусмотрена может и так. Я-же смотрю на это со стороны железа, которое при нажатии кнопки "цикл" запускает серию клоков до появления комбинации сигналов M1 & RD & MREQ. Другого варианта задетектить в железе начало цикла выборки инструкции вроде как нет. А для такой комбинации что префикс #DD, что #00 - одна инструкция.


    Цитата Сообщение от Titus Посмотреть сообщение
    Допустим, в мультиколоре у тебя стоит 20кб префиксов. Ну шагнул ты сразу в конец 20кб команды, и что такого? Это единая команда, в процессе нее не может произойти перерывания, нет смысла останавливаться.
    Смысла не больше, чем остановиться внутри любой команды типа LD HL,nnnn. Давай и в ней останавливаться после опкода $21.
    в одной из демок которую помню была длинная серия префиксов, потом nop и опять префиксы, прерывание срабатывало только если nop приходился на момент прерывания. ну и в таком роде, зачем там были длинные последовательности префиксов я не разбирался, меня интересовало чтобы прерывание приходило на нужном такте.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  10. #99

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

    По умолчанию

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

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

    jerri(26.11.2024)

  11. #100

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

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    повторюсь, это невозможно,
    ты вообще читаешь, что тебе пишут? и даже повторяют неоднократно! ЕЩЕ РАЗ, до полного просветления:
    Цитата Сообщение от Lethargeek Посмотреть сообщение
    сохраняй в тот момент, КОГДА состояние префиксов НЕВАЖНО
    почему вот у меня в эмуле (в котором тоже шаг отладчика - M1 любой, в том числе префиксы) и возможно, и (даже для sna) прекрасно работает?

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Проблема возникает, когда эмулятор сохраняет снэпшот для такого "invalid" префикса,
    а теперь, внимание, вопрос: а ЗАЧЕМ твой "эмулятор сохраняет снэпшот для такого "invalid" префикса"?
    выдумал сам себе проблему на ровном месте, кто ТЕБЕ в таком случае мешает НЕ сохранять?

    а в дебагере, допустим, пометить символом или цветом выделить ЗНАЧИМЫЙ префикс в такие моменты
    сразу видно - сохранение заблокировано, для разблокировки нужно сделать шаг (одного достаточно)

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    И баг формата SZX заключается в том, что "invalid" префикс который эмулятор видел на этапе сохранения, оказался вовсе не "invalid" префиксом, а очень даже "valid" префиксом. Однако информация о префиксном состоянии от предыдущего префикса после восстановления снэпшота потеряна, т.к. состояние префиксов в SZX не сохраняется. Поэтому после загрузки снэпшота процессор выполнит не префиксную команду, а команду без префикса, т.е. выполнит некорректный код.
    еще раз: НЕТУ никакого "бага формата", есть нарушение ТБ и простреленная нога
    Прихожу без разрешения, сею смерть и разрушение...

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

    Titus(26.11.2024)

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

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

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

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

Ваши права

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