Логотип.
 Разделы сайта Cтатьи.
Сайт в разработке!

Статистика сайта.

Посещений за день: 250
Посещений за месяц: 2225
Посещений за год: 43164


Баннеры.

DMconnect
Maksy's PWS


Статистика в картинках.

likes counter


Погода.


  • Главная.
  • Новости.
  • Файлы.
  • Работы.
  • Контакты.
  • Чат "Пиво".
  • Статьи.
  • Ссылки.
  • Гостевая.
  • Прерывания IM2 на Z80.

     Некоторые умы утверждают, что IM2 - это самое сложное, что есть в Z80. Если честно, я в этом не уверен, по-моему, это самое простое.

     Что же такое прерывания? У ЦПУ есть три режима прерывания: IM0, IM1 и IM2. IM0 на SPECCY не задействован, значит, у нас остается два режима прерываний. При выполнении программы ЦПУ 50 раз в секунду прерывает ее выполнение и переходит на специальную подпрограмму обработки прерываний, которая в литературе называется СУПЕРВИЗОР.

     Если включен режим IM1, то процессор 50 раз в секунду переходит на 5B ячейку ПЗУ. Там находится программа опроса клавиатуры. То есть, когда вы работаете в БЕЙСИКЕ, то включен режим IM1. IM1 жестко привязан к 5B ячейке и для нас он не представляет никакого интереса. А вот IM2 обладает способностью программно изменять адрес расположения программы обработки прерываний. То есть мы можем сами написать процедуру обработки прерываний.

     Как включить IM2. Во-первых, нужно понять принцип метки. Метка - это два байта, которые указывают на адрес, по которому расположена программа обработки прерываний. Метку нельзя поставить в любую область памяти, ее можно поставить только по адресу, в котором младший байт равен #FF, к примеру #FDFF. Число #FF - это вектор прерывания. Он всегда должен быть равен #FF, если на вашем компе вектор не равен 255, то тогда я вам сочувствую. Кстати, некоторые периферийные устройства изменяют вектор прерывания...

     Теперь сама программа:

    	ORG 25000
    	DI            ; перед включением IM2 прерывания нужно запретить
    	LD A,#FD      ; в аккумулятор кидаем #FD, это число и будет
    	              ; указывать на адрес, в котором лежит метка
    	LD DE,30000   ; метку (30000) засовываем в регистр
    	LD (#FDFF),DE ; саму метку кидаем по адресу #FDFF
    	LD I,A        ; #FD из A копируем в I
    	IM 2          ; включаем IM2
    	EI            ; разрешаем прерывания
    	RET           ; и вываливаемся из программы
    

     А по адресу 30000 нам нужно расположить СУПЕРВИЗОР.

    	ORG 30000
    	DI            ; запрещаем прерывания
    	PUSH AF       ; сохраняем все регистры на стеке
    	PUSH BC
    	PUSH DE
    	PUSH IX
    	PUSH IY
    	PUSH HL
    	............. ; ваша программа
    	POP HL        ; вытаскиваем все регистры обратно
    	POP IY
    	POP IX
    	POP DE
    	POP BC
    	POP AF
    	EI            ; разрешаем прерывания
    	RET           ; возврат
    

     Теперь 50 раз в секунду будет выполняться ваша программа обработки прерываний. Если вам нужно завязать все это с IM1, то вместо команд EI и RET в конце нужно поставить JP 5B. Я, к примеру, так в БЕЙСИК вешал музон на AY.

     При необходимости нужно сохранять и альтернативные регистры.

     Для чего все это надо? С помощью IM2 можно организовывать параллельные процессы, к примеру, на IM2 очень часто вешают музыку AY.

     Кстати, если вам неохота засовывать метки в ОЗУ, то можно воспользоваться готовыми метками в ПЗУ, там ведь тоже есть адреса, которые оканчиваются на #FF. По этому поводу я нарисовал таблицу. I обозначает, какое число засовывать в регистр I, адрес обозначает, по какому адресу нужно располагать программу обработки прерываний.

    IАдрес IАдрес IАдрес IАдрес
    020430165198432525134860208
    152818170872933334854957640
    222269185248134005445013627
    339020194974935495375113256
    410419202507536085275201560
    502294215167337236705357124
    629149225156838204445434307
    716039231249339002885541231
    802088241558240323485665535
    965129252384241581545765535
    1032802261382442197545865535
    1158888270730643236535965535
    1253183284994744071176000255
    1352503290234445557816100000
    1414367302657346237136200255
    1527928310336047045696300060


     Если вы вообще ничего не поняли из того, что здесь написано, то можете подваливать к "экрану", и там вам все разжуют...

    >>

    BitByByte, 2000 г. (2026).