Экран высокого цветового разрешения
© Александр Кунгуров, п. Нижний Архыз, (КЧР), 1994.
В РЕВЮ-93 № 9-10 на стр.198 Киселев Д. рассматривает вопрос о возможности компьютера "Балтик" работать с экраном высокого раз решения по атрибутам. Думаю, что предложение использовать для этой цели экран по адресу 16384 - не состоятельно: этот экран не только "сорит" в буфере принтера, но и захватывает область системных переменных и еще свыше 4 Кбайт области Бейсика. Возможно, авторы "Балтика" полагали переписать операционную систему (ОС), сдвинув служебные области в более старшие адреса. Но это уже был бы не " Spectrum".
Другой вариант: если у "Балтика" вывод 3 микросхемы D17 оторвать от "земли" и подать на нее "1", как это делается в "Spectrum-128", то получится еще 4 экрана. Два из них - по адресам 32768 и 49152, с высоким разрешением по атрибутам. Но, используя их, мы тут же потеряем совместимость с другими типами "Spectrum" и работать с этими экранами придется из ассемблера. ОС их не поддерживает.
Предлагаю третий вариант: доработать "Балтик" согласно рис.1 (см. на следующей странице).
В этом случае графический экран всегда остается на своем стандартном месте, то есть по адресу 16384. А файл атрибутов программно или вручную может быть переключен со своего стандартного места - 22528 и размера -768 байтов (далее "L-файл"), на адрес 55296 и размер 6144 ("Н-файл"). При такой организации, программа должна иметь два файла атрибутов - L-файл и Н-файл. Это обеспечивает совместимость по атрибутам низкого разрешения с другими типами "Spectrum". Необходимость же иметь L-файл заставляет нас делать картинку в обычном графическом редакторе, а затем - дорабатывать L-файл до Н-файла в специальном редакторе, например, в предлагаемом ниже "HART". Хотя, если эта система выживет, в будущем возможен и обратный вариант, то есть доработка Н-файла до L-файла. Но для этого нужно еще написать редактор типа "ARTSTUDIO" для картинок с высоким раз решением.
Доработка по рис.1 рассчитана на "Балтик", с памятью, расширенной до 128 Кбайт. Для обычных 48К -компьютеров из схемы надо удалить D1'.1 и D3'.2, а D3'.1 заменить на ЛИ1. Серия микросхем может быть 155, 555, 531 и т.д. Программное включение Н-файла из Бейсика: OUT 126,16. Включение L-файла: OUT 126,0.
Редактор высокого разрешения "H-ART" позволяет загружать стандартный экран, транслировать L-файл в Н-файл, сохранять промежуточные версии Н-файла в буфере. Работа в редакторе заключается в подведении курсора к нужному месту, заданию курсору требуемого цвета и впечатыванию его в Н-файл.
D1M ЛН1
CHSCR (TMS128K)
D26/4
-D17/3
-D18/13
D41 К155ТМ8
Н-любой свободный триггер порта #7Е
D47/14 (DO) D47/15 (D1)
D47/7
D4M ЛЛ1 |
j] |
|
1 |
1 |
|
|
' |
— |
1К
ь |
|
|
1 " |
- +5В
о 4 "L1
А
Рис. 1
Директивы "H-ART". 5, 6, 7, 8 - клавиши управления курсором. 0 - печать курсора.
In - установка цвета курсора (n-0.. .7) - INK. Pn - установка цвета курсора (n=0.. .7) - PAPER. В - вкл/выкл BRIGHT. F - вкл/выкл FLASH. S - переключение скорости курсора. N - вкл/выкл непрерывной печати курсора.
С - графический экран с L-файлом копируется по адресу 48384. Затем, вместе с Н-файлом сохраняется на
магнитофоне в виде одного файла.
Т0 - трансляция L-файла в Н-файл.
D0 - пересылка Н-файла в буфер.
I0 - пересылка содержимого буфера в Н-файл.
Q0 - выход из режима редактирования Н-файла.
В последних четырех директивах "0" вводится для утверждения директивы. Ввод любого другого символа отменяет директиву.
Таким образом, мы можем создавать картинки высокого разрешения по атрибутам или дорабатывать до высокого разрешения старые картинки. Но этого мало. Для полноты счастья, необходима возможность делать игры в высоком разрешении и, по возможности, в Бейсике. Бейсик не поддерживает Н-файл, но зато он поддерживает L-файл. И, если делать обрамление в высоком разрешении, а игровое поле - в низком, то нам остается, не затрудняясь вычислениями, тупо перекачивать атрибуты из L-файла в Н-файл. Либо, после каждого движения на экране, либо, если игра идет в постоянных атрибутах, после каждой смены картинки, обращаясь для этого к одной и той же подпрограмме. Для создания таких подпрограмм предназначена приведенная ниже программа "L-H SUBR".
"L-H SUBR" генерирует подпрограмму, призванную быстро транслировать атрибуты из L-файла в Н-файл в окна заданных размеров. бенерация подпрограммы всегда производится по адресу 40000, но адреса в ней создаются для работы согласно запрашиваемому "L-H SUBR" реальному адресу загрузки. В подпрограмме может быть определено до 64-х окон с номерами 0.63. По окончании работы, "L-H SUBR" сообщает, кроме параметров подпрограммы, адрес SCR_NUM ячейки памяти, в которую записывается номер текущего окна. Из Бейсика менять окна можно с помощью оператора POKE SCR_NUM,n, где n - номер окна. Длина подпрограммы зависит от числа определенных окон, вернее от номера старшего определенного окна, и находится в пределах 136.388 байтов. Скорость работы подпрограммы почти линейно зависти от числа транслируемых знакомест экрана. При числе знакомест, равном 768 (весь экран, хотя это и бессмысленно) трансляция атрибутов происходит за 0.06 сек, что приемлемо при создании динамических игр. Запуск подпрограммы из Бейсика: RANDOMIZE USR ADR, где ADR -реальный адрес загрузки. К сведению: SCR_NUM=ADR+131. Окна, вернее их описания, занимая каждое - по 4 байта, располагаются с адреса ADR+132. В описании окна последовательно записываются параметры окна в знакоместах: высота окна; ширина окна; координата Y верхнего левого угла окна, по отношению к левому верхнему углу экрана; координата X, определяемая так же (как в Бейсике).
Таким образом, эта система становится доступной и для тех, кто работает только на Бейсике. Но у владельцев "Балтиков" с памятью, расширенной до 128К, будут трудности. Ведь Н-файл окажется на 7-й странице ОЗУ и придется из ассемблера заниматься переключением страниц. Мало этого - придется адаптировать программы, написанные для компьютеров с 48К памятью. Включение режима "48К" в этом случае проблемы не решает. Наиболее приемлемо - доработать компьютер согласно рис.2.
Такая доработка может быть полезна и для других типов компьютеров, поскольку, кроме Н-файла, в текущей странице оказываются и экран - 1, и теневое ОЗУ. При этом экраном - 1 можно управлять через порт #7FFD. А, при использовании в качестве ОС "TURBO-90", появляется возможность, выходить из "зависших" программ с помощью кнопки сброса, не "вылетая" в ПЗУ 128К.
Теперь - листинги программ, о которых рассказывалось выше.
От расширителя памяти А14'—- -
А15'-CAS0-CAS 1-
-А14" -А15'
-CAS О -CAS 1
10
13
A14"(ROM)
Рис. 2 Программа "H-ART".
От регистра TMS расширителя памяти
А14' (ROM) +5В
REM H-ART Kungurov A.N. LOAD "H-ART"CODE BORDER 5: PAPER 5: INK
63,0: DRAW 0,10 62,0: DRAW 0,10
- LOAD L-screen
10 15 20 30
40 50 60 70 90 100 110 120 130 140 150 160 170 180 190 200
PRINT AT 2,12; DRAW -64, 0 PLOT 97,150: DRAW PLOT 99,14 9: DRAW PRINT AT 12,4;" 1 PRINT AT 14,4;" 3 LET a$=" PLOT 31,39 PLOT 33,38 PLOT 35,37
13,4;" 2 15,4;" 4 ": PRINT DRAW 0,-4 9:
- SAVE H-screen
RANDOMIZE USR b$ CODE 16384:
55296,6144: GO TO 20 48384,13056: GO TO 20 Старт программы происходит с начальной Бейсик - строки. Прежде всего, после старта, загружается кодовый блок "H-ART" CODE 61440, 560. Вот его шестнадцатеричный дамп с контрольными суммами:
0,49: DRAW 193,0: 192,0: DRAW 0,4 9 191,0: DRAW 0,4 9 LET a$=INKEY$: IF a$="" THEN GO TO 130 IF a$<"1" OR a$>"4" THEN GO TO 130 LET a=180+10*VAL a$: GO TO a INPUT "L-screen name - ";b$: RETURN INPUT "H-screen name - ";c$: RETURN INPUT "(L+H)-screen name -";d$: RETURN GO SUB 160: LOAD b$ CODE 16384: GO SUB 160: GO SUB 170: LOAD 61440: GO TO 20 GO SUB 170: SAVE c$ GO SUB 180: SAVE d$ 0: DRAW 0,-10:
PAPER 6;"H -ART.": PLOT 95,151: DRAW 0,10: DRAW
- LOAD L & H screens"
- SAVE (L+H)-screen" AT 11,4;a$;AT 16,4 ;a$ DRAW -193,0
CODE CODE
F000 |
F3 |
CD |
D0 |
F1 |
CD |
91 |
F1 |
32 |
F2 |
F008 |
35 |
F2 |
CD |
FF |
F1 |
3A |
35 |
F2 |
3D |
F010 |
FE |
30 |
CA |
0B |
F1 |
FE |
35 |
CA |
F1 |
F018 |
13 |
F1 |
FE |
36 |
CA |
3B |
F1 |
FE |
34 |
F020 |
37 |
CA |
4F |
F1 |
FE |
38 |
CA |
2E |
7F |
61440: GO TO 20 LOAD c$ CODE 552 96:
F028 |
F1 |
CB |
AF |
FE |
46 |
28 |
30 |
FE |
1D |
F030 |
42 |
28 |
47 |
FE |
4E |
CA |
80 |
F1 |
58 |
F038 |
FE |
50 |
28 |
4D |
FE |
49 |
28 |
57 |
B1 |
F040 |
FE |
54 |
28 |
5B |
FE |
44 |
CA |
C0 |
D1 |
F048 |
F0 |
FE |
55 |
CA |
E0 |
F0 |
FE |
43 |
56 |
F050 |
CA |
5F |
F1 |
FE |
53 |
CA |
F1 |
F0 |
56 |
F058 |
FE |
51 |
CA |
03 |
F1 |
18 |
A5 |
3A |
4C |
F060 |
2F |
F2 |
CB |
7F |
28 |
04 |
CB |
BF |
71 |
F068 |
18 |
02 |
CB |
FF |
32 |
2F |
F2 |
CD |
5C |
F070 |
6E |
F1 |
CD |
D7 |
F1 |
CD |
A7 |
F1 |
B9 |
F078 |
18 |
8A |
3A |
2F |
F2 |
CB |
77 |
28 |
CF |
F080 |
04 |
CB |
B7 |
18 |
E7 |
CB |
F7 |
18 |
CF |
F088 |
E3 |
CD |
B1 |
F1 |
CB |
21 |
CB |
21 |
A2 |
F090 |
CB |
21 |
E 6 |
C7 |
B1 |
18 |
D5 |
CD |
84 |
F098 |
B1 |
F1 |
E 6 |
F8 |
B1 |
18 |
CD |
CD |
6B |
F0A0 |
23 |
F2 |
11 |
00 |
58 |
21 |
00 |
D8 |
07 |
F0A8 |
3E |
03 |
32 |
33 |
F2 |
CD |
DC |
F1 |
CA |
F0B0 |
3E |
07 |
84 |
67 |
3A |
33 |
F2 |
3D |
6C |
F0B8 |
CA |
04 |
F0 |
32 |
33 |
F2 |
18 |
ED |
C2 |
F0C0 |
CD |
6E |
F1 |
CD |
FA |
F1 |
CD |
23 |
84 |
F0C8 |
F2 |
21 |
00 |
D8 |
11 |
00 |
A0 |
01 |
55 |
F0D0 |
00 |
18 |
ED |
B0 |
CD |
6E |
F1 |
CD |
6E |
F0D8 |
D7 |
F1 |
CD |
A7 |
F1 |
C3 |
04 |
F0 |
AC |
F0E0 |
CD |
6E |
F1 |
CD |
FA |
F1 |
CD |
23 |
A4 |
F0E8 |
F2 |
21 |
00 |
A0 |
11 |
00 |
D8 |
18 |
8C |
F0F0 |
DE |
3A |
00 |
F2 |
FE |
60 |
28 |
07 |
77 |
F0F8 |
3E |
60 |
32 |
00 |
F2 |
18 |
DB |
3E |
DB |
F100 |
10 |
18 |
F7 |
CD |
23 |
F2 |
CD |
A7 |
66 |
F108 |
F1 |
FB |
C9 |
3A |
2F |
F2 |
32 |
30 |
6B |
F110 |
F2 |
18 |
C7 |
CD |
09 |
F2 |
FE |
00 |
98 |
F118 |
28 |
10 |
3D |
CB |
27 |
CB |
27 |
CB |
2D |
F120 |
27 |
32 |
31 |
F2 |
CD |
D0 |
F1 |
C3 |
DE |
F128 |
04 |
F0 |
3E |
F8 |
18 |
F3 |
CD |
09 |
24 |
F130 |
F2 |
FE |
1F |
28 |
03 |
3C |
18 |
E3 |
92 |
F138 |
AF |
18 |
E 6 |
CD |
19 |
F2 |
FE |
00 |
AC |
F140 |
28 |
09 |
3A |
32 |
F2 |
3D |
32 |
32 |
61 |
F148 |
F2 |
18 |
D9 |
3E |
BF |
18 |
F7 |
CD |
F5 |
F150 |
19 |
F2 |
FE |
BF |
28 |
06 |
3A |
32 |
A3 |
F158 |
F2 |
3C |
18 |
EA |
AF |
18 |
E7 |
21 |
48 |
F160 |
00 |
40 |
11 |
00 |
BD |
01 |
00 |
1B |
7B |
F168 |
ED |
B0 |
CD |
A7 |
F1 |
C9 |
3A |
32 |
90 |
F170 |
F2 |
47 |
3A |
31 |
F2 |
4F |
3E |
BF |
43 |
F178 |
CD |
AC |
22 |
3E |
98 |
84 |
67 |
C9 |
8E |
F180 |
3A |
34 |
F2 |
FE |
00 |
20 |
07 |
2F |
25 |
F188 |
32 |
34 |
F2 |
C3 |
DA |
F0 |
AF |
18 |
25 |
F190 |
F7 |
21 |
3B |
5C |
CB |
AE |
3E |
FF |
E 6 |
F198 |
32 |
00 |
5C |
E5 |
FF |
E1 |
AF |
CB |
56 |
F1A0 |
6E |
28 |
F8 |
3A |
08 |
5C |
C9 |
21 |
A7 |
F1A8 |
6A |
00 |
11 |
2C |
01 |
CD |
B5 |
03 |
C6 |
F1B0 |
C9 |
CD |
91 |
F1 |
47 |
3A |
35 |
F2 |
61 |
F1B8 |
B8 |
28 |
F 6 |
78 |
0E |
80 |
CD |
01 |
53 |
F1C0 |
F2 |
D 6 |
30 |
DA |
04 |
F0 |
FE |
08 |
7D |
F1C8 |
D2 |
04 |
F0 |
4F |
3A |
2F |
F2 |
C9 |
F2 |
F1D0 |
CD |
6E |
F1 |
7E |
32 |
30 |
F2 |
3A |
F9 |
F1D8 |
2F |
F2 |
77 |
C9 |
06 |
00 |
22 |
36 |
88 |
F1E0 |
F2 |
0E |
08 |
1A |
77 |
24 |
0D |
20 |
BB |
F1E8 |
FB |
13 |
2A |
36 |
F2 |
23 |
05 |
20 |
81 |
F1F0 |
ED |
C9 |
3A |
34 |
F2 |
FE |
00 |
28 |
1D |
F1F8 |
01 |
C9 |
3A |
30 |
F2 |
77 |
C9 |
0E |
5D |
F200 |
60 |
06 |
FF |
10 |
FE |
0D |
20 |
F9 |
8B |
F208 |
C9 |
CD |
6E |
F1 |
CD |
F2 |
F1 |
3A |
D9 |
F210 |
31 |
F2 |
CB |
3F |
CB |
3F |
CB |
3F |
43 |
F218 |
C9 |
CD |
6E |
F1 |
CD |
F2 |
F1 |
3A |
E9 |
F220 |
32 |
F2 |
C9 |
CD |
B1 |
F1 |
AF |
B9 |
D 6 |
F228 | 20 01 C9 E1 C3 04 F0 A2 | 3E Для тех, кто привык работать в ассемблере, приводим текст кодового блока программы "H-ART", набранный в формате "GENS-4'":
ORG |
#F000 |
ENT |
$ |
DI |
|
CALL |
PCUR |
CALL |
KEY |
LD |
(CK),A |
CALL |
WAIT |
LD |
A,(CK) |
CP |
#30 |
JP |
Z,PRINT |
CP |
#35 |
JP |
Z,LEFT |
CP |
#36 |
JP |
Z,DOWN |
CP |
#37 |
JP |
Z, UP |
CP |
#38 |
JP |
Z,RIGHT |
RES |
5,A |
CP |
#46 |
JR |
Z,FLASH |
CP |
#42 |
JR |
Z,BRIGHT |
CP |
#4E |
JP |
Z, NPR |
CP |
#50 |
JR |
Z,PAPER |
CP |
#49 |
JR |
Z, INK |
CP |
#54 |
JR |
Z,TRANS |
CP |
#44 |
JP |
Z,INBUF |
CP |
#55 |
JP |
Z,OFFBUF |
CP |
#43 |
JP |
Z,COPY |
CP |
#53 |
JP |
Z,SPEED |
CP |
#51 |
JP |
Z,QUIT |
JR |
SCAN |
LD |
A,(CUR) |
BIT |
7,A |
JR |
Z, FL |
RES |
7,A |
JR |
EFL |
SET |
7,A |
LD |
(CUR),A |
CALL |
SCUR |
CALL |
PCN |
CALL |
BEEP |
JR |
SCAN |
LD |
A,(CUR) |
BIT |
6,A |
JR |
Z, BR |
RES |
6,A |
JR |
EFL |
SET |
6,A |
OR |
EFL |
CALL |
COL |
|
SLA |
С |
|
SLA |
С |
|
SLA |
С |
|
AND |
#C7 |
|
OR |
С |
|
JR |
EFL |
INK |
CALL |
COL |
|
AND |
#F8 |
|
OR |
С |
|
JR |
EFL |
TRANS |
CALL |
CCOL |
|
LD |
DE,#5800 |
|
LD |
HL,#D800 |
|
LD |
A,3 |
|
LD |
(NS),A |
NSEC |
CALL |
TRS |
|
LD |
A,7 |
|
ADD |
A, H |
|
LD |
H, A |
|
LD |
A,(NS) |
|
DEC |
A |
|
JP |
Z,SCAN |
|
LD |
(NS),A |
|
JR |
NSEC |
INBUF |
CALL |
SCUR |
|
CALL |
PBN |
|
CALL |
CCOL |
|
LD |
HL,#D800 |
|
LD |
DE,#A000 |
BUF |
LD |
BC,#1800 |
|
LDIR |
|
|
CALL |
SCUR |
|
CALL |
PCN |
BFA |
CALL |
BEEP |
|
JP |
SCAN |
OFFBUF |
CALL |
SCUR |
|
CALL |
PBN |
|
CALL |
CCOL |
|
LD |
HL,#A000 |
|
LD |
DE,#D800 |
|
JR |
BUF |
SPEED |
LD |
A,(WAIT+1) |
|
CP |
#60 |
|
JR |
Z, SPD |
|
LD |
A, #60 |
SD |
LD |
(WAIT+1),A |
|
JR |
BFA |
SPD |
LD |
A, #10 |
|
JR |
SD |
QUIT |
CALL |
CCOL |
|
CALL |
BEEP |
El |
RET |
|
PRINT |
LD |
A,(CUR) |
|
LD |
(BYTE),A |
|
JR |
BFA |
LEFT |
CALL |
WX |
|
CP |
0 |
|
JR |
Z, RS |
|
DEC |
A |
RBYT |
SLA |
A |
|
SLA |
A |
|
SLA |
A |
XBYT |
LD |
(XCUR),A |
SBYT |
CALL |
PCUR |
|
JP |
SCAN |
RS |
LD |
A, #F8 |
|
OR |
XBYT |
RIGHT |
CALL |
WX |
|
CP |
#1F |
|
OR |
Z, LS |
|
INC |
A |
|
OR |
RBYT |
LS |
XOR |
A |
|
OR |
XBYT |
DOWN |
CALL |
WY |
|
CP |
0 |
|
OR |
Z, TS |
|
LD |
A,(YCUR) |
|
DEC |
A |
YBYT |
LD |
(YCUR),A |
|
OR |
SBYT |
TS |
LD |
A, #BF |
|
OR |
YBYT |
UP |
CALL |
WY |
|
CP |
#BF |
|
OR |
Z, LOS |
|
LD |
A,(YCUR) |
|
INC |
A |
|
OR |
YBYT |
LOS |
XOR |
A |
|
OR |
YBYT |
COPY |
LD |
HL,#4000 |
|
LD |
DE,#BD00 |
|
LD |
BC,#1B00 |
|
LDIR |
|
|
CALL |
BEEP |
|
RET |
|
SCUR |
LD |
A,(YCUR) |
|
LD |
B, A |
|
LD |
A,(XCUR) |
|
LD |
C,A |
|
LD |
A, #BF |
|
CALL |
#22AC |
|
LD |
A,#98 |
|
ADD |
A, H |
|
LD |
H, A |
|
RET |
|
NPR |
LD |
A, (NP) |
|
CP |
0 |
|
OR |
NZ,DPR |
|
CPL |
|
EPR |
LD |
(NP) , A |
|
JP |
BFA |
DPR |
XOR |
A |
|
OR |
EPR |
KEY |
LD |
HL, #5C3B |
|
RES |
5,(HL) |
|
LD |
A, #FF |
|
LD |
(#5C00),A |
KW |
PUSH |
HL |
|
RST |
#38 |
|
POP |
HL |
|
XOR |
A |
|
BIT |
5,(HL) |
|
OR |
Z, KW |
|
LD |
A, (#5C08) |
|
RET |
|
BEEP |
LD |
HL,# 6A |
|
LD |
|
CALL |
|
RET |
COL |
CALL |
|
LD |
|
LD |
|
CP |
|
OR |
|
LD |
|
LD |
|
CALL |
|
SUB |
|
CP |
|
CP |
|
JP |
|
LD |
|
LD |
|
RET |
PCUR |
CALL |
|
LD |
|
LD |
PCN |
LD |
|
LD |
|
RET |
TRS |
LD |
NSP |
LD |
|
LD |
|
LD |
SPO |
LD |
|
INC |
|
DEC |
|
OR |
|
INC |
|
LD |
|
INC |
|
DEC |
|
OR |
|
RET |
PBYT |
LD |
|
CP |
|
OR |
|
RET |
PBN |
LD |
|
LD |
|
RET |
WAIT |
LD |
TIME |
LD |
TM |
DJNZ |
|
DEC |
|
JR |
|
RET |
WX |
CALL |
|
CALL |
|
LD |
|
SRL |
|
SRL |
|
SRL |
|
RET |
WY |
CALL |
|
CALL |
|
LD |
|
RET |
CCOL |
CALL |
|
XOR |
DE,#12C #3B5
KEY
B, A
A,(CK) В
Z, COL А, В
C, #80 TIME #30
C,SCAN 8
NC,SCAN C,A
A,(CUR)
SCUR A,(HL) (BYTE),A
A, (CUR) (HL),A
B, 0
(SCR),HL
C,8
A,(DE) (HL),A H С
NZ,SPO DE
HL, (SCR)
HL
В
NZ,NSP
A, (NP)
0
Z, PBN
A, (BYTE) (HL),A
C,#60
B, #FF TM
С
NZ,TIME
SCUR
PBYT
A,(XCUR)
A
A
A
SCUR PBYT A,(YOJR)
COL A
|
CP |
С |
|
OR |
nz,e: |
|
RET |
|
ENTR |
POP |
HL |
|
JP |
SCAN |
CUR |
DEFB |
#A2 |
BYTE |
DEFB |
0 |
XCUR |
DEFB |
0 |
YCUR |
DEFB |
0 |
NS |
DEFB |
0 |
NP |
DEFB |
0 |
CK |
DEFB |
0 |
SCR |
DEFW |
0 |
10 REM L-H window subroutine
2 0 CLS : PRINT AT 2,4; PAPER 5;
30 LET a$=" "
4 0 PRINT AT 1,4; PAPER 5;a$;AT 3,4;a$
DRAW 0,25: DRAW 193,0: DRAW 0,-25: DRAW -193,0
DRAW 0,2 5 DRAW 0,2 5 DRAW 0,2 5 adr
LET k=0: PRINT AT 11,9;"Please wait..."
TO 9
DRAW 192,0 DRAW 191,0 DRAW 190,0
FLASH 1;"Error at line - ";200+n: BEEP .2,20:
50 PLOT 31,143 60 PLOT 33,142 70 PLOT 35,141 80 PLOT 37,140 90 INPUT "Real address 100 RESTORE 110 FOR n=1 120 LET s=0 130 FOR m=1 TO 16 14 0 READ a: POKE 4 0000+k,a 150 LET k=k+1: LET s=s+a 160 NEXT m
170 READ a: IF s<>a THEN GO TO 200 180 NEXT n 190 GO TO 210
2 00 PRINT AT 11,7; INK 2; PAPER 4;
BEEP .2,20: BEEP .2,20: STOP 2 01 DATA 243,245,197,213,229,58,131,0,203,39,203,39,95,175,87,33,2190
202 DATA 132,0,25,17,127,0,1,4,0,237,176,42,129,0,235,205,1330
203 DATA 58,0,58,129,0,60,50,129,0,58,127,0,61,50,127,0,907
2 04 DATA 254,0,32,231,225,209,193,241,251,201,123,230,24,198,64,103,2579 2 05 DATA 62,152,132,103,123,230,7,15,15,15,130,111,34,125,0,123,1377
206 DATA 230,24,203,63,203,63,203,63,246,88,103,123,230,7,183,31,20 63
207 DATA 31,31,31,130,111,235,58,128,0,79,42,125,0,229,6,8,1244
208 DATA 26,119,36,5,32,251,225,35,19,13,32,241,201,0,0,0,1235 2 0 9 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
210 FOR n=1 TO 12
220 READ a: LET a=a+40000: LET b=PEEK a: RANDOMIZE adr+b 230 LET c=PEEK 23670: LET d=PEEK 23671 240 POKE a,c: POKE a+1,d 250 NEXT n
260 DATA 6,16,20,28,32,35,39,42,46,77,103,107
Программа "L-H SUBR":
Kungurov A.N. INK 2;" L-H window subroutine.
27 0 BEEP 1,20: PRINT AT 11,9;" 2
LET mw=0
2 90 INPUT "Number of window - ";a 300 LET a=INT a: IF a<0 OR a>63 THEN GO TO 270 310 IF mw<a THEN LET mw=a 320 LET aw=40132+a*4 330 INPUT "X - ";x: LET x=INT x: 34 0 INPUT "Y - ";y: LET y=INT y: 350 INPUT "Width - ";sx: LET sx =ABS (INT sx): IF x+sx>31 THEN GO TO 350 360 INPUT "Height - ";sy: LET s y=ABS (INT sy): IF y+sy>23 THEN GO TO 3 60 37 0 POKE aw,sy: POKE aw+1,sx: POKE aw+2,y: POKE aw+3,x 380 PRINT INK 2;a; INK 0;"-";x;",";y;",";sx;"*";sy, 390 INPUT "Go on ? ";a$
400 IF a$="" OR a$="y" OR a$="Y" THEN GO TO 290
";AT 5,4;"Description of windows:"
IF x<0 OR x>30 THEN GO TO 330 IF y<0 OR y>22 THEN GO TO 340
LET size=132+(mw+l)*4 SAVE "L-H SUbr."CODE 40000,size CLS : PRINT "Address of subroutine PRINT ''"Address of byte SCR_NUM -PRINT ''"Lenght of subroutine - ";
PRINT ''"Number of screens - "; INK 2;mw+1 PRINT ''"Current screen - "; INK 2,-PEEK 40131
Текст кодового блока, формируемого программой "L-H SUBR", набранный в формате "GENS-4":
410 420 430 440 450 460 470
- "; INK 2;adr '; INK 2;adr+131 INK 2, size
ORG |
50000 |
ENT |
$ |
DI |
|
PUSH |
AF |
PUSH |
ВС |
PUSH |
DE |
PUSH |
HL |
LD |
A, (ANW) |
SLA |
A |
SLA |
A |
LD |
E,A |
XOR |
A |
LD |
D,A |
LD |
HL,WIND |
ADD |
HL, DE |
LD |
DE,SYV |
LD |
BC, 4 |
LDIR |
|
LD |
HL,(YV) |
EX |
DE, HL |
CALL |
STR |
LD |
A, (YV) |
INC |
A |
LD |
(YV),A |
LD |
A, (SYV) |
DEC |
A |
LD |
(SYV),A |
CP |
0 |
JR |
NZ,NSTR |
POP |
HL |
POP |
DE |
POP |
BC |
POP |
AF |
EI |
|
RET |
|
LD |
A, E |
AND |
#18 |
ADD |
A, #40 |
LD |
H, A |
LD |
A,#98 |
ADD |
A, H |
LD |
H, A |
LD |
A, E |
AND |
7 |
RRCA |
|
RRCA |
|
RRCA |
|
ADD |
A, D |
LD |
L,A |
LD |
(HADR) , HL |
LD |
A, E |
AND |
#18 |
SRL |
A |
SRL |
A |
SRL |
A |
OR |
#58 |
|
LD |
H, A |
|
LD |
A, E |
|
AND |
7 |
|
OR |
A |
|
RRA |
|
|
RRA |
|
|
RRA |
|
|
RRA |
|
|
ADD |
A, D |
|
LD |
L,A |
|
EX |
DE, HL |
|
LD |
A, (SXV) |
|
LD |
c, A |
|
LD |
HL,(HADR) |
NPL |
PUSH |
HL |
|
LD |
B, 8 |
|
LD |
A,(DE) |
PL |
LD |
(HL),A |
|
INC |
H |
|
DEC |
В |
|
JR |
NZ,PL |
|
POP |
HL |
|
INC |
HL |
|
INC |
DE |
|
DEC |
С |
|
JR |
NZ,NPL |
|
RET |
|
HADR |
DEFW |
0 |
SYV |
DEFB |
0 |
SXV |
DEFB |
0 |
YV |
DEFB |
0 |
XV |
DEFB |
0 |
ANW |
DEFB |
0 |
WIND |
DEFB |
0 |