МУЛЬТИПЛИКАЦИЯ НА 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: