1 REM LOGIC V1.0.1 10/20/86 (J. Holovacs) 3 CLEAR:DEFINT A-Z 10 CLS:PRINT"* * LOGIC CIRCUIT EMULATOR * *":PRINT:INPUT "NUMBER OF NODES (LOGIC ELEMENTS)";NN:INPUT "NUMBER OF LINKS (CONNECTIONS)";NL:EX=NN*2 12 DIM ND(NN,3),LK(NL),T$(5),TT(4,2,2):RESTORE 990:FOR Q=0 TO 5:READ T$(Q):NEXT Q:FOR Q=0 TO 4:FOR R=0 TO 2:FOR Z=0 TO 2:READ TT(Q,R,Z):NEXT Z,R,Q 'INITIALIZE TRUTH TABLES 15 GOSUB 500:FOR Q=1 TO NL:LK(Q)=1:NEXT Q 'INITIALIZE LINKS 20 CLS:PRINT "* LOGIC CIRCUIT EMULATOR *":PRINT" 1) REVIEW/MODIFY CIRCUIT COMPONENT":PRINT" 2) MODIFY LINK STATUS":PRINT" 3) VIEW LINK STATUS":PRINT" 4) EXECUTE THE PRESENT CIRCUIT":PRINT" 5) CHANGE AN ELEMENT":INPUT " CHOICE";R 22 IF R<1 OR R>5 THEN 20 25 ON R GOSUB 500,600,400,50,70:GOTO 20 50 TE=0 52 CF=0:EV=0:UD=0:GOSUB 100 54 IF EV=0 OR TE>EX THEN GOSUB 400:RETURN 55 GOTO 52 70 CLS:INPUT "NODE TO CHANGE";Q:GOSUB 550:RETURN 'MODIFY A SINGLE NODE 100 REM ITERATE THRU UNTIL STABLE 105 FOR Q=1 TO NN 107 IF ND(Q,2)=0 THEN 130 'IGNORE UNDEFINED NODE 110 RS=TT(ND(Q,2)-1,LK(ND(Q,0))-1,LK(ND(Q,1))-1) 'EVALUATE A NODE 115 IF (LK(ND(Q,3))=RS) OR RS=3 THEN 127 117 EV=1:TE=TE+1 'VAL HAS BEEN UPDATED 125 LK(ND(Q,3))=RS 127 IF LK(ND(Q,3))=3 THEN UD=1'UNDEFINED ELEMENTS 130 NEXT Q:RETURN 400 REM DISPLAY RESULTS 405 CLS:IF UD THEN PRINT "* * UNDEFINED NODES * *" 406 IF TE>EX THEN PRINT "* * POTENTIALLY UNSTABLE STATE * *" 410 FOR Q=1 TO NL:PRINT"LINK--";Q;"=";MID$("FTU",LK(Q),1):IF CSRLIN=7 THEN GOSUB 490 420 NEXT Q:GOSUB 490:RETURN 490 PRINT"Hit any key";:R$=INPUT$(1):CLS:RETURN 500 REM INPUT CIRCUIT ELEMENTS 510 FOR Q=1 TO NN:GOSUB 550 519 NEXT Q:RETURN 550 REM ACCEPT/EDIT A NODE 555 CLS:PRINT @40,"NODE-";Q:PRINT " TYPE: ";T$(ND(Q,2)):PRINT"0=UNDEF 1=AND 2=OR 3=XOR 4=NAND 5=NOR":INPUT " TYPE:";ND(Q,2):IF ND(Q,2)>5 THEN 555 557 PRINT "INPUT LINKS A,B[";ND(Q,0);ND(Q,1);"]";:INPUT ND(Q,0),ND(Q,1) 560 PRINT "OUTPUT LINK[";ND(Q,3);"]";:INPUT ND(Q,3):RETURN 600 REM ASSIGN VALUES TO LINKS 610 CLS:PRINT " * INPUT LINKS *":PRINT"U)NDEFINED T)RUE F)ALSE":PRINT"[esc] LEAVES ALL REMAINING LINKS UNCHANGED" 625 FOR Q=1 TO NL:PRINT"LINK-";Q;MID$("FTU",LK(Q),1);" ";:R$=INPUT$(1):IF ASC(R$)=13 THEN PRINT:GOTO 632 627 IF ASC(R$)=27 THEN 635 630 PRINTR$:LK(Q)=INSTR(1,"FTU",R$):IF LK(Q)=0 THEN LK(Q)=1 632 NEXT Q 635 RETURN 990 DATA UNDEF,AND,OR,XOR,NAND,NOR 991 REM TRUTH TABLES FOR LOGIC FUNCTIONS: 1=F; 2=T; 3=U 992 DATA 1,1,1,1,2,3,1,3,3 993 DATA 1,2,3,2,2,2,3,2,3 994 DATA 1,2,3,2,1,3,3,3,3 995 DATA 2,2,2,2,1,3,2,3,3 996 DATA 2,1,3,1,1,1,3,1,3