Added actual loading. code does not execute
This commit is contained in:
parent
95e15ef4fd
commit
63df2d3303
8 changed files with 32 additions and 4 deletions
BIN
arm9loaderhax.bin
Executable file
BIN
arm9loaderhax.bin
Executable file
Binary file not shown.
BIN
arm9loaderhax.elf
Executable file
BIN
arm9loaderhax.elf
Executable file
Binary file not shown.
BIN
example.bin
Executable file
BIN
example.bin
Executable file
Binary file not shown.
6
example.c
Normal file
6
example.c
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
void init() {
|
||||||
|
unsigned char *lfb=(unsigned char*)0x18300000;
|
||||||
|
for(int i=500;i<1000;i++)
|
||||||
|
lfb[i]=0xFF; //Output simple message
|
||||||
|
for(;;);
|
||||||
|
}
|
BIN
example.elf
Executable file
BIN
example.elf
Executable file
Binary file not shown.
11
example.ld
Normal file
11
example.ld
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
ENTRY(_start)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
. = 0x8000000 ;
|
||||||
|
.text.start : { *(.text.start)}
|
||||||
|
.text : {*(.text)}
|
||||||
|
.data : {*(.data)}
|
||||||
|
.bss : {*(.bss COMMON)}
|
||||||
|
.rodata : {*(.rodata)}
|
||||||
|
. = ALIGN(4);
|
||||||
|
}
|
BIN
firm.bin
Normal file
BIN
firm.bin
Normal file
Binary file not shown.
19
loader.c
19
loader.c
|
@ -45,10 +45,21 @@ void main() {
|
||||||
struct FIRM_header firm;
|
struct FIRM_header firm;
|
||||||
sdmmc_sdcard_readsectors(drive.partition[3].start,1, (u8*)&firm);
|
sdmmc_sdcard_readsectors(drive.partition[3].start,1, (u8*)&firm);
|
||||||
char* magic="FIRM";
|
char* magic="FIRM";
|
||||||
for(int i=0;i<4;i++)
|
for(int i=0;i<4;i++) {
|
||||||
if(magic[i]!=firm.magic[i])
|
if(magic[i]!=firm.magic[i]) {
|
||||||
return; //Check magic
|
return; //Check magic
|
||||||
for(;;); //Deadlock if checksum's right. for debugging
|
}
|
||||||
|
}
|
||||||
|
//Load segments into memory
|
||||||
|
int i;
|
||||||
|
for(i=0;i<4;i++) {
|
||||||
|
u32 startsector=firm.sections[i].offset/512;
|
||||||
|
u32 length=firm.sections[i].size/512+1;
|
||||||
|
u8* buf=(u8*)firm.sections[i].physical;
|
||||||
|
sdmmc_sdcard_readsectors(startsector,length,buf);
|
||||||
|
}
|
||||||
|
*((u32*)0x1FFFFFF8)=firm.arm11Entry;
|
||||||
|
((void(*)())firm.arm9Entry)(); //Kill me
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void init() {
|
void init() {
|
||||||
|
|
Loading…
Reference in a new issue