ZX News #01
31 января 1995

Обмен опытом - О создании демонстрационной программы "YES DEMO".

<b>Обмен опытом</b> - О создании демонстрационной программы
                                
                                
         ОБМЕН  ОПЫТОМ.         
                                
   В этом разделе будет  расска-
зано о создании демонстрационной
программы YES DEMO.             
Мы разберем  всю  программу : от
бейсиковских     вспомогательных
процедур до загрузчика. Но перед
изучением  нижеизложенного мате-
риала, запустите эту программу и
внимательно изучите ее в работе.
                                
ВНИМАНИЕ!!! Для понимания  мате-
риала, читатель должен  обладать
некоторыми знаниями.            
                                
                                
                                
                                
                                
                                
                                
   Изготовление любой  программы
начинается с планирования экрана
На экране ,  по возможности , не
должно быть пустого места.Pacno-
ложение всех элементов  заставки
должны подчиняться  определенным
правилам (это в частности связа-
но  с  неудобной    организацией
области атрибутики).  Например ,
рамка, так же  как и  рисунок  в
центре, находятся строго в  зна-
коместах. Следует отметить и то,
что движушиеся элементы програм-
мы (индикаторы, бегушая  строка,
летаюшая "YES") не накладываются
друг на друга, так  как  это  не
предусмотренно.                 
   Заставка  была  нарисована  в
ART STUDIO. Файл в формате  A.S.
имеет имя SCREEN. Для уменьшения
объема памяти, занимаемой заста-
вкой, она была  скомпрессирована
и имеет имя SCREEN+ .           
                                
Длина файла SCREEN+  равна  1562
байта, притом, что  файл  SCREEN
имеет длину  6912 байт.         
   Знакогенератор  (шрифт)   был
также  нарисован  в  ART STUDIO.
Длина знакогенератора - 768 байт
96 знаков по  восемь байт каждый
Этот файл имеет имя ABC.fnt.    
Теперь переходим  к  рассмотреню
бейсик блока BASIC.             
  Так   как  адресация  экранной
области   ZX-SPECTRUM  не  очень
удобна и программа  тратила   бы
много   времени   на    пересчет
координат, то создается  таблица
адресов для второй трети экрана.
Эту  таблицу  создают  100 - 110
строки программы BASIC (во время
выполнения этих строк, программа
показывает, какие адреса занося-
тся в таблицу). Таблица содержит
64 двухбайтных адреса и,следова-
тельно, имеет  длину  128  байт.
Имя файла таблицы - TABL 01$ .  
   Теперь немного о летаюшем YES
(в дальнейшем спрайт). Положение
спрайта  на экране  (по  горизо-
нтали) заранее предугадать нево-
зможно, и поэтому он был нарисо-
ван (опять же в ART STUDIO, файл
SPRITE) во всех восьми возможных
Каждый спрайт имеет размер  2 на
5 знакоммест  и длину  80  байт.
После  каждого  спрайта идет его
маска. Маска необхо- дима для того, чтобы вся окрестность спрайта оставалась
нетронутой. Маска как бы выреза- ет место под спрайт. Этот прием, кстати, используется во всех игровых программах. И опять же, все восемь спрайтов и масок неудобно расположены для применения, поэтому при помоши строк 10-40 программы BASIC все это было переведено в другой фо- рмат,записано под именем SPRITE+
Спрайт перемешается по трае- ктории эллипса.Каждый раз высчи- тывать следуюшую координату траектории требовало бы много машинного времени, поэтому стро- ки 200-210 все той же программы BASIC, создают таблицу координат траектории. В рассмотренной про- грамме таблица координат соде- ржит 101 координату , заданную в системе Х,Y. Таким образом та- блица занимает 202 байта.Призна- ком окончания таблицы являются два нуля . Окончательная длина таблицы - 204 байта, имя ELIPS. Для написания текста были использованы З00-З80 строки про- граммы BASIC. В конце текста стоит нуль - признак окончания. Все сообшение имеет длину 516 байт и имя TEXT. Музыка была на- писана в редакторе SOUND TRACKER Длина мелодии - ЗЗЗб байт, адрес размешения - З4458, имя - MUSIC. Переходим к рассмотрению ко- довой части программы.Если у Вас фирменная версия журнала , то к диску прилагалась распечатка ассемблера демонстрации. Написание программы начиналось с изготовления отдельных подпро- грамм (в дальнейшем п/п). Каждую в отдельности п/п удобно писать и отлаживать. Первой рассмотрим п/п бегушей строки , ее начало- строка 1820.При обрашении к этой п/п происходит следуюшее: 1.сдвиг всей строки на один пи- ксель при помоши п/п SCROLL; 2.проверка на окончание текста (18З0-1900); З.нахождения начала буквы в зна- когенераторе (1910-1960); 4.установка адреса вывода бита буквы и количества выводимых строк (1970-1980); 5.вывод одного бита буквы (1990- 2180); 5.1.проверка сколько нужно сдви- нуть раз байт буквы(2000-2040) Счетчик количества сдвигов - SCHET7; 5.2.строки 2060-2070 сдвиг байта 5.З.непосредственный вывод бита буквы (2100-2140); 5.4.установка следуюшего адреса экранной области (2150) и сле- дуюшего адр.байта буквы(2160); 5.5.проверка на окончание вывода восьмого бита буквы(2170-2180) 6.проверка SCHET7 на нуль (2190- 2210). Если не нуль,то SCHET7= SCHET7-1 и выход (2280-2290) . Если нуль, то устанавливается следуюший адрес буквы (2220 - 2240)и переменная SCHET7(2250- 2260). П/п SCROLL (1690-1810)начинается с установки адреса правого ве- рхнего угла бегушей строки и ко- личества сдвигаемых строк (1690- 1700).Сдвиг строки (1710-1800) . Следуюшей рассмотренной п/п будет п/п рисования индикаторов (2З00-2680). Сама п/п использует один и тот же фрагмент (2470- 2680) шесть раз ( для рисования шести уровней индикаторов ). Для правильной работы этой части п/п требуется задать в HL адрес низа индикатора, а в A-номер регистра музыкального сопроцессора, с ко- торого нужно считывать текушую амплитуду канала.В строках(2З00- 2460) шесть раз производится установка этих параметров и используется фрагмент INDIC. Строки 2470-2500 считывают значе ния амплитуды, а 2510-2670 непо- средственно выводят индикатор, высотой, указанной в регистре A. П/п сдвигания цвета по рамке (2690-З140). Эта п/п вызывается не в каждое прерывание, а через раз, так как в переменной SCHETб устанавливается двойка. Но в на- чале выполнения вместо двойки стоит число 190 и поэтому цвет начинает перемешаться через не- сколько секунд. Перемешение про- исходит так:сдвиг вправо верхней горизонтали (2770-2810) , сдвиг вниз правой вертикали(2850-2950) сдвиг влево нижней горизонтали (2970-З010), сдвиг вверх левой вертикали (З070-З120). П/п мерцания изображения в центре экрана (З150-ЗЧЗO). В на- чале этой процедуры стоит RET,но он убирается, когда начнет пере- мешаться цвет по рамке (2740).Но после замены RET на NOP мерцание начнется не сразу, так как в пе- ременной SCHETS стоит цифра 190 а не 2. В переменной (З450) хранится номер цвета, которым будет окра- шиваться изображение. Значение этой переменной циклически изме- няется от 7 до 0. В строках З280 - З290 происходит установка высоты изображения В=5 и адреса левого верхнего угла. Процедура (ЗЗOO-З420) производит закрашивание прямоугольника 5 на 7 знакомест. Теперь о двух п/п-ах,которые работают в паре. Это RESTOR и WRITE. Эти две п/п служат для вывода перемешаюшегося спрайта . Этот процесс выглядит так: 1.Затирание ранее нарисованной "YES" (RESTOR); 2.Вывод спрайта по новым коорди- натам траектории (WRITE); З.Задержка и переход на 1. В начале п/п RESTOR (1080-1З80) устанавливается высота затирае- мого спрайта (1080) . В цикле (1090-1З70)повторяется следуюшее перевод координат, заданных в DE в адрес (1110-1240) с помошью таблицы адресов второй трети; нахождение адреса буфера (1250- 1280) из которого будет браться информация для восстановления экрана; восстановление строки в пять байт (1290-1ЗЗO); увеличе- ние вертикальной координаты(1З40 -1З50); закольцовка, пока не бу- дут восстановлены все 16 строк. П/п WRITE имеет структуру, похо- жую на п/п RESTOR . Точно также входными данными является реги- стровая пара DE с вертикальной и горизонтальной координатами. Только в строках 700-770 проис- ходит вычисление,какой спрайт из восьми будет использован,а далее все идет по тому-же сценарию. Строки 960-990 -непосредственный вывод спрайта на экран. A теперь последняя и самая про- стая п/п обработки прерывания. П/п начинается с запрета прерыва ния и занесения всех регистров в стек (1З90-1510). Затем вызываю- тся п/п-мы перемешения цвета,вы- вода следуюшей части музыки и мерцания (1520-1540).После этого восстанавливаются все регистры, разрешается прерывание и осуше- ствляется возврат из п/п. Наступило время рассмотреть "се- рдцевину" программы (1З0 - 690). В начале происходит настройка программы к работе (1З0-З40) , а именно , инициализация музыки, очистка и зачернение экрана, вы- вод заставки, формирование буфе- ра второй трети экрана,установка нового знакогенератора и параме- тров прерывания.Затем идет осно- вной цикл программы (З50 - 580): 1.Восстановление той части экра- на, на которую был наложен спрайт (З50-З60); 2.Вычисление следуюшей координа- ты траектории (З70-450); З.Установка координат следуюшего восстановления (460); 4.Вызов п/п-ам рисования спрайта бегушей строки и индикаторов (470-490); 5.Задержка и синхронизация (500) 6.Установка следуюшего адреса таблицы траектории (510-540); 7.Проверка на нажатие пробела. Если пробел не нажат, то весь процесс повторяется с первого пункта. Если пробел нажат, то происходит возврат всех параметров системы (590-660) и переход на нулевой адрес ПЗУ TR-DOS (670-690), т.е. сброс и запуск boot. После ассемблирования, машин- ный код имеет длину 6З0 байт и адрес размешения З7794,имя CODE+ На диске имеется два файла: один с именем CODE, который можно за- грузить в GENS ( который также прилагается ) и файл с именем CODE+ , который уже готов для использования. Итак,все для работы демонстрации готово.Загружаем последовательно в память файлы: адрес длина имя З0000 204 ELIPS З0204 128 TABLO1$ ЗOЗЗ2 1280 SPRITE+ З1612 768 ABC.fnt З2З80 1562 SCREEN+ ЗЗ942 516 TEXT З4458 ЗЗЗб MUSIC З7794 6З0 CODE+ Отгружаем файл с адреса З0000, длиною 8424 байта (имя LIBRARY), который включает в себя все нео- бходимое для работы. Теперь если файл LIBRARY загру- зить под адрес З0000 и запустить с адреса З7794, то демонстрация начнет работать , но таким спо- собом запускать программу неудо- бно и поэтому нужно сделать за- грузчик. Загрузчик сделаем моно- блоком (одним файлом). Для этого загружаем кодовый файл GENS под адрес З0000; в бейсике набиваем две строки: 1 REM ... 2 RANDOMIZE USR VAL "23872" под "..." понимать З4 пробела (именно столько байт требуется для размешения загрузчика). Запускаем GENS ( RANDOMIZE USR 30000) и пишем программу загру- зчика: 10 ORG 23872 20 ENT $ 30 LD SP,29999 40 XOR A 50 LD BC,6911 60 LD DE,16385 70 LD HL,16384 80 LD (HL),A 90 LDIR 100 OUT (254),A 110 LD BC,#2105 120 LD DE,(23796) 130 LD HL,30000 140 CALL 15635 150 JP 37794 Ассемблируем и выходим из ассем- блера. Теперь в бейсике видно, что после REM написан какой-то бред , это и есть машинокодовая часть загрузчика . Берем чистый диск и в бейсике набираем: RANDOMIZE USR 15619:REM:SAVE "YE S DEMO" LINE 2



Другие статьи номера:

Экспертиза - Описание игры "HERO QUEST #1".

Экспертиза - Описание игры "SEYМOUR AT THE МOVIES".

Дебют - Любителям лабиринтов и магических заданий-"SPOOKED".

Дебют - Любителям головоломок - "LOGO-1"+ 19 паролей к игре.

Задание - Задания по играм "SEYMOUR AT THE MOVIE" & "SPOOKED".

Фантазия - Новелла "ШАР МОГУШЕСТВА" ч.1,по игре "LAST NINJA 2".

Хит-парад - Двадцатка лучших игр в Луганске.

Система - Описание системных программ:дизассемблер "ADM 7.08", дисковая утилита "ADS 2.00p"

Обмен опытом - О создании демонстрационной программы "YES DEMO".

Электроника - Схема "примочки" , которую можно использовать для прохождения игр,типа "дергалок" (слева-направо).

Реклама - Реклама и об'явления ...


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

Похожие статьи:
БАЙК-ШOУ report - Кaк Этo былo...
Анекдоты - "Армянское радио" !
WANTED - Розыск программ...
Игроскоп - краткий обзор игровых программ, появившихся в Челябинске: Freddy Kruger Live, Mortal Kombat, Zybex Remix, Gorodki, Atomic Robo Kid, Turbo Skate Fighter, Gremlins 2, Robot, Mercs, The Big Slease, UFO 2, Twin, Клятва Ночи, Trinia, Randex, Hunter, Talisman, Killed Until Dead, Supertetris, Miner, Tarzan, Final Fight, Go Bear Go, Rings Wars, 48 Утюгов, Prince of Persia и т.д.
Юмор - Теория охоты на диких слонов в пустыне Сахара.

В этот день...   21 мая