0 'PROGRAM NAME: BYTEIT.BA 1 'Version 1.2 - 11/25/85 2 'This is an 8085/8080 Assembler for the Model 100/200. This program is 3 'offered under the shareware concept. Please feel free to use it, and pass 4 'it on to friends. If you find it useful, please send $10.00 to: 5 ' Paul Papanek Stork Don't Pa..Panic Software 6 ' E19431 Church Rd. Aniwa, WI 54408 8 GOTO90 9 ' *** INTERPRET MNEMONIC *** 10 K=INSTR("DS DB DW EQUORGEND",FD$(1)) 11 IFKMOD3=1THENK=K/3:BT=0:RETURN 12 K=INSTR("DCRINRDADDCXINXPOPPUSDAXTAXMOVRSTHLTNOPPCHRETSPHRIMSIM",FD$(1)) 13 IFKMOD3=1THENK=K/3:BT=1:RETURN 14 K=INSTR("ADDADCSUBSBBANAXRAORACMPRLCRRCRALRARDAACMASTCCMCRNZRZ RNCRC RPORPERP RM XTHXCHDI EI ",FD$(1)) 15 IFKMOD3=1THENK=(K/3)+18:BT=1:RETURN 16 K=INSTR("IN OUTMVIADIACISUISBIANIXRIORICPI",FD$(1)) 17 IFKMOD3=1THENK=K/3:BT=2:RETURN 18 K=INSTR("CALJMPLXISHLLHLSTALDAJNZJZ JNCJC JPOJPEJP JM CNZCZ CNCCC CPOCPECP CM ",FD$(1)) 19 IFKMOD3=1THENK=K/3:BT=3:RETURN 20 ER=10:GOTO1500 29 ' *** GET COMMAND FIELDS *** 30 I=1:LMT=LEN(LN$):FD$(0)="":FD$(1)="":FD$(2)="":J=0 31 ST$="' :;"+CHR$(9) 32 IFI>LMTTHEN39ELSECH$=MID$(LN$,I,1):I=I+1 33 ONINSTR(ST$,CH$)GOTO35,36,36,39,36 34 FD$(J)=FD$(J)+CH$:GOTO32 35 FD$(J)=FD$(J)+CH$:IFST$="'"THEN31ELSEST$="'":GOTO32 36 J=J+1:IFJ=3THEN39 37 CH$=MID$(LN$,I,1):I=I+1 38 IFCH$=" "ORCH$=CHR$(9)THEN37ELSE33 39 IFLEN(FD$(1))=3ORLEN(FD$(1))=0THEN41 40 IFLEN(FD$(1))=2THENFD$(1)=FD$(1)+" "ELSEIFRIGHT$(FD$(1),1)="X"THENFD$(1)=RIGHT$(FD$(1),3)ELSEFD$(1)=LEFT$(FD$(1),3) 41 RETURN 45 ' *** CONVERT 16 BIT DATA *** 46 HI=AD!/256:LO=AD!-(HI*256):IFHI>255THENER=5:GOTO1500ELSERETURN 90 MAXFILES=1:CLS:PRINT@8,"**********************":PRINT@48,"* 80c85 ASSEMBLER *":PRINT@88,"**********************";:PRINT@285,CHR$(171)" - Paul Papanek Stork, 1985"; 93 PRINT@165,"ENTER STARTING ADDRESS: ";:LINEINPUTX$:X!=VAL(X$):CLEAR1600,X! 100 DEFINTA-Z:DIMLB$(250),HI(250),LO(250):CLS:FILES:PRINT:LINEINPUT"Name of File to Assemble: ";F$:IFRIGHT$(F$,3)<>".DO"THENF$=F$+".DO"ELSEF$=F$ 109 ' *** FIRST PASS *** 110 OPENF$FORINPUTAS1:CLS:PRINT@96,"PASS #1":PRINT@208,"PLEASE WAIT NOW WORKING"; 120 IFLN!>=MAXRAMTHENER=11:GOTO1500ELSEPRINT@0,LN!:IFNOTEOF(1)THENLINEINPUT#1,LN$:GOSUB30ELSE200 130 IFFD$(0)=""THEN140ELSELB$(LB)=FD$(0):AD!=LN!:GOSUB45:HI(LB)=HI:LO(LB)=LO:LB=LB+1 140 IFFD$(1)=""THENGOTO120ELSEGOSUB10 150 IFBT>0THENLN!=LN!+BT:GOTO120 151 IFK>4ANDFD$(0)<>""THENER=8:GOTO1500 152 ONKGOTO170,170,180,190,200 160 OP$=FD$(2):GOSUB1200:LN!=LN!+(HI*256)+LO:GOTO120 170 GOSUB1300:LN!=LN!+(BT*K):GOTO120 180 IFFD$(0)=""THENER=9:GOTO1500ELSEOP$=FD$(2):GOSUB1200:HI(LB-1)=HI:LO(LB-1)=LO:GOTO120 190 OP$=FD$(2):GOSUB1200:LN!=(HI*256)+LO:ST!=LN!:GOTO120 199 ' *** SECOND PASS *** 200 LN!=0:CLOSE:OPENF$FORINPUTAS1:PRINT@102,"2" 210 PRINT@33,LN!:IFNOTEOF(1)THENLINEINPUT#1,LN$:GOSUB30ELSEGOTO1620 215 IFFD$(1)=""THENGOTO210ELSEGOSUB10 220 K=K+1:ONBTGOTO300,400,500 221 ONKGOTO223,224,225,210,227,228 222 ER=6:GOTO1500 223 OP$=FD$(2):GOSUB1200:LN!=LN!+(HI*256)+LO:GOTO210 224 GOSUB250:GOSUB1200:POKELN!,LO:LN!=LN!+1:IFFD$(2)=""THEN210ELSE224 225 GOSUB250:GOSUB1200:POKELN!,LO:POKELN!+1,HI:LN!=LN!+2:IFFD$(2)=""THEN210ELSE225 227 OP$=FD$(2):GOSUB1200:LN!=(HI*256)+LO:GOTO210 228 IFFD$(2)=""THENEX!=ST!ELSEOP$=FD$(2):GOSUB1200:EX!=(HI*256)+LO 229 GOTO1620 250 IFLEFT$(FD$(2),1)<>"'"THEN260ELSEIFLEN(FD$(2))>3THENOP$=LEFT$(FD$(2),2)+"'":FD$(2)="'"+MID$(FD$(2),3):RETURNELSEOP$=FD$(2):FD$(2)="":RETURN 260 I=INSTR(FD$(2),","):IFITHENOP$=LEFT$(FD$(2),I-1):FD$(2)=MID$(FD$(2),I+1):RETURNELSEOP$=FD$(2):FD$(2)="":RETURN 300 ONKGOTO350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367 310 K=K-19:IFK<8THENGOSUB1400:OP=128+(K*8)+RG:GOTO370 320 K=K-8:IFK<8THENOP=7+(K*8):GOTO370 330 K=K-8:IFK<8THENOP=192+(K*8):GOTO370 340 K=K-8:OP=227+(K*8):GOTO370 350 GOSUB1400:OP=5+(RG*8):GOTO370 351 GOSUB1400:OP=4+(RG*8):GOTO370 352 GOSUB1400:OP=9+(RG*8):GOTO370 353 GOSUB1400:OP=11+(RG*8):GOTO370 354 GOSUB1400:OP=3+(RG*8):GOTO370 355 GOSUB1400:OP=193+(RG*8):GOTO370 356 GOSUB1400:OP=197+(RG*8):GOTO370 357 GOSUB1400:OP=10+(RG*8):GOTO370 358 GOSUB1400:OP=2+(RG*8):GOTO370 359 GOSUB1400:OP=64+(RG*8):GOSUB1400:OP=OP+RG:GOTO370 360 OP$=FD$(2):GOSUB1200:OP=199+(LO*8):GOTO370 361 OP=118:GOTO370 362 OP=0:GOTO370 363 OP=233:GOTO370 364 OP=201:GOTO370 365 OP=249:GOTO370 366 OP=32:GOTO370 367 OP=48 370 POKELN!,OP:LN!=LN!+1:GOTO210 400 ONKGOTO420,430,440 410 K=K-4:OP=198+(K*8):GOTO450 420 OP=219:GOTO450 430 OP=211:GOTO450 440 GOSUB1400:OP=6+(RG*8) 450 POKELN!,OP:OP$=FD$(2):GOSUB1200:POKELN!+1,LO:LN!=LN!+2:GOTO210 500 ONKGOTO540,550,560 510 K=K-4:IFK<4THENOP=34+(8*K):GOTO570 520 K=K-4:IFK<8THENOP=194+(8*K):GOTO570 530 K=K-8:OP=196+(K*8):GOTO570 540 OP=205:GOTO570 550 OP=195:GOTO570 560 GOSUB1400:OP=1+(RG*8) 570 POKELN!,OP:OP$=FD$(2):GOSUB1200:POKELN!+1,LO:POKELN!+2,HI:LN!=LN!+3:GOTO210 1199 ' *** INTERPRET DATA FIELD *** 1200 I=0:LMT=LEN(OP$):IFLMT=0THEN222ELSEAD!=0:CH$=LEFT$(OP$,1):IFCH$<"0"ORCH$>"9"THEN1250 1210 CH$=RIGHT$(OP$,1):IFCH$>="0"ANDCH$=<"9"THENLMT=LMT+1:CH$="D" 1212 IFCH$<>"H"THEN1220ELSEFORI=1TOLMT-1:CH$=MID$(OP$,LMT-I,1):IFCH$>"/"ANDCH$<":"THENAD!=AD!+(VAL(CH$)*(16^(I-1)))ELSEIFCH$>"@"ANDCH$<"G"THENAD!=AD!+((ASC(CH$)-55)*(16^(I-1)))ELSEER=2:GOTO1500 1214 NEXT:GOSUB46:RETURN 1220 IFCH$="Q"ORCH$="O"THENN$="8":N=8 1230 IFCH$="B"THENN$="2":N=2 1240 IFCH$="D"THENN$=":":N=10 1242 FORI=1TOLMT-1:CH$=MID$(OP$,LMT-I,1):IFCH$>"/"ANDCH$"'"THEN1255ELSELO=ASC(MID$(OP$,2,1)):HI=0:RETURN 1255 IFCH$<>"$"THEN1260ELSEAD!=LN!+(VAL(RIGHT$(OP$,LMT-1))):GOSUB46:RETURN 1260 IFI>LBTHENER=1:GOTO1500ELSEIFLB$(I)<>OP$THENI=I+1:GOTO1260ELSEGOTO1270 1270 HI=HI(I):LO=LO(I):RETURN 1299 ' *** COUNT ADDRESS FIELD SIZE *** 1300 IFLEFT$(FD$(2),1)="'"THENBT=LEN(FD$(2))-2:RETURN 1310 BT=1:FORI=1TOLEN(FD$(2)) 1320 CH$=MID$(FD$(2),I,1) 1330 IFCH$=","THENBT=BT+1 1340 NEXT:RETURN 1399 ' *** REGISTER SUBROUTINE *** 1400 IFFD$(2)=""THEN222 1420 GOSUB260:RG=INSTR("BCDEHLMASP",LEFT$(OP$,1))-1:IFRG>7THENRG=6 1430 IFRG<0THENER=3:GOTO1500ELSERETURN 1499 ' *** ERROR HANDLING ROUTINE *** 1500 CLS:PRINTLN$:PRINT:PRINT"ERROR #"ER"- ";:FORI=1TOER:READER$:NEXT:PRINTER$ 1510 DATA Undefined Label,Illegal Character,Illegal Format,,Illegal Value,Missing Operand,,Illegal Label,Missing Label,Undefined Operation Code,Not Enough Free Memory 1610 BEEP:CLOSE:END 1620 CLOSE:CLS:I=INSTR(F$,":"):F$=MID$(F$,I+1,LEN(F$)-(3+I)):PRINT@50,"FILE NAME: "F$".CO":PRINT@90,"START ADDRESS: "ST!:PRINT@130,"ENDING ADDRESS:"LN!:PRINT@170,"EXECUTION ADRS:"EX!:PRINT@210,"PROGRAM LENGTH:"(LN!-ST!):BEEP 1630 SAVEMF$,ST!,LN!-1,EX!:END