Чудеса в решете. Взял TZX оригинальной версии с WOS.com. Пробую на своем эмуляторе. Вижу проблему: при пускании пузырей вместо пузырей получается ерунда (снимок ерунды прилагается).
Все бы ничего, но: ZX-Emul, Spectemu, Glukalka, Spectrum, ZXMak дают ровно ту же грязь вместо пузырей (я брал версии, выложенные на том же WOS.com). Все эмуляторы, до которых мне удалось добраться ведут себя так же. Кроме FUSE -- у него все как положено.
Реализация Z80 у меня своя. И, наверное, не у всех перечисленных эмуляторов реализация одна и та же.
Пытаю далее. Подключил реализацию Z80 FUSE в свой эмулятор так, чтобы работал параллельно и каждой инструкции сравнивались регистры. Нашлось несколько ошибок у меня и во FUSE. Подправил у себя. В таком режиме запускаю игрушку - и все равно вижу ту же грязь.
Далее. Нашел инструкцию до выполнения которой FUSE нормально исполняет снапшот, созданный на моем эмуляторе (в формате Z80). Беру этот снапшот, выполняю одну эту инструкцию на своем эмуляторе (с параллельным процессором от FUSE), сохраняю снапшот - получаю грязь уже и во FUSE.
Сама инструкция -- условный переход -- ничего необычного. Лежит в простом цикле опроса клавиатуры. Прерывания в этот момент выключены.
Итого: реализации процессоров совпадают, прерываний нет, ошибка образуется после инструкции условного перехода, но на FUSE работает, а на остальных эмуляторах -- нет.
Не знает ли кто случайно, отчего это все так?
Снапшот игрушки, остановленной на проблемной инструкции так же прилагается.