10 COM B$[15],L$[72],M$[72],N$[72] 11 COM I,E,L[108],F[200],E[100],I[200,2] 12 COM L,X,Y,Z 20 COM A$[72] 21 COM F$[6],F1 22 DIM T$[72],U$[72],C$[72] 30 FILES * 31 ASSIGN F$,1,F3 40 I=1 45 E1=0 49 READ #1,1 50 M=29 60 MAT I=ZER 70 T$="REALOAADDSUBMULDVQSTOPRTBONHLTUCBPSCDVRNOP" 80 U$="ZACBOZBOPPADBSARTCSCRSNRSNLRALPCLENDORGDS DSA" 90 REM RE ENTRY FOR GETTING NEXT STATEMENT 100 READ #1;A$ 110 F[I]=1 120 FOR J=1 TO 14 121 C$[J,J]=" " 122 NEXT J 130 GOTO 1070 830 STOP 840 REM GOSUB SUBROUTINE TO FIND VALUE OF N FROM STRING 850 C=F=N=0 860 FOR J=Y TO Z STEP -1 870 X=0 880 FOR G=1 TO 10 890 IF A$[J,J]=" " THEN 960 900 IF A$[J,J]=B$[G,G] THEN 970 910 X=X+1 920 NEXT G 930 PRINT "ILLEGAL ITEM COLUMN",J,"RE-ENTER LINE" 940 F=1 950 GOTO 1000 960 X=0 970 N=N+X*10^C 980 C=C+1 990 NEXT J 1000 RETURN 1070 IF A$[1,1] <> "*" THEN 1100 1080 PRINT A$ 1090 GOTO 90 1100 IF A$[5,5]="+" THEN 1230 1110 IF A$[5,5]="-" THEN 1230 1120 FOR J=1 TO M 1130 IF J>14 THEN 1160 1140 IF A$[5,7]=T$[3*J-2,3*J] THEN 1360 1150 GOTO 1180 1160 K=J-14 1170 IF A$[5,7]=U$[3*K-2,3*K] THEN 1360 1180 NEXT J 1190 PRINT "NEXT STATEMENT HAS INVALID OP CODE. RE-INPUT LINE." 1200 GOTO 1770 1220 REM HANDLE POS OR NEGATIVE CONSTANTS 1230 Y=10 1240 Z=6 1250 GOSUB 850 1260 IF F=1 THEN 1760 1270 IF A$[5,5]="+" THEN 1300 1280 F[I]=4 1290 GOTO 1310 1300 F[I]=5 1310 C$[5,5]=A$[5,5] 1320 I[I,1]=INT(N/1000) 1330 I[I,2]=N-I[I,1]*1000 1340 GOTO 1880 1350 REM OP CODE IS NOW J-1 1360 K=J-1 1370 IF K=M-4 THEN 1430 1375 IF K=M-1 THEN 1405 1380 IF K>M-4 THEN 1460 1390 I[I,1]=K 1400 GOTO 1480 1404 REM DSA SET OP CODE PORTION TO 00 1405 I[I,1]=0 1406 GOTO 1480 1410 REM OP CODE END SET LOCATION TO 000 1430 I[I,1]=-2 1440 GOTO 1480 1450 REM OP CODE ORG OR DS SET OPCODE TO -1 1460 I[I,1]=-1 1470 REM CHECK COL9-10 FOR LEGAL LABLE 1480 IF A$[9,9] <= "9" THEN 1690 1490 FOR J=1 TO L-1 1500 IF J>36 THEN 1540 1510 REM USE FIRST LABEL TABLE 1520 IF A$[9,10]=L$[2*J-1,2*J] THEN 1660 1530 GOTO 1600 1540 IF J>72 THEN 1590 1550 REM USE SECOND LABEL TABLE 1560 IF A$[9,10]=M$[2*(J-36)-1,2*(J-36)] THEN 1660 1570 GOTO 1600 1580 REM USE THIRD LABEL TABLE 1590 IF A$[9,10]=N$[2*(J-72)-1,2*(J-72)] THEN 1660 1600 NEXT J 1610 PRINT "NEXT STATEMENT HAS INVALID OPERAND. RE-INPUT LINE." 1620 GOTO 1770 1650 REM J IS THE LABEL LOCATION L(J) IS STATEMENT LOCATION 1660 I[I,2]=L[J] 1670 GOTO 1800 1680 REM IMMEDIATE INSTRUCTION COLUMNS 9-10 NUMERIC 1690 F[I]=3 1700 Y=10 1710 Z=8 1720 GOSUB 850 1730 IF F=1 THEN 1760 1740 I[I,2]=N 1750 GOTO 1800 1760 PRINT "1234567890" 1770 PRINT A$ 1780 INPUT A$ 1790 GOTO 1070 1800 IF A$[8,8]="*" THEN 1820 1810 GOTO 1880 1820 IF F[I]=1 THEN 1850 1830 IF F[I]=3 THEN 1870 1840 GOTO 1880 1850 F[I]=2 1860 GOTO 1880 1870 F[I]=1 1880 IF I[I,1] <> -2 THEN 1900 1885 X=Y=Z=0 1888 GOTO 1930 1890 REM STWEIP ADDRESS AND CONVERT TO CHARACTERS 1900 X=INT(I/100) 1910 Y=INT((I-X*100)/10) 1920 Z=I-X*100-Y*10 1930 C$[1,1]=B$[X+1,X+1] 1940 C$[2,2]=B$[Y+1,Y+1] 1950 C$[3,3]=B$[Z+1,Z+1] 1959 W=25 1960 FOR J=15 TO W 1961 IF A$[J-14,J-14] <> " " THEN 1964 1962 C$[J,J]=" " 1963 GOTO 1965 1964 C$[J,J]=A$[J-14,J-14] 1965 NEXT J 1970 IF I[I,1]=-1 THEN 2030 1990 IF F[I]=2 THEN 2130 2000 IF F[I]=3 THEN 2160 2010 GOTO 2170 2020 REM DS OR ORG OPCODE=13 2030 I[I,1]=13 2035 F[I]=1 2040 IF K=M-3 THEN 2070 2050 I=I+I[I,2] 2060 GOTO 2290 2070 I=I[I,2] 2080 C$[1,3]=" " 2090 GOTO 2290 2120 REM INDIRECT * CODE IN COL 5 2130 C$[5,5]="*" 2140 GOTO 2170 2150 REM IMMEDIATE # CODE IN COL 5 2160 IF ((K=9 OR K=14) OR K=17) OR (K=19 OR K=20) THEN 2170 2165 C$[5,5]="#" 2170 X=INT(I[I,2]/100) 2180 Y=INT((I[I,2]-X*100)/10) 2190 Z=I[I,2]-X*100-Y*10 2200 C$[8,8]=B$[X+1,X+1] 2210 C$[9,9]=B$[Y+1,Y+1] 2220 C$[10,10]=B$[Z+1,Z+1] 2230 IF I[I,1]=-2 THEN 2320 2240 X=INT(I[I,1]/10) 2250 Y=I[I,1]-X*10 2260 C$[6,6]=B$[X+1,X+1] 2270 C$[7,7]=B$[Y+1,Y+1] 2280 I=I+1 2290 PRINT C$ 2300 GOTO 90 2310 REM END STATEMENT READ END OF SECOND PASS 2320 C$[6,6]="1" 2330 C$[7,7]="0" 2340 PRINT C$ 2420 IF E1=0 THEN 2450 2430 CHAIN "STPAL" 2440 REM GOOD ASSEMBLY TRY EXECUTION 2450 PRINT "ASSEMBLY COMPLETE, BEGINNING EXECUTION" 2451 PRINT '10'10'10 2460 I=I[I,2] 2470 CHAIN "STPAL2" 2480 END