Прерывания в Z80. .BIG BRAIN
Привет!!! Я еще ни разу не писал в рубрику BIG BRAIN и вот ре-
шил написать о IM2, а то ANDY INC. уже две статьи в эту рубрику
написал...
Короче, некоторые умы утверждают, что IM2 - это самое сложное,
что есть в Z80. Если честно я в этом не уверен, по моему, это
самое простое.
Что же такое прерывания. У ЦПУ есть три режима прерывания IM0,
IM1, IM2. IM0 на SPECCY не задействованы, значит у нас остается
два режима прерываний. При выполнении программы ЦПУ 50 раз в се-
кунду прерывает ее выполнение и переходит на спеЦиальную подпро-
грамму обработки прерываний, которая в литературе называется
СУПЕРВИЗОР. Если включен режим IM1, то проЦессор 50 раз в се-
кунду переходит на 5б ячейку ПЗУ. Там находится программа опро-
са клавиатуры. То есть когда вы работаете в БЕЙСИКЕ, то вклю-
чен режим IM1. IM1 жеско привязан к 5б ячейке и для нас он не
представляет никакого интереса. А вот IM2 обладает способностью
программно изменять адрес расположения программы обработки пре-
рываний. То есть мы можем сами написать проЦедуру обработки
прерываний.
Как включить IM2. Во первых нужно понять принЦип метки, метка -
это два байта, которые указывают на адрес по которому расположе-
на программа обработки прерываний. Метку нельзя поставить в лю-
бую область памяти, ее можно поставить только по адресу в кото-
ром младший байт равен #FF, к примеру #б1FF. Число #FF, это век-
тор прерывания. 0н всегда должен быть равен #FF, если на вашем
компе вектор не равен 255, то тогда я вам сочуствую. Кстати, не-
которые перефирийные устройства изменяют вектор прерывания...
Теперь сама программа:
ORG 25000
DI ;перед включением IM2 прерывания нужно запретить
LD А,#FD ;в аккумулятор кидаем #FD, это число и будет
;указывать на адрес в которой лежит метка
LD DE,30000 ;метку (30000) засовываем в регистр
LD (#FDFF),DE ;саму метку кидаем по адресу #FDFF
LD I,А ;#FD из А копируем в I
IM 2 ;включаем IM2
EI ;разрешаем прерывания
RET ;и вываливаемся из программы
а по адресу 30000 нам нужно расположить СУПЕРВИЗОР
ORG 30000
DI ;запрещаем прерывания
PUSH AF ;сохраняем все регистры на стеке
PUSH ВС ;
PUSH DE ;
PUSH IX ;
PUSH IY ;
PUSH HL ;
............. ;ваша программа
POP HL ;вытаскиваем все регистры обратно
POP IY ;
POP IX ;
POP DE ;
POP ВС ;
POP AF ;
EI ;разрешаем прерывания
RET ;возврат
Теперь, 50 раз в секунду будет выполняться ваша программа
обработки прерываний. Если вам нужно завязать все это с IM1,
то вместо команд EI и RET в конЦе нужно поставить JP 5б. Я к
примеру так в БЕЙСИК вешал музон на АУ.
При необходимости нужно сохранять и альтернативные регистры.
Для чего все это надо.
С помощью IM2 можно организовывать паралельные проЦессы, к при-
меру на IM2 очень часто вешают музыку АУ.
Кстати, если вам не охота засовывать метки в ОЗУ, то можно
воспользоваться готовыми метками в ПЗУ, там ведь тоже есть
адреса, которые оканчиваются на #FF. По этому поводу я нари-
совал таблиЦу, I обозначает какое число засовывать в регистр
I, адрес обозначает по какому адресу нужно располагать прог-
рамму обработки прерываний.
╔═════╤═══════╦═════╤═══════╦═════╤═══════╦═════╤═══════╗
║ I │ адрес ║ I │ адрес ║ I │ адрес ║ I │ адрес ║▒▒
║─────┼───────╫─────┼───────╫─────┼───────╫─────┼───────╢▒▒
║ 0 │ 20430 ║ 1б │ 51984 ║ 32 │ 52513 ║ 48 │ б0208 ║▒▒
║ 1 │ 52818 ║ 17 │ 08729 ║ 33 │ 33485 ║ 49 │ 57б40 ║▒▒
║ 2 │ 222б9 ║ 18 │ 52481 ║ 34 │ 00544 ║ 50 │ 13б27 ║▒▒
║ 3 │ 39020 ║ 19 │ 49749 ║ 35 │ 49537 ║ 51 │ 1325б ║▒▒
║ 4 │ 10419 ║ 20 │ 25075 ║ 3б │ 08527 ║ 52 │ 015б0 ║▒▒
║ 5 │ 02294 ║ 21 │ 51б73 ║ 37 │ 23б70 ║ 53 │ 57124 ║▒▒
║ б │ 29149 ║ 22 │ 515б8 ║ 38 │ 20444 ║ 54 │ 34307 ║▒▒
║ 7 │ 1б039 ║ 23 │ 12493 ║ 39 │ 00288 ║ 55 │ 41231 ║▒▒
║ 8 │ 02088 ║ 24 │ 15582 ║ 40 │ 32348 ║ 5б │ б5535 ║▒▒
║ 9 │ б5129 ║ 25 │ 23842 ║ 41 │ 58154 ║ 57 │ б5535 ║▒▒
║ 10 │ 32802 ║ 2б │ 13824 ║ 42 │ 19754 ║ 58 │ б5535 ║▒▒
║ 11 │ 58888 ║ 27 │ 0730б ║ 43 │ 23б53 ║ 59 │ б5535 ║▒▒
║ 12 │ 53183 ║ 28 │ 49947 ║ 44 │ 07117 ║ б0 │ 00255 ║▒▒
║ 13 │ 52503 ║ 29 │ 02344 ║ 45 │ 55781 ║ б1 │ 00000 ║▒▒
║ 14 │ 143б7 ║ 30 │ 2б573 ║ 4б │ 23713 ║ б2 │ 00255 ║▒▒
║ 15 │ 27928 ║ 31 │ 033б0 ║ 47 │ 045б9 ║ б3 │ 000б0 ║▒▒
╚═════╧═══════╩═════╧═══════╩═════╧═══════╩═════╧═══════╝▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Если вы вообще ничего не поняли из того, что здесь написано, то
можете подваливать к "экрану" и там вам все разжуют...
ALEX' 9б
Other articles: