Zero2 Microrobot

Zero2 software

   'zerol  bas'  - ZX Spectrum
   ---------------------------

Variables
	r0 used to pass routine number
	a1, a2, a3 used for input parameters
	o1, o2, o3 used for output parameters
	a8, b8, c8, k8, n8 used as scratch variables

9000  REM 	define subroutines
9002  RESTORE 9050
9004  READ init, border, ornge, call, move, fd, bk, lt,
	rt, lfd, rfd, lbk, rbk, continue, setscal, setspd, 
	padj, setpen, pu, pd, pu1, pd1, setspp, setleds, 
	sethorn, fuzz, setsens, sethole, setline, setbump
9006  READ peek, error, stepos, scale, spd, spp, leds, horn,
        sensor, sensp, hole, line, bump
9008  REM 	define variables
9010  READ usrcall, routine, argl, arg2, arg3, err, mask, inv, 
	off, on
9022  REM 	define adjust
9024  READ adjust
9026  REM 	variables for adjust
9028  READ zdstart,disfac,rotfac
9050  DATA 9100, 9102, 9104, 9106, 9108, 9110, 9112, 9114,
           9116, 9118, 9120, 9122, 9124, 9126, 9128, 9130,
           9132, 9136, 9138, 9140, 9142, 9144, 9146, 9148,
           9150, 9160, 9152, 9154, 9156, 9158
9052  DATA 9180, 9182, 9184, 9186, 9188, 9190, 9192, 9194,
           9196, 9198, 9200, 9202, 9204
9054  DATA 64966, 64981, 64982, 64983, 64984, 64976, 7, 0, 0, 1 
9056  DATA 9212, 64958, 64978, 64977 
9070  REM 	go check for additional subroutines 
9080  GO SUB 9300 
9090  REM 	fall through to INIT

9099  REM 	commands
9100  LET mask=PEEK 64980:
        POKE routine,0:
	RANDOMIZE USR usrcall:
        RETURN

9102  IF al>7 THEN GO TO ornge
9103  POKE 23750,al:
        RETURN

9104  PRINT "OUT OF RANGE":
        STOP
9106  POKE routine,rO:
        POKE argl,al:
        RANDOMIZE USR usrcall:
        RETURN

9108  LET a2=INT (al/256):
        LET a1=a1-a2*256:
        POKE arg2,a2:
        GO TO call

9110  LET r0=l: GO TO move
9112  LET r0=2: GO TO move
9114  LET r0=3: GO TO move
9116  LET r0=4: GO TO move
9118  LET r0=5: GO TO move
9120  LET r0=6: GO TO move
9122  LET r0=7: GO TO move
9124  LET r0=8: GO TO move

9126  LET r0=22: LET al=0:  GO TO call

9128  LET r0=18: GO TO call
9130  LET r0=16: GO TO call

9132  LET r0 = 9: LET al=0
9133  GO SUB call: 
	PAUSE 10:
	IF INKEY$="" THEN  GO TO 9133
9134  RETURN

9136  PRINT "PRESS ANY KEY WHEN PEN AT TOP":
	GO TO padj

9138  LET r0=12: LET al=0:  GO TO call
9140  LET r0=13: LET al=0:  GO TO call
9142  LET r0=10: LET al=0:  GO TO call
9144  LET r0=ll: LET al=0:  GO TO call

9146  LET r0=17: GO TO call
9148  LET r0=14: GO TO call
9150  LET r0=15: GO TO call

9152  POKE arg3,inv:
        POKE arg2,a2:
	LET rO=18:  GO SUB call: 
        GO SUB error:  
        IF ol=3 THEN  GO TO ornge
9153  RETURN

9154  LET a1=0: GO TO setsens

9156  LET al=1:  
	IF a2<>off THEN LET a2=mask
9157    GO TO setsens

9158  LET al=2: GO TO setsens

9160  LET a8=al:   
        LET al=l:  GO SUB setleds:
        LET al=l:  GO SUB sethorn:
        PAUSE 10:
        FOR i=1 TO a8:
          LET al=3: 
          GO SUB setleds:
          LET al=3:
          GO SUB sethorn:
          PAUSE 25:
         NEXT i:
        LET al=0: 
        GO SUB setleds:
        LET al=0: GO SUB sethorn: 
        RETURN 

9170  REM 	functions
9180  POKE routine,r0:
        RANDOMIZE USR usrcall:
        LET ol=PEEK (arg1):
        RETURN

9182  LET ol=PEEK (err):    RETURN

9184  LET r0=42: GO SUB peek:  
	LET ol=ol+256*PEEK (arg2):
	RETURN

9186  LET r0=48: GO TO peek 
9188  LET r0=46: GO TO peek 
9190  LET r0=47: GO TO peek 
9192  LET r0=44: GO TO peek 
9194  LET r0=45: GO TO peek

9196  POKE argl,al:
        LET r0=39: GO SUB peek:
        LET a8=o 1: GO SUB error:
        IF o1=3 THEN  GO TO ornge
9197    LET O1=a8:  
	RETURN

9198  GO SUB peek:  
	LET o2=PEEK (arg2):
	RETURN 

9200  LET r0=31: GO TO sensp
9202  LET r0=30: GO TO sensp
9204  LET r0=32: GO TO sensp

9210  REM 	adjust routine
9212  CLS: 
	PRINT "Centre robot on A4 sheet of paper
	, then press ""s"" to start or ""Q"" to stop"
9214  LET a$=INKEY$: IF a$="Q" OR a$="q" THEN  RETURN

9216  LET al=2: 
        GO SUB fd:
        GO SUB pd:
        LET al=200:  GO SUB fd:
        LET al=90:   GO SUB rt:
        LET al=200:  GO SUB fd:
        GO SUB pu:
        LET al=100:  GO SUB fd
9218  CLS: 
        PRINT "Enter the length in mm of each side and the 
	distance between the two end points":
        PRINT
9220  INPUT "Side 1 :";b8:
        INPUT "Side 2 :";c8:
        INPUT "Ends   :";a8
9222  LET k8=PEEK disfac:
        LET n8=(b8+c8)/2:  
        LET k8=INT (200*k8/n8 + .5)
9224  POKE disfac,k8: PRINT "Distance factor is";k8
9226  LET k8=PEEK rotfac:
        LET n8=180-(ACS (b8*b8 + c8*c8 - a8*a8)/(2*b8*c8)):
        LET k8=INT (90*k8/n8 +.5)
9228  POKE rotfac,k8:  PRINT "Rotation factor is";k8 
9230  RETURN

9300  REM 	additional subroutines from file zero2 go here 
9399  RETURN