Просмотр полной версии : Расчёт точного времени выполнения команд различными процессорами архитектуры PDP-11.
Универсальные тесты таймингов:
Последние версии всех универсальных тестов в одном архиве:
PDP11_TimingsTests (http://emulator.pdp-11.org.ru/misc/PDP11_TimingsTests.zip).
Старые версии тестов, но с индивидуальным описанием каждого теста:
PDPCLK.SAV (http://zx.pk.ru/showthread.php?postid=591366), IRQ.SAV (http://zx.pk.ru/showthread.php?postid=578115), MOV.SAV (http://zx.pk.ru/showthread.php?postid=578495), MOVB.SAV (http://zx.pk.ru/showthread.php?postid=578743), CMP.SAV (http://zx.pk.ru/showthread.php?postid=578743), CMPB.SAV (http://zx.pk.ru/showthread.php?postid=578820), ADD.SAV (http://zx.pk.ru/showthread.php?postid=578743), BIS.SAV (http://zx.pk.ru/showthread.php?postid=578801), BISB.SAV (http://zx.pk.ru/showthread.php?postid=578801), OP1.SAV (http://zx.pk.ru/showthread.php?postid=579062), MOVPC.SAV (http://zx.pk.ru/showthread.php?postid=579233), MOVPC_v1.1 (http://zx.pk.ru/showthread.php?postid=579648), MOVPC2.SAV (http://zx.pk.ru/showthread.php?postid=580390), RTS.SAV (http://zx.pk.ru/showthread.php?postid=584249), JMP.SAV (http://zx.pk.ru/showthread.php?postid=584720), JSR.SAV (http://zx.pk.ru/showthread.php?postid=591631), MUL.SAV (http://zx.pk.ru/showthread.php?postid=589325), DIV.SAV (http://zx.pk.ru/showthread.php?postid=589989), ASH.SAV (http://zx.pk.ru/showthread.php?postid=590164), ASHC.SAV (http://zx.pk.ru/showthread.php?postid=590165)
Тесты таймингов для процессора 1801ВМ1 и систем с ВЕ-таймером:
VM1C4.SAV (http://zx.pk.ru/showthread.php?postid=548052), VM1MOV.SAV (http://zx.pk.ru/showthread.php?postid=548650), VM1CMP.SAV (http://zx.pk.ru/showthread.php?postid=548650), VM1ADD.SAV (http://zx.pk.ru/showthread.php?postid=548650), VM1BIS.SAV (http://zx.pk.ru/showthread.php?postid=548650)
===========================================
Исходное сообщение темы ( представляет главным образом исторический интерес ):
Исходные величины, одинаково влияющие на время выполнения процессором любой команды - это задержка шины и задержка ячейки ( образующие в сумме задержку доступа Tadr ) и продолжительность такта процессора T.
Задержка доступа различается по:
1. Типу адресуемой ячейки:
1.1 ячейка ОЗУ - Tadr = Tram;
1.2 регистр устройства - Tadr = Tdev;
1.3 ячейка ПЗУ - Tadr = Trom
2. Типу доступа:
2.1 чтение TadrR;
2.2 запись TadrW;
2.3 модификация TadrM.
В данное время мне наиболее интересны параметры времени выполнения команд процессором 1801ВМ1.
Выборка команд из памяти у процессора 1801ВМ1 не конвееризована, поэтому время выполнения команды NOP складывается из времени выборки команды ( TadrR ) и времени обработки команды ( 8*T ).
Значит, формула времени выполнения команды NOP: Tnop = TadrR + 8T. Если команда NOP находится в ОЗУ, то это TramR + 8T, а если в ПЗУ - то TromR + 8T.
В справочниках есть упрощённые формулы вычисления времени выполнения команд 1801ВМ1:
Времена выполнения команд:
одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 21T+3tn 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+4tn <Испр. 3 0 25T+3tn
4 21T+3tn 4 0 20T+2tn
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+4tn <Испр.
0 1 26T+2tn
Время выполнения команд 0 2 28T+2tn
управления HALT=54T+7tn 0 3 31T+3tn
команд IOT,BPT,EMT,TRAP 0 4 28T+2tn
42T+5tn; команд устано- 0 5 32T+3tn
вки и очистки признаков 0 6 31T+3tn
8T+tn; максимальное 0 7 40T+4tn
время ожидания ПДП 8T+ 1 1 28T+3tn
+2tn для цикла ввод-па- 2 2 30T+3tn
уза-вывод; максимальное 3 3 40T+5tn
время от момента запро- 4 4 31T+3tn
са прерывания до выбор- 5 5 42T+5tn
ки первой команды ново- 6 6 40T+5tn
го процесса 98T+12tn 7 7 56T+7tn
(время выполнения самой
длинной команды + IOT)
В таблицах приведены времена исполнения для одноадресных команд
COM, INC, DEC, ADC, SBC, ASR, ASL, ROL, ROR, CLR, и для двухадресных
ADD, SUB, BIC, BIS, XOR. За T обозначен период тактовой частоты процессора,
tn-время между выдачей DIN/DOUT и приходом RPLY.
Однако, здесь уже не всё так просто и очевидно, как в случае с NOP.
Начнём с одноадресных команд. Рассмотрим формулы времени выполнения команды INC в зависимости от используемого метода адресации:
0: INC R0 TadrR + 8T
1: INC (R0) TadrR + 8T + TadrR + 13T + TadrW
2. INC (R0)+ TadrR + 8T + TadrR + 12T + TadrW
3: INC @(R0)+ TadrR + 8T + TadrR + 19T + TadrW
4: INC -(R0) TadrR + 8T + TadrR + 13T + TadrW
5: INC @-(R0) TadrR + 8T + TadrR + 13T + TadrR + 7T + TadrW
6: INC 2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrW
7: INC @2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrR + 7T + TadrW
Как такое может быть, чтобы команда INC @-(R0) требовала ( для своего выполнения ) четырёх обращений к памяти, а команда INC @(R0)+ только ТРЁХ ???
Очевидно, что в справочнике ошибка - исправляем.
0: INC R0 TadrR + 8T
1: INC (R0) TadrR + 8T + TadrR + 13T + TadrW
2. INC (R0)+ TadrR + 8T + TadrR + 12T + TadrW
3: INC @(R0)+ TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrW
4: INC -(R0) TadrR + 8T + TadrR + 13T + TadrW
5: INC @-(R0) TadrR + 8T + TadrR + 13T + TadrR + 7T + TadrW
6: INC 2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrW
7: INC @2(R0) TadrR + 8T + TadrR + 12T + TadrR + 7T + TadrR + 7T + TadrW
Теперь двухадресные команды:
00: ADD R0, R1 TadrR +8T
10: ADD (R0), R1 TadrR +10T +TadrR +8T
01: ADD R0, (R1) TadrR +10T +(TadrR+8T) +8T
20: ADD (R0)+, R1 TadrR +10T +TadrR +8T
02: ADD R0, (R1)+ TadrR +10T +(TadrR+8T) +10T
30: ADD @(R0)+, R1 TadrR +10T +TadrR +7T +TadrR +8T
03: ADD R0, @(R1)+ TadrR +9T +TadrR +7T +(TadrR+8T) +7T
40: ADD -(R0), R1 TadrR +12T +TadrR +8T
04: ADD R0, -(R1) TadrR +10T +(TadrR+8T) +10T
50: ADD @-(R0), R1 TadrR +10T +TadrR +8T +TadrR +8T
05: ADD R0, @-(R1) TadrR +10T +TadrR +7T +(TadrR+8T) +7T
60: ADD 2(R0), R1 TadrR +10T +TadrR +7T +TadrR +8T
06: ADD R0, 2(R1) TadrR +9T +TadrR +7T +(TadrR+8T) +7T
70: ADD @2(R0), R1 TadrR +10T +TadrR +7T +TadrR +7T +TadrR +8T
07: ADD R0, @2(R1) TadrR +10T +TadrR +7T +TadrR +7T +(TadrR+8T) +8T
11: ADD (R0), (R1) TadrR+6T+TadrR+7T+(TadrR+8T)+7T
22: ADD (R0)+, (R1)+ TadrR+8T+TadrR+7T+(TadrR+8T)+7T
33: ADD @(R0)+, @(R1)+ TadrR+8T+TadrR+6T+TadrR+6T+TadrR+6T+(TadrR+8T)+6T
44: ADD -(R0), -(R1) TadrR+8T+TadrR+7T+(TadrR+8T)+8T
55: ADD @-(R0), @-(R1) TadrR+8T+TadrR+7T+TadrR+6T+TadrR+7T+(TadrR+8T)+6T
66: ADD 2(R0), 2(R1) TadrR+8T+TadrR+6T+TadrR+6T+TadrR+6T+(TadrR+8T)+6T
77: ADD @2(R0), @2(R1) TadrR+10T+TadrR+6T+TadrR+6T+TadrR+6T+TadrR+6T
+TadrR+6T+(TadrR+8T)+8T
Весьма странная информация..
Из информации об одноадресных командах следует, что процессор 1801ВМ1 не использует цикл "чтение-модификация-запись" при выполнении одноадресных команд. Вместо этого для модификации операнда используется его "полновесное" чтение и затем такая же запись. В таблице же двухадресных команд циклы записи вообще отсутствуют, но зато к последнему циклу чтения делается "добавка" +8T, как бы намекающая на то, что это и не чтение вовсе, а "чтение-модификация-запись".
Но уж слишком это противоречит информации из таблицы времени выполнения одноадресных команд.
...
Однако, для практической эмуляции достоверного быстродействия процессора 1801ВМ1 нужны не только точные формулы, но и конкретные значения используемых в вычислениях величин.
С продолжительностью такта процессора всё понятно - при рабочей частоте 1801ВМ1 = 100 кГц - 5 МГц, продолжительность такта составит T = 10 мкс - 0.2 мкс.
...
Добавлен файл VM1S2.zip, содержащий "1801VM1 System test 2"
Добавлен файл VM1SPD.zip, содержащий "1801VM1 Mhz Speed Meter v1.0"
Добавлен файл VM1VE3.zip, содержащий "1801VM1 VE-Timer Test #3"
Добавлен файл VM1VE4.zip, содержащий "1801VM1 VE-Timer Test #4"
Добавлен файл VM1C1.zip, содержащий "1801VM1 Timings Test #1a"
...
1. Относительно задержки доступа к ячейкам ОЗУ и ПЗУ ДВК.
Тот факт, что процессор 1801ВМ1 также используется в БК-0010 - позволяет учесть данные, полученные Ю.А.Зальцманом ("ПК БК-0010" №1 1995г.)
Сообщается, что время выполнения команды NOP на БК-0010 с тактовой частотой 3 МГц составляет ~ 4 мкс.
Известно, что тайминг команды Tnop = TramR + 8T. При F=3 МГц : Т = 0.33 мкс. Откуда TramR = 4 - 8*0.33 = 1.34 мкс.
Однако, на задержке доступа к памяти БК-0010 сказывается периодическая блокировка шины видеоконтроллером.
Учитывая, что у ДВК3 : TramR = 1 мкс ; у БК-0010 : TromR = ~ 1 мкс - легко вычислить, что видеоконтроллер БК-0010 вносит дополнительную задержку ~ 0.33 мкс.
Следовательно у ДВК можно ожидать:
TramR = ~ 1.0 мкс
TromR = ~ 0.6 мкс
2. Сообщается, что время выполнения команд BR и BEQ у БК-0010 одинаково и составляет ~ 5.4 мкс.
Если у БК-0010 : TramR = 1.4 мкс ; T = 0.33 мкс, тайминги будут:
BR TadrR + 12T
BEQ TadrR + 12T
Похоже, что результаты, полученные ранее на основе таймингов 1801ВМ3 - не вполне корретны и команда BR выполняется процессором 1801ВМ1 за такое же время, как и команда BEQ.
Там же сообщаются следующие времена выполнения команд процессором 1801ВМ1:
SOB TadrR + 16T
RTI TadrR + 11T + TadrR + 8T + TadrR + 8T
RTS TadrR + 16T + TadrR + 8T
RESET TadrR + 1024T
...
Добавлен файл VM1VE5.zip, содержащий "1801VM1 VE-Timer Test #5".
Добавлен файл VM1VE6.zip, содержащий "1801VM1 VE-Timer Test #6".
Добавлен файл VM1C3.zip, содержащий "1801VM1 Timings Test #3".
Добавлен файл VM1VE7.zip, содержащий "1801VM1 VE-Timer Test #7".
Добавлен файл VM1SP2.zip, содержащий "1801VM1 MHz Speed Meter v2.0"
Patron, Извини, я наверное туплю. Но шина МПИ - асинхронная и любая операция на ней занимает неопределнное количество времени, главное чтобы не слетать по тайм-ауту 10ms.
http://ru.wikipedia.org/wiki/Q-Bus
Поэтому тайминги - это конечно здорово, но даже операция чтения кода команда (транзакция чтения на шине) займет неизвестно сколько и не зависит от частоты процессора.
Вдобавок шину могут занимать регенерация, дисплей или пересылки устройств с ПДП (например MY: ), даже в процессе выборки многословной команды.
Или ты просто хочешь получить сферические цифры в вакууме ?
Или ты просто хочешь получить сферические цифры в вакууме ?
Цифры вообще-то очень полезные, но к ним конечно ещё нужно для каждой машины подробное описание работы всех устройств по доступу к памяти.
В частности, в моих тестах на БК-0011М получилось что NOP исполняется в среднем за 10.66 такта, а SOB R0,метка -- за 21.33 такта.
К этому было вот такое объяснение от А.Тишина AKA Sandro (http://nzeemin.livejournal.com/303355.html):
Если речь идёт об ОЗУ, то ВП1-36 работает так: на одну телевизионную строку длительностью 64мкс ровно у неё происходит 96 циклов доступа к памяти, из которых чётные (при нумерации с 0) достаются процессору, а нечётные -- видеоадаптеру (даже на полях видеосигнала). То есть, при частоте 3 МГЦ процессор может читать/писать данные только каждый 4 такт, строго. Поэтому у БК-0010 время исполнения всех команд из ОЗУ кратно 4 тактам, всегда.
В 11М процессор работает на 4МГЦ, а ВП1-36, естественно, всё так же на 3 (или 6, это как посмотреть :) ). Поэтому выходит, что процессор получает доступ в ОЗУ 1 раз в 5 1/3 такта. В среднем.
А поскольку даже простую команду он не может выполнить за 5 тактов, то получается исполнение за два цикла доступа к памяти, хотя реально из них используется только один -- для чтения команды.
Patron, Извини, я наверное туплю. Но шина МПИ - асинхронная и любая операция на ней занимает неопределнное количество времениЭто сферическая теория в вакууме :) На практике же - любая команда процессора 1801ВМ1 ( как и любого процессора вообще ), находящаяся в ОЗУ или ПЗУ - выполняется за прогнозируемое время. И наиболее точные алгоритмы именно такого прогнозирования мне и интересно установить.
Вдобавок шину могут занимать регенерация, дисплей или пересылки устройств с ПДП (например MY: ), даже в процессе выборки многословной команды.Дисплей у ДВК в общую память не лезет ( или я ошибаюсь? КГД лезет? а КЦГД лезет? ). Регенерация у ДВК имеет постоянные характеристики и неявно учтена в формулах расчёта быстродействия. Активность эмулируемых устройств ПДП контролируется эмулятором, поэтому вносимая ими задержка может легко (?) быть учтена дополнительно ( этим мы займёмся на более поздних этапах исследования :).
Или ты просто хочешь получить сферические цифры в вакууме ?Я хочу, чтобы для всех устройств, имеющих реальные прототипы ( начиная с процессоров ) - был доступен ( в моём эмуляторе компьютерных архитектур ) режим достоверной эмуляции функционирования.
...
То есть, при частоте 3 МГЦ процессор может читать/писать данные только каждый 4 такт, строго. Поэтому у БК-0010 время исполнения всех команд из ОЗУ кратно 4 тактам, всегда.Алгоритм расчёта количества дополнительных ( к "чистой" задержке доступа ) тактов, которые процессор тратит на каждый доступ к шине - самая сложная часть расчётов времени выполнения команд.
Вот, для примера - таблица (из описания процессора) дополнительных "накладных расходов" процессорных тактов 1801ВМ3 в зависимости от типа адресации операнда:
ВРЕМЯ ВЫБОРКИ ОПЕРАНДОВ
------------------------------------------------------------------
МЕТОД TS TD
АДРЕСАЦИИ ------------------------------------
ВСЕ КОМАНДЫ, ДЛЯ КОМАНДЫ
КРОМЕ MOV MOV
------------------------------------------------------------------
0 0 0 0
1 5T+TR 4T+TM 4T+TW
2 10T+2TR 8T+TM 8T+TW
3 13T+TR 13T+TM+TR 13T+TR+TW
4 10T+2TR 6T+TM 6T+TW
5 12T+2TR 13T+TM+TR 13T+TR+TW
6 10T+2TR 6T+TM+TR 6T+TR+TW
7 12T+3TR 10T+TM+2TR 10T+2TR+TW
------------------------------------------------------------------
Вот дела!
И в этой таблице ( из другого справочника, про другой процессор ) та же ошибка с количеством доступов к памяти при выборке первого операнда с 3-м типом адресации. Ну не может такого быть, чтобы команда TST @-(R0) требовала для выборки операнда 2-х обращений к памяти, а команда TST @(R0)+ только ОДНОГО !!!
Да и при 2-м и 4-м методах адресации с первым операндом в таблице явные нелады.
Таблица (на мой взгляд) должна выглядеть так:
ТАБЛИЦА 2
ВРЕМЯ ВЫБОРКИ ОПЕРАНДОВ
------------------------------------------------------------------
МЕТОД TS TD
АДРЕСАЦИИ ------------------------------------
ВСЕ КОМАНДЫ, ДЛЯ КОМАНДЫ
КРОМЕ MOV MOV
------------------------------------------------------------------
0 0 0 0
1 5T+TR 4T+TM 4T+TW
2 10T+TR 8T+TM 8T+TW
3 12T+2TR 13T+TR+TM 13T+TR+TW
4 10T+TR 6T+TM 6T+TW
5 12T+2TR 13T+TR+TM 13T+TR+TW
6 10T+2TR 6T+TR+TM 6T+TR+TW
7 12T+3TR 10T+2TR+TM 10T+2TR+TW
------------------------------------------------------------------
Из таблицы видно, что при выборке операнда - процессор 1801ВМ3 не только ждёт ответа ячейки, но ещё и тратит дополнительные такты.
Например, из таблицы следует, что на выборку операнда для команды TST (R0) процессор 1801ВМ3 тратит дополнительно +5T, а для команд TST (R0)+ и TST -(R0) : +10T ( тогда как 1801ВМ1 тратит дополнительно +6T в обоих случаях ).
Это как надо понимать..
Возможно, эти добавочные +5T ( при 2-м и 4-м методах адресации ) нужны процессору 1801ВМ3 на изменение содержимого регистра. Но не противоречит ли это таблице времён выполнения команд процессора 1801ВМ3:
ВРЕМЯ ВЫПОЛНЕНИЯ КОМАНД
ВРЕМЯ ВЫПОЛНЕНИЯ КОМАНД ВЫЧИСЛЯЕТСЯ ПО ОДНОЙ ИЗ ФОРМУЛ:
1. ДЛЯ БИНАРНЫХ КОМАНД
T1 = TS + TD + TI + TF
2. ДЛЯ УНАРНЫХ КОМАНД
T2 = TD + TI + TF ИЛИ TS + TI + TF
3. ДЛЯ КОМАНД JMP, JSR ( КРОМЕ ЗАПРЕЩЕННОГО МЕТОДА АДРЕСАЦИИ 0 )
T3 = TJ + TI + TF
ГДЕ: TS - ВРЕМЯ ВЫБОРКИ ОПЕРАНДА ИСТОЧНИКА
TD - ВРЕМЯ ВЫБОРКИ ОПЕРАНДА ПРИЕМНИКА
TI - ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ
TF - ВРЕМЯ ВЫБОРКИ КОМАНДЫ
TJ - ВРЕМЯ ВЫБОРКИ АДРЕСА ПЕРЕХОДА
ЗНАЧЕНИЯ СОСТАВЛЯЮЩИХ ВРЕМЕНИ ПРИВЕДЕНЫ В СЛЕДУЮЩИХ ТАБЛИЦАХ
ПРИЛОЖЕНИЯ 8 :
T1 - В ТАБЛ. 1,
TS,TD ДЛЯ РАЗЛИЧНЫХ ТИПОВ АДРЕСАЦИИ - В ТАБЛ. 2,
TJ - В ТАБЛ. 3.
ВРЕМЕНА В ТАБЛИЦАХ ОПРЕДЕЛЯЮТСЯ С ИСПОЛЬЗОВАНИЕМ ТАКТОВОЙ
ЧАСТОТЫ T ПРОЦЕССОРА И ВРЕМЕН , ОПРЕДЕЛЯЕМЫХ БЫСТРОДЕЙСТВИЕМ
ЗАПОМИНАЮЩЕГО УСТРОЙСТВА:
TR - ВРЕМЯ ЧТЕНИЯ ИЗ ПАМЯТИ,
TW - ВРЕМЯ ЗАПИСИ В ПАМЯТЬ,
TM - ВРЕМЯ ЧТЕНИЯ ОПЕРАНДА И ЗАПИСИ РЕЗУЛЬТАТА ПО ТОМУ
ЖЕ АДРЕСУ ( ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ ).
ДЛЯ ИЗДЕЛИЯ 17М126 ЭТИ ВРЕМЕНА ИМЕЮТ СЛЕДУЮЩИЕ ЗНАЧЕНИЯ:
T = 0,125 МКС
TR = TW = 1 МКС
TM = 1,6 МКС
TF = TR ДЛЯ КОМАНДЫ, ВЫБИРАЕМОЙ НА ИСПОЛНЕНИЕ ПОСЛЕ
КОМАНДЫ ПЕРЕХОДА.
ДЛЯ ПОСЛЕДОВАТЕЛЬНОСТИ КОМАНД ( НЕ ИМЕЮЩЕЙ КОМАНД ПЕРЕХОДА )
В ФОРМУЛЕ ВЫЧИСЛЕНИЯ ВРЕМЕНИ ВЫПОЛНЕНИЯ КОМАНД ВРЕМЯ TF
НЕ УЧИТЫВАЕТСЯ.
ТАБЛИЦА I
ВРЕМЯ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ
-----------------------------------------------------------------
КОМАНДА TI - ВРЕМЯ ВЫПОЛНЕНИЯ
ОПЕРАЦИИ
-----------------------------------------------------------------
БИНАРНЫЕ КОМАНДЫ С МЕТОДАМИ
АДРЕСАЦИИ 2D,3D,4D,5D,
1S,2S,3S,4S 6T
MOV 9T
КОМАНДЫ УСЛОВНЫХ ПЕРЕХОДОВ 14T
BR 7T
RTS 17T + TR
JSR 1S 17T + TW
MFPS 0D 18T
SXT 0S 9T
MTPS 0S 13T
SOB 9T
DIV 0S 93T
ASH 0S 18T + NS 3T
ASHC 0S 21T + NS 3T
RESET 18T + 1545T + 1545T
IOT,BPT,EMT,TRAP 47T + 2TR + 2TW
RTI 19T + 2TR
SWAB 0D 9T
SWAB 1D - 7D 14T
JMP 1S 6T
RTT 19T + 2TR
MARK 23T + TR
MUL 60T
ОСТАЛЬНЫЕ КОМАНДЫ 3T
-----------------------------------------------------------------
В ТАБЛИЦЕ I ИСПОЛЬЗОВАНЫ СЛЕДУЮЩИЕ ОБОЗНАЧЕНИЯ:
0D - 7D - МЕТОД АДРЕСАЦИИ ОПЕРАНДА ПРИЕМНИКА (ИСТОЧНИКА),
0S - 4S В КОТОРОМ ЦИФРА ОБОЗНАЧАЕТ МЕТОД АДРЕСАЦИИ, А
D ИЛИ S - УКАЗЫВАЕТ НА РЕГИСТР, ИСПОЛЬЗУЕМЫЙ
ПРИ ДАННОЙ АДРЕСАЦИИ.
NS - КОЛИЧЕСТВО СДВИГОВ, УКАЗАННЫХ В КОМАНДЕ.
ПОД ТЕРМИНОМ "ОСТАЛЬНЫЕ КОМАНДЫ" В ТАБЛ.I СЛЕДУЕТ ПОНИМАТЬ
ВСЕ КОМАНДЫ, НЕ УКАЗАННЫЕ В ТАБЛ.I , И КОМАНДЫ, УКАЗАННЫЕ В ТАБЛ.I,
НО С НЕУКАЗАННЫМИ МЕТОДАМИ АДРЕСАЦИИ.
Короче - мрак и ужас :)))
...
ТАБЛИЦА 3
ВРЕМЯ ВЫБОРКИ АДРЕСА ПЕРЕХОДА
ДЛЯ КОМАНД JMP И JSR
------------------------------------------------------------------
МЕТОД АДРЕСАЦИИ TJ
------------------------------------------------------------------
1 0
2 3T
3 10T+TM
4 6T
5 7T+TM
6 TM
7 7T+TR+TM
...
Добавлен файл VM1C4.zip, содержащий "1801VM1 Timings Test #4".
Добавлен файл VM1T1.zip, содержащий "1801VM1 Interrupts Test #1".
Добавлен файл VM1T2.zip, содержащий "1801VM1 Interrupts Test #2".
Добавлен файл VM1T3.zip, содержащий "1801VM1 Interrupts Test #3".
Добавлен файл VM1T4.zip, содержащий "1801VM1 Interrupts Test #4".
Время выполнения команд процессорами типа PDP-11 складывается из синхронной части, определяемой микроархитектурой процессора ( и зависящей от тактовой частоты ) и из асинхронной части, определяемой продолжительностью переходных процессов системы памяти.
Относительно асинхронной задержки, вносимой каждым обращением к памяти по шине Q-Bus, справочники сообщают следующую информацию:
1. ПЗУ TadrR TadrW TadrM
1.1. К1801РЕ2а 300 нс
1.2. К1801РЕ2б 500 нс
1.3. К573РФ3 550 нс
2. ОЗУ
2.1. К565РУ3а 510 нс 510 нс 670 нс
2.2. К565РУ3в 410 нс 410 нс 520 нс
2.3. К565РУ3г 370 нс 370 нс 420 нс
2.4. К565РУ5б 230 нс 230 нс 310 нс
2.5. К565РУ5в 280 нс 280 нс 380 нс
2.6. К565РУ5г 360 нс 360 нс 460 нс
2.7. К565РУ5д 460 нс 460 нс 600 нс
Также сообщается задержка обращения для подсистем оперативной памяти различных ЭВМ архитектуры PDP-11:
СМ1300 500 нс 500 нс
СМ1600:
ИС тип А 540 нс 540 нс
ИС тип В 720 нс 720 нс
Электроника 60 400 нс 400 нс 700 нс
Эл. НЦ-80-01Д 400 нс 400 нс
17М126 1000 нс 1000 нс 1600 нс
Следовательно, быстродействие ДВК-1 ( процессор 1801ВМ1 ) с тактовой частотой 5 МГц ( T = 200 нс ) при выполнении регистровых команд ( Tcmd = TadrR + 8T ), в зависимости от быстродействия установленной памяти составит:
Задержка Оп./сек.
----------------------
200 нс 550 тыс
300 нс 525 тыс
400 нс 500 тыс
500 нс 480 тыс
600 нс 450 тыс
700 нс 430 тыс
1000 нс 380 тыс
При разгоне ДВК-1 до 6 МГц и использовании памяти с задержкой выборки 300 нс ( напр. К1801РЕ2а ) - быстродействие регистровых команд составит:
610 тыс. оп/сек.
...
Добавлен файл VM1T5.zip, содержащий "1801VM1 Interrupts Test #5".
Добавлен файл VM1RST.zip, содержащий "1801VM1 RESET Timings Meter v1.0".
Добавлен файл VM1T6.zip, содержащий "1801VM1 Interrupts Test #6".
Добавлен файл VM1MOV.zip, содержащий "1801VM1 MOV Timings Test v1.1".
Добавлен файл VM1ADD.zip, содержащий "1801VM1 ADD & SUB Timings Test v1.0".
Ещё немного информации о таймингах памяти.
Для микро-ЭВМ "Электроника 60" и "Электроника МС1212" сообщаются следующие характеристики поставляемых модулей памяти:
Модули ОЗУ
Тип Ёмкость TadrR
---------------------------------------------
П1 (15У30-4-002) 8 Кбайт 500 нс
П2 (15У30-4-003) 8 Кбайт 500 нс
П3 (15У30-16-004) 32 Кбайт 200 нс
П5 (МС3101) 64 Кбайт 200 нс
П7 (МС3102-01) 256 Кбайт 200 нс
П9 (МС3107) 512 Кбайт 260 нс
Модули ПЗУ
Тип Ёмкость TadrR
---------------------------------------------
ПП1 (ПЗУ) 2 Кбайт 120 нс
ПП2 (ППЗУ) 4 Кбайт 1000 нс
...
Относительно длины конвеера предвыборки у процессоров семейства 1801.
1801ВМ1 - Конвеер отсутствует.
1801ВМ2 - Конвеер предвыборки команд на 2 слова.
1801ВМ3 - Конвеер предвыборки на 4 слова.
...
Добавлен файл VM1BIS_&_VM1CMP.zip, содержащий "1801VM1 BIS & BIC Timings Test v1.0" и "1801VM1 CMP & BIT Timings Test v1.0".
Добавлен файл VM1T7.zip, содержащий "1801VM1 Interrupts Test #7".
Добавлен файл VM1C5.zip, содержащий "1801VM1 Timings Test #5".
Добавлен файл VM1C6.zip, содержащий "1801VM1 Timings Test #6".
Проведённое исследование растактовки цикла чтения ДВК-1 позволяет более объективно оценить число тактов, необходимых процессору 1801ВМ1 для выполнения различных команд.
CPU:
http://s1.hostingkartinok.com/uploads/images/2012/10/115368d71e9929414aa7c50c3ab6e587.pngROM:
http://s4.hostingkartinok.com/uploads/images/2012/10/48ba948207e7a8a5e89860ec79f2332c.pngDEV:
http://s4.hostingkartinok.com/uploads/images/2012/10/998e14f48c38fc8c33d767e4b1245612.pngRAM:
http://s4.hostingkartinok.com/uploads/images/2012/10/475d50c8bc791397ccbe4608c9c2bd96.png
MOV (R0), R1
BR .-2.
http://s1.hostingkartinok.com/uploads/images/2012/10/6788a4e0d23f91b097f9d355f40aac2a.png
MOV (R0), R1
JMP (R2)
http://s4.hostingkartinok.com/uploads/images/2012/10/ad15dfa1ac797ac98aaed6b9041ee64c.png
Для первых 4-х наблюдений можно составить следующую таблицу зависимости продолжительности выполнения команды в тактах ( интервал BSY1-BSY1 ) от продолжительности DIN1-RPLY1:
JMP (R0) в 0177706 ( CPU ): DIN1-RPLY1 == 0 ; BSY1-BSY1 == 18
JMP (R0) в 0160110 ( ROM ): DIN1-RPLY1 == 2 ; BSY1-BSY1 == 20
JMP (R0) в 0177562 ( DEV ): DIN1-RPLY1 == 4 ; BSY1-BSY1 == 22
JMP (R0) в 0000000 ( RAM ): DIN1-RPLY1 == 6 ; BSY1-BSY1 == 24
Основные выводы следующие:
1. Растактовки цикла чтения ( цикл DATI ) имеют только один интервал, зависящий от типа адресуемой памяти - это интервал между установкой DIN и установкой RPLY ( DIN1-RPLY1 ).
2. Обработка процессором принятых данных начинается сразу после снятия сигнала DIN ( событие DIN0 ), поэтому время выполнения команд не зависит от продолжительности интервала DIN0-RPLY0.
3. Число дополнительных к интервалу DIN1-RPLY1 тактов, необходимых для выполнения команды - неизменно.
Тест таймингов простых команд и прерываний 1801VM1 Timings Test #4 (http://zx.pk.ru/attachment.php?attachmentid=25144) на разных этапах своего развития (и разных прогонах) на ДВК-1 5.3 МГц давал немного отличающиеся результаты:
Scale: 1024
Retry: 64
Return : 35 ! RtI : 45 ! RtT : 45 ! IOT : 82 ! Trap : 81 !
Add #6,R0 : 29
SOB : 22 ! Br : 17 ! BCS : 17 ! BCC : 17 ! Nop : 14 ! SeC : 14 ! ClC : 14 !
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Tst 14 29 29 42 29 43 42 42 55
TstB 14 29 29 42 29 43 42 42 55
SXt 14 41 41 54 41 55 54 54 67
MFPS 14 41 41 55 42 55 54 54 67
MTPS 26 34 34 48 35 49 48 48 61
SwaB 14 41 41 55 41 55 54 54 67
Clr 14 41 41 54 42 55 54 55 67
ClrB 14 41 41 55 42 55 55 55 67
Inc 14 41 41 55 42 55 55 55 67
IncB 14 41 41 55 42 55 55 54 67
Dec 14 41 41 54 42 55 55 55 67
DecB 14 41 41 54 42 55 54 54 67
AdC 14 41 41 54 42 55 54 54 67
AdCB 14 41 41 54 42 55 54 54 67
SbC 14 41 41 54 42 55 54 54 67
SbCB 14 41 41 54 42 55 54 54 67
ASL 14 41 41 54 42 55 54 54 67
ASLB 14 41 41 54 42 55 54 54 67
ASR 14 41 41 54 42 55 54 54 67
ASRB 14 41 41 54 41 55 54 54 67
RoL 14 41 41 54 42 55 54 54 67
RoLB 14 41 41 54 41 55 54 54 67
RoR 14 41 41 54 41 55 54 54 67
RoRB 14 41 41 54 41 55 54 54 67
Com 14 41 41 54 41 55 54 54 67
ComB 14 41 41 54 41 55 54 54 67
Neg 14 41 41 54 41 55 54 54 67
NegB 14 41 41 54 42 55 54 54 67
Jmp 24 26 35 35 35 48
Call 38 39 49 49 49 62
BiS #100,@#TTPS : 64
BiS #100,@#TTPS + Nop : 77
IOT + Handler : 248
Interrupts count : 1024
Handler only : 166
BiS+Nop+Intr+Handler : 342
Interrupts count : 1024
BiS + Nop + Interrupt : 176
Interrupt only : 99
Scale: 256
Retry: 300
Return : 35 ! RtI : 46 ! RtT : 46 ! IOT : 80 ! Trap : 80 !
Add #6,R0 : 30
SOB : 22 ! Br : 17 ! BCS : 17 ! BCC : 17 ! Nop : 14 ! SeC : 14 ! ClC : 14 !
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Tst 14 29 29 42 30 43 42 42 56
TstB 14 29 29 42 30 43 42 42 56
MTPS 26 35 35 48 35 49 48 48 61
MFPS 14 41 41 54 41 55 54 54 67
XOr 14 43 43 56 44 56 56 56 70
SXt 14 41 41 54 41 55 54 54 67
SwaB 14 41 41 54 41 55 54 54 67
Clr 14 41 41 54 41 55 54 54 67
ClrB 14 41 41 54 41 55 54 54 67
Inc 14 41 41 54 41 55 54 54 67
IncB 14 41 41 54 41 55 54 54 67
Dec 14 41 41 54 41 55 54 54 67
DecB 14 41 41 54 41 55 54 54 67
AdC 14 41 41 54 41 55 54 54 67
AdCB 14 40 40 54 41 55 54 54 67
SbC 14 41 40 54 41 55 54 54 67
SbCB 14 40 41 54 41 55 54 54 67
ASL 14 41 41 54 41 55 54 54 67
ASLB 14 41 41 54 41 55 54 54 67
ASR 14 41 40 54 41 55 54 54 67
ASRB 14 41 41 54 41 55 54 54 67
RoL 14 40 41 54 41 55 54 54 67
RoLB 14 40 40 54 41 55 54 54 67
RoR 14 41 40 54 41 55 54 54 67
RoRB 14 41 41 54 41 55 54 54 67
Com 14 40 41 54 41 55 54 54 67
ComB 14 40 41 54 41 55 54 54 67
Neg 14 41 40 54 41 55 54 54 67
NegB 14 41 41 54 41 55 54 54 67
Jmp 24 26 35 35 35 48
Call 39 40 49 49 49 61
BiS R0,(R1) : 42
BiS R0,(R1) + Nop : 58
Handler cycles : 256
Handler : 165
BiS+Nop+Intr+Handler : 315
Interrupts count : 256
BiS + Nop + Interrupt : 150
Interrupt only : 92
Тем не менее некоторые выводы сделать можно.
Из описания 1801ВМ1 известно, что продолжительность команды NOP равна 8T+tn, где T - продолжительность такта, а tn - продолжительность интервала DIN1-RPLY1.
Зная, что 8T+tn = 14T - определяем tn = 6T, что полностью соответствует результатам непосредственного измерения интервала DIN1-RPLY1 у ОЗУ ДВК-1.
Теперь подставим tn = 6T в официальную таблицу таймингов команд 1801ВМ1:
Времена выполнения команд:
одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 20T+3tn <Испр. 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+4tn <Испр. 3 0 25T+3tn
4 21T+3tn 4 0 19T+2tn <Испр.
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+4tn <Испр.
0 1 26T+3tn <Испр.
Время выполнения команд 0 2 28T+3tn <Испр.
управления HALT=54T+7tn 0 3 31T+4tn <Испр.
команд IOT,BPT,EMT,TRAP 0 4 28T+3tn <Испр.
42T+5tn; команд устано- 0 5 32T+4tn <Испр.
вки и очистки признаков 0 6 31T+4tn <Испр.
8T+tn; максимальное 0 7 40T+5tn <Испр.
время ожидания ПДП 8T+ 1 1 28T+4tn <Испр.
+2tn для цикла ввод-па- 2 2 30T+4tn <Испр.
уза-вывод; максимальное 3 3 40T+6tn <Испр.
время от момента запро- 4 4 31T+4tn <Испр.
са прерывания до выбор- 5 5 42T+6tn <Испр.
ки первой команды ново- 6 6 40T+6tn <Испр.
го процесса 98T+12tn 7 7 56T+8tn <Испр.
(время выполнения самой
длинной команды + IOT)
В таблицах приведены времена исполнения для одноадресных команд
COM, INC, DEC, ADC, SBC, ASR, ASL, ROL, ROR, CLR, и для двухадресных
ADD, SUB, BIC, BIS, XOR. За T обозначен период тактовой частоты процессора,
tn-время между выдачей DIN/DOUT и приходом RPLY.и получим "официальные предсказания" для результатов приведённого выше теста:
Времена выполнения команд:
одноадресных
метод время
адресации выполнения
0 14T
1 38T
2 38T
3 51T
4 39T
5 52T
6 51T
7 64T
Время выполнения команд
управления HALT=96T
команд IOT,BPT,EMT,TRAP
72T; команд устано-
вки и очистки признаков
14T; максимальное
время ожидания ПДП 20T
для цикла ввод-пауза-вывод;
максимальное
время от момента запро-
са прерывания до выбор-
ки первой команды ново-
го процесса 170T
(время выполнения самой
длинной команды + IOT)
В таблицах приведены времена исполнения для одноадресных команд
COM, INC, DEC, ADC, SBC, ASR, ASL, ROL, ROR, CLR, и для двухадресных
ADD, SUB, BIC, BIS, XOR.В формате вывода результатов тестирования это выглядит так:
Предсказанные:
IOT : 72 ! Trap : 72 !
Nop : 14 ! SeC : 14 ! ClC : 14 !
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Inc 14 38 38 51 39 52 51 51 64
Полученные:
IOT : 80 ! Trap : 80 !
Nop : 14 ! SeC : 14 ! ClC : 14 !
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Inc 14 41 41 54 42 55 54 54 67
Как видим - при выполнении одноадресных команд с методами адресации операнда 1;2;3;4;5;6;7 реальный процессор ДВК-1 стабильно тратил на 3 такта больше, чем "идеальный".
При выполнении программных прерываний измеренное значение превысило предсказанное на 8 тактов.
...
В формате "официальной таблицы" - определённые в результате тестирования формулы быстродействия однооперандных команд процессора 1801ВМ1 в составе ДВК-1 выглядят так:
Времена выполнения команд:
одноадресных
метод время
адресации выполнения
0 8T+tn
1 23T+3tn
2 23T+3tn
3 30T+4tn
4 24T+3tn
5 31T+4tn
6 30T+4tn
7 37T+5tn
Не буду засорять тему!
Организационный момент, все выложенные автором тесты прилепил в разделе ДВК одним архивом с описанием
http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/Patron_vm1test/
При разгоне ДВК-1 до 6 МГц и использовании памяти с задержкой выборки 300 нс ( напр. К1801РЕ2а ) - быстродействие регистровых команд составит:
610 тыс. оп/сек.
Это соответствует примерно производительности обычного ВМ2?
http://s1.hostingkartinok.com/uploads/images/2012/10/ea0f7d7e5ed4c10feb662ba2c3e6d2a2.png
все выложенные автором тесты прилепил в разделе ДВК одним архивомЗаглянув в каталог с тестами я обнаружил там 77 файлов - см. TESTs.rar (http://zx.pk.ru/attachment.php?attachmentid=37937) в приложении.
Это соответствует примерно производительности обычного ВМ2?В составе ДВК-1 и БК процессор 1801ВМ1 тратит очень много времени на ожидание памяти.
Формулы быстродействия 1801ВМ2 выглядят так:
http://s1.hostingkartinok.com/uploads/images/2012/10/802eaf3c45df171659222e4646225a6b.jpg
В формате описания ВМ1 - формулы для ВМ2 будут выглядеть так:
Времена выполнения команд:
одноадресных
метод время время
адресации выполнения ВМ1 выполнения ВМ2
0 8T+tn 8T+tn
1 23T+3tn 23T+3tn
Вообще, весьма похоже, что микропрограммы реализации большинства команд у ВМ1 и ВМ2 идентичны.
я обнаружил там 77 файлов
Несмотря на совпадения в названиях файлов (т.е повторы) архив TESTs.RAR из этого сообщения просто добавлю в ту же папку (в один архив) (http://archive.pdp-11.org.ru/ukdwk_archive/dwkwebcomplekt/Patron_vm1test/) как есть, без дополнительных комментариев, в текстовом файле есть ссылка на авторскую тему в форуме, думаю
такой вариант вполне приемлем? Поскольку я просто сделал КОПИ/ПАСТ, а к дополнительным файлам никакой информацией не располагаю.
Кстати говоря по поводу этой цифры в тестах для УК-НЦ, такой высокий показатель
на живых платах не видел ни разу. Иногда он ниже 580, но никогда не видел больше
610 (!) и то только на одной из плат, скрин естественно в эмуляторе был сделан.
Вот такое расхождение в значениях говорит о несовершенстве теста (УКНЦшного) или ньюансах конкретного аппарата (платы) ?
Вообще, весьма похоже, что микропрограммы реализации большинства команд у ВМ1 и ВМ2 идентичны.
Реализация может и идентична, но из-за предвыборки команды скорость выполнения должна быть разной.
Тема (близкая) созданная ранее http://zx.pk.ru/showthread.php?t=18184
Тесты продолжительности (в тактах) двухоперандных команд процессора 1801ВМ1 дали на ДВК-1 5.3 МГц следующие результаты:
1801VM1 MOV Timings Test v1.1 (http://zx.pk.ru/attachment.php?attachmentid=25141)
Scale: 256
Retry: 256
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Mov R1 14 37 41 49 41 50 49 49 64
Mov (R1) 30 45 49 59 49 59 59 59 72
Mov (R1)+ 30 46 49 59 49 59 59 59 72
Mov @(R1)+ 43 59 62 72 62 73 73 73 84
Mov -(R1) 30 47 49 59 49 60 59 59 73
Mov @-(R1) 44 60 63 73 63 73 73 73 86
Mov Addr 43 59 62 73 62 73 73 73 85
Mov @Tab(R1) 56 73 73 85 73 86 85 85 98
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
MovB R1 14 37 41 49 41 51 49 49 64
MovB (R1) 30 46 49 59 49 60 59 59 73
MovB (R1)+ 30 46 49 59 49 60 59 59 73
MovB @(R1)+ 43 59 62 73 62 73 73 73 85
MovB -(R1) 30 47 49 59 49 60 59 59 73
MovB @-(R1) 44 60 63 73 63 73 73 73 86
MovB Addr 43 59 62 73 62 73 73 73 85
MovB @Tab(R1) 56 73 73 85 73 86 85 85 98
1801VM1 ADD & SUB Timings Test v1.0 (http://zx.pk.ru/attachment.php?attachmentid=25143)
Scale: 256
Retry: 400
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Add R1 14 47 47 60 49 61 60 60 73
Add (R1) 30 55 55 69 56 70 69 69 82
Add (R1)+ 30 55 55 69 56 70 69 69 82
Add @(R1)+ 43 68 68 82 70 83 82 82 95
Add -(R1) 30 56 56 69 56 70 69 69 82
Add @-(R1) 44 69 69 82 70 83 82 82 96
Add Addr 43 68 68 82 70 83 82 82 95
Add @Tab(R1) 56 81 81 95 82 95 95 95 108
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Sub R1 14 47 47 60 49 61 60 60 73
Sub (R1) 30 55 55 69 56 70 69 69 82
Sub (R1)+ 30 55 55 69 56 70 69 69 82
Sub @(R1)+ 43 68 68 82 70 83 82 82 95
Sub -(R1) 30 56 56 69 56 70 69 69 82
Sub @-(R1) 44 69 69 82 70 83 82 82 96
Sub Addr 43 68 68 82 70 83 82 82 95
Sub @Tab(R1) 56 81 81 95 82 95 95 95 108
1801VM1 CMP & BIT Timings Test v1.0 (http://zx.pk.ru/attachment.php?attachmentid=25155)
Scale: 256
Retry: 400
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
BiT R1 14 35 35 49 36 49 49 49 61
BiT (R1) 30 43 43 56 44 58 57 57 70
BiT (R1)+ 30 43 43 57 44 58 57 57 70
BiT @(R1)+ 43 57 57 70 58 71 70 70 83
BiT -(R1) 31 44 44 57 45 58 57 57 71
BiT @-(R1) 44 57 57 71 58 72 71 71 84
BiT Addr 43 57 57 70 58 71 70 70 83
BiT @Tab(R1) 56 70 70 83 71 84 83 83 96
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
BiTB R1 14 35 35 49 36 49 49 49 61
BiTB (R1) 30 43 43 57 44 58 57 57 70
BiTB (R1)+ 30 43 43 57 44 58 57 57 70
BiTB @(R1)+ 43 57 57 70 58 71 70 70 83
BiTB -(R1) 31 44 44 57 45 58 57 57 71
BiTB @-(R1) 44 57 57 70 58 72 70 71 84
BiTB Addr 43 57 57 70 58 71 70 70 83
BiTB @Tab(R1) 56 70 70 83 71 84 83 83 96
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Cmp R1 14 35 35 49 36 49 49 49 61
Cmp (R1) 30 43 43 57 44 58 57 57 70
Cmp (R1)+ 30 43 43 57 44 58 57 57 70
Cmp @(R1)+ 43 57 57 70 58 71 70 70 83
Cmp -(R1) 31 44 44 57 45 58 57 57 71
Cmp @-(R1) 44 57 57 71 58 72 71 71 84
Cmp Addr 43 57 57 70 57 71 70 70 83
Cmp @Tab(R1) 56 70 70 83 71 84 83 83 96
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
CmpB R1 14 35 35 49 36 49 49 49 61
CmpB (R1) 30 43 43 56 44 58 56 56 70
CmpB (R1)+ 30 43 43 56 44 58 57 57 70
CmpB @(R1)+ 43 57 57 70 58 71 70 70 83
CmpB -(R1) 30 44 44 57 45 58 57 57 71
CmpB @-(R1) 44 57 57 70 58 72 70 70 84
CmpB Addr 43 56 56 70 58 71 70 70 83
CmpB @Tab(R1) 56 70 70 83 71 84 83 83 96
1801VM1 BIS & BIC Timings Test v1.0 (http://zx.pk.ru/attachment.php?attachmentid=25155)
Scale: 256
Retry: 400
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
BiC R1 14 47 47 60 49 61 60 60 73
BiC (R1) 30 55 55 69 56 70 69 69 82
BiC (R1)+ 30 55 55 69 56 70 69 69 82
BiC @(R1)+ 43 68 68 82 70 83 82 82 95
BiC -(R1) 30 55 55 69 57 70 69 69 82
BiC @-(R1) 44 69 69 82 70 83 82 82 96
BiC Addr 43 68 68 82 70 83 82 82 95
BiC @Tab(R1) 56 82 82 95 82 95 95 95 109
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
BiCB R1 14 47 47 60 49 61 60 60 73
BiCB (R1) 30 55 55 69 56 70 69 69 82
BiCB (R1)+ 30 55 55 69 56 70 69 69 82
BiCB @(R1)+ 43 68 68 82 70 83 82 82 95
BiCB -(R1) 31 55 55 69 57 70 69 69 82
BiCB @-(R1) 44 69 69 82 70 83 82 82 96
BiCB Addr 43 68 68 82 70 83 82 82 95
BiCB @Tab(R1) 56 82 82 95 82 96 95 95 109
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
BiS R1 14 47 47 60 49 61 60 60 73
BiS (R1) 30 55 55 69 56 70 69 69 82
BiS (R1)+ 30 55 55 69 56 70 69 69 82
BiS @(R1)+ 43 68 68 82 70 83 82 82 95
BiS -(R1) 31 55 55 69 57 70 69 69 82
BiS @-(R1) 44 69 69 82 70 83 82 82 96
BiS Addr 43 68 68 82 70 83 82 82 95
BiS @Tab(R1) 56 82 82 95 82 96 95 95 109
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
BiSB R1 14 47 47 60 49 61 60 60 73
BiSB (R1) 30 55 55 69 56 70 69 69 82
BiSB (R1)+ 30 55 55 69 56 70 69 69 82
BiSB @(R1)+ 43 68 68 82 70 83 82 82 95
BiSB -(R1) 31 55 55 69 57 70 69 69 82
BiSB @-(R1) 44 69 69 82 70 83 82 82 96
BiSB Addr 43 68 68 82 70 83 82 82 95
BiSB @Tab(R1) 56 82 82 95 82 96 95 95 109
Если взять исправленную "официальную таблицу" таймингов команд процессора 1801ВМ1 для двухоперандных команд типа ADD и добавить туда измеренные значения - получится так:
Времена выполнения команд:
двухадресных предсказанное измеренное
метод адресации время время разница
источн. приемн. выполнения выполнения
0 0 8T+tn 8T+tn 0
1 0 18T+2tn 18T+2tn 0
2 0 18T+2tn 18T+2tn 0
3 0 25T+3tn 25T+3tn 0
4 0 19T+2tn 19T+2tn 0
5 0 26T+3tn 26T+3tn 0
6 0 25T+3tn 25T+3tn 0
7 0 32T+4tn 32T+4tn 0
0 1 26T+3tn 29T+3tn +3
0 2 28T+3tn 29T+3tn +1
0 3 31T+4tn 36T+4tn +5
0 4 28T+3tn 31T+3tn +3
0 5 32T+4tn 37T+4tn +5
0 6 31T+4tn 36T+4tn +5
0 7 40T+5tn 43T+5tn +3
1 1 28T+4tn 31T+4tn +3
2 2 30T+4tn 31T+4tn +1
3 3 40T+6tn 46T+6tn +6
4 4 31T+4tn 32T+4tn +1
5 5 42T+6tn 47T+6tn +5
6 6 40T+6tn 46T+6tn +6
7 7 56T+8tn 60T+8tn +4
Для команд, не пишущих результат в память - совпадение предсказанных и измеренных результатов идеальное.
При выполнении завершающего команду цикла ЧТЕНИЕ-МОДИФИКАЦИЯ-ЗАПИСЬ ( цикл DATIO ) - реально команда выполняется немного медленнее, чем предсказано.
...
P.S.
В процессе изучения "официальной таблицы таймингов" из описания 1801ВМ1 - выяснилось, что её исходный вариант имеет ошибки с указанием числа ожиданий сигнала RPLY ( tn ) - практически в каждой строке.
Для сравнения - исходный и исправленный варианты таблицы:
Времена выполнения команд:
одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 21T+3tn 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+3tn 3 0 25T+3tn
4 21T+3tn 4 0 20T+2tn
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+3tn
0 1 26T+2tn
Время выполнения команд 0 2 28T+2tn
управления HALT=54T+7tn 0 3 31T+3tn
команд IOT,BPT,EMT,TRAP 0 4 28T+2tn
42T+5tn; команд устано- 0 5 32T+3tn
вки и очистки признаков 0 6 31T+3tn
8T+tn; максимальное 0 7 40T+4tn
время ожидания ПДП 8T+ 1 1 28T+3tn
+2tn для цикла ввод-па- 2 2 30T+3tn
уза-вывод; максимальное 3 3 40T+5tn
время от момента запро- 4 4 31T+3tn
са прерывания до выбор- 5 5 42T+5tn
ки первой команды ново- 6 6 40T+5tn
го процесса 98T+12tn 7 7 56T+7tn
(время выполнения самой
длинной команды + IOT)
Времена выполнения команд:
одноадресных двухадресных
метод время метод адресации время
адресации выполнения источн. приемн. выполнения
0 8T+tn 0 0 8T+tn
1 20T+3tn <Испр. 1 0 18T+2tn
2 20T+3tn 2 0 18T+2tn
3 27T+4tn <Испр. 3 0 25T+3tn
4 21T+3tn 4 0 19T+2tn <Испр.
5 28T+4tn 5 0 26T+3tn
6 27T+4tn 6 0 25T+3tn
7 34T+5tn 7 0 32T+4tn <Испр.
0 1 26T+3tn <Испр.
Время выполнения команд 0 2 28T+3tn <Испр.
управления HALT=54T+7tn 0 3 31T+4tn <Испр.
команд IOT,BPT,EMT,TRAP 0 4 28T+3tn <Испр.
42T+5tn; команд устано- 0 5 32T+4tn <Испр.
вки и очистки признаков 0 6 31T+4tn <Испр.
8T+tn; максимальное 0 7 40T+5tn <Испр.
время ожидания ПДП 8T+ 1 1 28T+4tn <Испр.
+2tn для цикла ввод-па- 2 2 30T+4tn <Испр.
уза-вывод; максимальное 3 3 40T+6tn <Испр.
время от момента запро- 4 4 31T+4tn <Испр.
са прерывания до выбор- 5 5 42T+6tn <Испр.
ки первой команды ново- 6 6 40T+6tn <Испр.
го процесса 98T+12tn 7 7 56T+8tn <Испр.
(время выполнения самой
длинной команды + IOT)
Так ( например ) авторы "официальной таблицы" ошибочно указали, что в ходе выполнения команды ADD @Tab(R1), @Tab(R0) процессор 1801ВМ1 ожидает сигнал RPLY - 7 раз, тогда как на самом деле - 8, чтобы:
1 - прочитать код команды;
2 - прочитать смещение первого аргумента
3 - прочитать адрес первого аргумента
4 - прочитать первый аргумент
5 - прочитать смещение второго аргумента
6 - прочитать адрес второго аргумента
7 - прочитать второй аргумент
8 - записать результат
2 - прочитать смещение первого аргумента
3 - прочитать адрес первого аргумента
Не совсем понимаю различие этих операций? Разве смещение не есть адрес?
Может авторы эти две операции объединяли получая 7 а не 8 значение?
А стоп! Тогда бы и для второго аргумента это было бы.
Глупость написал. Но различие всё равно не совсем улавливаю,
В любом случае.
Не совсем понимаю различие этих операций? Разве смещение не есть адрес?При косвенно-индексном методе адресации типа @Offset(Rn) - прибавление смещения к содержимому регистра даёт адрес адреса, поэтому, чтобы прочитать значение - нужно:
1. Прочитать смещение.
2. Прибавить смещение к регистру.
3. Прочитать адрес.
4. Прочитать значение.
Если интересно, для сравнения могу отсканировать главу про время выполнения команд из документации от Э100-25 :)
Если интересно, для сравнения могу отсканировать главу про время выполнения команд из документации от Э100-25Конечно интересно!
Конечно интересно!
Электроника 100-25, книга 3, глава 4. Время выполнения команд. (http://pdp-11.org.ru/~form/files/pdp-11/timing-e100_25.djvu)
Если свести всё разнообразие таймингов команд процессора 1801ВМ1 в единую "формулу быстродействия", позволяющую точно определить число тактов, необходимых процессору для выполнения любой команды ( при возможном нахождении различных операндов в различных типах памяти ), то формула в самом общем виде будет выглядеть так:
[Время выполнения команды] = [Суммарное время всех циклов шины] + [Суммарное время всех штрафов].
Процессор 1801ВМ1 использует следующие циклы шины Q-Bus:
1. DATI ( Чтение ) - для выборки команд и не модифицируемых данных из памяти.
2. DATO / DATOB ( Запись / Запись байта ) - только в командах MOV и MOVB для записи результата в память.
3. DATIO ( Чтение-Модификация-Запись ) - для доступа ко всем модифицируемым данным в памяти.
Время выполнения циклов процессором 1801ВМ1 зависит от продолжительности периода тактовой частоты T и времени задержки памяти tn:
DATI : [ 7*T+tn]
DATO : [10*T+tn]
DATIO: [13*T+tn+tn]
В дальнейшем изложении (для простоты) множитель *T упоминаться не будет, поэтому формулы продолжительности циклов шины будут иметь такой вид:
DATI : [7+tn]
DATO : [10+tn]
DATIO: [13+2tn]
Время задержки памяти (в тактах) для ОЗУ ДВК-1: tn = 6, для ПЗУ ДВК-1: tn = 2.
Поэтому, например - в ОЗУ ДВК-1 цикл чтения ( DATI ) будет выполняться за 7 + 6 = 13 тактов.
...
Теперь рассмотрим какие штрафы быстродействия (в тактах) имеет процессор 1801ВМ1 при выполнении команд:
1. [Штраф исполнения] = 1 - для всех команд.
2. [Штраф второго операнда] = 1 - для команд, использующих два операнда,
если один из них в памяти.
3. [Штраф отмены предвыборки] = 2 - для команд, выполняющих больше одного
цикла шины.
4. [Штраф префиксной адресации] = 1 - для каждого операнда с
префиксной адресацией.
5. [Штраф невзаимности] = 5 ( для MOV = 4 ) - для команд, у которых
первый операнд не обращается к памяти,
а второй - обращается.Кроме того, команда MOV имеет при некоторых режимах адресации дополнительные штрафы от 1 до 4 тактов, природа которых пока совсем не понятна.
Теперь попробуем определить при помощи предложенного формализма продолжительность выполнения процессором 1801ВМ1 в ОЗУ ДВК-1 команды
Add @TAB(R1), -(R0)1. Сначала определим используемые циклы шины и их продолжительность: DATI (чтение кода команды) + DATI (чтение смещения к адресу первого операнда) + DATI (чтение адреса первого операнда) + DATI (чтение первого операнда) + DATIO (чтение-модификация-запись второго операнда) = [7+tn]+[7+tn]+[7+tn]+[7+tn]+[13+2tn] = 77 тактов.
2. Теперь определим используемые штрафы: [Штраф исполнения]+[Штраф второго операнда]+[Штраф отмены предвыборки]+[Штраф префиксной адресации ( за второй операнд ) ] = 1+1+2+1 = 5 тактов.
3. Определим суммарную продолжительность выполнения команды: 77 + 5 = 82 такта ( что полностью соответствует измеренной величине ) .
2. DATO / DATOB ( Запись / Запись байта ) - только в командах MOV и MOVB для записи результата в память.
А у CLR и подобных команд какой цикл?
NovaStorm
18.12.2012, 16:38
Так команды с байтами получаются быстрее или медленнее? И насколько?
А у CLR и подобных команд какой цикл?
Так команды с байтами получаются быстрее или медленнее? И насколько?
Таблицы таймингов рулят.
Scale: 256
Retry: 300
Return : 35 ! RtI : 46 ! RtT : 46 ! IOT : 80 ! Trap : 80 !
Add #6,R0 : 30
SOB : 22 ! Br : 17 ! BCS : 17 ! BCC : 17 ! Nop : 14 ! SeC : 14 ! ClC : 14 !
R0 (R0) (R0)+ @(R0)+ -(R0) @-(R0) Addr @#Addr @Tab(R0)
Tst 14 29 29 42 30 43 42 42 56
TstB 14 29 29 42 30 43 42 42 56
MTPS 26 35 35 48 35 49 48 48 61
MFPS 14 41 41 54 41 55 54 54 67
XOr 14 43 43 56 44 56 56 56 70
SXt 14 41 41 54 41 55 54 54 67
SwaB 14 41 41 54 41 55 54 54 67
Clr 14 41 41 54 41 55 54 54 67
ClrB 14 41 41 54 41 55 54 54 67
Inc 14 41 41 54 41 55 54 54 67
IncB 14 41 41 54 41 55 54 54 67
Dec 14 41 41 54 41 55 54 54 67
DecB 14 41 41 54 41 55 54 54 67
AdC 14 41 41 54 41 55 54 54 67
AdCB 14 40 40 54 41 55 54 54 67
SbC 14 41 40 54 41 55 54 54 67
SbCB 14 40 41 54 41 55 54 54 67
ASL 14 41 41 54 41 55 54 54 67
ASLB 14 41 41 54 41 55 54 54 67
ASR 14 41 40 54 41 55 54 54 67
ASRB 14 41 41 54 41 55 54 54 67
RoL 14 40 41 54 41 55 54 54 67
RoLB 14 40 40 54 41 55 54 54 67
RoR 14 41 40 54 41 55 54 54 67
RoRB 14 41 41 54 41 55 54 54 67
Com 14 40 41 54 41 55 54 54 67
ComB 14 40 41 54 41 55 54 54 67
Neg 14 41 40 54 41 55 54 54 67
NegB 14 41 41 54 41 55 54 54 67
Jmp 24 26 35 35 35 48
Call 39 40 49 49 49 61
BiS R0,(R1) : 42
BiS R0,(R1) + Nop : 58
Handler cycles : 256
Handler : 165
BiS+Nop+Intr+Handler : 315
Interrupts count : 256
BiS + Nop + Interrupt : 150
Interrupt only : 92
По идее - во 2-й и 3-й колонках везде должно быть 40 тактов, а не 41.
NovaStorm
19.12.2012, 14:12
>Таблицы таймингов рулят.
Это конечно, но элементарных вопросов, когда всё познаёшь с нуля не избежать.
Как я понимаю по таблице, с байтами команды работают то же время, что и со словами. Это же таблица для однооперандных команд? И почему время выполнения OPR @(R0)+ и ORP @-(R0) отличается на такт? Неужели из-за того, что постинкремент мог параллелиться с основной командой?
И почему время выполнения OPR @(R0)+ и ORP @-(R0) отличается на такт? Неужели из-за того, что постинкремент мог параллелиться с основной командой?Именно!
Вообще, независимая параллельная работа отдельных блоков ( шинного, управляющего и арифметического ) применяется в процессорах ВМх везде, где только можно.
Разработчики стремились сделать так, чтобы на каждом такте каждый блок процессора вносил максимальный вклад в итоговое быстродействие.
Например, судя по итогам проведённого тестирования - шинный блок 1801ВМ1 сам начинает (предположительно) предвыборку кода следующей команды, пока управляющий блок ещё не раскодировал текущую. Из-за этого в тех случаях, когда текущая команда запрашивает дополнительный цикл шины ( чтобы прочитать или записать операнд ) - происходит удлинение выполнения команды из-за отмены предвыборки (это может быть и просто задержка получения исполнительного адреса). Штраф отмены предвыборки у 1801ВМ1 составляет 2 такта ( или, возможно, только 1 такт - это ещё предстоит уточнить ).
NovaStorm
19.12.2012, 14:48
Ого, таки не лаптем щи у нас хлебали! =)
CodeMaster
19.12.2012, 16:53
Ого, таки не лаптем щи у нас хлебали! =)
Не у нас, вроде, а в DEC. Или, как в случае с 580ИК80, контактные площадки рулят? ;-)
Не у нас, вроде, а в DEC.Только если микроядро LSI-11 может осуществлять несколько операций параллельно, как это делает 1801ВМ1.
CodeMaster
19.12.2012, 23:22
Только если микроядро LSI-11 может осуществлять несколько операций параллельно, как это делает 1801ВМ1.
Я наверняка могу сильно ошибаться, поскольку LSI-11 я не тестировал, но ИМХО параллелизм ВМ1 (и скорее всего и LSI-11) основаны на использовании микрокода. И ортогональность системы команд, на мой вгляд ,тому тоже подтверждение. Такая чёткая структура команд позволяет легче побитно делить их между блоками процессора и выполнять параллельно. А та предвыборка шинного блока, о которой ты писал, может и наше изобретение.
NovaStorm
20.12.2012, 09:24
Не у нас, вроде, а в DEC.
Не, реализация-то наша. Архитектура PDP вообще из-за постоянного доступа к памяти хреново параллелится. DEC более-менее приличную архитектуру только к альфе осилила и то, грелась она как печка, а производительности было не так уж сильно больше чем у PPro.
CodeMaster
20.12.2012, 09:54
Архитектура PDP вообще из-за постоянного доступа к памяти хреново параллелится. DEC более-менее приличную архитектуру только к альфе осилила и то, грелась она как печка, а производительности было не так уж сильно больше чем у PPro.
Ну, это совсем другая история: когда параллельно работают отдельные блоки процессора и настоящая суперскалярность с конвейером и множеством дублирующих блоков. Вопрос в том, что например в Z80 с его "жестким" ядром нужен был бы именно конвейер и допблоки, а в ВМ1 это брал на себя микрокод. И опять же в современных гибридных процессорах, суперскалярностью управляет микрокод, без него процессор был слишком сложен и малоэффективен. Вопрос в том, что эти преимущества микрокода стали использовать у нас или уже в DEC.
NovaStorm
20.12.2012, 10:16
а в ВМ1 это брал на себя микрокод
Разве микрокод может на себя _эффективно_ такое брать?
Вопрос в том, что эти преимущества микрокода стали использовать у нас или уже в DEC.
Мне кажется это сделал Крей ещё в 60х с CDC6600, но микрокодом у него там и не пахло.
CodeMaster
20.12.2012, 11:04
Разве микрокод может на себя _эффективно_ такое брать?
Не знаю, но он может делить команду на микрокоманды для отдельных блоков и возможно производить управление их исполнением.
Меня вот, кстати, интересует другое: вот Patron тратит время на исследование "черного ящика" ВМ1, люди бились с ULA, CID'ом и кучей других чипов. Почему техдокументацию на них не выкладывают в открытый доступ? На Западе она наверное есть, но охраняют интелектуальную собственность которая может иметь какое-то (какое?) применение, а у нас, я так полагаю с интелектуальной собственностью проблем нет, но документация скорее всего не сохранилась. Как бы вот выйти на свой НИИПЭМ, они проектировали чипы для "Процессора" и "Электроники". "Процессор" давно изчез, а НИИПЭМ вроде ещё делают заказные чипы (но, сомневаюсь что и они сохранили мукалатуру).
NovaStorm
20.12.2012, 11:17
>но, сомневаюсь что и они сохранили мукалатуру
Ну году в 2004 кажется, на Ангстреме я видел и 8" диски, и магнитную ленту с "магнитофонами", и даже перфоленту. Долбоклюев для неё правда не помню там.
Так что всё могло и сохраниться.
CodeMaster
20.12.2012, 11:24
Ну году в 2004 кажется, на Ангстреме
2004 и 2013 (почти) это большая разница. И Ангстрем это Ангстрем, а завод "Процессор" уже наполовину застроен жилыми домами. НИИПЭМ весь сдан в аренду, сами там они занимаю чуть, точно знаю, что проектируют, но производство видимо сторонее. И вообще большинство старых "зубров" с тех заводов с кем я встречался хранят только "светлую память". Кто-то что-то спёр в своё время, но во-первых в основном то что имело цену, а во-вторых документация в то время (199Х) возможно ещё имела какой-то гриф.
Про документацию я уже все подробно писал в дргугих темах. На ВМ2 мне лично дал Бурмистров, один из разработчиков. На ВМ1 я не успел попросить, да и счел некой наглостью, т.к. одной ВМ2 его замордровал изрядно. На Ангстреме ничего давно нет, т.к. люди, разрабатывающие это уже давно ушли, и все только у них. Люди, разрабатывающие ВМ3 и ВМ4 уже неживы.
---------- Post added at 13:01 ---------- Previous post was at 12:58 ----------
Дале - ВМ2 так же вскрыл Феликс, и сфоткал своим микроскопом, и даже частично срисовал. Но отвлекся на калькуляторы, и неизвестно, когда к нему вернется. Вполне возможно, что можно так же сфоткать ВМ1 и все остальные, и прекрасно разобрать на блоки. Сейчас такие микроскопы все больше становятся доступны широкой публике.
Люди, разрабатывающие ВМ3 и ВМ4 уже неживы.Здесь Отрохов рассказывает о текущем положении дел с разработкой и производством 1801ВМ3 (http://forum.ixbt.com/topic.cgi?id=64:3394#15) ( на которых у нас до сих пор делают большинство военной авиа-космической бортовой аппаратуры ):
Позвонил только что Фортинский, доложился про 1806ВМ3/4. Оказывается 8мГГц, наш с ним вариант, был всё-таки уровня 1.8мкм. а не 1.2. А для бортовиков из Субмикрона они только 1806ВМ3 не масштабировали, а полностью переделали, как говорит, под уровень 0.8мкм и получили на измерениях реально 32мГГц, а в ТУ записали нужные им 16мГГц, который сейчас Ангстрем и выпускает понемногу. А вот 1806ВМ4 оказался ненужен на такой частоте. Фортинский им предлогал сделать ВМ3 и ВМ4 на одном кристалле, но те отказались.
Здесь Отрохов рассказывает о текущем положении дел с разработкой и производством 1801ВМ3 (http://forum.ixbt.com/topic.cgi?id=64:3394#15) ( на которых у нас до сих пор делают большинство военной авиа-космической бортовой аппаратуры ):
1801 и 1806 - это, на сколько я понимаю, не одно и то же.
1801 и 1806 - это, на сколько я понимаю, не одно и то же.Да, верно - 1801ВМ3/4 разрабатывала бригада Сергея Коваленко, а Отрохов с Фортинским, насколько я понял - сделали в начале 2000-х КМОП-эмулятор абстрактной модели (т.е. спецификации) ВМ3, который не имеет к эмулируемому оригиналу прямого отношения.
CodeMaster
20.12.2012, 16:11
Про документацию я уже все подробно писал в дргугих темах.
Я читал. Да и сам я это вижу по жизни. Но, вопрос по Западу остаётся - неужели там то же до сих пор ракеты на PDP-11 делают? И по нам тоже, ведь не только чисто наши разработки были бы интересны, но и те же 580ИК и 1810, где ведь только их не делали. Или техдокументация только в одном месте была, а на производствах только шаблоны?
NovaStorm
20.12.2012, 16:21
неужели там то же до сих пор ракеты на PDP-11 делают?
На 8080 и sl и embedded версиях 386х АФАИК. Но это старые типа сайдвиндера, про новые инфы не видел.
Хотя вот тут http://www.defencetalk.com/forums/air-force-aviation/f-22-cant-fire-aim-9x-11839/ говрят ещё про i960, но где он конкретно стоит, не упоминают.
Фортинский им предлогал сделать ВМ3 и ВМ4 на одном кристалле, но те отказались. - почему интересно? То есть это же (моим ненаучным взглядом)
явный плюс в пользу миниатюризации, скорости работы и прочь. Мотив отказа там не обсуждается к сожалению, причин конечно множество может быть.
---------- Post added at 01:57 ---------- Previous post was at 01:52 ----------
вот Patron тратит время на исследование "черного ящика" ВМ1
Что даёт ощутимые плоды - во первых данные полученные и описанные в этой теме,
второе - эмулятор действительно очень точный по скорости и видимо не привязан
при этом ни к звуку ни к кадрам ? )
2>Patron : а насколько сложно (ламерский вопрос!) на базе существующего эмулятора ДВК (ВМ1) - сделать "очень точную" БК0010-01 ? Благо софта под него уже искать-разыскивать не нужно.
---------- Post added at 02:35 ---------- Previous post was at 01:57 ----------
сделать "очень точную" БК0010-01 ?
В сумме с ДВК - получился бы вполне такой КУВТ-86 )
CodeMaster
21.12.2012, 08:38
Что даёт ощутимые плоды - во первых данные полученные и описанные в этой теме, второе - эмулятор действительно очень точный по скорости и видимо не привязан при этом ни к звуку ни к кадрам ? )
Кто бы спорил. Я заслуг Patron нисколько не умоляю, мне интересно совсем другое, ладно ВМ1 и LSI-11 использовались в оборонке (хотя думается сейчас это совсем не актуально) но почему до сих пор закрыты ULA, AY, SID и т.д., смысл?
насколько сложно (ламерский вопрос!) на базе существующего эмулятора ДВК (ВМ1) - сделать "очень точную" БК0010-01 ?В этой теме мы обсуждаем тайминги команд.
С точки зрения таймингов - БК отличается от ДВК-1 тем, что там шину регулярно забирает видеоконтроллер. Чтобы узнать точные тайминги команд для всех типовых моделей БК - надо запустить на них имеющиеся тесты.
Сам я этого сделать не могу, т.к. БК у меня нет, а желающих помочь в тестировании пока не нашлось.
Кто бы спорил. Я заслуг Patron нисколько не умоляю, мне интересно совсем другое, ладно ВМ1 и LSI-11 использовались в оборонке (хотя думается сейчас это совсем не актуально) но почему до сих пор закрыты ULA, AY, SID и т.д., смысл?
ULA вскрыли и подробно описали в целой книге. SID тоже. Про AY мне ничего не известно.
CodeMaster
21.12.2012, 16:49
ULA вскрыли и подробно описали в целой книге. SID тоже.
Я знаю, но всё же реверсинжинерингом насколько я знаю, или прям до последнего транзистора?
Я знаю, но всё же реверсинжинерингом насколько я знаю, или прям до последнего транзистора?
скорее до последнего транзистора "with the decapsulation"
http://www.zxdesign.info/book/insideULA.shtml
извиняюсь за оффтоп - вспомнил что у меня валяется плата ZX НАРодныйКОМпьютер
http://i230.photobucket.com/albums/ee81/ex0l0n/photo007-1.jpg
один чип грубо говоря ULA128, другой AY+обвязка ВГ
Сам я этого сделать не могу, т.к. БК у меня нет, а желающих помочь в тестировании пока не нашлось.
Написал в ЛС! )
Сравнение времени выполнения байтовых и словных команд на CPU и PPU УКНЦ:
Мнемоника-1 CPU PPU Циклы Мнемоника-2 CPU PPU Циклы
-----------------------------------------------------------------------------
MOV Rn,(Rn) 33.13 36 W MOVB Rn,(Rn) 40.62 52 RMW
CMP Rn,(Rn) 27.90 40 R CMPB Rn,(Rn) 27.90 40 R
BIT Rn,(Rn) 27.90 40 R BITB Rn,(Rn) 27.90 40 R
BIC Rn,(Rn) 40.62 56 RMW BICB Rn,(Rn) 40.62 52 RMW
BIS Rn,(Rn) 40.62 56 RMW BISB Rn,(Rn) 40.62 52 RMW
XOR Rn,(Rn) 40.62 56 RMW
ADD Rn,(Rn) 40.62 56 RMW
SUB Rn,(Rn) 40.62 56 RMW
CLR (Rn) 33.13 36 W CLRB (Rn) 40.62 52 RMW
COM (Rn) 40.62 56 RMW COMB (Rn) 40.62 52 RMW
INC (Rn) 40.62 56 RMW INCB (Rn) 40.62 52 RMW
DEC (Rn) 40.62 56 RMW DECB (Rn) 40.62 52 RMW
NEG (Rn) 40.62 56 RMW NEGB (Rn) 40.62 52 RMW
TST (Rn) 27.90 40 R TSTB (Rn) 27.90 40 R
ROL (Rn) 40.62 56 RMW ROLB (Rn) 40.62 52 RMW
ROR (Rn) 40.62 56 RMW RORB (Rn) 40.62 52 RMW
ASR (Rn) 40.62 56 RMW ASRB (Rn) 40.62 52 RMW
ASL (Rn) 40.62 56 RMW ASLB (Rn) 40.62 52 RMW
ADC (Rn) 40.62 56 RMW ADCB (Rn) 40.62 52 RMW
SWAB(Rn) 40.62 56 RMW MFPS (Rn) 40.62 52 RMW
SXT (Rn) 33.13 36 W
И подпись - dr.Titus)Может, прямо на этом месте оформить от своего имени, с подписью и исходником теста, а это и предыдущее своё сообщение я потом удалю.
---------- Post added at 14:40 ---------- Previous post was at 14:38 ----------
Только код в окне лучше взять из верхнего сообщения, открыв его в режиме QUOTE - я содержимое блока CODE основательно подредактировал, чтобы нормально влезало.
У меня форум третий день не работает нормально ! Не знаю в чём причина (
Где третью версию теста брать? У меня вторая из поста Alex_K. Готовлю дискету для
живых аппаратиков я.
Может, прямо на этом месте оформить от своего имени, с подписью и исходником теста, а это и предыдущее своё сообщение я потом удалю.
Да ладно, можно и без автора)
Сравнение времени выполнения байтовых и словных команд на CPU и PPU УКНЦ:
Как здесь интерпретировать цифры в колонках CPU и PPU?
Это такты или какие-то чисто условные попугаи?
Как здесь интерпретировать цифры в колонках CPU и PPU?Это такты, которые измерил Titus.
Приведённые выше рассуждения и измерения в основном касаются ВМ1. Правильно ли я понимаю, что в плане быстродействия ВМ2 единственное существенное различие -- это предвыборка команд? Есть ли другие различия? Совпадают ли результаты тестов ВМ2 с результатами ВМ1?
Есть ли другие различия? Совпадают ли результаты тестов ВМ2 с результатами ВМ1?Сложно сказать. Я такое сравнение не проводил.
Если обращения ЦП УКНЦ к памяти не замедляются работой видеоконтроллера - он должен иметь такие же тайминги в УКНЦ, как и в ДВК-2М. В таком случае можно составить универсальную формулу быстродействия 1801ВМ2 на основе тестирования ЦП УКНЦ.
На следующей неделе напишу все необходимые тесты.
... Правильно ли я понимаю, что в плане быстродействия ВМ2 единственное существенное различие -- это предвыборка команд? ...
Да, предвыборка команд в 1801ВМ2 играет большую роль, т.к. следующая команда читается из памяти во время дешифрации текущей. И может произойти такая ситуация, что дешифрация команды завершилась, требуется обращение на шину для обмена, а чтение следующей команды еще идет.
Тут для выяснения влияния предвыборки неплохо сделать тесты из двух команд, одна из которых занимает одно слово, а вторая - два. В этом случае предвыборка будет работать на команду из двух слов, а на команду из одного не будет.
Есть еще интересный тест для выяснения из команды MOV R0,(R1)+, где R0=010021, т.е. команда записывает сама себя на следующий адрес для исполнения. Т.к. запись происходит по следующему адресу исполнения, то предвыборка также не будет работать. Чтобы команда не затерла всю память, то в УКНЦ в магистрали ЦП есть ловушка адреса, возникнет прерывание, соответственно цикл можно начать сначала. В этом случае придется делать скидку на время прерывания и возврата из него.
Как здесь интерпретировать цифры в колонках CPU и PPU?
Это такты или какие-то чисто условные попугаи?
Это такты, замерянные программой TSSPD, которую я выкладывал, причем даже в исходниках. Только не помню, на турбо или простом реале замерял.
Есть еще интересный тест для выяснения из команды MOV R0,(R1)+, где R0=010021, т.е. команда записывает сама себя на следующий адрес для исполнения. Т.к. запись происходит по следующему адресу исполнения, то предвыборка также не будет работать. Чтобы команда не затерла всю память, то в УКНЦ в магистрали ЦП есть ловушка адреса, возникнет прерывание, соответственно цикл можно начать сначала. В этом случае придется делать скидку на время прерывания и возврата из него.
Добавил кое-что подобное в тест TSSPD.
Интересно, что на EmuStudio у меня в ПП не реализован механизм обновления кеша, если идет запись в слово с адресом = PC. А на ЦП реализован. Видимо, решил, что все равно все надо переписывать заново, и нет смысла реализовывать в том виде, как это есть сейчас. Словомм, тест на EmuStudio показывает разное время выполнения команд на ЦП при попадании в кэш, и при непопадании.
http://s42.radikal.ru/i097/1302/2d/737875d08036.png
Позапускайте на реалах.
Ну че на реале-то никто не тестирует? )
NovaStorm
17.02.2013, 14:39
Ну че на реале-то никто не тестирует? )
У меня на реале только винт пока подключён, а кое-кто тут поддержку реального винта в эмуле не делает, из-за чего перезаписывать его образом каждый раз ломает =Р
Да и на работе оно.
Ну че на реале-то никто не тестирует? )
Терпение, дождусь тестов от Patrona и тогда уж точно на всех платках своих прогоню всё ) Эту версию теста сейчас добавлю (обновлю на сборнике программ в теме софта)
---------- Post added at 18:44 ---------- Previous post was at 18:36 ----------
Терпение, дождусь тестов от Patrona и тогда уж точно на всех платках своих прогоню всё ) Эту версию теста сейчас добавлю (обновлю на сборнике программ в теме софта)
Чего точно делать не стоит, это промежуточные версии добавлять в сборники.
это промежуточные версии добавлять в сборники.
А если сборник рассматривать как динамический ресурс ?
Я же и так половину тестов до сих пор не могу собрать (найти-отыскать), просто потому что их по разным темам в разных сообщениях раскидали !!! В целом - я просто пытаюсь всё в одном месте собрать и поддерживать актуальность, к тому-же по теме же (Софт для УК-НЦ всмысле). Это "динамический форумный дискетка", вот! )
Обновил чуть выше тест до 0.1f.
---------- Post added at 20:57 ---------- Previous post was at 20:56 ----------
Я же и так половину тестов до сих пор не могу собрать (найти-отыскать), просто потому что их по разным темам в разных сообщениях раскидали !!! В целом - я просто пытаюсь всё в одном месте собрать и поддерживать актуальность, к тому-же по теме же (Софт для УК-НЦ всмысле). Это "динамический форумный дискетка", вот! )
Сохраняй у себя в специальном хламнике полуверсий, если боишься потерять. А на сборники не надо, иначе разойдутся недоверсии у народа, и никто не будет знать, какая версия финальная, имхо. А так, конечно, делай, как пожелаешь)
Обновил чуть выше тест до 0.1f.
Есть еще идея - MOV @R0,(R0)+. Т.е. команда читает содержимое ячейки и записывает ее обратно и переходит к следующей. В качестве теста можно задать значение R0, равное адресу команды + 2. В итоге будет записывать по адресу предвыборки и предвыборка будет нарушаться. Если же задать в качестве значения R0, скажем ноль, то предвыборка нарушаться не будет и в разнице исполнения этих команд можно увидеть примерное время чтения из памяти.
Есть еще идея - MOV @R0,(R0)+. Т.е. команда читает содержимое ячейки и записывает ее обратно и переходит к следующей. В качестве теста можно задать значение R0, равное адресу команды + 2. В итоге будет записывать по адресу предвыборки и предвыборка будет нарушаться. Если же задать в качестве значения R0, скажем ноль, то предвыборка нарушаться не будет и в разнице исполнения этих команд можно увидеть примерное время чтения из памяти.
Да, тоже можно)
Сохраняй у себя в специальном хламнике полуверсий
Есть один минус в твоём предложении - поскольку ты файлы с одинаковыми именами выкладываешь (и архивы). Узнать какая это версия можно только запустив - это минус в плане собирания промежуточных в ожидании финальной. Если бы авторы тестов как Patron оформляли бы свои темы было бы счастье )
Уже заменил обновил версию теста тут > http://zx.pk.ru/showpost.php?p=575127&postcount=405
Обновил выше до 0.1g, с учетом предложения Alex_K.
Обновил выше до 0.1g, с учетом предложения Alex_K.
Titus, ну и что Вы написали? Неужто предвыборка так ускоряет операции?
УКНЦ литеры 7 с 1515ХМ1-031.
Время исполнения в ПП:
http://kisly-alexey.pisem.net/TSSPD/XM1-7/3/CASH_PP_1.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/3/CASH_PP_2.jpg
Время исполнения в ЦП:
http://kisly-alexey.pisem.net/TSSPD/XM1-7/3/CASH_CP.jpg
Titus, ну и что Вы написали? Неужто предвыборка так ускоряет операции?
Получается, что так)
Alex_K, а можно все страницы сфотографировать, пожалуйста?
Заметьте, промах кэша занимает лишние 52 такта как для ПП, так и для ЦП. Что интересно.
---------- Post added at 00:32 ---------- Previous post was at 00:32 ----------
Alex_K, а можно все страницы сфотографировать, пожалуйста?
Да, это актуально, чтобы понимать все соотношения и базовые команды.
---------- Post added at 00:33 ---------- Previous post was at 00:32 ----------
И машинка какая-то с некратными 4 таймингами. Хорошо бы на кратной протестить.
Неужто предвыборка так ускоряет операции?
Получается, что так)
Надеюсь будет теоретическое обоснование полученных результатов?
Если предвыборка идет на две команды, то можно сделать еще тест команды MOV @R,(R)+ с адресом исполняемой команды + 4.
Так же интересно, что кэш не влияет на команды ветвления. Но это я уже давно измерил когда-то, и в EmuStudio так же.
---------- Post added at 00:35 ---------- Previous post was at 00:34 ----------
Надеюсь будет теоретическое обоснование полученных результатов?
Если предвыборка идет на две команды, то можно сделать еще тест команды MOV @R,(R)+ с адресом исполняемой команды + 4.
По документации она на одну команду.
И машинка какая-то с некратными 4 таймингами. Хорошо бы на кратной протестить.
Уже ночь на дворе, менять не буду.
Надеюсь будет теоретическое обоснование полученных результатов?
Надеюсь) Вы же хорошо УКНЦ знаете)
Alex_K, а можно все страницы сфотографировать, пожалуйста?
УКНЦ литеры 7 с 1515ХМ1-031.
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD1.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD2.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD3.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD4.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD5.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD6.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD7.jpg
http://kisly-alexey.pisem.net/TSSPD/XM1-7/4/TSSPD8.jpg
---------- Post added at 00:44 ---------- Previous post was at 00:41 ----------
Надеюсь) Вы же хорошо УКНЦ знаете)
А при чем тут УКНЦ и я? Такой же результат будет и на МС1201.02 с процессором 1801ВМ2. Так что тут дело не в УКНЦ, а в процессоре.
А предложенный выше тест надо бы сделать, т.к. в документации по 1806ВМ2 говорится что пока дешифруется и исполняется команда, то принята уже следующая и готовится к приему следующей за следующей. Но ведь не даром у 1801ВМ2 три счетчика команд.
Вот для чистоты эксперимента тест со смещением не только +2, но и +4.
Вот для чистоты эксперимента тест со смещением не только +2, но и +4.
Увы. Революции не произошло. Со смещением +4 также, как и с работающей предвыборкой.
Интересно, что эти же, затраченные на перекэширование 52 такта выполняются все байтовые команды из разряда RMW.
---------- Post added at 00:58 ---------- Previous post was at 00:57 ----------
Увы. Революции не произошло. Со смещением +4 также, как и с работающей предвыборкой.
Значит документация правильная, но какой-то супер-пупер хитрый цикл перекэширования длинный выполняется. Даже JMP и то быстрее.
Интересно, что эти же, затраченные на перекэширование 52 такта выполняются все байтовые команды из разряда RMW.
Странно все это. И кстати, а почему при тесте применяются разные регистры? Ведь достаточно только при вхождении в последовательность команд единожды инициализировать регистр.
Странно все это. И кстати, а почему при тесте применяются разные регистры? Ведь достаточно только при вхождении в последовательность команд единожды инициализировать регистр.
У меня разное предназначение для разных регистров, поэтому для удобства инициализации тестов, я использую те регистры, которые наиболее подходящие. Но в эмуляторе я эти тесты прошагивал и смотрел, что действительно все делается, как надо.
Тут всякое подумаешь. Ведь сначала по адресу предвыбранной команды происходит чтение, мало ли это влияет? Можно такой же трюк проделать и с командой TST (R)+, мало ли чего. Хотя мне кажется вряд ли. Так что с каждым разом вопросов возникает все больше и больше.
Тут всякое подумаешь. Ведь сначала по адресу предвыбранной команды происходит чтение, мало ли это влияет? Можно такой же трюк проделать и с командой TST (R)+, мало ли чего. Хотя мне кажется вряд ли. Так что с каждым разом вопросов возникает все больше и больше.
Это в MOV (R2),(R2)+ чтение и запись.
А в MOV R1,(R2) только запись, однако и там, и там лишние 52 такта.
Это в MOV (R2),(R2)+ чтение и запись.
А в MOV R1,(R2) только запись, однако и там, и там лишние 52 такта.
Может за время исполнения текущей, следующую он уже не только принял, но и дешифровал?
При этом в тесте есть очень интересные результаты: MOV (R0),R1 - 40 тактов и MOV #nnnn,R0 - тоже 40 тактов. Но ведь в первом варианте работает предвыборка, а во втором ее нет, т.к. для адресации используется счетчик команд и во время исполнения команды он меняет значение.
Может за время исполнения текущей, следующую он уже не только принял, но и дешифровал?
При этом в тесте есть очень интересные результаты: MOV (R0),R1 - 40 тактов и MOV #nnnn,R0 - тоже 40 тактов. Но ведь в первом варианте работает предвыборка, а во втором ее нет, т.к. для адресации используется счетчик команд и во время исполнения команды он меняет значение.
А чего тут интересного? В первом случае, слово команды в кеше, поэтому идет выборка слова из (R0), затем, выборка слова следующей команды. Или наоборот, не знаю пока.
А во втором случае выбирается #nnnn из второго слова команды, затем идет выборка слова следующей команды. И там, и там одинаковое число циклов доступа к памяти.
А чего тут интересного? В первом случае, слово команды в кеше, поэтому идет выборка слова из (R0), затем, выборка слова следующей команды. Или наоборот, не знаю пока.
А во втором случае выбирается #nnnn из второго слова команды, затем идет выборка слова следующей команды. И там, и там одинаковое число циклов доступа к памяти.
Еще в тесте нет команд, состоящих из трех слов, да с командой MOV неплохо бы рассмотреть все способы адресации. Тогда картина была бы полной.
Еще в тесте нет команд, состоящих из трех слов, да с командой MOV неплохо бы рассмотреть все способы адресации. Тогда картина была бы полной.
Какие, например?
А во втором случае выбирается #nnnn из второго слова команды, затем идет выборка слова следующей команды. И там, и там одинаковое число циклов доступа к памяти.
Вот здесь интересно, используется ранее прочитанное для предвыборки значение, или читается nnnn заново. Следующая команда будет читаться вхолостую, т.к. при предвыборке следующая читается во время дешифрации текущей. А в этом варианте будет читаться, но дешифратор будет стоять.
Вот здесь интересно, используется ранее прочитанное для предвыборки значение, или читается nnnn заново. Следующая команда будет читаться вхолостую, т.к. при предвыборке следующая читается во время дешифрации текущей. А в этом варианте будет читаться, но дешифратор будет стоять.
В описании вроде все это было описано. Читал когда-то, но уже не помню)
Какие, например?
Все способы адресации MOV - 8х8, итого 64. А также можно дополнительно совместить с адресацией по счетчику команд 27,37, 67 77, это еще дополнительно сколько-то много.
Ну и другие двухадресные и одноадресные команды.
Все способы адресации MOV - 8х8, итого 64. А также можно дополнительно совместить с адресацией по счетчику команд 27,37, 67 77, это еще дополнительно сколько-то много.
Ну и другие двухадресные и одноадресные команды.
Все комбинации - это очень много)
Достаточно знать циклы команды в отдельности, чтобы правильно сложить все ее быстродействие.
Все комбинации - это очень много)
Достаточно знать циклы команды в отдельности, чтобы правильно сложить все ее быстродействие.
Ну тогда несколько исполнимых файлов. А там все сложится.
Чем объясняется такая существенная разница между скоростью выполнения команд (в тактах) на ЦП и ПП? Разные значения tn? Или что-то ещё?
Чем объясняется такая существенная разница между скоростью выполнения команд (в тактах) на ЦП и ПП? Разные значения tn? Или что-то ещё?
1) Шина с ОЗУ у ПП 8-битная, а не 16-битная.
2) Команды на ПП выравниваются до 4-х тактов. Хотя это не совсем вопрос скорости. Команды ЦП тоже обращаются только в отведенные для них фазы шины.
Написал универсальный тест IRQ.SAV (http://zx.pk.ru/attachment.php?attachmentid=39987), который должен позволить довольно точно вычислить время входа в прерывание и оценить время получения от устройства адреса вектора прерывания.
Требуется поддержка команд Mul и Div.
На эмуляторе ДВК ( с включенным драйвером EM ) - результаты такие:
.RU IRQ
IRQ - Check time of IRQ Service & RTI - v1.0
Memory Top: 130002
CPU Speed: 146 x RESET
CPU Speed: 7'585 x NOP
CPU Speed: 7'585 x MOV R0,R0
CPU Speed: 3'035 x MOV R2,(R3)
CPU Speed: 2'361 x RTI
CPU Speed: 850 x IOT
CPU Speed: 850 x TRAP
CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0
CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI
CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT
CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP
CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064
Program completed.
.
Программа выводит сообщения через вызовы RMON, поэтому если правильно загрузиться с HX и нажать в терминале кнопку [Лог] - можно записать результаты теста в файл даже на УКНЦ.
Написал универсальный тест.
Это считается число команд между чем и чем?
Это считается число команд между чем и чем?В принципе - не важно, там можно использовать любые прерывания с чётким интервалом ( чем длиннее интервал - тем точнее измерения ). В конкретной реализации используется интервал между двумя прерываниями таймера по вектору 0100.
Смысл в том, что если за одно и то же время выполняется 7'585 x NOP, 2'361 x RTI и 850 x IOT ( + RTI ), то легко подсчитать, что:
RTI == 3.2 x NOP
IOT ( + RTI ) == 8.9 x NOP
IOT == 5.7 x NOP
а если время от начала выборки кода IOT до запуска блока прерываний принять за 1 x NOP, то время входа в прерывание ( т.е. записи PC и PSW в стек и чтения их из вектора ) составляет 4.7 x NOP
Также можно отдельно посчитать и время приёма по шине адреса вектора аппаратного прерывания ( в моём случае получается 3.3 x NOP ).
В принципе - не важно, там можно использовать любые прерывания с чётким интервалом ( чем длиннее интервал - тем точнее измерения ). В конкретной реализации используется интервал между двумя прерываниями таймера по вектору 0100.
Если это сетевой таймер, то странно.
TSSPD у меня как раз меряет между прерываниями сетевого таймера число команд. Число операций типа MOV Rx,Rx - 19949 (неправильное в EmuStudio, но меряется правильно). А в вашем тесте - это 34067.
Если это сетевой таймер, то странно.Даже самую правильную идею можно реализовать с ошибками. Вот получим результат запуска IRQ.SAV на реальной УКНЦ и сразу станет ясно - есть ошибка в алгоритме теста или это просто эмулятор ДВК такой "быстрый".
Даже самую правильную идею можно реализовать с ошибками. Вот получим результат запуска IRQ.SAV на реальной УКНЦ и сразу станет ясно - есть ошибка в алгоритме теста или это просто эмулятор ДВК такой "быстрый".
Не обязательно для этого запускать на реальном УКНЦ. Достаточно сравнить с результатами проверенного теста на нереальном УКНЦ).
Хотя, если умножить 50 Hz таймера на 7'585 NOPов за тик - получим 380'000 NOP/сек, что в точности равно быстродействию 1801ВМ1 на ДВК-1 5.3 МГц.
Хотя, если умножить 50 Hz таймера на 7'585 NOPов за тик - получим 380'000 NOP/сек, что в точности равно быстродействию 1801ВМ1 на ДВК-1 5.3 МГц.
Кстати, на ВМ2 NOP медленнее, чем MOV Rx,Rx.
---------- Post added at 18:50 ---------- Previous post was at 18:43 ----------
Кстати, сравнил результаты двух тестов:
На UKNCBTL:
TSSPD:
NOP - 9394
MOV Rx,Rx - 13308
IRQ:
NOP - 9380
MOV Rx,Rx - 13275
Тогда как на EmuStudio:
TSSPD:
NOP - 19948
MOV Rx,Rx - 19948
IRQ:
NOP - 33397
MOV Rx,Rx - 34039
На лицо явное неправильное вычисление числа выполненных команд, когда этих команд успевает выполнится много.
Типа, когда памяти не хватает и цикл идёт на второй заход - начинает врать.
Второй заход по-любому уменьшает точность, поэтому даже после исправления программы лучше его избегать.
Нужно выгрузить из памяти всё лишнее ( SET SL OFF сделать и т.п. ) - чтобы в буфере команд стало больше 20 тыс. слов свободного места.
Типа, когда памяти не хватает и цикл идёт на второй заход - начинает врать.
Второй заход по-любому уменьшает точность, поэтому даже после исправления программы лучше его избегать.
Нужно выгрузить из памяти всё лишнее ( SET SL OFF сделать и т.п. ) - чтобы в буфере команд стало больше 20 тыс. слов свободного места.
После Set Sl Off все равно врет:
TSSPD:
NOP - 19948
MOV Rx,Rx - 19948
IRQ:
NOP - 28785
MOV Rx,Rx - 29203
Что-то не могу заставить тест врать.
Новый вариант теста IRQ v1.2 (http://zx.pk.ru/attachment.php?attachmentid=39992) выводит в первой позиции количество заходов в буфер команд:
.RU IRQ
IRQ - Check time of IRQ Service & RTI - v1.2
Memory Top: 137554
1: CPU Speed: 146 x RESET
1: CPU Speed: 7'586 x NOP
1: CPU Speed: 7'585 x MOV R0,R0
1: CPU Speed: 3'035 x MOV R2,(R3)
1: CPU Speed: 2'361 x RTI
1: CPU Speed: 850 x IOT
1: CPU Speed: 850 x TRAP
1: CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0
1: CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP
1: CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064
Program completed.
.
Что-то не могу заставить тест врать.
На EmuStudio врут и 1.1 и 1.2, хотя числа отличаются.
На EmuStudio врут и 1.1 и 1.2, хотя числа отличаются.Движок там одинаковый.
А какое число в первой позиции ?
Движок там одинаковый.
А какое число в первой позиции ?
Не записал. Ну то же 30000 с чем-то, но чуть меньше.
А, в первой - 2.
Не исключено, что врёт эмулятор. Там в начале теста две команды WAIT.
Сейчас сделаю отладочную версию, показывающую число команд в буфере.
Если в буфере будет заметно больше 20'000 команд, а эмулятор поведёт тест на второй заход - ошибка в эмуляторе.
Новый вариант теста IRQ v1.3 (http://zx.pk.ru/attachment.php?attachmentid=39993) выводит в строке BUF words количество слов в буфере команд:
.RU IRQ
IRQ - Check time of IRQ Service & RTI - v1.3
Memory Top: 137554
BUF words: 22778
1: CPU Speed: 146 x RESET
1: CPU Speed: 7'586 x NOP
1: CPU Speed: 7'585 x MOV R0,R0
1: CPU Speed: 3'035 x MOV R2,(R3)
1: CPU Speed: 2'361 x RTI
1: CPU Speed: 850 x IOT
1: CPU Speed: 850 x TRAP
1: CPU Speed: 1'264 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0
1: CPU Speed: 823 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | RTI
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | IOT
1: CPU Speed: 508 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | TRAP
1: CPU Speed: 468 x MOV R2,(R3) | MOV R1,(R3) | MOV R0,R0 | Interrupt 064
Program completed.
.
Не исключено, что врёт эмулятор. Там в начале теста две команды WAIT.
У меня эмулятор WAIT исполняет, как NOP. Зачем использовать в тесте WAIT?
У меня эмулятор WAIT исполняет, как NOP. Зачем использовать в тесте WAIT?Чтобы авторы эмуляторов имели дополнительный стимул к правильной эмуляции процессора.
http://s019.radikal.ru/i621/1302/db/85630066f89a.png
Без привязки начала теста к прерыванию - смысла в цифрах не много.
Нужно IRQ.SAV на реальной УКНЦ запустить.
Без привязки начала теста к прерыванию - смысла в цифрах не много.
Нужно IRQ.SAV на реальной УКНЦ запустить.
Результаты на реальной УКНЦ:
http://kisly-alexey.pisem.net/IRQ/1/IRQ-KVANT7-031.jpg
Результаты в UKNCBTL:
http://kisly-alexey.pisem.net/IRQ/1/IRQ.png
В UKNCBTL разница с реалом есть по времени исполнения команд, но в общем и целом вроде все одинаково. Команда WAIT в UKNCBTL эмулируется.
Как на УКНЦ с повторяемостью результатов ?
Как на УКНЦ с повторяемостью результатов ?
Восемь запусков хватит?
http://kisly-alexey.pisem.net/IRQ/2/IRQ1.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ2.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ3.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ4.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ5.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ6.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ7.jpg
http://kisly-alexey.pisem.net/IRQ/2/IRQ8.jpg
Это она от разогрева ускоряется ?
Без привязки начала теста к прерыванию - смысла в цифрах не много.
Нужно IRQ.SAV на реальной УКНЦ запустить.
Понятно) Это вы так к прерыванию привязываетесь) Я привязываюсь без нее)
Это она от разогрева ускоряется ?
Да вроде она замедляется. А на самом деле тактовая частота у ЦП одна (8 МГц), а у памяти другая (6,25 МГц). Плюс к тому же доступ к ОЗУ только с разрешения видеоконтроллера, поэтому как попадет.
Главные выводы по результатам запуска теста IRQ.SAV (http://zx.pk.ru/attachment.php?attachmentid=39993) на УКНЦ следующие:
1. Время получения у устройства адреса вектора прерывания равно времени обычного цикла чтения, поэтому программные и аппаратные прерывания выполняются за одинаковое время ( у ДВК-1 с процессором 1801ВМ1 - адрес вектора прерывания читается по шине в 3 раза дольше, чем данные у того же контроллера, хотя этот тест, включив EM - можно и на ДВК-1 запустить - вдруг прежний тест наврал ).
2. Время чтения кода команды составляет 0.8 x MOV
3. Время входа в прерывание вместе с чтением кода команды IOT == 10.8 x MOV, чистое время входа в прерывание == 10 x MOV.
---------- Post added at 20:34 ---------- Previous post was at 20:28 ----------
Да вроде она замедляется.Точно!
Patron, а как же Вам удается померять время работы команды RESET? Тут вся соль ситуации состоит в том, что сигнал EVNT внутри процессора 1801ВМ2 защелкивается внутри триггера, ну и этот триггер очищается по команде RESET. В эмуляторе понятно, он очищается в начале эмуляции команды, а в процессоре ведь INIT длится некоторое время, а потом пауза, и если фронт EVNT попадет во время активной фазы сигнала INIT, то триггер может не установится.
если фронт EVNT попадет во время активной фазы сигнала INIT, то триггер может не установится.Для команды RESET повторяемость результатов 100%, поэтому если похоже на правду - значит первому же EVNT повезло.
Тут хорошо то, что если сигнал пропал - влезет ровно в 2 раза больше ресетов и это сразу станет заметно.
---------- Post added at 20:45 ---------- Previous post was at 20:40 ----------
Или при выполнении каждой последовательной команды IOT происходит сначала выборка и предвыборка, поэтому после IOT команда IOT выполняется на 0.8 x MOV дольше, чем после MOV R0,R0.
Тогда чистое время входа в прерывание 9.2 x MOV
Чем он занимается эти 52 такта???
Чем он занимается эти 52 такта???
Учитывая то, ответ на вопрос давно ушедших страниц уточню:
Вопрос:
Чем ВМ2 занимается в течение 52 тактов, когда происходит промах мимо кэша предвыборки?
Ответ:
Мы пока не в курсе)
По поводу живых машинок - моё обещание прогнать всё в силе, как только так сразу будет доп. статистика сразу как минимум с трёх машинок.
Вот что в эмуляторе у меня выдал IRQ 1.3 )
http://savepic.ru/4126789.png
http://savepic.ru/4125765.png
Тест 1.3 добавил на форумный сборник софта (http://zx.pk.ru/showpost.php?p=575127&postcount=405) УК-НЦошного )
Тест MOV.SAV (http://zx.pk.ru/attachment.php?attachmentid=40010) измеряет число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными типами адресации.
При первом запуске нужно ввести правильное значение частоты процессора в килогерцах.
На эмулируемой ДВК-1 5.3 МГц это выглядит так:
.RU MOV
MOV - v1.0
CPU KHz: 10000 > 5300
CPU KHz: 5300
R0 (R0) (R2)+ @(R2)+ -(R1) @-(R1) Addr (PC)+ @Tab(R0)
Mov R1 14 37 41 49 41 50 49 41 64
Mov (R1) 30 46 49 59 49 60 59 49 72
Mov (R2)+ 30 46 49 59 49 60 59 49 72
Mov (PC)+ 30 46 49 59 49 60 59 49 72
Mov @(R2)+ 43 59 62 72 62 73 72 62 85
Mov -(R1) 31 47 50 60 50 61 60 50 73
Mov @-(R1) 44 60 63 73 63 74 73 63 86
Mov Addr 43 59 62 72 62 73 72 62 85
Mov @Tab(R1) 56 73 73 85 73 86 85 73 98
Program completed.
измеряет число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными типами адресации.
Похоже на правду. На EmuStudio работает адекватно теперь)
Только нужно обязательно дробное число тактов, хотя бы один знак после запятой. Лучше два.
Похоже на правду.Фаза тика всё же играет некоторую роль, поэтому для синхронизации с таймером в начале теста стоит WAIT.
нужно обязательно дробное число тактовА может ли какой-то процессор начать выполнять команду в произвольной фазе такта ?
А может ли какой-то процессор начать выполнять команду в произвольной фазе такта ?
Что значит в произвольной фазе такта?
---------- Post added at 23:44 ---------- Previous post was at 23:43 ----------
На УКНЦ доступ к памяти ЦП несинхронный с тактированием, поэтому число тактов у команды будет не целое.
Что значит в произвольной фазе такта?Может ли процессор выставлять адрес и SYNC на шину без привязки к тактам ?
Может ли арифметический блок выдавать результат без привязки к тактам ?
Тест MOV.SAV (http://zx.pk.ru/attachment.php?attachmentid=40010) измеряет число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными типами адресации.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031. Так как на УКНЦ тик сетевого таймера равен не 20 мс, а 19.968 мс, то в качестве частоты используется не 8000 кГц, а 8013 кГц:
http://kisly-alexey.pisem.net/MOV/XM1-7/MOV01.jpg
Осталось измерить скорость ПП данным тестом. Только там памяти 22 Кб с хвостиком.
Осталось измерить скорость ПП данным тестом. Только там памяти 22 Кб с хвостиком.Этот тест не очень требователен к памяти - свободное место после кода должно быть (если не ошибаюсь) больше 10 Кб.
Может ли процессор выставлять адрес и SYNC на шину без привязки к тактам ?
Может ли арифметический блок выдавать результат без привязки к тактам ?
Это вопрос не ко мне, а к Alex_K)
Но из-за одной только памяти такты на УКНЦ ЦП дробные.
Это вопрос не ко мне, а к Alex_K)
Но из-за одной только памяти такты на УКНЦ ЦП дробные.
Ха! А у кого комплект документации к 1801ВМ2? Так что вопрос как раз к Вам, Titus.
А так конечно же вся работа 1801ВМ2 основана на тактах, как с выставлением сигналов, так и работа всех блоков.
А так как на магистрали ЦП память несинхронна с процессором, да к тому же выборка из нее идет только с разрешения видеоконтроллера, то усредненное количество тактов будет дробным.
Если у процессора есть внутреннее умножение частоты - привязка работы блока управления может осуществляться к тактам этой умноженной частоты.
Дело в том, что у стандарта Q-Bus есть стандартные ограничения минимальных и максимальных интервалов между разными сигналами, поэтому привязка всей логики работы с шиной хоть к какому-то тактированию необходима.
Если у процессора есть внутреннее умножение частоты - привязка работы блока управления может осуществляться к тактам этой умноженной частоты.
Какое умножение? У 1801ВМ2 входящая частота делится на два. И этот разделенный сигнал используется внутри процессора.
так как на магистрали ЦП память несинхронна с процессором, да к тому же выборка из нее идет только с разрешения видеоконтроллера, то усредненное количество тактов будет дробным.Мне тоже думается, что команды привязаны к тактам, но это целое количество тактов у отдельных команд в последовательности одинаковых команд может "плавать" по некоторому закону.
---------- Post added at 23:37 ---------- Previous post was at 23:33 ----------
Какое умножение? У 1801ВМ2 входящая частота делится на два. И этот разделенный сигнал используется внутри процессора.Т.е. ВМ2 "различает" внутри такта исходной частоты только 4 фазы, относительно каждой из которых могут с небольшой дополнительной задержкой запускаться различные действия.
Т.е. ВМ2 "различает" внутри такта исходной частоты только 4 фазы
Можно ламерский совершенно вопрос - различает допустим 4 фазы, но преобразуется каким-то способом в 2 путём объединения и получается как-бы 2 фазы (из четырёх четвертей) - или я чушь вообще написал? Если чушь - заранее извиняюсь) - термины объединения и преобразуется - ламерские, просто чтобы действие как-то обозвать.
Ха! А у кого комплект документации к 1801ВМ2? Так что вопрос как раз к Вам, Titus.
У меня документации ровно столько же, сколько и у всех.
Следующие универсальные тесты: MOVB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40016), CMP.SAV (http://zx.pk.ru/attachment.php?attachmentid=40017) и ADD.SAV (http://zx.pk.ru/attachment.php?attachmentid=40018), позволяют определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команд MOVB, CMP и ADD с различными способами адресации.
При первом запуске каждого теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
Исходники тестов отличаются одной строчкой, которая для теста команды ADD выглядит так:
;;############################
.Instr Add
;;############################
Mov R1 14 37 41 49 41 50 49 41 64
Я уже не люблю этот процессор!
Следующие универсальные тесты: MOVB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40016), CMP.SAV (http://zx.pk.ru/attachment.php?attachmentid=40017) и ADD.SAV (http://zx.pk.ru/attachment.php?attachmentid=40018), позволяют определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команд MOVB, CMP и ADD с различными способами адресации.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031.
Команда MOVB:
http://kisly-alexey.pisem.net/MOV/XM1-7/MOVB01.jpg
Команда CMP:
http://kisly-alexey.pisem.net/MOV/XM1-7/CMP01.jpg
Команда ADD:
http://kisly-alexey.pisem.net/MOV/XM1-7/ADD01.jpg
Бросается в глаза, что при выполнении команды MovB - 1801ВМ2 очень нервно реагирует на использование в первом аргументе (PC)+ ( т.е. #NUM ).
Максимальная разница с первым аргументом (R2)+ составила 17 тактов для команды MovB (PC)+, @(R2)+
Вряд ли это глюк теста - все тестовые последовательности генерятся полностью автоматически и в разных тестах отличаются только кодом операции.
Бросается в глаза, что при выполнении команды MovB - 1801ВМ2 очень нервно реагирует на использование в первом аргументе (PC)+ ( т.е. #NUM ).
Максимальная разница с первым аргументом (R2)+ составила 17 тактов для команды MovB (PC)+, @(R2)+
Вряд ли это глюк теста - все тестовые последовательности генерятся полностью автоматически и в разных тестах отличаются только кодом операции.
Уже про это писали, что нарушается последовательность предвыборки. Аргумент #NUM сперва прочитывается как следующая команда, потом собственно как аргумент. Последовательность предвыборки нарушена, следующая команда читается уже не во время дешифрации предыдущей.
Для дальнейшей проверки выполнения команд типа MovB (PC)+, ??? процессором 1801ВМ2 - изготовлены ( путём изменения соответствующей строчки в исходнике ) тесты команд BIS (http://zx.pk.ru/attachment.php?attachmentid=40023) и BISB (http://zx.pk.ru/attachment.php?attachmentid=40023).
...
Аргумент #NUM сперва прочитывается как следующая команда, потом собственно как аргумент. Последовательность предвыборки нарушена, следующая команда читается уже не во время дешифрации предыдущей.Но на команду ADD это не влияет, а чем чтение первого аргумента команды MOVB отличается от чтения первого аргумента команды ADD ?
Для дальнейшей проверки выполнения команд типа MovB (PC)+, ??? процессором 1801ВМ2 - изготовлены ( путём изменения соответствующей строчки в исходнике ) тесты команд BIS (http://zx.pk.ru/attachment.php?attachmentid=40023) и BISB (http://zx.pk.ru/attachment.php?attachmentid=40023).
...
Результаты на УКНЦ:
http://kisly-alexey.pisem.net/MOV/XM1-7/BIS.jpg
http://kisly-alexey.pisem.net/MOV/XM1-7/BISB.jpg
Что тут можно сказать? По всей видимости разработчики микрокода довольно хорошо промахнулись с байтовыми командами. Уже известно что в команде MOVB параметр dst сначала читается, а уже потом записывается. Судя по всему при адресации по счетчику команд (методы 27, 6Х, 7Х) при словных командах используется аргумент, прочитанный во время предвыборки, а в байтовых командах он снова читается. Весьма интересно услышать по этому поводу комментарии от Titus-а, но его в данный момент нет на форуме.
Кстати интересно посмотреть на CMPB, и CLR и CLRB.
Кстати интересно посмотреть на CMPB, и CLR и CLRB.Вот тест для CMPB: CMPB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40025), а для однооперандных команд буду ещё делать отдельный тест с немного изменённым тестовым движком.
...
Вот тест для CMPB: CMPB.SAV (http://zx.pk.ru/attachment.php?attachmentid=40025), а для однооперандных команд буду ещё делать отдельный тест с немного изменённым тестовым движком.
...
http://kisly-alexey.pisem.net/MOV/XM1-7/CMPB01.jpg
В свете открывшихся обстоятельств весьма интересно, будут ли сильно отличаться по времени команды MOV @R1,R0 и MOV @PC,R0. Вроде бы аргумент будет прочитан по предвыборке, да и последовательность предвыборки не будет нарушена.
Да, в байтовых командах влияет только на способ адресации 27, на 6Х и 7Х не влияет, т.к. там индекс читается как словный аргумент.
В свете открывшихся обстоятельств весьма интересно, будут ли сильно отличаться по времени команды MOV @R1,R0 и MOV @PC,R0. Вроде бы аргумент будет прочитан по предвыборке, да и последовательность предвыборки не будет нарушена.После теста однооперандных команд я сделаю специальный тест MOVPC.SAV для команд типа:
Mov R0, (PC)
MovB R0, (PC)
Mov (PC), R0
MovB (PC), R0
Mov (PC), (PC)
MovB (PC), (PC)
Mov (PC)+, (PC)
MovB (PC)+, (PC)
Mov (PC), (PC)+
MovB (PC), (PC)+
Чтобы далеко не искать, можно будет добавить туда же и уже протестированные:
Mov R0, (PC)+
MovB R0, (PC)+
Mov (PC)+, R0
MovB (PC)+, R0
Судя по всему при адресации по счетчику команд (методы 27, 6Х, 7Х) при словных командах используется аргумент, прочитанный во время предвыборки, а в байтовых командах он снова читается. Весьма интересно услышать по этому поводу комментарии от Titus-а, но его в данный момент нет на форуме.
Я абсолютно с вами согласен)
---------- Post added at 02:18 ---------- Previous post was at 02:17 ----------
Еще раз настоятельно рекомендую сделать дробные тайминги в тесте. Иначе точность его практически никакая, если говорить об УКНЦ.
Еще раз настоятельно рекомендую сделать дробные тайминги в тесте. Иначе точность его практически никакая, если говорить об УКНЦ.Но даже такой точности достаточно, чтобы задаться несколькими вопросами.
Чем вызвано отличие таймингов следующих команд:
R0 (R0) (R2)+ @(R2)+ -(R1) @-(R1) Addr (PC)+ @Tab(R0)
Mov @(R2)+ 47 70 70 80 70 83 82 82 96
Mov Addr 47 66 66 82 66 82 80 80 96
MovB @(R2)+ 47 71 71 85 80 94 93 93 107
MovB Addr 47 80 80 93 80 93 85 85 106
Cmp @(R2)+ 47 60 60 80 66 82 82 70 96
Cmp Addr 47 66 66 80 66 80 80 66 94
CmpB @(R2)+ 47 60 60 80 66 82 82 82 96
CmpB Addr 47 66 66 80 66 80 80 80 94
Add @(R2)+ 47 72 72 85 80 94 93 93 107
Add Addr 47 79 79 93 79 93 85 85 106
Из первого столбца однозначно следует, что чтение первого аргумента занимает в указанных командах строго одинаковое время.
Тогда как объяснить:
1. Почему Mov @(R2)+,(R2)+ выполняется медленнее, чем Mov nn(PC),(R2)+, но MovB @(R2)+,(R2)+ выполняется быстрее, чем MovB nn(PC),(R2)+, при том что у команд Cmp и CmpB таких отличий нет.
2. Почему команды Mov @(R2)+,(R0), MovB @(R2)+,(R0) и Add @(R2)+,(R0) почти не отличаются по продолжительности.
3. Почему команда Add @(R2)+,@(R2)+ выполняется значительно быстрее, чем Add @(R2)+,@-(R1), тогда как команды Add nn(PC),@(R2)+ и Add nn(PC),@-(R1) имеют одинаковую продолжительность ( играет роль использование одного и того же регистра и в источнике, и в приёмнике ? ).
...
P.S. Честно говоря - вручную переписывать числа из фоток довольно сложно ( иногда случаются ошибки и приходится постоянно перепроверять ).
Если перед запуском тестов загрузить монитор NC11SJ.SYS ( с любого носителя, не обязательно с HX ) и нажать в подключенном к COM-порту терминале кнопку [Лог] - результаты тестов сразу запишутся в текстовый файл на PC.
1. Почему Mov @(R2)+,(R2)+ выполняется медленнее, чем Mov nn(PC),(R2)+, но MovB @(R2)+,(R2)+ выполняется быстрее, чем MovB nn(PC),(R2)+, при том что у команд Cmp и CmpB таких отличий нет.
Прежде всего странно, что MOVB blabla,(mem), который выполняется в цикле RMW, при адресации типа MOVB @(R2)+,(mem) выполняется с такой же скоростью, как и MOV.
Прежде всего странно, что MOVB blabla,(mem), который выполняется в цикле RMW, при адресации типа MOVB @(R2)+,(mem) выполняется с такой же скоростью, как и MOV.Видно, что MovB выполняется с той же скоростью, что и Add, поэтому вопрос нужно ставить наоборот -
почему:
MOV (R2)+,(R0) выполняется на 10 тактов быстрее, чем BIS (R2)+,(R0) , но
MOV @(R2)+,(R0) выполняется только на один такт быстрее, чем BIS @(R2)+,(R0) , учитывая что
MOV (R2)+,R0 выполняется за то же время, что и BIS (R2)+,R0 , а
MOV @(R2)+,R0 выполняется за то же время, что и BIS @(R2)+,R0 !!!
Видно, что MovB выполняется с той же скоростью, что и Add, поэтому вопрос нужно ставить наоборот -
почему:
MOV (R2)+,(R0) выполняется на 10 тактов быстрее, чем BIS (R2)+,(R0) , но
MOV @(R2)+,(R0) выполняется только на один такт быстрее, чем BIS @(R2)+,(R0) , учитывая что
MOV (R2)+,R0 выполняется за то же время, что и BIS (R2)+,R0 , а
MOV @(R2)+,R0 выполняется за то же время, что и BIS @(R2)+,R0 !!!
Возможно, что длинная адресация операнда-источника в комбинации с нерегистровой адресацией операнда-приемника... ЗАМЕНЯЕТ цикл W на цикл RMW) Вот вам новая отгадка)
Возможно, что длинная адресация операнда-источника в комбинации с нерегистровой адресацией операнда-приемника... ЗАМЕНЯЕТ цикл W на цикл RMW) Вот вам новая отгадка)
Нет, не заменяет. Проверил на стыке С2, послал через гипертерминал символ на УКНЦ, в порту 0176570 установился флаг готовности. В пультовом отладчике выполнил команду MOV @(R2)+,@R0, при R2=0 и R0=176572. Если бы на dst выполнялся бы цикл RMW, то флаг готовности был бы сброшен, а он остался.
Нет, не заменяет. Проверил на стыке С2, послал через гипертерминал символ на УКНЦ, в порту 0176570 установился флаг готовности. В пультовом отладчике выполнил команду MOV @(R2)+,@R0, при R2=0 и R0=176572. Если бы на dst выполнялся бы цикл RMW, то флаг готовности был бы сброшен, а он остался.
Значит какие-то холостые или лишние такты делает. Может два цикла чтения подряд. Или еще чего. Но факт в том, что при таких адресациях W и RMW сравниваются по времени.
Значит какие-то холостые или лишние такты делает. Может два цикла чтения подряд. Или еще чего. Но факт в том, что при таких адресациях W и RMW сравниваются по времени.
Titus, надо Вам сделать аналогичный тест на вашем движке и с дробными тактами, будет возможность сравнить. А уж если все будет одинаково, то тогда начинать делать выводы.
Чудес на свете нет, все можно будет объяснить.
Titus, надо Вам сделать аналогичный тест на вашем движке и с дробными тактами, будет возможность сравнить. А уж если все будет одинаково, то тогда начинать делать выводы.
Чудес на свете нет, все можно будет объяснить.
Аналогичный - это слишком много. Можно выделить одельные команды, которые надо проверить, и их дописать.
Аналогичный - это слишком много. Можно выделить одельные команды, которые надо проверить, и их дописать.
Зачем дописывать? Движок есть, сделать отдельную программу с этими командами.
Зачем дописывать? Движок есть, сделать отдельную программу с этими командами.
С каким этими? Если всеми комбинациями адресаций, то это движок в таком виде не потянет.
С каким этими? Если всеми комбинациями адресаций, то это движок в таком виде не потянет.
С этими - например MOV со всевозможными типами адресаций.
А почему это движок не потянет?
С этими - например MOV со всевозможными типами адресаций.
А почему это движок не потянет?
Потому что под каждую команду я должен ВРУЧНУЮ составить некую таблицу. Это 64 таблиц? Слишком накладно.
Потому что под каждую команду я должен ВРУЧНУЮ составить некую таблицу. Это 64 таблиц? Слишком накладно.
Что же это за таблицы такие?
Что же это за таблицы такие?
Смотрите сами, исходник открыт)
Смотрите сами, исходник открыт)
Titus, что-то у себя я не нашел этих исходников. И где они находятся?
Смотрите сами, исходник открыт)
Исходник только самый древний от С версии теста если о нём речь, другого ты вроде не выкладывал?
Titus, что-то у себя я не нашел этих исходников. И где они находятся?
http://zx.pk.ru/showpost.php?p=566155&postcount=319
Универсальный тест: OP1.SAV (http://zx.pk.ru/attachment.php?attachmentid=40042) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение однооперандных команд с различными способами адресации.
При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
...
Универсальный тест: OP1.SAV (http://zx.pk.ru/attachment.php?attachmentid=40042) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение однооперандных команд с различными способами адресации.
УКНЦ КВАНТ литеры 7 с 1515ХМ1-031:
http://kisly-alexey.pisem.net/MOV/XM1-7/OP1_1.jpg
P.S. Извиняюсь, что не лог с NC11SJ, постараюсь сделать попозже.
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..
Может написать дробные тайминги? )))
Там Inc R0 быстрее 13 тактов сработал - может, тест ещё разок для проверки запустить..
На втором запуске 13 тактов, но УКНЦ стоит включенной уже несколько часов, так что горячая. А вообще, правильно Titus сказал, что результаты должны быть с дробной частью. В магистрали ЦП процессор несинхронен с памятью, да и выборка из памяти делается с разрешения видеоконтроллера. Выборка слова, в зависимости от того, когда поступил запрос на чтение, может варьироваться от 320 нс до 960 нс, вот такая вот арифметика.
Может написать дробные тайминги? )))Для качественного исследования ( качественного не в смысле качества, а в смысле НЕ-количественного ) от дробей только вред.
Сейчас разницу в десятки тактов надо находить и объяснять. Когда модель таймингов такого порядка будет полностью адекватна оригиналу - придёт время дробей.
---------- Post added at 23:18 ---------- Previous post was at 23:16 ----------
результаты должны быть с дробной частьюДля дробной части таймингов требуется специальное статистическое исследование. На этапе качественного исследования дроби только отвлекают.
Сейчас разницу в десятки тактов надо находить и объяснять. Когда модель таймингов такого порядка будет полностью адекватна оригиналу - придёт время дробей.
Точно) Придет время) И все тесты делать надо будет заново)
---------- Post added at 00:27 ---------- Previous post was at 00:26 ----------
Для дробной части таймингов требуется специальное статистическое исследование. На этапе качественного исследования дроби только отвлекают.
Ну что же, придется поддаться на уговоры Alex_K и самому сделать дробный тест)
Точно) Придет время) И все тесты делать надо будет заново)Именно так. Вычислять среднее значение и параметры распределения.
Ну что же, придется поддаться на уговоры Alex_K и самому сделать дробный тест)
С нетерпением ждем.
Универсальный тест: MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC.
При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
Тест работает не быстро. Если (например) команда выполняется за 50 тактов - результата определния её продолжительности приходится ждать 10 сек.
...
Универсальный тест: MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC.
На 1801ВМ2 весьма интересные результаты, пришлось даже УКНЦ поменять, чтобы проверить. Тестировался УКНЦ КВАНТ литеры 7 с 1515ХМ2-001. Смотрите и удивляйтесь:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/6Wvv/hX5VCQNER/MOVPC01.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/F6ht/oGCxMyWEK/MOVPC02.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/2Yf7/ZCob4NJdH/MOVPC03.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/7U7j/NUPH8sN2d/MOVPC04.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/kY3k/8zExkJ1tz/MOVPC05.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/HYjN/D6A8kmJtv/MOVPC06.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/EVuz/pze9pFb3m/MOVPC07.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/AKE4/t2vZ5GPS8/MOVPC08.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/CS5t/pZL2SsvAD/MOVPC09.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/JGjX/aXJkUEVBd/MOVPC10.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/FFKL/e3LYfGJ1d/MOVPC11.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/N5Sg/D17FAJ8vb/MOVPC12.jpg
Всё чудесатее и чудесатее..
Код там выполняется такой:
010400 [000000]: MOV (PC), R0 ; 010402:011700 -> R0
010402 [000000]: MOV (PC), R0 ; 010404:011700 -> R0
010404 [000000]: MOV (PC), R0 ; 010406:011700 -> R0
010406 [000000]: MOV (PC), R0 ; 010410:011700 -> R0
010410 [000000]: MOV (PC), R0 ; 010412:011700 -> R0
010412 [000000]: MOV (PC), R0 ; 010414:011700 -> R0
010414 [000000]: MOV (PC), R0 ; 010416:011700 -> R0
010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444
010400 [000010]: MOVB (PC), R0 ; 010402: 300 -> R0
010402 [000010]: MOVB (PC), R0 ; 010404: 300 -> R0
010404 [000010]: MOVB (PC), R0 ; 010406: 300 -> R0
010406 [000010]: MOVB (PC), R0 ; 010410: 300 -> R0
010410 [000010]: MOVB (PC), R0 ; 010412: 300 -> R0
010412 [000010]: MOVB (PC), R0 ; 010414: 300 -> R0
010414 [000010]: MOVB (PC), R0 ; 010416: 300 -> R0
010416 [000010]: MOVB (PC), R0 ; 010420: 240 -> R0
010420 [000010]: NOP
010422 [000010]: NOP
010424 [000010]: NOP
010426 [000010]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444
Чета все у вас плавает, господа)
Всё чудесатее и чудесатее..
Во-во!!! Сейчас загрузился на КВАНТ с 1515ХМ1-031 c IDE-Flash, так на MOV @PC,R0 все время TRAP4 по адресу 010416.
Сейчас загружусь с дисковода, там система немного другая.
---------- Post added at 00:21 ---------- Previous post was at 00:19 ----------
Чета все у вас плавает, господа)
Titus, у Вас нарушение предвыборки тоже съедало неизвестно куда 52 такта, так что ждем тестов от Вас с большим нетерпением.
Titus, у Вас нарушение предвыборки тоже съедало неизвестно куда 52 такта, так что ждем тестов от Вас с большим нетерпением.
Но человек наконец сделал дробные тайминги)
Я бы ещё понял, если бы глючила команда MovB (PC)+,(PC)
Она три завершающих NOPа плавно превращает вот в что:
014322 [000010]: MOVB #-27185., (PC) ; 014324: 317 -> 014326
014326 [000010]: MOVB #-27185., (PC) ; 014330: 317 -> 014332
014332 [000010]: MOVB #-27185., (PC) ; 014334: 317 -> 014336
014336 [000010]: MOVB #-27185., (PC) ; 014340: 317 -> 014342
014342 [000010]: SWAB (PC) ; 014344:000240
014344 [000004]: CMPB R0, R0 ;
014346 [000004]: NOP
014350 [000004]: DEC R5 ; R5 :002044
014352 [000000]: BEQ 014366
Ну вот собственно ошибка на другой системе:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Aam6/DuQdkvJxF/MOVPC_ERR.jpg
Хотя команда и MOV PC,@R0, но в R0 пишется байт.
На третьем проходе вылетела ( в начале первого прохода в R5 = 8013/5 = 1602 = 03102 ).
---------- Post added at 00:55 ---------- Previous post was at 00:03 ----------
Если блок питания во всех случаях был один и тот же - проблема может быть в нём.
Мне один раз довелось наблюдать, как после подключения второго блока дисководов к ДВК - у 1801ВМ2 начались вылеты по Trap_To_4 в ядре RMON RT-11.
Если блок питания во всех случаях был один и тот же - проблема может быть в нём.
Мне один раз довелось наблюдать, как после подключения второго блока дисководов к ДВК - у 1801ВМ2 начались вылеты по Trap_To_4 в ядре RMON RT-11.
Если бы проблема была в блоке питания, то я бы наверное и загрузится бы не смог. А так проблема возникает в одном месте, да и к тому же на одной из УКНЦ тест проходил, но показания слишком плавали. Другие тесты проходят без проблем. Грузился я с разных устройств (дисковод и IDE-Flash).
Надо, чтобы этот тест прогнали бы на другой УКНЦ несколько раз. Вот тогда можно делать кое-какие выводы.
Если бы проблема была в блоке питания, то я бы наверное и загрузится бы не смог.Играет роль скорость реакции блока питания на изменение нагрузки. Ведь ошибки чаще всего возникали при смене типа кода, а значит - и профиля потребления.
Обычный код имеет усреднённый профиль потребления, поэтому загрузка операционной системы и т.п. проходит без проблем. Но когда после тысячи команд MOV (PC),R0 подряд - вдруг появляется NOP - профиль потребления резко изменяется.
Когда к ДВК подключили второй блок дисководов - она тоже начала вылетать только в одной программе и только на одной и той же команде внутри RMON ( неделю без толку отлаживал, пока второй дисковод не отключили и всё не пришло в норму ).
Но когда после тысячи команд MOV (PC),R0 подряд - вдруг появляется NOP - профиль потребления резко изменяется.
Ерунда какая) Вам пора спать)
Ерунда какая)
Не такая уж и ерунда - не знаю как местная ошибка и случай из практики Patrona,
а вот на PC во времена аникуйства я сталкивался с таким. Замена БП на новый (хотя и старый вроде бы рабочий)
решала проблему (разную). Но тут это снова оффтоп получается )
---------- Post added at 05:04 ---------- Previous post was at 05:01 ----------
И почему на форуме нельзя самому себе сказать спасибо? )
Ерунда какая)Не буду настаивать на тонкостях формулировки диагноза, но то, что вылет/не вылет 1801ВМ2 по Trap_To_4 при выполнении обычных ( не предполагающих возможности зависания шины ) последовательностей команд связан именно с характеристиками питания - достоверный факт.
Нужно прогнать тест с разными блоками питания и сравнить результаты.
---------- Post added at 12:12 ---------- Previous post was at 12:03 ----------
Возможно, главную роль играет организация цепей питания на плате - тогда даже с идеальным блоком питания тест будет глючить.
В этом случае нужно подобрать максимально качественный блок питания и сравнивать в тесте разные платы с 1801ВМ2 ( от УКНЦ, ДВК и т.д. ).
Не буду настаивать на тонкостях формулировки диагноза, но то, что вылет/не вылет 1801ВМ2 по Trap_To_4 при выполнении обычных ( не предполагающих возможности зависания шины ) последовательностей команд связан именно с характеристиками питания - достоверный факт.
Уверен, что тут ошибка другого плана. Ведь команда MOV (PC)+,R0 ничем по своим характеристикам не отличается от подавляющего большинства других стандартных команд.
Уверен, что тут ошибка другого плана. Ведь команда MOV (PC)+,R0 ничем по своим характеристикам не отличается от подавляющего большинства других стандартных команд.
Во-первых не MOV (PC)+,R0, а MOV @PC,R0. А во-вторых уникальность ситуации в том, что значение источника уже считалось по предвыборке, да и предвыборка не нарушается.
По поводу блока питания - используется AT-блок, модели HIPRO HP-200PGN. Проблемы есть на двух УКНЦ, но адреса разные.
Titus, прогоните этот тест на своих.
Titus, прогоните этот тест на своих.
Доставать долго. Быстрее самому написать альтернативный тест для MOV (PC),R0, чтобы вы прогнали.
используется AT-блокТогда ничего удивительного - у плат PC используются дополнительные стабилизаторы питания возле разъёма процессора, поэтому стабильность блоков питания на порядок ниже, чем у любой PDP-11.
Даже самый зачуханный блок питания PDP-11 - превышает требования PC к блокам питания серверного класса.
---------- Post added at 12:42 ---------- Previous post was at 12:40 ----------
Быстрее самому написать альтернативный тест для MOV (PC),R0, чтобы вы прогнали.Другая последовательность команд даст другой результат.
Ведь под эмулятором тест по Trap_To_4 не вылетает - значит проблема именно в реальном железе..
Ведь под эмулятором тест по Trap_To_4 не вылетает - значит проблема именно в реальном железе..
Эмулятор, как один, так другой, весьма далеки от одеяла. Я имею ввиду УКНЦ)
Эмулятор, как один, так другой, весьма далеки от одеяла. Я имею ввиду УКНЦ)Но и на реальной УКНЦ тест не всегда вылетает.
А если вылетает - то на одной из этих команд:
010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444
Почему существующие эмуляторы УКНЦ ещё не научились адекватно эмулировать эти команды ?
Почему существующие эмуляторы УКНЦ ещё не научились адекватно эмулировать эти команды ?
Потому что для этого нужно эмулировать процессор с точностью до ступеней конвейера, и железо УКНЦ с такой же точностью.
Тогда ничего удивительного - у плат PC используются дополнительные стабилизаторы питания возле разъёма процессора, поэтому стабильность блоков питания на порядок ниже, чем у любой PDP-11.
Даже самый зачуханный блок питания PDP-11 - превышает требования PC к блокам питания серверного класса.
Это у последних плат, в которых процессоры пожирают под сотню ватт. А это древний источник, который питал древнюю плату на Pentium-200 (даже не MMX). Да и на этой материнке кондеров под тысячи микрофарад не наблюдается. Могу сказать, что классический источник в УКНЦ похуже будет. Тут причина скорее в другом, может быть и обнаружили ошибку в процессоре.
Потому что для этого нужно эмулировать процессор с точностью до ступеней конвейера, и железо УКНЦ с такой же точностью.Но это, чтобы получить Trap_To_4 с нештатными параметрами питания.
Но когда всё штатно - эмуляторы УКНЦ эти команды эмулируют без проблем ( а именно - так, как работа этих команд описана в ТЗ и как она происходит на реальной УКНЦ при нормальной работе аппаратуры ).
Когда все работает штатно - тест не только не вылетает, но и не глючит, а потому - даёт правильные результаты:
http://kisly-alexey.pisem.net/MOVPC/1/MOVPC08.jpg
Почему существующие эмуляторы УКНЦ ещё не научились адекватно эмулировать эти команды ?
Patron, а что Вы понимаете под неадекватностью?
---------- Post added at 14:17 ---------- Previous post was at 14:16 ----------
Но это, чтобы получить Trap_To_4 с нештатными параметрами питания.
Но когда всё штатно - эмуляторы УКНЦ эти команды эмулируют без проблем ( а именно - так, как работа этих команд описана в ТЗ и как она происходит на реальной УКНЦ при нормальной работе аппаратуры ).
Когда все работает штатно - тест не только не вылетает, но и не глючит, а потому - даёт правильные результаты:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/AKE4/t2vZ5GPS8/MOVPC08.jpg
А как объясняются результаты с 3 или 4 тактами на команду?
а что Вы понимаете под неадекватностью?Это было полемическое высказывание.
Понятно, что абстракные эмуляторы могут адекватно эмулировать только штатную работу цифровых схем.
Когда при одинаковых начальных условиях выполнение одинаковых последовательностей кода даёт на реальном оборудовании разные результаты - это нештатная работа, адекватно эмулировать которую методами абстрактной эмуляции невозможно в принципе.
---------- Post added at 13:23 ---------- Previous post was at 13:20 ----------
А как объясняются результаты с 3 или 4 тактами на команду?Ответ в коде теста:
010416 [000000]: MOV (PC), R0 ; 010420:000240 -> R0
010420 [000000]: NOP
010422 [000000]: NOP
010424 [000000]: NOP
010426 [000000]: DEC R5 ; R5 :002044
010430 [000000]: BEQ 010444
Если последняя команда выполняет переход BEQ до завершения всех циклов тестирования - результат вполне может оказаться и 0 тактов на команду.
Понятно, что абстракные эмуляторы могут адекватно эмулировать только штатную работу цифровых схем.
Когда при одинаковых начальных условиях выполнение одинаковых последовательностей кода даёт на реальном оборудовании разные результаты - это нештатная работа, адекватно эмулировать которую методами абстрактной эмуляции невозможно в принципе.
Не знаю, что такое абстрактный эмулятор, но правильный эмулятор эмулирует все, что известно о эмулируемой машине. И если выполнение одной и той же программы дает разные результаты на железе, а на эмуляторе нет, значит эмулятор не отражает какие-то обьективные процессы железа. За исключением случаев, когда железо неисправно.
---------- Post added at 15:23 ---------- Previous post was at 15:22 ----------
Если последняя команда выполняет переход BEQ до завершения всех циклов тестирования - результат вполне может оказаться и 0 тактов на команду.
А вот эту фразу совсем не понял)
Не знаю, что такое абстрактный эмуляторАбстрактный эмулятор эмулирует суть происходящего, дискретный эмулятор эмулирует сигналы в виде логических уровней и время в виде тактов тактовой частоты, аналоговый эмулятор эмулирует сигналы в виде уровней напряжения и время в виде долей секунды ( тысячных, милллионных, миллиардных ).
Эмулировать аналоговые переходные процессы в печатных проводниках платы и полупроводниковых элементах микросхем удобнее всего при аналоговой эмуляции. Как это можно было бы сделать в виде абстрактной эмуляции - представить не могу.
правильный эмулятор эмулирует все, что известно о эмулируемой машинеЗависит от сферы применения эмулятора. Иногда идеально правильная эмуляция фронтов распространения сигнала на шине - гораздо важнее идеально правильной эмуляции результатов выполнения команды, хотя в подавляющем большинстве случаев - наоборот.
А вот эту фразу совсем не понял)При проблемах с питанием процессор глючит безбожно.
Здесь, например - по содержимому R0 видно, что команда MOV (PC),R0 сработала как MOVB (PC),R0:
http://kisly-alexey.pisem.net/MOVPC/1/MOVPC_ERR.jpg
...
Когда вместо 40 тактов на команду в распечатке результатов теста появляется 3 - это означает, что или команда DEC R5 установила бит Z в PSW при R5 == 1000, или команда BEQ выполнила переход при сброшенном бите Z в PSW.
Абстрактный эмулятор эмулирует суть происходящего, дискретный эмулятор эмулирует сигналы в виде логических уровней и время в виде тактов тактовой частоты, аналоговый эмулятор эмулирует сигналы в виде уровней напряжения и время в виде долей секунды ( тысячных, милллионных, миллиардных ).
Эмулировать аналоговые переходные процессы в печатных проводниках платы и полупроводниковых элементах микросхем удобнее всего при аналоговой эмуляции. Как это можно было бы сделать в виде абстрактной эмуляции - представить не могу.
Зависит от сферы применения эмулятора. Иногда идеально правильная эмуляция фронтов распространения сигнала на шине - гораздо важнее идеально правильной эмуляции результатов выполнения команды, хотя в подавляющем большинстве случаев - наоборот.
Это слишком академический подход к эмуляторописанию и эмуляторопониманию. Либо абстрактный, либо логический, либо аналоговый.
На деле, в моем понимании, чтобы написать абсолютно достоверный эмулятор, вовсе не обязательно писать на уровне логических элементов. Достаточно хорошо понимать работу и взаимодействие законченных логических автоматов, и умело описать это в своей программе. Тогда будет и быстрый и точный.
Достаточно хорошо понимать работу и взаимодействие законченных логических автоматовЭто позволяет точно эмулировать абстрактную спецификацию электронно-логического устройства, но не его реальную работу.
Когда время прихода того или иного логического сигнала не синхронно тактовой частоте и определяется аналоговыми характеристиками реальных линий передачи - абстрактные правила эмуляции такой системы (на мой взгляд) выходят за пределы логики автоматов.
Это позволяет точно эмулировать абстрактную спецификацию электронно-логического устройства, но не его реальную работу.
Когда время прихода того или иного логического сигнала не синхронно тактовой частоте и определяется аналоговыми характеристиками реальных линий передачи - абстрактные правила эмуляции такой системы (на мой взгляд) выходят за пределы логики автоматов.
А вот на мой взгляд нет. Вся несинхронность так же описывается и закладывается в программу. Естественно, это должно быть учтено до проектирования программы.
Скажем так, несинхронных вещей не бывает. Все они с чем-нибудь синхронны. С каким-то источником тактирования.
Универсальный тест: MOVPC2.SAV (http://zx.pk.ru/attachment.php?attachmentid=40077) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC, не вошедшими в предыдущий тест MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052).
При первом запуске теста нужно ввести правильное значение тактовой частоты тестируемого процессора в килогерцах.
Команды типа MOV R0,(PC) невозможно тестировать в цикле, поэтому тест использует линейный движок. Если адрес возврата при входе в прерывание превышает верхний адрес свободной памяти - вместо числа заходов в буфер команд в первой позиции строки результата выводится *.
На эмуляторе ДВК результаты запуска выглядят так:
.RU MOVPC2
MovPC2 - v1.0
Memory Top: 137554
BUF words: 23108
CPU KHz: 5300 >
1: Nop 14
1: Mov R0, R0 14
1: Mov R0, (PC) 37
1: MovB R0, (PC) 37
1: Mov (PC), R0 30
1: MovB (PC), R0 30
::: SP = PC :::
1: Mov R0, (SP)+ 41
1: MovB R0, (SP)+ 41
1: Mov (SP),(SP)+ 49
1: MovB (SP),(SP)+ 49
Program completed.
.
Попробуйте мой тестик)
Начнем. Выбрал только экраны для новых тестов.
ПП:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/DMbZ/y4hHgpBUC/TSSPDi_01.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/N7kh/iaLG51P1K/TSSPDi_02.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/DLQk/DJUXiUt4c/TSSPDi_03.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/By89/6aHBeueVi/TSSPDi_04.jpg
ЦП:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/L9ev/Q3t7NMTc9/TSSPDi_05.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/K2CR/aGpuFzUVM/TSSPDi_06.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/J9NG/URoT4Kozz/TSSPDi_07.jpg
---------- Post added at 22:57 ---------- Previous post was at 22:53 ----------
Универсальный тест: MOVPC2.SAV (http://zx.pk.ru/attachment.php?attachmentid=40077) позволяет определить число тактов, затрачиваемых любым процессором архитектуры PDP-11 на выполнение команды MOV с различными способами адресации относительно PC, не вошедшими в предыдущий тест MOVPC.SAV (http://zx.pk.ru/attachment.php?attachmentid=40052).
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Kx4J/1JzSywnVZ/MOVPC2_01.jpg
Если добавить результаты из предыдущего теста, получится так:
:::::: SP = PC ::::::
Mov R0, (PC) 47
Mov R0, (PC)+ 47
Mov R0, (SP)+ 85
MovB R0, (PC) 57
MovB R0, (PC)+ 57
MovB R0, (SP)+ 94
Mov (PC),(PC) 82
Mov (SP),(SP)+ 102
MovB (PC),(PC) 84
MovB (SP),(SP)+ 113
---------- Post added at 22:16 ---------- Previous post was at 22:07 ----------
Возникает интересный вопрос - а читает ли повторно 1801ВМ2 следующую ячейку памяти, если записать её с адресацией относительно PC ..
Очень любопытно выглядит совпадение скорости выполнения команд, и исполняющих, и пропускающих следующее записанное слово.
Начнем. Выбрал только экраны для новых тестов.
Эта ваша машина с плавающими таймингами для ПП не очень хороший вариант для тестов. На большинстве машин все тайминги ПП стоят как прибитые в диапазоне кратном 4 тактам.
Кстати, и никаких сенсаций.
Эта ваша машина с плавающими таймингами для ПП не очень хороший вариант для тестов. На большинстве машин все тайминги ПП стоят как прибитые в диапазоне кратном 4 тактам.
Кстати, и никаких сенсаций.
Посмотрите повнимательней результаты новых тестов относительно тестов Patron-а. Кое-где расхождение в два раза.
---------- Post added at 23:45 ---------- Previous post was at 23:43 ----------
Возникает интересный вопрос - а читает ли повторно 1801ВМ2 следующую ячейку памяти, если записать её с адресацией относительно PC ..
Очень любопытно выглядит совпадение скорости выполнения команд, и исполняющих, и пропускающих следующее записанное слово.
Если пишется слово по адресу предвыборки, то процессор заново перечитывает его после исполнения текущей команды. У Titus-а в тестах в таких случаях получалось различие в 52 такта.
Кое-где расхождение в два раза.При тесте команд
Mov (PC),(PC)+
MovB (PC),(PC)+
похоже не было учтено, что следующее слово пропускается - поэтому, если не разделить количество "пройденных" слов на 2 - скорость получается в два раза выше.
Что же до команд
Mov (PC),R0
MovB (PC),R0
весьма похоже, что в отличие от всех остальных команд - скорость у них и в словном, и байтовом вариантах одинаковая.
Однако относительно их скорости трудно дать однозначное заключение - ведь в результате глюков часть из них могут выполняться с инкрементной адресацией.
Посмотрите повнимательней результаты новых тестов относительно тестов Patron-а. Кое-где расхождение в два раза.
Если с тем, что был зависающим - то с ним я не сравниваю, он вообще глючный.
---------- Post added at 00:04 ---------- Previous post was at 00:02 ----------
Что же до команд
Mov (PC),R0
MovB (PC),R0
весьма похоже, что в отличие от всех остальных команд - скорость у них и в словном, и байтовом вариантах одинаковая.
Однако относительно их скорости трудно дать однозначное заключение - ведь в результате глюков часть из них могут выполняться с инкрементной адресацией.
Никаких глюков нет, все стабильно, как часы.
Если пишется слово по адресу предвыборки, то процессор заново перечитывает его после исполнения текущей команды. У Titus-а в тестах в таких случаях получалось различие в 52 такта.
:::::: SP = PC ::::::
Mov R0, (PC) 47
Mov R0, (PC)+ 47
Mov R0, (SP)+ 85
MovB R0, (PC) 57
MovB R0, (PC)+ 57
MovB R0, (SP)+ 94
Mov (PC),(PC) 82
Mov (SP),(SP)+ 102
MovB (PC),(PC) 84
MovB (SP),(SP)+ 113
При выполнении указанных команд SP и PC всегда имеют одинаковые значения.
Т.е. команды
MovB (PC),(PC) 84
MovB (SP),(SP)+ 113
делают с алгоритмической точки зрения абсолютно одно и то же - читают и пишут следующее слово по ходу выполнения программы.
Что же до команд
Mov (PC),R0
MovB (PC),R0
весьма похоже, что в отличие от всех остальных команд - скорость у них и в словном, и байтовом вариантах одинаковая.
Однако относительно их скорости трудно дать однозначное заключение - ведь в результате глюков часть из них могут выполняться с инкрементной адресацией.
Что до этих команд, то при исполнении есть глюки, если следующая команда после них не нарушает предвыборку. Patron, измените тесты, вместо трех NOP-ов вставьте три команды BR .+2 (код 0400), хотя достаточно одной, и все изменится.
Я тут проводил тесты в пультовом отладчике, заполнял память с 01000 по 157764 командой MOV @PC,R0, оставшиеся ячейки - три NOP и JMP @#1000. В этом варианте получал TRAP4. Вместо NOP-ов пробовал другие команды, если вместо трех NOP ставил MOV @PC,R0, то все нормально, если команды, которые не нарушают предвыборку, например MOV R0,R0, то получал TRAP4.
Вот такие вот дела. Что-то не учли разработчики в реализации предвыборки, потому такой глюк и происходит.
Никаких глюков нет, все стабильно, как часы.Стабильность и отсутствие глюков - не одно и то же.
В линейном движке эти команды не вылетают ( что было очевидно с самого начала, т.к. в циклическом тесте последовательность этих команд сотни раз прерывается таймером и ни в одном случае это не приводило к проблемам ).
Но то, что некоторые из этих команд исполняются, как другие - можно обнаружить в линейном тесте только по отклонению таймингов.
---------- Post added at 23:21 ---------- Previous post was at 23:15 ----------
Что-то не учли разработчики в реализации предвыборки, потому такой глюк и происходит.Если бы вылет происходил каждый раз - это одно дело. Но когда вылетает только один раз из нескольких ( а зачастую - из нескольких тысяч, т.к. если при вылете теста MOVPC.SAV в R5 находится 0 - значит было выполнено больше тысячи "проходов через NOP" ) - тогда это больше похоже на резкий скачок потребления тока, приводящий к сбою.
Если бы вылет происходил каждый раз - это одно дело. Но когда вылетает только один раз из нескольких ( а зачастую - из нескольких тысяч, т.к. если при вылете теста MOVPC.SAV в R5 находится 0 - значит было выполнено больше тысячи "проходов через NOP" ) - тогда это больше похоже на резкий скачок потребления тока, приводящий к сбою.
Да, здесь Вас не убедить, что если бы проблемы были в источнике, то УКНЦ все время глючила бы, но глюк происходит только при определенных обстоятельствах. Да и о каком резком скачке потребления может идти речь, вроде ничего энергосберегающего в УКНЦ нет, да и жрет он мало.
Собственно тесты на других УКНЦ и с другими источниками питания могут дать ответ, но вот только никто кроме меня их запускать не хочет.
вместо трех NOP-ов вставьте три команды BR .+2 (код 0400), хотя достаточно одной, и все изменится.В приложении - изменённый вариант теста MovPC v1.1 (http://zx.pk.ru/attachment.php?attachmentid=40082).
Foot0:
Br .+2.
Dec R5
BEQ 1$
Jmp @#LoopStart
1$:
Mov #R.T.I, @#100
Return
Foot1:
Протестировать в цикле команду MovB (PC)+,(PC) без трёх NOPов невозможно, но зато без теста этой команды количество заглушек удалось сократить до одной.
Мой прогноз - вылетать будет немного меньше, но глючить не перестанет.
...
Да, здесь Вас не убедить, что если бы проблемы были в источнике, то УКНЦ все время глючила бы, но глюк происходит только при определенных обстоятельствах. Да и о каком резком скачке потребления может идти речь, вроде ничего энергосберегающего в УКНЦ нет, да и жрет он мало.Вылет по Trap_To_4 ещё можно кое-как объяснить сбоем предвыборки. Но выполнение MOV как MOVB, уменьшение 1600. в R5 до нуля за пару сотен декрементов - это ничем кроме просадки питания объяснить нельзя.
Собственно тесты на других УКНЦ и с другими источниками питания могут дать ответ, но вот только никто кроме меня их запускать не хочет.hobot хочет ( он сам говорил ).
Видно - он просто ещё не понял, насколько СИЛЬНО этого хочет :)
Мой прогноз - вылетать будет немного меньше, но глючить не перестанет.
Вылет по Trap_To_4 ещё можно кое-как объяснить сбоем предвыборки. Но выполнение MOV как MOVB, уменьшение 1600. в R5 до нуля за пару сотен декрементов - это ничем кроме просадки питания объяснить нельзя.
Я думаю прогноз неверный, покопался в пультовом отладчике и выявил закономерность, но сейчас уже ночь, расскажу сегодня, но уже вечером.
hobot хочет ( он сам говорил ).
Видно - он просто ещё не понял, насколько СИЛЬНО этого хочет :)
Всё верно, просто есть причины по которым откладываю, сейчас уже потерял всякую надежду актуальные версии собственно ручно собрать - хотя вроде - бы все архивы
Patrona и Titusa вижу у себя, всё равно я бы очень попросил образ дискеты с актуальными версиями чтобы просто гнать и скрины делать прилепить,
Alex_K, наверняка самый актуальный сборник у вас ?
Запуск и прогон на живых машинках планирую на конец этой недели, так что образ то же не к спеху - идеально к выходным? (вдруг ещё какие то тесты или вариации появятся за это время). Я на форуме постоянно, как только начну сразу начну и результаты выкладывать. Тему читаю и слежу.
Я думаю прогноз неверныйВполне возможно, что команда BR поможет радикально. Но диагноз это не опровергнет - алгоритмические ошибки микрокода процессора должны давать одинаковый эффект при каждом исполнении "целевого" кода на всех машинах с таким процессором.
Когда же разные прогоны теста дают разные глюки, когда холодная машина глючит меньше, а горячая больше, когда у разных машин на одном и том же коде глюки отличаются - это невозможно объяснить чисто цифровыми причинами.
Вполне возможно, что команда BR поможет радикально. Но диагноз это не опровергнет - алгоритмические ошибки микрокода процессора должны давать одинаковый эффект при каждом исполнении "целевого" кода на всех машинах с таким процессором.
Когда же разные прогоны теста дают разные глюки, когда холодная машина глючит меньше, а горячая больше, когда у разных машин на одном и том же коде глюки отличаются - это невозможно объяснить чисто цифровыми причинами.
Терпение, еще раз терпение. Могу сразу сказать, что перед тем как лечь спать, прогнал новый тест, все в полном порядке. А ошибки есть в микрокоде, да еще какие. А результаты разные потому, что еще работают прерывания по таймеру, и судя по всему они на условно работающей машине попадали куда надо. Т.к. вроде и УКНЦ с виду одинаковые и источник питания один, и грузится одна система, но быстродействие чуть-чуть может плавать, т.к. ЦП и сетевой таймер питаются от разных кварцев.
---------- Post added at 11:31 ---------- Previous post was at 11:25 ----------
Т.к. на сейчас на работе и УКНЦ нету тута, то привожу небольшой кусочек кода, хочется услышать ваше мнение о результатах исполнения.
Итак, начальные аргументы - R0 = R1 = R2 = R3 = R4 = 0. PSW = 0200. Ячейка 02000 = 0 (команда HALT).
А вот и код:
1000:011700 MOV @PC,R0
1002:005201 INC R1
1004:005202 INC R2
1006:005203 INC R3
1010:005204 INC R4
1012:000137 JMP @#1000
1014:001000 .WORD 2000
1016:002000
Ваши прогнозы, что получим на выходе?
что получим на выходе?В свете открывшихся перспектив - боюсь даже подумать.
Но и у меня есть любопытное "кодовое предложение":
Clr R1
Clr R2
Mov (PC)+, R0
Inc R2
Mov R0, (PC)
Inc R1что будет в R1 и R2 после выполнения..
...
результаты разные потому, что еще работают прерывания по таймеру, и судя по всему они на условно работающей машине попадали куда надоВ циклическом тесте ( в отличие от линейного ) прерывания ключевой роли не играют. Можно сделать вариант с запрещёнными прерываниями и результат будет тем же ( в смысле глюков, а не в смысле подсчитанного числа тиков ).
В свете открывшихся перспектив - боюсь даже подумать.
Ладно, скажу. R0=005201, R1=2, R2=1, R3=1, R4=1, останов будет на адресе 2000.
Ладно, скажу. R0=005201, R1=2, R2=1, R3=1, R4=1, останов будет на адресе 2000.
Ну и как это получилось?
Но и у меня есть любопытное "кодовое предложение":
Clr R1
Clr R2
Mov (PC)+, R0
Inc R2
Mov R0, (PC)
Inc R1что будет в R1 и R2 после выполнения..
Обязательно попробую вечером. Но предсказываю: R0=005202, R1=0, R2=1. Но в свете открывшихся обстоятельств с адресацией 17, результаты могут отличаться от предполагаемых.
Есть другой тест:
MOV #LBL,R0
INC R0
MOV (PC)+,R3
INC R2
CLR R1
CLR R2
MOV R3,@R0
LBL: INC R1
HALT
Ваши предположения?
---------- Post added at 12:37 ---------- Previous post was at 12:36 ----------
Ну и как это получилось?
А что, из кода вроде и так ясно. Плюс еще глюк с предвыборкой.
А что, из кода вроде и так ясно. Плюс еще глюк с предвыборкой.
Мне не ясно, расшифруйте)
Ваши предположенияЭто для меня слишком сложно.
Что при правильной работе должно произойти..
Типа, в момент выполнения команды MOV R3,(R0) - на её место должна записаться команда INC R2.
А зачем нечётный R0 - с чётным R0 результат будет другой ?
Мне не ясно, расшифруйте)
Начнем по порядку. Команда MOV @PC,R0 как и надо, ложит в R0 значение 005201. А вот далее самое интересное: использовался тип адресации 17, выборка значения происходит по адресу предвыборки, но предвыборка не нарушается, и в итоге следующая команда INC R1 исполняется два раза. Судя по всему происходит какой-то глюк с тремя счетчиками команд, т.к. следующие команды исполняются нормально, а вот JMP выборку значения по адресации 37 производит не за следующим словом после команды, а еще дальше, т.е. выбирается не 1000, а 2000.
Надо этот код прогнать в режиме HALT, там счетчик копии заморожен при запрещенных прерываниях, может там и конвеер не работает.
Начнем по порядку. Команда MOV @PC,R0 как и надо, ложит в R0 значение 005201. А вот далее самое интересное: использовался тип адресации 17, выборка значения происходит по адресу предвыборки, но предвыборка не нарушается, и в итоге следующая команда INC R1 исполняется два раза. Судя по всему происходит какой-то глюк с тремя счетчиками команд, т.к. следующие команды исполняются нормально, а вот JMP выборку значения по адресации 37 производит не за следующим словом после команды, а еще дальше, т.е. выбирается не 1000, а 2000.
Надо этот код прогнать в режиме HALT, там счетчик копии заморожен при запрещенных прерываниях, может там и конвеер не работает.
Т.е. после такой адресации все счетчики сбиваются, и потом идет выполнение всех последующих команд с неправильными счетчиками?
Это для меня слишком сложно.
Что при правильной работе должно произойти..
Типа, в момент выполнения команды MOV R3,(R0) - на её место должна записаться команда INC R2.
А зачем нечётный R0 - с чётным R0 результат будет другой ?
Подредактировал код, поставил неверно метку LBL. Теперь можно глянуть, но эффект связан с предвыборкой и записью нового слова по адресу предвыборки. Но процессор адрес сравнивает абсолютно по всем 16 разрядам, поэтому успеет считаться и выполниться именно INC R1, хотя по этому адресу после исполнения MOV R3,@R0 будет уже INC R2.
Т.е. после такой адресации все счетчики сбиваются, и потом идет выполнение всех последующих команд с неправильными счетчиками?И спасает только BR, т.к. не используя счётчики - обнуляет их.
Т.е. после такой адресации все счетчики сбиваются, и потом идет выполнение всех последующих команд с неправильными счетчиками?
Что-то типа того. Но после этого исполняется два раза INC R1, вот это номер. Тут еще эффект связан если последующие команды не нарушают предвыборки, т.е. состоят из одного слова.
---------- Post added at 13:00 ---------- Previous post was at 12:59 ----------
И спасает только BR, т.к. не используя счётчики - обнуляет их.
Любая команда, нарушающая принцип предвыборки.
процессор адрес сравнивает абсолютно по всем 16 разрядам, поэтому успеет считаться и выполниться именно INC R1, хотя по этому адресу после исполнения MOV R3,@R0 будет уже INC R2.Гениально!
Вот любопытная модификация проведённого теста:
Clr R1
Clr R2
Clr R3
MovB (PC),(PC)
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000
MovB перед записью ещё раз читает ячейку, не добавит ли это дополнительных глюков..
---------- Post added at 12:06 ---------- Previous post was at 12:04 ----------
Любая команда, нарушающая принцип предвыборки.Но если эта команда сама использует сбитый счётчик - она скорее вынесет в Trap_To_4, чем спасёт. А из всех команд, нарушающих предвыборку - только BR не использует ни одного счётчика ( или ошибаюсь? ).
---------- Post added at 12:21 ---------- Previous post was at 12:06 ----------
Ещё один вариант:
Clr R1
Clr R2
Clr R3
Mov (PC),R0
Mov (PC),R0
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000
Но и у меня есть любопытное "кодовое предложение":
Clr R1
Clr R2
Mov (PC)+, R0
Inc R2
Mov R0, (PC)
Inc R1что будет в R1 и R2 после выполнения..
Обязательно попробую вечером. Но предсказываю: R0=005202, R1=0, R2=1. Но в свете открывшихся обстоятельств с адресацией 17, результаты могут отличаться от предполагаемых.
Ну вот собственно и ответ:https://thumb.cloud.mail.ru/weblink/thumb/xw1/HirX/c9E5HjPuX/TSTPC_01.jpg
---------- Post added at 19:15 ---------- Previous post was at 18:52 ----------
Вот любопытная модификация проведённого теста:
Clr R1
Clr R2
Clr R3
MovB (PC),(PC)
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000
MovB перед записью ещё раз читает ячейку, не добавит ли это дополнительных глюков..
Глюков здесь нет, все в пределах нормы. Т.к. эта команда делает запись по адресу предвыборки, то все сбрасывается и начинается сначала.
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Ec73/yGEWhiuH7/TSTPC_02.jpg
---------- Post added at 19:26 ---------- Previous post was at 19:15 ----------
Ещё один вариант:
Clr R1
Clr R2
Clr R3
Mov (PC),R0
Mov (PC),R0
Inc R1
Inc R2
Inc R3
Jmp @#1000
.Word 2000
.Word 3000
Это тот вариант, что я описывал. Количество команд MOV @PC,R0 роли не играет.
https://thumb.cloud.mail.ru/weblink/thumb/xw1/GYQX/7nTiTF11c/TSTPC_03.jpg
Получается, что запись следующей ячейки после команды занимает весьма разное время при адресации относительно PC и относительно любого другого регистра:
:::::: SP = PC ::::::
Mov R0, (PC) 47
Mov R0, (SP)+ 85
---------- Post added at 18:34 ---------- Previous post was at 18:32 ----------
На первый взгляд могло показаться, что в первом случае запись не происходит, однако последние тесты показали, что команда Mov R0, (PC) честно пишет в следующую ячейку, но просто делает это гораздо быстрее.
Два кода для анализа с результатами:
https://thumb.cloud.mail.ru/weblink/thumb/xw1/9vMj/bCTmPk8HB/TSTPC_04_01.jpg
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Egrn/VK6XDdvbK/TSTPC_04_02.jpg
---------- Post added at 20:16 ---------- Previous post was at 19:56 ----------
Еще интересный случай.
https://thumb.cloud.mail.ru/weblink/thumb/xw1/Ep1y/SmskpFQFk/TSTPC_04_03.jpg
Ну так если подытожить?
А вот теперь надо думать, что к чему и от чего. Но чтение с методом адресации 17 дает очень интересные результаты. Кстати, попробовал запускать эти тесты в режиме HALT, все тоже самое.
Кстати, и никаких сенсаций.Там в двух позициях есть сомнительные результаты:
http://emulator.pdp-11.org.ru/misc/Test1.png
http://emulator.pdp-11.org.ru/misc/Test2.png
Во втором случае точно должно быть в 2 раза больше, а в первом - надо ещё проверить.
...
Специально для проверки первого пункта - более точный вариант линейного теста: MovPC2_v1.2 (http://zx.pk.ru/attachment.php?attachmentid=40099)
При первом запуске теста нужно ввести правильное значение частоты тестируемого процессора в килогерцах.
Результат запуска в эмуляторе ДВК выглядит так:
.RU MOVPC2
MovPC2 - v1.2
Memory Top: 137554
BUF words: 22867
CPU KHz: 5300 >
1: Nop Evt: 14 ; Run: 7557 ; Res: 7571 ; CLC: 14.0
1: Mov R0, R0 Evt: 14 ; Run: 7557 ; Res: 7571 ; CLC: 14.0
1: Mov R0, (PC) Evt: 5 ; Run: 2861 ; Res: 2866 ; CLC: 37.0
1: MovB R0, (PC) Evt: 5 ; Run: 2861 ; Res: 2866 ; CLC: 37.0
1: Mov (PC), R0 Evt: 6 ; Run: 3528 ; Res: 3534 ; CLC: 30.0
1: MovB (PC), R0 Evt: 6 ; Run: 3528 ; Res: 3534 ; CLC: 30.0
::: SP = PC :::
1: Mov R0, (SP)+ Evt: 4 ; Run: 2582 ; Res: 2586 ; CLC: 41.0
1: MovB R0, (SP)+ Evt: 4 ; Run: 2582 ; Res: 2586 ; CLC: 41.0
1: Mov (SP),(SP)+ Evt: 4 ; Run: 2161 ; Res: 2165 ; CLC: 49.0
1: MovB (SP),(SP)+ Evt: 4 ; Run: 2161 ; Res: 2165 ; CLC: 49.0
Program completed.
.
Где:
Evt - Число тестируемых команд, выполнившихся за промежуток времени между началом и концом первого прерывания таймера.
Run - Число тестируемых команд, выполнившихся за промежуток времени между концом первого и началом второго прерывания таймера.
Res - Общее число тестируемых команд, выполнившихся между началом первого и началом второго прерывания таймера.
CLC - Подсчитанное число тактов.
...
В приложении два варианта теста - MovPC2_v1.1 (http://zx.pk.ru/attachment.php?attachmentid=40098) выходит из первого прерывания таймера по RTI, а MovPC2_v1.2 (http://zx.pk.ru/attachment.php?attachmentid=40099) - по BR.
...
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot