I devoured Racing the Beam last night. It does a great job at getting inside the Atari 3600 platform and explaining how it affected the early games that ran on it. Full of great examples, like Yars Revenge displaying its own code onscreen as a visual effect, to avoid needing a random number generator. Teaches how to analyse screenshots of 3600 games and see how the crazily limited hardware was coaxed into drawing them. Highly recommended, just wish it were twice as long.

(I also enjoyed that the book itself is a nice recursive hack. Its (fairly cheap) printing process didn't allow reproducing the detailed color photos of the games needed for reference. So they printed them on the inside of the dust jacket instead.)


While I just missed out on the heyday of the Atari 3600, I was writing similar games on my 130XE a bit later, mostly limited by having to use slow BASIC. This was probably the first video game I ever wrote, judging by its filename ("VIDIO").

You're the green dot, zipping across the screen. Each time it reaches the right side, it wraps back to the left, leaving a wall behind. Crash into the wall and you lose a life.

As I've mentioned before, I still enjoy VIDIO, both its simplicity and gameplay. And the key to its gameplay is that the dot moves fast and the controls are not very precise, making it hard to go thru a given hole in the wall. And the controls are not very precise because of a limitation of the platform. The BASIC program can only sample the joystick position occasionally, and so there's little fine control. So, Racing the Beam has helped me realize that the platform made this game what it is.


BTW, here's the code to VIDIO.

1 GOTO 10
2 COLOR 0:PLOT A,O:A=INT(RND(0)*58)+20
3 O=INT(RND(0)*34)+3
4 COLOR 1:PLOT A,O
5 RETURN 
10 DIM A(38),A$(1)
11 GRAPHICS 5
12 SETCOLOR 4,10,10:SETCOLOR 1,10,0:SETCOLOR 0,12,6:SETCOLOR 2,5,6
13 FOR X=1 TO 38:A(X)=0:NEXT X
30 POKE 752,1
40 AC=40:L=3
50 D=20
60 COLOR 2
80 REM ** SCREEN BORDER **[0m
90 PLOT 0,1
100 DRAWTO 79,1
110 PLOT 79,39
120 DRAWTO 0,39
140 REM ** END SCREEN BORDER **[0m
142 SS=PEEK(632)
143 COLOR 0
145 PLOT AC,D
150 IF SS=14 OR SS=10 OR SS=6 THEN D=D-1
160 IF SS=9 OR SS=13 OR SS=5 THEN D=D+1
170 IF D=1 THEN D=2
175 IF D=39 THEN D=38
180 AC=AC+2
200 IF AC>78 THEN AC=1:GOSUB 2000
210 COLOR 2
220 PLOT AC,D
250 IF AC=1 THEN GOSUB 2
260 IF (AC=A OR AC=A+1 OR AC=A-1) AND (D=O OR D+1=O OR D-1=O) THEN L=L+1:COLOR 0:PLOT A,O:GOSUB 2030:A=0:O=0
400 GOTO 142
2000 IF A(D)=1 THEN L=L-1:P=P-1:IF L=0 THEN GOSUB 2030:? ,"YOU LOSE![0m":GOTO 2050
2005 GOSUB 2030
2010 A(D)=1:COLOR 3:PLOT 79,D:PLOT 0,D:P=P+1:IF P=37 THEN GOTO 2040
2020 RETURN 
2030 ? :? :? :? ,"LIVES  -- [0m";L:RETURN 
2040 ? ,"YOU WIN!![0m"
2050 ? "DO YOU WANT TO PLAY AGAIN [0m";:INPUT A$:IF A$="Y[0m" THEN L=0:P=0:GOTO 11