Hacker #06
08 января 1997 |
|
Прерывания в 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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November