Прерывания — различия между версиями
Alone (обсуждение | вклад) (→Максируемое прерывание) |
Zxdn (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
− | '''Прерывания''' ('''Interrupts''') — выполнение процессором специальной подпрограммы (обработчика прерывания) по приходу внешнего сигнала. В [[ZX Spectrum]] доступно два вида прерываний | + | '''Прерывания''' ('''Interrupts''') — выполнение процессором специальной подпрограммы (обработчика прерывания) по приходу внешнего сигнала. В [[ZX Spectrum]] доступно два вида прерываний — маскируемое ('''INT''') и немаксируемое ('''NMI'''). Разница между ними заключается в возможности программного разрешения и запрещения обработки максируемых прерываний, тогда как немаксируемые прерывания обрабатываются процессором всегда и могут быть запрещены только физическим отключением сигнала немаскируемого прерывания. |
== Максируемое прерывание == | == Максируемое прерывание == | ||
− | Сигнал маскируемого прерывания генерируется при начале отображения каждого нового кадра и имеет частоту около 50 Герц | + | Сигнал маскируемого прерывания генерируется при начале отображения каждого нового кадра и имеет частоту около 50 Герц. Процессор [[Z80]] имеет три режима обработки максируемых прерываний, из которых в ZX Spectrum используется два. На стандартном ZX Spectrum и клонах есть только один источник прерывания, но на компьютере [[ATM Turbo 2]] и в устройстве [[DMA Ultrasound]] есть другие маскируемые прерывания. Есть также терминалка [[INTerminal]] под [[модем]] с маскируемым прерыванием. |
+ | |||
=== IM 0 === | === IM 0 === | ||
В цикле подтверждения прерываний Z80 считывает код команды с шины данных и исполняет её. Это режим по умолчанию после сброса. На ZX Spectrum нет устройств, дающих код команды на шину данных. Существует ли вообще возможность это сделать через стандартную ULA? | В цикле подтверждения прерываний Z80 считывает код команды с шины данных и исполняет её. Это режим по умолчанию после сброса. На ZX Spectrum нет устройств, дающих код команды на шину данных. Существует ли вообще возможность это сделать через стандартную ULA? |
Версия 23:14, 19 ноября 2009
Прерывания (Interrupts) — выполнение процессором специальной подпрограммы (обработчика прерывания) по приходу внешнего сигнала. В ZX Spectrum доступно два вида прерываний — маскируемое (INT) и немаксируемое (NMI). Разница между ними заключается в возможности программного разрешения и запрещения обработки максируемых прерываний, тогда как немаксируемые прерывания обрабатываются процессором всегда и могут быть запрещены только физическим отключением сигнала немаскируемого прерывания.
Содержание
Максируемое прерывание
Сигнал маскируемого прерывания генерируется при начале отображения каждого нового кадра и имеет частоту около 50 Герц. Процессор Z80 имеет три режима обработки максируемых прерываний, из которых в ZX Spectrum используется два. На стандартном ZX Spectrum и клонах есть только один источник прерывания, но на компьютере ATM Turbo 2 и в устройстве DMA Ultrasound есть другие маскируемые прерывания. Есть также терминалка INTerminal под модем с маскируемым прерыванием.
IM 0
В цикле подтверждения прерываний Z80 считывает код команды с шины данных и исполняет её. Это режим по умолчанию после сброса. На ZX Spectrum нет устройств, дающих код команды на шину данных. Существует ли вообще возможность это сделать через стандартную ULA?
IM 1
По приходе прерывания и окончании текущей команды Z80 исполняет подпрограмму #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 это также может привести к зависанию компьютера через некоторое время после установки вектора прерывания.