mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-11-04 18:45:05 +01:00
18a26d7e1a
*Rewrote complete main menu function *Moved ext2/3/4 disc cache to mem2 as on FAT/NTFS (added ext2 as custom lib due to that) *Added missing header files from R1011 for ext support *Fixed crash on Numpad when pressing a button *Fixed boot of WiiMC *Changed SVN line ending to LF (Unix style)
65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
#include <malloc.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <ogc/machine/processor.h>
|
|
#include <gccore.h>
|
|
#include <dirent.h>
|
|
#include <string.h>
|
|
|
|
#include "dolloader.h"
|
|
|
|
typedef struct _dolheader {
|
|
u32 text_pos[7];
|
|
u32 data_pos[11];
|
|
u32 text_start[7];
|
|
u32 data_start[11];
|
|
u32 text_size[7];
|
|
u32 data_size[11];
|
|
u32 bss_start;
|
|
u32 bss_size;
|
|
u32 entry_point;
|
|
} dolheader;
|
|
|
|
u32 load_dol(const void *dolstart, struct __argv *argv)
|
|
{
|
|
u32 i;
|
|
dolheader *dolfile;
|
|
|
|
if (dolstart)
|
|
{
|
|
dolfile = (dolheader *) dolstart;
|
|
for (i = 0; i < 7; i++)
|
|
{
|
|
if ((!dolfile->text_size[i]) || (dolfile->text_start[i] < 0x100))
|
|
continue;
|
|
|
|
memmove((void *) dolfile->text_start[i], dolstart
|
|
+ dolfile->text_pos[i], dolfile->text_size[i]);
|
|
|
|
DCFlushRange ((void *) dolfile->text_start[i], dolfile->text_size[i]);
|
|
ICInvalidateRange((void *) dolfile->text_start[i], dolfile->text_size[i]);
|
|
}
|
|
|
|
for (i = 0; i < 11; i++)
|
|
{
|
|
if ((!dolfile->data_size[i]) || (dolfile->data_start[i] < 0x100))
|
|
continue;
|
|
|
|
memmove((void *) dolfile->data_start[i], dolstart
|
|
+ dolfile->data_pos[i], dolfile->data_size[i]);
|
|
|
|
DCFlushRange((void *) dolfile->data_start[i],
|
|
dolfile->data_size[i]);
|
|
}
|
|
|
|
if (argv && argv->argvMagic == ARGV_MAGIC)
|
|
{
|
|
void *new_argv = (void *) (dolfile->entry_point + 8);
|
|
memmove(new_argv, argv, sizeof(*argv));
|
|
DCFlushRange(new_argv, sizeof(*argv));
|
|
}
|
|
return dolfile->entry_point;
|
|
}
|
|
return 0;
|
|
}
|