User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Загружать SNA просто, но есть нюанс!

  1. #1

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

    Question Загружать SNA просто, но есть нюанс!

    Казалось бы, что может быть проще загрузки файла sna в эмулятор? Там ведь только память да регистры, да цвет бордюра (ну, еще IM+IFF и конфигурация страниц для 128k). Считывай, устанавливай модель, записывай данные, запускай. Но не всё так просто - в sna (а также в первой версии z80) не хранится кол-во тактов с начала кадра. Так что варианты на выбор:

    1) Считать, что запрос прерывания закончился до выполнения текущей команды. После загрузки снапа эмулировать остаток кадра (весь или частично, но проще весь) до следующего запроса.

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

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

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

    А как вы загружаете снапшоты в ваш эмулятор?
    Прихожу без разрешения, сею смерть и разрушение...

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

    Reobne(04.12.2021)

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

  3. #2

    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,605
    Спасибо Благодарностей отдано 
    254
    Спасибо Благодарностей получено 
    269
    Поблагодарили
    188 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  4. #3

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

    По умолчанию

    Цитата Сообщение от ZX_NOVOSIB Посмотреть сообщение
    Я када раньше загружал, то просто два раза мышкой клацал по иконке файла и всё
    не юродствуй, очевидно же, что вопрос был задан АВТОРАМ эмуляторов и о коде, а не клацании мышой
    Прихожу без разрешения, сею смерть и разрушение...

  5. #4

    Регистрация
    24.12.2006
    Адрес
    р.п. Маслянино, Новосибирская обл.
    Сообщений
    5,605
    Спасибо Благодарностей отдано 
    254
    Спасибо Благодарностей получено 
    269
    Поблагодарили
    188 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что поделать, я частенько юродствую
    ___________

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

    [bETA]mEN(29.06.2021)

  6. #5

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

    По умолчанию

    Наверное есть смысл иметь оба варианта при загрузке снапа. Хотя оба они не вполне корректные, но один из них точно должен будет более-менее корректно продолжить испонение. Может просто где-то опция - положение инта при загрузке снапа (в начале/в конце). Или грузить по-очереди - со второй попытки точно запустится.

    ЗЫ: Самое грустное, что если снап не грузится - непонятно что причина именно в положении инта. Но лично я не припоминаю таких ситуаций.
    Последний раз редактировалось Dexus; 30.06.2021 в 10:23.

  7. #6

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

    По умолчанию

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

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

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

  8. #7

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

    По умолчанию

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

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

    Lethargeek(30.06.2021)

  9. #8

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

    По умолчанию

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

  10. #9

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

    По умолчанию

    В Xpeccy такты при загрузке снапов остаются теми же что были до загрузки, т.е. можно сказать рандомный вариант, ну или произвольный, т.к. есть возможность дождаться нужного положения между интами, и в дебагере загрузить снап (что может быть даже удобно).

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

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

    Lethargeek(30.06.2021)

  11. #10

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

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    то есть сразу попытка прерывания происходит?
    да.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Расширение .sna
    от ondas в разделе Программирование
    Ответов: 10
    Последнее: 10.08.2023, 14:36
  2. Ответов: 34
    Последнее: 17.04.2014, 09:48
  3. Ответов: 3
    Последнее: 10.02.2014, 17:02
  4. Ответов: 4
    Последнее: 09.12.2012, 13:40
  5. Игры в sna
    от DRILL в разделе Игры
    Ответов: 17
    Последнее: 30.03.2010, 22:43

Ваши права

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