A.N.A.L.O.G. ISSUE 26 / JANUARY 1985 / PAGE 79
It’s not easy to write an article to accompany a simple graphic demo, and it’s probably just as tough to read one. But before you race to your computer, plug in your Action! cartridge, type in puLse and run it, why not take a few seconds to read what it’s taken a few hours for me to write?
For starters, I’ll admit that what puLse does is beautiful. The program draws several brightly-colored horizontal lines on the screen and makes them expand and contract at various rates. This sounds simple, but the combinations are almost infinite—and frequently complex. When I first wrote puLse and ran it, I shut off the room lights and spent a good long time staring at the screen. No, the effect is not hypnotic, and, no, I wasn’t on drugs at the time—the fact is that, as a human being, I appreciate beauty and puLse gave me a sizable dose.
Despite its beauty, however, puLse is not a work of art. To me, a work of art must relate to the human experience, and puLse is merely a random and abstract visual creation. It does not affect me deeply, the way a good novel, play or piece of music can. The best way to describe it is “emptiness”—puLse is empty. Rated as art, it is bad art.
I’m not saying that I’m going to stop fooling around with graphic demos on my Atari 800. All I’m saying is that there is more to art than beauty or simple emotional effects, and this fact is a challenge to myself and to all creators of “computer art.” Translation: I’m still thinking. I hope you are, too.
Plug in an Action! cartridge and type the source code as written into the editor. Save it to disk or tape and then run.
PuLse is a simple graphic demo. For the greatest effect, run the program with all room lights extinguished. Press RETURN to exit the program. Press any other keyboard key for new patterns. The program will automatically display a new pattern every 15-20 seconds.
; puLse - joeL gLuck - anaLog
BYTE ARRAY x(192),y(192),c(192)
BYTE num=[10]
INT ARRAY xd(192)
CARD ARRAY linept(192)
PROC pauz(CARD n)
CARD i
FOR i=0 TO n*2
DO OD
RETURN
PROC intro()
BYTE i
Graphics(0)
Poke(710,0)
Poke(752,1)
Print(" ")
pauz(30000)
Position(17,9)
Print("puLse")
pauz(30000)
Position(13,11)
Print("by joeL gLuck")
pauz(30000)
Position(9,13)
Print("from ANALOG COMPUTING")
pauz(60000)
FOR i=0 TO 15 DO
Poke(709,15-i)
pauz(2000)
OD
RETURN
PROC gr10init()
CARD scrn,line,reg,col,lum,scrn=88
Graphics(10)
Poke(704,0)
FOR reg=0 TO 7 DO
col=Rand(16)
lum=Rand(9)+4
Poke(reg+705,col*16+lum)
OD
FOR line=0 TO 191
DO
linept(line)=scrn+(40*line)
OD
RETURN
PROC plot10(BYTE x,y,col)
BYTE POINTER pixel
BYTE ARRAY
colfil= [0 17 34 51 68 85 102 119 136 0 0 0 0 0 0 0],
mask= [15 240],
mask2= [240 15]
pixel=linept(y)+(x RSH 1)
pixel^=pixel^ & mask(x & 1)
% (colfil(col)
& mask2(x & 1))
RETURN
BYTE FUNC locate10(BYTE x,y)
BYTE POINTER pixel
BYTE ARRAY mask= [240 15]
pixel=linept(y)+(x RSH 1)
RETURN((pixel^ & mask(x & 1)) RSH
(((x & 1) XOR 1) LSH 2))
PROC drawline(BYTE a,b,c)
BYTE i
FOR i=a TO 79-a DO
plot10(i,b,c)
plot10(i,191-b,c)
OD
RETURN
PROC init()
BYTE i,j,s
gr10init()
FOR i=0 TO num-1 DO
x(i)=Rand(40)
DO
y(i)=Rand(96)
s=0
IF i=0 THEN
EXIT
FI
FOR j=0 TO i-1 DO
IF y(i)=y(j) THEN
s=1
EXIT
FI
OD
UNTIL s=0
OD
c(i)=(i MOD 8)+1
drawline(x(i),y(i),c(i))
xd(i)=(Rand(2)*2-1)*(Rand(3)+1)
OD
RETURN
PROC squeeze(BYTE n)
BYTE a,i
INT d
d=xd(n)
IF d<0 THEN
d=-1
ELSE
d=1
FI
FOR i=1 TO (xd(n)/d) DO
a=x(n)+d
IF a<0 OR a>39 THEN
xd(n)=-xd(n)
EXIT
FI
IF d>0 THEN
plot10(x(n),y(n),0)
plot10(79-x(n),y(n),0)
plot10(x(n),191-y(n),0)
plot10(79-x(n),191-y(n),0)
ELSE ; to preserve timing:
plot10(x(n),y(n),c(n))
plot10(79-x(n),y(n),c(n))
plot10(x(n),191-y(n),c(n))
plot10(79-x(n),191-y(n),c(n))
FI
x(n)=a
plot10(x(n),y(n),c(n))
plot10(79-x(n),y(n),c(n))
plot10(x(n),191-y(n),c(n))
plot10(79-x(n),191-y(n),c(n))
OD
RETURN
PROC puLse()
BYTE i,CH=764,AT=77,MS=19,LS=20
intro()
DO
num=Rand(6)+5
init()
CH=255
AT=77
LS=0
MS=0
DO
FOR i=0 TO num-1 DO
squeeze(i)
OD
UNTIL CH<>255 OR MS=4
OD
UNTIL CH=12
OD
CH=255
Graphics(0)
RETURN