summaryrefslogtreecommitdiff
path: root/packages/cetools/files/sean-hsieh.patch
blob: ce1b4965afad02b0ebace7f72a28e684e738df26 (plain)
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