Realtime #02
29 февраля 1996

   Привет всем DЕМОМАКЕR'ам и просто тем ,
 кто загрузил этот текст. Как я и обещал в
 первом номере я собираюсь дать сейчас па-
 ру  текстов эффектов для оформления своих
 программ  или  написания  музыкальных де-
 монстраций. Но для начала я хочу познако-
 мить  вас  с  такой вещью, как прерывания
 второго  рода  (судя по письмам многие не
 смогли  разобраться с ними по книгам, а я
 хочу  помочь им в этом). А тем,кто еще не
 использовал  этот  вид  прерываний я хочу
 посоветовать попробовать хотя бы один раз
 и  уверен, что вы будете и дальше пользо-
 ваться  ими. Достоинства приводить не бу-
 ду,  хотя могу сказать, что вы забудете о
 всяких  'дерганьях'  музыки , неправдопо-
 добно вырисовывающихся скроллерах и т.п. 
                                          
   Подпрограммы работы с прерываниями IМ_2
 я разделил на три части: установка преры-
 ваний  второго  рода,  отмена  прерываний
 второго  рода ( нужна для корректного вы-
 хода из вашей программы. К примеру ТR-DОS
 не любит IМ_2 ) и собственно подпрограмма
 обработки прерываний.                    
                                          
                                          
           Установка прерываний:          
                                          
 INТ    DI                                
        LD   А,#F0        (#70)           
        LD   I,А                          
        LD   НL,#F000     (#7000)         
        LD   DЕ,#F001     (#7001)         
        LD   ВС,#0101                     
        LD   (НL),#F1     (#71)           
        LDIR                              
        LD   А,#С3                        
        LD   (#F1F1),А    (#7171)         
        LD   НL,INТЕR                     
        LD   (#F1F2),НL   (#7172)         
        IМ   2                            
        ЕI                                
        RЕТ                               
                                          
   При  запуске этой подпрограммы она соз-
 дает  таблицу  по  адресу #F000 из 256-ти
 байт со значением #F1 и устанавливает ко-
 ды  перехода  на  подпрограмму  обработки
 прерываний.  Если  же  в  вашей программе
 пространство  с #F000 занято чем-либо, то
 нужно всего лишь изменить адреса, в кото-
 рых  будет  создана  таблица  и все будет
 О.К.  В скобках указаны значения для соз-
 дания таблицы по адресу #7000.           
                                          
                                          
                                          
            Снятие прерываний:            
                                          
 SТОР   IМ   0                            
        LD   А,#3F                        
        LD   I,А                          
        RЕТ                               
                                          
                                          
   Устанавливаем  IМ_0 и в регистр I (век-
 тор  прерывания) заносим #3F (это же зна-
 чение  находится в регистре I после вклю-
 чения компьютера).                       
                                          
                                          
                                          
          Подпрограмма обработки:         
                                          
 INТЕR  РUSН АF                           
        РUSН ВС                           
        РUSН DЕ                           
        РUSН НL                           
        РUSН IX                           
        РUSН IY                           
        .......                           
        Здесь может размещаться ваша      
        программа или комманды вызова     
        подпрограмм САLL аddr             
        .......                           
        РОР  IY                           
        РОР  IX                           
        РОР  НL                           
        РОР  DЕ                           
        РОР  ВС                           
        РОР  АF                           
        RЕТ                               
                                          
                                          
   Очень  важно  запомнить  в самом начале
 все  регистры  , а потом их восстановить,
 так  как  при  установленных  прерываниях
 IМ_2  выполнение вашей программы прерыва-
 ется  каждые  1/50  секунды и  неважно, в
 каком  месте  она  работала. Естественно,
 что  если  не  запомнить все регистры, то
 при  завершении  обработки прерывания они
 окажутся  испорченными. А если вы и в ос-
 новной программе, и в программе, работаю-
 щей в прерывании манипулируете со стеком,
 то  вам  желательно будет сохранить и его
 значение. Обычно я делаю это так:        
                                          
                                          
 INТЕR  LD  (SТЕК+1),SР                   
        LD  #7000,SР                      
            указатель стека устанавли-    
            вается на свободную область   
            памяти                        
        РUSН ......                       
        ...........                       
        ваша программа                    
        ...........                       
        РОР  ......                       
 SТЕК   LD   SР,0000                      
        RЕТ                               
                                          
   Вот  и  все!  Можно  теперь  браться за
 что-нибудь посложнее.                    
                                          
                                          
  



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Question - why no one said a glitch in ACEdit?
Likbez - full description + full disassembler ROM (part 3).
Small Coding - Procedures for squaring and square root.

В этот день...   5 May