# # Patch managed by http://www.holgerschurig.de/patcher.html # --- cetools-0.3/bin2rom.c~sean-hsieh +++ cetools-0.3/bin2rom.c @@ -14,6 +14,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + History: + 07/14/2000 Sean Hsieh + Clear padding bytes of the input buffer when + "blockSize < BLOCKSIZE" to avoid the checksum + error */ #include <stdio.h> #include <sys/stat.h> @@ -28,7 +34,7 @@ #define min(a, b) (a<b)?(a):(b) -int bin2rom( char * inputName, char * outputName, long start, long boot ) +int bin2rom( char * inputName, char * outputName, long start, long boot, long record ) { int input; int output; @@ -48,7 +54,7 @@ int reste; - printf("bin2rom : input filename = %s, output filename = %s, start = 0x%lx, boot=0x%lx\n", inputName, outputName, start, boot ); + printf("bin2rom : input filename = %s, output filename = %s, start = 0x%08lx, boot=0x%08lx, record=0x%08lx\n", inputName, outputName, start, boot, record ); input = open( inputName, O_RDONLY ); if( input == -1 ) @@ -247,7 +253,14 @@ while( reste > 0 ) { blockSize = min( BLOCKSIZE, reste ); - + /**********************************************************************/ + /* Modified by Sean Hsieh */ + /* Clear the padding bytes to zero, this can avoid the checksum error */ + /**********************************************************************/ + if ( blockSize != BLOCKSIZE ) { + memset( inStart, 0, BLOCKSIZE ); + //printf( "adding padding bytes\n" ); + } read( input, inStart, blockSize ); #ifdef MAP_OUTPUT @@ -285,7 +298,8 @@ write( output, &boot, 4); - write( output, &nullData, 4); + //write( output, &nullData, 4); + write( output, &record, 4); #endif @@ -339,17 +353,26 @@ { long start; long boot; + long record; - if( argc < 5 ) + if ( argc < 5 ) { - printf("bin2rom: <input file> <output file> <start address> <boot address>\n"); - exit( -1 ); + printf("bin2rom: <input file> <output file> <start address> <boot address> [<record address>] [-s] [-c]\n"); + exit( -1 ); } sscanf( argv[3], "%lx", &start ); sscanf( argv[4], "%lx", &boot ); - - bin2rom( argv[1], argv[2], start, boot ); + if ( argc >= 6 ) + { + sscanf( argv[5], "%lx", &record ); + } + else + { + record = 0xffffffff; + } + + bin2rom( argv[1], argv[2], start, boot, record ); return 0; } \ No newline at end of file