Правила позиционно-независимой работы:Код:Уровень Выставляется Мониторится
4 TIRQ4 RIRQ5, RIRQ6
5 TIRQ4, TIRQ5 RIRQ6
6 TIRQ4, TIRQ6 RIRQ7
7 TIRQ4, TIRQ6, TIRQ7
Правила позиционно-независимой работы:Код:Уровень Выставляется Мониторится
4 TIRQ4 RIRQ5, RIRQ6
5 TIRQ4, TIRQ5 RIRQ6
6 TIRQ4, TIRQ6 RIRQ7
7 TIRQ4, TIRQ6, TIRQ7
ППР идет через все устройства последовательно. То есть их два: IACKI и IACKO. Обычно, сигнал IACKI сразу транслируется на IACKO. Если требуется прерывание, то по сигналу К ВВОД Н запрос фиксируется в отдельном триггере, который запрещает дальнейшую трансляцию (отключает IACKO) и направляет его (IACKI) в схему выдачи вектора.
- - - Добавлено - - -
На каждой плате, если там несколько устройств, то у них прохождение сигнала ППР также должно идти последовательно. Цепочка начинается с выхода IACKO процессора, сигнал с которого идет на IACKI первого устройства, с его IACKO на IACKI второго, и т.д. Если цепочка кончилась, она выдается на контакт К ППР0 Н этой платы. Если плата не процессорная, то она начинается с контакта К ППРI Н. Поэтому из запросивших прерывание всегда сработает только одно устройство - ближайшее к процессору.
- - - Добавлено - - -
А для этого нужна логическая схемка, навскидку, не очень простая, одной 155ЛА3 не отделаешься. И я что-то не припомню таких в окрестностях набортного ВП1-065 на 1201.03/04. Сама же 065-я ничего подобного не умеет.
.
Новый тест: T4REG.SAV - проверяет, как влияет зависание на выполнение автоинкремента регистра. Запускать можно на любых машинах.
Результат запуска на эмулируемой ДВК-2 такой :
Код:.RU T4REG
Register Autoincrement TRAP4 test #1.
MOV #160020,R2
TST (R2)+
>>> Trap to 004 <<< ; R2/160022
CLR (R2)+
>>> Trap to 004 <<< ; R2/160024
CMP R0,(R2)+
>>> Trap to 004 <<< ; R2/160026
MOV R0,(R2)+
>>> Trap to 004 <<< ; R2/160030
TST -(R2)
>>> Trap to 004 <<< ; R2/160026
CLR -(R2)
>>> Trap to 004 <<< ; R2/160024
CMP R0,-(R2)
>>> Trap to 004 <<< ; R2/160022
MOV R0,-(R2)
>>> Trap to 004 <<< ; R2/160020
Program completed.
.
На 11/83 также. Согласно списка различий регистры не меняются только для 11/44, 11/04 и 11/34 (интересно как на ВМ3 и СМ1420).
Также полезно добавить тест когда PC содержит несуществующий адрес: здесь поведение отличается от обычных регистров: не меняется только для 11/35 и 11/40.
Исключение по low SP в режиме пульта: [http://s020.radikal.ru/i702/1602/38/2bd071d16709t.jpg]
И кстати тест словного обращения к нечетному адресу интересен - в таблице и такое есть.
Новые тесты: T4REG2.SAV и T4REG3.SAV - проверяют адресацию типа @(R2)+ и автоинкремент при словном обращении к нечётным адресам.
Код:.RU D10:T4REG3
Register Autoincrement TRAP4 test #3.
MOV #311,R2
TST (R2)+
>>> Trap to 004 <<< ; R2/000313
CLR (R2)+
>>> Trap to 004 <<< ; R2/000315
CMP R0,(R2)+
>>> Trap to 004 <<< ; R2/000317
MOV R0,(R2)+
>>> Trap to 004 <<< ; R2/000321
TST -(R2)
>>> Trap to 004 <<< ; R2/000317
CLR -(R2)
>>> Trap to 004 <<< ; R2/000315
CMP R0,-(R2)
>>> Trap to 004 <<< ; R2/000313
MOV R0,-(R2)
>>> Trap to 004 <<< ; R2/000311
Program completed.
.
.
Новый тест: T4PC.SAV - проверяет, как влияют нечётное значение и зависание на выполнение автоинкремента PC. Запускать можно на любых машинах.
Результат запуска на эмулируемой ДВК-2 такой :
Код:.RU T4PC
PC Autoincrement TRAP4 test.
001112/ INC PC
001114/
JMP @#160000
>>> Trap to 004 <<< ; PC/160002
157776/ TST (PC)+
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,(PC)+
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,@(PC)+
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,240(PC)
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,@240(PC)
>>> Trap to 004 <<< ; PC/160002
Program completed.
.
- - - Добавлено - - -Код:.RU T4PC
PC Autoincrement TRAP4 test.
001112/ INC PC
001114/
>>> Trap to 004 <<< ; PC/001115
JMP @#160000
>>> Trap to 004 <<< ; PC/160000
157776/ TST (PC)+
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,(PC)+
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,@(PC)+
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,240(PC)
>>> Trap to 004 <<< ; PC/160002
157776/ MOV R0,@240(PC)
>>> Trap to 004 <<< ; PC/160002
Program completed.
.
Еще тест на тему PC - в сущности уже проверено предыдущим:
- - - Добавлено - - -Код:001036 TST @#160000 ;PC=001042
001134 MOV #160000,PC ;PC=160000
Хм... Это как? :)Цитата:
Сообщение от T4PC
На ВМ3:
Вложение 55840 Вложение 55841
А вот на ВМ3 - тест tipc.sav весьма актуален.
tipc сейчас проверим, а T4* на Э60 (M2) проверить не удалось - на имеющейся машине памяти 14KW, а тесты обращаются к памяти выше... Тамже:- - - Добавлено - - -Код:TIPC
001036 TST @#160000 ;PC=001042
001134 MOV #160000,PC ;PC=160002
Позже соберусь с силами еще сделаю тест при обращении в память без доступа.
- - - Добавлено - - -
Еще ВМ3... TIPC: 1042, 160000
Вложение 55843
Если ещё актуально, то вот:
На ВМ3
Код:.T4REG
Register Autoincrement TRAP4 test #1.
MOV #160020,R2
TST (R2)+
>>> Trap to 004 <<< ; R2/160020
CLR (R2)+
>>> Trap to 004 <<< ; R2/160020
CMP R0,(R2)+
>>> Trap to 004 <<< ; R2/160020
MOV R0,(R2)+
>>> Trap to 004 <<< ; R2/160020
TST -(R2)
>>> Trap to 004 <<< ; R2/160016
CLR -(R2)
>>> Trap to 004 <<< ; R2/160014
CMP R0,-(R2)
>>> Trap to 004 <<< ; R2/160012
MOV R0,-(R2)
>>> Trap to 004 <<< ; R2/160010
Program completed.
.T4REG2
Register Autoincrement TRAP4 test #2.
MOV #160020,R2
TST @(R2)+
>>> Trap to 004 <<< ; R2/160020
CLR @(R2)+
>>> Trap to 004 <<< ; R2/160020
CMP R0,@(R2)+
>>> Trap to 004 <<< ; R2/160020
MOV R0,@(R2)+
>>> Trap to 004 <<< ; R2/160020
TST @-(R2)
>>> Trap to 004 <<< ; R2/160016
CLR @-(R2)
>>> Trap to 004 <<< ; R2/160014
CMP R0,@-(R2)
>>> Trap to 004 <<< ; R2/160012
MOV R0,@-(R2)
>>> Trap to 004 <<< ; R2/160010
Program completed.
.T4REG3
Register Autoincrement TRAP4 test #3.
MOV #311,R2
TST (R2)+
>>> Trap to 004 <<< ; R2/000311
CLR (R2)+
>>> Trap to 004 <<< ; R2/000311
CMP R0,(R2)+
>>> Trap to 004 <<< ; R2/000311
MOV R0,(R2)+
>>> Trap to 004 <<< ; R2/000311
TST -(R2)
>>> Trap to 004 <<< ; R2/000307
CLR -(R2)
>>> Trap to 004 <<< ; R2/000305
CMP R0,-(R2)
>>> Trap to 004 <<< ; R2/000303
MOV R0,-(R2)
>>> Trap to 004 <<< ; R2/000301
Program completed.
.T4PC
PC Autoincrement TRAP4 test.
001112/ INC PC
001114/
>>> Trap to 004 <<< ; PC/001115
JMP @#160000
>>> Trap to 004 <<< ; PC/160000
157776/ TST (PC)+
>>> Trap to 004 <<< ; PC/160000
157776/ MOV R0,(PC)+
>>> Trap to 004 <<< ; PC/160000
157776/ MOV R0,@(PC)+
>>> Trap to 004 <<< ; PC/160000
157776/ MOV R0,240(PC)
>>> Trap to 004 <<< ; PC/160000
157776/ MOV R0,@240(PC)
>>> Trap to 004 <<< ; PC/160000
Program completed.
.TIPC
001036 TST @#160000 ;PC=001042
001134 MOV #160000,PC ;PC=160000
Кстати еще тест для СМ1420 и ВМ3.
- - - Добавлено - - -Код:.RU MFPS
UISDR7=077406, PSW=140016, MFPS R0, R0=000016
UISDR7=077400, PSW=140016, MFPS R0, R0=000016
.
И вот такой тест еще интересно прогнать на ВМ3 и СМ1420...Код:.RU MVPS
;PSW=170000, @#177776=123456
MFPS R1 ;R1=000000
MTPS #17 ;PSW=170017, @#177776=123456
.
.
Новый тест: YT4A.SAV - проверяет YELLOW STACK TRAP для команд CMP -(SP),-(SP) и CMP @-(SP),@-(SP).
Запускать можно на любых машинах. На эмулируемой ДВК-2 результат такой :
Код:.RU YT4A
Yellow Stack Trap test #1
SP/000400
CMP -(SP),-(SP)
SP/000374
SP/000400
CMP @-(SP),@-(SP)
SP/000374
Program completed.
.
На некоторых (11/70) ограничение стека настраивается регистром 17777774.
- - - Добавлено - - -Код:.VDT
VDT V05.07
*177766/000130 0
*/000000 ^C
.RU YT4A
Yellow Stack Trap test #1
SP/000400
CMP -(SP),-(SP)
>>> Trap to 004 <<<
SP/000374
SP/000400
CMP @-(SP),@-(SP)
>>> Trap to 004 <<<
SP/000374
Program completed.
.VDT
VDT V05.07
*177766/000010
По идее результат однозначен - на то он и yellow, чтобы команда сама по себе отработала. Вот ежели в стек уже ничего положить нельзя - тогда где суппортится будет RSA (SP=4, 1777766 |= 4, trap to 4)
.
Не так давно мы удивлялись, почему в HALT-моде команда MFPI SP пишет в стек не USP, а KSP.
Но чему удивляться, если регистр SP предыдущей моды задаётся битом 13 в PSW, а при входе в HALT-моду этот бит обнуляется.
Новый вариант теста при входе в пульт корректно устанавливает предыдущую моду в PSW :
- - - Добавлено - - -Код:.ASect
. = 0
Jmp @#Next // Точка входа пульта.
. = 24
.Word Start // Адрес старта.
.Word 340
Start:
Mov #140340, @#177776 // Установить USER-моду
Mov #4444, SP // Стек USER-моды
Mov #340, @#177776 // Установить KERNEL-моду
Mov #2222, SP // Стек KERNEL-моды
HALT // Установить HALT-моду
Wait
Next:
MFPI SP // Запись KSP в стек
Mov #30340, @#177776 // Установить PrevMode=USER
MFPI SP // Запись USP в стек
Nop
Wait
Новый тест: MFPI.SAV - проверяет работу команды MFPI SP в режиме MMU16 для всех комбинаций текущей и предыдущей моды.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 результат такой :
Код:.RU MFPI
MFPI SP command test.
MOV #140340,@#177776
MOV #44444, SP
MOV #000340,@#177776
MOV #22222, SP
MFPI SP
022220/022222
MOV #030340,@#177776
MFPI SP
022216/044444
MOV #140340,@#177776
MFPI SP
022214/000000
044442/022216
MOV #170340,@#177776
MFPI SP
022212/000000
044440/044442
Program completed.
.
- - - Добавлено - - -Код:.RU MFPI
MFPI SP command test.
MOV #140340,@#177776
MOV #44444, SP
MOV #000340,@#177776
MOV #22222, SP
MFPI SP
022220/022222
MOV #030340,@#177776
MFPI SP
022216/044444
MOV #140340,@#177776
MFPI SP
022214/000000
044442/022216
MOV #170340,@#177776
MFPI SP
022212/000000
044440/044442
Program completed.
.
Инетерсно все варианты битов перебрать как в CM так и в PM на ВМ3 - какая реакция будет.
Когда уже первая бета будет? :)
- - - Добавлено - - -
На ВМ3:Интересный результат получился. То есть получается, что бит C устанавливается в PSW всегда по MTPS, а потом команда уже выполняет байтовую запись по виртуальному 177776. Ну и читает опять таки с виртуального адреса (в данном случае 160000 отмаплен в физические 40000 для усер моды).Код:.RU MVPS
;PSW=170000, @#177776=123456
MFPS R1 ;R1=000056
MTPS #17 ;PSW=170001, @#177776=123417
.
.
Новый тест: PSW1.SAV - проверяет байтовую запись в PSW по адресу 177776.
Запускать на машинах с диспетчером памяти.
- - - Добавлено - - -Код:.RU PSW1
PSW test #1
MOV #177777,@#177776
177776/001346
MOV #177777,@#177776
CLRB @#177776
177776/177400
MOV #177777,@#177776
MOVB #000000,@#177777
177776/000350
Program completed.
.
Честно говоря навскидку даже не скажу что получится из этого :)Код:Mov #177777, (R5)
ClrB (R5)
Mov (R5), $PSW
Вот что я имею в виду:- - - Добавлено - - -Код:.TY TEST.MAC
.TITLE TEST
.MCALL .EXIT,.PRINT
START:: MOV #-2,R5
MOV R5,ARGS
MOV #-1,@R5
MOV R5,ARGS+2
CLR @#-2
MOV #BUFF,R0
MOV #FMTS,R1
MOV #ARGS,R2
CALL $EDMSG
.PRINT #BUFF
.EXIT
ARGS: .BLKW 2
BUFF: .BLKW 40.
FMTS: .ASCII /MOV #177776,R5 ;R5=%P%N/
.ASCIZ /MOV #177777,(R5) ;R5=%P/
.END START
.RU TEST
MOV #177776,R5 ;R5=177776
MOV #177777,(R5) ;R5=000004
.
На 11/83. Выше показал что в этом тесте вызывает сомнения :)
- - - Добавлено - - -
На ВМ3 такого не будет.
Надежнее просто не трогать 11 бит.Код:.RU PSW1
PSW test #1
MOV #177777,@#177776
177776/174757
MOV #177777,@#177776
CLRB @#177776
177776/174400
MOV #177777,@#177776
MOVB #000000,@#177777
177776/000357
Program completed.
.
Тесты на ВМ3.
Код:.MFPS
UISDR7=077506, PSW=140016, MFPS R0, R0=000016
UISDR7=077400, PSW=140016, MFPS R0, R0=000016, MMU FAULT
.MVPS
;PSW=170000, @#177776=123456
MFPS R1 ;R1=000056
MTPS #17 ;PSW=170001, @#177776=123417
.YT4A
Yellow Stack Trap test #1
SP/000400
CMP -(SP),-(SP)
>>> Trap to 004 <<<
SP/000374
SP/000400
CMP @-(SP),@-(SP)
>>> Trap to 004 <<<
SP/000374
Program completed.
.MFPI
MFPI SP command test.
MOV #140340,@#177776
MOV #44444, SP
MOV #000340,@#177776
MOV #22222, SP
MFPI SP
022220/022222
MOV #030340,@#177776
MFPI SP
022216/044444
MOV #140340,@#177776
MFPI SP
022214/000000
044442/022216
MOV #170340,@#177776
MFPI SP
022212/000000
044440/044442
Program completed.
.PSW1
PSW test #1
MOV #177777,@#177776
177776/170357
MOV #177777,@#177776
CLRB @#177776
177776/170000
MOV #177777,@#177776
MOVB #000000,@#177777
177776/000345
Program completed.
.
Новый тест: PSW2.SAV - проверяет момент изменения PSW в командах с приёмником @#177776.
Запускать на машинах с диспетчером памяти. На эмулируемой ДВК-3 результат такой :
Код:.RU PSW2
PSW test #2
CLR @#177776
INC @#177776
177776/000001
ROL @#177776
177776/000003
CLR @#177776
BIS #140000, @#177776
177776/140000
CLR @#177776
BISB #000300, @#177777
177776/140010
CLR @#177776
MOV #000000, @#160000
>>> Trap to 004 <<<
177776/000004
Program completed.
.
Код:.RU PSW2
PSW test #2
CLR @#177776
INC @#177776
177776/000001
ROL @#177776
177776/000003
CLR @#177776
BIS #140000, @#177776
177776/140000
CLR @#177776
BISB #000300, @#177777
177776/140000
CLR @#177776
MOV #000000, @#160000
>>> Trap to 004 <<<
177776/000004
Program completed.
.
Похоже, что хотя MOVB на 11/83 использует цикл DATOB и поэтому при обращении к старшему байту PSW не затирает изменения признаков в младшем байте PSW - модифицирующие байтовые команды ( типа BISB ) используют цикл DATIO и поэтому признаки в младшем байте PSW копируются из "прошлой версии" содержимого PSW.
Скрытый текст
Код:.TY TEST.MAC
.TITLE TEST
.MCALL .EXIT,.PRINT
.ASECT
.=14
.WORD BESST,0
.PSECT
START:: MOV #ARGS,R2
MOV #30000,@#-2
BPT
BISB #1,@#-2
BPT
MOV @#-2,(R2)+
BPT
MOV #BUFF,R0
MOV #FMTS,R1
MOV #ARGS,R2
CALL $EDMSG
.PRINT #BUFF
.EXIT
BESST:: MOV 2(SP),(R2)+
RTI
ARGS: .BLKW 4
BUFF: .BLKW 40
FMTS: .ASCII /MOV #030000,@#177776 ;PSW=%P%N/
.ASCII /BISB #1,@#177776 ;PSW=%P%N/
.ASCIZ /MOV @#177776,ARGS+4 ;PSW=%P:%P/
.END START
[свернуть]Код:.RU TEST
MOV #030000,@#177776 ;PSW=030000
BISB #1,@#177776 ;PSW=030001
MOV @#177776,ARGS+4 ;PSW=030001:030001
.
Точно. При операции BISB с младшим байтом - в старшем байте PSW ничего "по волшебству" не меняется, поэтому цикл DATIO не портит PSW, но при операции BISB со старшим байтом PSW - установившиеся по итогам операции признаки в младшем байте PSW затираются в фазе записи цикла DATIO.
Интересует - есть ли разница в поведении MOVB и BISB при модификации старшего байта PSW.
Если MOVB использует DATOB - свежие признаки в младшем байте PSW должны "выжить", в то время как команда BISB #xxx,@#177777 - затирает свежие признаки в PSW старыми ( которые были в младшем байте PSW в фазе чтения цикла DATIO ).
Для проверки - можно выполнить на 11/83 что-то типа такого:
Вариант с MOVB :
Код:Clr @#177776
MovB #300, @#177777
Mov @#177776, $PSW
Clr @#177776
То же самое с BISB :
Код:Clr @#177776
BiSB #300, @#177777
Mov @#177776, $PSW
Clr @#177776