home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / bbcmicro / bbcdhx.bas < prev    next >
BASIC Source File  |  2020-01-01  |  2KB  |  66 lines

  1.   100 REM Intel hex to binary converter
  2.   120 REM Version 2 November 1985
  3.   140   
  4.   160 CLOSE#0
  5.   180 DIM image 20480
  6.   200  
  7.   220 INPUT "Name of input hex file?    " in$
  8.   240 INPUT "Name of output binary file? " out$
  9.   260 in%=OPENIN(in$)
  10.   280 IF in%=0 THEN PRINT"Input file does not exist":END
  11.   300  
  12.   320 imagesize% = 0
  13.   340 record% = 0
  14.   360 REPEAT
  15.   380   REPEAT
  16.   400     UNTIL (BGET#in%=ASC(":")) OR EOF#in%
  17.   420   IF EOF#in% THEN PROCsave:CLOSE#0:END ELSE PROCreadrecord
  18.   440   UNTIL FALSE
  19.   460   
  20.   480 END
  21.   500   
  22.   520   
  23.   540 DEF PROCreadrecord
  24.   560 LOCAL count%,address%,storedcsum%,type%
  25.   580 record%=record%+1
  26.   600 csum%=0
  27.   620 count%=FNgetbyte
  28.   640 address%=FNgetbyte*256+FNgetbyte
  29.   660 IF record%=1 THEN base% = address%
  30.   680 PRINT"Record ";record%;" : Size ";count%;", address $";~address%
  31.   700   
  32.   720 type% = FNgetbyte
  33.   740 IF type%<>0 AND type%<>1 THEN PRINT"*** Unknown record type ";type%;" detected":CLOSE#0:END
  34.   760 IF type% <> 0 THEN PRINT"+++ End-of-file record detected":ENDPROC
  35.   780 PROCreaddata(count%)
  36.   800 storedcsum% = FNgetbyte
  37.   820 IF csum%<>0 THEN PRINT"*** Checksum error":CLOSE#0:END
  38.   840 ENDPROC
  39.   860   
  40.   880 DEF FNgetbyte
  41.   900 LOCAL value%
  42.   920 value%=FNgetnibble*16 + FNgetnibble
  43.   940 csum% = (csum% + value%) AND &FF
  44.   960 =value%
  45.   980   
  46.  1000 DEF FNgetnibble
  47.  1020 LOCAL char%
  48.  1040 char% = BGET#in%
  49.  1060 IF char%>=ASC("A") THEN =char%-ASC("A")+10 ELSE =char%-ASC("0")
  50.  1080   
  51.  1100 DEF PROCreaddata(count%)
  52.  1120 LOCAL I%
  53.  1140 pointer% = address% - base%
  54.  1160 FOR I% = 1 TO count%
  55.  1180   image?pointer% = FNgetbyte
  56.  1200   address% = address% + 1
  57.  1220   pointer% = pointer% + 1
  58.  1240   NEXT
  59.  1260 IF pointer% > imagesize% THEN imagesize% = pointer%
  60.  1280 ENDPROC
  61.  1300   
  62.  1320 DEF PROCsave
  63.  1340 loadaddress% = base% OR &FFFF0000
  64.  1360 OSCLI("*SAVE "+out$+" "+STR$~image+" "+STR$~(imagesize%+image)+" "+STR$~loadaddress%+" "+STR$~loadaddress%)
  65.  1380 ENDPROC
  66.