From 61fd18e438d278a50802a8cc792e18d760097976 Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Mon, 25 Jul 2011 17:50:03 +0000 Subject: [PATCH] USB Loader GX *Properly sync video after flush to avoid possible green flash *Moved argument command line also to mem2 to avoid overwrite of it Forwarder V4: *Changed to new app_booter method (see WiiXplorer SVN) *Properly sync video after flush to avoid possible green flash *Centered background image and corrected aspect ratio --- Makefile | 12 ++----- data/app_booter.bin | Bin 0 -> 872 bytes data/app_booter.dol | Bin 106048 -> 0 bytes source/background_image.c | 6 ++-- source/filelist.h | 4 +-- source/main.c | 66 +++++++++++++++----------------------- source/video.c | 3 ++ 7 files changed, 38 insertions(+), 53 deletions(-) create mode 100644 data/app_booter.bin delete mode 100644 data/app_booter.dol diff --git a/Makefile b/Makefile index ff83fc62..4c3525f4 100644 --- a/Makefile +++ b/Makefile @@ -81,11 +81,9 @@ else export LD := $(CXX) endif -export OFILES := $(addsuffix .o,$(BINFILES)) \ - $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ +export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \ $(sFILES:.s=.o) $(SFILES:.S=.o) \ - $(PNGFILES:.png=.png.o) $(addsuffix .o,$(DOLFILES)) \ - $(addsuffix .o,$(ELFFILES)) + $(PNGFILES:.png=.png.o) $(addsuffix .o,$(BINFILES)) #--------------------------------------------------------------------------------- # build a list of include paths @@ -142,11 +140,7 @@ $(OUTPUT).elf: $(OFILES) @echo $(notdir $<) @bin2s -a 32 $< | $(AS) -o $(@) -%.dol.o : %.dol - @echo $(notdir $<) - @bin2s -a 32 $< | $(AS) -o $(@) - -%.elf.o : %.elf +%.bin.o : %.bin @echo $(notdir $<) @bin2s -a 32 $< | $(AS) -o $(@) diff --git a/data/app_booter.bin b/data/app_booter.bin new file mode 100644 index 0000000000000000000000000000000000000000..08d1806350e35c2d4e633b9527bf93dd770a0820 GIT binary patch literal 872 zcmZuwL2DC17=7DBNhLy*6>1xriOHeW!d`ONuqke&O0ZQbq~J+c(qa#K5f3X&I}_6$ z3JSsW;Gsz)wE-a%JgPMD;E(Vi5~&`f9u)*>$8WY+L_93K@6CK~zV|+sduSC);Tv9w zfqO=J3dUHD)eJjXkv4!;L%q#;HQ1%lye)xTlkjF}o^Omy7tr^TzW8cV^?0PO)h#2& z7ls~G4Ww-k$Uj6+F5rC*W#K{XXH!av6}b62GL=1i7-wb46N9FZ1=p=3B6bSX`VH~r zmruGgx>tM-@MF>0^+k8rcj#PpQMHyyzkv}cP&ikCa<>te>j1BxF{wAJd8(^~uUTt2 z>L`SrH5hI~y>oh`(LwuAV-d558V$q`G>jjTc-cUkG>%*AIOcpL4RxSFv-KqTd_$h? zBp8o`T301lIYk*kT=Xz?iM%4q0Jnp5GlZBW(dRZ`5}0k|&{L2b~x6O>hqYO{PE zQR@h0y9{?`6rH)0L{%V4yO_wo4zdgLhRzOqlwFjvBW#=^zpOcoF;NGcZ5a7A^;`~P zpa^tkLlSg9qIVr+K{NlI#UC#@?+LUY?PXH!f3hmjv&A$&sniM5h#ug*S9At0hJ5nk zjdIlIKpj?MB6Tb Qi3)Qmr*E3m|C8?f4Pki$ivR!s literal 0 HcmV?d00001 diff --git a/data/app_booter.dol b/data/app_booter.dol deleted file mode 100644 index 62c156fe91698e4e5ec274cceade27c4206e24e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106048 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ΠpMlei!)Rl9Sv;L~ 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 diff --git a/source/background_image.c b/source/background_image.c index 080c85ad..cca072ff 100644 --- a/source/background_image.c +++ b/source/background_image.c @@ -3,6 +3,8 @@ #include "video.h" #include "filelist.h" +extern int screenwidth; +extern int screenheight; static int imagewidth = 0; static int imageheight = 0; @@ -56,7 +58,7 @@ void fadein(u8 * imgdata) for(i = 0; i < 255; i = i+10) { if(i>255) i = 255; - Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); + Background_Show(screenwidth/2-imagewidth/2, screenheight/2-imageheight/2, 0, imgdata, 0, (float)screenwidth/(float)imagewidth, 1, i); } } @@ -68,6 +70,6 @@ void fadeout(u8 * imgdata) for(i = 255; i > 1; i = i-7) { if(i < 0) i = 0; - Background_Show(0, 0, 0, imgdata, 0, 1, 1, i); + Background_Show(screenwidth/2-imagewidth/2, screenheight/2-imageheight/2, 0, imgdata, 0, (float)screenwidth/(float)imagewidth, 1, i); } } diff --git a/source/filelist.h b/source/filelist.h index 6bc5a69b..20948a52 100644 --- a/source/filelist.h +++ b/source/filelist.h @@ -8,8 +8,8 @@ #include -extern const u8 app_booter_dol[]; -extern const u32 app_booter_dol_size; +extern const u8 app_booter_bin[]; +extern const u32 app_booter_bin_size; extern const u8 background_png[]; extern const u32 background_png_size; diff --git a/source/main.c b/source/main.c index 1daff025..b95e033d 100644 --- a/source/main.c +++ b/source/main.c @@ -1,8 +1,6 @@ /**************************************************************************** * Copyright 2009 The Lemon Man and thanks to luccax, Wiipower, Aurelio and crediar - * Copyright 2010 Dimok - * - * Original forwarder source by + * Copyright 2010-2011 Dimok * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any @@ -32,12 +30,17 @@ #include "video.h" #include "background_image.h" -#include "dolloader.h" #include "filelist.h" #include "devicemounter.h" #include "cfg.h" -void __exception_setreload(int t); +#define EXECUTE_ADDR ((u8 *) 0x92000000) +#define BOOTER_ADDR ((u8 *) 0x93000000) +#define ARGS_ADDR ((u8 *) 0x93200000) + +typedef void (*entrypoint) (void); +extern void __exception_setreload(int t); +extern void __exception_closeall(); static int GetXMLArguments(const char *path, struct __argv *args) { @@ -96,11 +99,6 @@ static int GetXMLArguments(const char *path, struct __argv *args) entry[len] = '\0'; - char *tmp = (char *) realloc(args->commandLine, args->length + len + 1); - if(!tmp) - break; //out of memory, take what we got until now - - args->commandLine = tmp; strcpy(args->commandLine + args->length - 1, entry); args->length += len + 1; } @@ -154,10 +152,9 @@ int main(int argc, char **argv) { u32 cookie; FILE *exeFile = NULL; - void * exeBuffer = (void *)EXECUTABLE_MEM_ADDR; u32 exeSize = 0; - u32 exeEntryPointAddress = 0; - entrypoint exeEntryPoint; + void * exeBuffer = (void *)EXECUTE_ADDR; + entrypoint exeEntryPoint = (entrypoint) BOOTER_ADDR; __exception_setreload(0); /* int videomod */ @@ -223,53 +220,42 @@ int main(int argc, char **argv) } fclose (exeFile); - /* load entry point */ + //! Setup argument struct struct __argv args; bzero(&args, sizeof(args)); args.argvMagic = ARGV_MAGIC; args.length = strlen(filepath) + 2; - args.commandLine = (char*)malloc(args.length); - if (!args.commandLine) SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); + //! Put the argument into mem2 too, to avoid overwriting it + args.commandLine = (char *) ARGS_ADDR + sizeof(args); + //! Add executable file path as first argument strcpy(args.commandLine, filepath); + //! Append the arguments from the meta.xml GetXMLArguments(filepath, &args); + //! Finishing sequence "\0\0" args.commandLine[args.length - 1] = '\0'; args.argc = 1; args.argv = &args.commandLine; args.endARGV = args.argv + 1; - u8 * appboot_buff = (u8 *) malloc(app_booter_dol_size); - if(!appboot_buff) - { - fadeout(imgdata); - SDCard_deInit(); - USBDevice_deInit(); - StopGX(); - free(imgdata); - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - } + //! Put the booter code to it's expected address + memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size); + DCFlushRange(BOOTER_ADDR, app_booter_bin_size); - memcpy(appboot_buff, app_booter_dol, app_booter_dol_size); + //! Put the argument struct to it's expected address + memcpy(ARGS_ADDR, &args, sizeof(args)); + DCFlushRange(ARGS_ADDR, sizeof(args) + args.length); - exeEntryPointAddress = load_dol_image(appboot_buff, &args); - - if(appboot_buff) - free(appboot_buff); + //! Reset HBC stub so we can leave correct from USB Loader GX to System Menu + memset((char *) 0x80001804, 0, 8); + DCFlushRange((char *) 0x80001804, 8); + /* cleaning up and load booter */ fadeout(imgdata); SDCard_deInit(); USBDevice_deInit(); StopGX(); free(imgdata); - //! Reset HBC stub so we can leave correct from USB Loader to System Menu - memset((char *) 0x80001804, 0, 8); - DCFlushRange((char *) 0x80001804, 8); - - if (exeEntryPointAddress == 0) - SYS_ResetSystem(SYS_RETURNTOMENU, 0, 0); - - exeEntryPoint = (entrypoint) exeEntryPointAddress; - /* cleaning up and load dol */ SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); _CPU_ISR_Disable (cookie); __exception_closeall (); diff --git a/source/video.c b/source/video.c index 80ae461e..9bd1e5ed 100644 --- a/source/video.c +++ b/source/video.c @@ -204,6 +204,9 @@ void StopGX() VIDEO_SetBlack(TRUE); VIDEO_Flush(); + VIDEO_WaitVSync(); + if (vmode->viTVMode & VI_NON_INTERLACE) + VIDEO_WaitVSync(); } /****************************************************************************