1000REM ALFRED ROBOT TEST PROGRAMME 5/2/86 1010REM VERSION C2.5, BBC Basic, for user port to parallel interface and colour monitor 1020REM COPYRIGHT ROBOT CITY TECHNOLOGY LTD. 1986 1030REM AUTHOR A.J. CAVES 1040 1050DIM PV%(7):DIM OV%(7):DIMS%(8,50) 1060P%=&FE60:PROCenable(0) 1070*FX229,1 1080*FX12,15 1090MO%=1:SN%=1 1100*FX229,1 1110VDU23,1,0;0;0;0; 1120*FX4,1 1130 1140PROCinit 1150PROCwelcome 1160PROCprog 1170*FX151,98,0 1180*FX4,0 1190VDU 23,1,1;0;0;0; 1200PROCenable(0) 1210CLS 1220*FX12,0 1230*FX229,0 1240END 1250 1260DEFPROCmanual 1270PROCman_disp 1280 REPEAT 1290PROCkeya 1300KEY%=ASC(K$) 1310PRINT TAB(21,24);SN%;SPC(16); 1320IF KEY%=9 PROCmovement:GOTO1390 1330IF KEY%>135 AND KEY%<140 PROCstep:GOTO1390 1340IF K$="E" THEN PROCenable(1):PRINT TAB(0,1);H7$ 1350IF K$="F" THEN PROCenable(0):PRINT TAB(0,1);H6$ 1360IF K$="S" THEN PROCsize:GOTO1390 1370IF K$="C" THEN PROCcent 1380IF KEY%=135 THEN PROCstore 1390 UNTIL KEY%=13 1400PROCenable(0) 1410ENDPROC 1420 1430DEF PROCinit 1440*FX151,98,255 1450*FX151,96,0 1460FOR J%=0 TO 7 1470PV%(J%)=128 1480OV%(J%)=234 1490NEXT 1500FORJ%=0 TO 7 1510PROCdata(J%,8,OV%(J%)) 1520PROCdata(J%,0,PV%(J%)) 1530NEXT 1540FORJ%=1 TO 50:S%(8,J%)=-1:FORK%=0 TO 7:S%(K%,J%)=128:NEXT:NEXT 1550M1$="Waist [" 1560M2$="Upper Arm ^" 1570M3$="Forearm ^" 1580M4$="Wrist Rotate [" 1590M5$="Wrist Up/Dn ^" 1600M6$="Gripper ^" 1610 1620 1630P4$="…C Centralise (Position=128)" 1640P5$="ƒRET Return to Menu" 1650P6$="‚COPY Store sequence" 1660H2$="†Movement" 1670H3$="†Position" 1680H4$="†No." 1690H5$="…STEP SIZE= 'S' to change" 1700H6$="ƒˆFROZEN 'E' to energise servos" 1710H7$="…ENERGISED 'F' to freeze servos " 1720ENDPROC 1730 1740DEFPROCdata(cn%,off%,d%) 1750Un%=d% DIV 16 1760Ln%=d% MOD 16 1770x%=128+cn%+off% 1780?P%=128+Un% 1790?P%=144+Un% 1800?P%=144+Ln% 1810?P%=128+Ln% 1820?P%=x% 1830?P%=x%+32 1840FOR j%=1 TO 38:NEXT 1850?P%=x% 1860ENDPROC 1870 1880DEFPROCenable(en) 1890?P%=128+en 1900?P%=192+en 1910?P%=128+en 1920ENDPROC 1930 1940DEFPROCwelcome 1950CLS:PRINT''' 1960VDU141:PRINTTAB(10);"ƒWELCOME TO" 1970VDU141:PRINTTAB(10);"ƒWELCOME TO" 1980PRINT''' 1990VDU141,136:PRINTTAB(4);"†ROBOT CITY TECHNOLOGY" 2000VDU141,136:PRINTTAB(4);"†ROBOT CITY TECHNOLOGY" 2010PRINT''''''" Press any key to continue" 2020PROCkeya 2030ENDPROC 2040 2050DEFPROCmenu 2060CLS:PROCenable(0) 2070VDU141:PRINTTAB(14);"†MENU" 2080VDU141:PRINTTAB(14);"†MENU" 2090PRINT''" ‚1. Manual Mode" 2100 PRINT'" ‚2. Run a Sequence" 2110PRINT'" ‚3. Save a Sequence" 2120PRINT'" ‚4. Load a Sequence" 2130PRINT'" ‚5. Delete Sequence" 2140PRINT'" ‚6. Exit" 2150 PRINT''" " 2160PRINT'" Press Number Required" 2170REPEAT 2180PROCkeya:M%=VAL(K$) 2190UNTIL M%>0 AND M%<10 2200ENDPROC 2210 2220DEFPROCprog 2230REPEAT 2240PROCmenu 2250IF M%=1 THEN PROCmanual 2260IF M%=2 THEN PROCrunseq 2270IF M%=3 THEN PROCsave 2280IF M%=4 THEN PROCload 2290IF M%=5 THEN PROCdelete 2300*FX15,1 2310UNTIL M%=6 2320ENDPROC 2330 2340REM Manual Mode Display Form 2350 2360DEFPROCman_disp 2370CLS 2380VDU31,1,3:PRINTH2$ 2390VDU31,18,3:PRINT H3$;" ";H4$ 2400PRINT'TAB(2);M1$ 2410PRINTTAB(2);M2$ 2420PRINTTAB(2);M3$ 2430PRINTTAB(2);M5$ 2440PRINTTAB(2);M4$ 2450PRINTTAB(2);M6$ 2460FOR J=1 TO 6:VDU31,30,4+J,48+J,31,16,4+J,135,156,31,25,4+J,135,156,31,32,4+J,135,156:NEXT 2470FOR J=1 TO 6:VDU31,21,4+J:PRINT RIGHT$(" "+STR$(PV%(J)),3):NEXT 2480PRINT TAB(0,1);H6$ 2490PRINT TAB(0,15);H5$ 2500PRINT'P4$''P5$'''P6$ 2510SS%=0:PROCsize 2520MO%=6:PROCmovement 2530PRINT TAB(0,24);"‚Current Sequence No.";SN%;TAB(25,24);" "; 2540ENDPROC 2550 2560DEFPROCmovement 2570VDU31,0,MO%+4,32,32 2580IFMO%<4 OR MO%>4 THEN VDU31,19,MO%+4,32,32,31,28,MO%+4,32,32 2590MO%=MO%+1:IF MO%=7 THEN MO%=1 2600VDU31,0,MO%+4,157,132,31,19,MO%+4,157,132,31,28,MO%+4,157,132 2610IF MO%=4 THEN VDU31,19,MO%+5,157,132,31,28,MO%+5,157,132 2620IFMO%=6 THEN VDU31,19,MO%+2,32,32,31,28,MO%+2,32,32 2630ENDPROC 2640 2650DEFPROCstep 2660CN%=MO% 2670IF MO%=4 OR MO%=5 THEN V1%=PV%(4) ELSE V1%=PV%(CN%) 2680V2%=PV%(5) 2690IF MO%=1 AND KEY%=136 THEN V1%=V1%+SS% 2700IF MO%=1 AND KEY%=137 THEN V1%=V1%-SS% 2710IF MO%=2 AND KEY%=138 THEN V1%=V1%+SS% 2720IF MO%=2 AND KEY%=139 THEN V1%=V1%-SS% 2730IF MO%=3 AND KEY%=138 THEN V1%=V1%-SS% 2740IF MO%=3 AND KEY%=139 THEN V1%=V1%+SS% 2750IF MO%=4 AND KEY%=138 THEN V1%=V1%-SS%:V2%=V2%+SS% 2760IF MO%=4 AND KEY%=139 THEN V1%=V1%+SS%:V2%=V2%-SS% 2770IF MO%=5 AND KEY%=136 THEN V1%=V1%-SS%:V2%=V2%-SS% 2780IF MO%=5 AND KEY%=137 THEN V1%=V1%+SS%:V2%=V2%+SS% 2790IF MO%=6 AND KEY%=138 THEN V1%=V1%+SS% 2800IF MO%=6 AND KEY%=139 THEN V1%=V1%-SS% 2810IFV1%<0 OR V1%>255 THEN ENDPROC 2820IF V2%<0 OR V2%>255 ENDPROC 2830IF MO%=4 AND V1%-V2%>96 THEN VDU7:ENDPROC 2840IF MO%=4 AND V2%-V1%>96 THEN VDU7:ENDPROC 2850IF MO%=5 AND V1%-V2%>96 THEN VDU7:ENDPROC 2860IF MO%=5 AND V2%-V1%>96 THEN VDU7:ENDPROC 2870IF MO%=5 THEN PV%(4)=V1% ELSE PV%(CN%)=V1% 2880PV%(5)=V2% 2890PROCstep_disp 2900ENDPROC 2910 2920DEFPROCstep_disp 2930D1$=RIGHT$(" "+STR$(V1%),3) 2940IF MO%=5 THEN VDU31,21,8 ELSE VDU31,21,MO%+4 2950PRINTD1$ 2960D2$=RIGHT$(" "+STR$(V2%),3) 2970IF MO%=4 OR MO%=5 VDU31,21,9:PRINT D2$ 2980PROCdata(CN%,0,PV%(CN%)) 2990IFMO%=4 THEN PROCdata(5,0,PV%(5)) 3000IFMO%=5 THEN PROCdata(4,0,PV%(4)) 3010ENDPROC 3020 3030DEFPROCsize 3040SS%=SS%+1 3050IF SS%=10 THEN SS%=1 3060PRINT TAB(11,15);SS% 3070ENDPROC 3080 3090DEFPROCcent 3100CN%=MO%:V1%=128:V2%=128 3110IF MO%=4 OR MO%=5 THEN PV%(4)=V1%:PV%(5)=V2% ELSE PV%(CN%)=V1% 3120PROCstep_disp 3130ENDPROC 3140 3150DEFPROCstore 3160IFSN%=51 THEN VDU7:ENDPROC 3170PRINT TAB(21,24);SN%; 3180PRINT TAB(0,22);"‚0]9 ˆSeconds Pause " 3190PROCkeya:PA$=K$:IF PA$<"0" OR PA$>"9" GOTO 3180 3200PRINT TAB(24,24);"‚Pause ";PA$;" secs."; 3210FOR J%=0 TO 7 3220S%(J%,SN%)=PV%(J%) 3230NEXT 3240S%(8,SN%)=VAL(PA$) 3250SN%=SN%+1 3260PRINT TAB(0,22);P6$ 3270ENDPROC 3280 3290DEFPROCrunseq 3300CLS:PRINT TAB(5,0);"†RUN SEQUENCE"''' 3310PRINT TAB(0,3); 3320PRINT TAB(0,3)" ‚1. Single Step" 3330PRINT TAB(0,5)" ‚2. Single Cycle" 3340PRINT TAB(0,7)" ‚3. Continuous Cycle" 3350PRINT''"ƒRET Return to Menu" 3360PRINT TAB(0,13);"‚1,2 or 3?" 3370PROCkeya:SK$=K$:SK%=VAL(SK$) 3380IF INSTR("123"+CHR$(13),SK$)=0 THEN:PROCnew:GOTO 3370 3390IF ASC(SK$)=13 THEN FOR J%=1 TO 6:PV%=(J%)=128:PROCdata(J%,0,128):NEXT:PROCenable(1):TIME=0:REPEAT UNTIL TIME=500:ENDPROC 3400PRINT TAB(0,SK%*2+1);"ˆ†" 3410 T1%=6:K%=1 3420PROCenable(1) 3430PRINT TAB(0,13);SPC(30) 3440REPEAT 3450PROCnew 3460FOR J%=0 TO 7 3470PROCdata(J%,0,S%(J%,K%)) 3480NEXT 3490SK%=INKEY(0) 3500T1%=S%(8,K%) 3510PRINT TAB(0,16);"‚Sequence No. ";K%;" " 3520PRINT TAB(0,19);SPC(36) 3530@%=&305 3540PRINT TAB(0,19);"†",;:FOR J=1 TO 6:PRINTS%(J,K%),;:NEXT:PRINT S%(8,K%); 3550@%=10 3560K%=K%+1 3570IF SK$="1" THEN PRINT TAB(0,13);"†Press space bar for next step or"'"…'E' to edit":REPEAT:PROCkeya:SK%=ASC(K$):UNTIL SK%=32 OR SK%=13 OR SK%=69:GOTO 3590 3580TIME=0:REPEAT UNTIL TIME>T1%*100 3590UNTIL K%=50 OR S%(8,K%)=-1 OR SK%=13 OR SK%=69 3600IF SK$="1" AND SK%=69 THEN SN%=K%-1:FORJ%=1 TO 6:PV%(J%)=S%(J%,SN%):NEXT:PROCmanual 3610IF SK%=13 GOTO 3300 3620IF SK$="3" THEN GOTO 3410 3630GOTO 3300 3640ENDPROC 3650 3660DEFPROCsave 3670CLS:PRINT" † SAVE A SEQUENCE"'' 3680PROCfilename 3690PRINT''"ƒPress 'RETURN' to exit or"'"‚any other key to SAVE" 3700PROCkeya:IF ASC(K$)=13 ENDPROC 3710ONERROR GOTO 4200 3720s=OPENOUT fn$ 3730FOR J%=1 TO 50 3740FOR K%=0 TO 8 3750PRINT#s,S%(K%,J%) 3760NEXT:NEXT 3770CLOSE#s 3780ENDPROC 3790 3800DEFPROCload 3810CLS:PRINT'" † LOAD A SEQUENCE"'' 3820PROCfilename 3830PRINT''"ƒPress 'RETURN' to exit or"'"‚any other key to LOAD" 3840PROCkeya:IF ASC(K$)=13 ENDPROC 3850ONERROR GOTO 4150 3860s=OPENIN fn$ 3870J%=0:REPEAT:J%=J%+1 3880FOR K%=0 TO 8 3890INPUT#s,S%(K%,J%) 3900NEXT:UNTIL EOF#(s) OR S%(8,J%)=-1 3910CLOSE#s 3920SN%=J% 3930ENDPROC 3940 3950DEFPROCfilename 3960*. 3970fn$="" 3980PRINT''"…Enter file name - "; 3990PROCkeya:F$=K$ 4000IF F$=" "THEN 3990 4010IF ASC(F$)=13 THEN ENDPROC 4020IF ASC(F$)=127 THEN PRINT F$;:fn$=LEFT$(fn$,LEN(fn$)-1):GOTO3990 4030IF ASC(F$)<48 OR ASC(F$)>122 THEN 3990 4040fn$=fn$+F$:PRINT F$; 4050IF LEN(fn$)<7 GOTO 3990 4060ENDPROC 4070 4080DEFPROCdelete 4090CLS:PRINT"† DELETE CURRENT SEQUENCE"'' 4100PRINT"ƒPress 'RETURN' to exit or"'"‚any other key to DELETE" 4110PROCkeya:IF ASC(K$)=13 ENDPROC 4120SN%=1:FOR J%=1 TO 50:S%(8,J%)=-1:FORK%=0 TO 7:S%(K%,J%)=128:NEXT:NEXT:VDU7 4130ENDPROC 4140 4150ONERROR OFF 4160PRINT'"File not found"'"Press any key to continue" 4170PROCkeya 4180GOTO1160 4190 4200ONERROR OFF 4210PRINT'"File locked"'"Press any key to continue" 4220GOTO 4170 4230 4240DEFPROCnew 4250 FOR J%=0 TO 7 4260 PROCdata(J%,8,OV%(J%)) 4270 NEXT 4280ENDPROC 4290 4300DEFPROCkeya 4310*FX15,1 4320REPEAT:PROCnew:K$=INKEY$(0):UNTIL K$>"" 4330ENDPROC