Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор УКНЦ - EmuStudio (http://zx-pk.ru/showthread.php?t=18027)

Patron 17th February 2012 23:15

1 Attachment(s)
В приложении тест приоритета Т-трапа для PDP-11

На процессоре 1801ВМ1 результаты такие:

Code:

.RU PDPT1
 
PDP-11 Interrupts Test #1
 
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTI | WAIT
>>> Trap to 014 <<<
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<
 
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTT
WAIT
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Trap to 014 <<<
 
MTPS #340
BIS #100,@#TTPS
...Press Key...
Set T x3
RTT
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
 
Program completed.

Легко заметить, что обработчики внешних прерываний после команды WAIT запускаются один за другим, а ведь уже после возврата из обработчика первого внешнего прерывания - команда WAIT осталась "давно в прошлом". Следовательно у 1801ВМ1 приоритет Т-трапа ниже приоритета внешних прерываний.

form 17th February 2012 23:25

Quote:

Originally Posted by Patron (Post 468603)
В приложении тест приоритета Т-трапа для PDP-11

На процессоре 1801ВМ1 результаты такие:

Code:

.RU PDPT1
 
PDP-11 Interrupts Test #1
 
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTI | WAIT
>>> Trap to 014 <<<
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<
 
MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTT
WAIT
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Trap to 014 <<<
 
MTPS #340
BIS #100,@#TTPS
...Press Key...
Set T x3
RTT
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
 
Program completed.

Легко заметить, что обработчики внешних прерываний после команды WAIT запускаются один за другим, а ведь уже после возврата из обработчика первого внешнего прерывания - команда WAIT осталась "давно в прошлом". Следовательно приоритет Т-трапа ниже, чем внешних прерываний.

Теста самого не видно. Без кода - не имеет смысла. Я вон показал разные варианты одним и тем же тестом с разными командами возврата.

---------- Post added at 01:18 ---------- Previous post was at 01:17 ----------

Обратим также внимание, что после возврата командой RTT никакой WAIT не выполнится пока не отработает IRQ.

---------- Post added at 01:19 ---------- Previous post was at 01:18 ----------

А, прогу не сразу заметил. Посмотрю.

---------- Post added at 01:23 ---------- Previous post was at 01:19 ----------

Не, не стану смотреть - там целая операционная система. Просто лень такую портянку читать. Сделай тест попроще где ничего лишнего :)

---------- Post added at 01:25 ---------- Previous post was at 01:23 ----------

Хотя по выводу который ты нарисовал 1:1 результат моих тестов - то есть T-бит синхронен и ни о каком другом прерывании перед ним речи не идет, а если до WAIT дело дошло - он блокирует T-бит.

Patron 17th February 2012 23:27

Quote:

Originally Posted by form (Post 468606)
Не, не стану смотреть - там целая операционная система. Просто лень такую портянку читать. Сделай тест попроще где ничего лишнего :)

Читать и понимать - не обязательно.

Нужно запустить и доложить результаты.

С этим проблемы есть ?

:)

form 17th February 2012 23:28

Quote:

Originally Posted by Patron (Post 468614)
Читать и понимать - не обязательно.

Нужно запустить и доложить результаты.

С этим проблемы есть ?

:)

Могу и запустить, только я как бы уже показал свой тест, а из результатов твоего видно 1:1 то же самое :)

Alex_K 17th February 2012 23:29

Patron, результаты работы Вашего теста в эмуляторе UKNCBTL полностью совпадают с тем, что Вы привели (ну это Вы можете и сами попробовать). Но я писал выше, что приоритет T-разряда выше, чем приоритет VIRQ, так что может что-то в тесте не так.
Да, тест сложно написан, надо вникнуть, что бы разобраться, как он работает.

form 17th February 2012 23:31

Code:

.RU PDPT1

PDP-11 Interrupts Test #1

MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTI | WAIT
>>> Trap to 014 <<<
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<

MTPS #340
...Press Key...
BIS #100,@#TTPS
Set T x3
RTT
WAIT
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Trap to 014 <<<

MTPS #340
BIS #100,@#TTPS
...Press Key...
Set T x3
RTT
>>> Interrupt <<< 100
>>> Interrupt <<< 060
>>> Interrupt <<< 064
>>> Trap to 014 <<<
>>> Trap to 014 <<<
>>> Trap to 014 <<<

Program completed.

.


Patron 17th February 2012 23:38

Quote:

Originally Posted by Alex_K (Post 468619)
Patron, результаты работы Вашего теста в эмуляторе UKNCBTL полностью совпадают с тем, что Вы привели (ну это Вы можете и сами попробовать). Но я писал выше, что приоритет T-разряда выше, чем приоритет VIRQ, так что может что-то в тесте не так.
Да, тест сложно написан, надо вникнуть, что бы разобраться, как он работает.

На самом деле там всё просто - чуть позже подробно объясню что там к чему.

Гдавный же вопрос в другом - как могут обработчики прерываний один за другим запускаться перед Т-трапом, если установлен бит Т ( а с момента выполнения команды WAIT прошло уже несколько десятков команд предыдущих обработчиков прерываний ) если приоритет обслуживаемых прерываний ниже приоритета Т-трапа..

---------- Post added at 21:38 ---------- Previous post was at 21:34 ----------

Quote:

Originally Posted by form (Post 468621)
[CODE]

А вот в этом случае - похоже, что RTT действительно "даёт прерываниям шанс". Причём, если перед Т-Трапом "успело пролезть" хотя бы одно прерывание - они Т-трап уже вперёд не пропускают ( похоже что как раз по причине своего более высокого приоритета ).

form 17th February 2012 23:40

Quote:

Originally Posted by Patron (Post 468624)
Причём, если перед Т-Трапом "успело пролезть" хотя бы одно прерывание - они Т-трап уже вперёд не пропускают ( похоже что как раз по причине своего более высокого приоритета ).

Оно не может успеть или не успеть. Оно или есть в очереди и тогда возникнет или его нет в очереди и тогда не возникнет :)

Patron 17th February 2012 23:46

Quote:

Originally Posted by form (Post 468628)
Оно не может успеть или не успеть. Оно или есть в очереди и тогда возникнет или его нет в очереди и тогда не возникнет

А вот и нет..

Во всех трёх "заходах" тест начинается с того, что выполняет
Code:

MTPS        #340
BiS        #100, @#TTPS

И требует нажать клавишу (что одновременно гарантирует "накопление" запроса IRQ от таймера).

Таким образом, после выдачи команды RTI/RTT ( очищающей запрет прерываний в PSW ) - у нас каждый раз на шине сидят три запроса IRQ одновременно.

Но в первом случае, когда запрет прерываний в PSW очищается командой RTI - первым происходит Т-трап, а не какое-нибудь из внешних прерываний.

А уже обработчик Т-трапа завершается во всех трёх случаях командой RTT.

Alex_K 17th February 2012 23:49

Да, тест немного кривой. А кривизна его в том, что при прерывании по вектору 100 (таймер), после обработки в программе не осуществляется выход по RTI, а передается управление операционной системе командой JMP @V100. Если уж ОС разрешит прерывания, то там и 60 и 64 вектора проскочат. У меня RT-11 с поддержкой таймера, т.е. поддержка запросов .CMKT и .MRKT. А вот если тест запустить в системе без поддержки (где две команды ADC на обработке прерывания таймера), то и результат может быть другой.


All times are GMT +4. The time now is 02:46.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.