ПРИЛОЖЕНИЯ
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 |
1С |
168 |
|
.DSPM |
Увеличение размеров спрайта |
FDB3 |
1С |
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 А,<номер набора>
|
Переменные в каждом наборе располагаются |
в следующей пос- |
||
|
ледовательности: |
|||
|
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
90 CALL #FF9D ; выполняем оператор .SETV
Таблица 14. Загрузка регистров процессора при обращении к процедурам Laser Basic.
|
Иод оператора |
Соответствие: регистры — переменные |
|
00 |
- |
|
01 |
B=.ROW, C=.COL, H=.HGT, L=.LEN |
|
0Е |
A=.NPX, B=.ROW, C=.COL, H=.HGT, L=.LEN |
|
>13 |
A=.SPN |
|
17 |
A=.SPN, B=.NPX |
|
1С |
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 |