0 ' "BASBLD.REL" Mod of 7/4/87 by Phil Wheeler [71266,125] 1 ' 2 ' Build a BASIC to build an ASM 3 ' 4 ' This program writes out a text 5 ' file BASIC program which when 6 ' run will build an assembly code 7 ' program at any desired address 8 ' 9 ' The input required to create the 10 ' program is two copies, at 11 ' different addresses, of the 12 ' machine code program. 13 ' 14 ' The user is asked for the start, 15 ' end, and execution address for 16 ' one copy, and for the start 17 ' addr. of the other. The program 18 ' compares the two, and if a 19 ' difference is found, converts 20 ' the address to a relocatable one 21 ' 22 ' The resulting program is left as 23 ' the file _BLD_.DO 24 ' 25 ' Richard Haw [71706,334] 26 ' 27 CLS:MAXFILES=1:CLEAR256:INPUT"File name to save ";F$:INPUT"Start address ";AD:INPUT"End address ";AF 28 INPUT"Entry address ";AE:INPUT"Copy address ";AC:AL=AF-AD:CLS:OPEN"_BLD_"FOROUTPUTAS1:DEFINTI-Q 29 PRINT@130,"Writing out program";:Q=0:PRINT#1,Q"'"F$:Q$=CHR$(34):R$=Q$+";":Q=Q+1 30 PRINT#1,Q"DEFINTI-X:DEFSTRY-Z:Z="Q$"0123456789ABCDEFGHIJKLMNOPQRSTUV"Q$":CLS:E=";:XT=AL:GOSUB57:PRINT#1,":D=";:XT=AE-AD 31 GOSUB57:PRINT#1,:Q=Q+1:PRINT#1,Q"F=HIMEM+E:IFF>=MAXRAMTHENBEEP:MENU":Q=Q+1 32 PRINT#1,Q"PRINT@42,"Q$"Enter end address"Q$";HIMEM+E;"Q$"-"Q$";MAXRAM-1:PRINT@82,"Q$" for just below MAXRAM"Q$:Q=Q+1 33 NS=Q:PRINT#1,Q"Y="Q$Q$":PRINT@122,SPACE$(30);:PRINT@122,;:INPUTY:IFY=";:PRINT#1,Q$Q$"THENB=MAXRAM-E-1ELSEB=VAL(Y)-E":Q=Q+1 34 PRINT#1,Q"IFB>=MAXRAM-EORB16THENU=U-16:O=1ELSEO=0":Q=Q+1:PRINT#1,Q"V=INSTR(1,Z,MID$(Y,M+1,1)):IFV=0ORV>16THEN55":Q=Q+1 40 PRINT#1,Q"K=(U-1)*16+V-1:RETURN":Q=55:PRINT#1,Q"BEEP:PRINT@165,"Q$"Bad character"R$":END":Q=60:PRINT#1,Q"IFMRTHENBEEP:PRINT@165,"Q$"Checksum fail"R$"END":Q=Q+1:PRINT#1,Q"READY:M=1:GOSUB50:IFK=0THEN40":Q=Q+1 42 PRINT#1,Q"S=S+1:PRINT@70,S;:PRINT@110,A;:N=K:M=3:GOSUB50:M=5:L=K:GOSUB50:L=K*256+L:R=0":Q=70 43 PRINT#1,Q"M=M+2:GOSUB50:R=R+K:RETURN":CLS:A=AD:D=AD-AC:L=0:A$="":Q=99 44 IFA>AFTHEN49 45 J=PEEK(A):IFPEEK(A-D)=JTHEN48 46 B=PEEK(A)+PEEK(A+1)*256:PRINTA"-"B"Changed to start +";:B=B-AD:PRINTB:C=INT(B/256):B=B-C*256 47 M=1:K=B:GOSUB50:K=C:GOSUB50:A=A+2:GOTO44 48 K=J:GOSUB50:A=A+1:GOTO44 49 GOSUB51:Q=Q+1:PRINT#1,Q"DATA00":MAXFILES=0:MENU 50 IFLEN(A$)<112THEN52 51 I=L/256:J=L-I*256:GOSUB54:C$=B$:J=I:GOSUB54:D$=B$:J=LEN(A$)/2:GOSUB54:Q=Q+1:PRINT#1,Q"DATA"B$C$D$A$:A$="":L=0 52 L=L+K:IFMTHENJ=K+256:M=0ELSEJ=K 53 GOSUB54:A$=A$+B$:RETURN 54 J1=J/16:J2=J-J1*16:IFJ1>9THENJ1=J1+55ELSEJ1=J1+48 55 IFJ2>9THENJ2=J2+55ELSEJ2=J2+48 56 B$=CHR$(J1)+CHR$(J2):RETURN 57 X$=STR$(XT):FORI=1TOLEN(X$):Y$=MID$(X$,I,1):IFY$<>" "THENPRINT#1,Y$; 58 NEXTI:RETURN