1 // this code was contributed by shagkur of the devkitpro team, thx!
9 typedef struct _dolheader
{
21 u32
load_dol_image (void *dolstart
, int print
) {
26 dolfile
= (dolheader
*) dolstart
;
27 for (i
= 0; i
< 7; i
++) {
28 if ((!dolfile
->text_size
[i
]) ||
29 (dolfile
->text_start
[i
] < 0x100))
33 printf ("loading text section %u @ 0x%08x "
35 i
, dolfile
->text_start
[i
],
36 dolfile
->text_size
[i
]);
39 ICInvalidateRange ((void *) dolfile
->text_start
[i
],
40 dolfile
->text_size
[i
]);
41 memcpy ((void *) dolfile
->text_start
[i
],
42 dolstart
+dolfile
->text_pos
[i
],
43 dolfile
->text_size
[i
]);
46 for(i
= 0; i
< 11; i
++) {
47 if ((!dolfile
->data_size
[i
]) ||
48 (dolfile
->data_start
[i
] < 0x100))
52 printf ("loading data section %u @ 0x%08x "
54 i
, dolfile
->data_start
[i
],
55 dolfile
->data_size
[i
]);
58 memcpy ((void*) dolfile
->data_start
[i
],
59 dolstart
+dolfile
->data_pos
[i
],
60 dolfile
->data_size
[i
]);
61 DCFlushRangeNoSync ((void *) dolfile
->data_start
[i
],
62 dolfile
->data_size
[i
]);
66 printf ("clearing bss\n");
69 memset ((void *) dolfile
->bss_start
, 0, dolfile
->bss_size
);
70 DCFlushRange((void *) dolfile
->bss_start
, dolfile
->bss_size
);
72 return dolfile
->entry_point
;