100 REM ANALOG CLARK BAKER 8/72 DSAA 110 DATA "P1","P2","P3","N1","N2","N3","I4","I5","I6","J4", J5","J6" 120 DATA "A7","A8","A9","B7","B8","B9","C7","C8","C9" 130 DATA "A1","A2","A3","A4","A5","A6","B1","B2","B3","B4","B5 ,"B6" 140 DATA "C1","C2","C3","C4","C5","C6","I1","I2","I3","J1","J2","J3" 150 DATA "M1","M2","M3" 160 DATA "1","2","3" 170 DIM I$(27),M$(3),O$(21) 180 DIM A(18),B(3),C(3),I(6),J(2),M(3),O(21) 190 FOR X=1 TO 21 200 READ O$(X) 210 NEXT X 220 FOR X=1 TO 27 230 READ I$(X) 240 NEXT X 250 FOR X=1 TO 3 260 READ M$(X) 270 NEXT X 280 PRINT "ANALOG SIMULATOR" 290 REM ***NEW(** 300 FOR X=1 TO 21 310 LET O(X)=0 320 NEXT X 330 PRINT 315 PRINT "ENTER COMMAND"; 340 INPUT C$ 350 IF C$="NEW" THEN 290 360 IF C$="STOP" THEN 2390 370 IF C$="ENTER" THEN 440 380 ID C$="DELETE" THEN 440 390 IF C$="LIST" THEN 810 400 IF C$="RUN" THEN 890 420 PRINT "ILLEGAL COMMAND: ";C$ 430 GO TO 330 440 REM ***ENTER*** AND ***DELETE*** 450 PRINT "CONNECTION"; 460 INPUT O$,I$ 470 IF O$="END" THEN 330 480 FOR O=1 TO 21 490 ID O$(O)=O$ THEN 530 500 NEXT O 510 PRINT "NO OUTPUT TERMINAL: ;O$ 520 GO TO 450 530 FOR I=1 TO 27 540 IF I$(I)=I$ THEN 580 550 NEXT I 560 PRINT "NO INPUT TERMINAL: ";I$ 570 GO TO 450 580 IF C$="DELETE" THEN 760 590 IF O(O)<>I THEN 620 600 PRINT "ALREADY CONNECTED: ";O$;"-";I$ 610 GO TO 450 620 IF O(O)=0 THEN 650 630 PRINT "TERMINAL USED: ";O$ 640 GO TO 450 650 FOR O1=1 TO 21 660 IF O(O1)<>I THEN 690 670 PRINT "TERMINAL USED: ;I$ 680 GO TO 450 690 NEXT O1 700 IF O<13 THEN 740 710 IF INT((O-13)/3)<>INT((I-1)/6) THEN 740 720 PRINT "FEEDBACK LOOP: "9O$;"-";I$ 730 GO TO 450 740 LET O(O)=I 750 GO TO 450 760 IF O(O)=I THEN 790 770 PRINT "NOT CONNECTED: ";O$;"-";I$ 780 GO TO 450 790 LET O(O)=0 800 GO TO 450 810 REM ***LIST*** 815 PPINT 820 LET P=1 830 FOR X=1 TO 21 840 IF O(X)=0 THEN 870 850 PRINT P,O$(X);"-";I$(O(X)) 860 LET P=P+1 870 NEXT X 880 GO TO 330 890 REM ***RUN*** 900 LET T=0 910 LET C1=0 920 LET F1=0 930 FOR X=1 TO 21 950 IF O(X)>=25 THEN 1000 970 NEXT X 980 PRINT "NO METER, NO OUTPUT." 990 GO TO 330 1000 FOR X=1 TO 18 1010 LET A(X)=0 1020 NEXT X 1030 FOR X=1 TO 3 1040 LET E(X)=0 1042 LET I(X)=0 1044 LET I(X+3)=0 1046 LET P(X)=0 1050 LET M(X)=9999 1070 FOR Y=X*3+10 TO X*3+12 1080 IF O(Y)>18 THEN 1100 1090 LET A(O(Y))=1 1100 NEXT Y 1110 NEXT X 1120 FOR X=1 TO 3 1130 FOR Y=1 TO 3 1140 IF E(1)=Y THEN 1250 1150 IF E(2)=Y THEN 1250 1160 FOR Z=1 TO 6 1170 IF A(Y*6-6+Z)=1 THEN 1250 1180 NEXT Z 1190 LET E(X)=Y 1200 FOR Z=Y*3+10 TO Y*3+12 1210 IF O(Z)>18 THEN 1230 1220 LET A(O(Z))=0 1230 NEXT Z 1240 GO TO 1260 1250 NEXT Y 1260 NEXT X 1270 IF E(3)<>0 THEN 1310 1080 PRINT "FEEDBACK LOOP, SORRY" 1290 GO TO 330 1310 FOR X=1 TO 6 1320 IF O(X)=0 THEN 1360 1330 PRINT "CONSTANT"; 1340 INPUT C 1350 GO TO 1370 1360 NEXT X 1370 FOR X=1 TO 3 1380 FOR Y=1 TO 3 1390 IF O(X*3+9+Y)=0 THEN 1440 1400 PRINT "ADDER CONSTANT #";X; 1410 INPUT C(X) 1420 LET F1=-1 1430 GO TO 1450 1440 NEXT Y 1450 NEXT X 1460 FOR X=1 TO 2 1470 FOR Y=1 TO 3 1480 IF O(X*3+3+Y)=0 THEN 1520 1490 PRINT "INTERGRATOR CONSTANT #"9X; 1500 INPUT J(X) 1510 GO TO 1530 1520 NEXT Y 1530 NEXT X1540 IF F1=0 THEN 1570 1550 PRINT "ADDER NUMBER TO CHANGE"; 1560 INPUT C1 1570 FOR X=1 TO 12 1580 IF O(X)=0 THEN 1680 1590 LET O=O(X) 1600 IF X>3 THEN 1630 1610 LET K=C 1620 GO TO 1670 1630 IF X>6 THEN 1660 1640 LET K=-C 1650 GO TO 1670 1660 LET K=J(INT(X-7)/3+1) 1670 GOSUB 1990 1680 NEXT X 1730 PRINT "TIME STEP"; 1740 INPUT T1 1742 PRINT "STOP TIME"; 1744 INPUT T4 1746 PRINT 1750 LET T2=T1/100 1760 FOR T3=1 TO 100 1770 FMR X=1 TO 3 1780 LET A=E(X) 1790 LET B(A)=(A(A*6-5)*10+A(A*6-4)+A(A*6-3)-A(A*6-2)-A(A*6-1)-A(A*6)*10)*C(A) 1800 LET K=B(A) 1810 FOR Y=1 TO 3 1820 IF O(A*3+9+Y)=0 THEN 1850 1830 LET O=O(A(3+9+Y) 1840 GOSUB 1990 1850 NEXT Y 1860 NEXT X 1870 IF T3=1 THEN 2070 1880 FOR X=1 TO 2 1890 LET J(X)=J(X)-(I(X*3-2)*10+I(X*3-1)+I(X*3))*T2 1900 LET K=J(X) 1910 FOR Y=1 TO 3 1920 IF O(X*3+3+Y)=0 THEN 1950 1930 LET O=O(X*3+3+Y) 1940 GOSUB 1990 1950 NEXT Y 1960 NEXT X 1970 NEXT T3 1980 GO TO 1760 1990 IF O>18 THEN 2020 2000 LET A(O)=K 2010 RETURN 2020 IF O>24 THEN 2050 2030 LET I(O-18)=K 2040 RETURN 2050 LET M(O-24)=K 2060 RETURN 2070 PRINT T; 2090 LET T=T+T1 2100 FOR X=1 TO 3 2175 IF M(X)=9999 THEN 2296 2180 PRINT "","M";M$(X);" =";INT(M(X)*1000)/1000; 2296 NEXT X 2330 IF C1<>0 THEN 2360 2340 PRINT 2350 GO TO 2380 2360 PRINT TAB(65); 2370 INPUT C(C1) 2380 IF T