OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 61 to Rev 62
    Reverse comparison

Rev 61 → Rev 62

/trunk/Tools/Mot2Hex/mot2hex.exe Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/Tools/Mot2Hex/mot2hex.exe Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/Tools/Mot2Hex/mot2hex.c =================================================================== --- trunk/Tools/Mot2Hex/mot2hex.c (nonexistent) +++ trunk/Tools/Mot2Hex/mot2hex.c (revision 62) @@ -0,0 +1,189 @@ +/* + * Motorola S1 format to Intel hex format + * Usage + * mot2hex + */ + +#include +#include + + +int gethex( FILE *fp_in ) +{ + int hex; + + hex = fgetc( fp_in ); + if( (hex >= '0') && (hex <= '9' )) + hex -= '0'; + else if( (hex >= 'A') && (hex <= 'F')) + hex = hex - 'A' + 10; + else + hex = -1; + return hex; +} + +int get2hex( FILE *fp_in ) +{ + int hexhi, hexlo, byte; + + hexhi = gethex( fp_in ); + if( hexhi != -1 ) + { + hexlo = gethex( fp_in ); + if( hexlo != -1 ) + { + byte = hexhi * 16 + hexlo; + return byte; + } + } + return -1; +} + +int get4hex( FILE *fp_in ) +{ + int bytehi, bytelo, addr; + + bytehi = get2hex( fp_in ); + if( bytehi != -1 ) + { + bytelo = get2hex( fp_in ); + if( bytelo != -1 ) + { + addr = (bytehi * 256) + bytelo; + return addr; + } + } + return -1; +} + + +main( int argc, char *argv[] ) +{ + FILE *fp_in, *fp_out; + char fname_in[32]; + char fname_out[32]; + int byte, addr, start, i; + int motorola_check, intel_check; + int motorola_count, intel_count; + + if( argc != 2 ) + { + printf( "\n usage: mot2hex \n" ); + exit(0); + } + sprintf( fname_in, "%s.s19", argv[1] ); + fp_in = fopen( fname_in, "r" ); + if( !fp_in ) + { + sprintf( fname_in, "%s.s1", argv[1] ); + fp_in = fopen( fname_in, "r" ); + if( !fp_in ) + { + printf( "Can't open %s", fname_in ); + exit(0); + } + } + sprintf( fname_out, "%s.hex", argv[1] ); + fp_out = fopen( fname_out, "w" ); + if( !fp_out ) + { + printf( "Can't open %s", fname_out ); + exit(0); + } + byte = 0; + addr = 0; + start = -1; + + while( byte != -1 ) + { + /* + * Motorola 8 bit record starts with "S1" + */ + do { + byte = fgetc( fp_in); + } while( (byte != 'S') && (byte != -1) ); + + byte = fgetc( fp_in ); + if( byte == '1' ) + { + /* + * get byte count from Motorola record + */ + motorola_count = get2hex( fp_in ); + motorola_check = motorola_count; + /* + * Intel byte count is for data field only + * round up to even byte boundary + */ + intel_count = motorola_count - 3; + intel_check = intel_count; + /* + * Get two byte motorola address field + */ + addr = get4hex( fp_in ); + motorola_check += (addr & 0xff); + motorola_check += (addr & 0xff00) >> 8; + /* + * output intel start of record + * ":"
+ */ + intel_check += (addr & 0xff); + intel_check += (addr & 0xff00) >> 8; + fprintf( fp_out, ":%02x%04x00", intel_count, addr ); + /* + * Input Motorola data field + */ + for( i=0; i 0xffff ) + byte = -1; + } + } + /* + * output Intel trasfer address + */ + if( start != -1 ) + { + fprintf( fp_out, ":00%04x01", start ); + } + /* + * Close input and output files and exit + */ + close( fp_in ); + close( fp_out ); +}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.