Прерывания — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
(IM 2)
м (Опечатки.)
 
(не показаны 2 промежуточные версии ещё одного участника)
Строка 1: Строка 1:
'''Прерывания''' ('''Interrupts''') — выполнение процессором специальной подпрограммы (обработчика прерывания) по приходу внешнего сигнала. В [[ZX Spectrum]] доступно два вида прерываний — маскируемое ('''INT''') и немаксируемое ('''NMI'''). Разница между ними заключается в возможности программного разрешения и запрещения обработки максируемых прерываний, тогда как немаксируемые прерывания обрабатываются процессором всегда и могут быть запрещены только физическим отключением сигнала немаскируемого прерывания.
+
'''Прерывания''' ('''Interrupts''') — выполнение процессором специальной подпрограммы (обработчика прерывания) по приходу внешнего сигнала. В [[ZX Spectrum]] доступно два вида прерываний — маскируемое ('''INT''') и немаскируемое ('''NMI'''). Разница между ними заключается в возможности программного разрешения и запрещения обработки маскируемых прерываний, тогда как немаскируемые прерывания обрабатываются процессором всегда и могут быть запрещены только физическим отключением сигнала немаскируемого прерывания.
  
== Максируемое прерывание ==
+
== Маскируемое прерывание ==
Сигнал маскируемого прерывания генерируется при начале отображения каждого нового кадра и имеет частоту около 50 Герц. Процессор [[Z80]] имеет три режима обработки максируемых прерываний, из которых в ZX Spectrum используется два. На стандартном ZX Spectrum и клонах есть только один источник прерывания, но на компьютере [[ATM Turbo 2]] и в устройстве [[DMA Ultrasound]] есть другие маскируемые прерывания. Есть также терминалка [[INTerminal]] под [[модем]] с маскируемым прерыванием.
+
Сигнал маскируемого прерывания генерируется при начале отображения каждого нового кадра и имеет частоту около 50 Герц. Процессор [[Z80]] имеет три режима обработки маскируемых прерываний, из которых в ZX Spectrum используется два. На стандартном ZX Spectrum и клонах есть только один источник прерывания, но на компьютере [[ATM Turbo 2]] и в устройстве [[DMA Ultrasound]] есть другие маскируемые прерывания. Есть также терминалка [[INTerminal]] под [[модем]] с маскируемым прерыванием.
  
 
=== IM 0 ===
 
=== IM 0 ===
В цикле подтверждения прерываний Z80 считывает код команды с шины данных и исполняет её. Это режим по умолчанию после сброса. На ZX Spectrum нет устройств, дающих код команды на шину данных. Существует ли вообще возможность это сделать через стандартную ULA?
+
В цикле подтверждения прерываний Z80 считывает код команды с шины данных и исполняет её. Это режим по умолчанию после сброса. На ZX Spectrum нет устройств, дающих код команды на шину данных, а шина данных в момент прерывания всегда содержит значение #FF, что приводит к результату, аналогичному режиму IM 1. Существует ли вообще возможность это сделать через стандартную ULA?
  
 
=== IM 1 ===
 
=== IM 1 ===
По приходе прерывания и окончании текущей команды Z80 исполняет подпрограмму #38.
+
По приходе прерывания и окончании текущей команды Z80 исполняет команду RST #38 (код команды #FF), выполняющую вызов подпрограммы по адресу #38.
  
 
=== IM 2 ===
 
=== IM 2 ===
По приходе прерывания и окончании текущей команды Z80 исполняет подпрограмму, адрес которой лежит в I*256+ШД, где ШД — состояние шины данных. Состояние ШД может быть использовано для организации раздельных обработчиков для разных источников прерывания, которые должны устанавливать ШД в определённое состояние. На большинстве моделей ZX Spectrum ШД всегда содержит #FF. На некоторых клонах шина данных "замусорена" и содержит в момент прерывания неизвестное заранее значение, из-за чего не вызывается обработчик прерывания и программа зависает или сбрасывается. Для решения этой проблемы используют таблицу из 257 одинаковых значений. Такие программы одинаково работают на компьютерах нормальной и с "грязной" шиной данных, но подобное решение накладывает ограничения на возможное расположение обработчика прерывания в памяти. Шина данных также бывает загрязнена в режиме DOS (на [[Pentagon 128]]).
+
По приходе прерывания и окончании текущей команды Z80 исполняет подпрограмму, адрес которой лежит в I*256+ШД, где ШД — состояние шины данных. Состояние ШД может быть использовано для организации раздельных обработчиков для разных источников прерывания, которые должны устанавливать ШД в определённое состояние. На оригинальных моделях ZX Spectrum ШД всегда содержит #FF. На некоторых клонах шина данных "замусорена" и содержит в момент прерывания неизвестное заранее значение, из-за чего не вызывается обработчик прерывания и программа зависает или сбрасывается. Для решения этой проблемы используют таблицу из 257 одинаковых значений. Такие программы одинаково работают на компьютерах нормальной и с "грязной" шиной данных, но подобное решение накладывает ограничения на возможное расположение обработчика прерывания в памяти. Шина данных также бывает загрязнена в режиме DOS (на [[Pentagon 128]]).
  
 
== Немаскируемое прерывание ==
 
== Немаскируемое прерывание ==
Немаксируемое прерывание не используется в оригинальном ZX Spectrum, однако может использоваться дополнительными устройствами. В частности, контроллер дисковода [[Beta Disk Interface]] имеет кнопку [[Magic]], генерирующую немаксируемое прерывание.
+
Немаскируемое прерывание не используется в оригинальном ZX Spectrum, однако может использоваться дополнительными устройствами. В частности, контроллер дисковода [[Beta Disk Interface]] имеет кнопку [[Magic]], генерирующую немаскируемое прерывание.
  
 
== Особенности оригинального ZX Spectrum ==
 
== Особенности оригинального ZX Spectrum ==

Текущая версия на 17:14, 31 августа 2012

Прерывания (Interrupts) — выполнение процессором специальной подпрограммы (обработчика прерывания) по приходу внешнего сигнала. В ZX Spectrum доступно два вида прерываний — маскируемое (INT) и немаскируемое (NMI). Разница между ними заключается в возможности программного разрешения и запрещения обработки маскируемых прерываний, тогда как немаскируемые прерывания обрабатываются процессором всегда и могут быть запрещены только физическим отключением сигнала немаскируемого прерывания.

Маскируемое прерывание

Сигнал маскируемого прерывания генерируется при начале отображения каждого нового кадра и имеет частоту около 50 Герц. Процессор Z80 имеет три режима обработки маскируемых прерываний, из которых в ZX Spectrum используется два. На стандартном ZX Spectrum и клонах есть только один источник прерывания, но на компьютере ATM Turbo 2 и в устройстве DMA Ultrasound есть другие маскируемые прерывания. Есть также терминалка INTerminal под модем с маскируемым прерыванием.

IM 0

В цикле подтверждения прерываний Z80 считывает код команды с шины данных и исполняет её. Это режим по умолчанию после сброса. На ZX Spectrum нет устройств, дающих код команды на шину данных, а шина данных в момент прерывания всегда содержит значение #FF, что приводит к результату, аналогичному режиму IM 1. Существует ли вообще возможность это сделать через стандартную ULA?

IM 1

По приходе прерывания и окончании текущей команды Z80 исполняет команду RST #38 (код команды #FF), выполняющую вызов подпрограммы по адресу #38.

IM 2

По приходе прерывания и окончании текущей команды Z80 исполняет подпрограмму, адрес которой лежит в I*256+ШД, где ШД — состояние шины данных. Состояние ШД может быть использовано для организации раздельных обработчиков для разных источников прерывания, которые должны устанавливать ШД в определённое состояние. На оригинальных моделях ZX Spectrum ШД всегда содержит #FF. На некоторых клонах шина данных "замусорена" и содержит в момент прерывания неизвестное заранее значение, из-за чего не вызывается обработчик прерывания и программа зависает или сбрасывается. Для решения этой проблемы используют таблицу из 257 одинаковых значений. Такие программы одинаково работают на компьютерах нормальной и с "грязной" шиной данных, но подобное решение накладывает ограничения на возможное расположение обработчика прерывания в памяти. Шина данных также бывает загрязнена в режиме DOS (на Pentagon 128).

Немаскируемое прерывание

Немаскируемое прерывание не используется в оригинальном ZX Spectrum, однако может использоваться дополнительными устройствами. В частности, контроллер дисковода Beta Disk Interface имеет кнопку Magic, генерирующую немаскируемое прерывание.

Особенности оригинального ZX Spectrum

Из-за ошибки в ULA на оригинальных моделях ZX Spectrum при установке вектора прерывания (регистр I процессора) в область медленной памяти на экране возникает эффект "снега". На ZX Spectrum 128K это также может привести к зависанию компьютера через некоторое время после установки вектора прерывания.