2. "Плазма"
Это целый ряд красивых эффек-
тов. Вот первый из них, самый
простой:
140.
;--------------------------;
3; (c) Иван Рощин, 1997 ;
; ЭФФЕКТ "PLASMA" ;
;--------------------------;
LD HL,#4000 ;CLS
LD (HL),L
LD DE,#4001
LD BC,#1AFF
LDIR
;Переносим содержимое верхней строки
;вниз и наоборот, т.е. экран как бы
;замкнут по вертикали:
M2 LD HL,#5820
LD DE,#5AE0
LD BC,32
LDIR
LD HL,#5AC0
LD DE,#5800
LD BC,32
LDIR
;В цикле обновляем атрибуты #5820-#5AE0:
LD IX,#5820
M1 LD A,(IX+1)
ADD A,(IX-1)
ADD A,(IX+32)
ADD A,(IX-32)
DEC A ;!
SRL A ;!
SRL A ;!
LD (IX),A
INC IX
LD A,XL
CP #E0
JR NZ,M1
LD A,XH
CP #5A
JR NZ,M1
XOR A
IN A,(254)
CPL
AND 31
JR Z,M2
RET
2
Вы можете экспериментировать
с этой программой, изменяя ее
участок, помеченный "!". Попро-
буйте такие варианты:
а) DEC A б) SRL A в) SRL A
SRL A DEC A SRL A
SRL A SRL A DEC A
г) SRL A д) ADD A,8
SRL A SRL A
INC A SRL A
DEC A
После этого участка можно до-
бавить команду AND #3F или AND
#7F - это тоже влияет на вид эф-
фекта.
Можно изменить и другой фраг-
мент программы:
LD A,(IX+1)
ADD A,(IX-1)
ADD A,(IX+32)
ADD A,(IX-32)
Он определяет, что значение те-
кущего атрибута зависит от зна-
чений атрибутов слева, справа,
снизу и сверху от него:
┌───┐
│ ▒ │ █ - текущий атрибут
│▒█▒│
│ ▒ │ ▒ - влияющие на него атрибуты
└───┘
Интересные результаты полу-
чаются при определении таких за-
висимостей:
┌───┐ LD A,(IX+1) ┌───┐ LD A,(IX)
│ ▒ │ ADD A,(IX) │ │ ADD A,(IX)
│ ▓▒│ ADD A,(IX+32) │ ▓ │ ADD A,(IX+31)
│ ▒ │ ADD A,(IX-32) │▒▒ │ ADD A,(IX+32)
└───┘ └───┘
┌───┐ LD A,(IX-33) ┌───┐ LD A,(IX)
│▒ ▒│ ADD A,(IX-31) │ │ ADD A,(IX)
│ █ │ ADD A,(IX+31) │ ▓ │ ADD A,(IX+32)
│▒ ▒│ ADD A,(IX+33) │ ▒▒│ ADD A,(IX+33)
└───┘ └───┘