summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2005-11-18 20:01:51 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2005-11-18 20:01:51 +0000
commit88a2a8a53a875f6af90fa2b479dc281e752881d2 (patch)
tree2de233d8ccfab4ea2add7606e3ab8ebd5b9de7c8 /tools
parentd2779e5f3a00f0ff94ff2e62ae034baca3d8f7b3 (diff)
downloadrockbox-88a2a8a53a875f6af90fa2b479dc281e752881d2.tar.gz
rockbox-88a2a8a53a875f6af90fa2b479dc281e752881d2.zip
Added H300 to the fwpatcher utility
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7969 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools')
-rw-r--r--tools/fwpatcher/Makefile2
-rw-r--r--tools/fwpatcher/h300sums.h5
-rw-r--r--tools/fwpatcher/main.c42
-rw-r--r--tools/fwpatcher/resource.h1
-rw-r--r--tools/fwpatcher/resource.rc1
5 files changed, 40 insertions, 11 deletions
diff --git a/tools/fwpatcher/Makefile b/tools/fwpatcher/Makefile
index 922e2faf65..a209be183e 100644
--- a/tools/fwpatcher/Makefile
+++ b/tools/fwpatcher/Makefile
@@ -44,7 +44,7 @@ $(TARGET): $(OBJS)
44$(TARGETU): $(OBJSU) 44$(TARGETU): $(OBJSU)
45 $(CC) $(LDFLAGS) $(OBJSU) -o $@ 45 $(CC) $(LDFLAGS) $(OBJSU) -o $@
46 46
47resource.o: resource.rc bootloader-h100.bin bootloader-h120.bin rockbox.ico 47resource.o: resource.rc bootloader-h100.bin bootloader-h120.bin bootloader-h300.bin rockbox.ico
48 $(WINDRES) -v $< $@ 48 $(WINDRES) -v $< $@
49 49
50iriveru.o: iriver.c iriver.h 50iriveru.o: iriver.c iriver.h
diff --git a/tools/fwpatcher/h300sums.h b/tools/fwpatcher/h300sums.h
new file mode 100644
index 0000000000..ea7ae72817
--- /dev/null
+++ b/tools/fwpatcher/h300sums.h
@@ -0,0 +1,5 @@
1/* Checksums of firmwares for ihp_300 */
2/* order: unpatched, patched */
3
4/* 1.28eu */
5{"0b2083d37f24899b82d21a14d2b38060", "937c0a745227281da62e41da78efcfe8"},
diff --git a/tools/fwpatcher/main.c b/tools/fwpatcher/main.c
index 1ec67678df..3015c8fc61 100644
--- a/tools/fwpatcher/main.c
+++ b/tools/fwpatcher/main.c
@@ -56,15 +56,21 @@ static struct sumpairs h120pairs[] = {
56#include "h120sums.h" 56#include "h120sums.h"
57}; 57};
58 58
59/* precalculated checksums for H320/H340 */
60static struct sumpairs h300pairs[] = {
61#include "h300sums.h"
62};
63
59HICON rbicon; 64HICON rbicon;
60HFONT deffont; 65HFONT deffont;
61HWND controls[CTL_NUM]; 66HWND controls[CTL_NUM];
62 67
63/* begin mkboot.c excerpt */ 68/* begin mkboot.c excerpt */
64 69
65unsigned char image[0x200000 + 0x220 + 0x200000/0x200]; 70unsigned char image[0x400000 + 0x220 + 0x400000/0x200];
66 71
67int mkboot(TCHAR *infile, TCHAR *outfile, unsigned char *bldata, int bllen) 72int mkboot(TCHAR *infile, TCHAR *outfile, unsigned char *bldata, int bllen,
73 int origin)
68{ 74{
69 FILE *f; 75 FILE *f;
70 int i; 76 int i;
@@ -101,7 +107,7 @@ int mkboot(TCHAR *infile, TCHAR *outfile, unsigned char *bldata, int bllen)
101 107
102 fclose(f); 108 fclose(f);
103 109
104 memcpy(image + 0x220 + 0x1f0000, bldata, bllen); 110 memcpy(image + 0x220 + origin, bldata, bllen);
105 111
106 f = _tfopen(outfile, TEXT("wb")); 112 f = _tfopen(outfile, TEXT("wb"));
107 if(!f) { 113 if(!f) {
@@ -110,13 +116,13 @@ int mkboot(TCHAR *infile, TCHAR *outfile, unsigned char *bldata, int bllen)
110 } 116 }
111 117
112 /* Patch the reset vector to start the boot loader */ 118 /* Patch the reset vector to start the boot loader */
113 image[0x220 + 4] = image[0x1f0000 + 0x220 + 4]; 119 image[0x220 + 4] = image[origin + 0x220 + 4];
114 image[0x220 + 5] = image[0x1f0000 + 0x220 + 5]; 120 image[0x220 + 5] = image[origin + 0x220 + 5];
115 image[0x220 + 6] = image[0x1f0000 + 0x220 + 6]; 121 image[0x220 + 6] = image[origin + 0x220 + 6];
116 image[0x220 + 7] = image[0x1f0000 + 0x220 + 7]; 122 image[0x220 + 7] = image[origin + 0x220 + 7];
117 123
118 /* This is the actual length of the binary, excluding all headers */ 124 /* This is the actual length of the binary, excluding all headers */
119 actual_length = 0x1f0000 + bllen; 125 actual_length = origin + bllen;
120 126
121 /* Patch the ESTFBINR header */ 127 /* Patch the ESTFBINR header */
122 image[0x20c] = (actual_length >> 24) & 0xff; 128 image[0x20c] = (actual_length >> 24) & 0xff;
@@ -216,16 +222,24 @@ int PatchFirmware(int series, int table_entry)
216 DWORD blsize; 222 DWORD blsize;
217 int i; 223 int i;
218 struct sumpairs *sums; 224 struct sumpairs *sums;
225 int origin;
219 226
220 /* get pointer to the correct bootloader.bin */ 227 /* get pointer to the correct bootloader.bin */
221 switch(series) { 228 switch(series) {
222 case 100: 229 case 100:
223 res = FindResource(NULL, MAKEINTRESOURCE(IDI_BOOTLOADERH100), TEXT("BIN")); 230 res = FindResource(NULL, MAKEINTRESOURCE(IDI_BOOTLOADERH100), TEXT("BIN"));
224 sums = &h100pairs[0]; 231 sums = &h100pairs[0];
232 origin = 0x1f0000;
225 break; 233 break;
226 case 120: 234 case 120:
227 res = FindResource(NULL, MAKEINTRESOURCE(IDI_BOOTLOADERH120), TEXT("BIN")); 235 res = FindResource(NULL, MAKEINTRESOURCE(IDI_BOOTLOADERH120), TEXT("BIN"));
228 sums = &h120pairs[0]; 236 sums = &h120pairs[0];
237 origin = 0x1f0000;
238 break;
239 case 300:
240 res = FindResource(NULL, MAKEINTRESOURCE(IDI_BOOTLOADERH300), TEXT("BIN"));
241 sums = &h300pairs[0];
242 origin = 0x3f0000;
229 break; 243 break;
230 } 244 }
231 resload = LoadResource(NULL, res); 245 resload = LoadResource(NULL, res);
@@ -246,7 +260,7 @@ int PatchFirmware(int series, int table_entry)
246 TEXT("Error"), MB_ICONERROR); 260 TEXT("Error"), MB_ICONERROR);
247 goto error; 261 goto error;
248 } 262 }
249 if (!mkboot(name1, name2, bootloader, blsize)) { 263 if (!mkboot(name1, name2, bootloader, blsize, origin)) {
250 MessageBox(NULL, TEXT("Error in patching"), 264 MessageBox(NULL, TEXT("Error in patching"),
251 TEXT("Error"), MB_ICONERROR); 265 TEXT("Error"), MB_ICONERROR);
252 goto error; 266 goto error;
@@ -380,8 +394,16 @@ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
380 else { 394 else {
381 table_entry = intable(md5sum_str, &h100pairs[0], 395 table_entry = intable(md5sum_str, &h100pairs[0],
382 sizeof(h100pairs)/sizeof(struct sumpairs)); 396 sizeof(h100pairs)/sizeof(struct sumpairs));
383 if (table_entry >= 0) 397 if (table_entry >= 0) {
384 series = 100; 398 series = 100;
399 }
400 else {
401 table_entry =
402 intable(md5sum_str, &h300pairs[0],
403 sizeof(h300pairs)/sizeof(struct sumpairs));
404 if (table_entry >= 0)
405 series = 300;
406 }
385 } 407 }
386 if (series == 0) { 408 if (series == 0) {
387 MessageBox(NULL, TEXT("Unrecognised firmware"), TEXT("Fail"), MB_OK); 409 MessageBox(NULL, TEXT("Unrecognised firmware"), TEXT("Fail"), MB_OK);
diff --git a/tools/fwpatcher/resource.h b/tools/fwpatcher/resource.h
index c255bff0b4..c1287e46ee 100644
--- a/tools/fwpatcher/resource.h
+++ b/tools/fwpatcher/resource.h
@@ -1,4 +1,5 @@
1#define IDI_RBICON 101 1#define IDI_RBICON 101
2#define IDI_BOOTLOADERH100 102 2#define IDI_BOOTLOADERH100 102
3#define IDI_BOOTLOADERH120 103 3#define IDI_BOOTLOADERH120 103
4#define IDI_BOOTLOADERH300 104
4 5
diff --git a/tools/fwpatcher/resource.rc b/tools/fwpatcher/resource.rc
index a1dcb4835f..b30646316d 100644
--- a/tools/fwpatcher/resource.rc
+++ b/tools/fwpatcher/resource.rc
@@ -3,3 +3,4 @@
3IDI_RBICON ICON "rockbox.ico" 3IDI_RBICON ICON "rockbox.ico"
4IDI_BOOTLOADERH100 BIN "bootloader-h100.bin" 4IDI_BOOTLOADERH100 BIN "bootloader-h100.bin"
5IDI_BOOTLOADERH120 BIN "bootloader-h120.bin" 5IDI_BOOTLOADERH120 BIN "bootloader-h120.bin"
6IDI_BOOTLOADERH300 BIN "bootloader-h300.bin"