0 'BYTEIT.BA Paul Papanek Stork Version 1.2 - 11/25/85 1 'CLUB 100 Library - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE 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 7 GOTO35 8 ' *** INTERPRET MNEMONIC *** 9 K=INSTR("DS DB DW EQUORGEND",FD$(1)) 10 IFKMOD3=1THENK=K/3:BT=0:RETURN 11 K=INSTR("DCRINRDADDCXINXPOPPUSDAXTAXMOVRSTHLTNOPPCHRETSPHRIMSIM",FD$(1)) 12 IFKMOD3=1THENK=K/3:BT=1:RETURN 13 K=INSTR("ADDADCSUBSBBANAXRAORACMPRLCRRCRALRARDAACMASTCCMCRNZRZ RNCRC RPORPERP RM XTHXCHDI EI ",FD$(1)) 14 IFKMOD3=1THENK=(K/3)+18:BT=1:RETURN 15 K=INSTR("IN OUTMVIADIACISUISBIANIXRIORICPI",FD$(1)) 16 IFKMOD3=1THENK=K/3:BT=2:RETURN 17 K=INSTR("CALJMPLXISHLLHLSTALDAJNZJZ JNCJC JPOJPEJP JM CNZCZ CNCCC CPOCPECP CM ",FD$(1)) 18 IFKMOD3=1THENK=K/3:BT=3:RETURN 19 ER=10:GOTO128 20 ' *** GET COMMAND FIELDS *** 21 I=1:LMT=LEN(LN$):FD$(0)="":FD$(1)="":FD$(2)="":J=0 22 ST$="' :;"+CHR$(9) 23 IFI>LMTTHEN30ELSECH$=MID$(LN$,I,1):I=I+1 24 ONINSTR(ST$,CH$)GOTO26,27,27,30,27 25 FD$(J)=FD$(J)+CH$:GOTO23 26 FD$(J)=FD$(J)+CH$:IFST$="'"THEN22ELSEST$="'":GOTO23 27 J=J+1:IFJ=3THEN30 28 CH$=MID$(LN$,I,1):I=I+1 29 IFCH$=" "ORCH$=CHR$(9)THEN28ELSE24 30 IFLEN(FD$(1))=3ORLEN(FD$(1))=0THEN32 31 IFLEN(FD$(1))=2THENFD$(1)=FD$(1)+" "ELSEIFRIGHT$(FD$(1),1)="X"THENFD$(1)=RIGHT$(FD$(1),3)ELSEFD$(1)=LEFT$(FD$(1),3) 32 RETURN 33 ' *** CONVERT 16 BIT DATA *** 34 HI=AD!/256:LO=AD!-(HI*256):IFHI>255THENER=5:GOTO128ELSERETURN 35 MAXFILES=1:CLS:PRINT@8,"**********************":PRINT@48,"* 80c85 ASSEMBLER *":PRINT@88,"**********************";:PRINT@285,CHR$(171)" - Paul Papanek Stork, 1985"; 36 PRINT@165,"ENTER STARTING ADDRESS: ";:LINEINPUTX$:X!=VAL(X$):CLEAR1600,X! 37 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$ 38 ' *** FIRST PASS *** 39 OPENF$FORINPUTAS1:CLS:PRINT@96,"PASS #1":PRINT@208,"PLEASE WAIT NOW WORKING"; 40 IFLN!>=MAXRAMTHENER=11:GOTO128ELSEPRINT@0,LN!:IFNOTEOF(1)THENLINEINPUT#1,LN$:GOSUB21ELSE51 41 IFFD$(0)=""THEN42ELSELB$(LB)=FD$(0):AD!=LN!:GOSUB33:HI(LB)=HI:LO(LB)=LO:LB=LB+1 42 IFFD$(1)=""THENGOTO40ELSEGOSUB9 43 IFBT>0THENLN!=LN!+BT:GOTO40 44 IFK>4ANDFD$(0)<>""THENER=8:GOTO128 45 ONKGOTO47,47,48,49,51 46 OP$=FD$(2):GOSUB104:LN!=LN!+(HI*256)+LO:GOTO40 47 GOSUB118:LN!=LN!+(BT*K):GOTO40 48 IFFD$(0)=""THENER=9:GOTO128ELSEOP$=FD$(2):GOSUB104:HI(LB-1)=HI:LO(LB-1)=LO:GOTO40 49 OP$=FD$(2):GOSUB104:LN!=(HI*256)+LO:ST!=LN!:GOTO40 50 ' *** SECOND PASS *** 51 LN!=0:CLOSE:OPENF$FORINPUTAS1:PRINT@102,"2" 52 PRINT@33,LN!:IFNOTEOF(1)THENLINEINPUT#1,LN$:GOSUB21ELSEGOTO131 53 IFFD$(1)=""THENGOTO52ELSEGOSUB9 54 K=K+1:ONBTGOTO65,89,95 55 ONKGOTO57,58,59,52,60,61 56 ER=6:GOTO128 57 OP$=FD$(2):GOSUB104:LN!=LN!+(HI*256)+LO:GOTO52 58 GOSUB63:GOSUB104:POKELN!,LO:LN!=LN!+1:IFFD$(2)=""THEN52ELSE58 59 GOSUB63:GOSUB104:POKELN!,LO:POKELN!+1,HI:LN!=LN!+2:IFFD$(2)=""THEN52ELSE59 60 OP$=FD$(2):GOSUB104:LN!=(HI*256)+LO:GOTO52 61 IFFD$(2)=""THENEX!=ST!ELSEOP$=FD$(2):GOSUB104:EX!=(HI*256)+LO 62 GOTO131 63 IFLEFT$(FD$(2),1)<>"'"THEN64ELSEIFLEN(FD$(2))>3THENOP$=LEFT$(FD$(2),2)+"'":FD$(2)="'"+MID$(FD$(2),3):RETURNELSEOP$=FD$(2):FD$(2)="":RETURN 64 I=INSTR(FD$(2),","):IFITHENOP$=LEFT$(FD$(2),I-1):FD$(2)=MID$(FD$(2),I+1):RETURNELSEOP$=FD$(2):FD$(2)="":RETURN 65 ONKGOTO70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87 66 K=K-19:IFK<8THENGOSUB124:OP=128+(K*8)+RG:GOTO88 67 K=K-8:IFK<8THENOP=7+(K*8):GOTO88 68 K=K-8:IFK<8THENOP=192+(K*8):GOTO88 69 K=K-8:OP=227+(K*8):GOTO88 70 GOSUB124:OP=5+(RG*8):GOTO88 71 GOSUB124:OP=4+(RG*8):GOTO88 72 GOSUB124:OP=9+(RG*8):GOTO88 73 GOSUB124:OP=11+(RG*8):GOTO88 74 GOSUB124:OP=3+(RG*8):GOTO88 75 GOSUB124:OP=193+(RG*8):GOTO88 76 GOSUB124:OP=197+(RG*8):GOTO88 77 GOSUB124:OP=10+(RG*8):GOTO88 78 GOSUB124:OP=2+(RG*8):GOTO88 79 GOSUB124:OP=64+(RG*8):GOSUB124:OP=OP+RG:GOTO88 80 OP$=FD$(2):GOSUB104:OP=199+(LO*8):GOTO88 81 OP=118:GOTO88 82 OP=0:GOTO88 83 OP=233:GOTO88 84 OP=201:GOTO88 85 OP=249:GOTO88 86 OP=32:GOTO88 87 OP=48 88 POKELN!,OP:LN!=LN!+1:GOTO52 89 ONKGOTO91,92,93 90 K=K-4:OP=198+(K*8):GOTO94 91 OP=219:GOTO94 92 OP=211:GOTO94 93 GOSUB124:OP=6+(RG*8) 94 POKELN!,OP:OP$=FD$(2):GOSUB104:POKELN!+1,LO:LN!=LN!+2:GOTO52 95 ONKGOTO99,100,101 96 K=K-4:IFK<4THENOP=34+(8*K):GOTO102 97 K=K-4:IFK<8THENOP=194+(8*K):GOTO102 98 K=K-8:OP=196+(K*8):GOTO102 99 OP=205:GOTO102 100 OP=195:GOTO102 101 GOSUB124:OP=1+(RG*8) 102 POKELN!,OP:OP$=FD$(2):GOSUB104:POKELN!+1,LO:POKELN!+2,HI:LN!=LN!+3:GOTO52 103 ' *** INTERPRET DATA FIELD *** 104 I=0:LMT=LEN(OP$):IFLMT=0THEN56ELSEAD!=0:CH$=LEFT$(OP$,1):IFCH$<"0"ORCH$>"9"THEN113 105 CH$=RIGHT$(OP$,1):IFCH$>="0"ANDCH$=<"9"THENLMT=LMT+1:CH$="D" 106 IFCH$<>"H"THEN108ELSEFORI=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:GOTO128 107 NEXT:GOSUB34:RETURN 108 IFCH$="Q"ORCH$="O"THENN$="8":N=8 109 IFCH$="B"THENN$="2":N=2 110 IFCH$="D"THENN$=":":N=10 111 FORI=1TOLMT-1:CH$=MID$(OP$,LMT-I,1):IFCH$>"/"ANDCH$"'"THEN114ELSELO=ASC(MID$(OP$,2,1)):HI=0:RETURN 114 IFCH$<>"$"THEN115ELSEAD!=LN!+(VAL(RIGHT$(OP$,LMT-1))):GOSUB34:RETURN 115 IFI>LBTHENER=1:GOTO128ELSEIFLB$(I)<>OP$THENI=I+1:GOTO115ELSEGOTO116 116 HI=HI(I):LO=LO(I):RETURN 117 ' *** COUNT ADDRESS FIELD SIZE *** 118 IFLEFT$(FD$(2),1)="'"THENBT=LEN(FD$(2))-2:RETURN 119 BT=1:FORI=1TOLEN(FD$(2)) 120 CH$=MID$(FD$(2),I,1) 121 IFCH$=","THENBT=BT+1 122 NEXT:RETURN 123 ' *** REGISTER SUBROUTINE *** 124 IFFD$(2)=""THEN56 125 GOSUB64:RG=INSTR("BCDEHLMASP",LEFT$(OP$,1))-1:IFRG>7THENRG=6 126 IFRG<0THENER=3:GOTO128ELSERETURN 127 ' *** ERROR HANDLING ROUTINE *** 128 CLS:PRINTLN$:PRINT:PRINT"ERROR #"ER"- ";:FORI=1TOER:READER$:NEXT:PRINTER$ 129 DATA Undefined Label,Illegal Character,Illegal Format,,Illegal Value,Missing Operand,,Illegal Label,Missing Label,Undefined Operation Code,Not Enough Free Memory 130 BEEP:CLOSE:END 131 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 132 SAVEMF$,ST!,LN!-1,EX!:END