Ресурсы УКНЦ/Глава 2: различия между версиями
Panther (обсуждение | вклад) (Категория:УКНЦ) |
Nzeemin (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
=== | === § 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) нам неинтересны, хотя при желании и их можно пустить в дело. Две | Первые две команды (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