Диалекты бейсика для ZX Spectrum 1992 г.

Laser Basic - Приложения: Операторы и функции Laser Basic; Использование графических переменных .SP1 и .SP2; Листинг программы Spriter; Вызов подпрограмм Laser Basic из машинных кодов; Спецификация файлов пакета Laser Basic.


ПРИЛОЖЕНИЯ

1. Операторы и функции Laser Basic

Таблица 12

Ключевое слово

Действие

Граф. пере-меннме

Адрес п/п

Код

Стр.

Преобразование окна экрана

.iNVV

Инвертирование окна экрана

.ROW

.COL

.HGT

FC38

01

161

.MIRV

Зеркальное отображение окна экрана

FD26

01

161

.MARV

Зеркальное отображение атрибутов окна экрана

LEN

FD32

01

161

.SETV

Установка атрибутов в окне экрана

i

FF9D

01

161

Скроллинг окна экрана

.CLSV

Очистка окна экрана

.ROW .COL .HGT .LEN

FF8B

01

161

.WL1V

Циклический скроллинг окна экрана на 1 пиксель влево

F75C

01

161

.WR1V

Циклический скроллинг окна экрана на 1 пиксель вправо

F757

01

161

.SL1V

Скроллинг окна экрана на 1 пиксель влево

F752

01

161

.SR1V

Скроллинг окна экрана на 1 пиксель вправо

F74D

01

161

.WL4V

Циклический скроллинг окна экрана на 4 пикселя влево

F7A5

01

161

.WR4V

Циклический скроллинг окна экрана на 4 пикселя вправо

F785

01

161

.SL4V

Скроллинг окна экрана на 4 пикселя влево

F773

01

161

Ключевое слово

Действие

Гр«ф. пере-мснныс

АД-

n/ti

код

Crp.

.SR4V

Скроллинг окна экрана на 4 пикселя вправо

.ROW .COL .HGT .LEN

F761

01

161

.WL8V

Циклический скроллинг окна экрана на 8 пикселей влево

F7CB

01

161

.WR8V

Циклический скроллинг окна экрана на 8 пикселей вправо

F7EA

01

161

.SL8V

Скроллинг окна экрана на 8 пикселей влево

F7BA

01

161

.SR8V

Скроллинг окна экрана на 8 пикселей вправо

.ROW .COL .HGT .LEN

F7D7

01

161

.WCRV

Циклический вертикальный скроллинг окна экрана

.ROW

.COL

.HGT

.LEN

.NPX

F65D

0E

162

.SCRV

Вертикальный скроллинг окна экрана

F6CC

0E

162

Скроллинг атрибутов окна экрана

.ATLV

Скроллинг атрибутов окна экрана влево

.ROW .COL .HGT .LEN

F7F5

01

162

. ATRV

Скроллинг атрибутов окна экрана вправо

F818

01

162

. ATUV

Скроллинг атрибутов окна экрана вверх

F82A

01

162

. ATDV

Скроллинг атрибутов окна экрана вниз

F874

01

162

Преобразование спрайтов в памяти

.INVM

Инвертирование спрайта

.SPN

FC3E

13

167

.MIRM

Зеркальное отображение спрайта

FD2C

13

167

.MARM

Зеркальное отображение атрибутов

FD4F

13

167

.SPNM

Поворот спрайта на 90°

.SP1 .SP2

F9DD

168

.DSPM

Увеличение размеров спрайта

FDB3

168

.SETM

Установка атрибутов спрайта

.SPN

FFBB

13

167

.CLSM

Очистка спрайта

FEEA

13

167

Скроллинг спрайтов в памяти

.WL1M

Циклический скроллинг спрайта на 1 пиксель влево

.SPN

F8C7

13

167

.WR1M

Циклический скроллинг спрайта на 1 пиксель вправо

F8CC

13

167

Клиь-чееое слово

Действие

ГР*Ф* пере-

> 1Д1ИИ «А ЯИИЯЯ1яв

AA-rt/ti

Код

Cfp.

.SLIM

Скроллинг спрайта на 1 пиксель влево

.SPN

F891

13

167

.SR1M

Скроллинг спрайта на 1 пиксель вправо

F8B5

13

167

.WL4M

Циклический скроллинг спрайта на 4 пикселя влево

F900

13

167

.WR4M

Циклический скроллинг спрайта на 4 пикселя вправо

F8F7

13

167

.SL4M

Скроллинг спрайта на 4 пикселя влево

F8EE

13

167

.SR4M

Скроллинг спрайта на 4 пикселя вправо

F8E5

13

167

. WL8M

Циклический скроллинг спрайта на 8 пикселей влево

F8DB

13

167

.WR8M

Циклический скроллинг спрайта на 8 пикселей вправо

F8E0

13

167

.SL8M

Скроллинг спрайта на S пикселей влево

F8D1

13

167

.SR8M

Скроллинг спрайта на 8 пикселей вправо

F8D6

13

167

.WCRM

Циклический вертикальный скроллинг спрайта

.SPN .NPX

F94B

17

167

.SCRM

Вертикальный скроллинг спрайта

F91E

17

167

Скроллинг атрибутов спрайтов в памяти

.ATLM

Скроллинг атрибутов спрайта влево

.SPN

FC9F

13

167

.ATRM

Скроллинг атрибутов спрайта вправо

FCAA

13

167

.ATUM

Скроллинг атрибутов спрайта вверх

FCAF

13

167

.ATDM

Скроллинг атрибутов спрайта вниз

FCC8

13

167

Разрешение/запрещение переноса атрибутов

.ATON

Разрешение переноса атрибутов

-

FA05

00

160

.ATOF

Запрещение переноса атрибутов

FAOD

00

160

Перемещения: окно экрана — спрайт

.GTBL

Копирование окна экрана в спрайт

.SPN

.ROW

.COL

F286

33

166

.GTOR

Наложение окна экрана на спрайт по принципу OR

F28E

33

166

.GTXR

Наложение окна экрана на спрайт по принципу XOR

F296

33

166

.GTND

Наложение окна экрана на спрайт по принципу AND

F29E

33

166

7 Зак. № 192

193

слово

Дейспие

Гр*Ф> переменные

A*

n/n

КОД

CTpi

Перемещения: спрайт — окно экрана

.PTBL

Вывод спрайта на экран

.SPN

.ROW

.COL

F2A6

33

160

.PTOR

Наложение спрайта на окно экрана по принципу OR

F2AE

33

164

.PTXR

Наложение спрайта на окно экрана по принципу XOR

F2B6

33

164

.PTND

Наложение спрайта на окно экрана по принципу AND

.SPN

.ROW

.COL

F2BE

33

164

Перемещения: окно экрана — окно спрайта

.GWBL

Копирование окна экрана в окно спрайта

.SPN

.ROW

.COL

.HGT

.LEN

F2C6

2B

166

.GWOR

Наложение окна экрана на окно спрайта по принципу OR

F2CC

2B

166

.GWXR

Наложение окна экрана на окно спрайта по принципу XOR

.SCL .SRW

F2D2

2B

166

.GWND

Наложение окна экрана на окно спрайта по принципу AND

F2D8

2B

166

Перемещения: экран — окно спрайта

.PWBL

Вывод окна спрайта на экран

.SPN .ROW .COL .HGT

F2DE

2B

160

.PWOR

Наложение окна спрайта на экран по принципу OR

F2E4

2B

165

.PWXR

Наложение окна спрайта на экран по принципу XOR

.LEN .SCL .SRW

F2EA

2B

165

.PWND

Наложение окна спрайта на экран по принципу AND

F2F0

2B

165

Перенос атрибутов: экран — спрайт

.GWAT

Перенос атрибутов окна экрана в окно спрайта

.SPN

.ROW

.COL

.HGT

.LEN

.SCL

.SRW

FB4F

2B

166

.PWAT

Перенос атрибутов окна спрайта в окно экрана

FB5A

2B

160

Перемещения: спрайт — окно спрайта

.GMBL

Копирование спрайта в окно другого спрайта

.SP1 .SP2 .SCL .SRW

E985

23

168

Кто-чмое слово

Действие

Греф* пе ре-менные

АД-pec

и/л

Ко*

Crp.

.GMOR

Наложение одного спрайта на окно другого по принципу OR

.SP1 .SP2 .SCL .SRW

E991

23

168

.GMXR

Наложение одного спрайта на окно другого по принципу XOR

E997

23

168

.GMND

Наложение одного спрайта на окно другого по принципу AND

E98B

23

168

.PMBL

Копирование окна спрайта в другой спрайт

E99D

23

168

.PMOR

Наложение окна спрайта на другой спрайт по принципу OR

E9A9

23

168

.PMXR

Наложение окна спрайта на другой спрайт по принципу XOR

E9AF

23

168

.PMND

Наложение окна спрайта на другой спрайт по принципу AND

E9A3

23

168

Перенос атрибутов: спрайт — спрайт

.GMAT

Перенос атрибутов спрайта в окно другого спрайта

.SP1 .SP2 .SCL .SRW

FC28

23

168

.РМАТ

Перенос атрибутов окна спрайта в другой спрайт

FC33

23

168

Перемещение спрайта по экрану

.MOVE

Перемещение спрайта

.SP1

.SP2

.ROW

.COL

.HGT

.LEN

165

Операции с областью спрайт-файла

.ISPR

Создание спрайта заданных размеров (понижается нижняя граница спрайт-файла)

.SPN .HGT .LEN

EC43

2B

171

.SPRT

Создание спрайта заданных размеров (повышается верхняя граница спрайт-файла)

EC48

2B

171

.DSPR

Уничтожение спрайта (повышается нижняя граница спрайт-файла)

.SPN

FE80

13

171

.WSPR

Уничтожение спрайта (понижается верхняя граница спрайт-файла)

F52F

13

171

.RLCT

Перемещение спрайт-файла в памяти

.MLN

-

-

172

Ключевое слова

Действие

Граф. переменные

AA-pec

ft/fl

Код

Crp.

Вспомогательные графические операторы и функции

.ADJM

Настройка переменных .HGT и .LEN для спрайта

.SPN

.ROW

.COL

EBF7

33

172

.ADJV

Настройка переменных .HGT и .LEN для окна экрана

.ROW .COL .HGT .LEN

EC11

01

172

?SCV

Проверка знакоместа на включенные пиксели

.ROW .COL

172

?SCM

Проверка спрайта на включенные пиксели

.SPN

172

?TST

Определение существования спрайта

-

-

173

Сервисные операторы

?KBF

Проверка клавиши на нажатие

.ROW .COL

174

?РЕК

16-битовая версия РЕЕК

-

-

-

175

.POKE

16-битовая версия РОКЕ

-

-

-

175

.RNUM

Перенумерация строк

-

-

-

175

.REMK

Удаление ремарок

-

-

-

175

.TRON

Включение трассировки

-

-

-

175

.TROF

Выключение трассировки

-

-

-

175

2. Использование графических переменных .SP1 и .SP2

Таблица 13

Оператор

Переменная

.GMBL .GMOR .GMXR .GMND

.PMBL .PMOR .PMXR .PMND

.SPNM

.DSPM

<5P1

откуда

куда

откуда

куда

SP2

куда

откуда

куда

откуда

217 GO TO 250

218 .SET=2:.LEN=k:.HGT=h:.INVV: BEEP .01,30 220 IF INKEY$<>"" THEN GO TO 220

230 .INVV: GO TO 70

250 LET e=USR 15619: REM : SAVE a$CODE s,g

260 IF NOT e THEN GO TO 70

270 LET a$="File not saved": GO TO 2050

300 FOR i=1 TO LEN a$: IF a$(i)<"0" OR a$(i)>"9" THEN GO TO 70 310 NEXT i: LET m=VAL a$: IF m<=0 OR m>255 THEN GO TO 70 320 LET n=m

500 .SET=2:.SPN=n:.LEN=k:.HGT=h:.INVV: BEEP .01,30:.INVV: GO TO 70 1000 POKE 23658,0: CLS : PRINT AT 3,6;"Tape or Disk? (T/D)" 1010 PAUSE 0: IF INKEY$="t" THEN CLS : LET d=1: GO TO 1040 1020 IF INKEY$<>"d" THEN GO TO 1010 1030 LET d=0

1040 CLS : BEEP .005,30: RETURN

2000 IF a$="" THEN GO TO 70

2010 IF d THEN LOAD a$CODE z,x: GO TO 70

2020 LET e=USR 15619: REM : LOAD a$CODE z,x

2030 IF NOT e THEN GO TO 70

2040 LET a$="Fife not found"

2050 LET i=2

2060 PRINT #1 ;AT 1,0; INK i; FLASH 1;a$: BEEP 1,3: PAUSE 100: GO TO 70 3000 INK 7: PAPER 0: BORDER 0: CLEAR 29999: GO SUB 1000 3010 IF d THEN LOAD "LASOBJ"CODE : LOAD "LASLOBJ"CODE : RANDOMIZE USR 62464: LOAD "GRAPH"CODE : GO TO 20 3020 LET e=USR 15619: REM : LOAD "LASOBJ"CODE 3030 IF NOT e THEN LET e=USR 15619: REM : LOAD "LASLOBJ"CODE 3040 IF NOT e THEN RANDOMIZE USR 62464: LET e=USR 15619: REM :

LOAD "GRAPH"CODE 3050 IF NOT e THEN GO TO 20

3060 PRINT #1 ;AT 1,0; INK 2; FLASH 1;"Loading error": BEEP 1,3: PAUSE 100: STOP

Программа сохраняется оператором SAVE "SPRITER" LINE 3000

На магнитном носителе нслел за файлом "SPRITER" должны быть записаны следующие кодовые файлы: "LASOBJ", "LASLOBJ" и "GRAPH" (см. Приложение 5).

3. Листинг программы Spriter63

О REM © Pifer Ud. Автор П. Карпов 10 GO SUB 1000

20 POKE 56575,0: CLS : LET h=1: LET k=1: LET n=1: RANDOMIZE

USR 58841: GO TO 30 30 .SET=1 :.ROW=0:.COL=0:.HGT=22:.LEN=32 40 .SET=2:. ROW=0:.COL=0:. SPN= 1 50 .SET=3:.ROW=22:.COL=0:.HGT=2:.LEN=32 60 INPUT "Screen name? "; LINE a$: LET z=16384: LET x=6912:

GO TO 2000 70 LET s=?PEK62464: LET g=56575-s

80 .SET=3:.SETV:.CLSV: PRINT #1 ;AT 0,0;".SPN=";n;" .LEN=";k;"

.HGT=";h"'Start: ";s;" Lenght: ";g 90 .SET=1

100 PAUSE 0: LET a=CODE INKEY$: GO TO 100+a*(a=98 OR a=99 OR a=100 OR з=103 OR a=108 OR a=110 OR a=112 OR a=115 OR a=118 OR a>52 AND a<57 OR a=8 AND k>1 OR a=9 AND k<32 OR a=10 AND h<22 OR a=11 AND h>1)

108 LET k=k—1: GO TO 500

109 LET k=k+1: GO TO 500

110 LET h=h+1: GO TO 500

111 LET h=h—1: GO TO 500

153 .WL8V: .ATLV: GO TO 500

154 .NPX=—8:.WCRV:. ATDV: GO TO 500

155 .NPX=8:.WCRV.-.ATUV: GO TO 500

156 ,WR8V:.ATRV: GO TO 500

198 STOP

199 GO TO 60

200 .SET=2: LET e=?TST: IF NOT e THEN LET a$="Sprite not found" :.LEN=k:.HGT=h: GO TO 2050

201 .DSPR: LET a$="Sprite deleted": LET i=4: GO TO 2060

203 .SET=2: LET e=?TST: IF NOT e THEN .LEN=k:.HGT=h:.ISPR:.GTBL: LET a$="Sprite gotten": LET i=4: GO TO 2060

204 LET a$="Sprite exist": GO TO 2050

208 INPUT "Starting address? ";z: IF z<30000 OR z>56574 THEN GO TO 70

209 ,POKE62464,z: LET x=56575-z: INPUT "Sprite name? "; LINE a$: GO TO 2000

210 INPUT ".SPN="; LINE a$: IF a$="" THEN GO TO 70

211 GO TO 300

212 .SET=2: LET e=?TST: IF NOT e THEN LET a$="Sprite not found":.LEN=k:.HGT=h: GO TO 2050

213 .PTBL: GO TO 500

215 INPUT "Spritefile name? "; LINE a$: IF a$="" OR NOT g THEN GO TO 70

216 IF d THEN SAVE a$CODE s,g: GO TO 70

4. Вызов подпрограмм Laser Basic из машинных кодов64

Интерпретатор Laser Basic можно использовать в качестве пакета рабочих процедур при написании программ в кодах. Адреса процедур Laser Basic хранятся в памяти в виде таблицы, начинающейся с адреса #EC4D65. В ней на каждый оператор отводится 8 байт. Первые 4 байта — имя оператора, следующие 2 байта — собственно адрес, 7-й байт — код типа команды, последний байт — порядковый номер оператора в таблице.

Графические переменные хранятся в виде наборов (.SET). На каждый набор отводится 12 байт, начиная с адреса #Е7СВ (59339). Адрес конкретного набора вычисляет подпрограмма #Е96Е. Перед обращением к ней в регистр А заносится номер набора (0...15)66, а в HL подпрограмма возвращает требуемый адрес (его лучше представлять через регистровую пару IX).

LD А,<номер набора>

CALL #Е96Е

PUSH HL

POP IX

Переменные в каждом наборе располагаются

в следующей пос-

ледовательности:

1Х+0

младший байт .MLN

IX+6

.SRW

1Х+1

старший байт .MLN

IX+7

.SCL

IX+2

.ROW

IX+8

.NPX

1Х+3

.COL

IX+9

.SPN

IX+4

.LEN

IX + 10

.SP1

IX+5

.HGT

IX + 1 1

.SP2

В табл. 12 (Приложение 1) и табл. 14 приведена вся необходимая информация для непосредственного обращения к подпрограммам Laser Basic. В первой таблице находим интересующий оператор и определяем адрес процедуры и код типа команды, по которому из второй таблицы узнаем способ обращения к данной процедуре. Например, нам нужно выполнить оператор .SETV. В табл. 12 находим адрес — #FF9D, код операции — #01. Из табл. 14 узнаем, что перед обращением к подпрограмме регистры В, С, Н и L должны быть загружены, соответственно, значениями .ROW, .COL, .HGT и .LEN Кроме того, поскольку оператор .SETV работает с атрибутами, предварительно нужно занести (если требуется, конечно) в системную переменную AITRP (23693) байт атрибутов. После по го можно вызвать подпрограмму, которая установит атрибуты в заданном окне Выглядит тто, например, так.

10 LD А, %01101001 ; задаем INK 5, PAPER 1, BRIGHT 1

20 LD (23693), A 30 ;

40 ;загружаем регистры значениями ,ROW=1, .COL=7, .HGT=4, .LEN—5

50 LD B, 1

60 LD C, 7

70 LD H, 4

80 LD L, 5

90 CALL #FF9D ; выполняем оператор .SETV

Таблица 14. Загрузка регистров процессора при обращении к процедурам Laser Basic.

Иод оператора

Соответствие: регистры — переменные

00

-

01

B=.ROW, C=.COL, H=.HGT, L=.LEN

A=.NPX, B=.ROW, C=.COL, H=.HGT, L=.LEN

>13

A=.SPN

17

A=.SPN, B=.NPX

B=.SP1, C=.SP2

23

B=.SP2, C=.SP1, D=.SRW, E=.SCL

33

A=.SPNf B=.ROW, C=.COL

5. Спецификация файлов пакета Laser Basic67

Таблица 15

Название

Ими файла

Т..............

Тип файла

Длина

Адрес загрузки

Диспетчер

LASER

BASIC

7540

-

Интерпретатор

LASOBJ

CODE

3642

58820

LASLOBJ

CODE

1024

62464

GRAPH

CODE

3072

62464

Спрайт-файлы для интерпретатора

SPRITE2A

CODE

5062

51513

SPRITE2B

CODE

6271

50304

Им* фонда

Тип файла

Длмьне

Адре*

загрузим

Генератор спрайтов

SPTGEN

BASIC

20751

-

CODE

CODE

3000

49898

Спрайт-файлы

для генератора спрайтов

SPRITE 1А

N. ARRAY

1288

-

SPRITE 1А

CODE

5062

60218

SPRITE 1А

CODE

6

23307

SPRITE IB

N. ARRAY

1288

-

SPRITE IB

CODE

6272

59009

SPRITE 1В

CODE

6

23307

Демонстрационные программы

DEMO

BASIC

358

-

SCREEN

CODE

6912

16384

SPRITES

CODE

6852

49723

BASIC

BASIC

23790

-

GAME

BASIC

352

-

SCREEN

CODE

6912

16384

SPRITES

CODE

2795

53780

INVADER

BASIC

15330

-

Компилятор

COMPCODE

CODE

3057

59800

Загрузчик

откомпилированных

программ

LOADER

BASIC

223

-

RTCODE

CODE

5736

59800




СОДЕРЖАНИЕ:
  1. Laser Basic - Вывод спрайтов на экран; Вывод на экран части спрайта; Перенос атрибутов; Преобразование окна экрана; Наборы переменных; Перемещение спрайтов; Наложение спрайтов; Копирование изображения с экрана в спрайт; Преобразование спрайтов; Скроллинг пейзажа; Изменение размеров области спрайт-файла; Вспомогательные графические операторы и функции; Определение столкновений спрайтов; Сервисные операторы и функции; Процедуры; Загрузка и запись программ.


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Юмор - школьные истории.
Интервью - и все же дрочит!
От автора - Кто сделал этот выпуск журнала.
Игры - Коментарии к некоторым играм: Черный ворон.
Spectrum pressa - ZX-Power #04, Black Crown #03, Born Dead #10...

В этот день...   28 марта