╔──────────────────────────────────────────────────────────────╗
│ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒▒▒░▒▒▒▒▒▒░▒▒▒▒▒░│
│▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░▒▒░ ▒▒░ ▒▒│
│▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒▒▒▒░ ▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒░▒▒░▒▒▒▒▒░ ▒▒░ ▒▒│
│▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒▒▒▒░│
│▒▒░ ▒▒░ ▒▒▒▒░ ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░z80│
╚──────────────────────────────────────────────────────────────╝
[ Продолжение ].
(C) WLODEK BLACK
00Ch. СПЕЦИАЛЬНЫЕ КОМАНДЫ.
NOP (No Operation) - команда "нет операции". Холостая команда,
по которой никаких действий не производится. Код команды - 00.
Команда исполняется за 4 такта.Применяется при отладке программ
(особенно чужих); для затяжки времени в программах реального
времени; для "забивания" ставших ненужными команд(яркий пример -
обессмерчивание игр).
HALT (останов) - остановка работы процессора. Выполнив команду
HALT, процессор останавливается. Но от шин не отключается!
О факте исполнения команды останова процессор сообщает другим
устройствам выставлением специального сигнала "HALT" на 18-м вы-
воде своей микросхемы. Сигнал HALT может использоваться другими
устройствами как разрешающий или побуждающий к каким-либо дейс-
твиям, а может и не использоваться вообще. На MSX компьютере
и на "Спектруме" команду HALT можно использовать свободно. Вый-
ти из состояния останова процессор может только по прерыванию
(подробнее о прерываниях - далее) или по сбросу (RESET). Коман-
ду HALT обычно применяют для организации длительных циклов пас-
сивного ожидания, синхронизируемых прерываниями (В MSX и "Спект-
руме" - с частотой кадровой развертки 50 Гц).
00Dh. ПРЕРЫВАНИЯ.
Русское название "прерывание" и его оригинал "interruption"
стопроцентно точно определяют явление, происходящее в микропро-
цессорной системе после того, как на 16-ю лапку процессора при-
ходит короткий импульс нулевого логического уровня, называемый
сигналом запроса прерывания.
Сигнал запроса прерывания обозначается "INT".
Будем считать, что прерывания разрешены (можно запретить про-
цессору реагировать на сигнал INT с помощью специальной команды)
Наличие сигнала INT процессор проверяет после завершения вы-
полнения каждой команды. Обнаружив этот сигнал,процессор вместо
выборки из памяти и исполнения следующей команды переходит на
обслуживание прерывания. Цикл входа в обслуживание прерывания
состоит из следующих этапов:
1. Процессор подтверждает прием запроса на прерывание. У Z80
для этого специального контактного вывода нет, поэтому он форми-
рует сигнал подтверждения прерывания в виде логической комбина-
ции сигналов IORQ=0, RD=1, WR=1, что однозначно расценивается
не как обращение к порту. Дешифровав такую комбинацию сигналов,
устройство, запросившее прерывание, тут же снимает сигнал запро-
са прерывания. Формировать сигнал подтверждения прерываний
(INTA) и плюс обеспечивать очередность обслуживания нескольких
устройств, способных одновременно запросить прерывание, может
специальное устройство - контроллер прерываний. Но мы не будем
вдаваться в подробности - в "Спектруме" и MSX родная микросхема
контроллера приоритета прерываний не используется.
2. Запрещается дальнейший прием запросов на прерывания, впредь
до разрешения с помощью специальной команды в программе.
3. В стек засылается адрес команды, перед которой возникло пре-
рывание.
4. Совершается переход на подпрограмму обслуживания прерываний,
адрес входа в которую может быть задан тремя принципиально раз-
личными способами (3 типа прерываний).
Как можно видеть, прерывание действительно прерывает выполне-
ние программы пользователя, причем совершить это может в любой
момент времени и в любом месте основной программы. Из этого не-
посредственным образом вытекает необходимость обеспечить коррек-
тный возврат из прерываний, так, чтобы основная программа не
ощущала прерываний. Точку (адрес) возврата процессор сам засыла-
ет в стек, а вот о сохранении регистров должен позаботиться про-
граммист. Программисту известно содержание процедуры обслужива-
ния прерываний, он знает, какие регистры использует эта процеду-
ра. Регистры, содержимое которых изменяется при выполнении обс-
луживания прерываний, должны сохраняться в стеке:
Точка входа в обслуживание прерываний:
--> PUSH AF
PUSH HL
PUSH DE
PUSH BC
. . .
< тело процедуры обслуживания прерываний >
. . .
POP BC
POP DE
POP HL
POP AF
EI ; обязательно нужно разрешить прерывания
перед возвратом
RET ; возврат к основной программе
Системная процедура прерываний, находящаяся в ПЗУ, безусловно
корректно сохраняет и восстанавливает данные в регистрах.
Зачем нужны прерывания.
Существует целый ряд событий, происходящих достаточно редко, но
на которые микропроцессорная система должна реагировать немедле-
нно. Также существует необходимость регулярно совершать некото-
рые действия, привязанные к реальному времени. Перечислять те и
другие можно до бесконечности,поэтому здесь мы остановимся лишь
на том, что конкретно делают прерывания в компьютере MSX.
Итак, с частотой 50 Гц:
опрашивается клавиатура - коды введенных символов помещаются в
буфер, фиксируются особые случаи (Ctrl+Stop и т.п.); происходит
отсчет времени таймером;продвигается очередь данных для фоновой
музыки (если очередь была задана);уменьшается счетчик интервала
для Бейсикового оператора "ON INTERVAL GOTO".
В "Спектруме" по прерываниям опрашивается клавиатура и произ-
водится отсчет времени; буфера клавиатурного ввода в "Спектруме"
нет, поэтому фиксируется только код одной, последней нажатой,
клавиши.
О пользе применения механизма прерываний можно судить по сле-
дующему грубоватому жизненному примеру: предположим, вы сидите
за компьютером и набираете текст программы, а на кухне в это
время разогревается чайник. Если чайник не имеет свистка, вы вы-
нуждены периодически бегать на кухню и проверять, не закипел ли
он (опрос состояния чайника). При наличии свистка вы можете не
беспокоиться - чайник сам подаст сигнал (запрос прерывания по
чайнику). А вот если при этом еще и зазвонит телефон, то вам
придется самим решать, какое событие требует первоочередного ре-
агирования (приоритет прерываний).
[ Продолжение следует ].