2
Ну и, наконец, последний эф-
фект (использовался как Screen
Saver в ZX-РЕВЮ 7-10 и ZX-FORUM
4):
140.
;--------------------------;
3; (c) Иван Рощин, 1997 ;
; ЭФФЕКТ "PLASMA-3" ;
;--------------------------;
BUF EQU #4000 ;адрес расположения
;буфера длиной #410
;байтов (мл.байт
;адреса = 0!)
B_SCR EQU BUF+#20 ;адрес первой
;обновляемой строки
;в буфере
B_UP EQU BUF ;верхняя строка
B_DOWN EQU BUF+#320 ;нижняя строка
SSAVER LD HL,(RND+1)
NEW_RND LD A,(HL)
INC HL
AND 7
CP 6
JR NC,NEW_RND
AND A
RLCA
RLCA
LD HL,TABL1
LD D,0
LD E,A
ADD HL,DE
LD DE,BUF+#400
LD BC,4
LDIR
LD HL,TABL2
LD BC,12
LDIR
;В H' заносим старший байт адреса
;палитры:
LD H,D
EXX
;Переносим содержимое верхней строки
;буферной области вниз и наоборот,
;т.е. экран как бы замкнут по вертикали:
M2 LD HL,B_SCR
LD DE,B_DOWN
LD BC,32
LDIR
LD HL,B_SCR+#2E0
LD DE,B_UP
LD BC,32
LDIR
;В цикле обновляем атрибуты в буфере:
LD IX,B_SCR
M1 LD A,(IX-32)
ADD A,(IX-1)
ADD A,(IX+1)
ADD A,(IX+32)
SRL A
SRL A
LD (IX),A
;--------------------------------------
;По значению байта из буфера определяем
;его цвет и выводим на экран:
EXX
RRCA
RRCA
AND 15
LD L,A
LD A,(HL)
EXX
PUSH IX
POP HL
LD DE,#5800-B_SCR
ADD HL,DE
EX AF,AF' ;!
LD A,(IX-1) ;!
CP (IX) ;!
JR C,TO_SCR1 ;!
CP 16 ;!
JR C,TO_SCR1 ;!
DEC HL ;!
LD A,(HL) ;!
INC HL ;!
LD (HL),A ;!
JR NO_CP ;!
TO_SCR1 EX AF,AF' ;!
LD (HL),A
;--------------------------------------
NO_CP INC IX
LD DE,1-#5800+B_SCR-B_DOWN
ADD HL,DE
LD A,H
OR L
JR NZ,M1
;Обновили весь буфер, теперь некоторые
;байты буфера принимают случайные
;значения:
LD B,5
L23 PUSH BC
CALL RND
POP BC
DJNZ L23
;На клавиатуре что-то нажато?
LD A,(23560)
AND A
JR Z,M2
RET
;=================================
;Процедура RND изменяет случайным
;образом случ. выбранное число в
;буфере экрана (BUF..BUF+#400)
RND LD HL,0
LD A,H
AND #3F
LD H,A
LD D,(HL)
INC HL
LD E,(HL)
INC HL
LD A,(HL)
XOR D
XOR E
SUB 16
LD B,A
LD A,D
AND 3
LD D,A
LD E,B
LD (RND+1),HL
LD HL,BUF
ADD HL,DE
LD A,B
AND %01111111
LD (HL),A
DEC HL
LD (HL),A
DEC HL
LD (HL),A
RET
;Палитра:
TABL1 DB %00001001
DB %01001001
DB %00011011
DB %01011011
DB %00001001
DB %01001001
DB %00101101
DB %01101101
DB %00010010
DB %01010010
DB %00011011
DB %01011011
DB %00010010
DB %01010010
DB %00110110
DB %01110110
DB %00100100
DB %01100100
DB %00101101
DB %01101101
DB %00100100
DB %01100100
DB %00110110
DB %01110110
TABL2 DB %00111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
DB %01111111
2
Строки, помеченные "!", пер-
воначально отсутствовали в этой
программе (в таком виде она ис-
пользовалась в ZX-РЕВЮ 7-10), но
потом они были добавлены с целью
улучшить внешний вид эффекта и
сделать более плавными переходы
цветов.
* * *