Не знаю, у меня такой задачи не стояло.
Может быть по наличию таймера, оставшегося с незапамятных времен? ;)
В архиве TDIV.zip :
TDIV1.SAV - тест стандартного деления чётного регистра ( без деления на 0 и без деления с переполнением ).
Пример работы:
Код:.TDIV1
Тестирование правильности выполнения команд процессора:
Команда деления (частичный тест):
DIV (even) - OK
.
TDIV2.SAV - "визуализатор" работы нестандартных команд деления ( деление на 0, деление с переполнением и деление нечётного регистра ). Можно сначала запустить этот тест на "эталонной" системе, потом на "испытуемой", а затем построчно сравнить сохранённые логи.
Пример работы:
Код:.TDIV2
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R0 >>>
PSW[007] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177777] ; R1[177777] ; R2[000000] >>> DIV R2,R0 >>>
PSW[007] ; R0[177777] ; R1[177777]
PSW[000] ; R0[100000] ; R1[000000] ; R2[177777] >>> DIV R2,R0 >>>
PSW[002] ; R0[100000] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[177774] >>> DIV R2,R0 >>>
PSW[002] ; R0[177774] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[012] ; R0[177774] ; R1[000000]
PSW[000] ; R0[000004] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000004] ; R1[000000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R0 >>>
PSW[000] ; R0[040000] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R0 >>>
PSW[010] ; R0[100000] ; R1[000002]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R0 >>>
PSW[010] ; R0[140000] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000002] ; R1[000002]
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R1 >>>
PSW[007] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177777] ; R1[177777] ; R2[000000] >>> DIV R2,R1 >>>
PSW[007] ; R0[177777] ; R1[177777]
PSW[000] ; R0[100000] ; R1[100000] ; R2[177777] >>> DIV R2,R1 >>>
PSW[002] ; R0[100000] ; R1[100000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R1 >>>
PSW[000] ; R0[177776] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R1 >>>
PSW[010] ; R0[000002] ; R1[000002]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R1 >>>
PSW[010] ; R0[177776] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[000004] >>> DIV R2,R1 >>>
PSW[002] ; R0[000002] ; R1[000002]
.
Можно отметить, что процессор PDP-11/83 делит нечётные регистры точно так же, как и чётные, когда результат деления записывается в регистр, указанный в команде, а остаток - в указанный в команде регистр с установленным нулевым битом в номере ( поэтому, для команды DIV R2,R0 - сначала результат попадёт в R0, а затем остаток в R1, а для команды DIV R2,R1 - сначала результат попадёт в R1, а затем остаток - тоже в R1 ).
...
Там есть алгоритм определения процессора (основанный на частичном анализе того что уже определил загрузчик RT-11), но он не определяет процессоры ВМ1-ВМ2-ВМ3. Есть лучший алгоритм из автоконфигуратора RSX. Но он разумеется тоже про ВМ ничего не знает. В том и цель - хочу определитель написать с учетом советских вариантов там где отличить можно. Как отличить ВМ3 известно.
form, Хорошо, тогда Фодос уже должен определять процессоры.
---------- Post added at 15:35 ---------- Previous post was at 15:04 ----------
Тест ВМ3
Код:.RUN TDIV1
Тестирование правильности выполнения команд процессора:
Команда деления (частичный тест):
DIV (even) - OK
.RUN TDIV2
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R0 >>>
PSW[003] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177777] ; R1[177777] ; R2[000000] >>> DIV R2,R0 >>>
PSW[003] ; R0[177777] ; R1[177777]
PSW[000] ; R0[100000] ; R1[000000] ; R2[177777] >>> DIV R2,R0 >>>
PSW[002] ; R0[100000] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[177774] >>> DIV R2,R0 >>>
PSW[004] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[004] ; R0[000000] ; R1[000000]
PSW[000] ; R0[000004] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000004] ; R1[000000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R0 >>>
PSW[000] ; R0[040000] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R0 >>>
PSW[010] ; R0[100000] ; R1[000002]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R0 >>>
PSW[010] ; R0[140000] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000002] ; R1[000002]
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R1 >>>
PSW[003] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177777] ; R1[177777] ; R2[000000] >>> DIV R2,R1 >>>
PSW[003] ; R0[177777] ; R1[177777]
PSW[000] ; R0[100000] ; R1[100000] ; R2[177777] >>> DIV R2,R1 >>>
PSW[002] ; R0[100000] ; R1[100000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R1 >>>
PSW[000] ; R0[177776] ; R1[040000]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R1 >>>
PSW[010] ; R0[000002] ; R1[100000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R1 >>>
PSW[010] ; R0[177776] ; R1[140000]
PSW[000] ; R0[000002] ; R1[000002] ; R2[000004] >>> DIV R2,R1 >>>
PSW[002] ; R0[000002] ; R1[000002]
Увы, он всего лишь заменяет буржуйские названия на советские и ничего больше.
---------- Post added at 18:42 ---------- Previous post was at 18:37 ----------
На 11/83...Код:.RU TDIV1
+ESTIROWANIE PRAWILXNOSTI WYPOLNENIQ KOMAND PROCESSORA:
+OMANDA DELENIQ (^ASTI^NYJ TEST):
DIV (even) - OK
.RU TDIV2
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R0 >>>
PSW[007] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177777] ; R1[177777] ; R2[000000] >>> DIV R2,R0 >>>
PSW[007] ; R0[177777] ; R1[177777]
PSW[000] ; R0[100000] ; R1[000000] ; R2[177777] >>> DIV R2,R0 >>>
PSW[002] ; R0[100000] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[177774] >>> DIV R2,R0 >>>
PSW[002] ; R0[177774] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[012] ; R0[177774] ; R1[000000]
PSW[000] ; R0[000004] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000004] ; R1[000000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R0 >>>
PSW[000] ; R0[040000] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R0 >>>
PSW[010] ; R0[100000] ; R1[000002]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R0 >>>
PSW[010] ; R0[140000] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000002] ; R1[000002]
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R1 >>>
PSW[007] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177777] ; R1[177777] ; R2[000000] >>> DIV R2,R1 >>>
PSW[007] ; R0[177777] ; R1[177777]
PSW[000] ; R0[100000] ; R1[100000] ; R2[177777] >>> DIV R2,R1 >>>
PSW[002] ; R0[100000] ; R1[100000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R1 >>>
PSW[000] ; R0[177776] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R1 >>>
PSW[010] ; R0[000002] ; R1[000002]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R1 >>>
PSW[010] ; R0[177776] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[000004] >>> DIV R2,R1 >>>
PSW[002] ; R0[000002] ; R1[000002]
.
Тест Эл.85
(захват с видеокарты)
Теперь понятны отличия выполнения нестандартных делений процессорами 1801ВМ3 и PDP-11/83:
1. Деление на 0
Код:PDP-11/83 :
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R0 >>>
PSW[007] ; R0[000000] ; R1[000000]
1801ВМ3 :
PSW[000] ; R0[000000] ; R1[000000] ; R2[000000] >>> DIV R2,R0 >>>
PSW[003] ; R0[000000] ; R1[000000]
2. Деление с переполнением
Код:PDP-11/83 :
PSW[000] ; R0[177774] ; R1[000000] ; R2[177774] >>> DIV R2,R0 >>>
PSW[002] ; R0[177774] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[012] ; R0[177774] ; R1[000000]
PSW[000] ; R0[000004] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000004] ; R1[000000]
1801ВМ3 :
PSW[000] ; R0[177774] ; R1[000000] ; R2[177774] >>> DIV R2,R0 >>>
PSW[004] ; R0[000000] ; R1[000000]
PSW[000] ; R0[177774] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[004] ; R0[000000] ; R1[000000]
PSW[000] ; R0[000004] ; R1[000000] ; R2[000004] >>> DIV R2,R0 >>>
PSW[002] ; R0[000004] ; R1[000000]
3. Деление нечётного регистра
Код:PDP-11/83 ( сохраняет в R1 остаток деления ):
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R1 >>>
PSW[000] ; R0[177776] ; R1[177776]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R1 >>>
PSW[010] ; R0[000002] ; R1[000002]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R1 >>>
PSW[010] ; R0[177776] ; R1[177776]
1801ВМ3 ( сохраняет в R1 результат деления ):
PSW[000] ; R0[177776] ; R1[177776] ; R2[177774] >>> DIV R2,R1 >>>
PSW[000] ; R0[177776] ; R1[040000]
PSW[000] ; R0[000002] ; R1[000002] ; R2[177774] >>> DIV R2,R1 >>>
PSW[010] ; R0[000002] ; R1[100000]
PSW[000] ; R0[177776] ; R1[177776] ; R2[000004] >>> DIV R2,R1 >>>
PSW[010] ; R0[177776] ; R1[140000]
Поведение 1801ВМ3 при делении на 0 и делении нечётного регистра полностью понятно, но какой логике следует 1801ВМ3 при делении с переполнением - немного неясно.
...
Друзья, не забываем запускать тест TSTVM2 v0.3a на ВМ3 и других машинах. Интересует последняя страница теста, где тест команды MARK.