В самом начале кадра, когда электронный луч подскакивает в самый верх, на нужную ножку процессора подаётся сигнал. Процессор-же, без суматохи, заканчивает очередную инструкцию основной программы. И готовится уже выполнять следующую инструкцию. И вот в этот момент, когда наш Z80 только готов выполнять очередную инструкцию, он спохватывается и смотрит: "ой, а ведь прерывание у меня на ножке! И прерывания разрешены!(Флаг включён инструкцией EI, и не выключен инструкцией DI) Пора отвлечься от основной программы." Чтобы не забыть к какой инструкции апосля вернуться, процессор заботливо заталкивает её адрес в стек.
Вот тут и начинаются проблемы, если указатель стека используется нестандартно. Приходится выкручиваться. По разному.
Так а где же лежит подпрограмма обработки прерывания? Если включен IM 2, то по адресу лежащему в регистре I как старший байт, а младший байт - 255(стабильная шина), этим адресом программист может управлять, записывая командой LD I,A нужный старший адрес. В других режимах прерывания IM 0 и IM 1 выполняется бейсиковский обработчик по адресу в ПЗУ
0038H. Тут пользовательские прерывания возможны, только извращением в виде держания стека в зоне ПЗУ. (или аппаратно, переписать ПЗУ.. включить в нулевую страницу вмето ПЗУ ОЗУ...) Это всё извращения ради извращения, так как проще использовать IM 2.
Режим IM 2 хорош для нас тем, что мы можем сами написать что делать при прерываниях (например, играть музыку), и при этом не делается то, что нам не нужно, бейсиковское сканирование клавиш. У ЛайкПаскаля свой сканер клавиш есть, а бейсиковский только зря процессор занимает.
[свернуть]