Эмулятор может быть вполне адекватным. Всё зависит от того как сделана визуализация. Если так как выше описано, т.е процессор в каждом каждом кадре надолго прекращает прогон и начинает визуализацию всего экрана это одно. А если визулизация "размазана тонким слоем" по времени кадра, т.е после прогона каждых 10 команд Z80, мы визуализируем маленький кусочек экрана (но не весь) это другое.Сообщение от zebest
И совсем третье, если визуализация сделана грамотно, когда все команды Z80 пишущие в экран отлавливаются (но не визулизируются сразу, а запоминаются), а затем после прогона очередноё 6000-ной команды все изменения экрана разом визуализируются и время процедуры визуализации подгоняется так, чтобы и при одном изменении экрана и при 150-ти, пауза в прогоне была одна и та же. Тогда скорость прогона неизменна, как для программ не пишущих в экран, так и для программ с быстрой динамикой на экране. При этом способе 50 раз в секунду делается визуализация не всего экрана, а лишь меняются произошедшие изменения на экране. Отчего потери скорости не на 99.9% как у цельно-фреймовой визуализации, а лишь на 0.05%. Так делаются эмуляторы на 286-том, которые работают лучше, чем эмуляторы на ПЕНТИУМЕ, что в 10 тысяч раз скоростнее. К сожалению, в моём эмуляторе не так. Я выравнивание потерь на визуализацию не делал, поэтому на 286-той (15 XT) есть 10%-ные колебания скорости в динамичных играх. Но уже на 386DX40 (43 XT) колебаний скорости нет.
Какой таймер, в режиме прогона прерывания запрещены. Точно также как клавиатура обслуживается собственным драйвером, INT_9 не работает, отчего программы для скрин-шота не работают. Поэтому копию экрана эмулятора я делаю в эмуляторе DOS BOX. Получается четверная эмуляция: DOS BOX, PC XT, ОРИОН, РК86. Кстати DOS BOX неверно эмулирует текстовый адаптер, а именно режим загрузки своих фонтов (это он делает), но не выпоняет функцию использовать фонт 9*16 вместо 8*16, отчего мой красивый фонт слипается, и в мониторе-отладчике отображается слипшийся фонт)Сообщение от Pyk
Не могли бы Вы пояснить идею. Я это не понял.
Я понимаю, что можно определить сколько маш.тактов прогналось за единицу времени, скорректировать константу тормозилки и снова протестировать. Через несколько итераций получим константу тормозилки, чтобы скорость соответствовала РК86 с реальным тактом в 1.3 МГЦ. Выяснить скорость легко даже по секундомеру. Так что не важно полагаетесь Вы на таймер или ручной секундомер. Как Вы тормозите - добавляя паузу после каждой команды (как делаю я, отчего получается дискретность и разбалансировка), добавляя большую паузу после, например 10.000 команд или добавляя количество кадров визуализируемых за секунду?




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