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 22:17

Quote:

Originally Posted by Alex_K (Post 468495)
На 1801ВМ2 при возврате по RTT и если при возврате устанавливается бит T в PSW, то блок обработки прерываний не запускается, т.е. безусловно выполняется команда нового процесса. Если же при возврате бит T не был установлен, то прерывания не запрещаются.

У 1801ВМ1 всё просто - бит Т запрещает обслуживание IRQ, а команда WAIT на время своего выполнения (которое продолжается, пока на шине есть хоть один запрос IRQ) отменяет этот запрет.

Поскольку во время выполнения единственной команды WAIT обслуживаются ВСЕ "накопившиеся" запросы IRQ - из этого (насколько я понимаю) следует, что приоритет Т-трапа ниже приоритета IRQ.

Часто пишут, что приоритет Т-трапа выше, чем приоритет IRQ, но у 1801ВМ1 это точно не так.

Думаю, что и у ВМ2 - тоже.

form 17th February 2012 22:23

Quote:

Originally Posted by Patron (Post 468551)
Поскольку во время выполнения единственной команды WAIT обслуживаются ВСЕ запросы IRQ - из этого (насколько я понимаю) следует, что приоритет Т-трапа ниже приоритета IRQ.

Приоритет тут неуместен. Это синхронное прерывание, возникающее сразу же при установке T бита по команде RTI без шансов для другого прерывания и без возможности выполнить инструкцию до прерывания по т-биту. RTT дает такой шанс.
Есть правда процы где RTT команды нет, а RTI работает как RTT.

Причем RTI/RTT - единственный способ вызвать прерывание по T-биту.

Patron 17th February 2012 22:34

Quote:

Originally Posted by form (Post 468553)
Приоритет тут неуместен.

Когда обслуживания ждут несколько прерываний - первым обслуживается прерывание с большим приоритетом.

Когда обслуживание IRQ не запрещено - все прерывания IRQ подряд обслуживаются раньше, чем возникает очередной Т-трап.

Т.е. после единственной команды WAIT - при выходе из обработчика первого внешнего прерывания по RTI - в PSW восстанавливается бит Т, но если на шине есть ещё запросы IRQ - Т-трап не происходит, а происходит вход в очередное внешнее прерывание. И только когда на шине не остаётся запросов IRQ - "магический эффект команды WAIT" заканчивается и снова вступает в силу блокировка обслуживания IRQ при установленном бите T в PSW.

form 17th February 2012 22:37

Quote:

Originally Posted by Patron (Post 468562)
Когда обслуживания ждут несколько прерываний - первым обслуживается прерывание с большим приоритетом.

Приоритет уместен для асинхронных прерываний. T-бит - синхронное прерывание вроде BPT, IOT, EMT. Команда WAIT вообще не в тему: если возврат по RTI, то прерывание по T-биту сразу и возникнет, если по RTT - прерывание будет отложено и у другого прерывания есть шанс.

Patron 17th February 2012 22:46

Quote:

Originally Posted by form (Post 468563)
Приоритет уместен для асинхронных прерываний. T-бит - синхронное прерывание вроде BPT, IOT, EMT. Команда WAIT вообще не в тему: если возврат по RTI, то прерывание по T-биту сразу и возникнет, если по RTT - прерывание будет отложено и у другого прерывания есть шанс.

Это утверждение справедливо лишь абстрактно.

Если говорить конкретно про 1801ВМ1 - то всё обстоит совершенно иначе. После возврата из первого после команды WAIT аппаратного прерывания по RTI - никакого Т-трапа не происходит до тех пор, пока на шине есть хотя бы одно необслуженное прерывание.

И только когда все внешние прерывания обслужены - бит Т снова "начинает работать". Т.е. если возврат из последнего обработчика аппаратного прерывания был по RTI - то Т-трап происходит сразу, а если по RTT - то через одну команду.

---------- Post added at 20:46 ---------- Previous post was at 20:45 ----------

Кроме того - бит Т полностью блокирует внешние прерывания, поэтому после RTT - никаких "шансов" у внешних прерываний не возникает.

form 17th February 2012 22:48

Quote:

Originally Posted by Patron (Post 468567)
Это утверждение справедливо лишь абстрактно.

Если говорить конкретно про 1801ВМ1 - то всё обстоит совершенно иначе. После возврата из первого после команды WAIT аппаратного прерывания по RTI - никакого Т-трапа не происходит до тех пор, пока на шине есть хотя бы одно необслуженное прерывание.

И только когда все внешние прерывания обслужены - бит Т снова "начинает работать". Т.е. если возврат из последнего обработчика аппаратного прерывания был по RTI - то Т-трап происходит сразу, а если по RTT - то через одну команду.

---------- Post added at 20:46 ---------- Previous post was at 20:45 ----------

Кроме того - бит Т полностью блокирует внешние прерывания, поэтому после RTT - никаких "шансов" у внешних прерываний не возникает.

Не берусь в отношении ВМ1 судить - я ничему уже не удивлюсь тут, но в отношении всех остальных Т-бит ничего не блокирует. Это простое синхронное прерывание как любая команда прерываний которая не может быть прервана до ее завершения когда уже началась :)

Patron 17th February 2012 22:50

Quote:

Originally Posted by form (Post 468573)
Не берусь в отношении ВМ1 судить - я ничему уже не удивлюсь тут, но в отношении всех остальных Т-бит ничего не блокирует.

Проверить это нетрудно, благо универсальный тест уже мною написан - щас пойду его искать :)

form 17th February 2012 22:51

Quote:

Originally Posted by Patron (Post 468576)
Проверить это нетрудно, благо универсальный тест уже мною написан - щас пойду его искать :)

А я уже проверил :)
Не на ВМ1 правда. BIRQ7 висит на шине (до Т-бита), Т-бит выставился и никакого прерывания по BIRQ7 - лупит одни тбиты :)

Alex_K 17th February 2012 22:55

Quote:

Originally Posted by Patron (Post 468551)
У 1801ВМ1 всё просто - бит Т запрещает обслуживание IRQ, а команда WAIT на время своего выполнения (которое продолжается, пока на шине есть хоть один запрос IRQ) отменяет этот запрет.

Бит T не запрещает обслуживание IRQ, прерывание по T выше по приоритету, чем IRQ, поэтому прерывание по IRQ и не возникнет. А команда WAIT при своем выполнении маскирует прерывание по T-разряду и ожидает любого внешнего незамаскированного прерывания (ACLO, EVNT, VIRQ). Если на 1801ВМ2 запретить все внешние прерывания установкой битов 8 и 7 в PSW и дать команду WAIT, то процессор будет долго и упорно ждать прерывания, а т.к. они все замаскированы, то и ждать он их будет вечно, до тех пор пока его не сбросят сигналом DCLO, ну и соответственно не запустят снятием DCLO и ACLO.
Quote:

Originally Posted by Patron (Post 468551)
Поскольку во время выполнения единственной команды WAIT обслуживаются ВСЕ "накопившиеся" запросы IRQ - из этого (насколько я понимаю) следует, что приоритет Т-трапа ниже приоритета IRQ.
Часто пишут, что приоритет Т-трапа выше, чем приоритет IRQ, но у 1801ВМ1 это точно не так.

Нет не следует, просто во время выполнения WAIT прерывание по T-разряду маскируется. Но об этом я написал выше.
Quote:

Originally Posted by Patron (Post 468551)
Думаю, что и у ВМ2 - тоже.

Неправильно думаете. Надо иметь реальный процессор и проверять на нем.

form 17th February 2012 23:13

Проведенный тест:

Code:

START:  MOV    #10$,@#14
        MOV    #340,@#16
        BPT

10$:    RESET
        MOV    #PIRQ,@#240
        MOV    #340,@#242
        MOV    #TBIT,@#14
        MOV    #340,@#16

        BIS    #100000,@#177772
        MOV    #20,-(SP)
        MOV    #20$,-(SP)
        RTI

20$:    WAIT
        HALT

PIRQ:  MOV    #TPIRQ,R0
        CALL    PRINT
        DEC    #5
        BNE    10$
        CLR    2(SP)
        CLR    @#177772
10$:    RTI

TBIT:  MOV    #TTBIT,R0
        CALL    PRINT
        DEC    #5
        BNE    10$
        CLR    2(SP)
10$:    RTI

PRINT:  TSTB    @#177564
        BPL    .-4
        MOVB    (R0)+,@#177566
        BNE    PRINT
        RETURN

TTBIT:  .ASCIZ  /T-BIT/<15><12>
TPIRQ:  .ASCIZ  /BIRQ7/<15><12>

        .END    START

Результат:

Code:

RTI        RTT        Все RTT
-----        -----        -------
T-BIT        BIRQ7        BIRQ7
T-BIT        T-BIT        BIRQ7
T-BIT        T-BIT        BIRQ7
T-BIT        T-BIT        BIRQ7
T-BIT        T-BIT        BIRQ7
BIRQ7        T-BIT
BIRQ7        BIRQ7
BIRQ7        BIRQ7
BIRQ7        BIRQ7
BIRQ7        BIRQ7

Итого:
  1. Везде RTI: Пока не отработают T-биты у BIRQ7 шансов нет, WAIT будет достигнута только после всех прерываний
  2. Вход по RTT, возвраты из прерываний по RTI: RTT дает шанс BIRQ7, после него верх берет T-BIT
  3. Везде RTT: после отработки всех BIRQ получаем WAIT и T-биты, как и сказал Alex_K, заблокированы


---------- Post added at 01:13 ---------- Previous post was at 01:11 ----------

И ни в одном случае, разумеется, до HALT дела не доходит :)


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

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