Тема древняя, но напишу сюда. Тестировал вывод спрайта (скорость) и начал тоже замерять команды на ЦП УКНЦ. Наткнулся на странности:
1) Команда nop выполняется медленнее чем скажем clr R0 или swab R0. Примерно на полтакта.
2) Разница между ash #4, R0 и ash #5, R0 очень маленькая (тоже полтакта). Хотя разница между ash #5,R0 и ash #6,R0 уже раз в 10 больше. И вообще разница между ash #n,R0 зависит от n нелинейно
Тестировал довольно просто, забивал кусок памяти навроде 20кб командами и гонял циклами считая прерывания сетевого таймера.
С nop вообще непонятно Что это за задержка в полтакта. Что курили разработчики процессора?
Последний раз редактировалось BlaireCas; 08.09.2021 в 16:52.
Схема 1801ВМ2 уже давно восстановлена. Может пойти и посмотреть в ней.
Насчёт ASH #n, R0.
Не знаю, как сделано, но просто забить кусок памяти одной это командой не получится. Ибо после первой команды в R0 будет уже что то другое и вполне может сработать (если она есть) какая-нибудь внутренняя оптимизация. Типа, если в регистре содержится 0, то тупо ничего не делаем. В моей программе SPEED3 поэтому делается два прохода. Вначале кусок памяти забивается командами, которые создают для тестовой последовательности идентичные условиями (типа MOV #177777, R0) и меряется их скорость, потом кусок памяти забивается этими командами плюс тестовая последовательность (MOV #177777, R0; ASH #5, R0) и считается их скорость, а потом по разнице считается скорость тестовой последовательности.
BlaireCas (08.09.2021)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Неее... Очищаю регистры и флаги состояния процессора предварительно перед прокручиванием забитых в ОЗУ комманд.
Код простой как валенок:
В PAYBUF записано собственно 20 килобайт повторяющихся инструкций ash #X, R0 и самая последняя return. Сетевой таймер делает только inc VSYCNT; rti .. Потом смотрю сколько накрутило прерываний.Код:mov #COUNT1, VAR000 clr VSYCNT 30$: clr R0 clr R1 clr R2 clr R3 clr R4 clr R5 mtps #0 call PAYBUF dec VAR000 bne 30$ ; output results ...
Понятно что совсем небольшое время добавляется на очистки регистров и организацию цикла. Но для сравнения это неважно. Четко вот время выполнения сдвига на 4 и 5 бит практически одинаково, а сдвиг на 6 бит уже прилично добавляет.
Но за идею сделать разницу спасибо, надо попробовать.
Вообщем я уже начинаю понимать насколько сложно сделать правильный эмулятор со всеми этими растактовками комманд.
Последний раз редактировалось BlaireCas; 08.09.2021 в 18:00.
Покушать такты процессора. Нелинейно зависимые от X. Несмотря на пустой регистр - процессор тратит свое время на его сдвиг.
Кстати разницы во времени между ash #7,R0 и ash #8,R0 вообще не обнаружил.
(собственно почему затеял измерение скорости - ну банально заметил что asl R0 четыре раза подряд быстрее чем ash #4, R0)
Последний раз редактировалось BlaireCas; 08.09.2021 в 18:31.
BlaireCas (08.09.2021)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)