ZXNet эхоконференция «code.zx»
тема: такты
от: 812/08.14
кому: Kirill Frolov
дата: 09 Jan 1998
Привет, Кирилл!
KF> Может кто-нибудь может объяснить, сколько времени уходит
KF> в скорпе (желтом) на выполнение комманд типа LDI/DJNZ/LD A,(HL)...?
KF> Дело в том, что они содержат нечетное число тактов, а скорп при
kF> чтении КОПА из RАМа может вставить /WAIT.
Спрашивали - отвечаем (ц) ... :)
Hа машинах Ленинград, Композит, Скорпион, Кау
при выборке команды из RAM вставляется один такт
ожидания, но не всегда, а тогда, Когда предыдущая
команда имела нечетное количество тактов.
Для простоты можно считать, что ожидание
возникает не в текущей, а в предыдущей команде
(нечетной).
Итак, если команда занимает нечетное коли-
чество тактов - вставляется лишний такт и,
таким образом, время дополняется до большего
четного значения.
LD A,(HL) 7 > 8
LD (0),A 13 > 14
DJNZ $ 13 > 14
и т.д.
(насчет LDI ты неправ - 16 тактов, четно, 16 и будет)
Таким образом, при подсчете тактов для любой
программы ты рядом с любой нечетной командой
дорисовываешь еще один такт к паспортному.
Сказанное справедливо и для турбо-машин
в нетурбо режиме.
KF> Eще вопрос: частота тактирования проца - 3.5 Мгц, прерываний
KF> 50Гц, а тактов за прерывание получается не 70000, а около 68000,
KF> причем это в ROMe и в RAMe (результаты одинаковые). В чем дело ?
А как ты считал такты в прерывании?
Я думаю, надо так - ставим IM2, и запускаем
программку вида
M0 INC DE:JP M0; 16 тактов/оборот
А в прерываниях ловим текущий DE, отписываем
его куда-нибудь, обнуляем его и запускаем снова.
Так повторяем 129 раз, каждый раз отписывая
получившийся DE (самое первое значение отбра-
сывается).
Получаем 128 значений.
Каждое нужно умножить на 16, к результату
добавить количество тактов, которое занимает
(с учетом нечетных команд!) программа на IM2
(запись DE в список, работа со стеком, цикл
129 раз и т.п.), и добавить 19 (20) тактов -
поправка на цикл INTACK. Из 128 скорректиро-
ванных значений высчитать среднее - это и есть
число тактов на фрейм.
Это только шаблон, в деталях может быть иначе,
только в это время процессор должен выполнять
колько четные команды (в моем примере 6+10).
А если будут нечетные - получишь неверный
результат, так как время выполнения нечетной
команды отличается от документированного.
Получаемая точность - 16 тактов.
Мне удавалось измерить с точностью до 4х
тактов - я забивал память NOPами, запускал,
а на прерываниях смотрел, до какого NOPа
дошла программа.
Теоретически возможно измерить с точностью
до такта - вот только зачем?
Я, например, знаю, что в моем Пентагоне
320 строк/кадр, в строке 224 такта, без тор-
моза - получается 71680 тактов (частота
кадров 48.828 Гц).
Hа Скорпе 312 строк, 224 такта в строке,
получаем 69888 тактов (частота кадров 50.08 Гц).
Еще момент. Во всех Скорпах/Ленинградах/
Композитах число строк всегда 312, а вот
число тактов в строке зависит от кривости
ручек, их собиравших, Может быть как 224,
так и больше или меньше...
А также, некоторые умники с целью поднять
совместимость с Пентагоном (к слову, у него
WAIT не возникает никогда) насилуют свои
Скорпионы/Ленинграды, увеличивая количество
тактов в строке (доработки в районе ИЕ7).
Такое решение, соответствнно, понижает
строчную и кадровую частоты, и нельзя считать,
что частота кадров 50 Гц - она получается
меньше, соответственно, тактов в Инте больше.
Измерить же количество тактов на строку
можно, лишь написав программу вертикальной
полосы на бордюре, и, методом тыка добившись
ее вертикальности, измерить количество
тактов в выводящей программе ( с учетом
нечетных команд!).
измеряла бы количество тактов с учетом тормоза
на нечетных командах, так никто и не удосужился...
Вот такие дела.
Всего хорошего,
Дмитрий AKA -=LD=-/X-TRADE GROUP
-+- ZXASM 3.0
от: 812/03.00
кому: Dmitry Lomov
дата: 12 Jan 1998
Смотрю вдруг 12-01-98, в 01:43 некто
Dmitry Lomov писал к Paul Falcon про такты :
Hi Dmitry !
PF>> я например не знаком с теорией этого явления,
PF>> но знаю на каких машинах это происходит.
PF>> человек спросил - я ответил.
DL> BEST!
DL> вопрос:
DL> - Сколько тактов на Скорпионе?
DL> ответ:
DL> - Да, а также на Пентагоне!
^^^^^^^^
ты че не замечаешь нифига? я не _про_пенатагон_ писал!
DL> Вот это и есть - "абы как"...
DL> Hе знаешь - не отвечай.
если ты заметил то я ответил не так. человек спросил
когда прибавляется лишний такт на командах которые
выполняюыся нечетное количесво тактов. я ответил что
всегда это происходит на скорпионах,каях,композитах и
на _кривом_пентагоне_ ! я могу еще раз повторить, что бы ты
понял, на _кривом_пентагоне_ . потому как у Hacker'a
зона 128 кАким-то образом переделаная под пентагон. тонкостей
этой переделки я незнаю.
PF>> и чего ты вдруг на меня так сорвался? вот твое _это_
PF>> письмо и не по теме и с наездом.
DL> Сначала я ответил на вопрос. А потом обратил
DL> твое внимание на мыльные пузыри. "Срываются" с обрыва...
DL> В мыло пойдем? :)
можешь идти куда угодно, меня не прет ругаться только
потому что тебе этого хочется. прет тебя ругаться с моквичами
вот и ругайся, только напиши им что я никакого отношения
к вам не имею и иметь не хочу, а то они мне 3 раз пишут.
еще раз напишешь в эху такую пургу - отрублю на неделю.
если тебе очень надо, можешь позвонить, все решим по телефону.
▌▌║▌█▐│▌▌▐▐ WiTh The BeST wIsheS fROM CREATOR product
▌812/03.00▐ Powered by Cyrix 6x86L 200+/16DIMM/S3TrV2 2MB/1.6GB
-+- SMM version 1.05
от: 812/08.14
кому: Kirill Frolov
дата: 13 Jan 1998
Привет, Кирилл!
[ аннигилировалось ]
DL>> Сказанное справедливо и для турбо-машин
DL>> в нетурбо режиме.
KF> А может наоборот - для турбо-машин в _турбо_ режиме ?
Hет. Именно так, как я сказал. В турбо-режиме
сказанное справедливо вдвойне :)
*скип*
KF> А это каким таким образом ? Если кварц на 14 должно быть 224...
KF> (и если с счетчиком Д4=ИЕ7 не наконструировали...)
Количество тактов в строке от частоты кварца
не зависит. Оно зависит от коэффициента деления
счетчика, т.е. от числа, которое в него загружается.
Hа разных платах стоят разные числа. (имеются в виду
старые Зоны). В Скорпе многое зависит от серии ИЕ7
и от RC-цепи в проводе загрузки счетчика.
*скип*
KF> А соотношение четные/нечетные должно быть какое ?
KF> Imho это очень сложный вопрос...
Тестить надо так: сначала проверить на четных
командах, получается ? тактов/ИHТ. Затем проверить
на нечетных. Если получится иное, значит, в системе
есть характерный зоновский тормоз...
KF> P.S. Hу и тормозит-же скорп как скейт без роликов...
Мой не тормозит, после того, как я из него
Пентагон сделал. Пришлось потрудиться...
Всего хорошего,
Дмитрий AKA -=LD=-/X-TRADE GROUP
-+- ZXASM 3.0
от: 812/08.14
кому: Kirill Frolov
дата: 16 Jan 1998
Привет, Кирилл!
KF> T.e. турбо машины в нетурбо режиме тормозят, а в турбо не тормзят ?
Hекоторые машины в нетурбо тормозят (кроме АТМ и Пентагона, IMHO).
Все турбированные машины в Турбо тормозят еще больше, но выигрыш
все же есть. Самая быстрая машина, IMHO, KAY-TURBO. Там в турбо-
режиме количество тактов в команде округлятся вверх до кратного
четырем:
4 > 4
6 > 8
7 > 8
8 > 8
9 > 12
13 > 16
...
Hо если учесть, что большая часть команд - 4 и 7 тактов, получаем
почти удвоенную производительность.
*скип*
KF> А почему пентагон не тормозит ? (схему его никогда не видел!)
Ввиду особенностей схемотехники.
Машины тормозят, так как:
Тактовая частота памяти равна частоте проца.
Из той же памяти на экран выводится информация,
при этом занят каждый второй такт памяти.
Память делится: один такт памяти процессору,
другой видеоконтроллеру.
Цикл чтения команды занимает полтора такта.
Вывод - иногда может случиться, что, когда процессор
хочет команду, память занята выводом на экран. Процессор ждет.
В турбе увеличивается частота работы процессора,
но быстродействие памяти остатся прежним.
Вывод - в турбе процессору иногда придется подождать
два такта.
В пентагоне деление циклов между процессором
и видео делается произвольно, из каждых двух
тактов памяти первый достается видеоконтроллеру,
второй процессору, но, если процессор хочет
память на первом такте, сначала работает он, а уж
за тем видеоконтроллер.
В зоновских машинах такты фиксены -
первый обязательно процессору, второй видео.
Вот так-то...
Всего хорошего,
Дмитрий AKA -=LD=-/X-TRADE GROUP
-+- ZXASM 3.0
|