5  COM X[2048],Y[10],P
7  COM C$[7]
8  Y[10]=1
9  GOTO 1280
10  FILES $ASCII,ASMWRK
15  REM  HPASMB, HP 36806A, 2/74  (ASMB, PART 4 OF 4)
20  DIM A$[72],B$[72],X$[64],Y$[64]
30  L1=Y[3]
40  E=E8=L2=0
50  PRINT #2; END 
53  C9=2047
55  MAT X=ZER
60  P=L=1
70  READ #1;X$,Y$
80  ASSIGN C$,1,T
90  READ #1;A$
100  IF  END #1 THEN 1285
180  P=P+1
190  L=L+1
200  READ #1;A$
210  IF A$[1,1]="*" THEN 190
220  RESTORE 9000
230  GOSUB 7100
235  F2=F2*(F2<6)+5*(F2>5)
240  FOR K=1 TO 19
250  READ B$,I,T
260  IF A$[F3,F4]=B$ THEN 275
270  NEXT K
272  T=0
275  IF L2 THEN 287
280  E=(Y[6] AND T#1 OR Y[7] AND (T#7 OR I#5))*8
285  GOSUB 6250
287  L2=L2+1
290  IF T=3 THEN 700
300  IF T=1 OR T=2 OR T=7 OR F2=0 THEN 330
310  IF  END #2 THEN 325
320  GOTO 800
325  PRINT #2;A$[1,F2],P, END 
330  GOTO T OF 340,860,190,510,570,630,400
333  IF T=13 THEN 570
335  GOTO 180
340  GOSUB 8000
350  IF N<0 OR N>2048 THEN 190
360  P=N
370  GOTO 590
400  E=((L2>1 OR Y[6]) AND I=5)*2
410  GOSUB 6250
420  GOTO 190
510  IF I<3 THEN 180
515  FOR J=F5 TO F6
520  IF A$[J,J]#"," THEN 540
530  P=P+1
540  NEXT J
560  GOTO 180
570  GOSUB 8000
580  IF N+P>C9 OR N<0 THEN 180
585  P=P+N
590  IF E#7 THEN 190
595  GOSUB 6400
600  GOTO 190
630  P=P+2
640  GOTO 190
700  IF  END #2 THEN 720
710  GOTO 800
720  GOSUB 8000
722  IF  END #2 THEN 730
725  READ #2;B$,V
727  GOTO 725
730  PRINT #2;A$[1,F2],N, END 
740  GOTO 590
800  READ #2,1
810  READ #2;B$,V
820  IF A$[1,F2]#B$ THEN 810
830  E=1
840  GOSUB 6400
850  GOTO 330
860  IF Y[4]=0 THEN 1000
865  PRINT '10"SYMBOL TABLE"'10
870  IF  END #2 THEN 940
875  READ #2,1
880  READ #2;A$,K
890  PRINT  USING "#,5AXX";A$
894  S=0
900  B1=8
902  B2=6
905  GOSUB 6315
910  PRINT 
920  GOTO 880
940  PRINT '10
999  REM--PASS 2
1000  L=1
1002  P1=P+1
1003  P2=P1-1
1005  IF  END #2 THEN 1010
1007  B$=""
1009  GOTO 810
1010  PRINT #2;".PRNT",2046,".READ",2047,".EXIT",2045,"EXEC",2044, END 
1015  P=1
1020  READ #1,1;A$
1022  L5=L6=1
1025  L3=L4=E=0
1027  GOSUB 6000
1030  P=P+1
1040  L=L+1
1050  READ #1;A$
1052  IF A$[1,1]#"*" THEN 1070
1054  IF  NOT L1 THEN 1040
1056  B1=10
1058  B2=4
1060  K=L
1061  S=0
1062  GOSUB 6315
1066  PRINT A$
1068  GOTO 1040
1070  GOSUB 7100
1072  IF A$[1,1]<"0" THEN 1096
1074  IF A$[1,1]>"9" THEN 1096
1080  E=6
1096  RESTORE 9000
1097  L2=L3=L4=L5=1
1100  READ B$,I,T
1110  IF A$[F3,F3+2]=B$ THEN 1160
1120  IF TYP(0)<3 THEN 1100
1125  E=4
1130  GOSUB 6000
1150  GOTO 1030
1160  GOTO T OF 1170,1231,1700,1320,1400,1460,1510,1570
1165  GOTO T-8 OF 4000,4500,1800,1880,3000
1170  GOSUB 8000
1180  IF N<0 OR N>C9 THEN 1220
1190  P=N
1200  GOTO 1710
1220  E=3
1230  GOTO 1710
1231  L2=L5=0
1232  FOR P=P1-1 TO P2-1
1233  GOSUB 6000
1234  NEXT P
1235  L2=L5=1
1240  GOSUB 8000
1242  P=N
1245  L4=0
1247  Y[1]=P
1250  IF N>0 AND N <= C9 OR E THEN 1260
1255  E=3
1260  GOSUB 6000
1261  PRINT "** ";
1262  IF E8 THEN 1268
1264  PRINT " NO ";
1266  GOTO 1278
1268  B1=10
1269  S=1
1270  B2=4
1272  K=E8
1274  GOSUB 6315
1278  PRINT "ERRORS*"
1279  Y[1]=Y[1]+1
1280  CHAIN "HPASMB",100
1285  PRINT "$END ASMB XEND"
1290  GOTO 1280
1310  REM--CONSTANTS
1320  IF I>2 THEN 1340
1322  GOSUB 8000
1324  X[P+1]=I1+N
1326  IF E THEN 1334
1328  E=(I1 AND I OR N<0 AND  NOT I)*3
1330  IF E THEN 1334
1332  E=(X[P+1]<-32768. OR X[P+1]>32767)*5
1334  GOSUB 6000
1336  GOTO 1030
1340  B$=","
1342  GOSUB 8380
1344  J1=J-1
1346  S=1
1348  B$="-+"
1350  GOSUB 8340
1352  GOTO K-1 OF 1356,1358
1354  S=-1
1356  F5=F5+1
1358  B1=I
1360  GOSUB 8450
1362  IF E THEN 1366
1364  E=(N1<-32768. OR N1>32767)*5
1366  X[P+1]=N1*S
1368  GOSUB 6000
1370  L2=L5=0
1371  F5=J1+2
1372  P=P+1
1374  IF F5 <= F6 THEN 1340
1376  GOTO 1040
1399  REM--BSS
1400  GOSUB 8000
1405  GOSUB 6000
1410  IF N<0 OR P+N>C9 THEN 1435
1420  P=P+N
1430  GOTO 1040
1435  E=3
1440  GOSUB 6400
1450  GOTO 1030
1455  REM--2 WD INSTS.
1460  X[P+1]=I
1475  GOSUB 6000
1480  GOSUB 8000
1485  P=P+1
1490  X[P+1]=N+I1
1495  L2=L5=0
1497  GOSUB 6000
1500  GOTO 1030
1505  REM--LIST CONTROL
1510  L3=L4=0
1515  GOTO I OF 1550,1550,1545,1545,1553
1517  GOSUB 8000
1520  GOSUB 6000
1530  PRINT LIN(N*L1);
1540  GOTO 1040
1545  L6=I-3
1547  GOTO 1555
1550  L1=Y[3] AND I-1
1553  L3=5=I
1555  GOSUB 6000
1560  GOTO 1040
1565  REM--MEM REF
1570  GOSUB 8000
1590  X[P+1]=I+I1+N
1595  GOSUB 6000
1597  IF N>2047 OR N<0 THEN 1615
1600  GOTO 1030
1615  E=5
1620  GOSUB 6400
1630  GOTO 1030
1699  REM--EQU
1700  GOSUB 8000
1710  P0=P
1720  P=N
1730  L4=0
1740  GOSUB 6000
1750  P=P0
1760  GOTO 1040
1799  REM--I/O
1800  X[P+1]=I
1810  IF I#-31615 AND I#-32063 THEN 1840
1820  B$=A$[F4+1,F5+1]
1823  B$[LEN(B$)+1]=" "
1825  IF B$[1,3]#" C " THEN 1840
1830  X[P+1]=I+512
1840  GOSUB 6000
1850  GOTO 1030
1870  REM--ROTAT/SHIFT
1880  J1=F5+1
1890  B1=10
1895  J1=F6
1900  GOSUB 8450
1910  IF N1<17 AND N1>0 THEN 1930
1915  E=5
1920  N1=0
1930  X[P+1]=I+N1*(N1<16)
1940  GOSUB 6000
1950  GOTO 1030
3000  REM--ASC
3010  GOSUB 8000
3020  IF I1 THEN 3060
3030  GOSUB 6000
3040  P=P+N
3050  GOTO 1040
3060  IF N+P <= C9 THEN 3090
3070  E=3
3080  GOTO 3030
3090  E=0
3100  FOR J1=1 TO 2*N STEP 2
3110  J=J1+F5
3120  GOSUB 3210
3130  X[P+1]=K*256
3140  J=J+1
3150  GOSUB 3210
3160  X[P+1]=X[P+1]+K
3170  GOSUB 6000
3180  L2=L5=0
3190  P=P+1
3200  NEXT J1
3205  GOTO 1040
3210  B$=X$
3220  K=0
3230  IF A$[J,J]<Y$[1,1] THEN 3260
3240  B$=Y$
3250  K=64
3260  FOR K1=16 TO 64 STEP 16
3270  IF A$[J,J] <= B$[K1,K1] THEN 3300
3280  NEXT K1
3290  K1=64
3300  FOR K2=K1 TO K1-15 STEP -1
3310  IF A$[J,J]=B$[K2,K2] THEN 3330
3320  NEXT K2
3330  K=K2+K-1
3340  RETURN 
4000  REM--ROT/SHFT GRP
4005  I1=0
4010  RESTORE 9070
4020  N=16
4030  K=F3
4040  GOSUB 5000
4060  IF I=0 THEN 4085
4070  I1=I*64+512
4080  IF K>F4 THEN 4205
4085  RESTORE 9100
4090  N=3
4100  GOSUB 5000
4110  I1=I+I1
4120  GOTO (J#1)+2*(K>F4) OF 4160,4205,4205
4130  GOSUB 5040
4140  I1=I+I1
4150  IF K>F4 THEN 4205
4160  RESTORE 9070
4170  N=16
4180  GOSUB 5000
4190  IF I=0 THEN 4500
4200  I1=I1+I+16
4202  IF K<F4 THEN 4280
4205  X[P+1]=I1
4210  FOR J=F3 TO F4
4220  IF A$[J,J]="B" THEN 4250
4230  NEXT J
4240  GOTO 4290
4250  X[P+1]=X[P+1]+2048
4255  FOR J=F3 TO F4
4260  IF A$[J,J]="A" THEN 4280
4270  NEXT J
4275  GOTO 4290
4280  E=4
4290  GOSUB 6000
4300  GOTO 1030
4500  REM--ALT/SKP GRP
4510  RESTORE 9110
4520  N=6
4530  K=F3
4540  GOSUB 5000
4560  I1=I
4570  IF K>F4 THEN 4750
4580  IF A$[K,K+2]#"SEZ" THEN 4630
4590  I1=I1+32
4610  GOSUB 5070
4620  IF K>F4 THEN 4750
4630  RESTORE 9140
4640  N=3
4650  GOSUB 5000
4670  I1=I1+I
4680  IF K>F4 THEN 4750
4690  RESTORE 9150
4700  N=9
4710  GOSUB 5000
4730  I1=I+I1
4732  IF K>F4 THEN 4750
4734  GOSUB 5040
4736  I1=I+I1
4738  IF I=0 THEN 4280
4740  GOTO 4732
4750  X[P+1]=I1+1024
4760  GOTO 4210
5000  REM--HUNT OPS
5010  FOR J=1 TO N
5020  READ B$,I,T
5030  IF B$=A$[K,K+2] THEN 5070
5040  NEXT J
5050  I=0
5060  RETURN 
5070  K=K+4
5080  GOTO (K-1=F4)+2*(K-1>F4) OF 5100,5110
5090  IF A$[K-1,K-1]="," THEN 5110
5100  E=4
5110  RETURN 
6000  REM--PRINTOUT
6010  IF L1=0 THEN 6250
6015  IF L2=0 AND L6=0 THEN 6250
6020  K1=L2
6030  B1=10
6040  B2=4
6050  K=L
6060  S=2
6070  GOSUB 6300
6080  K1=L3
6100  B2=5
6105  B1=8
6110  S=1
6120  K=P
6130  GOSUB 6300
6140  K1=L4
6150  B2=6
6160  K=X[P+1]
6170  GOSUB 6300
6180  IF L5=0 THEN 6200
6190  PRINT A$;
6200  PRINT 
6225  S=1
6250  IF E THEN 6400
6255  RETURN 
6300  IF K1 THEN 6313
6305  PRINT SPA(B2+S);
6310  RETURN 
6313  K=K+65536.*(B1=8 AND K<0)
6315  FOR J=B2-1 TO 0 STEP -1
6320  PRINT  USING "#,D";INT(K/B1^J)-INT(K/B1^(J+1))*B1
6325  NEXT J
6330  PRINT SPA(S);
6335  RETURN 
6400  B$="DDILM OPOVSYUNNO"
6410  PRINT B$[2*E-1,2*E]" ";
6415  E8=E8+1
6420  K=L
6430  B1=10
6440  B2=4
6445  S=1
6450  GOSUB 6315
6470  PRINT A$
6475  E=0
6480  RETURN 
7000  REM--FIND FIELDS
7010  FOR J=J TO LEN(A$)
7020  IF A$[J,J]=" " THEN 7050
7030  NEXT J
7040  F=1
7050  RETURN 
7060  FOR J=J TO LEN(A$)
7070  IF A$[J,J]#" " THEN 7050
7080  NEXT J
7090  GOTO 7040
7100  J=1
7120  GOSUB 7010
7130  F2=J-1
7150  GOSUB 7060
7160  F3=J
7170  GOSUB 7010
7180  F4=J-1
7200  GOSUB 7060
7210  F5=J
7230  GOSUB 7010
7240  F6=J-1
7250  RETURN 
7999  REM--OPAND CALC
8000  I1=N=0
8002  IF F5 <= F6 THEN 8005
8003  E=3
8004  RETURN 
8005  IF A$[F5,F5]="=" THEN 8700
8010  IF F5>F6 THEN 8440
8020  S=1
8030  B$="+-,"
8040  GOSUB 8340
8050  GOTO K OF 8130,8060,8100,8140
8060  S=-1
8070  GOTO 8130
8100  IF A$[F5+1,F6]="I" THEN 8110
8105  E=3
8110  I1=-32768.
8120  RETURN 
8130  F5=F5+1
8140  GOSUB 8340
8150  IF K=4 THEN 8180
8160  E=3
8170  RETURN 
8180  B$="0123456789"
8190  GOSUB 8340
8200  IF K>10 THEN 8560
8210  B$=",+-"
8220  GOSUB 8380
8230  F7=J
8240  J=J-1
8250  B1=10
8260  IF A$[J,J]#"B" THEN 8290
8270  B1=8
8280  J=J-1
8290  J1=J
8300  GOSUB 8450
8310  N=N+N1*S
8320  F5=F7
8330  GOTO 8010
8340  FOR K=1 TO LEN(B$)
8350  IF A$[F5,F5]=B$[K,K] THEN 8370
8360  NEXT K
8370  RETURN 
8375  REM--FIND SPEC CHAR
8380  FOR J=F5 TO F6
8390  FOR K=1 TO LEN(B$)
8400  IF A$[J,J]=B$[K,K] THEN 8440
8410  NEXT K
8420  NEXT J
8430  K=0
8440  RETURN 
8445  REM--STR TO NUM
8450  B$="0123456789"
8460  N1=0
8470  FOR J=F5 TO J1
8480  FOR K=1 TO B1
8490  IF A$[J,J]=B$[K,K] THEN 8530
8500  NEXT K
8510  E=2
8520  RETURN 
8530  N1=N1*B1+K-1
8540  NEXT J
8542  IF B1=10 OR N1<32768. THEN 8550
8545  N1=N1-65536.
8550  RETURN 
8560  B$=",+-"
8570  GOSUB 8380
8572  F7=J
8574  IF J-F5<6 THEN 8584
8576  E=6
8578  J=F5+4
8584  IF A$[F5,J-1]#"*" THEN 8590
8586  N1=P
8588  GOTO 8310
8590  IF  END #2 THEN 8640
8600  READ #2,1
8610  READ #2;B$,N1
8620  IF B$#A$[F5,J-1] THEN 8610
8630  GOTO 8310
8640  E=7
8650  RETURN 
8700  IF  NOT P1 THEN 8650
8702  B$="ADAADBANDMPYLDALDBXORDIVCPACPBIOR"
8704  FOR J=1 TO 33 STEP 3
8706  IF A$[F3,F4]=B$[J,J+2] THEN 8710
8708  NEXT J
8709  E=3
8710  F5=F5+1
8715  B1=10
8720  B$="DBLA"
8725  GOSUB 8340
8730  GOTO K OF 8760,8755,8910,8940
8740  E=3
8750  RETURN 
8755  B1=8
8760  F5=F5+1
8770  S=-1
8780  IF A$[F5,F5]="-" THEN 8810
8790  S=1
8800  IF A$[F5,F5]#"+" THEN 8820
8810  F5=F5+1
8820  J1=F6
8825  GOSUB 8450
8830  N1=N1*S
8840  FOR J=P1 TO P2
8850  IF N1=X[J] THEN 8890
8860  NEXT J
8870  X[J]=N1
8880  P2=P2+1
8890  N=J-1
8900  RETURN 
8910  F5=F5+1
8915  IF A$[F5,F5]="=" THEN 8740
8920  GOSUB 8000
8925  N1=N
8930  GOTO 8840
8940  J=F5+1
8942  GOSUB 3210
8944  N1=K*256
8946  J=J+1
8950  GOSUB 3210
8960  N1=N1+K
8970  GOTO 8840
9000  DATA "ORG",0,1,"END",0,2,"EQU",0,3,"DEC",10,4,"OCT",8,4
9005  DATA "DEF",0,4,"ABS",1,4,"SUP",3,7,"UNS",4,7,"NAM",5,7
9010  DATA "BSS",0,5,"MPY",-32640,6,"DIV",-32512,6,"DLD",-30592,6
9020  DATA "DST",-30464,6,"UNL",1,7,"LST",2,7,"SPC",0,7,"ASC",0,13
9030  DATA "AND",4096,8,"XOR",8192,8,"IOR",12288,8,"JSB",6144,8
9040  DATA "JMP",10240,8,"ISZ",14336,8,"ADA",16384,8,"ADB",18432,8
9050  DATA "CPA",20480,8,"CPB",22528,8,"LDA",24576,8,"LDB",26624,8
9060  DATA "STA",28672,8,"STB",30720,8
9070  DATA "ALS",0,9,"BLS",0,9,"ARS",1,9,"BRS",1,9,"RAL",2,9,"RBL",2,9
9080  DATA "RAR",3,9,"RBR",3,9,"ALR",4,9,"BLR",4,9,"ERA",5,9,"ERB",5,9
9090  DATA "ELA",6,9,"ELB",6,9,"ALF",7,9,"BLF",7,9
9100  DATA "CLE",32,9,"SLA",8,9,"SLB",8,9
9110  DATA "CLA",256,10,"CMA",512,10,"CCA",768,10
9120  DATA "CLB",256,10,"CMB",512,10,"CCB",768,10
9130  DATA "SEZ",32,10
9140  DATA "CLE",64,10,"CME",128,10,"CCE",192,10
9150  DATA "SSA",16,10,"SLA",8,10,"INA",4,10,"SZA",2,10
9160  DATA "SSB",16,10,"SLB",8,10,"INB",4,10,"SZB",2,10
9170  DATA "RSS",1,10
9180  DATA "ASR",-32240,12,"ASL",-32752,12,"LSR",-32224,12
9190  DATA "LSL",-32736,12,"RRR",-32192,12,"RRL",-32704,12
9200  DATA "STO",-31679,11,"CLO",-31167,11,"SOC",-31615,11,"SOS",-32063,11
9210  DATA "NOP",0,11,"SWP",-32192,11
9999  END 
