Интересно узнать статистику - какие эмуляторы умеют корректно загружать этот SZX снэпшот.![]()
Интересно узнать статистику - какие эмуляторы умеют корректно загружать этот SZX снэпшот.![]()
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
А есть такие вообще? Пока что на всех игра сбрасывается, включая Спектакулятор. Штош там за баг-то такой?
Баг в том, что если выполнение остановлено во время префиксной инструкции, то после сохранения в SZX теряется информация о префиксе, в SZX есть только флаг что была инструкция заблокировавшая прерывания, а какая именно информации нет. Впринципе это восстанавливается если прочитать предыдущую перед PC ячейку, ведь сам флаг что прерывания заблочены инструкцией говорит что процессор находится в состоянии в которое не мог попасть при возврате из подпрограммы или джампом, соответственно можно быть уверенным, что он выполнял предыдущий байт.
Я таким образом и пофиксил загрузку этого снэпшота в ZXMAK2.
Вручную можно пофиксить уменьшив PC на 1, но такой способ собъёт тайминг. Правильнее просто взвести соответствующий флаг префикса.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Так это не баг формата. Формат предполагает, что префиксные инструкции нельзя разрывать, они должны быть выполнены до конца перед сохранением снапа. Это баг эмулятора, сохранившего такой снап
- - - Добавлено - - -
Вообще цепочки префиксов прерывать конечно можно (и иногда нужно), нельзя прерывать команду после значимого префикса.
Последний раз редактировалось Spectramine; 11.11.2024 в 15:34.
кто сказал что нельзя? Я тоже поначалу подумал, что логичным решением было-бы завершить префиксную инструкцию перед сохранением инструкции.Однако тогда получится, что такой формат не всегда позволяет сохранить снэпшот. Если вся память будет заполнена префиксом, то в SZX невозможно будет сохранить такое состояние - попытка сохранения приведет к вечному ожиданию завершения префикса.
Второй момент - при при таком подходе сохранение SZX будет сбивать состояние процессора, заставляя его выполнить дополнительную инструкцию, таким образом сохраненный снэпшот будет битым, т.к. не будет отражать точное состояние процессора в момент сохранения.
Детальное изучение вопроса привело меня к тому, что флаг для этого состояния есть. Просто он не все случаи покрывает. Хотя, как я уже написал выше - этого флага достаточно, чтобы восстановить состояние префиксов, но требует дополнительного анализа памяти. По хорошему конечно было бы правильнее завести отдельные флаги для префиксов.
Последний раз редактировалось ZXMAK; 11.11.2024 в 15:26.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
ну почти
кстати, sna/z80 еще сохранять нельзя в цепочке ei, пока INTR не закончился; насчёт szx не помню, возможно, тоже- доктор, у меня болит, когда делаю вот так...
- не делайте так!
Прихожу без разрешения, сею смерть и разрушение...
PC устанавливается корректно, как был до сохранения. Проблема в том, что в SZX только один флаг для указания, что процессор находится в состоянии выполнения префикса из этого флага непонятно какой именно префикс выполняется. Но это можно узнать прочитав ячейку памяти PC-1 - если там #DD, значит взведен префикс IX, если #FD - IY, если чтото другое, значит просто блокировка прерывания инструкцией.
- - - Добавлено - - -
зачем, если текущий формат вполне позволяет это делать без расширений? Другое дело, что не каждый эмулятор сможет потом прочитать такой снэпшот, тем более не во всех вообще есть возможность остановить процессор во время выполнения префикса.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
В SZX нет флага, что процессор находится в состоянии выполнения префикса, есть флаг временного запрещения прерывания, актуальный после команды EI и некорректных префиксов #DD/#FD, как написано в описании формата. Т.е. для корректных префиксов #DD/#FD этот флаг неактуален.
- - - Добавлено - - -
Сам формат не предполагает прерывание команды после корректного префикса #DD/#FD.
- - - Добавлено - - -
Flag Meaning
ZXSTZF_EILAST The last instruction executed was an EI instruction or an invalid $DD or $FD prefix.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)