Сперва, пишется, непосредственно процедура обработки прерывания (кусок кода, который должен выполняться 50 раз в секунду или около того).
Цитата:
push ix ;cохраняются на стеке значения всех регистры процессора
push iy
push bc
push de
push hl
push af
exx
push bc
push de
push hl
ex af,af'
push af
call nn ;здесь может находиться адрес подпрограммы, вызываемый каждое прерывание или кусок кода, укладывающийся в прерывание
pop af ;восстанавливаются значения регистров процессора
pop hl ;до момента прихода прерывания
pop de
pop bc
ex af,af'
pop af
exx
pop hl
pop de
pop bc
pop iy
pop ix
jp 38 ;переход по стандартному адресу обработки прерывания im1 (команда rst 56). В противном случае, надо будет самостоятельно позаботиться об опросе порта клавиатуры, инкременте "часов" и т.п.
В ячейках памяти ОЗУ или ПЗУ с шагом в 256, лежит адрес (младший и старший байт) расположения обработчика изображенного выше. Складывающийся из значения вектора прерывания (который, за исключением подключения периферии, типа AMX-mouse, всегда имеет значение 255) и числа, записанного в регистр вектора прерывания.
Цитата:
di ; запретить прерывания
ld a,m ;число m, значение регистра вектора прерываний
ld i,a
im 2 ;включение режима
ei ;разрешить прерывания
ret
Для выключения режима (например, работы с tr-dos), выполняется следующий кусок кода.
Цитата:
di
ld a,3F ;установка исходного значения вектора прерываний, для нормальной работы в tr-dos
ld i,a
im 1 ;выключение режима
ei
ret
[свернуть]