Coding - Раздeл для начинаюших кодeров.
+===------------=========-----------====+
| CODING... |
+===------======---------======-----====+
X-treamer/Infotek
Раздел для начинаюших
кодеров.
Итак, вот снова в нашей газете появился
этот раздел... И предназначен он тем, кто
только еше сел за ассемблер и пытается
что-нибудь написать...
Перейдем сразу к более сложному: ис-
пользование прерываний второго рода. как
известно, каждый 20 миллисекунд проЦессор
прерывает исполнение инструкЦий и перехо-
дит на спеЦиальную - `теневую` проЦедуру.
При включенном IM 1(IM 0) это будет про-
Цедура по адресу 0038h - опрос клавиату-
ры. Но Z80 позволяет его переназначить.
Т.e. вы можете написать другую теневую
проЦедуру, например, проигрыватель ST му-
зона. Сделать это можно следуюшим обра-
зом:
1.ПроЦедура переназначения прерываний:
DI ;запрeшаeм прерывания
LD A,DD
LD I,A ;переназначаем вектор
прерывания (рег.I)
IM 2 ;запускаем прерывания второ-
;го рода.
EI ;разрешаем прерывания
RET
2.По адресу DDFF-DEOO (см.выше рег A) за-
носиться адрес проЦедуры обработки преры-
ваний. А по этому адресу помeшаeтся про-
Цедура, которая сохраняет все регистры на
стеке и вызывает оп-int проЦедуру, а пос-
ле этого восстанавливает регистры в об-
ратном порядке. Выглядит это следуюшим
образом:
PUSH ВС ;сохраняем все регистры
PUSH DE ;на стеке
PUSH AF
PUSH HL
PUSH IX
PUSH IY
CALL play ;вызываем проигрыватель
[ CALL ... ]
[ CALL ... ]
РОР IY ;восстанавливаем все рег.
РОР IX ;в обратном порядке
РОР HL ;со стека
РОР AF
РОР DE
РОР ВС
JP 0038h ;переходим на опрос клави-
атуры Васика :).
Вот таким образом выглядит программа
переназначения прерываний. А теперь на-
последок проЦедура эффекта двойного экра-
на:
под адрес, например 42240 загружаем один
экран, а под адрес С000h второй экран и
набираем слeдуюшую проЦедуру:
LD HL,42240
LD DE,16384
LD ВС,6912
LDIR ;Переносим экран из буфера.
L1: LD ВС,7FFDh
LD A,23 ;включаем первый экран
OUT (С),A ;по адресу 4000h
HALT ;даем задержку до int`а
LD A,31
OUT (С),A ;включаем второй экран
HALT
JP L1
END
Двойной экран готов. Теперь для уже
опытных кодеров предлагаю эффект двухэк-
рания+псевдо мультиколора:
DI
L1: LD ВС,7FFDh
LD A,23
OUT (С),A
NOP
: } 7 нулей
NOP
LD A,31
OUT (С),A
NOP
NOP
JP L1
END
И что вы видите ?! Один экран просмат-
риваeтся сквозь другой не моргая !!!
Единственное, что я не смог, так это
синхронизировать этот эффект - линии
слегка косые. А теперь тот же эффект для
бордюра:
DI
L1: LD ВС,FEH
LD A,1
OUT (С),A
.... - 7 пор`ов
LD A,2
OUT (С),A
NOP
NOP
JP L1
END
Полосы тоже плохо синхронизированы, но
хоть не едут !!!
Ну, на этот номер с вас хватит, пeрeй-
дем к следуюшему разделу...
Другие статьи номера:
|
|
|
|
|
|
|
|
|
|
|
|
Coding - Раздeл для начинаюших кодeров.
|
|
|