Program slot 0 can be used for fast saving user program
with command SAVE (no argument is needed) into internal Flash.
Program slots 1..32 are located in external EEPROM.
Character '\' in program listing means Shift before letter
("\A" means: press and hold Shift, press A, release Shift).
Character '&' in program listing means 'pound' (Shift+space).
---------------------------------------------------------
1) Print charset
program 45 bytes
10 REM PRINT CHARSET
20 FOR I=0 TO 255
30 PRINT CHR$(I);
40 NEXT I
---------------------------------------------------------
2) High precision division (ZX80 Operation Manual, page 63)
program 192 bytes
This program does a long division in exactly the same way
as we would do it on paper.
10 REM HIGH PRECISION DIVISION
20 PRINT "HOW MANY DECIMAL PLACES?"
30 INPUT D
40 PRINT "DIVIDEND?"
50 INPUT R
60 PRINT "DIVISOR?"
70 INPUT Y
80 LET Z=R/Y
90 LET R=R-Z*Y
100 PRINT "QUOTIENT IS ";Z;".";
110 FOR J=1 TO D
120 LET Z=10*R/Y
130 LET R=10*R-Z*Y
140 PRINT Z;
150 NEXT J
Example:
PLACES = 20
DIVIDEND = 12345
DIVISOR = 571
QUOTIENT = 21.61996497373029772329
---------------------------------------------------------
3) Square root routine (ZX80 Operation Manual, page 48)
program 200 bytes
10 REM SQUARE ROOT ROUTINE
20 PRINT "ENTER THE NUMBER TO BE ROOTED"
30 INPUT X
40 LET J=0
50 LET K=J*J
60 LET D=X-K
70 IF D=0 THEN GO TO 110
80 IF D<0 THEN GO TO 130
90 LET J=J+1
100 GO TO 50
110 PRINT "THE ROOT IS ";J
120 GO TO 140
130 PRINT "THE ROOT LIES BETWEEN ";J-1;" AND ";J
140 STOP
Example 1:
NUMBER = 17161
ROOT = 131
Example 2:
NUMBER = 1234
ROOT LIES BETWEEN 35 AND 36
---------------------------------------------------------
4) Die throwing (ZX80 Operation Manual, page 52)
program 383 bytes
Instead of 'o' you can use graphics character Shift+A.
Hit NEWLINE to throw again or enter some character to break.
10 REM DIE THROWING
20 LET A$="\A \A"
30 LET B$=" \A"
40 LET C$="\A"
50 LET D$=" \A"
60 RANDOMISE
70 LET X=RND(6)
80 PRINT "YOUR THREW IS ";X
90 GO TO X*100
100 PRINT ""
110 PRINT ""
120 PRINT B$
130 PRINT ""
140 PRINT ""
150 GO TO 700
200 PRINT C$
210 PRINT ""
220 PRINT ""
230 PRINT ""
240 PRINT D$
250 GO TO 700
300 PRINT D$
310 PRINT ""
320 PRINT B$
330 PRINT ""
340 PRINT C$
350 GO TO 700
400 PRINT A$
410 PRINT ""
420 PRINT ""
430 PRINT ""
440 PRINT A$
450 GO TO 700
500 PRINT A$
510 PRINT ""
520 PRINT B$
530 PRINT ""
540 PRINT A$
550 GO TO 700
600 PRINT A$
610 PRINT ""
620 PRINT A$
630 PRINT ""
640 PRINT A$
700 PRINT "HIT NEWLINE TO THROW AGAIN"
710 INPUT X$
720 CLS
730 IF X$="" THEN GO TO 70
---------------------------------------------------------
5) Reaction timer (ZX80 Operation Manual, page 88)
program 198 bytes
10 REM REACTION TIMER
20 PRINT "PREPARE..."
30 FOR I=1 TO 3000+RND(10000)
40 NEXT I
50 POKE 16414,0
60 POKE 16415,0
70 PRINT "HIT NEWLINE"
80 INPUT C$
90 LET A=PEEK(16414)
100 LET B=PEEK(16415)
110 PRINT "YOUR REACTION TIME WAS ";(B*256+A-4)*17;" MILLISECS"
---------------------------------------------------------
6) Histogram of random number
program 226 bytes
10 REM RND HISTOGRAM
20 DIM A(20)
30 RANDOMISE
40 FAST
50 PRINT "CALCULATING..."
60 FOR K=1 TO 5000
70 LET N=RND(20)
80 LET A(N)=A(N)+1
90 NEXT K
100 SLOW
110 CLS
120 FOR K=1 TO 20
130 LET A(K)=A(K)/20
140 IF K<10 THEN PRINT " ";
150 PRINT K;" ";
160 IF A(K)<1 THEN GO TO 210
170 IF A(K)>29 THEN LET A(K)=29
180 FOR P=1 TO A(K)
190 PRINT "\A";
200 NEXT P
210 PRINT
220 NEXT K
---------------------------------------------------------
7) Leap frog (30 Programs for the Sinclair ZX80 1K, page 7)
program 474 bytes
This is a nice simple program, testing the player's logic.
The object is to move all the frogs on the left to the right,
and vice versa. Frogs can only leap over one frog or move
to an adjacent empty space.
X X X X O O O O
1 2 3 4 5 6 7 8 9
The first move could be 35, 45, 65 or 75.
Variables:
P position of frogs
C number of moves to date
F from
T to
10 REM LEAP FROG
100 DIM P(9)
200 LET P(5)=0
210 FOR I=1 TO 4
220 LET P(I)=129
230 LET P(I+5)=128
240 NEXT I
250 LET C=0
300 CLS
310 FOR I=1 TO 9
320 PRINT CHR$(P(I));" ";
330 NEXT I
340 PRINT
350 FOR I=1 TO 9
360 PRINT I;" ";
370 NEXT I
500 PRINT "ENTER MOVE"
510 INPUT A
520 IF A=0 THEN GO TO 900
530 LET F=A/10
540 IF F=0 THEN GO TO 510
550 IF P(F)=0 THEN GO TO 510
560 LET T=A-10*F
570 IF T=0 THEN GO TO 510
580 IF P(T)>0 THEN GO TO 510
590 IF ABS(T-F)>2 THEN GO TO 510
600 LET C=C+1
610 LET P(T)=P(F)
620 LET P(F)=0
700 LET X=0
710 FOR I=1 TO 9
720 IF I=5 THEN GO TO 740
730 IF NOT P(I)=128-(I>5) THEN LET X=1
740 NEXT I
750 LET X=X+P(5)
760 IF X>0 THEN GO TO 300
800 PRINT "YOU DID IT IN ";C;" MOVES"
810 PRINT "ANOTHER GO? (Y)"
820 INPUT A$
830 IF CODE(A$)=62 THEN GO TO 200
900 PRINT "BYEBYE"
---------------------------------------------------------
8) Encoding (30 Programs for the Sinclair ZX80 1K, page 10)
program 355 bytes
An absolutely unbeatable methos of producing secret messages!
As the key to the coding is the ZX-80 random number generator,
is would be impossible for anyone without a ZX-80 (and a lot of
patience) to crack such a message.
To decode, just enter the negative of the code number that
produced the message.
10 REM ENCODING
100 PRINT "ENTER MESSAGE"
110 INPUT A$
120 PRINT A$
130 PRINT "ENTER CODE NUMBER (1 - 256)",
140 INPUT T
150 PRINT T
160 RANDOMISE ABS(T)
170 IF T<0 THEN PRINT "DE";
180 PRINT "CODED MESSAGE IS"
190 LET R=RND(26)
200 IF T<0 THEN LET R=26-R
210 IF A$="" THEN GO TO 300
220 LET B=CODE(A$)
230 LET A$=TL$(A$)
240 IF B=0 THEN GO TO 280
250 LET B=B+R-38
260 LET B=B-26*(B/26)
270 LET B=B+38
280 PRINT CHR$(B);
290 GO TO 190
300 PRINT
310 PRINT "ANY OTHER MESSAGE? (Y)"
320 INPUT A$
330 IF NOT CODE(A$)=62 THEN GO TO 360
340 CLS
350 GO TO 100
360 PRINT "BYEBYE"
Example1:
message: HELLO WORLD
code number: 80
coded message: KLTGB XWRFQ
decode number: -80
decoded message: HELLO WORLD
Example2:
encoded message: XJYF BZ TRDUBXA
decode number: -100
decoded message: THIS IS AMAZING
---------------------------------------------------------
9) Horse Race (30 Programs for the Sinclair ZX80 1K, page 13)
program 571 bytes
You have $100 and you can bet on 4 horses A, B, C, D.
60 DIM O(4)
70 DIM D(4)
80 LET A$="\F\T\S"
90 LET B$=" \S\G\Q"
100 LET C$="\R \E"
110 LET M=100
120 GO TO 200
130 FOR C=1 TO D
140 PRINT " ";
150 NEXT C
160 RETURN
170 FOR I=0 TO 4
180 LET D(I)=0
190 NEXT I
200 PRINT "BANK$";M
210 PRINT "BET?"
220 PRINT
230 PRINT "ODDS"
240 FOR I=1 TO 4
250 LET O(I)=RND(9)+1
260 PRINT CHR$(I+37),O(I);"/1"
270 NEXT I
280 INPUT B
290 IF B=0 THEN GO TO 999
300 PRINT "HORSE?"
310 INPUT H$
320 FOR L=1 TO 4
330 CLS
340 PRINT "LAP ";L
350 FOR I=1 TO 4
360 LET D(I)=D(I)+5+7/O(I)+RND(2*O(I)/3)
370 IF D(I)>D(0) THEN LET D(0)=D(I)
380 IF D(0)=D(I) THEN LET J=I
390 NEXT I
400 FOR I=1 TO 4
410 PRINT CHR$(I+37)
420 LET D=D(I)-D(0)+15
430 GO SUB 130
440 PRINT A$
450 GO SUB 130
460 PRINT B$
470 GO SUB 130
480 PRINT C$
490 PRINT
500 NEXT I
510 PRINT "N/L"
520 INPUT D$
530 NEXT L
540 CLS
550 PRINT "WINNER ";CHR$(J+37)
560 LET S=0
570 IF CODE(H$)=J+37 THEN LET S=1
580 LET M=M-B+S*B*O(J)
590 IF M<1 THEN GO TO 999
600 GO TO 170
999 STOP
---------------------------------------------------------
10) Lunar Lander (30 Programs for the Sinclair ZX80 1K, page 17)
program 504 bytes, variables 65 bytes
A real live Lunar Lander that comes down to (hopefully)
land safely on the Moon.
Program is saved with variables. If you load program
using "LOAD 10", then just type "GO TO 100" and play.
Do not use RUN nor CLEAR.
If creating new program, write program at following steps:
90 DIM A(19)
100 LET V=-50
110 LET H=1500
120 LET R=7000
200 FOR I=0 TO 19
210 PRINT I,
220 INPUT X
230 LET A(I)=X
240 PRINT A(I)
250 NEXT I
Run program with RUN and enter following values:
0, 0, 156, 0, 0, 0, 8, 3, 136, 0, 0,
2, 3, 130, 0, 134, 131, 3, 131, 135
Add following lines:
200 FOR I=0 TO 3
210 FOR X=0 TO 4
220 PRINT CHR$(A(X+5*I));
230 NEXT X
240 PRINT
250 NEXT I
Run program using GOTO 100 and check lunar lander shape.
Add following lines, save program and run using GO TO 100:
130 GO TO 500
260 RETURN
300 PRINT "THRUST (0-99)?",
310 INPUT F
320 PRINT F
330 PRINT "DURATION (1-10)?",
340 INPUT T
350 CLS
360 IF F*T>R/10 THEN LET F=R/10*T
370 LET R=R-F*T*10
400 LET A=F-32
410 LET H=A*T**2+V*T+H
420 LET V=2*A*T+V
500 LET L=H/100
510 IF L<0 THEN LET L=0
520 IF L>12 THEN LET L=12
530 FOR I=L TO 12
540 PRINT
550 NEXT I
560 IF L>8 THEN GO SUB 200
570 PRINT ,"VELOC","HEIGHT","FUEL"
580 PRINT ,V,H,R
600 IF L<9 THEN GO SUB 200
610 IF L=0 THEN GO TO 650
620 FOR I=1 TO L-1
630 PRINT
640 NEXT I
650 IF H<0 THEN PRINT "**CRASH**"
660 FOR I=1 TO 16
670 PRINT "\A\T";
680 NEXT I
690 IF L>0 THEN GO TO 300
700 IF H<0 OR V<-99 THEN GO TO 730
710 PRINT 100+V;" PERCENT OK"
720 STOP
730 PRINT "TERRIBLE"
---------------------------------------------------------
11) Mazes (30 Programs for the Sinclair ZX80 1K, page 21)
program 330 bytes
Maze generator. Not guarantee that a solution is available.
100 DIM W(32)
110 PRINT
140 LET W(1)=2
150 LET W(32)=130
160 FOR I=2 TO 31
170 LET W(I)=3
180 NEXT I
190 LET X=RND(20)
200 LET W(X)=2
210 LET W(X+6)=130
220 FOR I=2 TO 5
230 LET W(X+I)=0
240 NEXT I
300 FOR L=1 TO 15
310 FOR I=1 TO 32
320 PRINT CHR$(W(I));
330 IF I=1 OR I=32 THEN GO TO 500
340 IF W(I)<3 THEN GO TO 450
350 IF W(I)>3 THEN GO TO 400
360 LET X=RND(8)
370 IF X<3 THEN LET W(I)=2
380 IF X=8 THEN LET W(I)=7
390 GO TO 500
400 LET W(I)=1+RND(2)
410 GO TO 500
450 LET X=RND(5)
460 LET W(I)=1+X/2
470 IF X=1 THEN LET W(I)=7
500 NEXT I
510 NEXT L
---------------------------------------------------------
12) Noughts and Crosses (30 Programs for the Sinclair ZX80 1K, page 24)
program 596 bytes
Tic Tac Toe game. Computer always starts first.
100 DIM A(9)
110 FOR J=0 TO 2
120 FOR I=1 TO 3
130 LET A(I+3*J)=28+I+4*J+2*I*(J>1)
140 NEXT I
150 NEXT J
160 LET A(4)=36
170 LET A(5)=61
180 LET A(6)=32
190 GO TO 400
200 FOR I=1 TO 9
210 IF A(I)=M+28 THEN LET A(I)=V
220 NEXT I
230 FOR I=0 TO 2
240 FOR J=1 TO 3
250 PRINT CHR$(A(J+3*I));" ";
260 NEXT J
270 PRINT
280 PRINT
290 NEXT I
300 PRINT
310 RETURN
400 LET A=0
410 LET E=0
420 PRINT "I WENT FIRST"
430 GO SUB 230
440 PRINT "ENTER MOVE"
450 INPUT R
460 CLS
470 IF R=2*(R/2) THEN LET E=-1
480 LET M=R
490 LET V=28
500 GO SUB 200
510 LET P=R
520 FOR T=1 TO 4
530 PRINT "I MOVED"
540 LET V=61
550 LET A=A+1
560 IF T=1 OR R=P+4 OR R=P-4 THEN GO TO 620
570 LET P=P+4
580 IF P>8 THEN LET P=P-8
590 LET M=P
600 GO SUB 200
610 GO TO 790
620 IF A=3 AND E THEN LET A=7
630 IF A=4 THEN LET A=6
640 LET P=P+A
650 IF P>8 THEN LET P=P-8
660 LET M=P
670 GO SUB 200
680 IF A=7 THEN GO TO 790
690 IF T=4 THEN GO TO 770
700 PRINT "YOUR MOVE"
710 INPUT R
720 CLS
730 LET M=R
740 LET V=28
750 GO SUB 200
760 NEXT T
770 PRINT "DRAW"
780 STOP
790 PRINT "ATX80 WINS"
---------------------------------------------------------
13) Dr. ATX80 (30 Programs for the Sinclair ZX80 1K, page 28)
program 162 bytes, variables 402 bytes
Dr. ATX80 is your psycho therapist.
Program is saved with variables. If you load program
using "LOAD 13", then just type "GO TO 120" and play.
Do not use RUN nor CLEAR.
If creating new program, write program at following steps:
100 LET A$="A ACCEPTABLE AGAIN BYEBYE COME
DID DO ENOUGH FEEL FIND FOR FRIENDS HELLO
HERE HOW I IS I/M LIKE NAME NORMAL REASONABLE
SAY THAT/S THERAPIST THERE THINK THIS TO
TODAY WAS WAY WHAT WHEN WHY WOULD YOU YOUR "
110 DIM P(90)
120 LET S=PEEK(16392)+256*PEEK(16393)
200 FOR I=0 TO 90
210 PRINT I,
220 INPUT B
230 LET P(I)=B
240 PRINT P(I)
250 IF B=0 THEN CLS
260 NEXT I
Type RUN and enter following values:
68,141,88,199,131,175,85,199,97,0 ; index 0..9
175,32,195,120,199,97,167,14,0 ; index 10..18
79,36,195,46,161,0 ; index 19..24
36,195,147,153,85,109,0 ; index 25..31
185,36,195,147,195,46,153,171,0 ; index 32..40
36,199,60,51,153,3,0 ; index 41..47
36,195,27,74,158,51,60,0 ; index 48..55
36,195,147,153,85,102,0 ; index 56..62
36,199,60,51,153,3,0 ; index 63..69
83,147,124,39,56,161,180,189,195,92,158,27,74,14,0 ; index 70..84
124,109,20,0,0,0 ; index 85..90
Delete lines 100 and 110 and replace lines 200 onwards with following:
200 FOR I=0 TO 88
210 LET J=-1
220 LET J=J+1
230 IF P(I)=0 THEN GO TO 270
240 PRINT CHR$(PEEK(S+P(I)+J));
250 IF PEEK(S+P(I)+J)>0 THEN GO TO 220
260 IF P(I)>0 THEN GO TO 300
270 PRINT "?"
280 INPUT B$
290 CLS
300 NEXT I
---------------------------------------------------------
14) NIM game (30 Programs for the Sinclair ZX80 1K, page 32)
program 708 bytes
There are 3 rows of matches with count 7, 5 and 3.
The object is to take matches away in turn, but any player
can remove matches from only onerow at a time. From 1 to
the number of matches in the row can be removed.
The player to take the last match wins.
100 DIM T(3)
110 DIM N(3)
120 DIM X(3)
130 LET N(1)=7
140 LET N(2)=5
150 LET N(3)=3
160 GO TO 500
200 FOR R=1 TO 3
210 FOR M=1 TO N(R)
220 IF N(R)=0 THEN GO TO 250
230 PRINT " \A";
240 NEXT M
250 PRINT
260 PRINT
270 NEXT R
280 RETURN
300 FOR S=0 TO 3
310 LET T(S)=0
320 NEXT S
330 FOR S=1 TO 3
340 LET T(1)=T(1)+(X(S) AND 4)/4
350 LET T(2)=T(2)+(X(S) AND 2)/2
360 LET T(3)=T(3)+(X(S) AND 1)
370 NEXT S
380 FOR S=1 TO 3
390 IF T(S)=2 THEN LET T(S)=0
400 LET T(0)=T(0)+T(S)
410 NEXT S
420 RETURN
500 GO SUB 200
510 PRINT "ENTER ROW AND HOW MANY"
520 INPUT Y
530 IF Y=0 THEN GO TO 900
540 IF Y<0 OR Y>33 THEN GO TO 520
550 LET M=Y/10
560 LET Y=Y-10*M
570 IF Y>N(M) THEN GO TO 520
580 LET N(M)=N(M)-Y
590 CLS
600 GO SUB 200
610 FOR R=1 TO 3
620 LET X(R)=N(R)
630 NEXT R
640 GO SUB 300
650 IF T(0)=0 THEN GO TO 670
660 PRINT "I BET I WILL WIN"
670 PRINT "PRESS N/L"
680 INPUT X$
690 IF T(0)>0 THEN GO TO 750
700 FOR R=1 TO 3
710 LET M=N(R)-1
720 IF N(R)>0 THEN GO TO 820
730 NEXT R
740 GO TO 900
750 FOR R=1 TO 3
760 FOR M=0 TO N(R)
770 LET X(R)=M
780 GO SUB 300
790 IF T(0)=0 THEN GO TO 820
800 NEXT M
810 NEXT R
820 IF R>3 THEN GO TO 900
830 LET N(R)=M
840 IF N(1)+N(2)+N(3)=0 THEN GO TO 900
850 GO TO 500
900 PRINT "WHO WON?"
---------------------------------------------------------
15) Blackjack (30 Programs for the Sinclair ZX80 1K, page 36)
program 757 bytes
Program uses first row with REM as container for cards.
It will be modified with shuffling. Save it before you run it.
100 REM 23456789TJQKA23456789TJQKA23456789TJQKA23456789TJQKA
110 DIM N(3)
120 LET S=16427
130 LET M=100
140 GO TO 310
150 LET X=PEEK(S+6*I+N(I))-28
160 LET N(I+2)=N(I+2)-10*(X>10)-X*(X<10)-11*(X=10)
170 LET A=A-(X=10)
180 RETURN
200 PRINT "YOURS",,"ATX80"
210 FOR K=0 TO 1
220 FOR L=6*K TO 6*K+N(K)
230 LET X=PEEK(S+L)
240 PRINT CHR$(X);" ";
250 NEXT L
260 PRINT ,,
270 NEXT K
300 RETURN
310 FOR I=0 TO 51
320 LET J=RND(52)-1
330 LET X=PEEK(S+J)
340 POKE S+J,PEEK(S+I)
350 POKE S+I,X
360 NEXT I
370 FOR I=0 TO 1
380 LET N(I)=0
390 LET N(I+2)=0
400 LET A=0
410 GO SUB 150
420 NEXT I
430 PRINT "BET:$";M
440 INPUT B
450 CLS
500 FOR I=0 TO 1
510 LET W=2*I-1
520 LET A=N(I+2)/10
530 GO SUB 200
540 IF I=0 THEN PRINT "H OR S?"
550 IF I=1 THEN PRINT "N/L"
560 LET I$="S"
570 INPUT I$
580 CLS
590 IF CODE(I$)=56 THEN GO TO 700
600 LET N(I)=N(I)+1
610 GO SUB 150
620 IF N(I+2)<22 THEN GO TO 660
630 IF A=0 THEN GO TO 800
640 LET A=A-1
650 LET N(I+2)=N(I+2)-10
660 IF N(I)=4 THEN GO TO 700
670 IF I=0 OR N(I+2)<17 THEN GO TO 530
700 NEXT I
750 GO SUB 200
760 LET W=-1
770 IF (N(0)=4 AND N(1)<4) OR N(2)>N(3) THEN LET W=1
780 IF N(2)=21 AND N(0)=1 THEN LET W=2
800 LET M=M+W*B
810 IF M<1 THEN STOP
820 GO TO 310
---------------------------------------------------------
16) Bubble sort (30 Programs for the Sinclair ZX80 1K, page 41)
program 246 bytes
10 REM BUBBLE SORT
20 PRINT "COUNT?"
30 INPUT N
40 DIM P(N)
50 FOR I=1 TO N
60 CLS
70 PRINT "NUMBER(";I;")?"
80 INPUT P(I)
90 NEXT I
100 CLS
110 PRINT "SORTING..."
120 FAST
130 FOR J=1 TO N-1
140 LET K=J+1
150 FOR I=K TO N
160 LET L=N+K-I
170 IF P(L)>P(J) THEN GO TO 210
180 LET T=P(L)
190 LET P(L)=P(J)
200 LET P(J)=T
210 NEXT I
220 NEXT J
230 SLOW
240 CLS
250 FOR I=1 TO N
260 PRINT P(I);" ";
270 NEXT I
---------------------------------------------------------
17) Line renumber (30 Programs for the Sinclair ZX80 1K, page 43)
program 231 bytes
Routine renumbers whole program starting with line number 10,
except routine itself. Remember that you cannot load this routine
to an existing program, you must write new program in front
of this routine.
Routine does not touch parameters of GO TO and GO SUB, but it prints
lines with these commands.
Lines 5, 12 and 18 are there only for testing purposes, you can
delete them. Start routine with command GO TO 9987.
5 REM LINE RENUMBER
12 GO TO 18
18 GO SUB 9987
9987 LET L=20
9988 POKE 16424,0
9989 POKE 16425,10
9990 FOR N=16426 TO 17400
9991 IF PEEK(N)=251 THEN PRINT L-10,CHR$(251)
9992 IF PEEK(N)=236 THEN PRINT L-10,CHR$(236)
9993 IF NOT PEEK(N)=118 THEN GO TO 9999
9994 IF PEEK(N+1)>38 THEN STOP
9995 POKE N+1,L/256
9996 POKE N+2,L AND 255
9997 LET N=N+2
9998 LET L=L+10
9999 NEXT N
---------------------------------------------------------
18) Draw a picture (30 Programs for the Sinclair ZX80 1K, page 45)
program 378 bytes
If you want to restore saved image, run "GO TO 200" after loading.
Example:
size pad = 5
5: 0, 0, 0, 0, 0,
4: 0, 0, 156, 0, 0,
3: 0, 8, 3, 136, 0,
2: 0, 2, 3, 130, 0,
1: 134, 131, 3, 131, 135
1: 2: 3: 4: 5:
100 PRINT
110 PRINT
120 PRINT "SIZE PAD (3-7)?"
130 INPUT N
140 IF N<3 OR N>7 THEN GO TO 120
150 DIM A(N*N-1)
200 CLS
210 FOR K=1 TO N
220 LET J=N+1-K
230 PRINT J,
240 FOR I=1 TO N
250 PRINT CHR$(A(J-N-1+N*I));
260 NEXT I
270 PRINT
280 NEXT K
290 PRINT
300 PRINT ,
310 FOR I=1 TO N
320 PRINT I;
330 NEXT I
340 PRINT
400 PRINT "ENTER COORD"
410 INPUT X
420 IF X=0 THEN GO TO 500
430 PRINT X
440 LET J=X/10
450 LET I=X-10*J
460 PRINT "ENTER CHAR CODE"
470 INPUT X
480 LET A(J-N-1+N*I)=X
490 GO TO 200
500 PRINT "CODES USED:"
510 FOR K=1 TO N
520 LET J=N+1-K
530 PRINT "LINE:";J,
540 FOR I=1 TO N
550 PRINT A(J-N-1+N*I);" ";
560 NEXT I
570 PRINT
580 NEXT K
---------------------------------------------------------
19) Day of the week (30 Programs for the Sinclair ZX80 1K, page 56)
program 580 bytes
100 PRINT "I CALCULATE DAY YOU WERE BORN"
110 LET D$=" SUNMONTUEWEDTHUFRISAT"
120 PRINT "PLEASE ENTER YOUR NAME"
130 INPUT A$
140 PRINT "HELLO ";A$
150 PRINT "ENTER DATE OF BIRTH:"
155 PRINT "DAY",
160 INPUT D
170 IF D<1 OR D>31 THEN GO TO 160
180 PRINT D
185 PRINT "MONTH",
190 INPUT M
200 PRINT M
205 PRINT "YEAR",
210 INPUT Y
220 PRINT Y
230 IF Y<1700 THEN PRINT A$," IS TOO OLD FOR ME"
240 IF Y<1700 THEN GO TO 440
250 LET K=0
260 IF M=1 OR M=2 THEN LET K=1
270 LET L=Y-K
280 LET O=M+12*K
290 LET P=L/100
300 LET Z=(13*(O+1))/5+(5*L)/4-P+P/4+D-1
310 LET Z=Z-7*(Z/7)+1
320 FOR I=1 TO Z*3
330 LET D$=TL$(D$)
340 NEXT I
400 PRINT A$;" WAS BORN ON ";CHR$(CODE(D$));
410 LET D$=TL$(D$)
420 PRINT CHR$(CODE(D$));CHR$(CODE(TL$(D$)))
430 PRINT
440 PRINT "ANYONE ELSE? (Y)"
450 INPUT A$
455 CLS
460 IF CODE(A$)=62 THEN GO TO 110
470 PRINT "ATX80 SAYS BYEBYE"
---------------------------------------------------------
20) Chinese remainder (30 Programs for the Sinclair ZX80 1K, page 59)
program 354 bytes
Think of a number, divide by 5, tell me remainder, divide the original
number by 7, tell me remainder, divide your original number by 9 and
tell me the remainder - I'll tell you what number you thought of.
10 REM CHINESE REMAINDER
100 DIM R(3)
110 PRINT "THINK OF A NUMBER BETWEEN 1 AND 316"
120 PRINT "PRESS N/L WHEN READY"
130 INPUT A$
200 LET A=3
210 FOR I=1 TO 3
220 LET A=A+2
230 PRINT "NOW DIVIDE YOUR ORIGINAL NUMBER BY ";A
240 PRINT "PLEASE ENTER REMAINDER"
250 INPUT R(I)
260 PRINT R(I)
270 NEXT I
300 LET A=126*R(1)+225*R(2)+280*R(3)
310 LET A=A-315*(A/315)
320 PRINT "YOUR NUMBER WAS ";A
330 PRINT "ANOTHER? (Y)"
340 INPUT A$
350 CLS
360 IF CODE(A$)=62 THEN GO TO 100
370 PRINT "BYEBYE"
Example:
think number: 231
divide 5, remainder: 1
divide 7, remainder: 0
divide 9, remainder: 6
result number: 231
---------------------------------------------------------
21) Simple Simon (30 Programs for the Sinclair ZX80 1K, page 61)
program 431 bytes
The computer generates a random sequence of letters that
you have to remember and copy. Program uses huge graphics
with ROM fonts.
10 REM SIMPLE SIMON
100 DIM A(30)
110 LET J=-1
120 RANDOMISE
130 DIM P(7)
140 FOR I=0 TO 7
150 LET P(I)=2**(7-I)
160 NEXT I
200 LET X=RND(26)+37
210 CLS
220 PRINT "NEXT CHAR IS"
230 FOR L=0 TO 7
240 LET V=PEEK(3584+L+8*X)
250 FOR K=0 TO 7
260 LET G=(V AND P(K))>0
270 PRINT CHR$(-128*G);
280 NEXT K
290 PRINT
300 NEXT L
400 IF X=15 THEN GO TO 700
410 LET J=J+1
420 IF J=31 THEN GO TO 800
430 LET A(J)=X
440 PRINT "PRINT ENTIRE SEQUENCE"
450 INPUT A$
460 PRINT A$
470 FOR I=0 TO J
480 LET X=CODE(A$)
490 IF NOT A(I)=X THEN GO TO 600
500 LET A$=TL$(A$)
510 NEXT I
520 GO TO 200
600 LET X=15
610 GO TO 230
700 PRINT "SORRY IT WAS:"
710 FOR I=0 TO J
720 PRINT CHR$(A(I));
730 NEXT I
740 STOP
800 PRINT "I GIVE UP"
---------------------------------------------------------
22) Hangman (30 Programs for the Sinclair ZX80 1K, page 64)
program 739 bytes
One person thinks of a secret word and the other has to
guess the letters that make up the word. After 10 wrong
letter guesses, person is hung.
Do not renumber lines 10 to 200. They are called by index
from line 230.
5 GO TO 300
10 PRINT "\A\A\A";
20 RETURN
30 PRINT "\A\A\A"
40 RETURN
50 PRINT " \Q"
60 RETURN
70 PRINT " \Q"
80 RETURN
90 PRINT " ";CHR$(135);CHR$(135);"\Q"
100 RETURN
110 PRINT " ";CHR$(134);
120 RETURN
130 PRINT CHR$(134);"\E"
140 RETURN
150 PRINT " ";CHR$(130);CHR$(128)
160 RETURN
170 PRINT " ";CHR$(132);
180 RETURN
190 PRINT CHR$(130);"\D"
200 RETURN
210 FOR L=1 TO G
220 IF G=0 THEN GO TO 250
230 GO SUB 20*L-10
240 NEXT L
250 PRINT
260 PRINT
270 IF G=10 THEN GO TO 290
280 GO TO 500
290 PRINT "TOO BAD"
300 PRINT "ENTER NEW WORD"
310 INPUT X$
320 LET W=1
330 LET A$=X$
340 FOR L=1 TO 20
350 LET A$=TL$(A$)
360 IF A$="" THEN GO TO 390
370 LET W=W+1
380 NEXT L
390 DIM A(W)
400 FOR L=1 TO W
410 LET A(L)=0
420 NEXT L
430 PRINT "LETTERS=";W
440 LET G=0
500 PRINT "INPUT GUESS"
510 INPUT A$
520 CLS
530 IF A$="" THEN GO TO 999
540 LET B=CODE(A$)
550 LET A$=X$
560 LET C=0
570 FOR L=1 TO W
580 IF B=CODE(A$) THEN LET A(L)=B
590 IF A(L)=B THEN LET C=1
600 LET A$=TL$(A$)
610 NEXT L
620 IF C=0 THEN LET G=G+1
630 LET N=W
640 FOR L=1 TO W
650 IF A(L)=0 THEN PRINT "-";
660 IF A(L)=0 THEN GO TO 690
670 LET N=N-1
680 PRINT CHR$(A(L));
690 NEXT L
700 PRINT
710 PRINT
720 IF NOT N=0 THEN GO TO 210
730 PRINT "BRILLIANT"
740 GO TO 300
999 PRINT "THANKS FOR THE GAME"
---------------------------------------------------------
23) Maths drill (30 Programs for the Sinclair ZX80 1K, page 68)
program 458 bytes
This program is designed to learn younger children to
add or subtract 2 numbers between 1 and 49.
Program uses huge graphics with ROM fonts.
100 RANDOMISE
110 DIM C(3)
120 DIM P(7)
130 FOR J=0 TO 7
140 LET P(J)=2**(7-J)
150 NEXT J
160 GO TO 400
200 IF S=-1 THEN LET C(1)=18
210 LET C(2)=X/10
220 LET C(3)=X-10*C(2)+28
230 IF C(2)>0 THEN LET C(2)=C(2)+28
240 FOR L=0 TO 6
250 FOR I=1 TO 3
260 LET V=PEEK(3584+L+8*C(I))
270 FOR J=0 TO 7
280 LET G=(V AND P(J))>0
290 PRINT CHR$(-128*G);
300 NEXT J
310 NEXT I
320 PRINT
330 NEXT L
340 PRINT
350 RETURN
400 LET K=0
410 LET C(1)=0
420 LET S=1
430 LET A=RND(49)
440 LET X=A
450 GO SUB 200
460 LET C(1)=19
470 LET S=2*RND(2)-3
480 LET B=RND(49)
490 LET X=B
500 GO SUB 200
600 INPUT C
610 IF C=A+S*B THEN GO TO 700
620 LET K=K+1
630 IF K>2 THEN GO TO 660
640 PRINT "TRY AGAIN"
650 GO TO 600
660 PRINT "ANSWER WAS ";A+S*B
670 STOP
700 PRINT "THAT/S RIGHT"
---------------------------------------------------------
24) Capitals of the World (30 Programs for the Sinclair ZX80 1K, page 71)
program 676 bytes
Another learning program - world capitals.
100 DIM Q(10)
110 LET C=0
120 LET Q=0
130 PRINT "THIS IS A TEST OF CAPITALS"
140 PRINT "WHAT IS THE CAPITAL OF"
150 LET X=RND(10)
160 LET A=10
170 IF Q(X)<0 THEN GO TO 150
180 LET Q(X)=-1
190 GO SUB 500+20*X
200 FOR I=1 TO 30
210 LET X=CODE(A$)
220 PRINT CHR$(X);
230 LET A$=TL$(A$)
240 IF X=15 THEN GO TO 300
250 NEXT I
300 INPUT B$
310 IF NOT A$=B$ THEN GO TO 400
320 LET C=C+A
330 LET Q=Q+1
340 IF Q=10 THEN GO TO 490
350 IF A=0 THEN GO TO 140
360 CLS
370 GO TO 140
400 PRINT " TRY AGAIN"
410 INPUT B$
420 LET A=5
430 IF B$=A$ THEN GO TO 320
440 PRINT "IT IS ";A$
450 LET A=0
460 GO TO 320
490 CLS
500 PRINT "YOU GOT ";C;" PERCENT RIGHT"
510 STOP
520 LET A$="CZECHIA?PRAGUE"
530 RETURN
540 LET A$="TURKEY?ISTANBUL"
550 RETURN
560 LET A$="USA?WASHINGTON"
570 RETURN
580 LET A$="HOLLAND?AMSTERDAM"
590 RETURN
600 LET A$="AUSTRALIA?CANBERRA"
610 RETURN
620 LET A$="JAPAN?TOKYO"
630 RETURN
640 LET A$="INDIA?NEW DEHLI"
650 RETURN
660 LET A$="POLAND?WARSAW"
670 RETURN
680 LET A$="SWEDEN?STOCKHOLM"
690 RETURN
700 LET A$="PORTUGAL?LISBON"
710 RETURN
---------------------------------------------------------
25) Life (30 Programs for the Sinclair ZX80 1K, page 76)
program 427 bytes
New cell is born if has 3 neighbours. Cell dies if has
more than 3 or less than 2 neighbours.
100 DIM A(63)
110 FOR I=1 TO 63
120 LET A(I)=128*(RND(2)-1)
130 NEXT I
200 FOR L=0 TO 8
210 FOR J=1 TO 7
220 LET I=J+7*L
230 PRINT CHR$(A(I));
240 NEXT J
250 PRINT
260 NEXT L
270 PRINT "PRESS N/L"
280 INPUT A$
285 IF NOT A$="" THEN STOP
290 CLS
300 FOR I=9 TO 55
310 LET X=0
320 IF ((I+1) AND 7)=0 THEN GO TO 350
330 LET X=(A(I+1)>127)
340 IF ((I-1) AND 7)=0 THEN GO TO 360
350 LET X=X+(A(I-1)>127)
360 FOR J=7 TO 9
370 FOR R=-1 TO 1
380 IF R=0 THEN GO TO 420
390 LET K=I+R*J
400 IF (K AND 7)=0 THEN GO TO 420
410 LET X=X+(A(K)>127)
420 NEXT R
430 NEXT J
440 LET A(I)=A(I)-X
450 NEXT I
460 FOR I=9 TO 55
470 IF A(I)=3 OR A(I)=130 OR A(I)=131 THEN GO TO 500
480 LET A(I)=0
490 GO TO 510
500 LET A(I)=128
510 NEXT I
520 GO TO 200
---------------------------------------------------------
26) Prime numbers (30 Programs for the Sinclair ZX80 1K, page 78)
program 134 bytes
Program generates prime number from 2 to 300.
100 DIM A(75)
110 LET R=1
120 LET A(1)=2
130 FOR X=3 TO 300
140 FOR Y=1 TO R
150 IF X/A(R)>A(R) THEN GO TO 180
160 IF X=(X/A(Y))*A(Y) THEN GO TO 210
170 NEXT Y
180 LET R=R+1
190 LET A(R)=X
200 PRINT X,
210 LET X=X+1
220 NEXT X
---------------------------------------------------------
27) Simultaneous equations (30 Programs for the Sinclair ZX80 1K, page 81)
program 466 bytes
Program solves simultaneous linear equations
ax + by + c = 0, dx + ey + f = 0 .
Example:
x + 2*y - 6 = 0
x - y - 3 = 0
result: x = 4, y = 1
2*x + 3*y - 7 = 0
3*x + 2*y - 3 = 0
result: x = -1, y = 3
100 DIM X(6)
110 DIM A(2)
120 PRINT "SOLUTIONS TO 2 EQUATIONS:"
130 PRINT "A*X + B*Y + C = 0"
140 PRINT
150 PRINT "ENTER DATA"
160 FOR I=1 TO 6
170 PRINT CHR$(37+I-((I-1)/3)*3),
180 INPUT X(I)
190 PRINT X(I)
200 NEXT I
300 LET D=X(1)*X(5)-X(2)*X(4)
310 IF D=0 THEN GO TO 900
320 LET A(1)=X(3)*X(5)-X(2)*X(6)
330 LET A(2)=-X(3)*X(4)+X(1)*X(6)
340 PRINT
350 PRINT "SOLUTIONS ARE"
360 LET D=-D
370 LET S=D/ABS(D)
400 FOR I=1 TO 2
410 LET B=ABS(D)
420 LET A=ABS(A(I))
500 LET Q=A/B
510 LET R=A-Q*B
520 LET A=B
530 LET B=R
540 IF R>0 THEN GO TO 500
550 LET GCD=A
600 PRINT S*A(I)/GCD;
610 IF NOT D/GCD=S THEN PRINT "/";ABS(D/GCD)
620 PRINT ,
630 NEXT I
640 STOP
900 PRINT "- DEGENERATE: NO SOLUTIONS"
---------------------------------------------------------
28) Square root to 3 decimal places (30 Programs for the Sinclair ZX80 1K, page 83)
program 548 bytes
Example:
number 13
result 3.606
100 PRINT "INPUT NUMBER"
110 INPUT A
120 CLS
130 PRINT "SQUARE ROOT OF ";A;" IS"
140 LET U=174
150 LET L=0
160 LET FRAC=0
170 LET DELTA=0
200 LET NEW=(U+L)/2
210 IF (NEW-1)**2A THEN GO TO 250
220 IF NEW**2>A THEN LET U=NEW
230 IF NEW**2A THEN LET NEW=NEW-1
300 LET ERROR=100*(A-NEW**2)
310 IF ERROR<2 THEN GO TO 470
320 LET FRAC=(ERROR/NEW)/2
330 LET FSQ=FRAC**2
340 LET ERROR=ERROR-2*NEW*FRAC
350 IF ERROR>0 THEN GO TO 390
360 LET FRAC=FRAC-1
370 LET ERROR=100*(A-NEW**2)
380 GO TO 330
390 LET ERROR=10*ERROR-FSQ/10
400 IF ERROR<0 THEN GO TO 360
410 LET DELTA=(ERROR/NEW)/2
420 LET EDASH=ERROR-(2*FRAC*DELTA)/2
430 IF EDASH>0 THEN GO TO 460
440 LET DELTA=DELTA-1
450 GO TO 420
460 LET DELTA=(EDASH/NEW)/2
470 PRINT NEW;".";FRAC;DELTA
---------------------------------------------------------
29) Pontoon (30 Programs for the Sinclair ZX80 1K, page 90)
program 512 bytes
2-player version of BLACKJACK with nicer graphics
(unplayable semi-finished program).
100 DIM N(2)
110 DIM V(9)
120 RANDOMISE
130 FOR I=1 TO 2
140 LET N(I)=1
150 LET V(5*I-5)=RND(13)
160 NEXT I
170 LET I=1
200 LET P=I
210 FOR L=1 TO 7
220 FOR C=1 TO N(P)
230 LET J=C-6+5*P
240 IF L=1 OR L=7 THEN GO TO 420
250 IF L=4 THEN GO TO 270
260 GO TO 440
270 PRINT " \A ";
280 IF V(J)<2 OR V(J)>10 THEN GO TO 330
290 PRINT V(J);
300 IF V(J)<10 THEN PRINT " ";
310 PRINT "\A";
320 GO TO 450
330 LET A$=" AJQK"
340 LET M=V(J)
350 IF M>10 THEN LET M=M-9
360 FOR K=1 TO M-1
370 LET A$=TL$(A$)
380 NEXT K
390 PRINT CHR$(CODE(A$));
400 PRINT " \A";
410 GO TO 450
420 PRINT " \A\A\A\A\A";
430 GO TO 450
440 PRINT " \A \A";
450 NEXT C
460 PRINT
470 NEXT L
480 PRINT
490 PRINT
600 PRINT "PLAYER";I;":HIT OR STAY?"
610 INPUT A$
620 CLS
630 IF CODE(A$)=56 THEN GO TO 670
640 LET N(I)=N(I)+1
650 LET V(N(I)-6+5*I)=RND(13)
660 GO TO 200
670 IF I=2 THEN STOP
680 LET I=I+1
690 GO TO 200
---------------------------------------------------------
30) Chomp (30 Programs for the Sinclair ZX80 1K, page 92)
program 436 bytes
Game for 2 or more players. Object of the game is to take
'bite' out of a grid, starting from right bottom corner 17.
Last bite 71 (left top corner) is poisoned.
100 DIM A(48)
110 FOR I=0 TO 48
120 LET A(I)=6
130 NEXT I
140 LET A(0)=53
150 PRINT "HOW MANY PLAYERS?"
160 INPUT N
170 LET T=0
200 LET T=T+1
210 FOR L=0 TO 6
220 LET J=7-L
230 PRINT J,
240 FOR C=0 TO 6
250 PRINT CHR$(A(C+7*L));
260 NEXT C
270 PRINT
280 NEXT L
290 PRINT ,
300 FOR C=1 TO 7
310 PRINT C;
320 NEXT C
330 PRINT
340 PRINT "PLAYER:";T
410 PRINT "INPUT COORD"
420 INPUT A
430 IF A=0 THEN GO TO 999
440 LET J=A/10
450 LET C=A-10*J-1
460 LET L=7-J
470 LET P=C+7*L
480 IF P<0 OR P>48 THEN GO TO 420
490 IF A(P)>0 THEN GO TO 600
500 PRINT "EMPTY SPACE"
510 GO TO 410
600 IF P=0 THEN GO TO 700
610 FOR J=L TO 6
620 FOR I=C TO 6
630 LET A(I+7*J)=0
640 NEXT I
650 NEXT J
660 CLS
670 IF T=N THEN LET T=0
680 GO TO 200
700 PRINT "PLAYER";T;":YOU LOST"
---------------------------------------------------------
31) Mastermind (30 Programs for the Sinclair ZX80 1K, page 96)
program 445 bytes
Guess digits of 3 to 7-digit number.
100 PRINT "WELCOME TO MASTERMIND"
110 PRINT "ENTER NUMBER OF DIGITS (3-7)"
120 INPUT N
130 LET N=N-1
140 DIM A(N)
200 FOR I=0 TO N
210 LET X=RND(10)-1
220 FOR J=0 TO I
230 IF X=A(J) THEN GO TO 210
240 NEXT J
250 LET A(I)=X
260 NEXT I
270 LET G=0
280 GO TO 530
300 INPUT B$
310 IF B$="" THEN STOP
320 CLS
330 PRINT B$
340 LET R=0
350 LET C=0
360 LET G=G+1
370 FOR I=0 TO N
380 LET X=CODE(B$)-28
390 IF X=A(I) THEN LET C=C+1
400 FOR J=0 TO N
410 IF X=A(J) THEN LET R=R+1
420 NEXT J
430 LET B$=TL$(B$)
440 NEXT I
450 IF C=N+1 THEN GO TO 600
500 PRINT "NUMBERS RIGHT=";R
510 PRINT "CORRECT POSITIONS=";C
520 PRINT
530 PRINT "ENTER ";N+1;"-DIGIT GUESS"
540 GO TO 300
600 PRINT "YOU DID IT IN ";G;" GUESSES"
---------------------------------------------------------
32) Pinch (30 Programs for the Sinclair ZX80 1K, page 100)
program 589 bytes
Object of the game is capture oponent by surounding his
stones on both sides (or one side on edge).
100 DIM G(9)
110 PRINT "ENTER PLAYER 1 NAME"
120 INPUT Y$
130 PRINT "PLAYER 2 NAME?"
140 INPUT Z$
150 LET A$=Y$
160 LET B=2
170 GO TO 600
200 LET C=G(I)
210 IF C=0 THEN RETURN
220 FOR S=-1 TO 1
230 IF S=0 THEN GO TO 330
240 FOR J=1 TO 6
250 LET K=I+S*J
260 IF K=9 OR K=0 THEN GO TO 300
270 IF G(K)=0 OR G(K)=C THEN GO TO 290
280 NEXT J
290 IF J=1 OR G(K)=0 THEN GO TO 330
300 FOR K=1 TO J-1
310 LET G(I+S*K)=0
320 NEXT K
330 NEXT S
340 CLS
350 PRINT
360 PRINT "PINCH"
370 PRINT
380 PRINT
390 FOR J=1 TO 8
400 PRINT " ";CHR$(27+G(J));
410 NEXT J
420 PRINT
430 PRINT " ";
440 FOR J=1 TO 8
450 PRINT "\A\T\A";
460 NEXT J
470 PRINT
480 PRINT
490 FOR J=1 TO 8
500 PRINT " ";J;
510 NEXT J
520 RETURN
600 GO SUB 340
610 PRINT
620 PRINT A$;":ENTER MOVE"
630 INPUT I$
640 LET I=CODE(I$)-28
650 IF I=0 THEN GO TO 999
660 IF I>0 AND I<9 THEN GO TO 680
670 GO TO 630
680 IF NOT G(I)=0 THEN GO TO 630
690 LET G(I)=B
700 GO SUB 200
710 LET I=I+1
720 IF I=9 THEN LET I=7
730 GO SUB 200
740 LET B=B+1
750 IF B=3 THEN LET B=1
760 IF B=2 THEN LET A$=Y$
770 IF B=1 THEN LET A$=Z$
780 GO TO 610