Black Crow #04
01 сентября 2000

Программистам - Перехват IM 1

                                         
 ПЕРЕХВАТ ПРЕРЫВАНИЙ 1=ГО РОДА 
                                         
(С) 19.02.2000 by Dr.Liоn/RSМ            
-----------------------------------------
   Сразу  должен сказать, что я еще нигде
не  видел информации о таком методе орга-
низации  прерываний. Так что все автоские
права пренадлежат мне, т.е. Dr. Liоn`у.  
   Суть  метода  заключается в следующем.
Есть такая интересная штука, как ПЗУ 128-
го  бейсика,  над которой сейчас всячески
извращаются,  прошивая вместо него всякие
там Rеаl Соmаndеr, NЕОS и т.д. Так вот, в
ней сидит редактор ВASIС 128, который для
чтения  клавиатуры и инкремента системных
часов  использует  все  тот же обработчик
прерываний из ПЗУ ВASIС 48. При этом выб-
раным  режимом  прерываний является IМ 1.
Сразу же возникает вопрос: А как же ВASIС
128 запускает стандартный обработчик пре-
рываний из ПЗУ ВASIС48? Давайте через SТS
взглянем  на процедуру обработки прерыва-
ний в ПЗУ 128-го ВASIС`а:                
                                         
#0038   РUSН НL    ;сохраняем НL.        
        LD НL,#0048;адрес возврата в ПЗУ 
        РUSН НL    ;ВASIС 128.           
        LD НL,#5В00;адрес процедуры пере-
        РUSН НL    ;ключения страниц ПЗУ 
        LD НL,#0038;адрес вызываемой про-
        РUSН НL    ;цедуры в ВASIС 48.   
        JР #5В00   ;собственно вызов.    
#0048   РОР НL     ;выход из обработчика 
        RЕТ        ;прерываний.          
                                         
  Что мы видим? Запуск стандартного обра-
ботчика прерываний происходит через рези-
дент,  находящийся  в  буфере принтера по
адресу #5В00!!! Этот резидент инвертирует
4й бит #7FFD (страница ПЗУ) и делает RЕТ.
Т. к. он находится в ОЗУ, то мы имеем ре-
альную возможность извращаться над ним.  
   Получается, что перехват прерываний из
ПЗУ 128-го бейсика в режиме IМ 1 заключа-
ется  в записи по адресу #5В00 команды JР
INТDRIV, где INТDRIV является адресом ва-
шего обработчика прерываний. Сам обработ-
чик должен быть приблизително таким:     
                                         
INТDRIV DЕС SР:DЕС SР;корректируем  стэк,
        DЕС SР:DЕС SР;снимая лишние РUSН.
        DЕС SР:DЕС SР;можно три РОР НL.  
        РUSН DЕ      ;сохрамяем остальные
        РUSН ВС      ;регистры, при  этом
        РUSН AF      ;НL уже сохранен!   
        ...          ;процедуры.         
        РОР AF       ;восстанавливаем ре-
        РОР ВС       ;гистры и выход.    
        РОР DЕ                           
        РОР НL                           
        ЕI:RЕТ                           
                                         
Вот и всё! У этого метода есть масса пре-
имуществ перед традиционным образом орга-
низации прерываний, а именно:            
                                         
1. Не нужно создавать таблички векторов и
   расчитывать адреса обработчика.       
                                         
2. Ваш обработчик прерываний может сидеть
   по любому адресу в ОЗУ.               
                                         
3. Перед входом в ТR-DОS не нужно  запре-
   щать прерывания командой DI.          
                                         
4. Включать/выключать обработчик прерыва-
   ний можно путем сброса/установки  4-го
   бита порта #7FFD (вот где извращение;)
                                         
   А теперь об недоcтаткаx:    
   ========================    
                                         
1.  Если ПЗУ ВASIС 128 не содержит по ад-
ресу #0038 обработчика, приведенного выше
то перехватчик работать не будет.        
                                         
2. От возникновения прерывания до запуска
обработчика  проходит  приблизительно 100
тактов :(                                
                                         
3. Необходимость следить за состоянием 4-
го  бита #7FFD. Для работы обработчика он
должен быть сброшен в 0.                 
                                         
   Вот,  пожалуй,  все  "за"  и "против".
Взвешивайте и определяйтесь в своем выбо-
ре. Целью этой статьи было не навязывание
каких-то  новых  извратов  для задолбаных
программистов  СПЕКТРУМА, а лишь ознаком-
ление онных с новой, недавно  обнаруженой
мною, особенностью нашего любимого Спека!
                                         
                    До вcтречu!



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

Программистам - Структура программ.

Программистам - Современные программы.

Программистам - Быстрый скроллер экрана с атрибутами.

Программистам - Перехват IM 1

Программистам - Теория: передача данных на компьютере.

Очумелые ручки - Набор схем, блуждающих в сетях.

Очумелые ручки - Gigascreen для Пентагона с интерлейсом.

Белый попугай - Интернет похметолог и его полезные советы.

Белый попугай - Выйди замуж за кодера.

Белый попугай - Советы молодожёнам (продолжение).

Белый попугай - Анекдоты о Штирлице.

Раскрутка - Soft из Харькова: PiFormat,

Раскрутка - Gluk Reset Service v5.2

Раскрутка - Обзор новых системок: BGE, Best Viewer, ExHummer, Selicon Player, SlangPro, Quick Commander,

Раскрутка - Crime Santa Claus-2

Игротека - В мире NETHER World.

Игротека - Сценарии будущих игр.

Игротека - Впечатление от "Чёрного Ворона".

Игротека - Super Laser Squad.

Игротека - Потрясающий шедевр: описание игры 8-й отдел.

Игротека - Обзор игрушек: Clickmania, Japan Contrast, Smagly 3, Worm World, Демониада, Towdie, Пасьянс Пирамида.

Разное - Intel outside.

Разное - Страшилка.

Разное - Реклама.

Трибуна - Рассуждения на тему.

Трибуна - Занимательные советы.

Трибуна - Украинский национализм.

Трибуна - Pidarsoft: реакция.

Трибуна - От редакции.


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

Похожие статьи:
STORY-2 - Дилогия "Червь". Книга первая: Князь тьмы (глава 4-15).
Книга - Тайники ZX-Spectrum: Компьютерная арифметика.
На досуге - КТО ИЗ НАС ХАКЕР: Тест на хакер'а.

В этот день...   17 октября