|
+===------------=========-----------====+ | 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й- дем к следуюшему разделу...
Other articles:
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November