Как написать игру для ZX Spectrum на ассемблере



         

СОЗДАНИЕ ЗВУКОВЫХ ЭФФЕКТОВ - часть 7


Чтобы любую процедуру было удобно вызывать даже из Бейсика, не имеющего ни малейшего представления о метках ассемблерного текста, применим распространенный прием, часто используемый в таких случаях и которым мы однажды уже воспользовались (см. программу ) - вставим в самом начале программы в машинных кодах ряд инструкций «длинного» перехода (JP) с указанием адресов каждой из «внешних», то есть вызываемых из другой программы, процедур. Тогда адреса обращения к любой из них будут увеличиваться с шагов в 3 байта (размер команды JP). Таким образом, наш пакет процедур будет выглядеть так:

ORG 60000 ; 60000 - включение второго режима прерываний JP IMON ; 60003 - переход к подпрограмме выключения 2-го режима прерываний JP IMOFF ; 60006 - включение эффекта1 JP ONEFF1 ; 60009 - включение эффекта2 ONEFF2 LD HL,EFF2 LD A,5 JR ONEFF ONEFF1 LD HL,EFF1 LD A,3 ONEFF LD (ADREFF),HL LD (CURADR),HL LD (REPEAT),A RET ; Блоки данных эффектов

; Инициализация второго режима прерываний

; Выключение второго режима прерываний

; Процедура обработки прерываний

А вот фрагмент программы на Бейсике, демонстрирующий использование приведенных звуковых эффектов:

10 INK 5: PAPER 0: BORDER 0: CLEAR 59999 20 RANDOMIZE : LET x=INT (RND*30)+1: LET y=INT (RND*20)+1 30 LET dx=1: IF RND>=.5 THEN LET dx=-1 40 LET dy=1: IF RND>=.5 THEN LET dy=-1 50 INK 2: PLOT 0,0: DRAW 255,0: DRAW 0,175: DRAW -255,0: DRAW 0,-175: INK 5 60 RANDOMIZE USR 60000 100 PRINT AT y,x; INK 8; OVER 1;"O": LET x1=x: LET y1=y: PAUSE 3 110 IF x=0 OR x=31 THEN RANDOMIZE USR 60006: LET dx=-dx 120 IF y=0 OR y=21 THEN RANDOMIZE USR 60009: LET dy=-dy 130 LET x=x+dx: LET y=y+dy 140 IF INKEY$<>"" THEN GO TO 200 150 PRINT AT y1,x1; INK 8; OVER 1;"O": GO TO 100 200 RANDOMIZE USR 60003

После запуска этой программки экран окрасится в черный цвет, по краю его будет нарисована рамка и в случайном месте возникнет шарик, который начнет метаться из стороны в сторону, отскакивая от «стенок». При соприкосновении с преградами будет раздаваться протяжный вибрирующий звук, причем разный в зависимости от того, в горизонтальную или в вертикальную «стенку» ударился мячик. Для остановки программы достаточно нажать любую клавишу.




Содержание  Назад  Вперед