Без долгих вступлений - протестируем влияние бита T в PSW на обслуживание запросов IRQ от таймера и порта терминала.
В приложении - дополненный вариант теста PDP-11 Interrupts Test #1c
Без долгих вступлений - протестируем влияние бита T в PSW на обслуживание запросов IRQ от таймера и порта терминала.
В приложении - дополненный вариант теста PDP-11 Interrupts Test #1c
В кернел пока не перключается, соответственно MTPS не работает итд.
Из под FB:
Код:.RU PDPT1C
PDP-11 Interrupts Test #1c
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTI | NOP | WAIT | NOP | NOP | NOP
>>> Trap to 014 <<< ; 001234
>>> Interrupt <<< 100 ; 001234
>>> Trap to 014 <<< ; 001234
>>> Trap to 014 <<< ; 001234
>>> Interrupt <<< 060 ; 001234
>>> Interrupt <<< 064 ; 001234
NOP
NOP
NOP
NOP
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTT | NOP | WAIT | NOP | NOP | NOP
>>> Interrupt <<< 100 ; 001432
>>> Trap to 014 <<< ; 001432
>>> Trap to 014 <<< ; 001432
>>> Trap to 014 <<< ; 001432
>>> Interrupt <<< 060 ; 001432
>>> Interrupt <<< 064 ; 001432
NOP
NOP
NOP
NOP
MTPS #340
BIS #100,@#TTPS
...Press Key...
Set T x3
RTT | NOP | NOP | NOP | NOP | NOP
>>> Interrupt <<< 100 ; 001630
>>> Trap to 014 <<< ; 001630
>>> Trap to 014 <<< ; 001630
>>> Trap to 014 <<< ; 001630
>>> Interrupt <<< 060 ; 001630
>>> Interrupt <<< 064 ; 001630
NOP
NOP
NOP
NOP
NOP
Program completed.
.
---------- Post added at 17:01 ---------- Previous post was at 16:59 ----------
Кстати в доке по KDJ11B про T-бит написано просто NM (non maskable) и перечислен в списке с остальными прерываниями. Для EMT/BPT итд статус просто не пишется.
Странно, как это после RTT в обработчике Т-трапа не выполняются никакие команды (и все прерывания возникают "на одном месте")..
Ну вот и тест на реальном УКНЦ.
А вот и нет!
Как же тогда в этом куске:
три Т-трапа происходят НА ОДНОМ МЕСТЕ и ни одна из команд программы не выполняется, хотя обработчики Т-трапа заканчиваются командой RTT.Код:MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTT | NOP | WAIT | NOP | NOP | NOP
>>> Interrupt <<< 100 ; 001432
>>> Trap to 014 <<< ; 001432
>>> Trap to 014 <<< ; 001432
>>> Trap to 014 <<< ; 001432
>>> Interrupt <<< 060 ; 001432
>>> Interrupt <<< 064 ; 001432
NOP
NOP
NOP
NOP
...
Вот это мне гораздо больше нравится!
Очевидно, что у formа "нереальный УКНЦ" :)))
Кстати, весьма похоже, что на 1801ВМ2 бит Т просто вводит дополнительную блокировку прерываний, которую нейтрализует команда WAIT, ожидающая и обслуживающая одно прерывание.
Ну положим я все еще не уверен в правильности теста :)
Свой же тест я приводил и результат в нем был однозначный - RTT дает шанс прерыванию и никаких гвоздей.
К примеру я не сильтно уверен в результатах прерывания по 64 так как мы одновременно трогаем устройство которое его должно дать.
Бит T блокирует прерывания просто в силу своего приоритета. Блок прерываний в 1801ВМ2 при своей работе просматривает все незамаскированные прерывания на данный момент и выбирает самое приоритетное. У T-бита приоритет равен 3, у таймера (EVNT) - 6, VIRQ - 7.
А команда WAIT блокирует прерывание по T-разряду, поэтому и выполняется прерывание по таймеру.
И еще в тесте хорошо видна особенность 1801ВМ2 (а может и не только его), когда происходит возврат по RTT без установки бита T, то блок прерываний не запрещается на один шаг. Это видно на последних шагах, когда сохраненный в стеке счетчик команд оказывается одним и тем же.
Именно поэтому так важен результат теста на реальной УКНЦ. Ведь там запускался тот же самый код, а результаты гораздо более логичные - после каждой команды RTT гарантированно выполняется одна команда программы.
Возможно, как-то влияют прерывания от таймера. Дело в том, что во время работы программы они случаются примерно по одному на каждую строчку вывода на экран.
Если наша попытка перехвата V100 была как-то пресечена операционкой и перед нашим обработчиком V100 или после него выполняется код операционки - тогда это может как-то влиять.
Есть возможность запустить этот тест с гарантированно выключенным таймером?
Не забываем только, что на УКНЦ есть только один IRQ, а у меня их 4 :)
---------- Post added at 17:36 ---------- Previous post was at 17:36 ----------
Сейчас отключим.
---------- Post added at 17:38 ---------- Previous post was at 17:36 ----------
Код:.GET PDPT1C
.E 40
001000
.D 10000=5037,177546,137,1000
.ST 10000
PDP-11 Interrupts Test #1c
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTI | NOP | WAIT | NOP | NOP | NOP
>>> Trap to 014 <<< ; 001234
>>> Interrupt <<< 060 ; 001234
>>> Trap to 014 <<< ; 001234
>>> Interrupt <<< 064 ; 001234
>>> Trap to 014 <<< ; 001234
NOP
(зависон - WAIT видимо, клавишу тык)
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTT | NOP | WAIT | NOP | NOP | NOP
>>> Interrupt <<< 060 ; 001432
>>> Trap to 014 <<< ; 001432
>>> Interrupt <<< 064 ; 001432
>>> Trap to 014 <<< ; 001432
NOP
>>> Trap to 014 <<< ; 001434
(зависон - WAIT видимо, клавишу тык)
NOP
>>> Trap to 014 <<< ; 001434
NOP
NOP
NOP
MTPS #340
BIS #100,@#TTPS
...Press Key...
Set T x3
RTT | NOP | NOP | NOP | NOP | NOP
>>> Interrupt <<< 060 ; 001630
>>> Trap to 014 <<< ; 001630
>>> Interrupt <<< 064 ; 001630
>>> Trap to 014 <<< ; 001630
NOP
>>> Trap to 014 <<< ; 001632
NOP
NOP
NOP
NOP
Program completed.
.