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

Программрование - процедура установки прерываний IM2.

   Привет всем 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ЕТ                               
                                          
   Вот  и  все!  Можно  теперь  браться за
 что-нибудь посложнее.                    
                                          
                                          
  



Другие статьи номера:

От авторов - после долгого перерыва (около 3-х месяцев) вышел второй номер нашего журнала.

Игры - лучшая десятка игр октября в г.Ульяновске.

Система - программа для начинающих и опытных программистов - ассемблер МАSМ v1.0.

Система - описание программы SСRЕЕN ЕDIТОR для создания "картинок" составленных из цветных спрайтов.

Система - обзор системных программ: KSA Sound Tracker, Mega Screen, Pro Tracker.

Программирование - форма представления чисел в процессоре Z-80.

Программрование - процедура установки прерываний IM2.

Программирование - процедура бегущей строки.

Программирование - процедура индикаторов каналов на "AY" (эквалайзер).

Железо - схема ZX-СОVОX / LРТ-СОVОX'а для проигрывания цифровой музыки.

Железо - о винчестерах: что это такое, зачем оно нужно и как выглядит изнутри.

Железо - доработка порта #FD в Scorpion 256.

Отдых - Воспоминания штандартенфюрера Макс-Отто Фон Штирлица.

Отдых - психоделические ежики.

Отдых - известные на весь мир законами Мерфи.

Тусовка - раздел,в котором каждый желающий сможет передать кому-либо привет, поздравить друзей с днем рождения и т.д.

Конкурс - неужели в нашем городе никто не умеет рисовать?

Почтовый ящик - письма читателей: Alex Doom, Жека и Толян.

Реклама - авторы журнала.


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

Похожие статьи:
Про людей - одна история из жизни спектрумиста.
AMIGA NEWS - Программинг на Amiga: О Amiga изнутри, Графика, Сопроцессоры, Особенности ассемблера.
Ликбез - полный дизассемблер ПЗУ (часть 28).

В этот день...   24 февраля