|
МУЛЬТИПЛИКАЦИЯ НА 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:
В этот день... 21 November