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= 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