Приветствую. Когда-то давно, Иван (он же Imak, он же Winglion) создал утилиту для замера "производительности" в основной памяти и быстрой памяти (исполнение разных команд).
По прошествии длительного времени я считал (наверное многие так считали), что тест довольно точный и полагался на его результаты. Однако, в какой-то момент я усомнился в "чистоте" результатов. Начал смотреть во внутренности timer.exe и обнаружил, что тесты составлены с ошибками.
1. в тестах в основных циклах (где тестируется непосредственно сами команды) допущены лишние (мусорные) команды.
2. в тесте Push/Pop допущено, что обе команды внутри одного цикла. С моей точки зрения это не верно, ведь команды выполняют разные функции и тестировать их нужно по отдельности.
3. так же в этом тесте (push/pop) были дописаны команды, которым точно не место в цикле тестирования.
Я понимаю, что команды были вписаны для выравнивания по тактам, однако, если читать комментарии, в той части где он ведёт подсчёт тактов, то можно заметить, что часть команд не подсчитаны. Когда я начал сам всё подсчитывать, то и сам ошибся несколько раз в подсчётах. чтобы подсчёт был более точным, я использовал Visual Studio Code с плагином для подсчёта тактов для мнемоники Z80. Как следствие - более точный подсчёт всех тактов в каждом тесте. По итогу, ни одна цифра не сошлась с комментариями автора, все тесты имеют завышение по затраченным тактам. Посмотрев на это всё и проведя несколько тестов я понял, что так дальше жить нельзя и надо что-то менять. Ну, т.е. я начал пилить свой тест, но на базе оригинала.
От оригинала я взял первые 2 процедуры. Это процедура контроля времени и самый первый тест для Inc/Dec (и то с правками). Так же в оригинале CMOS_TEST вызывается дважды для того, чтобы повысить точность замера, на тот случай, если первый вход попал на самый конец секундного "тика". Я этот момент доработал, отфильтровав текущую секунду. Тест не начинается. пока она не закончится. Ну и далее, все оригинальные тесты были сильно переписаны. В частности, из основного цикла убраны все мусорные команды (кроме команд организации цикла), все тесты полностью подогнаны под 10000 тактов (за секунду). Добавил так же ещё 2 тестируемые команды. На основе модификации от Shaos`а добавил поддержку для памяти ISA. при этом, в отличии от его мода, мой может работать с обоими слотами. т.е. если в оба слота вставить что-то с доступом к памяти через ISA, то оба слота будут обнаружены и протестированы. Остаётся место ещё под 1 команду. Далее, когда-нибудь (возможно), я добавлю тест производительности ldir, ldi и акселератора (в мегабитах или килобитах).
Во вложении архив с timerv2.exe и исходниками к нему.
ЗЫ. Чуть не забыл. в утилите были использованы части нового Fdisk от Дмитрия aka Hard/WCG. Спасибо за идею цветной печати! Хотя сама печаталка (printf) была выбрана из Solid C и модицифирована.
было (timer v.1) стало (timer v.2)