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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/** DPF firmware loader
*
* 12/2010 <hackfin@section5.ch>
*
* Based on the FX2 ihx loader
*
*/
#include "dpf.h"
#include <stdio.h>
////////////////////////////////////////////////////////////////////////////
// Demo stuff:
void memory_dump(unsigned char *buf, unsigned int n)
{
int i = 0;
int c = 0;
while (i < n) {
printf("%02x ", buf[i]);
c++;
if (c == 16) { c = 0; printf("\n"); }
i++;
}
if (c)
printf("\n");
}
////////////////////////////////////////////////////////////////////////////
#if EXPERIMENTAL
int xmain(int argc, char **argv)
{
int ret;
int i;
struct banktable *bt;
// flash offset, offset after jump table
unsigned int offset = 0x80000 + 0x200;
static unsigned char buf[0x10000];
unsigned int len = sizeof(buf);
ret = load_ihx(argv[1], buf, &len, 0x127c, g_banktab);
if (ret < 0) {
fprintf(stderr, "Failed to load HEX file\n");
return ret;
} else {
printf("Read %d banks\n", ret);
for (i = 0; i < ret; i++) {
bt = &g_banktab[i];
printf(" { XADDR(0x%04x), XADDR(0x%04x), FOFFS(0x%06x) },\n",
bt->reloc, bt->reloc + bt->len, offset + bt->offset);
}
}
return 0;
}
#endif
int main(int argc, char **argv)
{
int ret;
DPFHANDLE h;
int i = 2;
if (argc < 2 || argc > 3) {
fprintf(stderr, "Usage:\n"
"%s <generic scsi dev> <.ihx file>\n"
"or in USB mode:\n"
"%s <.ihx file>\n",
argv[0], argv[0]);
return -1;
}
if (argc == 2) {
ret = dpf_open(NULL, &h);
i--;
} else
if (argc == 3) {
ret = dpf_open(argv[1], &h);
}
if (ret < 0) {
perror("opening DPF device:");
return ret;
}
// This patches a module to init the relocated jump table on a certain
// menu action:
// ret = patch_sector(h, 0x1330, 0x4af7a, "hack2.ihx");
// patch_sector(h, 0x0, 0x100000, "jumptbl.ihx");
if (0) {
patch_sector(h, 0x0, 0x100000, "jumptbl.ihx");
ret = patch_sector(h, 0x1330, 0x110000, "hack.ihx");
ret = patch_sector(h, 0x132a, 0x120000, "main.ihx");
if (ret < 0) printf("Failed.\n");
} else {
// demo0(h);
}
ret = load_hexfile(h, argv[i]);
code_go(h, 0x18a0);
if (ret < 0) printf("Failed.\n");
// unsigned char buf[256];
// ret = read_mem(h, buf, 0x18a0, 64);
// memory_dump(buf, 64);
dpf_close(h);
return ret;
}
|