Ресурсы УКНЦ/Глава 2: различия между версиями

Материал из Emuverse
(Категория:УКНЦ)
Нет описания правки
Строка 3: Строка 3:




=== §4. Программные прерывания EMT И TRAP ===
=== § 4. Программные прерывания EMT И TRAP ===


==== 4.0 Команды-прерывания ====
==== 4.0 Команды-прерывания ====


Среди множества команд микропроцессора 1801 есть несколько команд, действие которых состоит в следующем: вызывается прерывание по фиксированному адресу (адрес вектора прерываний — а.в.п.). Вот эти команды:
Среди множества команд микропроцессора 1801 есть несколько команд, действие которых состоит в следующем: вызывается прерывание по фиксированному адресу (адрес вектора прерываний — а.в.п.). Вот эти команды:


'''Таблица 4.0. Команды-прерывания'''
'''Таблица 4.0. Команды-прерывания'''
{| border="1" cellpadding="2" cellspacing="0" align="center"
{| border="1" cellpadding="2" cellspacing="0" align="center"
! Команда !! Код !! А.В.П.
! Команда !! Код !! А. В. П.
|-
|-
|align="center"| '''BPT''' || 000003 || 14
|align="center"| '''BPT''' || 000003 || 14
Строка 23: Строка 23:


<blockquote>
<blockquote>
===== Пример 11. Упражнение с командами-прерываниями IOT и EMT. =====
===== Пример 11. Упражнение с командами-прерываниями IOT и EMT. =====
Команда IOT (Input-Output Trap) вызывает прерывание с адресом 20. В Системе этот а.в.п. никак не используется. Восполним же этот пробел. Работаем в ОЗУ ПП:
Команда IOT (Input-Output Trap) вызывает прерывание с адресом 20. В Системе этот а.в.п. никак не используется. Восполним же этот пробел. Работаем в ОЗУ ПП:
Строка 31: Строка 32:
163573 "* ЗАГРУЗКА ИЗ СЕТИ *"
163573 "* ЗАГРУЗКА ИЗ СЕТИ *"
000002 RTI</pre>
000002 RTI</pre>
Теперь в любую свободную ячейку запишите число 4 (код IOT) и запустите с этого адреса. Ну, а если Вам наскучит играться с этой надписью, в приложении найдите другую, и адрес ее запишите после кода EMT 44. А еще лучше — читайте дальше.
Теперь в любую свободную ячейку запишите число 4 (код IOT) и запустите с этого адреса. Ну, а если Вам наскучит играться с этой надписью, в приложении найдите другую, и адрес ее запишите после кода EMT 44. А еще лучше — читайте дальше.
</blockquote>
</blockquote>


Первые две команды (BPT и IOT) нам неинтересны, хотя при желании и их можно пустить в дело. Две остальные — EMT и TRAP — представляют некоторый интерес.
Первые две команды (BPT и IOT) нам неинтересны, хотя при желании и их можно пустить в дело. Две остальные — EMT и TRAP — представляют некоторый интерес.


Старший байт этих команд содержит код команды (по нему процессор опознает их), а младший может быть любым. Такая организация команд позволяет нести в себе полезную информацию. Чтобы реализовать эту информацию, надо к каждому прерыванию подвесить свои программы обработки прерываний, которые называются диспетчерами.
Старший байт этих команд содержит код команды (по нему процессор опознает их), а младший может быть любым. Такая организация команд позволяет нести в себе полезную информацию. Чтобы реализовать эту информацию, надо к каждому прерыванию подвесить свои программы обработки прерываний, которые называются диспетчерами.
Строка 43: Строка 44:


==== 4.1 EMT-диспетчер ====
==== 4.1 EMT-диспетчер ====
По адресу 30 записан вектор прерывания EMT-дипетчера:
<pre>
30: 174270
32: 0</pre>
Первое слово — адрес диспетчера. Второе — слово, которое загружается в слово состояния процессора (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:
<pre>
34: 174344
36:    200</pre>
Второе слово говорит о том, что во время работы 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. Общая схема вывода на экран ===





Версия от 00:19, 29 сентября 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. Общая схема вывода на экран

TODO