1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#
# 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
|