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)

form 16th February 2012 11:19

Quote:

Originally Posted by Patron (Post 467731)
"Внеочередное" прерывание произойдёт, если выполнить последовательность команд:
Code:

BiC  #100, @#177564
BiS  #100, @#177564

Ни одна из этих команд не пишет в 177566.

Читай внимательнее. Я не говорил что для возникновения прерывания нужна запись в 177566. Я говорил, что после того как прерывание возникло, _следующего_ не возникает пока не будет записи в 177566. И это проверено.

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

А, sorry, это я невнимательно прочитал :)
Если запретить, а потом снова разрешить - этого понятно хватит.

Просто где-то утверждалось что как прерывание разрешено, так оно и будет возникать само собой до бесконечности. Оказалось нет.

Кстати вместо

Code:

BiC  #100, @#177564
проще делать

Code:

CLR  @#177564
за одним исключением это даст тот же эффект, но вероятность потребности в исключении маловероятна :)

Patron 16th February 2012 12:26

Quote:

Originally Posted by form (Post 467733)
Если запретить, а потом снова разрешить - этого понятно хватит. Просто где-то утверждалось что как прерывание разрешено, так оно и будет возникать само собой до бесконечности.

Вряд ли кто-то стал бы утверждать столь странные вещи :)

Утверждалось, что порты УКНЦ (в отличие от "нормальных") никак не реагируют на "передёргивание" бита 0100, даже если бит 0200 установлен в 1, при условии, что одно прерывание "по этому поводу" уже было.

form 16th February 2012 12:28

Quote:

Originally Posted by Patron (Post 467760)
Вряд ли кто-то стал бы утверждать столь странные вещи :)

Утверждалось, что порты УКНЦ (в отличие от "нормальных") никак не реагируют на "передёргивание" бита 0100, даже если бит 0200 установлен в 1, при условии, что одно прерывание "по этому поводу" уже было.

Могу ошибиться, но мне почему-то запомнилось, что кто-то говорил про такое.
Впрочем было это давно, искать лень :)

Кстати насчет нормальных - могу проверить вечером влияет или нет.
Хотя если твой CPS так работает - можно считать проверенным - лень было смотреть что там внутри :)

Patron 16th February 2012 12:34

Quote:

Originally Posted by form (Post 467762)
Хотя если твой CPS так работает - можно считать проверенным - лень было смотреть что там внутри

Именно так.

Мало того - так работает вывод на экран в RT-11. Когда в буфере вывода кончаются символы - выполняется команда BIC #100,@#TTPS.

При попадании в буфер вывода каждого (?) нового символа выполняется BIS #100,@#TTPS.

Таким образом управление передаётся на подпрограмму вывода очередного символа в регистр данных терминала единообразно - через прерывание готовности терминала.

form 16th February 2012 13:01

Quote:

Originally Posted by Patron (Post 467764)
Когда в буфере вывода кончаются символы - выполняется команда BIC #100,@#TTPS.

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

Но это никак не относится к описанному так как в данном случае кроме снятия прерываний, RT-11 еще и пишет в @TTPB символ :)

Patron 16th February 2012 13:25

Quote:

Originally Posted by form (Post 467768)
кроме снятия прерываний, RT-11 еще и пишет в @TTPB символ :)

Не пишет.

После записи последнего символа из буфера вывода в TTPB - происходит прерывание TTPINT. Подпрограмма обработки TTPINT видит, что выводить больше нечего и очищает бит разрешения прерываний в TTPS.

После записи нового символа в буфер вывода - подпрограмма обработки EMT устанавливает бит разрешения прерываний в TTPS и происходит новое прерывание TTPINT, хотя в регистр TTPB ( с прошлого прерывания TTPINT ) никаких записей не производилось.

form 16th February 2012 13:38

Quote:

Originally Posted by Patron (Post 467779)
После записи нового символа в буфер вывода - подпрограмма обработки EMT устанавливает бит разрешения прерываний в TTPS

Программа обработки EMT вообще не пишет ничего на экран.
Это делается в подпрограмме обработки прерываний.

Patron 16th February 2012 13:59

Quote:

Originally Posted by form (Post 467785)
Программа обработки EMT вообще не пишет ничего на экран. Это делается в подпрограмме обработки прерываний.

Но подпрограмма обработки прерывания TTPINT (после опустошения буфера вывода) пишет на экран только после второго прерывания TTPINT подряд. Никаких записей в регистр данных терминала между этими двумя прерываниями не происходит.

form 16th February 2012 14:04

Quote:

Originally Posted by Patron (Post 467794)
Но подпрограмма обработки прерывания TTPINT (после опустошения буфера вывода) пишет на экран только после второго прерывания TTPINT подряд. Никаких записей в регистр данных терминала между этими двумя прерываниями не происходит.

Что она пишет после опустошения буфера? :)

---------- Post added at 16:04 ---------- Previous post was at 16:00 ----------

А насчет снятия прерываний через одно прерывание после окончания - подтверждаю.

Patron 16th February 2012 14:11

Quote:

Originally Posted by form (Post 467795)
Что она пишет после опустошения буфера?

Ничего (если буфер вывода пуст). Об том и речь - не пишет. До получения второго прерывания подряд. После первого (если буфер вывода пуст) - очищает разрешение прерываний. После второго - проверяет буфер вывода на наличие байтов и если таковые есть - выводит (иначе - опять очищает разрешение прерываний).


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

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