10 GOTO 1000:REM a LOAD program for Intel .HEX files - John Chenoweth 09/11/85 300 IF LEN(HEX$)<>4 THEN POP:GOTO 9000 ELSE DIGITS=4:GOTO 310 302 IF LEN(HEX$)<>2 THEN POP:GOTO 9000 ELSE DIGITS=2 310 HSUM=0:FOR J=1 TO DIGITS 320 CV=ASC(MID$(HEX$,J,1)) 330 IF CV>57 THEN CV=CV-7 335 CV=CV-48:IF CV<0 OR CV>15 THEN POP:GOTO 9000 340 HSUM=HSUM*16+CV 350 NEXT J 360 DX=HSUM:RETURN 700 DX=DX/256:DX=INT(DX):RETURN 800 TMPX=DX:GOSUB 700:DX=DX*256:DX=TMPX-DX:RETURN 1000 INPUT"Enter filename:";FIL$ 1010 FIL$=LEFT$(FIL$,6)+".DO" 1020 OPEN FIL$ FOR INPUT AS 1 1030 ON ERROR GOTO 5000 1040 HP=0:LP=65535 1100 CHKSUM=0:HEX$=INPUT$(1,1):IF HEX$< >":" THEN PRINT"ERROR:on the ':' delimiter":GOTO 9900 1110 HEX$=INPUT$(2,1):GOSUB 302:CHKSUM=CHKSUM+DX:NUMBYT=DX 1120 HEX$=INPUT$(4,1):GOSUB 300:PNTR=DX:GOSUB 700:CHKSUM=CHKSUM+DX:DX=PNTR:GOSUB 800:CHKSUM=CHKSUM+DX 1130 HEX$=INPUT$(2,1):IF HEX$<>"00" THEN 4000 1160 IF PNTR < LP THEN LP=PNTR 1170 IF PNTR+NUMBYT-1 > HP THEN HP=PNTR+NUMBYT-1 1180 PRINT PNTR 1200 FOR B=1 TO NUMBYT 1210 HEX$=INPUT$(2,1):GOSUB 302:IF DX<0 OR DX>255 THEN PRINT:PRINT"ERROR:bad byte value":GOTO 9900 1220 POKE PNTR,DX:CHKSUM=CHKSUM+DX:PNTR=PNTR+1:NEXT B 1230 HEX$=INPUT$(2,1):GOSUB 302:CHKSUM=CHKSUM+DX 1240 DX=CHKSUM:GOSUB 800:IF DX <> 0 THEN PRINT:PRINT"ERROR:checksum":GOTO 9900 1250 HEX$=INPUT$(2,1):IF HEX$ <> CHR$(13)+CHR$(10) THEN PRINT "blew the CRLF":GOTO 9000 ELSE 1100 4000 IF HEX$<>"01" THEN PRINT "ERROR:on the reserved byte":GOTO 9900 4010 HEX$=INPUT$(2,1):IF HEX$<>"FF" THEN PRINT "ERROR:checksum":GOTO 9900 5000 REM here we create the .CO file 5010 CLOSE #1:FOR J=1 TO 7:BEEP:NEXT J 5020 PRINT " LOW POINTER =";LP 5030 PRINT "HIGH POINTER =";HP 5040 RA=LP:REM default run address 5050 PRINT "Just press ENTER for RUN at low pointer" 5060 INPUT"RUN ADDRESS ";RA 5070 SAVEM FIL$,LP,HP,RA:PRINT "DONE":MENU 9000 PRINT"ERROR:bad Intel .HEX format" 9900 CLOSE #1 9999 END