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


Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

