Микропроцессор Z80



Маскируемые прерывания - часть 2


Микропроцессор Z80 не имеет специального выхода подтверждения прерывания. Вместо этого в режиме 0 он выполняет специальный цикл чтения кода операции, выдавая одновременно сигналы M1# (признак чтения первого байта кода команды) и IORQ# (признак обращения в пространство ввода-вывода) вместо сигналов M1# и MREQ# (признак обращения в пространство памяти), используемых при обычной выборке кода операции из памяти. Из сигналов M1# и IORQ# с помощью простейшей схемы можно получить сигнал подтверждения прерывания в стиле микропроцессора 8080, однако вырабатываться он будет только для первого байта кода команды. Таким образом, использовать для перехода к обработчику прерывания инструкции RST 0–7 можно, а инструкцию CALL – нельзя, поскольку она состоит из трёх байтов и требует выдачи трёх сигналов подтверждения прерывания. Однако именно инструкция CALL используется для перехода к обработчику прерывания в большинстве систем на базе микропроцессора 8080, поскольку её код выдаётся контроллером прерываний 8259 фирмы Intel (советский аналог – КР580ВН59). Чтобы добиться совместимости с этим или аналогичным контроллером, приходится применять дополнительные схемы, “отлавливающие” факт подтверждения прерывания по сигналам M1# и IORQ# и выдающие дополнительные сигналы подтверждения прерывания для инструкции CALL.

Режим 1 используется в маленьких вычислительных системах, где достаточно одного-единственного вектора маскируемого прерывания. При поступлении запроса прерывания микропроцессор сохраняет адрес возврата в прерванную программу в стеке и осуществляет переход на адрес 0038h. Таким образом, в этом режиме маскируемые прерывания обрабатываются точно тем же способом, что и немаскируемые. Разница заключается в возможности их маскирования и в адресе обработчика прерываний.

Следует заметить, что подобный режим обслуживания прерываний был возможен и в микропроцессоре 8080 при его использовании совместно с системным контроллером 8228 или 8238 (КР580ВК28 или КР580ВК38). Правда, в отличие от Z80, здесь такой режим реализовывался чисто аппаратным путём, и перепрограммировать его было невозможно.

Режим 2 является основным режимом обслуживания маскируемых прерываний, реализующим все потенциальные возможности микропроцессора Z80. Используя его, можно определить до 128 различных векторов прерываний.

Как и в режиме 0, микропроцессор подтверждает прерывание выдачей сигналов M1# и IORQ#. Устройство, запросившее прерывание, отвечает выдачей на шину данных своего вектора. Процессор, получив вектор, использует его в качестве младшего байта адреса элемента таблицы прерываний; в качестве старшего байта используется содержимое регистра I. Затем он сохраняет в стеке адрес возврата к прерванной программе, выбирает из таблицы прерываний двухбайтовый адрес обработчика и передаёт ему управление.

Поскольку адрес обработчика занимает два байта, вектор прерывания, выдаваемый устройством, должен иметь нулевой младший разряд.




Содержание  Назад  Вперед