10  GOTO 1000: REM an UNLOAD program for creating Intel .HEX files - John Chenoweth 09/11/85
400 IF DX>65535 THEN PRINT"BAD DEC":RETURN ELSE REP=4:GOTO 405
402 IF DX>255 THEN PRINT"BAD DEC":RETURN ELSE REP=2
405 HEX$="":HSUM=DX:FOR J=1 TO REP
410 HT=HSUM-INT(HSUM/16)*16:HSUM=(HSUM-HT)/16:HT=HT+48
420 IF HT>57 THEN HT=HT+7
430 HEX$=CHR$(HT)+HEX$:NEXT J
450 RETURN
990 PRINT "BAD ADDRESS: try again":PRINT:PRINT
1000 INPUT"Enter start,end (decimal):";FIRST,LAST
1010 IF FIRST > LAST OR FIRST < 0 OR LAST < 0 OR FIRST > 65535 OR LAST > 65535 THEN 990
1020 INPUT"Enter filename:";FIL$
1030 FIL$=LEFT$(FIL$,6)+".DO"
1040 OPEN FIL$ FOR OUTPUT AS 1
1100 PNTR=FIRST
1110 LYNE$=":":CHKSUM=0
1120 NUMBYT=16:IF LAST-PNTR < 15 THEN NUMBYT=LAST-PNTR+1
1130 IF NUMBYT < 1 THEN 5000 ELSE PRINT PNTR
1140 DX=NUMBYT:CHKSUM=CHKSUM+NUMBYT:GOSUB 402:LYNE$=LYNE$+HEX$
1150 DX=PNTR\256:CHKSUM=CHKSUM+DX:DX=PNTR-(256*DX):CHKSUM=CHKSUM+DX:DX=PNTR:GOSUB 400:LYNE$=LYNE$+HEX$+"00"
1200 FOR BYT=1 TO NUMBYT
1210 DX=PEEK(PNTR):CHKSUM=CHKSUM+DX:GOSUB 402:LYNE$=LYNE$+HEX$
1230 PNTR=PNTR+1:NEXT BYT
1300 DX=(256-(CHKSUM MOD 256)) MOD 256:GOSUB 402:LYNE$=LYNE$+HEX$+CHR$(13)+CHR$(10)
1310 PRINT#1,LYNE$;:GOTO 1110
5000 CLOSE #1
9999 END
