01 сентября 2000

                                         
 ПЕРЕХВАТ ПРЕРЫВАНИЙ 1=ГО РОДА 
                                         
(С) 19.02.2000 by Dr.Lion/RSM            
-----------------------------------------
   Сразу  должен сказать, что я еще нигде
не  видел информации о таком методе орга-
низации  прерываний. Так что все автоские
права пренадлежат мне, т.е. Dr. Lion`у.  
   Суть  метода  заключается в следующем.
Есть такая интересная штука, как ПЗУ 128-
го  бейсика,  над которой сейчас всячески
извращаются,  прошивая вместо него всякие
там Real Comander, NEOS и т.д. Так вот, в
ней сидит редактор BASIC 128, который для
чтения  клавиатуры и инкремента системных
часов  использует  все  тот же обработчик
прерываний из ПЗУ BASIC 48. При этом выб-
раным  режимом  прерываний является IM 1.
Сразу же возникает вопрос: А как же BASIC
128 запускает стандартный обработчик пре-
рываний из ПЗУ BASIC48? Давайте через STS
взглянем  на процедуру обработки прерыва-
ний в ПЗУ 128-го BASIC`а:                
                                         
#0038   PUSH HL    ;сохраняем HL.        
        LD HL,#0048;адрес возврата в ПЗУ 
        PUSH HL    ;BASIC 128.           
        LD HL,#5В00;адрес процедуры пере-
        PUSH HL    ;ключения страниц ПЗУ 
        LD HL,#0038;адрес вызываемой про-
        PUSH HL    ;цедуры в BASIC 48.   
        JP #5В00   ;собственно вызов.    
#0048   РОР HL     ;выход из обработчика 
        RET        ;прерываний.          
                                         
  Что мы видим? Запуск стандартного обра-
ботчика прерываний происходит через рези-
дент,  находящийся  в  буфере принтера по
адресу #5В00!!! Этот резидент инвертирует
4й бит #7FFD (страница ПЗУ) и делает RET.
Т. к. он находится в ОЗУ, то мы имеем ре-
альную возможность извращаться над ним.  
   Получается, что перехват прерываний из
ПЗУ 128-го бейсика в режиме IM 1 заключа-
ется  в записи по адресу #5В00 команды JP
INTDRIV, где INTDRIV является адресом ва-
шего обработчика прерываний. Сам обработ-
чик должен быть приблизително таким:     
                                         
INTDRIV DEC SP:DEC SP;корректируем  стэк,
        DEC SP:DEC SP;снимая лишние PUSH.
        DEC SP:DEC SP;можно три РОР HL.  
        PUSH DE      ;сохрамяем остальные
        PUSH ВС      ;регистры, при  этом
        PUSH AF      ;HL уже сохранен!   
        ...          ;процедуры.         
        РОР AF       ;восстанавливаем ре-
        РОР ВС       ;гистры и выход.    
        РОР DE                           
        РОР HL                           
        EI:RET                           
                                         
Вот и всё! У этого метода есть масса пре-
имуществ перед традиционным образом орга-
низации прерываний, а именно:            
                                         
1. Не нужно создавать таблички векторов и
   расчитывать адреса обработчика.       
                                         
2. Ваш обработчик прерываний может сидеть
   по любому адресу в ОЗУ.               
                                         
3. Перед входом в TR-DOS не нужно  запре-
   щать прерывания командой DI.          
                                         
4. Включать/выключать обработчик прерыва-
   ний можно путем сброса/установки  4-го
   бита порта #7FFD (вот где извращение;)
                                         
   А теперь об недостатках:    
   ========================    
                                         
1.  Если ПЗУ BASIC 128 не содержит по ад-
ресу #0038 обработчика, приведенного выше
то перехватчик работать не будет.        
                                         
2. От возникновения прерывания до запуска
обработчика  проходит  приблизительно 100
тактов :(                                
                                         
3. Необходимость следить за состоянием 4-
го  бита #7FFD. Для работы обработчика он
должен быть сброшен в 0.                 
                                         
   Вот,  пожалуй,  все  "за"  и "против".
Взвешивайте и определяйтесь в своем выбо-
ре. Целью этой статьи было не навязывание
каких-то  новых  извратов  для задолбаных
программистов  СПЕКТРУМА, а лишь ознаком-
ление онных с новой, недавно  обнаруженой
мною, особенностью нашего любимого Спека!
                                         
                    До встречи!



Other articles:


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

Similar articles:
Playing - On the game 12 secret book-Miss.
PROJECT - On creating a game project DUNE.
User'am - UFO-2 "Devils of the Abyss", on the road to perfection.

В этот день...   29 April