100 REM SIMULATION OF CARDIAC MACHINE LANGUAGE-PDP10 VERSION 105 REM WRITTEN FOR DEC PDP-10 VERSION 17 BASIC. 110 REM M:ACCUMULATOR 111 REM P:PROGRAM OR INSTRUCTION COUNTER 112 REM C: OPCODE WITH SIGN 113 REM D: ADDRESS OPERAND-ALWAYS POSITIVE 114 REM A: NAME OF MEMORY AREA 115 REM COPYRIGHT 1972 STATE UNIVERSITY OF NEW YORK 116 REM CARDIAC WAS DESIGNED AT BELL LABORATORIES 117 REM THIS SIMULATION PROGRAMMED BY S. HOLLANDER 118 REM LATEST REVISION 9-5-72 119 DIMN3(12),N(2),A(99) 120 FORZ=1TO98 125 LETA(Z)=0 130 NEXTZ 135 LETA(0)=1 140 LETA(99)=800 160 PRINT" ","CARDIAC MACHINE LANGUAGE SIMULATION" 165 PRINT 170 PRINT"WHAT IS THE NAME OF YOUR BACKUP FILE"; 175 INPUTB$ 180 PRINT 185 REM P2:OPTIONAL CELL DEPOSIT COUNTER 190 LETP2=0 195 LETP2=P2+1 200 IFP2=99THEN190 205 PRINT"*("P2")"; 206 LETP3=0 210 INPUTC$ 211 IFC$="STEP ALL"THEN1135 215 IFC$="STEP"THEN1135 216 REM G: 1 IF IN STEP MODE 220 LETG=0 225 IFC$="H"THEN600 230 IFC$="RUN"THEN1105 235 IFC$="STOP"THEN2000 240 IFC$="CALL"THEN740 245 IFC$="SAVE"THEN700 265 REM 270 REM N(X):NUMBER X FROM INPUT 280 REM N3(X):ASCII CHAR STORAGE 285 LETN(1)=0 290 LETN(2)=0 295 IFLEN(C$)<12THEN310 300 PRINT"?TYPE H FOR HELP" 305 GOTO205 310 CHANGE C$TON3 315 IFN3(0)=0THEN205 320 REM M1: IF N(X) IS TO BE NEGATIVE, M1 WILL BE 1 325 LETM1=0 330 REM X:CURRENT# (1 OR 2) 335 LETX=1 340 FORZ=1TON3(0) 345 REM SPACE 350 IFN3(Z)=32THEN476 355 REM + 360 IFN3(Z)=43THEN476 365 REM : 370 IFN3(Z)=58THEN445 375 REM - 380 IFN3(Z)<>45 THEN420 385 REM ITS NEGATIVE, SET M1 390 LETM1=1 395 GOTO476 410 REM DIGIT??(NO MEANS ILLEGAL) 420 IFABS(N3(Z)-52.5)<=4.5THEN430 425 IF(Z-1)+(N3(Z)-69)=0THEN476 426 GOTO300 430 LETN(X)=N(X)*10 435 LETN(X)=N(X)+N3(Z)-48 440 GOTO476 445 IFM1=0THEN470 450 REM MAINTAIN MINUS SIGN 455 LETN(X)=N(X)*-1 460 LETM1=0 465 REM INC NUMBER COUNT. - MAX OF 2 NUMBERS 470 LETX=X+1 475 IFX=3THEN300 476 NEXTZ 477 REM 480 IFM1=0THEN490 485 LETN(X)=N(X)*-1 490 IFN3(1)=69THEN850 495 REM HOW MANY NUMBERS TYPED? 500 IFX=2THEN525 505 IFABS(N(1))>999THEN550 510 LETA(P2)=N(1) 515 GOTO195 520 REM LEGAL ADDR? 525 IFABS(N(1)-49.5)<=48.5THEN545 530 PRINT"BAD ADDRESS" 535 PRINT 540 GOTO205 545 IFABS(N(2))<999THEN560 550 PRINT"BAD CONTENTS" 555 GOTO535 560 LETP2=N(1) 565 LETA(P2)=N(2) 570 GOTO195 575 REM 600 PRINT 605 PRINT"YOU MAY TYPE ONE OF THE FOLLOWING COMMANDS:" 610 PRINT 615 PRINT"RUN","TO RUN THE PROGRAM NOW IN MEMORY" 620 PRINT"E","TO EXAMINE THE CONTENTS OF MEMORY" 625 PRINT"STEP","TO STEP THROUGH MEMORY ONE INSTRUCTION AT A TIME" 627 PRINT"STEP ALL","SAME AS STEP BUT CONTINUES AFTER INSTRUCTION" 630 PRINT"CALL","TO CALL A SAVED PROGRAM INTO MEMORY" 635 PRINT"SAVE","TO SAVE MEMORY UNDER A FILE NAME ON DISK" 640 PRINT"STOP","TO STOP THIS SIMULATOR" 645 PRINT"H","TO GET THIS MESSAGE" 650 PRINT 660 GOTO205 670 REM 695 REM SAVE 700 GOSUB 800 705 SCRATCH :2 706 REM THE FOLLOWING IS SLOW AND INEFFICIENT, BUT...WHAT COULD I DO? 710 FORZ=1TO98 715 WRITE:2:A(Z) 720 NEXTZ 725 GOTO205 730 REM 735 REM CALL 740 GOSUB800 745 RESTORE:2 750 FORZ=1TO98 755 READ:2:N 760 IFABS(N)<=999THEN775 765 PRINT"BAD FILE" 770 GOTO205 775 LETA(Z)=N 780 NEXTZ 785 GOTO205 790 REM 795 REM NAME SUBROUTINE 800 PRINT"WHAT IS THE NAME OF THE FILE"; 805 INPUTD$ 810 FILE2:D$+"%" 815 RETURN 820 REM 850 LETC2=N(1) 855 LETC1=N(2) 860 IFC1>0THEN875 865 LETC1=C2 870 REM C2: LOWER LIMIT, C1: UPPER LIMIT 875 IFC10THEN1340 1140 PRINT"INPUT THE STARTING ADDRESS"; 1145 INPUTP 1150 LETM=0 1155 LETV=0 1160 IFP<0THEN1205 1165 IFP>99THEN1205 1170 IFP<>INT(P)THEN1205 1175 IFG>0THEN1210 1180 IFC$="RUN"THEN1210 1185 LETG=1 1195 PRINT" CA PC I AC" 1200 GOTO 1215 1205 PRINT"BAD STARTING ADDRESS" 1206 GOTO205 1210 PRINT"START" 1215 PRINT 1220 GOTO1340 1225 IFC$="RUN"THEN1340 1230 LETL=0 1235 LETR=N1 1240 GOSUB1410 1245 LETR=P 1255 GOSUB1410 1260 LETR=R1 1265 GOSUB1410 1270 LETR=M 1275 ONSGN(R)+2GOTO1280,1295,1305 1280 PRINT" -"; 1285 LETR=ABS(R) 1290 GOTO1310 1295 PRINT" 0000"; 1300 GOTO1330 1305 PRINT" +"; 1310 LETN=INT(R/1E3+.0005) 1315 PRINTCHR$(48+N); 1320 LETR=R-N*1E3 1325 GOSUB1455 1330 PRINT 1331 IFP3=1THEN205 1332 IFC$="STEP ALL"THEN1340 1335 GOTO205 1336 REM BEGIN EXECUTION CYCLE HERE 1340 LETR1=A(P) 1345 LETN1=P 1349 REM M(AC) CAN BE 4 DIGITS AT MOST 1350 LETM=M-SGN(M)*INT(ABS(M*1E-4))*1E4 1355 IFR1>=0THEN1375 1360 PRINT"BAD INSTRUCTION";INT(R*.01);"AT LOCATION";P 1365 PRINT 1370 GOTO1940 1375 LETC=INT(R1*.01+.005) 1380 LETD=R1-C*100 1385 LETP=P+1 1390 ONC+1GOTO1500,1600,1630,1660,1700,1750,1800,1850,1880,1920 1400 REM PRINTNUMBER SUBROUTINE 1405 REM L: TAB MARKER 1410 PRINTTAB(L); 1415 LETL=L+5 1420 ONSGN(R)+2GOTO1425,1440,1450 1425 PRINT"-"; 1430 LETR=ABS(R) 1435 GOTO1455 1440 PRINT" 000"; 1445 RETURN 1450 PRINT"+"; 1455 LETR=INT(R+.005) 1460 LETN=INT(R/100+.005) 1465 PRINTCHR$(N+48); 1470 LETR=R-N*100 1475 LETN=INT(R/10+.005) 1480 PRINTCHR$(N+48); 1485 PRINTCHR$(48+R-N*10); 1490 RETURN 1495 REM 1496 REM 1500 REM OP CODE ZERO - INPUT 1505 INPUTN 1510 IFABS(N)>999THEN1520 1515 IFN=INT(N)THEN1530 1520 PRINT" BAD INPUT VALUE - TRY AGAIN" 1525 GOTO1505 1530 IFN=0THEN1930 1535 IFD=0THEN1545 1540 IFD<>99THEN1560 1545 LETZ$="INPUT" 1550 PRINT"ATTEMPT TO "Z$" INTO LOCATION";D;"AT";P-1 1555 GOTO1940 1560 LETA(D)=N 1565 GOTO1225 1570 REM 1600 REM OPCODE ONE - CLEAR AND ADD 1605 LETM=A(D) 1610 GOTO1225 1615 REM 1630 REM OPCODE TWO - ADD 1635 LETM=M+A(D) 1640 GOTO1225 1645 REM 1660 REM OPCODE THREE - TEST AC CONTENTS 1665 IFM>=0THEN1225 1670 LETP=D 1675 GOTO1225 1680 REM 1700 REM OPCODE FOUR - SHIFT L THEN R 1705 LETL=INT(D/10+.5) 1710 LETR=D-L*10 1715 LETM=M*10^L 1720 LETM=M-SGN(M)*INT(ABS(M*1E-4))*1E4 1725 LETM=SGN(M)*INT(ABS(M/10^R)+.00005) 1730 GOTO1225 1735 REM 1750 REM OPCODE FIVE - OUTPUT 1755 LETL=0 1760 LETR=A(D) 1765 GOSUB1410 1770 PRINT 1775 GOTO 1225 1780 REM 1800 REM OPCODE SIX - STORE 1805 IF(D-99)*D<0THEN1820 1810 LETZ$="STORE" 1815 GOTO1550 1820 LETA(D)=M-SGN(M)*INT(ABS(M*1E-3))*1E3 1825 GOTO1225 1830 REM 1850 REM OPCODE SEVEN - SUBTRACT 1855 LETM=M-A(D) 1860 GOTO1225 1865 REM 1880 REM OPCODE EIGHT - JUMP 1885 LETA(99)=800+P 1890 LETP=D 1895 GOTO1225 1900 REM 1920 REM OPCODE NINE - HALT OR TEST AC OVERFLOW 1925 IFD>0THEN1955 1930 PRINT 1935 PRINT"HALT AT LOCATION";P-1 1940 LETP2=1 1942 LETP3=1 1943 LETG=0 1945 PRINT" CA PC I AC" 1950 GOTO1230 1955 IFABS(M)<1E3THEN1225 1960 LETP=D 1965 GOTO1225 1970 REM 2000 END