|
Этюды - Хочу поддержать конкурс, предложенный Сергеем Колотовым и предлагаю свою программу печати символа во весь экран.
|
ЭТЮДЫ
ЭТЮДЫ
© Павел Старков, г. Красноярск
Хочу поддержать конкурс, предложенный Сергеем Колотовым из г. Шардинска (ZX РЕВЮ 95/4) и предлагаю в раздел "Этюды" свою программу печати символа во весь экран.
Для первого варианта перед вызовом процедуры в регистре A должен быть задан код символа, в D - атрибут "фона", а в E -атрибут "тона". Сама процедура занимает 60 байтов.
ORG |
40000 |
LD |
A, 127 |
LD |
DE,#0878 |
CALL |
PRINT |
RET |
|
LD |
L, A |
LD |
H, 0 |
ADD |
HL, HL |
ADD |
HL, HL |
ADD |
HL, HL |
LD |
BC, (23606) |
ADD |
HL, BC |
LD |
IX,22528 |
LD |
B, 8 |
LD |
C, 3 |
PUSH |
BC |
LD |
A, (HL) |
LD |
C,128 |
RLA |
|
LD |
B, D |
JR |
NC, PR4 |
LD |
B, E |
LD |
(IX+0),B |
LD |
(IX+1),B |
LD |
(IX+2),B |
LD |
(IX+3),B |
INC |
IX |
INC |
IX |
INC |
IX |
INC |
IX |
RR |
C |
JR |
NC,PR3 |
POP |
BC |
DEC |
C |
JR |
NZ,PR2 |
INC |
HL |
DJNZ |
PR1 |
RET |
|
Второй вариант немного проще и короче. Перед вызовом процедуры в A задаётся код символа, а в C - атрибут, которым будет напечатан символ. "Фон" всегда будет чёрным. Длина программы 47 байтов.
ORG |
40000 |
LD |
A, 127 |
LD |
C, #7B |
CALL |
PRINT |
RET |
|
LD |
L, A |
LD |
H, 0 |
ADD |
HL, HL |
ADD |
HL, HL |
ADD |
HL, HL |
LD |
DE, (23606) |
ЭТЮДЫ
ADD HL, DE
LD DE,22528
EX DE, HL
LD B, 8
PUSH BC
LD B, 3
PUSH BC
LD A, (DE)
LD B, 8
PUSH BC RLA
JR C,PR4
LD C, 0
LD B, 4
LD (HL), C
INC HL
DJNZ PR5
POP BC
DJNZ PR3
POP BC
DJNZ PR2
POP BC
INC DE
DJNZ PR1 RET
Далее. Процедура перемножения регистров B и C и перенесение результата в HL:
LD HL,0
L1 PUSH BC
LD B, 0
ADD HL, BC
POP BC
DJNZ L1 RET
Эта процедура не портит никаких регистров, кроме B, C, H и L и занимает 11 байт. Другой вариант дополнительно использует регистровую пару DE, но длина этой подпрограммы короче - 9 байтов:
LD HL,0
LD D, H
LD E, C
L1 ADD HL, DE
DJNZ L1 RET
© Евгений Куликаев, р.п. Муромцево, Омская область, 1996
Идея написания этих двух процедур возникла при разламывании игры "DEFENDERS OF THE CROWN". В ней после загрузки и появления меню, по бордюру пробегают три цветные полосы снизу вверх. Эта подпрограмма располагается с адреса 48520 и занимает 145 байт! Так усложнить программу может только "профессиональный программист". В моей программе можно менять число полос, их ширину и скорость движения при простом алгоритме работы. В строке 40 число подбирается опытным путём и зависит от количества полос и ваших требований. В строках 180-190 задаются цвета полос и их очередность. Цифра 8 в строке 200 является маркером конца. 1; (C) Hacker John, 1996
2; |
The |
Border Effect N1 |
10 |
|
ORG |
50000 |
20 |
|
ENT |
$ |
30 |
L3 |
LD |
HL,DATA |
40 |
L2 |
LD |
B,93 |
50 |
L1 |
LD |
A,(HL) |
60 |
|
OUT |
(#FE),A |
70 |
|
DJNZ |
L1 |
80 |
|
INC |
HL |
ЭТЮДЫ
90 |
LD |
A, (HL) |
100 |
CP |
8 |
110 |
JR |
NZ, L2 |
120 |
LD |
HL,DATA |
130 |
LD |
A, #7F |
140 |
IN |
A,(#FE) |
150 |
RRA |
|
160 |
JR |
C, L3 |
170 |
RET |
|
18 0 DATA |
DEFB |
6,5,4,3 |
190 |
DEFB |
7,3,4,5 |
200 |
DEFB |
8 |
;Маркер конца
Чтобы полосы стояли на одном месте, необходимо добавить строку 115 HALT. В строке 40 число подбирается экспериментально. Ширина полос зависит от их количества в строках 180-190.
Вторая программа создаёт на бордюре цветные движущиеся прямоугольники и позволяет получать интересные эффекты путём изменения числа в строке 40.
10; (C) |
Hacker John |
, 1996 |
20; The |
Border Effect N2 |
30 |
ORG |
50000 |
40 |
ENT |
$ |
50 L3 |
LD |
C,0 |
60 L2 |
LD |
B,22 6 |
70 L1 |
LD |
A,B |
80 |
OUT |
(#FE),A |
90 |
DJNZ |
L1 |
100 |
DEC |
C |
110 |
JR |
NZ, L2 |
120 |
LD |
A, #7F |
130 |
IN |
A,(#FE) |
140 |
RRA |
|
150 |
JR |
C, L3 |
160 |
RET |
|
У меня есть вопрос к читателям ZX РЕВЮ. Как в скрытой части INSULT MEGADEMO на бордюре получаются такие эффекты? (ИФК: читайте в следующем номере большую статью про MULTICOLOR)
© Дмитрий Булавин, Самара, 1995
Предложенная Дмитрием программа сжимает экран по горизонтали в 2 раза.
1; (C) |
Дмитрий Булавин, 19 95 |
2 |
ORG |
40000 |
3 |
ENT |
$ |
4 |
LD |
HL,16384 |
5 |
LD |
DE,16384 |
6 |
LD |
BC,6144 |
7 LOOP |
PUSH |
BC |
8 |
LD |
A, (DE) |
9 |
LD |
B, A |
10 |
RLCA |
|
11 |
OR |
B |
12 |
RLCA |
|
13 |
RL |
(HL) |
14 |
RLCA |
|
15 |
RLCA |
|
16 |
RL |
(HL) |
17 |
RLCA |
|
18 |
RLCA |
|
19 |
RL |
(HL) |
20 |
RLCA |
|
21 |
RLCA |
|
22 |
RL |
(HL) |
23 |
POP |
BC |
ZX-РЕВЮ 96/3 ЭТЮДЫ
24 |
DEC |
BC |
25 |
LD |
A, B |
26 |
OR |
C |
27 |
RET |
Z |
28 |
LD |
A, C |
29 |
AND |
31 |
30 |
CP |
0 |
31 |
JR |
NZ,NEXT |
32 |
LD |
H, D |
33 |
LD |
L, E |
34 NEXT |
INC |
DE |
35 |
BIT |
0, C |
36 |
JR |
NZ,LOOP |
37 |
INC |
HL |
38 |
JR |
LOOP |
Эта программа имеет один маленький недостаток. После сжатия изображения в правой части экрана остается часть несжатого изображения. Для исключения этого недостатка необходимо после строки 8 записать дополнительно операторы:
PUSH AF XOR A LD (DE),A
POP AF
Данные операторы стирают старое изображение с экрана.
Следующая программа также сжимает изображение, однако, на этот раз по вертикали.
10; |
(C) |
Дмитрий : |
Булавин, 1995 |
20 |
|
|
ORG |
41000 |
30 |
|
|
ENT |
$ |
40 |
|
|
LD |
HL,16384 |
50 |
|
|
LD |
DE,16384 |
60 |
|
|
LD |
C,96 |
70 NEXT_ |
L |
PUSH |
HL |
80 |
|
|
PUSH |
DE |
90 |
|
|
LD |
B, 32 |
100 |
LOOP |
LD |
A,(HL) |
110 |
|
|
INC |
H |
120 |
|
|
OR |
(HL) |
130 |
|
|
LD |
(DE) , A |
140 |
|
|
DEC |
H |
150 |
|
|
INC |
HL |
160 |
|
|
INC |
DE |
170 |
|
|
DJNZ |
LOOP |
180 |
|
|
POP |
DE |
190 |
|
|
POP |
HL |
200 |
|
|
INC |
D |
210 |
|
|
INC |
H |
220 |
|
|
INC |
H |
230 |
|
|
DEC |
C |
240 |
|
|
RET |
Z |
250 |
|
|
LD |
A, C |
260 |
|
|
AND |
3 |
270 |
|
|
CP |
0 |
280 |
|
|
JR |
NZ,NEXT L |
290 |
|
|
PUSH |
DE |
300 |
|
|
LD |
DE,63520 |
310 |
|
|
ADD |
HL, DE |
320 |
|
|
POP |
DE |
330 |
|
|
LD |
A, C |
340 |
|
|
AND |
7 |
350 |
|
|
CP |
0 |
360 |
|
|
JR |
NZ,NEXT L |
370 |
|
|
PUSH |
HL |
380 |
|
|
LD |
HL,63520 |
ЭТЮДЫ
390 |
ADD |
HL, DE |
|
400 |
EX |
DE, HL |
|
410 |
POP |
HL |
|
420 |
LD |
A, C |
|
430 |
AND |
31 |
|
440 |
CP |
0 |
|
450 |
JR |
NZ,NEXT |
L |
460 |
LD |
A, H |
|
470 |
ADD |
A, 7 |
|
480 |
LD |
H, A |
|
490 |
LD |
A, C |
|
500 |
CP |
32 |
|
510 |
JR |
NZ,NEXT |
L |
520 |
LD |
A, D |
|
530 |
ADD |
A, 7 |
|
540 |
LD |
D, A |
|
550 |
JR |
NEXT L |
|
Для стирания старого изображения в программу можно добавить следующие строки:
101 |
PUSH |
AF |
|
102 |
XOR |
A |
|
103 |
LD |
(HL) |
,A |
104 |
POP |
AF |
|
121 |
PUSH |
AF |
|
122 |
XOR |
A |
|
123 |
LD |
(HL) |
,A |
124 |
POP |
AF |
|
Следующие две программы посвящены системе TR-DOS. Впрочем, предоставим слово нашему корреспонденту:
© Гайнутдинов Рустам (GREEN VALLEY GROUP), Татарстан, 1995
В последнее время стало появляться много программ, которые контролируют наличие диска (например, Jemmini Commander). Меня это заинтересовало, и через некоторое время я "вытащил" данную процедуру. Вот её листинг:
1 ORG 30000
2 CALL 3435
3 LD A, 2
4 CALL 5633
5 CALL DISKPR
6 CALL TEST
7 LD (TT + 1) , A
8 AGAIN LD C,3
9 LD A, 1
10 CALL #3D13
11 CALL TEST
12 LD (SS+1),A
13 TT LD A,0
14 SS CP 0
15 JR NZ,NODISK
16 JR AGAIN
17 TEST LD A,195
18 LD (23746),A
19 LD HL,ERR
20 LD (23747),HL
21 LD IX,#2FC1
22 CALL DOS 2 3 LD A, 8
24 LD C,31
25 LD IX,#2A53
26 CALL DOS
27 LD (ERR+1),SP
28 LD DE,0
ZX-РЕВЮ 96/3 ЭТЮДЫ
29 |
|
LD |
IX,#2740 |
30 |
|
CALL |
DOS |
31 |
ERR |
LD |
SP,0 |
32 |
|
LD |
IX,#1FF3 |
33 |
|
CALL |
DOS |
34 |
|
LD |
IX,#1FEB |
35 |
|
CALL |
DOS |
36 |
|
LD |
IX,#2 FC1 |
37 |
|
CALL |
DOS |
38 |
|
LD |
A,201 |
39 |
|
LD |
(23746),A |
40 |
|
LD |
A,(23757) |
41 |
|
AND |
64 |
42 |
|
RET |
|
43 |
DOS |
PUSH |
IX |
44 |
|
JP |
#3D2F |
45 |
NODISK |
LD |
HL,TXT1 |
46 |
|
CALL |
PRINT |
47 |
|
RET |
|
48 |
DISKPR |
LD |
HL,TXT |
49 |
|
CALL |
PRINT |
50 |
|
RET |
|
51 |
PRINT |
LD |
A,(HL) |
52 |
|
CP |
255 |
53 |
|
RET |
Z |
54 |
|
RST |
16 |
55 |
|
INC |
HL |
56 |
|
JR |
PRINT |
57 |
TXT |
DEFB |
22,10,8 |
58 |
|
DEFM |
" DISK PRESENT " |
59 |
|
DEFB |
255 |
60 |
TXT1 |
DEFB |
22,10,8 |
61 |
|
DEFM |
"DISK NOT PRESENT" |
62 |
|
DEFB |
255 |
После того как наберёте программу:
1). Вставьте диск и запустите программу, появится сообщение "DISK PRESENT";
2). Выньте диск - появится сообщение "DISK NOT PRESENT" после чего произойдёт возврат в BASIC.
Теперь о том, как прочесть содержание регистра состояния. Идею я взял из книги А. Ларченко и Н. Родионова "ZX-Spectrum & TR-DOS для пользователей и программистов. (ИФК: Для более точного понимания принципа работы этой программы приведём выдержку из книги:
"Программа чтения регистра состояний микроконтроллера находится по адресу 16179 (16169). Однако прежде чем её использовать, необходимо выполнить ряд действий: в регистр дорожки микроконтроллера записать 0, в регистр сектора - #0A, а в регистр D микропроцессора записать 1. Считанный регистр состояний возвращается в регистре B микропроцессора. Ниже показан алгоритм считывания регистра состояний:
1. Записать 0 в регистр дорожки;
2. Записать #0A в регистр сектора;
3. Записать 1 в регистр D;
4. Вызвать подпрограмму по адресу 16179 (16169);
5. Взять из регистра B значение регистра состояний;
6. Восстановить в регистрах дорожки и сектора исходные значения.")
А теперь программа предложенная Рустамом:
10 ORG 50000
20 LD C,#3F
3 0 XOR A
40 LD IX,#2A53
50 CALL DOS
ZX-РЕВЮ 96/3 ЭТЮДЫ
60 |
LD |
C, #5F |
70 |
LD |
A, 10 |
80 |
LD |
IX,#2A53 |
90 |
CALL |
DOS |
100 |
LD |
D,1 |
110 |
LD |
IX,#3F33 |
120 |
CALL |
DOS |
130 |
LD |
A, B |
140 |
RET |
|
150 DOS |
PUSH |
IX |
160 |
JP |
#3D2 F |
После выполнения данной программы в регистре A будет значение регистра состояния.
© Куликов Вадим, Сарань, 1995
Эти процедуры обеспечивают сдвиг содержимого экранной области на один пиксель вверх (SRL_UP) или вниз (SRL_DN).
1; (C) Куликов Вадим, 19 95
10 |
ORG |
#A0 0 0 |
20 SRL UP |
LD |
DE,#4000 |
30 |
LD |
H, D |
40 |
LD |
L, E |
50 |
INC |
H |
60 |
LD |
BC,#2 0C0 |
70 UP S1 |
PUSH |
BC |
80 |
PUSH |
HL |
90 UP S2 |
LD |
A,(HL) |
100 |
LD |
(DE) , A |
110 |
INC |
HL |
120 |
INC |
DE |
130 |
DJNZ |
UP S2 |
140 |
POP |
DE |
150 |
LD |
H, D |
160 |
LD |
L, E |
170 |
INC |
H |
180 |
LD |
A, H |
190 |
AND |
#7 |
200 |
JR |
NZ,NXT U |
210 |
LD |
BC,#00E0 |
220 |
SBC |
HL, BC |
230 |
LD |
A, H |
240 |
AND |
#7 |
250 |
JR |
Z , NXT_U |
260 |
LD |
BC,#0700 |
270 |
SBC |
HL, BC |
280 NXT U |
POP |
BC |
290 |
DEC |
C |
300 |
RET |
Z |
310 |
JR |
UP S1 |
1; (C) Куликов Вадим, 1995 |
10 |
ORG |
#A0 0 0 |
20 |
LD |
DE,#57E0 |
30 |
LD |
H, D |
40 |
LD |
L, E |
50 |
DEC |
H |
60 |
LD |
BC,#2 0C0 |
7 0 DN S1 |
PUSH |
BC |
80 |
PUSH |
HL |
90 DN S2 |
LD |
A,(HL) |
100 |
LD |
(DE) , A |
110 |
INC |
HL |
120 |
INC |
DE |
130 |
DJNZ |
DN_S2 |
140 |
POP |
DE |
150 |
LD |
H, D |
160 |
LD |
L, E |
170 |
LD |
A, H |
180 |
DEC |
H |
190 |
AND |
#7 |
200 |
JR |
NZ,NXT D |
210 |
LD |
BC,#00E0 |
220 |
ADD |
HL, BC |
230 |
LD |
A, H |
240 |
AND |
#7 |
250 |
JR |
NZ,NXT D |
260 |
LD |
BC,#0700 |
270 |
ADD |
HL, BC |
280 NXT D |
POP |
BC |
290 |
DEC |
C |
300 |
RET |
Z |
310 |
JR |
DN_S1 |
В строке,20 в обеих процедурах, в регистровую пару DE загружается адрес верхнего левого или нижнего левого, соответственно, угла экрана. В строке 60 в BC загружается размер экранной области. Причем в регистр B загружается размер экрана по "Х",в знакоместах, а в регистр C, размер экрана по "Y" в пикселях. В строках 190,200 и 240,250 анализируется переход через треть экрана и через знакоместо соответственно.
© Жильцов Алексей, Углич, 1995
Хочу предложить несколько своих программ в раздел "Этюды". Это короткие процедуры вычисления произведения HL=B*C.
Mul_1 LD L, B
LD B, 8
XOR A RR L
L1 JR NC, L2
ADD A, C L2 RRA
RR L
DJNZ L1 LD H, A
RET
Длина 16 байт, максимальная длительность выполнения Тм=328 м.т.
Mul_2 LD L, B
LD B, 9
XOR A L1 RR L
DEC B
RET Z
JR NC,L2
ADD A, C L2 RRA
LD H, A
JR L1
Длина 15 байт, Тм=430 м.т. Короче предыдущей процедуры на 1 байт, зато медленнее на
25%.
Mul_3 |
LD |
L, 0 |
|
LD |
H, B |
|
LD |
B, L |
|
LD |
A, 8 |
L1 |
ADD |
HL, HL |
|
JR |
NC, L2 |
|
ADD |
HL, BC |
L2 |
DEC |
A |
NZ, L1
Длина 14 байт, Тм=387 м.т. Реализован другой алгоритм по сравнению с Mul_1 и Mul_2. И, наконец, самая короткая процедура, занимающая всего 11 байт:
Mul 4 |
XOR |
A |
|
SBC |
HL, HL |
|
LD |
D, A |
|
OR |
B |
|
RET |
Z |
|
LD |
E, C |
L1 |
ADD |
HL, DE |
|
DJNZ |
L1 |
|
RET |
|
Длина 11 байт, Тм=6161 м.т.
Очевидно, что последнюю процедуру не стоит использовать для активных математических вычислений вследствие её низкого быстродействия. В некоторых же случаях (при гарантии, что B <=8-10) скорость процедуры сравнима с тремя другими. При пониженных требованиях к быстродействию, эта процедура даже предпочтительней других по причине своей крайней примитивной простоты.
ИФК: Дмитрий Крапивин (Goblin Graphics) из г. Арзамас прислал свой вариант процедуры, увиденной им в "Boot Cobra".
ORG |
40000 |
ENT |
|
CALL |
FORM |
HALT |
|
XOR |
A |
OUT |
(254),A |
LD |
HL,#4800 |
CALL |
JUMP |
LD |
HL,#5000 |
CALL |
JUMP |
LD |
HL,#5800 |
CALL |
JUMP |
LD |
HL, TAB |
LD |
(T3+1),SP |
LD |
SP, TAB1 |
LD |
A, 16 |
POP |
DE |
LDI |
|
LDI |
|
POP |
DE |
LDI |
|
LDI |
|
DEC |
A |
JR |
NZ, M2 |
LD |
SP, 0 |
LD |
B, 8 |
LD |
HL, TAB |
LD |
A, (HL) |
OR |
A |
RRCA |
|
LD |
(HL),A |
INC |
HL |
LD |
(HL),A |
INC |
HL |
LD |
A,(HL) |
OR |
A |
RLCA |
|
LD |
(HL),A |
INC |
HL |
LD |
(HL),A |
INC |
HL |
LD |
A,(HL) |
OR |
A |
RRCA |
|
LD |
(HL),A |
INC |
HL |
LD |
(HL),A |
INC |
HL |
LD |
A, (HL) |
OR |
A |
RLCA |
|
LD |
(HL),A |
INC |
HL |
LD |
(HL),A |
INC |
HL |
DJNZ |
M1 |
LD |
A, 1 |
OUT |
(254) ,A |
LD |
A, 127 |
IN |
A, (254) |
RRA |
|
JR |
C, T1 |
RET |
|
LD |
( 0) , SP |
LD |
SP, HL |
JP |
25000 |
---FORMER---
LD |
IX,TAB1 |
LD |
HL,25000 |
LD |
B, 8 |
|
LD |
C,4 |
|
LD |
A, 2 |
|
LD |
(HL) |
, #D9 |
INC |
HL |
|
LD |
(HL) |
,1 |
INC |
HL |
|
LD |
(IX) |
,L |
INC |
IX |
|
LD |
(IX) |
,H |
INC |
IX |
|
LD |
(HL) |
,0 |
INC |
HL |
|
LD |
(HL) |
,0 |
INC |
HL |
|
LD |
(HL) |
,17 |
INC |
HL |
|
LD |
(IX) |
,L |
INC |
IX |
|
LD |
(IX) |
,H |
INC |
IX |
|
LD |
(HL) |
,0 |
INC |
HL |
|
LD |
(HL) |
,0 |
INC |
HL |
|
DEC |
A |
|
JR |
NZ,F11 |
LD |
A, 16 |
|
LD |
(HL) |
, #C5 |
INC |
HL |
|
LD |
(HL) |
, #D5 |
INC |
HL |
|
DEC |
A |
|
JR |
NZ, F2 |
ЭТЮДЫ
LD |
(HL),#D9 |
INC |
HL |
DEC |
C |
JR |
NZ, F1 |
DJNZ |
F0 |
LD |
(HL),#31 |
INC |
HL |
LD |
(JUMP+2),HL |
LD |
(HL),0 |
INC |
HL |
LD |
(HL),0 |
INC |
HL |
LD |
(HL),#C9 |
RET |
|
DEFW |
#8080,#0101 |
DEFW |
#0101,#8080 |
DEFW |
#4040,#0202 |
DEFW |
#0202,#4040 |
DEFW |
#2020,#0404 |
DEFW |
#0404,#2020 |
DEFW |
#1010,#0808 |
DEFW |
#0808,#1010 |
DEFW |
#0808,#1010 |
DEFW |
#1010,#0808 |
DEFW |
#0404,#2020 |
DEFW |
#2020,#0404 |
DEFW |
#0202,#4040 |
DEFW |
#4040,#0202 |
DEFW |
#0101,#8080 |
DEFW |
#8080,#0101 |
DEFB |
0 |
TAB1
Программа использует адреса 25000-26172. В программе отражено много интересных идей, таких как манипуляции со стеком для перестроения экрана, а также, сдвиг большей части экрана за одно прерывание.
КОРР: Теперь по поводу других программ. Есть такая версия ZX WORD-v2.5, в которой проверяется наличие кемпстона, но при его отсутствии ничего не делается. Для исправления этой ошибки делаем следующее:
•S определяем начальную дорожку/сектор
•S считываем со следующего сектора в память 45 секторов по адресу #6834
^ исправляем байты F3 C3 01 98 на FB C9 00 00
•S пишем, новый загрузчик в кодах и размещаем его в бейсик-строке
LD HL,#6834
LD DE,(#5CD4)
LD BC,#2D05
CALL #3D13 CALL #6834 LD HL,#003E
LD (#699F),HL
JP #9801
•f записываем новый бейсик и за ним кодовый файл (старт #6834, длина #2D00). ИФК: Дмитрий также прислал несколько доработок ассемблера "ZEUS".
1. Программа для создания команды Ь"МЕТКА (кавычка обязательна).
; L"LABEL ; REALIZATION ; BY GG
ORG |
#E3BC |
CALL |
40000 |
ORG |
40000 |
LD |
A, (#FD5 0) |
OR |
A |
JP |
Z,#E345 |
LD |
HL, (#FD0 0) |
DEC |
HL |
INC |
HL |
LD |
C, (HL) |
INC |
HL |
LD |
B,(HL) |
LD |
A, B |
AND |
C |
CP |
#FF |
JP |
Z, END |
LD |
DE,#FD5 0 |
INC |
HL |
LD |
A,(HL) |
OR |
A |
JR |
Z,NXTLIN |
LD |
A, (DE) |
CP |
(HL) |
JR |
NZ, MO |
PUSH |
HL |
INC |
HL |
INC |
DE |
LD |
A, (DE) |
OR |
A |
JR |
Z, YES |
LD |
A, (HL) |
OR |
A |
JR |
Z , AMI |
LD |
A, (DE) |
CP |
(HL) |
JR |
Z , M2 |
POP |
HL |
JR |
Z, GA |
LD |
A, (HL) |
INC |
HL |
EX |
AF,AF' |
LD |
A, (HL) |
EX |
AF,AF' |
POP |
HL |
CP |
#20 |
JP |
NZ, GA |
EX |
AF,AF' |
AND |
128 |
JP |
Z, GA |
LD |
H, B |
LD |
L, C |
LD |
(#FD19) , HL |
JP |
#E345 |
POP |
AF |
OR |
A |
RET |
|
КОРР: Программа располагается по адресу 40000, однако это не лучший адрес процедуры. В оригинальной версии ZEUS^ свободна область #F87A-#FCFF и #FF00-#FFFF. 2. Другой вид курсора.
ORG |
#F60D |
LD |
B, 8 |
LD |
(HL),#FF |
INC |
H |
DJNZ |
#F60F |
RET |
|
ORG |
#F71D |
JP |
#F60D |
ORG |
#F4F4 |
PUSH |
HL |
ЭТЮДЫ
PUSH |
AF |
LD |
B, 8 |
LD |
A, (HL) |
CPL |
|
LD |
(HL),A |
INC |
H |
DJNZ |
LOOP |
POP |
AF |
POP |
HL |
RET |
|
3. Вывод значений меток.
ORG #E49C CALL #E571 PUSH DE CALL #E59E POP DE
4. Ошибка со шрифтом.
ORG #F63C LD DE,#3C00
NOP
КОРР: В ZX РЕВЮ 95/5 приведена программа на бейсике, воспроизводящая мелодию из SoundTracker^ с voicemetr'ами (извините за жаргон). Так вот, я думаю, что мелодия будет подвывать из-за того, что бейсик работает медленно, и вызовы процедуры происходят реже, чем 50 раз в секунду. Поэтому хочу предложить другой вариант.
ORG |
23296 |
CALL |
51000 |
HALT |
|
CALL |
51006 |
CALL |
50000 |
XOR |
A |
IN |
A, (254) |
CPL |
|
AND |
31 |
JR |
Z , M1 |
JP |
51000 |
M1
Эта программа работает также до нажатия любой клавиши, но времени между прерываниями остается очень много.
|
|