BBC Micro

BBC User Guide scripts

This page contains the scripts from the BBC User Guide.
These are here to help you learn how to program BBC BASIC. You should use them while reading the user guide.
When looking at these scripts I would suggest you use the following resources to assist you:

NOTE: the pdf page numbers do not match up with the original BBC / Acorn book. For the benefit of this site, scripts will be referenced against the pdf page numbers.



Chapter 3 [Page 21]

basic
10 REPEAT
20 PRINT "GIVE ME A NUMBER";
30 INPUT B
40 PRINT "12 TIMES ";B;" IS ";12*B
50 UNTIL B=0
c3p21_1


Chapter 3 [Page 23]

basic
05 CLS
10 REPEAT
20 PRINT "GIVE ME A BIG NUMBER";
25 REPEAT
30 INPUT B
35 IF B<1000 THEN PRINT "I SAID A BIG NUMBER"
37 UNTIL B>=1000
40 PRINT "12 TIMES ";B;" IS ";12*B
50 UNTIL B=0
c3p23_1



Chapter 6 [Page 31] - POLYGON

basic
10 REM POLYGON
20 REM JOHN A COLL
30 REM VERSION 1 / 16 NOV 81
40 MODE5
50 VDU 19,1,1,0,0,0
60 VDU 19,2,4,0,0,0
70 VDU 19,3,3,0,0,0
80 DIM X(10)
90 DIM Y(10)
100
110 FOR C=1 TO 2500
120 xorigin=RND(1200)
130 yorigin=RND(750)
140 VDU29,xorigin;yorigin;
150 radius=RND(300)+50
160 sides=RND(8)+2
170 MOVE radius,0
180 MOVE 10,10
190
200 GCOL 0,0
210 FOR SIDE=1 TO sides
220 angle=(SIDE-1)*2*PI/sides
230 X(SIDE)=radius*COS(angle)
240 Y(SIDE)=radius*SIN(angle)
250 MOVE0,0
260 PLOT 85,X(SIDE), Y(SIDE)
270 NEXT SIDE
280 MOVE0,0
290 PLOT 85,radius,0
300
310 GCOL 0,RND(3)
320 FOR SIDE=1 TO sides
330 FOR line=SIDE TO sides
340 MOVE X(SIDE), Y(SIDE)
350 DRAW X(line), Y(line)
360 NEXT line
370 NEXT SIDE
380 NEXT C
c6p31_1


Chapter 6 [Page 32] - MONTHLY

basic
10 REM MONTHLY
20 REM JOHN A COLL
30 REM VERSION 1 / 16 NOV 81
50
60 *KEY 0 "MODE7 |M LIST |M"
70 *KEY 9 "RUN |M"
80 M$="JFMAMJJASOND"
90 C=0
100 MODE 2
110 VDU 5
120 VDU 29,0;100;
130
140 FOR X=0 TO 1100 STEP 100
150 GCOL 0,C MOD 7+1
160 C=C+1
170 H=RND(400)+200
180 MOVE X,0
190 MOVE X,H
200 PLOT 85,X+100,0
210 PLOT 85,X+100,H
220 MOVE X+70,H+50
230 MOVE X,H
240 PLOT 85,X+170,H+50
250 PLOT 85,X+100,H
260 PLOT 85,X+170,50
270 PLOT 85,X+100,0
280 GCOL 0,0
290 MOVEX,H
300 DRAW X+100,H
310 DRAW X+170,H+50
320 MOVE X+100,H
330 DRAW X+100,0
340 MOVE X+10,50
350 PRINT MID$(M$,C,1)
360 NEXT
370
380 GCOL 4,1
390 MOVE 0,450:PRINT "----------------"
400 VDU 4
410 PRINT TAB(3,0)"critical level"
c6p32_1


Chapter 6 [Page 33] - QUADRAT

basic
10 REM QUADRAT
20 REM JOHN A COLL BASED ON A PROGRAM
30 REM BY MAX BRAMER, OPEN UNIVERSITY
40 REM VERSION 1.0 /16 NOV 81
50 REM SOLVES AN EQUATION OF THE FORM
60 REM A*X^2 + B*X + C
70 ON ERROR GOTO 350
80 MODE 7
90 @%=2020A
100 REPEAT
110 PRINT "What are the three coefficients ";
120 INPUT A,B,C : IF A=0 THEN 110
130 DISCRIM=B^2-4*A*C
140 IF DISCRIM<0 THEN PROCcomplex
150 IF DISCRIM=0 THEN PROCcoincident
160 IF DISCRIM>0 THEN PROCreal
170 PRINT'''
180 UNTIL FALSE
190 END
200
210 DEF PROCcomplex
220 PRINT "Complex roots X=";-B/(2*A);
230 PRINT " +/- "; ABS(SQR(-DISCRIM)/(2*A)) "i"
240 ENDPROC
250
260 DEF PROCcoincident
270 PRINT "Co-incident roots X=";B/(2*A)
280 ENDPROC
290
300 DEF PROCreal
310 X1=(-B+SQR(DISCRIM))/(2*A)
320 X=2(-B-SQR(DISCRIM))/(2*A)
330 PRINT "Real distinct roots X=";X1;" and X=";X2
340 ENDPROC
350 @%=&90A:REPORT:PRINT" at line "ERL
c6p33_1


Chapter 6 [Page 35] - FOURPNT

basic
10 REM FOURPNT/DRAWS A PATTERN WITH 4 POINTS
20 REM JOHN A COLL
30 REM VERSION 1 /16 NOV 81
50 MODE 4
60 VDU 29,640;512
70
80 FOR A=0 TO 500 STEP 15
90 MOVE A-500,0
100 DRAW 0,A
110 DRAW 500-A,0
120 DRAW 0,-A
130 DRAW A-500,0
140 NEXT A
150
160 FOR B=0 TO 7 :REM CHANGE THE COLOUR
170 FOR C=1 TO 3
180 T=TIME :REM WAIT A WHILE
190 REPEAT UNTIL TIME-T>50
200 VDU 19,3,C,0,0,0
210 VDU 19,0,B,0,0,0
220 NEXT C
230 NEXT B
c6p35_1


Chapter 6 [Page 35] - TARTAN

basic
10 REM TARTAN
20 REM BASED ON RESEARCH MACHINES DEMO
30 REM VERSION 1.0/16 NOV 81
40 MODE 2: REM ALSO WORKS IN MODE 5
50 R=1: D=1: X=0
60 Y=RND(800)
70 MOVE X,Y
80
90 REPEAT
100 ON D GOSUB 160,260,350,430
110 IF RND(1000)<10 THEN R=D-1
120 GCOL R,(D*1.7)
130 DRAW X,Y
140 UNTIL FALSE
150
160 X=X+800-Y
170 IF X>1000 THEN 220
180 Y=800
190 D=2
200 RETURN
210
220 Y=800/1000-X
230 X=1000: D=4
240 RETURN
250
260 Y=Y-800+X
270 IF Y<0 THEN 310
280 X=1000: D=3
290 RETURN
300
310 X=1000+Y
320 Y=0: D=1
330 RETURN
340
350 X=X-Y
360 IF X<0 THEN 400
370 Y=0: D=4
380 RETURN
390
400 Y=-X: X=0: D=2
410 RETURN
420
430 Y=Y+X
440 IF Y>800 THEN 480
450 X=0: D=1
460 RETURN
470
480 X=Y-800
490 Y=804: D=3
500 RETURN
c6p35_2


Chapter 6 [Page 37] - PERSIAN

basic
10 REM PERSIAN
20 REM ACORN COMPUTERS
30 REM VERSION 2/16 NOV 81
40 MODE 1
50 D%=4
60 VDU 19,2,RND(3)+1,0,0,0
70 VDU 19,3,RND(3)+4,0,0,0
80 VDU 29,640;400;
90 J1%=0
100 FOR K%=400 TO 280 STEP -40
110 REPEAT J2%=RND(3): UNTIL J2%<>J1%
120 J1%=J2%
130 GCOL 3,J1%
140 FOR I%=-K% TO K% STEP D%
150 MOVE K%,I%
160 DRAW -K%,-I%
170 MOVE I%,-K%
180 DRAW -I%,K%
190 NEXT
200 NEXT
c6p37_1


Chapter 6 [Page 37] - SQR ROOT

basic
10 REM ROOT
20 REM VERSION 1.0 / 16 NOV 81
30 REM TRADITIONAL ITERATION METHOD
40 REM TO CALCULATE THE SQUARE ROOT
50 REM OF A NUMBER TO 3 DECIMAL PLACES
60 MODE 7
70 ON ERROR GOTO 300
80 @%=&2030A
90 REPEAT
100 count=0
110 REPEAT
120 INPUT "What is your number ",N
130 UNTIL N>0
140 DELTA=N
150 ROOT=N/2
160 T=TIME
170 REPEAT
180 count=count+1
190 DELTA=(N/ROOT-ROOT)/2
200 ROOT=ROOT+DELTA
210 UNTIL ABS(DELTA) <0.001
220 T=TIME-T
230 PRINT
240 PRINT "Number ",N
250 PRINT "Root ",ROOT
260 PRINT "Iterations",count
270 PRINT "Time",T/100;" seconds"
280 PRINT''
290 UNTIL FALSE
300 @%=&90A:PRINT:REPORT:PRINT
c6p37_2


Chapter 6 [Page 39] - BRIAN

basic
90 REM BRIAN2
100 REM(C) BRIAN R SMITH 1980
110 REM ROYAL COLLEGE OF ART, LONDON
120 REM VERSION 1.0 /16 NOV 81
130 INPUT "NUMBER OF CYCLES e.g. 1 to 5 ",T
140 INPUT "BACKGROUND SYMBOL e.g. +",D$
150 INPUT "MOTIF(<20 chrs.)",A$
160 INPUT "TEXT AFTER DESIGN",B$
170 CLS
180 F=1
190 READ A,G,S,C,D,N
200 H=(D-C)/N
210 X=0
220 J=1
230 X=X+S
240 Y=SIN(X)
250 Y1=1+INT((Y-C)/H+0.5)
260 I=0
270 I=I+1
280 IF I=Y1 THEN 310
290 PRINT D$;
300 GOTO 420
310 Z=Z+F
320 IF Z>0 THEN 350
330 F=-F
340 GOTO 450
350 IF Z<=LEN(A$) THEN 390
360 F=-F
370 Z=Z-1
380 GOTO 310
390 S$=LEFT$(A$,Z)
400 PRINT S$;
410 I=I+Z
420 IF I<40 THEN 270
430 PRINT
440 GOTO 230
450 J=J+1
460 IF J>T THEN 490
470 Z=Z+1
480 GOTO 310
490 FOR K=1 TO 39
500 PRINT D$,
510 NEXT K
520 PRINT
530 PRINT B$
540 DATA 0,6.4,0.2,-1,1,20
c6p39_1


Chapter 6 [Page 40] - SINE

basic
10 REM SINE
20 REM JOHN A COLL
30 REM VERSION 2 / 16 NOV 81
50 MODE 4
60 VDU 5
70 GCOL 0,1
80 VDU 19,1,1,0,0,0
90 MOVE 16,400
100
110 FOR X=0 TO 320
120 IF X<150 THEN MOVE 4*X+16,400
130 PLOT 21,4*X+16,300*SIN(X/48)+400
140 NEXT
160 GCOL 0,1
170 A$="SINE WAVES ARE FAR MORE INTERESTING . . . .."
180
190 FOR X=1 TO 39
200 MOVE X*1280/40,300*SIN(X/6)+500
210 PRINT MID$(A$,X,1)
220 NEXT
230
240 VDU 4
250 END
c6p40_1


Chapter 6 [Page 41] - DOUBLE HEIGHT

basic
10 REM DOUBLE HEIGHT IN TELETEXT
20 WIDTH 36: MODE 7
30 VDU 28,0,23,39,0
40 write=!&20E AND &FFFF
50 DIM PROG 100
60 FOR PASS = 0 TO 1
70 P%= PROG
80 [
90 OPT PASS*3
100 CMP#&D : BNE noter
110 PHA :JSR write
120 LDA#&8D : JSR write
140 LDA#&08 : JSR write
150 LDA#&8D : JSR write
160 PLA : RTS
170 .noter CMP #&20 : BCS legal
180 JMP write
190 .legal PHA : JSR write
200 LDA #&0B : JSR write
210 LDA #&08 : JSR write
220 PLA : PHA : JSR write
230 LDA #&0A : JSR write
240 PLA : RTS
250 ]
260 NEXT PASS
270 !&20E=!&20E AND &FFFF0000 OR PROG
280 END
c6p41_1



Chapter 8 [Page 50]

basic
10 MODE 5
20 VDU 24, 0; 0; 500; 1000;
30 VDU 28,10,20,19,5
40 COLOUR 129
50 COLOUR 2
60 GCOL 0,130
70 CLS: CLG
80 FOR N = 1 TO 1000
90 PRINT "LINE"; N
100 GCOL 0, RND(4)
110 DRAW RND(500), RND(1000)
120 NEXT N
c8p50_1