О, это здорово, что разговор зашёл про жёлтые/зелёные платы. Дело в том, что тайминги Скорпиона по версии Unreal или Spectacular отличаются от таймингов Скорпиона по версии EmuZWin. Либо кто-то из них не прав, либо они имели в виду разные скорпионы! Вы случайно не в курсе, какие из вариантов Скорпиона подразумевают эти эмуляторы?
Я посмотрел мультиколор в Satisfaction - он работает, но с заметной помехой в двух первых эмуляторах, знающих о Скорпионе. Загрузить демку в EmuZWin я не смог. Кто-нибудь видел это дело на реале? насколько хорошо она работает? Следует ли это понимать так, что Unreal и Spectacular эмулируют "жёлтую" плату, а EmuZWin, если бы заработал, работал бы как "зелёная" плата?
---------- Post added at 12:33 ---------- Previous post was at 11:56 ----------
Я сохранил нужный эффект из Spectacular в *.z80 и загрузил в EmuZWin. Времянки по умолчанию ведут к помехам, но если поменять число тактов в строке с 224 на 228, получается почти идеальный эффект. Вы сказали, что этот эффект подгоняли под зеленый скорпион. Тогда у меня получается такая картина:
Есть "жёлтый" скорпион, с времянкой подобранной для совместимости с 48К: 69888 тактов в кадре, 224 такта в строке. "Жёлтого" скорпиона неплохо эмулируют Unreal и Spectacular.
Есть "зелёный" скорпион, с времянкой подобранной для совместимости со 128К: 70908 тактов в кадре, 228 тактов в строке. "Зелёного" скорпиона эмулирует EmuZWin.
У обоих видов скорпионов, если верить эмуляторам, одинаковая структура задержек (т.н. "Even M1"). Суть этих задержек (спасибо GriV) заключается в том, что для выполнения команд, попавших на нечётный номер такта процессора, требуется один дополнительный такт. Допустим, мы находимся на чётном такте. Тогда команды
XOR A; 4
RET NZ; 5
INC A; 5 - лишний такт, добавленный из-за того, что команда началась с нечётного такта
займут 14 тактов. Т.о., задержки могут, теоретически, затронуть любую команду и, в специально подобранном худшем случае могут замедлить программу на 25%. Но исполнение любой команды с чётным числом тактов всегда выравнивает счётчик тактов на чётное число.
Я поэкспериментировал с этими эмуляторами и по вопросу продолжительности выполнения прерываний. Насколько я могу понять, прерывание ведёт себя как самая обычная команда продолжительностью 19 тактов. Т.к. HALT фактически выполняет в цикле NOPы, прерывание в режиме IM 2 после HALT займёт те же 19 тактов что и обычно, вот только на Скорпионе после HALT+прерывания мы оказываемся на нечётном номере такта, т.е. всегда добавляем один такт задержки к последующей команде.





Ответить с цитированием