Интересно узнать статистику - какие эмуляторы умеют корректно загружать этот SZX снэпшот. :)
Вид для печати
Интересно узнать статистику - какие эмуляторы умеют корректно загружать этот SZX снэпшот. :)
А есть такие вообще? Пока что на всех игра сбрасывается, включая Спектакулятор. Штош там за баг-то такой?
Баг в том, что если выполнение остановлено во время префиксной инструкции, то после сохранения в SZX теряется информация о префиксе, в SZX есть только флаг что была инструкция заблокировавшая прерывания, а какая именно информации нет. Впринципе это восстанавливается если прочитать предыдущую перед PC ячейку, ведь сам флаг что прерывания заблочены инструкцией говорит что процессор находится в состоянии в которое не мог попасть при возврате из подпрограммы или джампом, соответственно можно быть уверенным, что он выполнял предыдущий байт.
Я таким образом и пофиксил загрузку этого снэпшота в ZXMAK2.
Вручную можно пофиксить уменьшив PC на 1, но такой способ собъёт тайминг. Правильнее просто взвести соответствующий флаг префикса.
Так это не баг формата. Формат предполагает, что префиксные инструкции нельзя разрывать, они должны быть выполнены до конца перед сохранением снапа. Это баг эмулятора, сохранившего такой снап ;)
- - - Добавлено - - -
Вообще цепочки префиксов прерывать конечно можно (и иногда нужно), нельзя прерывать команду после значимого префикса.
кто сказал что нельзя? Я тоже поначалу подумал, что логичным решением было-бы завершить префиксную инструкцию перед сохранением инструкции.Однако тогда получится, что такой формат не всегда позволяет сохранить снэпшот. Если вся память будет заполнена префиксом, то в SZX невозможно будет сохранить такое состояние - попытка сохранения приведет к вечному ожиданию завершения префикса.
Второй момент - при при таком подходе сохранение SZX будет сбивать состояние процессора, заставляя его выполнить дополнительную инструкцию, таким образом сохраненный снэпшот будет битым, т.к. не будет отражать точное состояние процессора в момент сохранения.
Детальное изучение вопроса привело меня к тому, что флаг для этого состояния есть. Просто он не все случаи покрывает. Хотя, как я уже написал выше - этого флага достаточно, чтобы восстановить состояние префиксов, но требует дополнительного анализа памяти. По хорошему конечно было бы правильнее завести отдельные флаги для префиксов.
Повторюсь - вообще цепочки префиксов прерывать конечно можно (и иногда нужно), нельзя прерывать команду после значимого префикса.
- - - Добавлено - - -
Снапшот с командой, прерванной после значимого префикса, не сможет корректно прочитать ни один эмулятор, т.к. формат снапшота не предполагает прерывание в середине команды.
- - - Добавлено - - -
Нет, не будет, нужно сохранять снапшот после полного выполнения последней команды, либо во время цепочки префиксов, но не после значимого префикса.
ну почти
кстати, sna/z80 еще сохранять нельзя в цепочке ei, пока INTR не закончился; насчёт szx не помню, возможно, тожеЦитата:
- доктор, у меня болит, когда делаю вот так...
- не делайте так!
Мнэээ, а о чём спор? Я, конечно, как Ходжа Насреддин, ничего не понимаю в эмуляторах, но я точно читал документацию для zx-state формат. И там ясно написано, если не читается и в Spectaculator и в FUSE, посмотрите в FUSE как надо записывать.