С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ну почти
кстати, 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.
что значит "некорректный префикс"? У Z80 все префиксы корректные.
- - - Добавлено - - -
интересная информация, правда это актуально только при возвращении из NMI, а NMI не может сработать при выполнении префикса.
Таким образом проблема может возникнуть только если снэпшот сохранен сразу после возврата из NMI обработчика который модифицировал адрес возврата таким образом, чтобы в предыдущем байте был префикс.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
Некорректный - значит цепочечный, который не является корректной частью команды. В цепочке префиксов DD|FD все префиксы некорректные, кроме последнего.
Ещё раз, выдержка из описания формата SZX:
Flag Meaning
ZXSTZF_EILAST The last instruction executed was an EI instruction or an invalid $DD or $FD prefix.
Итого - вы, конечно, можете разрывать команду при записи SZX, записывая его после чтения корректного префикса #DD|#FD, но 1) это не корректно - не соответствует описанию формата, 2) ни один эмулятор, кроме вашего, не будет читать такой SZX, 3) и это не баг формата SZX.
Dexus(12.11.2024)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)