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 24 FILES * 25 PRINT "PROGRAM FILE NAME"; 26 INPUT F$ 27 B$="0123456789+-* #" 28 IF F$="//STOP" THEN 9999 29 GOTO 900 31 REM ASSEMBLY LANGUAGE PROGRAM WRITTEN BY TIES INSTRUCTIONAL STAFF 32 REM OCTOBER 1970. TO BE USED IN TEACHING COMPUTER SCIENCE CONCEPTS. 33 REM A$, B$, C$ ARE STRING WORK AREAS 34 REM T$, U$ ARE THE MNEMONIC OP CODE TABLE 35 REM L$, M$, N$ ARE THE LABEL TABLE 36 REM F(I) IS THE FLAG BIT ON EACH LOCATION, I THE LOCATION COUNTER 37 REM I(I,1) IS THE OP CODE, I(I,2) IS THE OPERAND 38 REM THE EXECUTION OF THE INPUT STATEMENTS IS HANDLED IN THREE 39 REM CHAINS STPAL HANDLES FIRST PASS, STPAL1 HANDLES PASS 2 40 REM STPAL2 HANDLES THE EXECUTION OF THE TRANSLATED PROGRAM 41 REM EACH USER MUST OPEN THE FILE FILSAL TO AT LEAST 42 REM 5 SECTORS. EACH 10 LINES OF ASSEMBLY STATEMENTS USES 43 REM APPROXIMATELY ONE SECTOR, THUS 5 SECTORS ALLOWS 50 STATEMENTS 44 REM AFTER COMPLETING THE WORK FILSAL MAY BE KILLED IF ROOM IS 45 REM NEEDED IN THE STORAGE OF OTHER PROGRAMS 46 REM STPAL3 IS A MACHINE PROGRAM IF THE PROGRAM IS TO BE WRITTEN 47 REM IN THE TRANSLATED LANGUAGE 48 PRINT '10'10'10"TYPE YES IF THIS IS AN ASSEMBLY PROGRAM" 49 INPUT A$ 50 IF A$[1,3]="YES" THEN 60 51 PRINT "ENTER MACHINE LANGUAGE STATEMENTS" 52 CHAIN "STPAL3" 60 L1=108 70 L$[1,2]="SQ" 80 L$[3,4]="TR" 90 L[1]=999 100 L[2]=998 110 A8=0 140 MAT F=ZER 150 MAT E=ZER 160 S=I=0 170 E=1 180 L=3 185 PRINT '10'10 190 PRINT "BEGINNING ASSEMBLY" 191 PRINT "TYPE 0 FOR NEW PROGRAM, 1 FOR RE-ASSEMBLE OLD PROGRAM."; 192 INPUT A9 193 IF A9=0 THEN 200 194 IF A9 <> 1 THEN 191 195 READ #1;A$ 196 GOTO 220 200 IF A8 <> 0 THEN 210 204 PRINT '10"INPUT ASSEMBLY STATEMENTS" 208 A8=1 210 INPUT A$ 220 IF A$[1,1]="*" THEN 530 230 I=I+1 240 IF A$[2,2]=" " THEN 280 250 IF A$[2,2]<"0" THEN 290 260 IF A$[2,2] <= "9" THEN 290 270 GOTO 320 280 IF A$[3,3]=" " THEN 480 290 PRINT "IMPROPER LABEL. RE-INPUT STATEMENT." 300 I=I-1 310 GOTO 210 320 IF L <= L1 THEN 350 330 PRINT "LABEL TABLE FILLED, MUST RESTART" 340 GOTO 140 350 IF L<36 THEN 450 360 IF L>72 THEN 400 365 REM SECOND LABEL TABLE 370 K=L-36 380 M$[2*K-1,2*K]=A$[2,3] 390 GOTO 460 400 REM THIRD LABEL TABLE 410 K=L-72 420 N$[2*K-1,2*K]=A$[2,3] 430 GOTO 460 440 REM FIRST LABEL TABLE 450 L$[2*L-1,2*L]=A$[2,3] 460 L[L]=I 470 L=L+1 480 IF A$[5,5]="+" THEN 580 490 IF A$[5,5]="-" THEN 580 500 IF A$[5,7]="ORG" THEN 650 510 IF A$[5,7]="DS " THEN 680 520 IF A$[5,7]="END" THEN 800 530 REM PUT INPUT STATEMENT INTO FILE SAVE AREA 531 IF A9=1 THEN 545 540 PRINT #1;A$[1,10] 545 IF A$[1,1]="*" THEN 193 550 F[I]=1 560 GOTO 193 570 REM POSITIVE OR NEGATIVE CONSTANT FILL ZERO IF BLANK 580 FOR J=6 TO 10 590 IF A$[J,J]=" " THEN 610 600 GOTO 620 610 A$[J,J]="0" 620 NEXT J 630 GOTO 530 640 REM HANDLE ORG AND DS PSEUDO OPERATIONS 650 O1=I 660 I=0 670 GOTO 690 680 O1=I 690 C=N=0 692 FOR J=10 TO 8 STEP -1 693 X=0 694 FOR M=1 TO 10 695 IF A$[J,J]=" " THEN 702 696 IF A$[J,J]=B$[M,M] THEN 703 697 X=X+1 698 NEXT M 699 PRINT "ILLEGAL ITEM IN COLUMN",J,"RE-ENTER LINE" 700 PRINT A$ 701 GOTO 210 702 X=0 703 N=N+X*10^C 704 C=C+1 705 NEXT J 730 I=I+N-1 740 IF I