Ресурсы УКНЦ/Глава 2: различия между версиями
Nzeemin (обсуждение | вклад) Нет описания правки |
Nzeemin (обсуждение | вклад) |
||
Строка 93: | Строка 93: | ||
=== § 5. Общая схема вывода на экран === | === § 5. Общая схема вывода на экран === | ||
==== 5.0 Буфер и его структура ==== | |||
Информация на экран отправляется побайтно. Каждый процессор может иметь доступ к выводу символьной и графической информации на терминал. Для этого у каждого процессора свой путь. | |||
ЦП посылает информацию через К0. ПП отправляет ее через команды EMT. Но в любом случае эти байты записываются в особую область ОЗУ ПП, называемую буфером. Он находится в адресах с 2000 по 2177 (200 байт). | |||
Буфер позволяет не ждать, пока отправленный байт выведется на экран (тем или иным способом), и представляет собой «очередь» байтов, готовых к обработке (выводу). | |||
Переменная в ОЗУ ПП (22544) является указателем на «хвост» этой очереди. То есть она содержит адрес ячейки, куда будет записана очередная поступившая посылка (от ЦП или ПП). | |||
==== 5.1 Запись в буфер из К0 ==== | |||
При записи из ЦП в канал К0 при разрешенном прерывании от приемника в ПП выполняется прерывание с а.в.п. 320. Если прерывания запрещены, тогда есть другой способ считать информацию из К0 в буфер — это команда TRAP 4. Тогда, если посылка действительно была (установлен бит готовности в приемнике), информация считывается в буфер из соответствующего регистра данных. | |||
И п.о.п от К0, и TRAP 4 — это, по сути, одна и та же программа, но с разными точками входа (схема 5.1). | |||
'''''TODO: Схема 5.1''''' | |||
Здесь используется еще несколько переменных. Смысл их в следующем: | |||
'''''TODO: Таблица 5.1''''' | |||
==== 5.2 Запись в буфер из ПП ==== | |||
Буфер может пополняться также из ПП. Для этого могут использоваться три команды: EMT 42, EMT 44 и EMT 46. | |||
EMT 42 записывает в буфер младший байт R0, EMT 44 — строку, адрес которой содержится в слове, следующем за командой, а EMT 46 — строку с адресом в R1. | |||
На схемах 5.2 и 5.3 показано выполнение этих команд. Поскольку EMT — подпрограммы можно вызывать и через CALL, на схеме показаны и адреса дополнительных точек входа. | |||
'''''TODO: Схема 5.2''''' | |||
'''''TODO: Схема 5.3''''' | |||
Если выполнить, к примеру, такой отрывок программы: | |||
<pre> | |||
JSR R5,@#117204 | |||
.WORD A | |||
. | |||
. | |||
A: ASCIZ /*** ЗАЧЕМ ВАМ EMT 44? ***/ | |||
</pre> | |||
то в буфер загрузится строка, начальный адрес которой — A. Это будет несколько быстрее, чем с помощью фрагмента: | |||
<pre> | |||
EMT 44 | |||
.WORD A | |||
. | |||
. | |||
A: ASCIZ /*** ЧТО БЫ ВЫ БЕЗ EMT 44 ДЕЛАЛИ? ***/ | |||
</pre> | |||
поскольку минуется вызов EMT-диспетчера. | |||
Заметим, что с указателем буфера после увеличения выполняется команда &~200, что предотвращает выход его за значение 2177. | |||
==== Резюме к § 5 ==== | |||
* Есть два пути вывода на терминал — из ЦП через К0 и из ПП через EMT 42, 44 и 46. | |||
* Во всех случаях байты, подлежащие выводу, записываются в буфер — область памяти в ОЗУ ПП. Адреса, занимаемые буфером — с 2000 до 2177. | |||
* Буфер подобен очереди. Байты записываются в буфер по адресу, на который указывает переменная-указатель. Адрес ее — 22544. После записи значение указателя увеличивается на 1. | |||
* Из канала К0 байт идет в буфер в двух случаях: | |||
** срабатывает прерывание от приемника К0. | |||
** при вызове TRAP 4. | |||
* Из ОЗУ ПП можно записать в буфер информацию с помощью следующих способов (см. таблицу 5.2): | |||
'''''TODO: Таблица 5.2''''' | |||
Текущая версия от 00:28, 30 сентября 2016
Глава 2. Общие принципы экранного вывода в УКНЦ
§ 4. Программные прерывания EMT И TRAP
4.0 Команды-прерывания
Среди множества команд микропроцессора 1801 есть несколько команд, действие которых состоит в следующем: вызывается прерывание по фиксированному адресу (адрес вектора прерываний — а.в.п.). Вот эти команды:
Таблица 4.0. Команды-прерывания
Команда | Код | А. В. П. |
---|---|---|
BPT | 000003 | 14 |
IOT | 000004 | 20 |
EMT | 104xYZ | 30 |
TRAP | 104XYZ | 34 |
Пример 11. Упражнение с командами-прерываниями IOT и EMT.
Команда IOT (Input-Output Trap) вызывает прерывание с адресом 20. В Системе этот а.в.п. никак не используется. Восполним же этот пробел. Работаем в ОЗУ ПП:
20: 000240 240: 104044 EMT 44 163573 "* ЗАГРУЗКА ИЗ СЕТИ *" 000002 RTIТеперь в любую свободную ячейку запишите число 4 (код IOT) и запустите с этого адреса. Ну, а если Вам наскучит играться с этой надписью, в приложении найдите другую, и адрес ее запишите после кода EMT 44. А еще лучше — читайте дальше.
Первые две команды (BPT и IOT) нам неинтересны, хотя при желании и их можно пустить в дело. Две остальные — EMT и TRAP — представляют некоторый интерес.
Старший байт этих команд содержит код команды (по нему процессор опознает их), а младший может быть любым. Такая организация команд позволяет нести в себе полезную информацию. Чтобы реализовать эту информацию, надо к каждому прерыванию подвесить свои программы обработки прерываний, которые называются диспетчерами.
Это название связано с тем, что в зависимости от кода в младшем байте, эти программы передают управление разным подпрограммам, выполняющим каждая свое действие. Это позволяет использовать команды EMT и TRAP как однословные команды вызова подпрограмм.
Рассмотрим реализацию обоих диспетчеров в Системе.
4.1 EMT-диспетчер
По адресу 30 записан вектор прерывания EMT-дипетчера:
30: 174270 32: 0
Первое слово — адрес диспетчера. Второе — слово, которое загружается в слово состояния процессора (PS) при входе в программу обработки прерываний. 0 означает, что разрешены все прерывания во время работы EMT-диспетчера.
Ниже приведена блок-схема EMT-диспетчера с пояснениями:
TODO: Схема 4.0
Из схемы видно, что диспетчер вызывает подпрограмму, адрес которой определяется по следующей формуле:
- Адр = (160000 + XXX), где XXX — младший байт EMT.
Иными словами, с адреса 160000 хранится таблица, в которой содержатся адреса искомых подпрограмм. Разумеется, младший байт EMT должен быть четным, во избежание недоразумений в процессоре.
В адресах ПЗУ с 160000 по 160012 хранятся некоторые вектора прерываний, поэтому используются EMT с младшими байтами, начиная с 14. Полезных подпрограмм, вызываемых EMT-диспетчером, всего 10. Перечень их приведен в приложении. Остальные подпрограммы состоят из одной команды — RETURN.
4.2 TRAP-диспетчер
Вектор TRAP-диспетчера записан по адресу 34:
34: 174344 36: 200
Второе слово говорит о том, что во время работы TRAP-диспетчера будут запрещены прерывания от сетевого и программируемого таймеров, от клавиатуры, от команды RESET в ЦП, от прерываний каналов.
Блок-схема TRAP-диспетчера выглядит так:
TODO: Схема 4.1
Адрес подпрограммы вычисляется так:
- Адр = (160160 + XXX), где XXX — младший байт TRAP.
То есть адреса подпрограмм хранятся с адреса 160160. Этих подпрограмм всего 3, то есть имеют смысл лишь три команды TRAP:
- TRAP 0,
- TRAP 2,
- TRAP 4.
Отличие их от EMT-подпрограмм в том, заканчиваться они должны на RTI, а не на RETURN.
Резюме к § 4
- Две команды — EMT и TRAP — вызывают прерывания с а.в.п. 30 34 соответственно.
- Младший байт этих команд может быть произвольным.
- В Системе эти байты анализируются в программах обработки прерываний от этих команд — в диспетчерах.
- Младший байт в EMT и TRAP выполняет роль номера подпрограммы, вызываемой диспетчером. Этот «номер» должен быть четным.
- Адреса подпрограмм, вызываемых через EMT, хранятся с адреса 160014 по 160156. Из них только десять выполняют полезное действие.
- Адреса TRAP-подпрограмм хранятся с адреса 160160. Их всего 3 (TRAP 0,2,4).
- EMT-подпрограммы заканчиваются на RETURN (код 207), а TRAP-подпрограммы — на RTI (код 2).
§ 5. Общая схема вывода на экран
5.0 Буфер и его структура
Информация на экран отправляется побайтно. Каждый процессор может иметь доступ к выводу символьной и графической информации на терминал. Для этого у каждого процессора свой путь.
ЦП посылает информацию через К0. ПП отправляет ее через команды EMT. Но в любом случае эти байты записываются в особую область ОЗУ ПП, называемую буфером. Он находится в адресах с 2000 по 2177 (200 байт).
Буфер позволяет не ждать, пока отправленный байт выведется на экран (тем или иным способом), и представляет собой «очередь» байтов, готовых к обработке (выводу).
Переменная в ОЗУ ПП (22544) является указателем на «хвост» этой очереди. То есть она содержит адрес ячейки, куда будет записана очередная поступившая посылка (от ЦП или ПП).
5.1 Запись в буфер из К0
При записи из ЦП в канал К0 при разрешенном прерывании от приемника в ПП выполняется прерывание с а.в.п. 320. Если прерывания запрещены, тогда есть другой способ считать информацию из К0 в буфер — это команда TRAP 4. Тогда, если посылка действительно была (установлен бит готовности в приемнике), информация считывается в буфер из соответствующего регистра данных.
И п.о.п от К0, и TRAP 4 — это, по сути, одна и та же программа, но с разными точками входа (схема 5.1).
TODO: Схема 5.1
Здесь используется еще несколько переменных. Смысл их в следующем:
TODO: Таблица 5.1
5.2 Запись в буфер из ПП
Буфер может пополняться также из ПП. Для этого могут использоваться три команды: EMT 42, EMT 44 и EMT 46.
EMT 42 записывает в буфер младший байт R0, EMT 44 — строку, адрес которой содержится в слове, следующем за командой, а EMT 46 — строку с адресом в R1.
На схемах 5.2 и 5.3 показано выполнение этих команд. Поскольку EMT — подпрограммы можно вызывать и через CALL, на схеме показаны и адреса дополнительных точек входа.
TODO: Схема 5.2
TODO: Схема 5.3
Если выполнить, к примеру, такой отрывок программы:
JSR R5,@#117204 .WORD A . . A: ASCIZ /*** ЗАЧЕМ ВАМ EMT 44? ***/
то в буфер загрузится строка, начальный адрес которой — A. Это будет несколько быстрее, чем с помощью фрагмента:
EMT 44 .WORD A . . A: ASCIZ /*** ЧТО БЫ ВЫ БЕЗ EMT 44 ДЕЛАЛИ? ***/
поскольку минуется вызов EMT-диспетчера.
Заметим, что с указателем буфера после увеличения выполняется команда &~200, что предотвращает выход его за значение 2177.
Резюме к § 5
- Есть два пути вывода на терминал — из ЦП через К0 и из ПП через EMT 42, 44 и 46.
- Во всех случаях байты, подлежащие выводу, записываются в буфер — область памяти в ОЗУ ПП. Адреса, занимаемые буфером — с 2000 до 2177.
- Буфер подобен очереди. Байты записываются в буфер по адресу, на который указывает переменная-указатель. Адрес ее — 22544. После записи значение указателя увеличивается на 1.
- Из канала К0 байт идет в буфер в двух случаях:
- срабатывает прерывание от приемника К0.
- при вызове TRAP 4.
- Из ОЗУ ПП можно записать в буфер информацию с помощью следующих способов (см. таблицу 5.2):
TODO: Таблица 5.2
TODO