С любой машиной того времени, которая успевает за один кадр полностью перебросить весь объем видеопамяти (именно перебросить, а не сменить указатель таблицы видео-адресов).
Вид для печати
Всё же интересно было бы сравнить с другими машинами. Я наприме попробовал написать тест в котором программно, по одной строке за раз, скролится область 320x200(4 цвета, 16000 байт).
Получилось 22.8 кадра в сек. и 24.5 fps если вынести код в память без задержек. (С выносом данных в дополнительную память ещё не тестировал, обнаружилось что на модуле памяти не работает байтовая запись в регистры страниц).
Единственное что, это всё при частоте ЦП 10MHz
Для 1985 г. и 20 кбайт ГОЗУ - в СССР таких небыло, за исключением некотрых огромных ЭВМ с ЭСЛ аппаратными ускорителями графики, и были они чуть ли не штучные экз. ( имеется ввиду команды "очистить экран", "заполнить цветом №х", "размножить спрайт №х в к-ве №у" - за 20 мс на полное завершение команды для полного экрана ). Можете посчитать с карандашиком, какое быстродействие должен иметь Графпроц для таких фокусов - миллионы рег-рег.
А в УКНЦ ПП ( Графпроц ) - ~ 500 т. рег-рег, в ПЗУ - 600 т. рег-рег. Можно туда пристроить 1806ВМ2 и провести замеры - на ~30% ускорится, не больше, для команд из ДОЗУ.
Надо было разработчикам УКНЦ не экономить 8 шт. 565РУ5Г, и сделать более четкое разделение ЦП-ПП.
А насчет места на плате - так уже тогда существовало решение с выносом массива ДОЗУ на отдельные маленькие платочки - Элекроникс США всем доставался почитать .
И насчет видеовывода - не смехотворные 12.5 мгц, а канонические 15.4 мгц, с внешними 133ИР13. И висяков машинки изначально небыло бы.
( На войнушку , значит, сотни миллиардов $ находились, а детишкам - сифилисный Х.. пососать значит ?! ).
По поводу аппаратного ускорения графики в СССР - чёт припомнился сложный игровой автомат с несколькими графическо-процессорными платами на 565РУ6 + КР580ВМ80 и 1 шт. платой ЦП на нем же. Графика просто накладывалась - один экран на другой, с переключением приоритетов.
Сюжет игры был сменный - на отдельной плате ППЗУ, кучка 573РФ2 ( ? ).
Может быть ралли ?
Поверхностно знакомился с ТО, причем был кривой перевод с болгарского, когда заводские архивы Э. относили на помойку, году так в 2004.
Там еще были ТО и КД на "Правецы" и еще какие-то детские ПК , которые прислали из Зеленограда году так в 1986 для "рассмотрения вопроса запуска в серию".
Я собирал по линуксом, скрипт build.sh. Помимо основной программы, он собирает бинарные модули которые загружаются в дополнительную память.
Нужно отключить использование дополнительной памяти закоментировав в main.mac символы SRAM и PCSRAM. Тогда и !build.bat соберёт программу.
Для запуска программы требуется файл rebels.bps, в нём содержится картинка которая будет скролится по экрану.
Программа работает до нажатия любой клавиши, но результат теста будет готов когда изображение хотя бы один раз сдвинется на 200 строк. В общем то результат как раз показывает количество тиков таймера на 200 строк. Т.е. фрейм рейт нужно будет вычислить по формуле 200/(result/50)
- - - Добавлено - - -
При частоте ЦП 10МГц, результат 439 тиков, и 408 тиков если код выполняющий сдвиг размещё в дополнительной памяти. Любопытно насколько результат будет отлчатся со штатной частотой ЦП.
Собрал. Я почему-то думал что речь о горизонтальном перемещении, а не о вертикальном. Вверх-вниз проще двигать изменением таблицы адресов.
Так это же просто тест для того чтобы узнать сколько раз в секунду машинка способна перерисовать экранную область.
- - - Добавлено - - -
Есть такая машинка Amstrad CPC, довольно много игр написано для режима 320x200 4 цвета, выглядит хорошим кандитатом для портирования игр :) И экранной области в ОЗУ ЦП как раз хватает на два таких экрана.
Замер скорострельности графики
Делал подобное для АГАТа: замер количества кадровых прерываний 50Гц (заведено на вход немаскируемого прерывания проца) при прокачке 64 экранов по 16КБ (256x256x2bpp).
Стандартный 1 Мах. Турбо 2.33 Маха.
[свернуть]
Обычно измеряют скорость заполнения экрана константой в Кбайт/сек.
Остальное высчитывают по таймингам исполнения команд проца.
Пример : БК11/М-4 мгц
При чрезмерно оптимизированном заполнении экрана ( или др. участка ДОЗУ ) константой, например "000000" - порядка 260 кбайт/с, при емкости экрана 16 кбайт к-во "стираний экрана" ~ 16 шт. в 1 сек.
Желающие могут на реальной БКшке запустить тест ( и замерить секундомером время исполнения ( секундомер есть в телефоне )) :
012701 001000 012702 040000 012703 002000 012704 000000
010422 010422 010422 010422 010422 010422 010422 010422
077311 077120 000000
Тест заполнит 512 раз область адресов 40000....77777 ( 8 ).
Вариант ХХ для пущей академичности :
012701 001000 012702 040000 012703 002000 012704 000000
010422 010422 010422 010422 010422 010422 010422 010422
077301 077120 000000
Адрес теста - лучше с 001000, но подойдет и любой другой, кроме 040000-077777.
Если я правильно понимаю, в самом быстром варианте получается 8.9 кадр/сек на стандартной машине(1.02MHz), и 20.8 кадр/сек на турбированой(2.38MHz).
- - - Добавлено - - -
Мне интересен результат "приближенный к реальности", поэтому у меня в тесте изображение скролится по кольцу. Т.е. верхняя строка копируется в конец буфера за пределами экрана, и далее, последовательно, строки переносятся на одну вверх.
Если просто заполнять экран константой то будет даже побыстрее.
- - - Добавлено - - -
Думаю что когда налажу байтовую запись в регистры страниц модуля ДОЗУ, получатся все 30 кадр/сек, или даже больше :)
fps = (ОбъёмПрокачки / (КоличествоТиков / ЧастотаПрерываний)) / РазмерЭкрана = (ОбъёмПрокачки * ЧастотаПрерываний) / (КоличествоТиков * РазмерЭкрана) = (1M * 50) / (x * 16K) = (50 * 64) / x = 3200 / x.
Апгрэйженный проц, копирование (7 тактов на байт):
1 Мах, fps = 3200 / 360 = ~8.9
2.33 Маха, fps = 3200 / 154 = ~20.8
Штатный проц, копирование (16 тактов на байт):
1 Мах, fps = 3200 / 827 = ~3.9
2.33 Маха, fps = 3200 / 354 = ~9.0
Штатный проц, заполнение/заливка (11 тактов на байт):
1 Мах, fps = 3200 / 568 = ~5.7
2.33 Маха, fps = 3200 / 243 = ~13.1
- - - Добавлено - - -
Что-то многовато получилось... Ты не ошибся?
Первый вариант - 1.3 секунды
Второй вариант - доли секунды
:)
- - - Добавлено - - -
Возможно, ошибка? И вместо 077120 должно быть 077122?Код:270 002000 SPEED:
271
272 002000 012701 001000 MOV #1000, R1
273 002004 10$:
274 002004 012702 040000 MOV #40000, R2
275 002010 012703 002000 MOV #2000, R3
276 002014 012704 000000 MOV #0, R4
277 002020 20$:
278 002020 010422 MOV R4, (R2)+
279 002022 010422 MOV R4, (R2)+
280 002024 010422 MOV R4, (R2)+
281 002026 010422 MOV R4, (R2)+
282 002030 010422 MOV R4, (R2)+
283 002032 010422 MOV R4, (R2)+
284 002034 010422 MOV R4, (R2)+
285 002036 010422 MOV R4, (R2)+
286 002040 077311 SOB R3, 20$
287
288 002042 077120 SOB R1, 10$
Пардон, въехал, всё нормально с кодом :)
512 * 16KБ = 8МБ за 1.3 секунды? На 4МГц проце? Даже на словном проце при полностью развернутом цикле - НЕ ВЕРЮ!!! (C) Станиславский.
С каких пор T11 (или J11?) стал не просто RISC, да еще и однотактным процом?
Сколько тактов отъедает MOV R4,(R2)+ ?
Сколько тактов отъедает SOB R3,20$ ?
1801ВМ1 - 2 полноценные команды процессора ( которые с загрузкой из памяти )
1801ВМ2 - 2 полноценные команды + сброс конвеера ( т.е. ~~ 4 команды процессора ).
1801ВМ3 - ~~~ 5 команд процессора.
Замеры собакина в натуре :
БК11М 4 мгц - 186 т. собакинов в ДОЗУ 3.3 мкс
1801ВМ3А-6 мгц при 4 тактах на команду - 323 т. ( общ. линейное быстродействие ~1.2 млн рег-рег )
1806ВМ2-5.5 мгц максимально ускоренный ОЗУ - 260 т.( общ. линейное быстродействие ~1.24 млн рег-рег )
Комрады! Дайте, пожалуйста, прямые и конкретные ответы на вопросы:
Сколько тактов исполняется MOV R4,(R2)+ ?
Сколько тактов исполняется SOB R3,20$ ?
А дальше мы вместе посчитаем и скорость прокачки и fps!
Ха, на форуме хором твердят что у УКНЦ медленная память, медленная графика. Не такая уж и медленная :)
439 тиков если использовать основную память, 437 если расположить стек в SRAM, и 408 если там же расположить и код выполняющий сдвиг изображения.
Считал так же как и по вашим результатам:
64.0/(0x09A/50.0) = 8.88888888888889
64.0/(0x168/50.0) = 20.77922077922078
200.0/(439/50.0) = 22.779043280182233
200.0/(437/50.0) = 22.88329519450801
200.0/(408/50.0) = 24.509803921568626
Процедура копирования строки представляет из себя 40 последовательных комманд MOV (R2)+,(R1)+
В общем то весь код сдвига экрана можно посмотреть в файле модуля предназначенного для загрузки в ДОЗУ. Перед началом теста, FillLPs создаёт таблицу с адресами всех строк, чтобы немного ускорить процесс, а ShiftVP выполняет всю работу.
- - - Добавлено - - -
Ещё немного результатов тестов, замер производился секундомером, так что плюс/минус время моей реакции :v2_dizzy_botan:
Холостой Ход - это когда самый вложенный SOB имеет переход на себя.
Время ХХ вычитается из общего времени выполнения теста.
Там в коде такого нет, это всё тот же тест из темы где обсуждалась реализация модуля памяти.
У меня "64.0" появился после сокращения "ОбъёмПрокачки" (1МБ) и "РазмерЭкрана" (16КБ).
А у тебя "200.0" откуда взялся?
И еще: 439 тиков по 50Гц - это же 8.8 секунд... Неужели так долго скроллится один экран?... Какие тогда 22 fps?...
---------------------------------------------------------------
Друзья! В третий раз прошу - дайте, плиз, растатковку:
БК-11М (ВМ1):
MOV R4,(R2)+
SOB R3,20$
УКНЦ (ВМ2):
CALL CpLine
MOV (R2)+,(R1)+
RETURN
SOB R0,1$
PS. Уважаемые Hunta и MM. Неужели так сложно дать простой, чёткий и конкретный ответ?...
можно только на простой, чёткий и конкретный вопрос. Какой появился только сейчас.
Как я уже сказал - гляну по осциллограмме, как только получится - но Вам он не пригодится и не поможет ;)
Время выполнения тестов с https://zx-pk.ru/threads/29492-alter...l=1#post978251
Первого - 11 секунд
Второго - 11 секунд
Результат теста показывает количество прерываний таймера (50Гц) произошедших за время двухсот перерисовок экрана. Почему 200? Потому что 200 строк экрана, в общем то произвольное значение.
200 перерисовок экрана 8.8 секунд. 22.8 перерисовок экрана каждую секунду. Всё стыкуется. Первоночальную оценку я вообще делал визуально с секундомером, а потом для уточнения использовал таймер 50Гц.
Гораздо интересней почему возникают сомнения в результатах теста?
Если бы использовал регистровый доступ к видеопамяти, а не прямой, тогда да, было бы раза в два медленней.
Что значит "дайте растактовку"? В какой конфигурации, с какими разрешенными или запрещенными прерываниями, у какого процессора, по каким адресам? Это этого зависит не на сколько тактов, а во сколько РАЗ медленнее будет работать код на УКНЦ.
- - - Добавлено - - -
Какая разница сколько секунд заняло выполнение кода при 200 итерациях, если не понятно сколько раз луч успел перегнать процессор? Куда практичнее будет следующий ответ - за один кадр можно успеть перебросить не более N строк из не более чем двух планов при выполнении кода ЦП с его расположением в адресах NNNN.
- - - Добавлено - - -
Пример: мой простенький не оптимальный, но развернутый цикл записи из памяти ПП в один план видео-ОЗУ успевает за кадр гарантированно перебросить84144 строки шириной 8 байт. При этом остается время "крякнуть" спикером и считать нажатые кнопки.
Код:Show.sprite: Mov #100000,R0 ; начальный адрес экранной области
Mov #80.,R1 ; число байт в строке экрана
Mul (R3),R1 ; умножаем на верт. кординату
Add R1,R0 ;
Add (R2),R0 ; добавляем горизонтальную координату
Mov #144.,R3 ; Высота всего спрайта - 84 строки
Mov #Reg.adr.plane,R5 ;
Mov #177012,R2 ;
1$: Mov R0,(R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
MovB (R4)+,(R2) ;
Inc (R5) ;
Add #80.,R0 ;
Sob R3,1$ ;
Так тест и показывает скорость заполнения области 320x200x2bpp. Можно просто использовать двойную буферизацаю, памяти которую можно использовать под видеопамять как раз хватает на два буфера 320x200x2bpp. Если хранить спрайты в быстрой памяти, можно получить неплохой фрейм-рейт, например 50/3 кадров в сек.
В общем то подобные тесты интересны только в сравнении с другими машинами. Как выяснилось, у Агат, со штатным процессором и стандартной частотойй, результат просто как говорится ниже плинтуса ~3.9 fps
Спасибо, теперь ясно, хотя из исходников этот факт совершенно не очевиден...
Потому что кажется многовато... Давай еще посчитаем:
СкоростьПрокачки = 200 Экранов * 50 Гц * 8000 СловРазмерЭкрана / 439 ТиковТаймера = 182233 слова в секунду.
Растактовка (в пределе) MOV.W (R2)+,(R1)+ = 10 МГц тактовой / 182233 Слов/с = ~55 тактов. Это похоже на правду?
Я же три раза попросил... Даже если есть зависимость, можно же было нижний и верхний предел указать... Нет, знатокам гораздо легче (и "информативнее" и "эффективнее" !!!) ответить отговоркой...
Справедливости ради отмечу, что этот графрежим с 16 КБ появился только в АГАТ-9, и я, честно говоря, не тестил игрухи в этом режиме, чтобы заценить динамичность. Большинство игрух используют другие графрежимы с 8 КБ (или текстовые режимы с 2 КБ), и графика - очень и очень динамичная. Бонусом: а если и АГАТу дать прикурить на 10 МГц, сколько fps выйдет? ;)
Для М-ЭВМ с Динамическими ОЗУ ( ДОЗУ ) принято указывать быстродействие в тыс. оп./сек., т.к. типовые ДОЗУ в разы тормознее СОЗУ, которое в большинстве случаев может обеспечит 0 тактов ожидания ЦП.
1801ВМ1 единственный доступный проц без конвеера, так что для него можно указывать быстродействие единственной команды в ( тестируемой ) цепочке .
Для БК11М-4 мгц в заводском варианте при выполнении из ДОЗУ быстродействие команды :
010422 примерно 131 т. в 1 сек.
077320 примерно 186 т. в 1 сек.
Для УКНЦ ЦП под RT-11 V5.00 без таймера :
010001 - 700 т. рег-рег в цепочке
( 010422 - 350 т. в 1 сек ? )
077320 - 280 т. команд
Оу, если так посмотреть, то получается чрезвычайно медленно. Три обращения к памяти и два раза прибавление двух к содержимому регистра.
- - - Добавлено - - -
Думаю что будет примерно тот же результат что и у 1801ВМ2 в случае если бы он работал с памятью без задержек.
- - - Добавлено - - -
Кстати, по моему, наболее интересное из новоделов для УКНЦ, это реплика контроллера памяти ЦП и графического контроллера. В первую очередь для изменения таймингов памяти и обеспечения доспупа к памяти без задержек.
Так все-таки, по условиям, указанным здесь, кто-нибудь может сообщить сколько тактов исполняется эта инструкция?
Инкремент регистров не в счет, оно делается внутри параллельно с обращением к памяти. То есть три цикла шины, и все. А на тему, как выжимать из 1801-х процессоров максимальное быстродействие, долго работал наш коллега Vslav. Вот здесь его отчет и обсуждение.
Прогнал тот же тест с прокачкой данный в памяти без задержек, вышло 290 тиков таймера, или 34.5 кадров/сек. 35 тактов на пересылку слова, 3 цикла шины, ~11 тактов на один цикл.
Ну, как я и предполагал, результат сопоставим с 1801ВМ2 :) Справедливости ради, стоит отметить, что ВМ2 прокачивает данные словами, а 6502 побайтово.
Ну и для полноты картины, прокачка данных из SRAM в основную память - 341 тик таймера, 29.3 кадров/сек. В общем если хранить графику в SRAM и подключать ПП чтобы как то разгрузить ЦП, то 50/3 кадров/сек вполне реальны.
- - - Добавлено - - -
Может я что упустил бегло просматривая тему, но ничего относящегося к ВМ2 я не заметил.
И снова оффтоп...
Разумеется, "каждый кулИк хвалит своё болото"! ;)
Совершенно верно!
"Справедливости ради 2": у тебя прокачивает 16000 байт, у меня 16384 байт, а это 2.4% оверхида...
"Справедливости ради 3": 1801ВМ2 является улучшенной версией проца 1801ВМ1. Точно также 65816/65802 является улучшенной версией проца 6502.
"Справедливости ради 4": мало того, что улучшенный ВМ2 в УКНЦ тактируется на 8 МГц (или 6?) по сравнению с ВМ1 на 4 МГц (или 3.5?) в БК, так у тебя он еще больше разогнан, вроде как до 10 МГц.
Как ты считаешь, будет ли справедливо сравнивать улучшенный и разогнанный проц одного семейства (ВМ2@10МГц) со стандартным и неразогнанным процем другого семейства (6502@1МГц) ??? Или же все-таки справедливо на равных условиях (65802@10МГц и 7 тактов/байт) ??? Догадываешься, сколько fps тогда "выйдет"? ;)
[свернуть]
оффтоп продолжается...
С поправкой на оверхед, 33.8 fps
6502 штатный процессор в Агате, 1801ВМ2А штатный процессор в УКНЦ
Стандарно в УКНЦ 8МГц (6.25 частота периферийного процессора). 10МГц - штатная частота для 1801ВМ2А (разгоняется до 15МГц).
Опять же, сравнивал штатный процессор в Агате на гипотетической частоте 10МГц, со штатным процессором в УКНЦ, работающем на штатной для него частоте.
В общем то, сравнивать процессоры разной архитектуры по частоте...
[свернуть]