Ресурсы УКНЦ/Глава 2

Материал из Emuverse

Глава 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