1 // this code was contributed by shagkur of the devkitpro team, thx!
9 typedef struct _dolheader
{
21 u32
load_dol_image (void *dolstart
) {
26 dolfile
= (dolheader
*) dolstart
;
27 for (i
= 0; i
< 7; i
++) {
28 if ((!dolfile
->text_size
[i
]) ||
29 (dolfile
->text_start
[i
] < 0x100))
32 printf ("loading text section %u @ 0x%08x "
34 i
, dolfile
->text_start
[i
],
35 dolfile
->text_size
[i
]);
38 ICInvalidateRange ((void *) dolfile
->text_start
[i
],
39 dolfile
->text_size
[i
]);
40 memmove ((void *) dolfile
->text_start
[i
],
41 dolstart
+dolfile
->text_pos
[i
],
42 dolfile
->text_size
[i
]);
45 for(i
= 0; i
< 11; i
++) {
46 if ((!dolfile
->data_size
[i
]) ||
47 (dolfile
->data_start
[i
] < 0x100))
50 printf ("loading data section %u @ 0x%08x "
52 i
, dolfile
->data_start
[i
],
53 dolfile
->data_size
[i
]);
56 memmove ((void*) dolfile
->data_start
[i
],
57 dolstart
+dolfile
->data_pos
[i
],
58 dolfile
->data_size
[i
]);
59 DCFlushRangeNoSync ((void *) dolfile
->data_start
[i
],
60 dolfile
->data_size
[i
]);
63 printf ("clearing bss\n");
66 memset ((void *) dolfile
->bss_start
, 0, dolfile
->bss_size
);
67 DCFlushRange((void *) dolfile
->bss_start
, dolfile
->bss_size
);
69 return dolfile
->entry_point
;