Realtime #02
29 февраля 1996 |
|
Привет всем 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ЕТ Вот и все! Можно теперь браться за что-нибудь посложнее.
Other articles:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November