1 MAXFILES=3 5 CLEAR2000 6 ONERRORGOTO3220 10 DEFINTX,P 20 DEFSTRF,H,L,R,E 30 DEFSNGT,V 40 DIMH(6),R1(7),R2(3),R3(3),R4(87),LBL(256),V(256) 50 XX=0:PC=1:LC!=59:E1="":LN="00001":XA=2 55 GOSUB9950 60 CLS 70 INPUT"ENTER INPUT FILE NAME: ";FI 80 INPUT"ENTER LISTING FILE NAME: ";FL 85 INPUT"DO YOU WANT AND OBJECT OUTPUT (Y/N):";FO:IFFO="Y"THENFO="OBJT"ELSEFO="" 87 P=0 88 CLS:PRINT@137,"PASS ";P+1;:XX=0:AD=0 90 OPEN FI FORINPUTAS1 100 IFP<>0THENOPENFLFOROUTPUTAS3 105 IF FO<>""ANDP<>0THENOPENFOFOROUTPUTAS2 110 H(0)="":H(1)="":H(2)="":H(3)="":H(4)="":H(5)="":H(6)="" 115 E1="" 120 O1=0:O2=0:O3=0 130 GOSUB1000 140 IFF1<>""THENT=AC:GOSUB1350 145 IFF1="REM"THENGOTO3230 150 GOSUB1450 160 ONINT((XZ-1)/10)+1GOTO170,180,190,200,210,220,230,235,240 170 ONXZGOSUB2000,2036,2072,2112,2112,2144,2144,2180,2180,2196:GOTO110 180 ONXZ-10GOSUB2208,2208,2224,2236,2248,2248,2264,2264,2264,2264:GOTO110 190 ONXZ-20GOSUB2264,2264,2264,2264,2264,2280,2292,2292,2292,2292:GOTO110 200 ONXZ-30GOSUB2292,2292,2292,2292,2292,2308,2308,2308,2308,2308:GOTO110 210 ONXZ-40GOSUB2308,2308,2308,2308,2324,2390,2390,2416,2416,2416:GOTO110 220 ONXZ-50GOSUB2416,2416,2416,2416,2416,2432,2432,2432,2432,2432:GOTO110 230 ONXZ-60GOSUB2432,2432,2432,2452,2452,2452,2452,2452,2452,2452:GOTO110 235 ONXZ-70GOSUB2452,2464,2464,2476,2476,2488,2500,2512,2512,2524:GOTO110 240 ONXZ-80GOSUB3102,3046,3066,3000,3012,3090,3115,1662:GOTO110 1000 F1="":F2="":F3="":F4="":F5="":F6="":X=1:NS=0 1016 IFEOF(1)THENCLOSE:GOTO3200 1018 F=INPUT$(1,1) 1019 IFX=2ANDF1="REM"THENX=6:NS=0 1020 IFF=CHR$(13)THENRETURN 1021 IFF2="STR"ANDX=3ANDF<>"."THEN1056 1022 IFF=CHR$(10)THEN1016 1024 IFNSAND(F=" "ORF=CHR$(9))THEN1016 1028 NS=0 1032 IFX=6THENF6=F6+F:GOTO1016 1036 IFF=" "ORF=","ORF=CHR$(9)THENX=X+1:NS=1:GOTO1016 1040 IFF="."THENX=6:GOTO1032 1042 IFF="+"ORF="-"THENX=5 1044 ONXGOTO1048,1052,1056,1060,1064 1048 F1=F1+F:GOTO1016 1052 F2=F2+F:GOTO1016 1056 F3=F3+F:GOTO1016 1060 F4=F4+F:GOTO1016 1064 F5=F5+F:GOTO1016 1100 H(X)="" 1114 IFX1=2ANDT>255THENE1="*W*" 1116 X2=T/16 1120 T=T-X2*16 1124 IFT<10THENH(X)=CHR$(T+48)+H(X)ELSE H(X)=CHR$(T+55)+H(X) 1128 IFX2>0THENT=X2:GOTO1116 1132 GOSUB1150 1136 RETURN 1150 IFLEN(H(X))>=X1THENRETURN 1166 H(X)="0"+H(X) 1170 GOTO1150 1200 FORX2=0TO7 1216 IFH(4)=R1(X2)THENRETURN 1220 NEXT:GOTO1248 1224 FORX2=0TO3 1228 IFH(4)=R2(X2)THENRETURN 1232 NEXT:GOTO1248 1236 FORX2=0TO3 1240 IFH(4)=R3(X2)THENRETURN 1244 NEXT 1248 X2=-1 1250 E1="*I*" 1252 RETURN 1260 T=0 1276 FORX=1TOLEN(H(5)) 1280 F=MID$(H(5),X,1) 1284 IFASC(F)>47ANDASC(F)<58THENT1=ASC(F)-48ELSET1=ASC(F)-55 1288 T=T*T2+T1 1292 NEXT 1294 IF T>65535THENE1="*W*" 1296 RETURN 1300 T2=0 1311 IFLEFT$(H(5),1)="$"THENT=AC+VAL(F5):RETURN 1312 IFRIGHT$(H(5),1)="O"THENT2=8 1316 IFRIGHT$(H(5),1)="B"THENT2=2 1320 IFRIGHT$(H(5),1)="D"THENT2=10 1322 IFRIGHT$(H(5),1)="H"THENT2=16 1324 IFT2<>0THENH(5)=LEFT$(H(5),LEN(H(5))-1):GOSUB1260:RETURN 1326 GOSUB1400:T=T+VAL(F5):RETURN 1332 H(5)=MID$(H(5),2,LEN(H(5)-1)):GOTO1324 1350 IFXX=256THENCLS:PRINT@125,"SYMBOL TABLE OVERFLOW ":GOTO3208 1363 IFXX=0THEN1366 1364 X9=1:H(5)=F1:GOSUB1412:X9=0:IFXZ<>XXTHENE1="*D*":RETURN 1366 LBL(XX)=F1 1370 V(XX)=T 1374 XX=XX+1 1378 RETURN 1400 T=0 1404 IFP=1THENPT=XX:XX=PX 1412 FORXZ=0TOXX-1 1416 IFLBL(XZ)=H(5)THENT=V(XZ):IFX9THENRETURNELSEGOTO1423 1420 NEXT 1421 IFX9THENX9=0:RETURN 1422 E1="*U*":T=0 1423 IFP=1THENXX=PT 1424 RETURN 1450 FORXZ=1TO87 1466 IFF2=R4(XZ)THENRETURN 1470 NEXT 1475 E1="*I*":AI=3:H(2)="00":H(3)="00":H(1)="00" 1480 RETURN 1500 IFP=0THENRETURN 1502 IFLC!=59THENGOSUB1600 1514 IFAD=1THENH(0)=" " 1516 PRINT#3,USING" \ \ \ \ \ \ \\ \\ \\ \ \ \ \ ";E1;LN;H(0);H(1);H(2);H(3);F1;F2; 1520 IFF4=""THENPRINT#3,F3;F5;CHR$(137);F6ELSEPRINT#3,F3;",";F4;F5;CHR$(137);F6 1522 IFFO<>""THENGOSUB1850 1524 AD=0:LC!=LC!+1 1528 T=VAL(LN):T=T+1:LN=STR$(T) 1530 LN=RIGHT$(LN,LEN(LN)-1) 1532 IFLEN(LN)=5THENRETURNELSEFORX=LEN(LN)+1TO5:LN="0"+LN:NEXT 1536 RETURN 1600 PRINT#3,CHR$(12);CHR$(27);"e0";CHR$(20);"*** ";TIME$; " ";DATE$;" ***";CHR$(27);"f0#";"PAGE ";PC 1616 PRINT #3,"ERROR LINE NO. ADDR CODE LABEL MNEMONIC COMMENTS" 1620 PRINT #3,STRING$(80,"*"):PRINT#3,:PRINT #3, 1624 PC=PC+1:LC!=5 1628 RETURN 1662 X=0:T=AC:X1=4:GOSUB1100 1666 X1=2:AC=AC+AI:GOSUB1500 1670 RETURN 1700 IFX2=-1THENO2=0:E1="*I*"ELSEO2=X2*8 1716 RETURN 1750 H(5)=F3:GOSUB1300 1766 X=5:X1=4:GOSUB1100:X1=2 1770 H(2)=RIGHT$(H(5),2):H(3)=LEFT$(H(5),2) 1774 AI=3:GOSUB1662:RETURN 1790 AI=1:GOTO1662 1794 AI=2:GOTO1662 1800 T=O1ORO2ORO3 1816 X=1:GOSUB1100 1820 RETURN 1850 IFH(1)=""THENRETURN 1854 FORXZ=0TO3:IFH(XZ)<>""THENPRINT#2,H(XZ);",";:NEXT 1858 RETURN 2000 O1=64 2008 H(4)=F3:GOSUB1200 2012 GOSUB1700 2016 H(4)=F4:GOSUB1200 2020 IFX2=-1THENO3=0:E1="*I*"ELSEO3=X2 2024 GOSUB1800 2028 GOTO1790 2036 O1=6 2044 H(4)=F3:GOSUB1200 2048 GOSUB1700 2052 X=1:T=O1ORO2:GOSUB1100 2056 H(5)=F4:GOSUB1300 2060 X=2:GOSUB1100 2064 GOTO1794 2072 H(4)=F3:GOSUB1224 2080 O1=1 2084 GOSUB1700:O2=O2*2 2086 GOSUB1800 2088 H(5)=F4:GOSUB1300 2092 GOSUB1766 2108 RETURN 2112 O1=2 2120 H(4)=F3:GOSUB1224 2124 IFX2=-1ORX2>1THENO2=0:E1="*I*"ELSEO2=X2*16 2128 O3=(XZ-4)*8 2132 GOSUB1800 2136 GOTO1790 2144 IFXZ=6THENO1=50ELSEO1=58 2152 GOSUB1800 2156 GOSUB1750 2176 RETURN 2180 O1=34:O2=(XZ-8)*8 2188 GOSUB1800 2192 GOSUB1750:RETURN 2196 O1=235:GOSUB1800 2204 GOTO1790 2208 O1=193:O3=(XZ-11)*4:H(4)=F3:GOSUB1236 2216 GOSUB1700:O2=O2*2:GOSUB1800 2220 GOTO1790 2224 O1=227:GOSUB1800 2232 GOTO1790 2236 O1=249:GOSUB1800 2244 GOTO1790 2248 O1=3:O3=(XZ-15)*8:H(4)=F3:GOSUB1224:GOSUB1700:O2=O2*2 2256 GOSUB1800 2260 GOTO1790 2264 IFXZ=17THENO1=195ELSEO1=194:O2=(XZ-18)*8 2272 GOSUB1800:GOSUB1750 2276 RETURN 2280 O1=233:GOSUB1800 2288 GOTO1790 2292 IFXZ=27THENO1=205ELSEO1=196:O2=(XZ-28)*8 2300 GOSUB1800 2304 GOSUB1750:RETURN 2308 IFXZ=36THENO1=201ELSEO1=192:O2=(XZ-37)*8 2316 GOSUB1800 2320 GOTO1790 2324 O1=199:H(5)=F3+"H":GOSUB 1300:IFT/8>7THENO2=0:E1="*I*"ELSEO2=T 2332 GOSUB1800 2336 GOTO1790 2390 O1=4:O3=XZ-46:H(4)=F3:GOSUB1200:O2=X2*8 2398 GOSUB1800 2402 GOTO1790 2416 O1=128:O2=(XZ-48)*8:H(4)=F3:GOSUB1200:O3=X2 2424 GOSUB1800 2428 GOTO1790 2432 O1=198:O2=(XZ-56)*8:GOSUB1800 2440 H(5)=F3:GOSUB1300 2444 IFT>255THENE1="*W*" 2448 GOTO2060 2452 O1=7:O2=(XZ-64)*8:GOSUB1800 2460 GOTO1790 2464 O1=211:O2=(XZ-72)*8:GOSUB1800 2472 GOTO2440 2476 O1=243:O2=(XZ-74)*8:GOSUB1800 2484 GOTO1790 2488 O1=0:GOSUB1800 2496 GOTO1790 2500 O1=118:GOSUB1800 2508 GOTO1790 2512 O1=32:O2=(XZ-78)*16:GOSUB1800 2520 GOTO1790 2524 O1=9:H(4)=F3:GOSUB 1224:O2=X2*16 2532 GOSUB1800 2536 GOTO1790 3000 IFFO<>""ANDP<>0THENPRINT#2,"END"; 3001 AD=1:GOSUB 1662:IFP=0THENCLOSE1:PX=XX:P=1:GOTO88 3003 CLS:PRINT@131,"ASSEMBLE COMPLETE"; 3004 END 3012 H(5)=F3:GOSUB1300 3020 AC=T 3024 IFF1<>""THENV(XX-1)=T 3038 AI=0:GOSUB1662 3042 RETURN 3046 H(5)=F3:GOSUB1300 3054 IFT>255THENAI=2ELSEAI=1 3058 X=1:X1=AI*2:GOSUB1100 3060 IFX1=4THENH(2)=LEFT$(H(1),2):H(1)=RIGHT$(H(1),2) 3062 GOSUB1662:X1=2:RETURN 3066 H(5)=F3:GOSUB1300 3070 IFF1<>""THENV(XX-1)=TELSEE1="*I*":T=0 3074 X=5:X1=4:GOSUB1100:X1=2:H(2)=RIGHT$(H(5),2):H(3)=LEFT$(H(5),2) 3082 AD=1:AI=0:GOSUB1662 3086 RETURN 3090 H(5)=F3:GOSUB1300 3098 AI=T:GOSUB1662:RETURN 3102 H(5)=F3:GOSUB1300 3110 F1=F2:GOSUB1350 3114 GOTO3074 3115 H(5)=F3:F3="": 3124 O1=ASC(H(5)):H(5)=RIGHT$(H(5),LEN(H(5))-1):F3=CHR$(O1) 3128 GOSUB1800:GOSUB1790:F2="":F6="":F1="" 3132 IFH(5)=""THENRETURN 3136 GOTO3124 3200 CLS:PRINT@130,"NO END STATEMENT IN FILE"; 3208 PRINT@175,"ABORT ASSEMBLE"; 3212 CLOSE:END 3220 CLS:PRINT@120,"UNRECOVERABLE ERROR IN THE BASIC PROGRAM";:GOTO3208 3230 IFP=0THENGOTO110 3232 IFLC!=59THENGOSUB1600 3234 PRINT#3,F1;" ";F6 3238 LC!=LC!+1:GOTO110 9950 FORX=0TO7:READR1(X):NEXT 9966 FORX=0TO3:READR2(X):NEXT 9970 FORX=0TO3:READR3(X):NEXT 9974 FORX=1TO87:READR4(X):NEXT 9978 RETURN 10000 DATA "B","C","D","E","H","L","M","A" 10004 DATA "B","D","H","SP" 10008 DATA "B","D","H","PSW" 10012 DATA "MOV","MVI","LXI","STAX","LDAX","STA","LDA","SHLD","LHLD","XCHG","POP","PUSH","XTHL","SPHL","INX","DCX","JMP" 10014 DATA"JNZ","JZ","JNC","JC","JPO","JPE","JP","JM","PCHL","CALL","CNZ","CZ","CNC","CC" 10016 DATA "CPO","CPE","CP","CM","RET","RNZ","RZ","RNC","RC","RPO","RPE","RP","RM","RST","INR","DCR","ADD","ADC","SUB" 10018 DATA"SBB","ANA","XRA","ORA","CMP","ADI","ACI","SUI","SBI","ANI","XRI" 10020 DATA "ORI","CPI","RLC","RRC","RAL","RAR","DAA","CMA","STC","CMC","OUT","IN","DI","EI","NOP","HLT","RIM","SIM","DAD" 10022 DATA"ENTRY","DATA","EQU","END","ORG","RES","STR"