ZYNAPS
В этой программе применяется
оригинальный прием гашения экра-
на: он гаснет не мгновенно, а
плавно. Это происходит при помо-
щи манипулирования атрибутами.
Процедура, реализующая такой
эффект, выглядит так.
1423.
85AD 1E04 LD E,#04
85AF 0E07 LD C,#07
85B1 FB EI
85B2 0603 LD B,#03
85B4 210058 LD HL,#5800
85B7 76 HALT
85B8 76 HALT
85B9 76 HALT
85BA 76 HALT
85BB 7E LD A,(HL)
85BC A1 AND C
85BD 77 LD (HL),A
85BE 2C INC L
85BF 20FA JR NZ,#85BB
1423. 85C1 24 INC H
85C2 10F7 DJNZ #85BB
85C4 CB39 SRL C
85C6 1D DEC E
85C7 20E9 JR NZ,#85B2
85C9 C9 RET
2
Алгоритм работы процедуры
следующий. Побитно выключаются,
начиная со старшего и кончая
младшим, все биты области атри-
бутов. Вы можете замедленно про-
смотреть, как все это происхо-
дит, если сделаете такую замену:
1423.
85BF 20F9 JR NZ,#85BA
2
то есть включите одну последнюю
команду HALT во внутренний цикл.
Вы увидите, что вначале построч-
но гаснут знакоместа, изображен-
ные с повышенной яркостью, за-
тем пропадает зеленый цвет, за-
тем - красный, затем - оставший-
ся синий. При этом надо учиты-
вать, что само изображение -
дисплейный файл - не затраги-
вается, изображение остается,
только становится INK 0: PAPER
0: BRIGHT 0. Вы можете убедиться
в этом, если подадите, скажем,
такую команду:
PRINT AT 0,0;OVER 1;"32 пробела"
Несколько замедлить скорость
затухания можно такой заменой:
1423.
85C2 10F6 DJNZ #85BA
2
Для получения блока кодов
плавного затухания можно вос-
пользоваться Бейсик-программой:
1 READ ram: CLEAR ram: READ f
$: READ st: READ len: FOR a=st T
O st+len-1: READ b: POKE a,b: NE
XT a: SAVE f$CODE st,len
10 DATA 34220,"zyn",34221,29
100 DATA
030,004,014,007,251,006,003,033,
000,088,118,118,118,118,126,161,
119,044,032,250,036,016,247,203,
057,029,032,233,201
Следующая программа демон-
стрирует плавное затухание экра-
на. Здесь в строке 30 происхо-
дит загрузка экрана из програм-
мы ZYNAPS (но это может быть лю-
бая другая картинка).
10 BORDER 0: PAPER 0: INK 7: C
LEAR 24999
20 LOAD "zyn"CODE
30 LOAD "zynaps $"CODE 16384
40 BEEP .1,26: BEEP .1,20: PAU
SE 0
50 RANDOMIZE USR 34221