
© Вадим Бодров, г. Уфа, 1995.
Предлагаю Вам программы, написанные лично мной.
1). Программа BLINK создает на экране симпатичные помехи. Такой эффект я увидел на "писишке" ещё несколько лет назад.
EFFECTS
Bodrov (C) 1995
2 ;Vadim
3 ;
|
4 |
ORG |
50000 |
|
5 |
ENT |
$ |
|
6 |
LD |
B, HMP |
|
7 LOOP |
CALL |
RND |
|
8 |
LD |
(B FAD) ,HL |
|
9 |
CALL |
BLINK |
|
10 |
LD |
A, B |
|
11 |
SLA |
A |
|
12 |
DEC |
A |
|
13 |
DEC |
A |
|
14 |
LD |
D, 0 |
|
15 |
LD |
E, A |
|
16 |
LD |
HL,BUFF |
|
17 |
ADC |
HL, DE |
|
18 |
LD |
DE,BFAD |
|
19 |
EX |
DE, HL |
|
20 |
CALL |
CHANG |
|
21 |
DJNZ |
LOOP |
|
22 |
LD |
B, HMP |
|
23 LOOP2 |
LD |
A,B |
|
24 |
SLA |
A |
|
25 |
DEC |
A |
|
26 |
DEC |
A |
|
27 |
LD |
D, 0 |
|
28 |
LD |
E, A |
|
29 |
LD |
HL,BUFF |
|
30 |
ADC |
HL, DE |
|
31 |
LD |
DE,BFAD |
|
32 |
CALL |
CHANG |
|
33 |
CALL |
BLINK |
|
34 |
DJNZ |
LOOP2 |
|
35 |
RET | |
|
36 BLINK |
LD |
HL,(BFAD) |
|
37 |
LD |
A, #FF |
|
38 |
XOR |
(HL) |
|
39 |
LD |
(HL),A |
|
40 |
RET | |
|
41 CHANG |
LD |
A,(HL) |
|
42 |
INC |
HL |
|
43 |
EX |
DE, HL |
|
44 |
LD |
(HL),A |
|
45 |
INC |
HL |
|
46 |
EX |
DE, HL |
|
47 |
LD |
A,(HL) | |
|
48 |
EX |
DE, HL | |
|
49 |
LD |
(HL),A | |
|
50 |
RET | ||
|
51 |
HMP |
EQU |
15 |
|
52 |
RAND |
DEFW |
0 |
|
53 |
BUFF |
DEFS |
HMP |
|
54 |
DEFS |
HMP | |
|
55 |
BFAD |
DEFW |
0 |
|
56 |
RND |
LD |
HL,(RAND) |
|
57 |
LD |
A,(HL) | |
|
58 |
INC |
HL | |
|
59 |
AND |
127 | |
|
60 |
OR |
64 | |
|
61 |
CP |
88 | |
|
62 |
JR |
C, PASS | |
|
63 |
AND |
#DF | |
|
64 |
CP |
88 | |
|
65 |
JR |
C, PASS | |
|
66 |
AND |
#CF | |
|
67 |
PASS |
LD |
D,A |
|
68 |
LD |
E,(HL) | |
|
69 |
I NC |
HL | |
|
70 |
LD |
A, H | |
|
71 |
CP |
63 | |
|
72 |
JR |
NZ, PASS2 | |
|
73 |
LD |
HL, 0 | |
|
74 |
PASS2 |
LD |
(RAND),HL |
|
75 |
EX |
DE, HL | |
|
76 |
RET |
Длина блока кодов 149 байт:
|
C350 |
06 |
0F |
CD |
C0 |
C3 |
22 |
BE |
C3 |
1B |
|
C358 |
CD |
8C |
C3 |
78 |
CB |
27 |
3D |
3D |
1B |
|
C360 |
16 |
00 |
5F |
21 |
A0 |
C3 |
ED |
5A |
63 |
|
C368 |
11 |
BE |
C3 |
EB |
CD |
94 |
C3 |
10 |
DC |
|
C370 |
E1 |
06 |
0F |
78 |
CB |
27 |
3D |
3D |
0D |
|
C378 |
16 |
00 |
5F |
21 |
A0 |
C3 |
ED |
5A |
7B |
|
C380 |
11 |
BE |
C3 |
CD |
94 |
C3 |
CD |
8C |
52 |
|
C388 |
C3 |
10 |
E8 |
C9 |
2A |
BE |
C3 |
3E |
B8 |
|
C390 |
FF |
AE |
77 |
C9 |
7E |
23 |
EB |
77 |
43 |
|
C398 |
23 |
EB |
7E |
EB |
77 |
C9 |
00 |
00 |
12 |
|
C3A0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
63 |
|
C3A8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
6B |
|
C3B0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
73 |
|
C3B8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7B |
|
C3C0 |
2A |
9E |
C3 |
7E |
23 |
E6 |
7F |
F6 |
0A |
|
C3C8 |
40 |
FE |
58 |
38 |
08 |
E6 |
DF |
FE |
24 |
|
C3D0 |
58 |
38 |
02 |
E6 |
CF |
57 |
5E |
23 |
B2 |
|
C3D8 |
7C |
FE |
3F |
20 |
03 |
21 |
00 |
00 |
98 |
|
C3E0 |
22 |
9E |
C3 |
EB |
C9 |
00 |
00 |
00 |
DA |
Количество линий, одновременно отображаемых на экране можно изменять. Для этого в строке 51 нужно подставить вместо 15 свое значение. Учтите, что при этом буфер координат, а следовательно и сама программа увеличится на N*2 байт.
Для демонстрации эффекта можно воспользоваться БЕИСИК-программой: 10 BORDER 0: PAPER 0: INK 7: CLEAR 49999: RANDOMIZE USR 15619: REM:
LOAD "blink" CODE 20 RANDOMIZE USR 50000: GO TO 20
2). Программа ATTR SHOW!!! создает в заданном окне экрана интересные эффекты с атрибутами. При её циклическом вызове (для этого удобно использовать прерывания второго рода) в окне с координатами (COORDS) и размерами (DX и DY) изображение будет переливаться всеми цветами радуги. Фон же в этом окне будет постоянно чёрным. Вам ничего не мешает сделать его белым или, например, синим. Для этого просто нужно изменить параметры MASK OFF и MASK ON в строках 38-39.
1 ;ATTR SHOW!!!
2 ;VADIM BODROV (C) 1995
OFF ON
|
3 ; | ||
|
4 |
ORG |
50000 |
|
5 |
ENT |
$ |
|
6 |
LD |
DE,(COORDS) |
|
7 PASS |
LD |
A,(DY) |
|
8 |
LD |
B, A |
|
9 LOOP1 |
PUSH |
BC |
|
10 |
LD |
A, (DX) |
|
11 |
LD |
B, A |
|
12 |
PUSH |
DE |
|
13 LOOP2 |
PUSH |
BC |
|
14 |
LD |
A, E |
|
15 |
AND |
#18 |
|
16 |
RRCA | |
|
17 |
RRCA | |
|
18 |
RRCA | |
|
19 |
OR |
#58 |
|
20 |
LD |
H, A |
|
21 |
LD |
A, E |
|
22 |
AND |
#07 |
|
23 |
RRCA | |
|
24 |
RRCA | |
|
25 |
RRCA | |
|
26 |
ADD |
A, D |
|
27 |
LD |
L, A |
|
28 |
PUSH |
HL |
|
29 |
LD |
HL,(RANDOM) |
|
30 |
I NC |
HL |
|
31 |
LD |
A, 64 |
|
32 |
CP |
H |
|
33 |
JR |
NZ,PASS1 |
|
34 |
LD |
H, 0 |
|
35 PASS1 |
LD |
(RANDOM),HL |
|
36 |
LD |
A,(HL) |
|
37 |
POP |
HL |
|
38 |
AND |
#47 |
|
39 |
OR |
#40 |
; MAS K ; MAS K
|
40 |
LD |
(HL),A | |
|
41 |
I NC |
E | |
|
42 |
POP |
BC | |
|
43 |
DJNZ |
LOOP2 | |
|
44 |
POP |
DE | |
|
45 |
POP |
BC | |
|
46 |
I NC |
E | |
|
47 |
DJNZ |
LOOP1 | |
|
48 |
EI | ||
|
49 |
RET | ||
|
50 |
DY |
DEFB |
10 |
|
51 |
DX |
DEFB |
20 |
|
52 |
COORDS |
DEFW |
#0607 |
|
53 |
RANDOM |
DEFW |
#0000 |
Длина блока кодов 72 байта:
|
C350 |
F3 |
ED |
5B |
94 |
C3 |
3A |
92 |
C3 |
34 |
|
C358 |
47 |
C5 |
3A |
93 |
C3 |
47 |
D5 |
C5 |
98 |
|
C360 |
7B |
E6 |
18 |
0F |
0F |
0F |
F6 |
58 |
17 |
|
C368 |
67 |
7B |
E6 |
07 |
0F |
0F |
0F |
82 |
A9 |
|
C370 |
6F |
E5 |
2A |
96 |
C3 |
23 |
3E |
40 |
AB |
|
C378 |
BC |
20 |
02 |
26 |
00 |
22 |
96 |
C3 |
BA |
|
C380 |
7E |
E1 |
E6 |
47 |
F6 |
40 |
77 |
14 |
90 |
|
C388 |
C1 |
10 |
D4 |
D1 |
C1 |
1C |
10 |
C9 |
77 |
|
C390 |
FB |
C9 |
0A |
14 |
07 |
06 |
00 |
00 |
42 |
Для демонстрации эффекта можно воспользоваться БЕЙСИК-программой (в строке 15 загружается любая картинка):
10 BORDER 0: PAPER 0: INK 7: CLEAR 49999: RANDOMIZE USR 15619: REM :
LOAD "attrshow" CODE 15 RANDOMIZE USR 15619: REM: LOAD "screen $"CODE 16384 20 RANDOMIZE USR 50000: GO TO 20
3) Программа FONT CREAT создает стилизованный символьный набор, создающий впечатление "объёмности" букв.
1 ;FONTCREAT
2 ;Vadim Bodrov (С) 1995
3 ;
|
4 FONT |
EQU |
51000 |
|
5 |
ORG |
50000 |
|
6 |
ENT |
$ |
|
7 |
LD |
HL,1561 |
|
8 |
LD |
DE, FONT |
|
9 |
LD |
BC,768 |
|
10 |
LDIR | |
|
11 |
LD |
HL,FONT |
|
12 |
LD |
BC,768 |
|
13 LOOP |
LD |
A,(HL) |
|
14 |
LD |
D, A |
|
15 |
SRL |
A |
|
16 |
OR |
(HL) |
|
17 |
I NC |
HL |
|
18 |
OR |
(HL) |
|
19 |
XOR |
D |
|
20 |
DEC |
HL |
|
21 |
LD |
(HL),A | |
|
22 |
INC |
HL | |
|
23 |
DEC |
BC | |
|
24 |
LD |
A, B | |
|
25 |
OR |
C | |
|
26 |
JR |
NZ,LOOP | |
|
27 |
LD |
HL,FONT- |
256 |
|
28 |
LD |
(#5C3 6) , |
HL |
|
29 |
RET |
Длина блока кодов 40 байт:
|
C350 |
21 |
00 |
3D |
11 |
38 |
C7 |
01 |
00 |
82 |
|
C358 |
03 |
ED |
B0 |
21 |
38 |
C7 |
01 |
00 |
DC |
|
C360 |
03 |
7E |
57 |
CB |
3F |
B6 |
23 |
B6 |
94 |
|
C368 |
AA |
2B |
77 |
23 |
0B |
78 |
B1 |
20 |
EE |
|
C370 |
F0 |
21 |
38 |
C6 |
22 |
36 |
5C |
C9 |
BF |
*************************************************************************************
© Игорь Л. Комаров, Иркутск, 1995.
Эта процедура может использоваться в паре с процедурой очистки экрана как в игре FREDDY HARDEST (2Х-РЕВЮ-94, № 6, стр. 29). Она так же попиксельно, случайным образом
|
выводит на экран картинку из буфера | ||
|
1 |
ORG |
50000 |
|
2 |
ENT |
$ |
|
3 |
DI | |
|
4 |
CALL |
CLS |
|
5 |
LD |
A, 1 |
|
6 L1 |
PUSH |
AF |
|
7 |
CALL |
GO |
|
8 |
POP |
AF |
|
9 |
RLCA | |
|
10 |
RLCA | |
|
11 |
RLCA | |
|
12 |
CP |
1 |
|
13 |
JR |
NZ, L1 |
|
14 |
LD |
HL,BUFF+61 |
|
15 |
LD |
DE,#5800 |
|
16 |
LD |
BC,#0300 |
|
17 |
LDIR | |
|
18 |
EI | |
|
19 |
RET | |
|
2 0 ; | ||
|
21 GO |
LD |
HL,BUFF-1 |
|
22 |
LD |
DE,#3FFF |
|
23 CONT |
INC |
HL |
|
24 |
INC |
DE |
|
25 |
PUSH |
AF |
|
26 |
LD |
A, E |
|
27 |
CP |
3 |
|
28 |
JR |
NZ, L2 |
|
29 |
POP |
AF |
|
30 |
RET | |
|
31 ; | ||
|
32 L2 |
POP |
AF |
|
33 |
LD |
BC,2047 | |
|
34 |
PUSH |
HL | |
|
35 |
PUSH |
DE | |
|
36 |
ONE |
PUSH |
AF |
|
37 |
AND |
(HL) | |
|
38 |
EX |
DE, HL | |
|
39 |
OR |
(HL) | |
|
40 |
EX |
DE, HL | |
|
41 |
PUSH |
BC | |
|
42 |
LD |
B, 20 | |
|
43 |
L3 |
DJNZ |
L3 |
|
44 |
POP |
BC | |
|
45 |
LD |
(DE) , A | |
|
46 |
DEC |
BC | |
|
47 |
LD |
A, B | |
|
48 |
OR |
C | |
|
49 |
JR |
Z, L4 | |
|
50 |
POP |
AF | |
|
51 |
RLCA | ||
|
52 |
INC |
HL | |
|
53 |
INC |
HL | |
|
54 |
INC |
HL | |
|
55 |
INC |
DE | |
|
56 |
INC |
DE | |
|
57 |
INC |
DE | |
|
56 |
JR |
ONE | |
|
59 |
; | ||
|
60 |
L4 |
POP |
AF |
|
61 |
POP |
DE | |
|
62 |
POP |
HL | |
|
63 |
JR |
CONT | |
|
64 |
; | ||
|
65 |
CLS |
XOR |
A |
|
66 |
OUT |
(# FE) , A | |
|
67 |
LD |
HL,#4000 | |
|
68 |
PUSH |
HL | |
|
69 |
POP |
DE | |
|
70 |
INC |
DE | |
|
71 |
LD |
BC,#17FF | |
|
72 |
LD |
(HL),A | |
|
73 |
LDIR | ||
|
74 |
INC |
HL | |
|
75 |
INC |
DE | |
|
76 |
LD |
BC, #02FF | |
|
77 |
LD |
(HL),6 | |
|
78 |
LDIR | ||
|
79 |
RET | ||
|
80 |
BUFF |
DEFS |
6912 |
|
81 |
END |
Длина
без буфера экрана) = 110 байтов:
F3 CD A5 C3 3E 01 6F C3 F1 07 07 07
процедуры
C350 C358
F5 FE
3C 52
CD 01
ЭТЮДЫ
|
C360 |
20 |
F4 |
21 |
BE |
DB |
11 |
00 |
58 |
5A |
|
C368 |
01 |
00 |
03 |
ED |
B0 |
FB |
C9 |
21 |
B1 |
|
C370 |
BD |
C3 |
11 |
FF |
3F |
23 |
13 |
F5 |
2D |
|
C378 |
7B |
FE |
03 |
20 |
02 |
F1 |
C9 |
F1 |
84 |
|
C380 |
01 |
FF |
07 |
E5 |
D5 |
F5 |
A6 |
EB |
8A |
|
C388 |
B6 |
EB |
C5 |
06 |
14 |
10 |
FE |
C1 |
9A |
|
C390 |
12 |
0B |
78 |
B1 |
28 |
0A |
F1 |
07 |
C3 |
|
C398 |
23 |
23 |
23 |
13 |
13 |
13 |
18 |
E5 |
FA |
|
C3A0 |
F1 |
D1 |
E1 |
18 |
D0 |
AF |
D3 |
FE |
6E |
|
C3A8 |
21 |
00 |
40 |
E5 |
D1 |
13 |
01 |
FF |
95 |
|
C3B0 |
17 |
77 |
ED |
B0 |
23 |
13 |
01 |
FF |
D4 |
|
C3B8 |
02 |
36 |
06 |
ED |
B0 |
C9 |
00 |
00 |
1F |
*************************************************************************************
© В. Казаков, Д. Денисенко, г. Армавир, 1995.
Процедуры приводятся с непринципиальными изменениями.
Эта процедура выполняет красивую очистку экрана (эффект немного похож на действие предыдущей программы):
|
1 |
ORG |
50000 |
|
2 |
ENT |
$ |
|
3 |
LD |
HL,#5800 |
|
4 |
LD |
D, H |
|
5 |
LD |
E, L |
|
6 |
INC |
DE |
|
7 |
LD |
(HL),64+7 |
|
8 |
LD |
BC,#02FF |
|
9 |
LDIR | |
|
10 |
LD |
B, 32 |
|
11 M0 |
PUSH |
BC |
|
12 |
LD |
HL,#2BB0 |
|
13 |
LD |
(M3+1),HL |
|
14 |
LD |
HL,16385 |
|
15 |
LD |
DE,16384 |
|
16 |
CALL |
LOOP |
|
17 |
LD |
HL,18433 |
|
18 |
LD |
DE,18432 |
|
19 |
CALL |
LOOP |
|
20 |
LD |
HL,20481 |
|
21 |
LD |
DE,20480 |
|
22 |
CALL |
LOOP |
|
23 |
LD |
HL,#2 3B8 |
|
24 |
LD |
(M3+1),HL |
|
25 |
LD |
DE,16671 |
|
26 |
LD |
HL,16670 |
|
27 |
CALL |
LOOP |
|
28 |
LD |
DE,18719 |
|
29 |
LD |
HL,18718 |
|
30 |
CALL |
LOOP |
|
31 |
LD |
DE,20767 |
|
32 |
LD |
HL,20766 |
|
33 |
CALL |
LOOP |
|
34 |
POP |
BC |
|
35 |
DJNZ |
M0 |
|
(едуры |
= 128 байтов: | ||||||||
|
C350 |
21 |
00 |
58 |
54 |
5D |
13 |
36 |
47 |
CD |
|
C358 |
01 |
FF |
02 |
ED |
B0 |
06 |
20 |
C5 |
A5 |
|
C360 |
21 |
B0 |
2B |
22 |
B4 |
C3 |
21 |
01 |
DA |
|
C368 |
40 |
11 |
00 |
40 |
CD |
A6 |
C3 |
21 |
13 |
|
C370 |
01 |
48 |
11 |
00 |
48 |
CD |
A6 |
C3 |
0B |
|
C378 |
21 |
01 |
50 |
11 |
00 |
50 |
CD |
A6 |
81 |
|
C380 |
C3 |
21 |
B8 |
23 |
22 |
B4 |
C3 |
11 |
AC |
|
C388 |
1F |
41 |
21 |
1E |
41 |
CD |
A6 |
C3 |
61 |
|
C390 |
11 |
1F |
49 |
21 |
1E |
49 |
CD |
A6 |
C7 |
|
C398 |
C3 |
11 |
1F |
51 |
21 |
1E |
51 |
CD |
FC |
|
C3A0 |
A6 |
C3 |
C1 |
10 |
BA |
C9 |
06 |
08 |
2E |
|
C3A8 |
C5 |
E5 |
D5 |
06 |
04 |
C5 |
E5 |
D5 |
73 |
|
C3B0 |
01 |
1F |
00 |
ED |
B0 |
2B |
36 |
00 |
91 |
|
C3B8 |
D1 |
E1 |
14 |
14 |
24 |
24 |
C1 |
10 |
6E |
|
C3C0 |
EC |
D1 |
E1 |
01 |
20 |
00 |
ED |
4A |
79 |
|
C3C8 |
EB |
ED |
4A |
EB |
C1 |
10 |
D9 |
C9 |
0B |
Следующая процедура предназначена для прорисовки экрана в комплекте с предыдущей:
ORG 50000 ENT $ XOR A
1 2 3
|
36 |
RET | |||
|
37 |
LOOP |
LD |
B,8 | |
|
38 |
Ml |
PUSH |
BC | |
|
39 |
PUSH |
HL | ||
|
40 |
PUSH |
DE | ||
|
41 |
LD |
B, 4 | ||
|
42 |
M2 |
PUSH |
BC | |
|
43 |
PUSH |
HL | ||
|
44 |
PUSH |
DE | ||
|
45 |
LD |
BC, |
31 | |
|
46 |
M3 |
LDIR | ||
|
47 |
DEC |
HL | ||
|
48 |
LD |
(HL |
0 , 0 | |
|
49 |
POP |
DE | ||
|
50 |
POP |
HL | ||
|
51 |
INC |
D | ||
|
52 |
INC |
D | ||
|
53 |
INC |
H | ||
|
54 |
INC |
H | ||
|
55 |
POP |
BC | ||
|
56 |
DJNZ |
M2 | ||
|
57 |
POP |
DE | ||
|
58 |
POP |
HL | ||
|
59 |
LD |
BC, |
32 | |
|
60 |
ADC |
HL, |
BC | |
|
61 |
EX |
DE, |
HL | |
|
62 |
ADC |
HL, |
BC | |
|
63 |
EX |
DE, |
HL | |
|
64 |
POP |
BC | ||
|
65 |
DJNZ |
M1 | ||
|
66 |
RET |
|
4 |
LD |
(SYSTEM),A | |
|
5 |
LD |
B, 32 | |
|
6 |
PRO |
PUSH |
BC |
|
7 |
LD |
A, #3C | |
|
8 |
LD |
(M3) ,A | |
|
9 |
LD |
A, #B0 | |
|
10 |
LD |
( M4 + 1 ) , A | |
|
11 |
LD |
HL,BUFF | |
|
12 |
LD |
DE,16384 | |
|
13 |
CALL |
LOOP | |
|
14 |
LD |
HL,BUFF+2048 | |
|
15 |
LD |
DE,18432 | |
|
16 |
CALL |
LOOP | |
|
17 |
LD |
HL,BUFF+4096 | |
|
18 |
LD |
DE,20480 | |
|
19 |
CALL |
LOOP | |
|
20 |
LD |
A, #B8 | |
|
21 |
LD |
( M4 + 1 ) , A | |
|
22 |
LD |
HL,BUFF+287 | |
|
23 |
LD |
DE,16671 | |
|
24 |
CALL |
LOOP | |
|
25 |
LD |
HL,BUFF+2335 | |
|
26 |
LD |
DE,18719 | |
|
27 |
CALL |
LOOP | |
|
28 |
LD |
HL,BUFF+4383 | |
|
29 |
LD |
DE,20767 | |
|
30 |
CALL |
LOOP | |
|
31 |
POP |
BC | |
|
32 |
DJNZ |
PRO | |
|
33 |
LD |
HL,BUFF+6144 | |
|
34 |
LD |
DE,22528 | |
|
35 |
LD |
BC,768 | |
|
36 |
LDIR | ||
|
37 |
RET | ||
|
38 |
LOOP |
LD |
B,8 |
|
39 |
M1 |
PUSH |
BC |
|
40 |
PUSH |
DE | |
|
41 |
PUSH |
HL | |
|
42 |
LD |
B, 4 | |
|
43 |
M2 |
PUSH |
BC |
|
44 |
PUSH |
DE | |
|
45 |
PUSH |
HL | |
|
46 |
LD |
A, (SYSTEM) | |
|
47 |
M3 |
INC |
A |
|
48 |
LD |
(SYSTEM),A | |
|
49 |
LD |
B, 0 | |
|
50 |
LD |
C, A | |
|
51 |
M4 |
LDIR | |
|
52 |
XOR |
A | |
|
53 |
LD |
(M3) ,A | |
|
54 |
POP |
HL | |
|
55 |
POP |
DE |
|
56 |
INC |
H |
|
57 |
INC |
H |
|
58 |
INC |
D |
|
59 |
INC |
D |
|
60 |
POP |
BC |
|
61 |
DJNZ |
M2 |
|
62 |
POP |
HL |
|
63 |
POP |
DE |
|
64 |
LD |
BC, 32 |
|
65 |
ADD |
HL, BC |
|
66 |
EX |
DE, HL |
|
67 |
ADD |
HL, BC |
|
68 |
EX |
DE, HL |
|
69 |
POP |
BC |
|
70 |
DJNZ |
M1 |
|
71 |
RET |
72 SYSTEM DEFB 0
73 BUFF DEFS 6912
Буфер экрана в этой программе находится по адресу 50140. Длина процедуры (без буфера экрана) = 140 байтов:
|
C350 |
AF |
32 |
DB |
C3 |
06 |
20 |
C5 |
3E |
BB |
|
C358 |
3C |
32 |
B8 |
C3 |
3E |
B0 |
32 |
C0 |
E4 |
|
C360 |
C3 |
21 |
DC |
C3 |
11 |
00 |
40 |
CD |
C4 |
|
C368 |
AB |
C3 |
21 |
DC |
CB |
11 |
00 |
48 |
BA |
|
C370 |
CD |
AB |
C3 |
21 |
DC |
D3 |
11 |
00 |
4 F |
|
C378 |
50 |
CD |
AB |
C3 |
3E |
B8 |
32 |
C0 |
AE |
|
C380 |
C3 |
21 |
FB |
C4 |
11 |
1F |
41 |
CD |
24 |
|
C388 |
AB |
C3 |
21 |
FB |
CC |
11 |
1F |
49 |
1A |
|
C390 |
CD |
AB |
C3 |
21 |
FB |
D4 |
11 |
1F |
AE |
|
C398 |
51 |
CD |
AB |
C3 |
C1 |
10 |
B7 |
21 |
90 |
|
C3A0 |
DC |
DB |
11 |
00 |
58 |
01 |
00 |
03 |
87 |
|
C3A8 |
ED |
B0 |
C9 |
06 |
08 |
C5 |
D5 |
E5 |
5E |
|
C3B0 |
06 |
04 |
C5 |
D5 |
E5 |
3A |
DB |
C3 |
D4 |
|
C3B8 |
3C |
32 |
DB |
C3 |
06 |
00 |
4F |
ED |
C9 |
|
C3C0 |
B0 |
AF |
32 |
B8 |
C3 |
E1 |
D1 |
24 |
65 |
|
C3C8 |
24 |
14 |
14 |
C1 |
10 |
E4 |
E1 |
D1 |
3E |
|
C3D0 |
01 |
20 |
00 |
09 |
EB |
09 |
EB |
C1 |
5D |
|
C3D8 |
10 |
D3 |
C9 |
00 |
00 |
00 |
00 |
00 |
47 |
И ещё одна программа для плавной прорисовки картинки, предварительно помещенной по адресу BUFF, сверку вниз по линиям:
|
1 |
ORG |
50000 |
|
2 |
ENT |
$ |
|
3 |
LD |
HL,BUFF |
|
4 |
LD |
DE, 16384 |
|
5 |
CALL |
PROG |
|
6 |
LD |
HL,BUFF+2048 |
|
7 |
LD |
DE, 18432 |
|
8 |
CALL |
PROG |
|
9 |
LD |
HL,BUFF+4096 |
|
10 |
LD |
DE, 20480 |
|
11 |
CALL |
PROG |
|
12 |
LD |
HL,BUFF+6144 |
|
13 |
LD |
DE,225 | |
|
14 |
LD |
BC,768 | |
|
15 |
LDIR | ||
|
16 |
RET | ||
|
17 |
PROG |
LD |
B,8 |
|
18 |
M1 |
PUSH |
BC |
|
19 |
PUSH |
HL | |
|
20 |
PUSH |
DE | |
|
21 |
LD |
B, 8 | |
|
22 |
M2 |
PUSH |
BC |
|
23 |
PUSH |
HL | |
|
24 |
PUSH |
DE | |
|
25 |
LD |
BC, 32 | |
|
26 |
LDIR | ||
|
27 |
HALT | ||
|
28 |
POP |
DE | |
|
29 |
POP |
HL | |
|
30 |
INC |
H | |
|
31 |
INC |
D | |
|
32 |
POP |
BC | |
|
33 |
DJNZ |
M2 | |
|
34 |
LD |
BC, 32 | |
|
35 |
POP |
DE | |
|
36 |
POP |
HL | |
|
37 |
ADD |
HL, BC | |
|
38 |
EX |
DE, HL | |
|
39 |
ADD |
HL, BC | |
|
40 |
EX |
DE, HL | |
|
41 |
POP |
BC | |
|
42 |
DJNZ |
M1 | |
|
43 |
RET | ||
|
44 |
BUFF |
DEFS |
6912 |
|
(едуры ( |
без буфера экрана) |
= 75 байтов: | |||||||
|
C350 |
21 |
9B |
C3 |
11 |
00 |
40 |
CD |
77 |
27 |
|
C358 |
C3 |
21 |
9B |
CB |
11 |
00 |
48 |
CD |
8B |
|
C360 |
77 |
C3 |
21 |
9B |
D3 |
11 |
00 |
50 |
4D |
|
C368 |
CD |
77 |
C3 |
21 |
9B |
DB |
11 |
00 |
DA |
|
C370 |
58 |
01 |
00 |
03 |
ED |
B0 |
C9 |
06 |
FB |
|
C378 |
08 |
C5 |
E5 |
D5 |
06 |
08 |
C5 |
E5 |
7A |
|
C380 |
D5 |
01 |
20 |
00 |
ED |
B0 |
76 |
D1 |
1D |
|
C388 |
E1 |
24 |
14 |
C1 |
10 |
F0 |
01 |
20 |
46 |
|
C390 |
00 |
D1 |
E1 |
09 |
EB |
09 |
EB |
C1 |
AE |
|
C398 |
10 |
DF |
C9 |
00 |
00 |
00 |
00 |
00 |
13 |
Мы хотим обратить внимание читателей на не очень рациональное построение процедур: это проявляется в обилии задаваемых: конкретных адресов в дисплейном файле и буфере экрана. Например, последнюю процедуру можно было выполнить очень элегантно, используя 15-байтную подпрограмму расчёта адреса нижележащей пиксельной линии, приведенную в разделе ЭТЮДЫ в 2Х-РЕВЮ-95, № 4.
*************************************************************************************
© Николай Губин, г. Новгород, 1995.
Предлагаю две процедуры для владельцев 128К компьютеров. Они предназначены для вывода на экран картинки, предварительно помещённой в буфер (обозначен меткой BUFF).
Первая процедура прорисовывает картинку от центра экрана вниз и вверх. Эта процедура используется в загрузчике DIZZY 4.
Так как в процедуре используется режим прерываний 2 рода, то она не будет работать на компьютерах, у которых этот режим некорректно обрабатывается. Впрочем, как исправить, мы думаем, Вы уже знаете - мы не раз приводили примеры в ZX-РЕВЮ.
|
00010 |
BUFF |
EQU |
41000 |
|
00020 |
ORG |
40000 | |
|
00030 |
ENT | ||
|
00040 |
DI | ||
|
00050 |
LD |
BC,#7 FFD | |
|
00060 |
LD |
A, #17 | |
|
00070 |
OUT |
(C) ,A | |
|
00080 |
LD |
HL,BUFF | |
|
00090 |
LD |
DE, #C000 | |
|
00100 |
LD |
BC,#1B00 | |
|
00110 |
LDIR | ||
|
00120 |
LD |
HL,#A1A1 | |
|
00130 |
LD |
(#A0FF) ,: | |
|
00140 |
LD |
A, #C3 | |
|
00150 |
LD |
( #A1 A1 ) , | |
|
00160 |
LD |
HL,SCR | |
|
00170 |
LD |
( #A1 A2 ) , | |
|
00180 |
LD |
A, #A0 | |
|
00190 |
LD |
I,A | |
|
00200 |
IM |
2 | |
|
00210 |
EI | ||
|
00220 |
LOOP |
HALT | |
|
00230 |
LD |
A, (POKE3 | |
|
00240 |
OR |
A | |
|
00250 |
JR |
NZ,LOOP | |
|
00260 |
DI | ||
|
00270 |
LD |
A, #3F | |
|
00280 |
LD |
I,A | |
|
00290 |
IM |
1 | |
|
00300 |
LD |
A, #18 | |
|
00310 |
LD |
BC,#7 FFD | |
|
00320 |
OUT |
(C) , A | |
|
00330 |
LD |
HL,BUFF | |
|
00340 |
LD |
DE, #4000 | |
|
00350 |
LD |
BC,#1B00 | |
|
00360 |
LDIR | ||
|
00370 |
LD |
A, #10 | |
|
00380 |
LD |
BC,#7 FFD | |
|
00390 |
OUT |
(C) , A | |
|
00400 |
RET | ||
|
00410 |
SCR |
PUSH |
HL |
|
00420 |
PUSH |
DE | |
|
00430 |
PUSH |
BC | |
|
00440 |
PUSH |
AF | |
|
00450 |
LD |
HL,#171F | |
|
00460 |
LD |
BC,#7 FFD | |
|
00470 |
OUT |
(C) , H |
|
00480 |
LD |
DE,(POKE2) | |
|
00490 |
L1 |
DEC |
DE |
|
00500 |
LD |
A, D | |
|
00510 |
OR |
E | |
|
00520 |
JR |
NZ, L1 | |
|
00530 |
OUT |
(C) , L | |
|
00540 |
LD |
DE,(POKE2) | |
|
00550 |
DEC |
DE | |
|
00560 |
DEC |
DE | |
|
00570 |
DEC |
DE | |
|
00580 |
DEC |
DE | |
|
00590 |
DEC |
DE | |
|
00600 |
DEC |
DE | |
|
00610 |
DEC |
DE | |
|
00620 |
DEC |
DE | |
|
00630 |
DEC |
DE | |
|
00640 |
LD |
(POKE2),DE | |
|
00650 |
LD |
DE,(POKE1) | |
|
00660 |
L2 |
DEC |
DE |
|
00670 |
LD |
A, D | |
|
00680 |
OR |
E | |
|
00690 |
JR |
NZ, L2 | |
|
00700 |
OUT |
(C) , H | |
|
00710 |
LD |
DE,(POKE1) | |
|
00720 |
LD |
HL,#12 | |
|
00730 |
ADD |
HL, DE | |
|
00740 |
LD |
(POKE1),HL | |
|
00750 |
POP |
AF | |
|
00760 |
POP |
BC | |
|
00770 |
POP |
DE | |
|
00780 |
POP |
HL | |
|
00790 |
EI | ||
|
00800 |
RET | ||
|
00810 |
POKE1 |
DEFB |
2,0 |
|
00820 |
POKE2 |
DEFB |
#5E |
|
00830 |
POKE3 |
DEFB |
#05 |
|
Start of object: |
#9C4 0 |
(40000 |
) | ||||||
|
Length: |
#009B |
(00155 |
) | ||||||
|
Executes: |
#9C40 |
(40000 |
) | ||||||
|
9C40 |
F3 |
01 |
FD |
7F |
3E |
17 |
ED |
79 |
07 |
|
9C48 |
21 |
28 |
A0 |
11 |
00 |
C0 |
01 |
00 |
9F |
|
9C50 |
1B |
ED |
B0 |
21 |
A1 |
A1 |
22 |
FF |
28 |
|
9C58 |
A0 |
3E |
C3 |
32 |
A1 |
A1 |
21 |
93 |
BD |
|
9C60 |
9C |
22 |
A2 |
A1 |
3E |
A0 |
ED |
47 |
0F |
|
9C68 |
ED |
5E |
FB |
76 |
3A |
DA |
9C |
B7 |
27 |
|
9C70 |
20 |
F9 |
F3 |
3E |
3F |
ED |
47 |
ED |
B6 |
|
9C78 |
56 |
3E |
18 |
01 |
FD |
7F |
ED |
79 |
A3 |
|
9C80 |
21 |
28 |
A0 |
11 |
00 |
40 |
01 |
00 |
57 |
|
9C88 |
1B |
ED |
B0 |
3E |
10 |
01 |
FD |
7F |
A7 |
|
9C90 |
ED |
79 |
C9 |
E5 |
D5 |
C5 |
F5 |
21 |
F0 |
|
9C98 |
1F |
17 |
01 |
FD |
7F |
ED |
61 |
ED |
22 |
|
9CA0 |
5B |
D9 |
9C |
1B |
7A |
B3 |
20 |
FB |
6F |
9CA8 9CB0 9CB8 9CC0 9CC8 9CD0 9CD8
69 1B D9 B3 9C F1 5E
5B 1B ED FB 12 D1 00
D9 1B 5B ED 00 E1 00
9C 1B D7 61 19 FB 00
1B 1B 9C ED 22 C9 00
1B ED 1B 5B D7 02 00
8D F6 F2 3A 1C 32 D7
ED 1B 53 7A D7 9C 00
ED 1B 9C 20 21 C1 05
|
Следует только заметить, что | |||
|
изменяется содержимое ячеек. | |||
|
Вторая процедура выводит на : | |||
|
00010 |
BUFF |
EQU |
32768 |
|
00020 |
ORG |
40000 | |
|
00030 |
ENT | ||
|
00040 |
DI | ||
|
00050 |
LD |
HL,#4000 | |
|
00060 |
LD |
DE, #4001 | |
|
00070 |
LD |
BC,#1AFF | |
|
00080 |
LD |
(HL),L | |
|
00090 |
LDIR | ||
|
00100 |
LD |
HL,BUFF | |
|
00110 |
LD |
DE, #4000 | |
|
00120 |
LD |
BC,#1800 | |
|
00130 |
LDIR | ||
|
00140 |
LD |
A, #01 | |
|
00150 |
L1 |
LD |
B,#FF |
|
00160 |
PUSH |
AF | |
|
00170 |
LOOP |
LD |
H,#98 |
|
00180 |
CALL |
SCR | |
|
00190 |
INC |
H | |
|
00200 |
CALL |
SCR | |
|
00210 |
INC |
H | |
|
00220 |
CALL |
SCR | |
|
00230 |
DJNZ |
LOOP | |
|
00240 |
POP |
AF | |
|
00250 |
DEC |
A | |
|
00260 |
OR |
A | |
|
00270 |
JR |
NZ, L1 | |
|
00280 |
LD |
HL,BUFF+61 | |
|
00290 |
LD |
DE, #5800 | |
|
00300 |
LD |
BC,#0300 | |
|
00310 |
LDIR | ||
|
00320 |
RET | ||
|
00330 |
SCR |
PUSH |
HL |
|
00340 |
LD |
HL,POKE | |
|
00350 |
INC |
(HL) | |
|
00360 |
BIT |
0,(HL) | |
|
00370 |
POP |
HL | |
|
00380 |
JR |
Z, CONT | |
|
00390 |
RES |
7, C | |
|
00400 |
BON |
LD |
A,R |
|
00410 |
OR |
C | |
|
00420 |
LD |
L, A | |
|
00430 |
PUSH |
HL | |
|
00440 |
LD |
A, H | |
|
00450 |
SUB |
#40 | |
|
00460 |
LD |
H, A | |
|
00470 |
POP |
DE | |
|
00480 |
LD |
A, (DE) | |
|
00490 |
LD |
(HL),A | |
|
00500 |
EX |
DE, HL | |
|
00510 |
CALL |
S1 | |
|
00520 |
RET | ||
|
00530 |
CONT |
SET |
7,C |
|
00540 |
JR |
BON | |
|
00550 |
S1 |
PUSH |
HL |
|
00560 |
PUSH |
BC | |
|
00570 |
PUSH |
DE | |
|
00580 |
PUSH |
AF | |
|
00590 |
LD |
HL, 0 | |
|
00600 |
LD |
DE, 0 | |
|
00610 |
LD |
BC,#123 | |
|
00620 |
LDIR | ||
|
00630 |
POP |
AF | |
|
00640 |
POP |
DE | |
|
00650 |
POP |
BC | |
|
00660 |
POP |
HL | |
|
00670 |
RET |
|
Start of object: |
#9C4 0 |
(40000 |
) | ||||||
|
Length: |
#0073 |
(00115 |
) | ||||||
|
Executes: |
#9C40 |
(40000 |
) | ||||||
|
9C40 |
F3 |
21 |
00 |
40 |
11 |
01 |
40 |
01 |
83 |
|
9C48 |
FF |
1A |
75 |
ED |
B0 |
21 |
00 |
80 |
B0 |
|
9C50 |
11 |
00 |
40 |
01 |
00 |
18 |
ED |
B0 |
F3 |
|
9C58 |
3E |
01 |
06 |
FF |
F5 |
26 |
98 |
CD |
B8 |
|
9C60 |
7D |
9C |
24 |
CD |
7D |
9C |
24 |
CD |
10 |
|
9C68 |
7D |
9C |
10 |
F1 |
F1 |
3D |
B7 |
20 |
23 |
|
9C70 |
E9 |
21 |
00 |
98 |
11 |
00 |
58 |
01 |
18 |
|
9C78 |
00 |
03 |
ED |
B0 |
C9 |
E5 |
21 |
B2 |
35 |
|
9C80 |
9C |
34 |
CB |
46 |
E1 |
28 |
13 |
CB |
E4 |
|
9C88 |
B9 |
ED |
5F |
B1 |
6F |
E5 |
7C |
D6 |
80 |
|
9C90 |
40 |
67 |
D1 |
1A |
77 |
EB |
CD |
9E |
8B |
|
9C98 |
9C |
C9 |
CB |
F9 |
18 |
EB |
E5 |
C5 |
0A |
|
9CA0 |
D5 |
F5 |
21 |
00 |
00 |
11 |
00 |
00 |
38 |
|
9CA8 |
01 |
23 |
01 |
ED |
B0 |
F1 |
D1 |
C1 |
89 |
|
9CB0 |
E1 |
C9 |
00 |
00 |
00 |
00 |
00 |
00 |
F6 |
У этой процедуры буфер экрана обязательно (#8000).
должен располагаться по адресу 32768
© Влад, г. Оленегорск, 1995.
Предлагаю программу имитации звёздного неба (как в ГБМ'овской программе WD).
|
00010 |
ORG |
40000 | |
|
00020 |
ENT | ||
|
00030 |
CALL |
INIT | |
|
00040 |
HALT | ||
|
00050 |
STAR |
CALL |
START |
|
00060 |
LD |
A, 127 | |
|
00070 |
IN |
A, (254) | |
|
00080 |
RRA | ||
|
00090 |
JR |
C, STAR | |
|
00100 |
RET | ||
|
00110 |
INIT |
LD |
IX,SHAB |
|
00120 |
L1 |
LD D, (I | |
|
00130 |
LD |
E,(IX+1) | |
|
00140 |
CALL |
TOSCR | |
|
00150 |
LD |
A,(IX+3) | |
|
00160 |
XOR |
(HL) | |
|
00170 |
LD |
(HL),A | |
|
00180 |
LD |
DE, 4 | |
|
00190 |
ADD |
IX, DE | |
|
00200 |
LD |
A,(IX+0) | |
|
00210 |
CP |
255 | |
|
00220 |
RET |
Z | |
|
00230 |
JR |
L1 | |
|
00240 |
START |
LD |
IX,SHAB |
|
00250 |
L5 |
LD |
D,(IX+0) |
|
00260 |
LD |
E,(IX+1) | |
|
00270 |
CALL |
TOSCR | |
|
00280 |
LD |
A,(IX+3) | |
|
00290 |
XOR |
(HL) | |
|
00300 |
LD |
(HL),A | |
|
00310 |
LD |
B,(IX+2) | |
|
00320 |
LD |
A,(IX+3) | |
|
00330 |
L3 |
ADD |
A,A |
|
00340 |
OR |
A | |
|
00350 |
JR |
Z, L2 | |
|
00360 |
DJNZ |
L3 | |
|
00370 |
LD |
(IX+3),A | |
|
00380 |
XOR |
(HL) | |
|
00390 |
LD |
(HL),A | |
|
00400 |
JR |
L4 | |
|
00410 |
L2 |
LD |
(IX+3),1 |
|
00420 |
LD |
A, (IX+1) | |
|
00430 |
DEC |
A | |
|
00440 |
AND |
31 | |
|
00450 |
LD |
(IX+1),A | |
|
00460 |
LD |
D,(IX+0) | |
|
00470 |
LD |
E,(IX+1) | |
|
00480 |
CALL |
TOSCR | |
|
00490 |
LD |
A, (IX+3) | |
|
00500 |
XOR |
(HL) |
|
00510 |
LD |
(HL),A | |
|
00520 |
L4 |
LD |
DE,4 |
|
00530 |
ADD |
IX, DE | |
|
00540 |
LD |
A, (IX+0) | |
|
00550 |
CP |
255 | |
|
00560 |
JR |
NZ, L5 | |
|
00570 |
RET | ||
|
00580 |
TOSCR |
LD |
H,64 |
|
00590 |
LD |
A, D | |
|
00600 |
AND |
192 | |
|
00610 |
SRL |
A | |
|
00620 |
SRL |
A | |
|
00630 |
SRL |
A | |
|
00640 |
ADD |
A, H | |
|
00650 |
LD |
H, A | |
|
00660 |
LD |
A, D | |
|
00670 |
AND |
7 | |
|
00680 |
ADD |
A, H | |
|
00690 |
LD |
H, A | |
|
00700 |
LD |
A, D | |
|
00710 |
AND |
56 | |
|
00720 |
ADD |
A, A | |
|
00730 |
ADD |
A, A | |
|
00740 |
ADD |
A, E | |
|
00750 |
LD |
L, A | |
|
00760 |
RET | ||
|
00770 |
SHAB |
DEFB |
10,26,1,64 |
|
00780 |
DEFB |
100,4,1,64 | |
|
00790 |
DEFB |
50,29,2,16 | |
|
00800 |
DEFB |
130,14,2,16 | |
|
00810 |
DEFB |
70, 30, 4, 16 | |
|
00820 |
DEFB |
170,14,1,32 | |
|
00830 |
DEFB |
20,13,4,16 | |
|
00840 |
DEFB |
30,19,2,4 | |
|
00850 |
DEFB |
40, 25, 4, 16 | |
|
00860 |
DEFB |
60,22,1,32 | |
|
00870 |
DEFB |
150,4,1,32 | |
|
00880 |
DEFB |
180,1,4,16 | |
|
00890 |
DEFB |
190, 26, 2,4 | |
|
00900 |
DEFB |
80,5,2,4 | |
|
00910 |
DEFB |
90,14,2,4 | |
|
00920 |
DEFB |
110,1,4,16 | |
|
00930 |
DEFB |
120,31,1,32 | |
|
00940 |
DEFB |
140,14,1,32 | |
|
00950 |
DEFB |
160,22,2,4 | |
|
00960 |
DEFB |
10,9,1,32 | |
|
00970 |
DEFB |
100,21,1,32 | |
|
00980 |
DEFB |
50,14,2,4 | |
|
00990 |
DEFB |
130,29,2,4 | |
|
01000 |
DEFB |
70,13,4,16 | |
|
01010 |
DEFB |
170,31,1,32 | |
|
01020 |
DEFB |
20, 30, 4, 16 |
|
01030 |
DEFB |
30, 2, 2, 4 |
|
01040 |
DEFB |
40, 8, 4, 16 |
|
01050 |
DEFB |
60, 5, 1, 32 |
|
01060 |
DEFB |
150, 21, 1, 32 |
|
01070 |
DEFB |
180, 18, 4, 16 |
|
01080 |
DEFB |
190, 11, 2, 4 |
|
01090 |
DEFB |
80,22,2,4 |
|
01100 |
DEFB |
90, 29, 2, 4 |
|
01110 |
DEFB |
110, 18, 4, 16 |
|
01120 |
DEFB |
120, 14, 1, 32 |
|
01130 |
DEFB |
140, 31, 1, 32 |
|
01140 |
DEFB |
160, 5, 2, 4 |
|
01150 |
DEFB |
255 |
|
Start of object: #9C40 | ||
Length: #012E (06302)
Executes: #9C40 (40000)
Каждая звезда определяется четырьмя байтами. Первый и второй байты - это координаты звёзд в пикселях, третий байт - скорость перемещения звёзды, четвёртый байт - шаблон самой звезды.
Шестнадцатеричный дамп:
|
9C40 |
CD |
4F |
9C |
76 |
CD |
6E |
9C |
3E |
1F |
|
9C48 |
7 F |
DB |
FE |
1F |
38 |
F6 |
C9 |
DD |
2 F |
|
9C50 |
21 |
D5 |
9C |
DD |
56 |
00 |
DD |
5E |
EC |
|
9C58 |
01 |
CD |
BB |
9C |
DD |
7E |
03 |
AE |
25 |
|
9C60 |
77 |
11 |
04 |
00 |
DD |
19 |
DD |
7E |
D9 |
|
9C68 |
00 |
FE |
FF |
C8 |
18 |
E5 |
DD |
21 |
C4 |
|
9C70 |
D5 |
9C |
DD |
56 |
00 |
DD |
5E |
01 |
EC |
|
9C78 |
CD |
BB |
9C |
DD |
7E |
03 |
AE |
77 |
BB |
|
9C80 |
DD |
46 |
02 |
DD |
7E |
03 |
87 |
B7 |
DD |
|
9C88 |
28 |
09 |
10 |
FA |
DD |
77 |
03 |
AE |
64 |
|
9C90 |
77 |
18 |
1B |
DD |
36 |
03 |
01 |
DD |
CA |
|
9C98 |
7E |
01 |
3D |
E6 |
1F |
DD |
77 |
01 |
4A |
|
9CA0 |
DD |
56 |
00 |
DD |
5E |
01 |
CD |
BB |
33 |
|
9CA8 |
9C |
DD |
7E |
03 |
AE |
77 |
11 |
04 |
78 |
|
9CB0 |
00 |
DD |
19 |
DD |
7E |
00 |
FE |
FF |
9A |
|
9CB8 |
20 |
B8 |
C9 |
26 |
40 |
7A |
E6 |
C0 |
7B |
|
9CC0 |
CB |
3F |
CB |
3F |
CB |
3F |
84 |
67 |
65 |
|
9CC8 |
7A |
E6 |
07 |
84 |
67 |
7A |
E6 |
38 |
4E |
|
9CD0 |
87 |
87 |
83 |
6F |
C9 |
0A |
1D |
01 |
5D |
|
9CD8 |
20 |
64 |
07 |
01 |
20 |
32 |
03 |
02 |
57 |
|
9CE0 |
04 |
82 |
14 |
02 |
04 |
46 |
0A |
04 |
70 |
|
9CE8 |
01 |
AA |
11 |
01 |
10 |
14 |
19 |
04 |
82 |
|
9CF0 |
01 |
1E |
19 |
02 |
01 |
28 |
05 |
04 |
F8 |
|
9CF8 |
01 |
3C |
19 |
01 |
10 |
96 |
07 |
01 |
99 |
|
9D00 |
10 |
B4 |
0D |
04 |
01 |
BE |
00 |
02 |
33 |
|
9D08 |
01 |
50 |
0B |
02 |
01 |
5A |
14 |
02 |
74 |
|
9D10 |
01 |
6E |
0D |
04 |
01 |
78 |
02 |
01 |
A9 |
|
9D18 |
10 |
8C |
11 |
01 |
10 |
A0 |
1C |
02 |
31 |
|
9D20 |
01 |
0A |
0C |
01 |
10 |
64 |
18 |
01 |
62 |
|
9D28 |
10 |
32 |
14 |
02 |
01 |
82 |
03 |
02 |
A5 |
|
9D30 |
01 |
46 |
19 |
04 |
01 |
AA |
02 |
01 |
DF |
|
9D38 |
10 |
14 |
0A |
04 |
01 |
1E |
08 |
02 |
30 |
|
9D40 |
01 |
28 |
14 |
04 |
01 |
3C |
08 |
01 |
64 |
|
9D48 |
10 |
96 |
18 |
01 |
10 |
B4 |
1E |
04 |
8A |
|
9D50 |
01 |
BE |
11 |
02 |
01 |
50 |
1C |
02 |
2E |
|
9D58 |
01 |
5A |
03 |
02 |
01 |
6E |
1E |
04 |
E 6 |
|
9D60 |
01 |
78 |
11 |
01 |
10 |
8C |
02 |
01 |
27 |
|
9D68 |
10 |
A0 |
0B |
02 |
01 |
FF |
00 |
00 |
C2 |
************************************************************************************* © Роман Щербаков, г. Москва, 1995.
Этот графический эффект я назвал EXPLOSION - взрыв. Его действие состоит в следующем: при запуске программа "взрывает" заданную часть экрана, сопровождая зрелище соответствующими звуками. Изображение по точкам ("осколкам") начинает разлетаться от места взрыва в разные стороны, пока не исчезнет за пределами экрана. Задать для "взрыва" можно любую область экрана, причем разлетающиеся "осколки" не будут портить ничего на своем пути. В основе лежит процедура из игры STAINLESS STEEL, однако исходный вариант примерно на 90% мной переработан.
Процедура может использоваться, например, для демонстрации гибели героя в играх, но можно найти ей ещё более интересное применение.
1 ; (С) Щербаков Роман 1995.
2 ;
|
10 |
ORG |
50000 |
;--- Программные переменные --- |
|
20 XCRD |
EQU |
#60 |
;Х-координата взрываемого прямоугольника |
|
3 0 YCRD |
EQU |
#48 |
;Y-координата от левого верхнего угла |
|
40 XLEN |
EQU |
#48 |
;Длина прямоугольника в пикселях |
|
50 YHGT |
EQU |
#10 |
;Высота прямоугольника в пикселях |
|
60 |
ENT |
$ |
;--- Инициализатор --- |
|
70 |
LD |
IX, DATA |
;В IX помещается адрес начала буфера |
|
;данных | |||
|
80 |
LD |
B, #FF |
;B регистр B - количество "осколков" (255) |
|
90 INIT |
LD |
C,XLEN |
;В регистр C - макс. длину прямоугольника |
|
100 |
CALL |
RNDA |
;Вызов генератора псевдослучайных чисел. |
|
110 |
ADD |
A, XCRD |
; Складываем случайное число с Х-координаты |
|
120 |
LD |
(IX+0),A |
;В соответствующее место буфера его |
|
130 |
LD |
C, YHGT |
;Аналогичные расчёты для Y-координаты |
|
140 |
CALL |
RNDA |
;(В регистр C помещается максимальное число |
|
150 |
ADD |
A, YCRD |
; которое является ограничителем для |
|
160 |
LD |
(IX+1),A |
; генератора псевдослучайных чисел) |
|
170 |
LD |
C, #0F |
;Для определения скорости движения осколков |
|
180 LOOP |
CALL |
RNDA |
;генерируем число 0-15 и вычитаем 8, |
|
190 |
SUB |
#08 |
; получая число -8...+ 8; но если получаем |
|
200 |
JR |
Z,LOOP |
;скорость=0, то повторная генерация и |
|
210 |
LD |
(IX+2),A |
;повторная проверка. |
|
220 |
LD |
(KEY0+1),A |
; Помещаем скорость по оси X в буфер и |
|
230 |
CALL |
RNDA |
; флаг первого запуска (о нем позже). |
|
240 |
SUB |
#08 |
; Аналогично рассчитываем скорость по Y, |
|
250 |
LD |
(IX+3),A |
;но без проверки на 0; засылаем в буфер |
|
260 |
LD |
DE,#0004 |
;Переход к следующему элементу буфера на |
|
270 |
ADD |
IX, DE |
;4 байта вперед или возврат в Бейсик, |
|
280 |
DJNZ |
I NI T |
; если весь массив проинициализирован |
|
290 |
RET |
;Расклад: X, Y, скорость X, скорость Y. | |
|
300 EXPL |
LD |
IX,DATA |
;--- Основной блок --- |
|
310 |
LD |
BC,#FFFF |
; В ВС - счётчик на "активные осколки". |
|
78 | |||
ЭТЮДЫ
|
320 |
TYPE |
LD |
A,(IX+1) |
;Если коорд.=255 (чего быть не может), |
|
330 |
INC |
A |
;значит осколок улетел за край экрана, | |
|
340 |
JR |
Z, NEXT |
;поэтому переход без печати на экране | |
|
350 |
KEY0 |
LD |
A,#FF |
;Если флаг 1 -го запуска 7-00, то обходим |
|
360 |
OR |
A |
;вызов гашения точек (при первом проходе | |
|
370 |
CALL |
Z,CALC |
;выключать нечего - осколков ещё нет) | |
|
380 |
LD |
A, (IX+0) |
;Вычисляем новую Х-координату осколка: | |
|
390 |
ADD |
A, (IX+2) |
; складываем текущую координату и смещение | |
|
400 |
CP |
#08 |
; Если точка улетела за край экрана, | |
|
410 |
JR |
C, STOP |
; то выключаем её | |
|
420 |
LD |
(IX+0),A |
;3апоминаем новую координату в буфере. | |
|
430 |
LD |
A, (IX+1) |
;Аналогичные действия проводим и над | |
|
440 |
ADD |
A, (IX+3) |
;Y-координатой, проверяя достижение | |
|
450 |
CP |
#B0 |
;"осколком" верхней или нижней | |
|
460 |
JR |
C, CONT |
; части экрана | |
|
470 |
STOP |
LD |
(IX+1),#FF |
;3десь заносим в Y-координату 255, что |
|
480 |
JR |
NEXT |
;означает выключение осколка. | |
|
490 |
CONT |
LD |
(IX+1),A |
;3апоминаем новую Y-координату в буфере |
|
500 |
CALL |
CALC |
; и выполняем печать нового осколка | |
|
510 |
INC |
C |
; корректируем число | |
|
520 |
NEXT |
LD |
DE,#0 0 04 |
; оставшихся точек и |
|
530 |
ADD |
IX, DE |
; переходим к следующему | |
|
540 |
DJNZ |
TYPE |
; элементу массива | |
|
550 |
INC |
C |
; Если улетели не все осколки, то повтор | |
|
560 |
LD |
A, D |
; основного блока сначала (только | |
|
570 |
LD |
(KEY0+1),A |
; выключаем флаг первого прохода) | |
|
580 |
JR |
NZ,EXPL |
; Если точки улетели, | |
|
590 |
RET |
; то выход в Бейсик. | ||
|
600 |
CALC |
PUSH |
BC |
;--- Подпрограмма печати осколков --- |
|
610 |
LD |
C,(IX+0) |
;В С заносим из буфера Х-координату, | |
|
620 |
LD |
A, (IX+1) |
;А - Y-координату | |
|
630 |
CALL |
#22B0 |
;Вызываем из ПЗУ подпрограмму | |
|
640 |
LD |
B, A |
; расчёта адреса | |
|
650 |
INC |
B |
; и формируем осколок - | |
|
660 |
MOVE |
RRCA |
;- 1, 2 или 3 точки. | |
|
670 |
DJNZ |
MOVE | ||
|
680 |
XOR |
(HL) |
; Закладываем по XOR на имеющееся | |
|
690 |
LD |
(HL),A |
;изображение. | |
|
700 |
AND |
#10 | ||
|
710 |
OR |
0 |
;3десь задается цвет BORDER'a во время | |
|
720 |
OUT |
(# FE) , A |
;исполнения эффекта (первоначально 0). | |
|
730 |
POP |
BC | ||
|
740 |
RET | |||
|
750 |
RNDA |
LD |
DE,0 |
;--- Генератор псевдослучайных чисел --- |
|
760 |
LD |
H, E |
; Генерирует | |
|
770 |
LD |
L, #FD |
; псевдослучайное | |
|
780 |
LD |
A, D |
; число | |
|
790 |
OR |
D |
;в | |
|
800 |
SBC |
HL, DE |
; диапазоне | |
|
810 |
SBC |
A, 0 |
; от | |
|
820 |
SBC |
HL, DE |
; нуля | |
|
830 |
SBC |
A, 0 |
; до |
ЭТЮДЫ
|
840 |
LD |
E, A |
;числа, |
|
850 |
LD |
D, 0 |
;содержащегося |
|
860 |
SBC |
HL, DE |
;в |
|
870 |
JR |
NC,RND1 |
;регистре |
|
880 |
INC |
HL |
;C |
|
890RND1 |
LD |
(RNDA+1) |
,HL ;Генератор |
|
900 |
CP |
C |
; практически |
|
910 |
JR |
NC,RNDA |
; не |
|
920 |
RET |
;изменён | |
|
93 0 DATA |
DEFS |
1020 |
;3десь будет сформирован |
■ динамичной информации о координатах,
■ скорости и состоянии осколков в таком
■ формате: Х-координата (относительно левого ; верхнего угла) Y-координата скорость
■ точки по оси X скорость по оси Y (все в ^пикселях). Итого для 255 элементов по 4 мбайта = 1020 байтов
|
а кодов (без буфера для формирования данных) равна 183 |
байта | ||||||||
|
C350 |
DD |
21 |
07 |
C4 |
06 |
FF |
0E |
48 |
37 |
|
C358 |
CD |
E8 |
C3 |
C6 |
60 |
DD |
77 |
00 |
0D |
|
C360 |
0E |
10 |
CD |
E8 |
C3 |
C6 |
48 |
DD |
A4 |
|
C368 |
77 |
01 |
0E |
0F |
CD |
E8 |
C3 |
D6 |
0E |
|
C370 |
08 |
28 |
F9 |
DD |
77 |
02 |
32 |
97 |
7B |
|
C378 |
C3 |
CD |
E8 |
C3 |
D6 |
08 |
DD |
77 |
A8 |
|
C380 |
03 |
11 |
04 |
00 |
DD |
19 |
10 |
CE |
2 F |
|
C388 |
C9 |
DD |
21 |
07 |
C4 |
01 |
FF |
FF |
DC |
|
C390 |
DD |
7E |
01 |
3C |
28 |
2A |
3E |
FF |
7A |
|
C398 |
B7 |
CC |
CF |
C3 |
DD |
7E |
00 |
DD |
A8 |
|
C3A0 |
86 |
02 |
FE |
08 |
38 |
0D |
DD |
77 |
8A |
|
C3A8 |
00 |
DD |
7E |
01 |
DD |
86 |
03 |
FE |
2B |
|
C3B0 |
B0 |
38 |
06 |
DD |
36 |
01 |
FF |
18 |
8C |
|
C3B8 |
07 |
DD |
77 |
01 |
CD |
CF |
C3 |
0C |
42 |
|
C3C0 |
11 |
04 |
00 |
DD |
19 |
10 |
C9 |
0C |
73 |
|
C3C8 |
7A |
32 |
97 |
C3 |
20 |
BB |
C9 |
C5 |
FA |
|
C3D0 |
DD |
4E |
00 |
DD |
7E |
01 |
CD |
B0 |
97 |
|
C3D8 |
22 |
47 |
04 |
0F |
10 |
FD |
AE |
77 |
49 |
|
C3E0 |
E 6 |
10 |
F6 |
00 |
D3 |
FE |
C1 |
C9 |
EA |
|
C3E8 |
11 |
00 |
00 |
63 |
2E |
FD |
7A |
B2 |
76 |
|
C3F0 |
ED |
52 |
DE |
00 |
ED |
52 |
DE |
00 |
ED |
|
C3F8 |
5F |
16 |
00 |
ED |
52 |
30 |
01 |
23 |
C3 |
|
C400 |
22 |
E9 |
C3 |
B9 |
30 |
E2 |
C9 |
00 |
26 |
Программа состоит из двух частей: инициализатора и основного исполняемого модуля. Инициализатор подготавливает буфер-ячейки памяти, определяющие поведение осколков. Они используются программой при работе основного исполняемого модуля, непосредственно воспроизводящего эффект. Обе части программы объединены в блоке двумя точками входа: для исполняемого модуля адрес будет равен ORG+57, где ORG - адрес ассемблирования.
Буфер, создаваемый инициализатором, необходим для хранения динамической информации о координатах, скорости и состоянии осколков.
Теперь о том, как использовать процедуру. Допустим, что Вы хотите "взорвать" прямоугольную часть экрана, левый верхний угол которого имеет координаты AT 10,8 (в знакоместах), длиной в 6, высотой в 2 символа. Умножьте каждое из этих чисел на 8 и при
ассемблировании занесите получившиеся числа в переменные XCRD, YCRD, XLEN, YHGT. Для занесения координат в уже готовый блок, можно воспользоваться командами: POKE ORG+ 7,XLEN POKE ORG+12,XCRD POKE ORG+17,YHGT POKE ORG+22,YCRD
После передачи параметров запускайте инициализатор с адреса ORG. Далее придётся прибегнуть к маленькой хитрости: после инициализации будет необходимо удалить изображение во взрываемом прямоугольнике экрана, так как основная программа этого не сделает! Дело в том, что инициализатор подготавливает массив, используя случайные данные, поэтому нет контроля за тем, что находится в этом месте экрана (можно взорвать даже пустой прямоугольник). Но это несёт в себе и определенные преимущества, так как если взрываемый прямоугольник содержит в себе участок фона или пейзажа, который взрывать не надо, то после инициализации удалите (по XOR) только то, что собираетесь действительно взорвать (удалить с экрана). А разлетающиеся осколки не испортят основной фон.
Запуск взрывателя производится с адреса ORG+57.
Приведённая ниже Бейсик-программа предназначена для демонстрационной работы (автостарт со 2-й строки). Параметры для этого примера заданы в листинге на ассемблере.
1 GO ТО 4
2 BORDER 0: PAPER 0: INK 7: ВRIGHT 1: CLEAR 49999
3 RANDOMIZE USR 15619: REM : LOAD "expl" CODE 50000
4 FOR a=10 6 TO 160 STEP 6: CIRCLE a,96,8: NEXT a: RANDOMIZE USR 50000:
CLS : RANDOMIZE USR 50057: GO TO 4
Мне хотелось бы приобрести новых друзей по "Спекки". Если кого-то заинтересовали мои процедуры "СНЕГ" (см. ZX-РЕВЮ-95, № 2, стр. 30) и EXPLOSION, можете написать мне. О себе: мне 15 лет. Интересуюсь разработкой графических эффектов на АССЕМБЛЕРЕ.
103460, г. Москва, К-460, корп. 1202, кв. 97. _Щербакову Роману._
************************************************************************************* © Гревцев Я.В., г. Барнаул.
Предлагаю процедуру, которая является дальнейшим развитием программ "Звезды" и "Падающий снег", ранее опубликованных в ZX-РЕВЮ. Моя процедура, а я назвал её "Звезды-2", выводит на экран вспыхивающие и затухающие, качественно выполненные звезды. Эффект поразительно похож на тот, что реализован в титульном меню программы EXOLON, а также в некоторых "музыкальных" загрузчиках. Именно из одного из них я и срисовал шаблоны звёзд. Кроме этого внимательный читатель наверняка заметит, что все подпрограммы, используемые мною в процедуре, уже "засветились" в различных изданиях ИНФОРКОМА. Смею надеяться, что именно это поможет без помех разобраться в данной процедуре даже начинающим программистам. Всё это является примером того, как из в общем-то известных вещей можно составить нечто новое.
Принцип действия процедуры несложен: сначала данные о звезде записываются в массив описаний. Каждая звезда задается тремя параметрами.
1 и 2 байты - координаты звезды в дисплейном файле.
3 байт - номер текущего спрайта.
4 байт - текущая фаза жизни звезды.
Далее все просто: организуется счётчик по количеству звёзд. За каждый проход печатается новый спрайт размером 2x2 знакоместа. Когда звезда угасает, случайным образом находятся и записываются в массив новые для неё координаты.
Всё это великолепие продолжается до тех пор, пока не будет нажата клавиша BREAK (CAPS SHIFT+SPACE). "Подвесить" процедуру на прерывания 2 рода наверняка не составит
большого труда для просвещенных читателей ZX-РЕВЮ. Неплохо было бы объединить "Звезды-2" с процедурой "Падающий снег" - эффект был бы впечатляющий.
ИФК: При использовании процедуры в качестве "8сгееп-сейвера", сохраняющего ресурс монитора, необходимо добавить подпрограммы сохранения изображения с экрана в специальном буфере и очистку экрана перед вызовом "Звёзд-2", подпрограмму подсчёта количества прерываний и анализа нажатия на клавиши, а также подпрограмму восстановления изображения после первого нажатия на любую клавишу. Однако всё это Вы можете найти в предыдущих выпусках ZX-РЕВЮ.
1 2
ORG ENT
50000 $
|
3 ; 4 |
LD |
IX,MASS |
;Адрес массива описаний звёзд. | |
|
5 |
LD |
B, 20 |
;Количество звезд. | |
|
6 S |
1 |
CALL |
INIT |
;Инициализация координат звезды ;в дисплейном файле. |
|
7 |
CALL |
|
;Печать звезды. | |
|
8 |
LD |
DE,#0004 |
;Смещение до следующего | |
|
9 |
ADD |
IX, DE |
;элемента массива. | |
|
10 |
DJNZ |
S_1 |
;Инициализация всего массива. | |
|
11 |
BEGIN |
LD |
IX,MASS |
; |
|
12 |
LD |
B, 20 |
;Количество звёзд. | |
|
13 |
S 2 |
LD |
HL,7 50 |
;Задержка времени. Скорость |
|
14 |
S_4 |
DEC |
HL |
;вспыхивания и угасания звёзд, |
|
15 |
LD |
A, H |
; зависит от их количества, а | |
|
16 |
OR |
L |
; также от содержимого | |
|
17 |
JR |
NZ, S 4 |
; регистра HL | |
|
18 |
CALL |
|
;Напечатав звезду поверх её самой, ;мы тем самым стираем её. | |
|
19 |
LD |
A, (IX+3) |
;В аккумуляторе число, характеризующее ;фазу жизни звезды. | |
|
20 |
AND |
A |
;Сравниваем с нулем. | |
|
21 |
JR |
Z, UGAS |
;Если ноль, значит звезда угасает. ;Иначе... Звезда вспыхивает. | |
|
22 |
LD |
A, (IX+2) |
;Номер текущего спрайта. | |
|
23 |
INC |
A |
; Предыдущий уже стёрт, переходим на ;следующий. | |
|
24 |
CP |
5 |
;Заодно проверяем, не был ли ;это последний спрайт. | |
|
25 |
JR |
NZ, S 3 |
;Если нет, то переход на печать. Иначе ;звезда должна угасать. Значит, печатаем ;спрайты в обратной последовательности. ;Поэтому. | |
|
26 |
LD |
(IX+3),0 |
;Фаза жизни теперь равна нулю. | |
|
27 |
DEC |
A |
; Становимся на один | |
|
28 |
DEC |
A |
; спрайт ниже . | |
|
29 |
JR |
S_3 |
;Спокойно идём на печать. ;Звезда угасает. | |
|
30 |
UGAS |
DEC |
(IX+2) |
;Уменьшили номер спрайта ни единицу. |
|
31 |
JR |
NZ,S 3A |
; Если это был последний спрайт, то сие ;означает, что звезда сгорела. Теперь она ;должна вспыхнуть в другом месте. | |
|
32 |
LD |
(IX+3),1 |
;Соответственно изменилась и фаза. |
ЭТЮДЫ
|
33 |
CALL |
I NI T |
;Ищем новые координаты звезды. | ||
|
34 |
LD |
A, 1 |
;Печать новой звезды начинается | ||
|
35 |
S |
3 |
LD |
(IX+2),A |
;всегда с первого спрайта. |
|
36 |
S_ |
3A |
CALL |
|
;Печатаем спрайт. |
|
37 |
LD |
DE, #0004 |
; Смещение до следующего | ||
|
38 |
ADD |
IX, DE |
;элемента массива. | ||
|
39 |
PUSH |
BC |
;Процедура проверки клавиш. | ||
|
40 |
LD |
BC,#FEFE |
;При одновременном нажатии | ||
|
41 |
IN |
A, (C) |
;CAPS SHIFT и SPACE (BREAK) | ||
|
42 |
AND |
1 |
; происходит очистка экрана | ||
|
43 |
LD |
E, A |
; от звёзд и выход | ||
|
44 |
LD |
BC,#7 FFE |
;из процедуры. | ||
|
45 |
IN |
A, (C) |
; | ||
|
46 |
AND |
1 |
;Можно организовать выход | ||
|
47 |
OR |
E |
;любым другим способом. | ||
|
48 |
JR |
NZ, S 6 |
; | ||
|
49 |
LD |
IX,MASS |
; | ||
|
50 |
LD |
B, 20 |
; | ||
|
51 |
S_ |
5 |
CALL |
|
; |
|
52 |
LD |
DE, #0004 |
; | ||
|
53 |
ADD |
IX, DE |
; | ||
|
54 |
DJNZ |
S_5 |
; | ||
|
55 |
POP |
BC |
; | ||
|
56 |
RET |
; | |||
|
57 |
S_ |
6 |
POP |
BC |
; |
|
58 |
DJNZ |
S_2 |
;Повтор для каждой звезды. | ||
|
59 |
JR |
BEGIN |
;Повтор до нажатия BREAK. |
; Подпрограмма инициализации одного элемента массива. ; Случайным образом находит и записывает в ячейки ; (IX+0) и (IX+1) координаты звезды в дисплейном файле.
|
60 INIT |
LD |
HL,(23670) |
; Подпрограмма взята | |
|
61 |
LD |
DE, (23672) |
;из ZX-РЕВЮ-93 № 5-6, стр. 97 | |
|
62 |
ADD |
HL, DE | ||
|
63 |
LD |
(23670) |
, HL |
;Аналогично команде Бейсика |
|
64 |
LD |
A, L |
;INT (RND* 32) . | |
|
65 |
AND |
31 |
;B A число от 0 до 31. | |
|
66 |
LD |
D, A |
;Записали координату Х. | |
|
67 |
PUSH |
DE | ||
|
68 |
LD |
HL, (23670) | ||
|
69 |
LD |
DE, (23672) | ||
|
70 |
ADD |
HL, DE | ||
|
71 |
LD |
(23670) |
, HL | |
|
72 |
LD |
A, H | ||
|
73 |
AND |
15 | ||
|
74 |
LD |
H, A | ||
|
75 |
LD |
A, L |
; Аналогично команде Бейсика | |
|
76 |
AND |
7 |
;INT (RND*23). | |
|
77 |
ADD |
A, H |
;В А число от 0 до 23. | |
|
78 |
POP |
DE | ||
|
79 |
LD |
E, A |
; Записали координату Y. | |
; Отсюда начинается расчёт адреса в дисплейном файле. ; К этому моменту в DE - координаты звезды в знакоместах.
ЭТЮДЫ
|
; Эта |
часть программы |
взята |
из ZX-РЕВЮ-93 № 3, стр. 4 4 | |
|
80 |
AND |
#18 | ||
|
81 |
ADD |
A, #40 |
;Старший байт сформирован | |
|
82 |
LD |
(IX+0 |
) , A |
;и записан в массив. |
|
83 |
LD |
A, E | ||
|
84 |
AND |
7 | ||
|
85 |
RRCA |
; | ||
|
86 |
RRCA |
; | ||
|
87 |
RRCA |
; | ||
|
88 |
ADD |
A, D |
;Младший байт сформирован | |
|
89 |
LD |
(IX+1 |
) , A |
;и записан в массив. |
|
90 |
RET | |||
Подпрограмма печати (стирания) звезды. Взята из ZX-FORUM-1 стр. 130
|
91 PRINT |
PUSH |
BC |
;Запомнили ВС для корректного ;выхода из подпрограммы. |
|
92 |
LD |
B,(IX+2) |
;Приняли номер шаблона спрайта. ;Организовали счётчик шаблонов. |
|
93 |
LD |
DE,32 |
;Длина шаблона 32 байта. |
|
94 |
LD |
HL,STAR-32 |
;Адрес указывает на одну длину ;спрайта ниже, чем начало таблицы. |
|
95 PR 1 |
ADD |
HL,DE |
;Смещение на длину шаблона. |
|
96 |
DJNZ |
PR 1 |
;Повторяем столько раз, каков номер ;шаблона. В результате HL указывает на ;положение искомого спрайта в таблице. |
|
97 |
LD |
D,(IX+0) |
;DE указывает на адрес |
|
98 |
LD |
E, (IX+1) |
;в дисплейном файле. |
|
99 |
LD |
B, 2 |
;В - счётчик строк. |
|
100 PR 2 |
PUSH |
BC |
; |
|
101 |
PUSH |
DE |
; |
|
102 |
LD |
B, 8 |
; |
|
103 PR 3 |
PUSH |
BC |
; |
|
104 |
PUSH |
DE | |
|
105 |
LD |
B, 2 |
;В - счётчик столбцов. |
|
106 PR 4 |
LD |
A,(DE) |
; Загрузили аккумулятор ;очередным байтом экрана. |
|
107 |
XOR |
(HL) |
;Слияние по XOR с очередным байтом шаблона. |
|
108 |
LD |
(DE) , A |
;Печать байта на экран по XOR. |
|
109 |
INC |
DE |
; |
|
110 |
INC |
HL | |
|
111 |
DJNZ |
PR 4 | |
|
112 |
POP |
DE | |
|
113 |
POP |
BC |
; |
|
114 |
INC |
D |
; |
|
115 |
DJNZ |
PR 3 |
; |
|
116 |
POP |
DE |
; |
|
117 |
POP |
BC |
; |
|
118 |
LD |
A, 32 | |
|
119 |
ADD |
A, E |
; |
|
120 |
LD |
E, A | |
|
121 |
JR |
NC,PASS |
; |
|
122 |
LD |
A, 8 |
; |
|
123 |
ADD |
A, D |
124 LD D, A ;
12 5 PASS DJNZ PR_2 ;
12 6 POP BC ; Восстановили BC.
12 7 RET ;Выход.
; Массив описаний для 2 0 звёзд.
; Для описания каждой звёзды необходимо 4 байта: ; 2 байта - координаты в дисплейном файле; ; 3-й байт - номер текущего спрайта;
; 4-й байт - фаза жизни звёзды.
|
128 |
MASS |
DEFB |
#00, |
#00, |
#01, |
#01, |
#00, |
#00, |
#01, |
#01 |
|
129 |
DEFB |
#00, |
#00, |
#02, |
#00, |
#00, |
#00, |
#02, |
#01 | |
|
130 |
DEFB |
#00, |
#00, |
#03, |
#00, |
#00, |
#00, |
#03, |
#01 | |
|
131 |
DEFB |
#00, |
#00, |
#03, |
#00, |
#00, |
#00, |
#03, |
#01 | |
|
132 |
DEFB |
#00, |
#00, |
#04, |
#00, |
#00, |
#00, |
#01, |
#01 | |
|
133 |
DEFB |
#00, |
#00, |
#03, |
#00, |
#00, |
#00, |
#03, |
#01 | |
|
134 |
DEFB |
#00, |
#00, |
#04, |
#00, |
#00, |
#00, |
#02, |
#01 | |
|
135 |
DEFB |
#00, |
#00, |
#03, |
#00, |
#00, |
#00, |
#03, |
#01 | |
|
136 |
DEFB |
#00, |
#00, |
#02, |
#00, |
#00, |
#00, |
#02, |
#01 | |
|
137 |
DEFB |
#00, |
#00, |
#04, |
#00, |
#00, |
#00, |
#03, |
#01 | |
|
; Таблица |
шаблонов звёзд. | |||||||||
|
; 4 |
шаблона размером |
2x2 |
знакоместа . | |||||||
|
139 |
STAR |
DEFB |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00 |
|
140 |
DEFB |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#80 | |
|
141 |
DEFB |
#01, |
#C0, |
#00, |
#80, |
#00, |
#00, |
#00, |
#00 | |
|
142 |
DEFB |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00 | |
|
143 |
; | |||||||||
|
144 |
DEFB |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00 | |
|
145 |
DEFB |
#00, |
#00, |
#00, |
#80, |
#00, |
#00, |
#00, |
#80 | |
|
146 |
DEFB |
#05, |
#D0, |
#00, |
#80, |
#00, |
#00, |
#00, |
#80 | |
|
147 1 Л Я 148 |
DEFB |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00, |
#00 | |
|
149 |
; DEFB |
#00, |
#00, |
#00, |
#00, |
#00, |
#80, |
#00, |
#00 | |
|
150 |
DEFB |
#00, |
#80, |
#00, |
#90, |
#02, |
#80, |
#01, |
#C0 | |
|
151 |
DEFB |
#2 F, |
#F4, |
#01, |
#C0, |
#00, |
#A0, |
#04, |
#80 | |
|
152 |
DEFB |
#00, |
#00, |
#00, |
#80, |
#00, |
#00, |
#00, |
#00 | |
|
153 |
; | |||||||||
|
154 |
DEFB |
#00, |
#80, |
#00, |
#00, |
#00, |
#80, |
#10, |
#08 | |
|
155 |
DEFB |
#00, |
#80, |
#04, |
#80, |
#02, |
#A0, |
#01, |
#C0 | |
|
156 |
DEFB |
#5F, |
#FD, |
#01, |
#C0, |
#02, |
#80, |
#04, |
#90 | |
|
157 |
DEFB |
#00, |
#88, |
#10, |
#80, |
#00, |
#00, |
#00, |
#80 | |
Длина блока кодов процедуры равна 445 байт:
|
C350 |
DD |
21 |
3D |
C4 |
06 |
14 |
CD |
CD |
C6 |
|
C358 |
C3 |
CD |
04 |
C4 |
11 |
04 |
00 |
DD |
65 |
|
C360 |
19 |
10 |
F3 |
DD |
21 |
3D |
C4 |
06 |
44 |
|
C368 |
14 |
21 |
EE |
02 |
2B |
7C |
B5 |
20 |
CC |
|
C370 |
FB |
CD |
04 |
C4 |
DD |
7E |
03 |
A7 |
C8 |
|
C378 |
28 |
10 |
DD |
7E |
02 |
3C |
FE |
05 |
0F |
|
C380 |
20 |
16 |
DD |
36 |
03 |
00 |
3D |
3D |
09 |
|
C388 |
18 |
0E |
DD |
35 |
02 |
20 |
0C |
DD |
8E |
|
C390 |
36 |
03 |
01 |
CD |
CD |
C3 |
3E |
01 |
29 |
|
C398 |
DD |
77 |
02 |
CD |
04 |
C4 |
11 |
04 |
5B |
|
C3A0 |
00 |
DD |
19 |
C5 |
01 |
FE |
FE |
ED |
08 |
ЭТЮДЫ
|
C3A8 |
78 |
E6 |
01 |
5F |
01 |
FE |
7F |
ED |
94 |
|
C3B0 |
78 |
E6 |
01 |
B3 |
20 |
12 |
DD |
21 |
B5 |
|
C3B8 |
3D |
C4 |
06 |
14 |
CD |
04 |
C4 |
11 |
3C |
|
C3C0 |
04 |
00 |
DD |
19 |
10 |
F6 |
C1 |
C9 |
0D |
|
C3C8 |
C1 |
10 |
9E |
18 |
96 |
2A |
76 |
5C |
A4 |
|
C3D0 |
ED |
5B |
78 |
5C |
19 |
22 |
76 |
5C |
BC |
|
C3D8 |
7D |
E6 |
1F |
57 |
D5 |
2A |
76 |
5C |
45 |
|
C3E0 |
ED |
5B |
78 |
5C |
19 |
22 |
76 |
5C |
CC |
|
C3E8 |
7C |
E6 |
0F |
67 |
7D |
E6 |
07 |
84 |
71 |
|
C3F0 |
D1 |
5F |
E6 |
18 |
C6 |
40 |
DD |
77 |
3B |
|
C3F8 |
00 |
7B |
E6 |
07 |
0F |
0F |
0F |
82 |
D2 |
|
C400 |
DD |
77 |
01 |
C9 |
C5 |
DD |
46 |
02 |
CC |
|
C408 |
11 |
20 |
00 |
21 |
6D |
C4 |
19 |
10 |
78 |
|
C410 |
FD |
DD |
56 |
00 |
DD |
5E |
01 |
06 |
46 |
|
C418 |
02 |
C5 |
D5 |
06 |
08 |
C5 |
D5 |
06 |
26 |
|
C420 |
02 |
1A |
AE |
12 |
13 |
23 |
10 |
F9 |
FF |
|
C428 |
D1 |
C1 |
14 |
10 |
F0 |
D1 |
C1 |
3E |
62 |
|
C430 |
20 |
83 |
5F |
30 |
04 |
3E |
08 |
82 |
F2 |
|
C438 |
57 |
10 |
DE |
C1 |
C9 |
00 |
00 |
01 |
CC |
|
C440 |
01 |
00 |
00 |
01 |
01 |
00 |
00 |
02 |
09 |
|
C448 |
00 |
00 |
00 |
02 |
01 |
00 |
00 |
03 |
12 |
|
C450 |
00 |
00 |
00 |
03 |
01 |
00 |
00 |
03 |
1B |
|
C458 |
00 |
00 |
00 |
03 |
01 |
00 |
00 |
04 |
24 |
|
C460 |
00 |
00 |
00 |
01 |
01 |
00 |
00 |
03 |
29 |
|
C468 |
00 |
00 |
00 |
03 |
01 |
00 |
00 |
04 |
34 |
|
C470 |
00 |
00 |
00 |
02 |
01 |
00 |
00 |
03 |
3A |
|
C478 |
00 |
00 |
00 |
03 |
01 |
00 |
00 |
02 |
42 |
|
C480 |
00 |
00 |
00 |
02 |
01 |
00 |
00 |
04 |
4B |
|
C488 |
00 |
00 |
00 |
03 |
01 |
00 |
00 |
00 |
50 |
|
C490 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
54 |
|
C498 |
00 |
00 |
00 |
00 |
80 |
01 |
C0 |
00 |
9D |
|
C4A0 |
80 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
E4 |
|
C4A8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
6C |
|
C4B0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
74 |
|
C4B8 |
80 |
00 |
00 |
00 |
80 |
05 |
D0 |
00 |
51 |
|
C4C0 |
80 |
00 |
00 |
00 |
80 |
00 |
00 |
00 |
84 |
|
C4C8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
8C |
|
C4D0 |
00 |
00 |
80 |
00 |
00 |
00 |
80 |
00 |
94 |
|
C4D8 |
90 |
02 |
80 |
01 |
C0 |
2F |
F4 |
01 |
93 |
|
C4E0 |
C0 |
00 |
A0 |
04 |
80 |
00 |
00 |
00 |
88 |
|
C4E8 |
80 |
00 |
00 |
00 |
00 |
00 |
80 |
00 |
AC |
|
C4F0 |
00 |
00 |
80 |
10 |
08 |
00 |
80 |
04 |
D0 |
|
C4F8 |
80 |
02 |
A0 |
01 |
C0 |
5F |
FD |
01 |
FC |
|
C500 |
C0 |
02 |
80 |
04 |
90 |
00 |
88 |
10 |
33 |
|
C508 |
80 |
00 |
00 |
00 |
80 |
00 |
00 |
00 |
CD |
************************************************************************************* © С. Астров, г. Чебоксары, 1995.
Я предлагаю программу, аналогичную программе "Звёзды" (2Х-РЕВЮ-94, № 5, стр. 5), предназначенную для сохранения ресурса видеомонитора. Во время дежурного режима на экране появляются и исчезают голубые горизонтальные линии-штрихи размером 8x1 пиксель. Полоски не
так привычны, как "звёзды" в Norton Commander, но и не так круто, как "горящий" экран в DOS Navigator (IBM PC). Зато моя программа "дешевле" - всего 59 байт.
Предлагаемая процедура предназначена для монохромного экрана, так как не использует дополнительной памяти для буфера. С экрана удаляются только атрибуты, а сама картинка -остается. Например, она может использоваться в появляющихся в последнее время резидентных "расширителях" функций встроенного БЕЙСИК-редактора. Программа легко может быть переделана и для цветного экрана (об этом см. ниже).
Полоски получаются так: в каком-либо знакоместе включается атрибут (PAPER 5; INK 5) и через 18 тактов процессора выключается (PAPER 0; INK 0). За это короткое время SPECCY не успевает закрасить весь квадрат атрибутов (8x8), а успевает только прорисовать полоску 8x1 пиксель.
При выходе из процедуры восстанавливаются атрибуты из ATTR_P (23693), а цвет бордюра - из BORDER (23693).
|
1 |
ORG |
50000 |
|
2 TIME |
EQU |
12 |
|
3 LINES |
LD |
A,(23673) |
|
4 |
CP |
TIME |
|
5 |
RET |
C |
|
6 |
XOR |
A |
|
7 |
LD |
(23560),A |
|
8 |
OUT |
(# FE) , A |
|
9 |
CALL |
FILL |
|
10 |
LD |
D, A |
|
11 LOOP |
LD |
HL,22530 |
|
12 |
ADD |
HL, DE |
|
13 |
ADD |
HL, DE |
|
14 |
ADD |
HL, DE |
|
15 |
LD |
(HL),45 |
|
16 |
INC |
E |
|
17 |
LD |
A, (23560) |
|
18 |
AND |
A |
|
19 |
LD |
(HL),D |
|
20 |
JR |
Z, LOOP |
|
21 |
LD |
HL,255 |
|
22 |
LD |
E, L |
|
23 |
CALL |
#03B5 |
|
24 |
LD |
A, ( 23693) |
|
25 FILL |
LD |
HL,22528 |
|
26 |
LD |
DE, 22529 |
|
27 |
LD |
BC,767 |
|
28 |
LD |
(HL),A |
|
29 |
LDIR | |
|
30 |
XOR |
A |
|
31 |
LD |
(23673),A |
|
32 |
RET |
Вызывающая программа после каждого нажатия клавиши должна обнулять содержимое ячейки 23673 (второго байта FRAMES). Периодически вызывая подпрограмму LINES, надо проверять флаг CARRY; если он выключен - то экран в дежурном режиме, если включен - то нет.
Для демонстрационного запуска процедуры "Lines" дополните листинг, приведенный выше, следующими строками (точка входа ENT, учитывая длину процедуры LINES, будет соответствовать адресу 50059): 33 ;EXAMPLE
|
34 |
;----- | ||
|
35 |
ENT |
$ | |
|
36 |
CALL |
#0D6B | |
|
37 |
LD |
A, 2 | |
|
38 |
CALL |
#1601 | |
|
39 |
IIN |
XOR |
A |
|
40 |
LD |
(23673),A | |
|
41 |
RES |
5,(IY+1) | |
|
42 |
WAIT |
CALL |
LINES |
|
43 |
JR |
NC,IIN | |
|
44 |
BIT |
5,(IY+1) | |
|
45 |
JR |
Z , WAI T | |
|
46 |
LD |
A, (23560) | |
|
47 |
CP |
32 | |
|
48 |
RET |
Z | |
|
49 |
RST |
#10 | |
|
50 |
JR |
IIN |
Этот фрагмент аналогичен приведённому для процедуры "Звёзды" в указанном выше номере ZX-РЕВЮ. Продемонстрировать работу процедуры поможет Бейсик-программа (автостарт со 2 строки):
1 GO ТО 10
2 BORDER 1: PAPER 1: INK 7: CLEAR 4 9999
3 RANDOMIZE USR 15619: REM : LOAD "lines1" CODE 10 BEEP .1,20: RANDOMIZE USR 50059
После старта Вы услышите звуковой сигнал. Наберите на экране что-нибудь, пользуясь цифровыми и буквенными клавишами, а также клавишей ENTER. Не трогайте клавиатуру 1 минуту - программа перейдет в дежурный режим. Теперь нажмите любую клавишу - изображение восстановится. Для завершения работы - нажмите SPACE или BREAK.
Шестнадцатеричный дамп процедуры (с демонстрационным блоком строки 33-50 - файл "lines" CODE 50000,95):
|
C350 |
3A |
79 |
5C |
FE |
0C |
D8 |
AF |
32 |
E5 |
|
C358 |
08 |
5C |
D3 |
FE |
CD |
7A |
C3 |
57 |
B1 |
|
C360 |
21 |
02 |
58 |
19 |
19 |
19 |
36 |
2D |
4C |
|
C368 |
1C |
3A |
08 |
5C |
A7 |
72 |
28 |
F0 |
16 |
|
C370 |
21 |
FF |
00 |
5D |
CD |
B5 |
03 |
3A |
6F |
|
C378 |
8D |
5C |
21 |
00 |
58 |
11 |
01 |
58 |
07 |
|
C380 |
01 |
FF |
02 |
77 |
ED |
B0 |
AF |
32 |
3A |
|
C388 |
79 |
5C |
C9 |
CD |
6B |
0D |
3E |
02 |
6E |
|
C390 |
CD |
01 |
16 |
AF |
32 |
79 |
5C |
FD |
EA |
|
C398 |
CB |
01 |
AE |
CD |
50 |
C3 |
30 |
F3 |
D8 |
|
C3A0 |
FD |
CB |
01 |
6E |
28 |
F5 |
3A |
08 |
F9 |
|
C3A8 |
5C |
FE |
20 |
C8 |
D7 |
18 |
E4 |
00 |
80 |
Если в разных местах экрана атрибуты различны, то появляется необходимость в буфере на 768 байт для хранения атрибутов. Переброску 768 байт файла атрибутов с экрана в буфер нужно вставить вместо CALL FILL в 9 строке. А обратную переброску для восстановления - вместо строк 25-29.
************************************************************************************* © Pentagram Software, 1995.
Эта программа предназначена для вывода текста крупной бегущей строкой в нижней трети экрана. Программа работает со вторым режимом прерывания и предназначена для программ-"музыкалок". Этот скроллер был впервые написан RAF (Польша, Вроцлав), затем им пользовался.
Bill Gilbert в программе ТОР 128'2, из которой он перекочевал в программы, которые создавали KLAV и Vasilyev Anton (в частности, MSX 1-8, Mega Sound). Я взломал программу Bill Gilbert'a и " вытащил" этот скроллер.
; Attribut IM2-scroller ; Writing by RAF
; Cracked by PENTAGRAMM SOFTWARE ; Kherson, 1995
ORG 52 000 ENT $ DI
LD HL,#4000 ; Очистка экрана.
LD DE, #4001 LD BC,#1AFF LD (HL),L LDIR XOR A OUT (# FE) ,A CALL INIT LD A, 1 ; Вектор прерывания, его можно ; менять, но тогда надо менять ; адрес во втором ORG.
LD I, A ; Включение режима IM 2. IM 2 EI
LOOP HALT
LD A,#7 F ; Опрос клавиатуры.
IN A,(#FE) RRA
JR C, LOOP IM 1 ; 3авершение программы. RET
INIT LD HL,TEXT
LD (CONLET),HL LD A, 2 LD HL,BUFF ; Очистка буфера хранения символа. LD DE, BUFF+1 LD BC,7 LD (HL),0 LDIR
LD (LAB1),A LD A,#81 LD (LAB2),A LD HL,#5000 LD DE, #5001 LD BC,#07FF LD (HL),#FF
|
LDIR | |
|
SUB |
A |
|
LD |
C, A |
|
LD |
B, #80 |
|
LD |
DE,#5B0 0 |
|
PUSH |
AF |
|
PUSH |
BC |
|
CALL |
#22B0 |
|
EX |
DE, HL |
|
LD |
(HL),E |
|
INC |
HL |
|
LD |
(HL),D |
|
INC |
HL |
|
EX |
DE, HL |
|
POP |
BC |
|
POP |
AF |
|
INC |
A |
|
LOOP1 | |
|
RET | |
|
DEFW |
0 |
|
DEFS |
8 |
для символа.
LOOP1
DJNZ
CONLET BUFF ; Буфер
LD A,(LAB1)
CALL Z,SCR1
LD (LAB1),A
CALL SCR5 RET
LD HL,(CONLET)
LD A,(HL)
CALL Z,SCR2
LD (CONLET),HL
LD DE, ( #5C3 6)
SCROLL
SCR1
; Адрес
|
CHARS. | ||
|
ADD |
HL, |
HL |
|
ADD |
HL, |
HL |
|
ADD |
HL, |
HL |
|
ADD |
HL, |
DE |
|
LD |
DE, |
BUFF |
|
LD |
BC, |
8 |
|
LDIR | ||
|
LD |
8 < | |
|
RET |
SCR2 LD HL,TEXT
LD A,(HL) RET
SCR3 LD HL,#5A01
; Адрес в файле атрибутов, ; которого начинается ; скроллирование.
с
|
LD |
A, 8 |
|
PUSH |
HL |
|
LD |
D, H |
|
LD |
E, L |
|
DEC |
DE |
|
LD |
BC, 31 |
|
LDIR | |
|
LD |
(HL),0 |
|
POP |
HL |
|
LD |
DE, 32 |
|
ADD |
HL, DE |
|
DEC |
A |
|
JR |
NZ,LOOP2 |
|
RET | |
|
LD |
IX,BUFF |
|
LD |
DE, 32 |
|
LD |
HL,#5A1F |
|
LD |
B, 8 |
|
RL |
(IX+0) |
|
PUSH |
AF |
|
SBC |
A, A |
|
OR |
2 |
|
LD |
(HL),A |
|
ADD |
HL, DE |
|
DEC |
HL |
|
POP |
AF |
|
JR |
NC,SKIP1 |
|
LD |
A,(HL) |
|
CP |
#FF |
|
JR |
Z, SKIP1 |
|
RES |
1,(HL) |
|
INC |
HL |
|
INC |
IX |
|
DJNZ |
LOOP3 |
|
RET | |
|
LD |
HL,#5700 |
в дисплейном файле.
|
LD |
(STK1),HL |
|
LD |
IX, LAB2 |
|
CALL |
SCR6 |
|
CALL |
SCR6 |
|
CALL |
SCR6 |
|
RLC |
(IX+0) |
|
RLC |
(IX+0) |
|
RLC |
(IX+0) |
LOOP2
SCR4
LOOP3
SKIP1
SCR5 ; Адрес
RLC (IX+0) RET
LD (STK2+1),SP
LD SP,(STK1)
LD E, (IX+0)
LD (STK1),SP
LD SP,0 RET
DEFM "PENTAGRAM "
DEFM "SOFTWARE "
DEFM "PRESENTS "
DEFM "MEGA "
DEFM "SCROLL "
DEFB #FF ; Маркер конца текста.
ORG 52818 ; Адрес по вектору прерываний.
PUSH HL ; Процедура обработки ; прерывания.
SCR6
LOOP4
STK2 TEXT
|
PUSH |
IX |
|
CALL |
SCROLL |
|
POP |
IX |
|
POP |
HL |
|
POP |
DE |
|
POP |
BC |
|
POP |
AF |
|
JP |
#0038 |