ZX81 Programs


Read about, play, run, or list games, animations, and more. These are my programs from the ’80s to today.

ZX81 Program Listing

**STAR WARS**SLR/2017** (starwars.p)


SYSTEM VARIABLES

PROG  : 16509
D-FILE: 20094
VARS  : 20887
E-LINE: 20888
STKBOT: 20888
STKEND: 20888


LEGEND

A means INVERSE A
A means GRAPHICS A
PRINT means treat as KEYWORD P


PROGRAM LISTING

  10 REM **STAR WARS**SLR/2017**
  20 GOSUB 400
  30 LET SD1X=2
  40 LET SD1Z=.1
  50 LET SD2X=3
  60 LET SD2Z=.2
  70 FOR I=1 TO 15
  80 GOSUB 1000
  90 GOSUB 1100
 100 NEXT I
 110 GOSUB 500
 120 FOR I=1 TO 10
 130 GOSUB 1000
 140 IF RND>.4 THEN GOSUB 1200
 150 GOSUB 1100
 160 NEXT I
 170 GOSUB 1400
 180 FOR I=1 TO 15
 190 GOSUB 1000
 200 GOSUB 1100
 210 NEXT I
 220 GOSUB 1600
 230 RUN
 400 REM **PLANET**
 410 CLS
 420 PRINT TAB 23;"4 6 4  4";
TAB 19;"E 4   RW TYE";TAB 19;"  
  Q4 R  4Y";TAB 19;"2 1 2 4TRW  
Y";TAB 26;"YERW T";TAB 27;"Y R "
;TAB 19;"E     4  YTRW";TAB 19;"
R1     E  E R";TAB 29;"4";TAB 27
;"42E";TAB 30;"6";TAB 29;"8 5";
TAB 30;"7"
 430 RETURN
 500 REM **STAR DESTROYER**
 510 FOR X=20 TO 4 STEP -1
 520 LET ZEND=((21-X AND X>4)+(1
7 AND X<=4))
 530 PRINT AT X,22;"HH"
 540 IF ZEND>=2 THEN PRINT TAB 2
1;"HHHH"
 550 IF ZEND>=3 THEN PRINT TAB 2
1;" FF "
 560 IF ZEND>=4 THEN PRINT TAB 2
1;"T  Y"
 570 IF ZEND>=5 THEN PRINT TAB 2
0;"EGR774"
 580 IF ZEND>=6 THEN PRINT TAB 2
0;"TH8 E74"
 590 IF ZEND>=7 THEN PRINT TAB 1
9;"EWFQ E774"
 600 IF ZEND>=8 THEN PRINT TAB 1
9;"5H 8 5S 24"
 610 IF ZEND>=9 THEN PRINT TAB 1
7;"6777777E777R"
 620 IF ZEND>=10 THEN PRINT TAB
13;"6677 6 7ER      A"
 630 IF ZEND>=11 THEN PRINT TAB
5;"6666 EG7ASSSSS  WQ61 D 8ADH"
 640 IF ZEND>=12 THEN PRINT " RE
ERE7  RG E7RRE RREERGGERRRAAH"
 650 IF ZEND>=13 THEN PRINT "WWW
FF2  116WW QWQ6F6QQQ6 WQWQAAH"
 660 IF ZEND>=14 THEN PRINT "   
  7777 WF6ADDDDD  ER74 S2RASH"
 670 IF ZEND>=15 THEN PRINT TAB
5;"        7   7ER7WQ      A  "
 680 IF ZEND>=16 THEN PRINT TAB
13;"  7     7777666Q "
 690 IF ZEND>=17 THEN PRINT TAB
15;"               "
 700 NEXT X
 710 RETURN
 720 FOR Z=1 TO ZEND
 730 PRINT TAB S(Z);S$(Z, TO 32-
S(Z));
 740 NEXT Z
 750 NEXT X
 760 RETURN
1000 REM **MOVE DESTROYER1**
1010 PRINT AT SD1X,16;" ";TAB 15
;" F ";TAB 13;"  T Y ";TAB 13;"6
Q6FQA";TAB 13;" 2777 ";TAB 14;" 
   "
1020 REM IF RND>.2 THEN RETURN
1030 LET SD1X=SD1X+SD1Z
1040 IF (SD1X<1 OR SD1X>4) THEN
LET SD1Z=-SD1Z
1050 RETURN
1100 REM **MOVE DESTROYER2**
1110 PRINT AT SD2X,8;" ";TAB 7;"
 A";TAB 6;" ER ";TAB 2;"    E7SY
  ";TAB 0;"  66661W55RD ";TAB 0;
" FT67QY65W8HA";TAB 0;"  7777YF7
6QS ";TAB 2;"          "
1120 REM IF RND>.25 THEN RETURN
1130 LET SD2X=SD2X+SD2Z
1140 IF (SD2X<2 OR SD2X>6) THEN
LET SD2Z=-SD2Z
1150 RETURN
1200 REM **FIRE**
1210 LET LX=0
1220 LET LY=18+(1 AND RND>.5)
1230 LET LY=18+(1 AND RND>.5)
1240 LET LXZ=.2+.1*RND
1250 LET LYZ=2+2*RND
1260 PRINT AT 20+INT LX,LY;("SS"
AND (LX<.5 OR (LX>1 AND LX<1.5)
));("DD" AND ((LX>=.5 AND LX<=1)
OR LX>=1.5))
1270 LET LXN=LX+LXZ
1280 LET LYN=LY-LYZ
1290 PRINT AT 20+INT LX,LY;"  "
1300 IF (LXN>1.9 OR LYN<0) THEN
RETURN
1310 LET LX=LXN
1320 LET LY=LYN
1330 GOTO 1260
1400 REM **REBEL**
1410 LET LY=2
1420 LET LXZ=.2
1430 LET LYZ=6/14
1440 FOR X=20 TO 16.8 STEP -.2
1450 IF INT X>=18 THEN PRINT AT
INT X,INT LY;" QWFQ"
1460 IF (INT X<20 AND INT X>16)
THEN PRINT AT 1+INT X,INT LY;" 
2172";
1470 IF INT X<19 THEN PRINT AT 2
+INT X,INT LY-1;"      "
1480 LET LY=LY+LYZ
1490 NEXT X
1500 RETURN
1600 REM **ENDING**
1610 FOR X=0 TO 21
1620 PRINT AT X,0;"             
                   ";
1630 NEXT X
1640 LET S$="STAR WARS"
1650 GOSUB 1800
1660 LET S$="A ZX81 DEMO"
1670 GOSUB 1800
1680 LET S$="BY"
1690 GOSUB 1800
1700 LET S$="STEVEN REID"
1710 GOSUB 1800
1720 LET S$="FROM 1983"
1730 GOSUB 1800
1740 LET S$="TO 2017"
1750 GOSUB 1800
1760 RETURN
1800 REM **SCROLL**
1810 LET L$="                   
             "
1820 LET LTH=LEN S$
1830 LET GRW=(30-LTH)/6
1840 FOR X=5 TO 0 STEP -1
1850 LET M$=L$
1860 LET SIZE=LTH+X*GRW
1870 LET SPC=SIZE/LTH
1880 LET CTR=(30-SIZE)/2
1890 FOR Y=1 TO LTH
1900 LET M$(CTR+Y*SPC)=S$(Y)
1910 NEXT Y
1920 PRINT AT 6+X*2,0;M$;AT 8+X*
2,0;L$
1930 NEXT X
1940 FOR Y=1 TO LTH
1950 LET M$(CTR+Y*SPC)=S$(Y)
1960 NEXT Y
1970 PRINT AT 6,0;L$
1980 RETURN
2000 SAVE "STARWARS"
2010 RUN