(c) Смолянкин Олег, 1996.
Олег прислал несколько проце-
дур очистки экрана, которые мож-
но использовать в различных иг-
ровых программах. Первая проце-
дура производит очистку разделе-
нием каждого знакоместа пополам
и сдвигает содержимое одной по-
ловины влево, а другой - вправо.1412.
10 ORG 40000
20 LD B,8
30 LOOP2 LD HL,16384
40 PUSH BC
50 HALT
60 LD BC,#0C00
70 LOOP1 SLA (HL)
80 INC HL
90 SRL (HL)
100 INC HL
110 DEC BC
120 LD A,B
130 OR C
140 JR NZ,LOOP1
150 POP BC
160 DJNZ LOOP2
170 LD HL,22528
180 LD DE,22529
190 LD BC,767
200 LD (HL),#47
210 LDIR
220 XOR A
230 OUT (254),A
240 RET2
Далее приводим дамп памяти:
9C40: 06 08 21 00 40 C5 76 01:87
9C48: 00 0C CB 26 23 CB 3E 23:30
9C50: 0B 78 B1 20 F5 C1 10 EA:F0
9C58: 21 00 58 11 01 58 01 FF:D7
9C60: 02 36 47 ED B0 AF D3 FE:98
9C68: C9 00 00 00 00 00 00 00:CD
Следующую процедуру Олег
вытащил у HACKER'а STINGER'а из
STIFFLIP & CO LOADER. Практичес-
ки такая же процедура была опуб-
ликована в ZX РЕВЮ 95/2. Однако,
эта отличается тем, что линия
формируется регистром регенера-
ции.
1412.
10 ORG 40000
20 LD HL,16384
30 LD B,192
40 LOOP PUSH BC
50 PUSH HL
60 PUSH HL
70 CALL LINE
80 POP HL
90 CALL CLS
100 POP HL
110 CALL ADDR
120 POP BC
130 DJNZ LOOP
140 RET
150 LINE LD B,32
160 LD A,R
170 AND 63
180 LD D,A
190 L1 LD A,(DE)
200 LD (HL),A
210 INC HL
220 INC DE
230 DJNZ L1
240 LD BC,1000
250 PAUSE DEC BC
260 LD A,B
270 OR C
280 JR NZ,PAUSE
290 RET
300 CLS PUSH HL
310 POP DE
320 INC DE
330 LD (HL),0
340 LD BC,31
350 LDIR
360 RET
370 ADDR INC H
380 LD A,H
390 AND 7
400 RET NZ
410 LD A,L
420 ADD A,32
430 LD L,A
440 RET C
450 LD A,H
460 SUB 8
470 LD H,A
480 RET
2
И дамп программы:
9C40: 21 00 40 06 C0 C5 E5 E5:92
9C48: CD 57 9C E1 CD 6D 9C E1:3C
9C50: CD 78 9C C1 10 EF C9 06:5C
9C58: 20 ED 5F E6 3F 57 1A 77:6D
9C60: 23 13 10 FA 01 E8 03 0B:33
9C68: 78 B1 20 FB C9 E5 D1 13:DA
9C70: 36 00 01 1F 00 ED B0 C9:C8
9C78: 24 7C E6 07 C0 7D C6 20:C4
9C80: 6F D8 7C D6 08 67 C9 00:ED
Следующая процедура похожа
на предыдущую, только при очист-
ке на экран не выводится полоса.
1412.
10 ORG 40000
20 LD HL,22496
30 EXX
40 PUSH HL
50 LD HL,16384
60 LD B,95
70 LOOP HALT
80 EXX
90 CALL CLS
100 DEC H
110 LD A,H
120 AND 7
130 CP 7
140 JR NZ,NEXT
150 LD A,L
160 SUB 32
170 LD L,A
180 JR C,NEXT
190 LD A,H
200 ADD A,8
210 LD H,A
220 NEXT EXX
230 CALL CLS
240 INC H
250 LD A,H
260 AND 7
270 JR NZ,NEXT1
280 LD A,L
290 ADD A,32
300 LD L,A
310 JR C,NEXT1
320 LD A,H
330 SUB 8
340 LD H,A
350 NEXT1 DJNZ LOOP
360 POP HL
370 EXX
380 RET
390 CLS LD E,L
400 LD D,32
410 C1 LD (HL),0
420 INC L
430 DEC D
440 JR NZ,C1
450 LD L,E
460 RET
2
И дамп программы:
9C40: 21 E0 57 D9 E5 21 00 40:53
9C48: 06 5F 76 D9 CD 7A 9C 25:A0
9C50: 7C E6 07 FE 07 20 0A 7D:01
9C58: D6 20 6F 38 04 7C C6 08:DF
9C60: 67 D9 CD 7A 9C 24 7C E6:A5
9C68: 07 20 0A 7D C6 20 6F 38:3F
9C70: 04 7C D6 08 67 10 D3 E1:95
9C78: D9 C9 5D 16 20 36 00 2C:AB
9C80: 15 20 FA 6B C9 00 00 00:7F
И последняя процедура очищает
экран изменением атрибутов. Про-
изводит она это постепенным на-
ращиванием окантовки. И каждый
раз цвет экрана меняется.
1412.
10 ORG 40000
20 LD A,7
30 CALL MAIN
40 LD A,5
50 CALL MAIN
60 LD A,1
70 CALL MAIN
80 XOR A
90 CALL MAIN
100 LD HL,16384
110 LD DE,16385
120 LD BC,6911
130 LD (HL),0
140 LDIR
150 LD A,(23693)
160 PUSH AF
170 RRCA
180 RRCA
190 RRCA
200 AND 7
210 OUT (254),A
220 POP AF
230 JR M1
240 MAIN OUT (254),A
250 LD E,A
260 RLCA
270 RLCA
280 RLCA
290 XOR E
300 M1 LD HL,22528
310 LD BC,#2018
320 LD D,#0C
330 L1 PUSH DE
340 PUSH BC
350 PUSH HL
360 PUSH AF
370 CALL CLS
380 HALT
390 HALT
400 POP AF
410 POP HL
420 LD BC,33
430 ADD HL,BC
440 POP BC
450 DEC B
460 DEC B
470 DEC C
480 DEC C
490 POP DE
500 DEC D
510 JR NZ,L1
520 RET
530 CLS LD (MEM1),A
540 LD DE,32
550 LD A,B
560 LD (MEM2),A
570 LD A,C
580 LD (MEM3),A
590 LD A,(MEM2)
600 LD B,A
610 LD A,(MEM1)
620 C1 LD (HL),A
630 INC HL
640 DJNZ C1
650 DEC HL
660 LD A,(MEM3)
670 LD B,A
680 LD A,(MEM1)
690 C2 LD (HL),A
700 ADD HL,DE
710 DJNZ C2
720 AND A
730 SBC HL,DE
740 LD A,(MEM2)
750 LD B,A
760 LD A,(MEM1)
770 C3 LD (HL),A
780 DEC HL
790 DJNZ C3
800 INC HL
810 LD A,(MEM3)
820 LD B,A
830 LD A,(MEM1)
840 C4 LD (HL),A
850 AND A
860 SBC HL,DE
870 DJNZ C4
880 RET
890 MEM1 DEFB 0
900 MEM2 DEFB 0
910 MEM3 DEFB 02
И дамп программы:
9C40: 3E 07 CD 6E 9C 3E 05 CD:08
9C48: 6E 9C 3E 01 CD 6E 9C AF:B3
9C50: CD 6E 9C 21 00 40 11 01:36
9C58: 40 01 FF 1A 36 00 ED B0:21
9C60: 3A 8D 5C F5 0F 0F 0F E6:27
9C68: 07 D3 FE F1 18 07 D3 FE:BD
9C70: 5F 07 07 07 AB 21 00 58:A4
9C78: 01 18 20 16 0C D5 C5 E5:EE
9C80: F5 CD 96 9C 76 76 F1 E1:CE
9C88: 01 21 00 09 C1 05 05 0D:27
9C90: 0D D1 15 20 E8 C9 32 D8:FA
9C98: 9C 11 20 00 78 32 D9 9C:20
9CA0: 79 32 DA 9C 3A D9 9C 47:53
9CA8: 3A D8 9C 77 23 10 FC 2B:C3
9CB0: 3A DA 9C 47 3A D8 9C 77:68
9CB8: 19 10 FC A7 ED 52 3A D9:72
9CC0: 9C 47 3A D8 9C 77 2B 10:9F
9CC8: FC 23 3A DA 9C 47 3A D8:8C
9CD0: 9C 77 A7 ED 52 10 FA C9:38
9CD8: 00 00 00 00 00 00 00 00:74
********************************
Следующие процедуры посвящены
выводу текстовых сообщений на
экран.
(c) Олег Смолянкин.
Предлагаю вашему вниманию
процедуры, которые я вытащил из
различных загрузчиков. Все они
предназначены для вывода тексто-
вых сообщений. Итак:
1-ая процедура:
145.
ORG 40000
ENT
LD A,2
CALL #1601
LD B,31
L2 LD A,22
RST 16
LD A,12
RST 16
LD A,B
RST 16
LD A,32
SUB B
PUSH BC
LD HL,23760
LD B,A
L1 LD A,(HL)
RST 16
INC HL
DJNZ L1
POP BC
DEC B
LD A,B
CP 255
JR NZ,L2
RET
2
Ее дамп:
9C40: 3E 02 CD 01 16 06 1F 3E:63
9C48: 16 D7 3E 0C D7 78 D7 3E:7F
9C50: 20 90 C5 21 D0 5C 47 7E:73
9C58: D7 23 10 FB C1 05 78 FE:35
9C60: FF 20 E4 C9 00 00 00 00:C8
Текст должен находиться в са-
мой первой BASIC-строке за опе-
ратором REM. Длина строки фикси-
рована - 32 символа (если нужно
меньше, можно добавить пробелами
до 32 символов).
2-ая процедура:
145.
ORG 40000
ENT
LD HL,16384
LD B,7
L7 PUSH HL
PUSH BC
L6 PUSH BC
PUSH HL
LD B,32
L5 RR (HL)
INC HL
DJNZ L5
POP HL
POP BC
DJNZ L6
POP BC
POP HL
INC H
DJNZ L7
JR L8
L9 PUSH HL
POP DE
INC DE
LD (HL),A
LD BC,32
LDIR
RET
L8 LD A,#46
LD HL,23168
CALL L9
LD A,#42
LD HL,23200
CALL L9
LD HL,16384
LD DE,20608
CALL L10
LD DE,20640
L10 LD A,4
L11 LD BC,32
PUSH DE
PUSH HL
LDIR
POP HL
POP DE
INC H
INC D
INC D
DEC A
JR NZ,L11
RET
2
Ее дамп:
9C40: 21 00 40 06 07 E5 C5 C5:B9
9C48: E5 06 20 CB 1E 23 10 FB:06
9C50: E1 C1 10 F3 C1 E1 24 10:67
9C58: EC 18 0A E5 D1 13 77 01:43
9C60: 20 00 ED B0 C9 3E 46 21:27
9C68: 80 5A CD 5B 9C 3E 42 21:43
9C70: A0 5A CD 5B 9C 21 00 40:2B
9C78: 11 80 50 CD 81 9C 11 A0:90
9C80: 50 3E 04 01 20 00 D5 E5:89
9C88: ED B0 E1 D1 24 14 14 3D:FC
9C90: 20 F1 C9 00 00 00 00 00:06
Перед использованием этой
процедуры экран должен быть очи-
щен так: BORDER 0: PAPER 0: INK
0: CLS.
Напечатайте что-нибудь в са-
мой верхней строке и вызовите
эту процедуру. Сами увидите, что
произойдет. Процедура очень под-
ходит для оформления загрузчи-
ков.
3-я процедура предназначена
для печати символами двойной вы-
соты.
145.
ORG 30000
POS EQU #0000
LEN EQU 27
FONT1 EQU 40000
FONT2 EQU 50000
ENT
LD IX,15616
LD HL,FONT1
LD DE,FONT2
LD B,96
L3 PUSH BC
LD B,4
L1 LD A,(IX+0)
LD (HL),A
INC HL
LD (HL),A
INC HL
INC IX
DJNZ L1
LD B,4
L2 LD A,(IX+0)
LD (DE),A
INC DE
LD (DE),A
INC DE
INC IX
DJNZ L2
POP BC
DJNZ L3
LD A,2
CALL #1601
LD HL,FONT1-256
LD (23606),HL
LD DE,TEXT
LD BC,POS
PUSH DE
PUSH BC
CALL POSIT
LD BC,LEN
CALL #203C
LD HL,FONT2-256
LD (23606),HL
POP BC
INC B
CALL POSIT
POP DE
LD BC,LEN
CALL #203C
RET
POSIT LD A,#16
RST 16
LD A,B
RST 16
LD A,C
RST 16
RET
TEXT DEFM " SMOLY"
DEFM "ANKIN OLE"
DEFM "G PRESENTS"
2
Ее дамп:
7530: DD 21 00 3D 21 40 9C 11:EE
7538: 50 C3 06 60 C5 06 04 DD:D2
7540: 7E 00 77 23 77 23 DD 23:67
7548: 10 F5 06 04 DD 7E 00 12:39
7550: 13 12 13 DD 23 10 F5 C1:C3
7558: 10 E2 3E 02 CD 01 16 21:04
7560: 40 9B 22 36 5C 11 91 75:7B
7568: 01 00 00 D5 C5 CD 89 75:43
7570: 01 1B 00 CD 3C 20 21 50:9B
7578: C2 22 36 5C C1 04 CD 89:7E
7580: 75 D1 01 1B 00 CD 3C 20:80
7588: C9 3E 16 D7 78 D7 79 D7:90
7590: C9 20 20 20 53 4D 4F 4C:69
7598: 59 41 4E 4B 49 4E 20 4F:46
75A0: 4C 45 47 20 50 52 45 53:47
75A8: 45 4E 54 53 00 00 00 00:57
********************************