Сообщение от
ZXMAK
Если нельзя, тогда эмулятор должен зависать в мёртвом бесконечном цикле, если память заполнена префиксами.
Тут одно из двух - либо можно и тогда ничего зависать не будет, либо нельзя и прийдется зависать по дизайну.
Понятно, что зависание программы это однозначно неправильное поведение.
Поэтому поведение "останавливать выполнение, пока команда не закончится, нельзя" - это однозначный баг эмулятора.
Спектакулятор так не делает, вместо этого он использует костыль с вышеописанным так называемым "инвалидным префиксом" под которым подразумевается, что если если процессор переключился в префиксный режим, но далее следует еще один префикс, то первый префикс можно проигнорировать путём предсказания что после загрузки SZX процессор выполнит еще один префикс и снова перейдет в режим префикса. Но это костыль, такое прогнозирование с потерей информации о префиксе нельзя назвать корректным поведением.
Далеко не факт, что если спектакулятор прочитал из памяти по адресу PC префикс, то после сохранения/загрузки снэпшота, при выполении M1 цикла именно этот префикс по этому адресу и прочитается. Вполне может произойти переключение страниц памяти, например в ПЗУ TRDOS или в гейт другого устройства. И тогда так называемый "инвалидный префикс" внезапно станет далеко не инвалидным, а самым нормальным, но будет уже поздно, т.к. в снэпшоте информация о текущем режиме префикса не сохранена и процессор выполнит некорректную инструкцию, т.к. режим префикса в снэпшоте не был сохранен.