МУЛЬТИПЛИКАЦИЯ НА SPECTRUM'е  
                                
    Большинство работ на эту    
тему   начинаются  c  объяснения
того,   что  такое  пиксел,  что
такое  атрибут... Начнем сразу c
того,  что  делает  мультипликa-
цию  плавной.  Многие  отмечали,
наверное,    что   в   некоторых
программах  мультипликация более
плавная,  a в некоторых - менее.
Так вот, передвижение объекта по
экрану  выглядит  непрерывным  и
плавным если оно cинхрoнизирoвa-
но c кадровой частотой телевизи-
онного  изображения  -  50  герц
(или  50 полукадров  в  секунду,
т.е.    25   полных   кадров   в
секунду).  B компьютере именно c
этой   частотой   на   процессор
приходит    импульс   прерывания
(вход  MI). Самый простой способ
синхронизации программы, выводя-
щей спрайт на экран, c импульсом
прерывания,   это   использовать
команду процессора HALT, которая
останавливает   его  до  прихода
импульса  на вход  MI  (Maskable
Interrupt - Маскируемое Прерыва-
ние).  B BASIC'е  тот же  эффект
достигается командой PAUSE 1, но
создание    мультипликации    на
BASIC'е - занятие неблагодарное,
не будем пока это рассматривать.
  Если в своей программе вы не  
запретили   прерывания  командой
DI,  и не  включили второй режим
прерывания,  то по  каждому  им-
пульcу MI процессор обращается к
программе  в ПЗУ, выполнение ко-
торой занимает определенное вре-
мя.  При  работе  c  несколькими
спрайтами,  бывает, каждый  такт
процессора  на счету, и так раз-
брасываться его временем не сто-
ит. Вот тут то и выручает второй
режим прерываний, включаемый ко-
мaндoй  IM 2,  который  так  или
иначе используется почти во всех
игровых программах. B этом режи-
ме адрес, по которому передается
управление  по сигналу MI, зада-
ется произвольно. По этому адре-
су  может находиться  процедура,
формирующая изображение на экра-
не, или команда RET, oбеcпечивa-
ющая немедленный возврат к выпо-
лнению команды, следующей за ко-
мaндoй HALT.                    
  Немного подробнее рассмотрим  
правильное включение режима IM2,
т.к. в SPECTRUM'е не реализуются
все  возможности  этого  режима.
Старший  байт адреса таблицы, из
которой будет взят адрес перехо-
да  по сигналу  MI, должен нахо-
диться  в регистре процессора I.
Для  примера,  пусть  это  будет
число #5B:                      
LD  A,#5B                       
LD  I,A                         
   Младший байт адреса берется  
c  шины данных.  Обычно, в цикле
подтверждения   прерывания,   он
бывает  равным  #FF,  но  полной
гарантии,  что там  не  окажется
любое другое число, нет. Поэтому
адрес  перехода может  быть взят
начиная  c #5B00  до #SBFF.  Так
как  число на  шине данных может
оказаться   как  четным,  так  и
нечетным,  необходимо чтобы таб-
лица  переходов состояла из оди-
наковых  байтов,  например  #FE.
Тогда, из любого адреса в диапа-
зоне #5B00-#SBFF могут быть взя-
ты подряд два байта #FE, образу-
ющие адрес обслуживания прерыва-
ния  #FEFE.  Можно  использовать
любой  адрес состоящий  из  двух
одинаковых  байтов (#8080, #CSCS
и  т.п.).  Сформировать  таблицу
переходов можно так:            
LD  HL,#5B00                    
LD  DE,#5B01                    
LD  BC,#0100                    
LD  (HL),#FE ;байт адреса прог- 
              раммы oбcлуживa-  
              ния прерывания.   
LDIR         ;заполнение облас- 
              ти памяти от 5B00 
              до SBFF байтом FE 
                                
     Второй режим прерываний    
используется  не только для син-
хронизации программ выводящих на
экран спрайты, но об этом позже;
давайте сначала разберемся зачем
         спрайту маска.         



Other articles:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
System - Overview of system software: audio editor, Digital Wave v 0. 2
Interview - Interview with the encoder and zhelezyachnikom LD / X-Trade.

В этот день...   21 November