home *** CD-ROM | disk | FTP | other *** search
/ ftp.uni-stuttgart.de/pub/systems/acorn/ / Acorn.tar / Acorn / 6502 / archivers / d99hex.bas < prev    next >
BASIC Source File  |  1991-11-18  |  2KB  |  75 lines

  1.   100 REM ** Binary to Intel Hex converter **
  2.   120 REM ** Version 2 November 1985 **
  3.   140   
  4.   160 CLOSE#0
  5.   180   
  6.   200 DIM data 31,block 16,binfile 32
  7.   220   
  8.   240 INPUT "Name of input binary file? " $binfile
  9.   260 INPUT "Name of output hex file?   " out$
  10.   280 in% = OPENIN($binfile)
  11.   300 IF in%=0 THEN PRINT"Input file does not exist":END
  12.   320 out%= OPENOUT(out$)
  13.   340   
  14.   360 address% = FNloadaddress
  15.   380   
  16.   400 REPEAT
  17.   420   PRINT"At address ";~address%
  18.   440   PROCwriterecord
  19.   460   UNTIL EOF#in%
  20.   480   
  21.   500 REM write EOF record
  22.   520   
  23.   540 BPUT#out%,ASC(":")
  24.   560 FOR I% = 1 TO 3
  25.   580   PROCputhex(0)
  26.   600   NEXT
  27.   620 PROCputhex(1)
  28.   640 PROCputhex(&FF)
  29.   660 BPUT#out%,&0D
  30.   680   
  31.   700 CLOSE#0
  32.   720   
  33.   740 END
  34.   760   
  35.   780 DEF PROCputhex(byte%)
  36.   800 byte% = byte% AND &FF
  37.   820 checksum% = (checksum% + byte%) AND &FF
  38.   840 PROCputnibble(byte% DIV 16)
  39.   860 PROCputnibble(byte%)
  40.   880 ENDPROC
  41.   900   
  42.   920 DEF PROCputnibble(nibble%)
  43.   940 nibble% = nibble% AND &0F
  44.   960 IF nibble%<10 THEN BPUT#out%,nibble%+ASC("0") ELSE BPUT#out%,nibble%+ASC("A")-10
  45.   980 ENDPROC
  46.  1000   
  47.  1020 DEF PROCwriterecord
  48.  1040 LOCAL I%,J%
  49.  1060 checksum% = 0
  50.  1080 BPUT#out%,ASC(":")
  51.  1100 I% = 0
  52.  1120 REPEAT
  53.  1140   data?I% = BGET#in%
  54.  1160   I% = I% + 1
  55.  1180   UNTIL I%=32 OR EOF#in%
  56.  1200 PROCputhex(I%)
  57.  1220 PROCputhex(address% DIV 256)
  58.  1240 PROCputhex(address%)
  59.  1260 PROCputhex(0)
  60.  1280 FOR J% = 0 TO I%-1
  61.  1300   PROCputhex(data?J%)
  62.  1320   NEXT
  63.  1340 recsum% = -checksum%
  64.  1360 PROCputhex(recsum%)
  65.  1380 BPUT#out%,&0D
  66.  1400 address% = address% + I%
  67.  1420 ENDPROC
  68.  1440  
  69.  1460 DEF FNloadaddress
  70.  1480 block?0 = binfile AND &FF
  71.  1500 block?1 = binfile DIV 256
  72.  1520 A%=5:X%=block AND &FF:Y%=block DIV 256
  73.  1540 CALL &FFDD
  74.  1560 =block?2+block?3*256
  75.