Ресурсы УКНЦ/Глава 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. Общая схема вывода на экран

TODO