10 ' 20 ' HEXCOM.BAS' 30 ' Convert a HEX file to a COM file' 40 ' 50 LINE INPUT " Input file >";HEXFIL$ 60 LINE INPUT " Output file >";COMFIL$ 70 OPEN "I",1,HEXFIL$ 80 OPEN "O",2,COMFIL$ 90 IF EOF(1) THEN END 100 LINE INPUT #1,HEXSTR$ 110 CKSUM%=0 120 IF MID$(HEXSTR$,1,1) <> ":" THEN GOTO 370 ' no HEX file 130 BYT1%=2 : GOSUB 270 : BYT%=SAVBYT% 140 CKSUM%=CKSUM% + BYT% 150 FOR BYT1%=4 TO 8 STEP 2 : GOSUB 270 160 CKSUM%=CKSUM% + SAVBYT% : NEXT BYT1% 170 FOR CNT%=1 TO BYT% 180 BYT1%=2*CNT%+8 : GOSUB 270 190 PRINT #2,USING "!";CHR$(SAVBYT%); 200 CKSUM%=CKSUM% + SAVBYT% 210 NEXT CNT% 220 BYT1%=2*BYT%+10 : GOSUB 270 : CKSUM%=(CKSUM%+SAVBYT%) AND 255 230 IF CKSUM% <> 0 THEN GOTO 380 240 IF BYT%=0 THEN END 250 GOTO 90 260 END 270 ' Return a value form a two char hex 280 HEXBYT%=ASC(MID$(HEXSTR$,BYT1%,1)) : GOSUB 330 290 SAVBYT%=16*HEXBYT% 300 HEXBYT%=ASC(MID$(HEXSTR$,BYT1%+1,1)): GOSUB 330 310 SAVBYT%=SAVBYT%+HEXBYT% 320 RETURN 330 IF HEXBYT% <58 THEN HEXBYT%=HEXBYT%-48 340 IF HEXBYT% >96 THEN HEXBYT%=HEXBYT%-87 350 IF HEXBYT% >64 THEN HEXBYT%=HEXBYT%-55 360 RETURN 370 PRINT " No (more) HEX data" : END 380 PRINT " Checksum invalid " : END