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:
SUXX! - On matters pisyushnym situation was with the software. Contacting Liberation Front from Microsoft.
Likbez - CHEATS & POKES. The last two parts of the cycle.

В этот день...   21 November