From 0f3fc2a5d18d77673dd63863f0b5aa964f94da9e Mon Sep 17 00:00:00 2001 From: d0k3 Date: Wed, 1 Nov 2017 18:05:30 +0100 Subject: [PATCH] Use vram0.tar instead of standard bin2o method --- Makefile | 53 +++++---------------------------------- resources/vram0.tar | Bin 0 -> 114688 bytes source/crypto/keydb.c | 11 ++++---- source/godmode.c | 38 +++++++++++++++------------- source/system/tar.c | 1 - source/system/vram0.h | 11 ++++++++ source/utils/scripting.c | 3 ++- 7 files changed, 44 insertions(+), 73 deletions(-) create mode 100644 resources/vram0.tar diff --git a/Makefile b/Makefile index 587bb17..ab86727 100644 --- a/Makefile +++ b/Makefile @@ -64,22 +64,14 @@ ifeq ($(SWITCH_SCREENS),1) CFLAGS += -DSWITCH_SCREENS endif +ifeq ($(AUTORUN_SCRIPT),1) + CFLAGS += -DAUTORUN_SCRIPT +endif + ifdef FIXED_BRIGHTNESS CFLAGS += -DFIXED_BRIGHTNESS=$(FIXED_BRIGHTNESS) endif -ifneq ("$(wildcard $(CURDIR)/../$(DATA)/README.md)","") - CFLAGS += -DHARDCODE_README -endif - -ifneq ("$(wildcard $(CURDIR)/../$(DATA)/aeskeydb.bin)","") - CFLAGS += -DHARDCODE_KEYS -endif - -ifneq ("$(wildcard $(CURDIR)/../$(DATA)/autorun.gm9)","") - CFLAGS += -DAUTORUN_SCRIPT -endif - CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions LDFLAGS = -T../link.ld -nostartfiles -g $(ARCH) -Wl,-Map,$(TARGET).map,-z,max-page-size=512 @@ -111,14 +103,7 @@ export DEPSDIR := $(CURDIR)/$(BUILD) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) -BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/README.md))) \ - $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/aeskeydb.bin))) \ - $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/autorun.gm9))) -ifeq ($(SAFEMODE),1) - BINFILES += $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/sm9*.*))) -else - BINFILES += $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/gm9*.*))) -endif +BINFILES := #--------------------------------------------------------------------------------- # use CXX for linking C++ projects, CC for standard C @@ -145,11 +130,7 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) -ifeq ("$(wildcard $(CURDIR)/$(DATA)/vram0.img)","") - export FTCOMMON := -D $(OUTPUT).elf $(OUTPUT_D)/screeninit.elf -C NDMA XDMA -else - export FTCOMMON := -A 0x18000000 -D $(OUTPUT).elf $(OUTPUT_D)/screeninit.elf $(CURDIR)/$(DATA)/vram0.img -C NDMA XDMA memcpy -endif +export FTCOMMON := -A 0x18000000 -D $(OUTPUT).elf $(OUTPUT_D)/screeninit.elf $(CURDIR)/resources/vram0.tar -C NDMA XDMA memcpy .PHONY: common clean all firm binary screeninit release @@ -214,28 +195,6 @@ $(OUTPUT).elf : $(OFILES) @$(OBJCOPY) --set-section-flags .bss=alloc,load,contents -O binary $< $@ @echo built ... $(notdir $@) -#--------------------------------------------------------------------------------- -# you need a rule like this for each extension you use as binary data -#--------------------------------------------------------------------------------- -%_qlz.h %.qlz.o: %.qlz -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) -#--------------------------------------------------------------------------------- -%_bin.h %.bin.o: %.bin -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) -#--------------------------------------------------------------------------------- -%_gm9.h %.gm9.o: %.gm9 -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) -#--------------------------------------------------------------------------------- -%_md.h %.md.o: %.md -#--------------------------------------------------------------------------------- - @echo $(notdir $<) - @$(bin2o) -include $(DEPENDS) diff --git a/resources/vram0.tar b/resources/vram0.tar new file mode 100644 index 0000000000000000000000000000000000000000..e5842bbc69e66e38e86339378ca28ee604f2efbf GIT binary patch literal 114688 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

&Wzf$#_ugtR&yj#0{@#@E+#1 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 literal 0 HcmV?d00001 diff --git a/source/crypto/keydb.c b/source/crypto/keydb.c index 68b64ed..c7c9bf7 100644 --- a/source/crypto/keydb.c +++ b/source/crypto/keydb.c @@ -2,9 +2,7 @@ #include "aes.h" #include "sha.h" #include "ff.h" -#ifdef HARDCODE_KEYS -#include "aeskeydb_bin.h" -#endif +#include "vram0.h" typedef struct { u8 slot; // keyslot, 0x00...0x39 @@ -123,16 +121,17 @@ u32 LoadKeyDb(const char* path_db, AesKeyInfo* keydb, u32 bsize) { f_close(&fp); } } else { - #ifdef HARDCODE_KEYS + // check for hardcoded key database + u64 aeskeydb_bin_size = 0; + void* aeskeydb_bin = FindVTarFileInfo(VRAM0_AESKEY_DB, &aeskeydb_bin_size, NULL); fsize = (aeskeydb_bin_size <= bsize) ? aeskeydb_bin_size : 0; if (fsize) memcpy(keydb, aeskeydb_bin, aeskeydb_bin_size); - #else + // try to load aeskeydb.bin file if (f_open(&fp, SUPPORT_PATH "/" KEYDB_NAME, FA_READ | FA_OPEN_EXISTING) == FR_OK) { if ((f_read(&fp, keydb, bsize, &fsize) != FR_OK) || (fsize >= bsize)) fsize = 0; f_close(&fp); } - #endif } u32 nkeys = 0; diff --git a/source/godmode.c b/source/godmode.c index 4c04bbe..7a4cbb4 100644 --- a/source/godmode.c +++ b/source/godmode.c @@ -28,17 +28,8 @@ #include "rtc.h" #include "power.h" #include "vff.h" +#include "vram0.h" -#include QLZ_SPLASH_H -#ifdef AUTORUN_SCRIPT -#include "autorun_gm9.h" -#endif -#ifdef HARDCODE_README -#include "README_md.h" -#else -#define README_md NULL -#define README_md_size 0 -#endif #define N_PANES 2 @@ -71,6 +62,7 @@ #define BOOTMENU_KEY BUTTON_START #endif + typedef struct { char path[256]; u32 cursor; @@ -1607,7 +1599,7 @@ u32 HomeMoreMenu(char* current_path) { int hsrestore = ((CheckHealthAndSafetyInject("1:") == 0) || (CheckHealthAndSafetyInject("4:") == 0)) ? (int) ++n_opt : -1; int clock = ++n_opt; int sysinfo = ++n_opt; - int readme = (README_md != NULL) ? (int) ++n_opt : -1; + int readme = (FindVTarFileInfo(VRAM0_README_MD, NULL, NULL)) ? (int) ++n_opt : -1; if (sdformat > 0) optionstr[sdformat - 1] = "SD format menu"; if (bonus > 0) optionstr[bonus - 1] = "Bonus drive setup"; @@ -1721,7 +1713,9 @@ u32 HomeMoreMenu(char* current_path) { return 0; } else if (user_select == readme) { // Display GodMode9 readme - MemToCViewer((const char*) README_md, README_md_size, "GodMode9 ReadMe Table of Contents"); + u64 README_md_size; + char* README_md = FindVTarFileInfo(VRAM0_README_MD, &README_md_size, NULL); + MemToCViewer(README_md, README_md_size, "GodMode9 ReadMe Table of Contents"); return 0; } else return 1; @@ -1729,6 +1723,7 @@ u32 HomeMoreMenu(char* current_path) { } u32 SplashInit(const char* modestr) { + void* splash = FindVTarFileInfo(VRAM0_SPLASH_QLZ, NULL, NULL); const char* namestr = FLAVOR " " VERSION; const char* loadstr = "booting..."; const u32 pos_xb = 10; @@ -1737,7 +1732,8 @@ u32 SplashInit(const char* modestr) { const u32 pos_yu = SCREEN_HEIGHT - 10 - GetDrawStringHeight(loadstr); ClearScreenF(true, true, COLOR_STD_BG); - QlzDecompress(TOP_SCREEN, QLZ_SPLASH, 0); + if (splash) QlzDecompress(TOP_SCREEN, splash, 0); + else DrawStringF(TOP_SCREEN, 10, 10, COLOR_STD_FONT, COLOR_TRANSPARENT, "(splash not found)"); if (modestr) DrawStringF(TOP_SCREEN, SCREEN_WIDTH_TOP - 10 - GetDrawStringWidth(modestr), SCREEN_HEIGHT - 10 - GetDrawStringHeight(modestr), COLOR_STD_FONT, COLOR_TRANSPARENT, modestr); @@ -2317,14 +2313,20 @@ u32 ScriptRunner(int entrypoint) { InitNandCrypto(entrypoint != ENTRY_B9S); InitExtFS(); - while (CheckButton(BUTTON_A)); // don't continue while A is held + while (HID_STATE); // wait until no buttons are pressed while (timer_msec( timer ) < 500); // show splash for at least 0.5 sec ClearScreenF(true, true, COLOR_STD_BG); // clear splash - // copy script to script buffer and run it - memset(SCRIPT_BUFFER, 0, SCRIPT_BUFFER_SIZE); - memcpy(SCRIPT_BUFFER, autorun_gm9, autorun_gm9_size); - ExecuteGM9Script(NULL); + // get script from VRAM0 TAR + u64 autorun_gm9_size = 0; + void* autorun_gm9 = FindVTarFileInfo(VRAM0_AUTORUN_GM9, &autorun_gm9_size, NULL); + + if (autorun_gm9 && autorun_gm9_size) { + // copy script to script buffer and run it + memset(SCRIPT_BUFFER, 0, SCRIPT_BUFFER_SIZE); + memcpy(SCRIPT_BUFFER, autorun_gm9, autorun_gm9_size); + ExecuteGM9Script(NULL); + } else ShowPrompt(false, "Compiled as script autorunner\nbut no autorun.gm9 provided.\n \nDerp!"); // deinit DeinitExtFS(); diff --git a/source/system/tar.c b/source/system/tar.c index 1b316a9..94107bf 100644 --- a/source/system/tar.c +++ b/source/system/tar.c @@ -79,7 +79,6 @@ void* FindTarFileInfo(void* tardata, void* tardata_end, const char* fname, u64* TarHeader* tar = tardata; if (ValidateTarHeader(tardata, tardata_end) != 0) break; - ShowPrompt(false, "%s\n%s", tar->fname, fname); if ((strncasecmp(tar->fname, fname, 100) == 0) && (tar->ftype == '0')) return GetTarFileInfo(tardata, NULL, fsize, is_dir); tardata = ((u8*) tardata) + sizeof(TarHeader) + align(ReadAsciiOctal(tar->fsize, 12), 512); diff --git a/source/system/vram0.h b/source/system/vram0.h index b94a27a..383d201 100644 --- a/source/system/vram0.h +++ b/source/system/vram0.h @@ -4,6 +4,17 @@ #include "tar.h" +// known file names inside VRAM0 TAR +#define VRAM0_AUTORUN_GM9 "autorun.gm9" +#define VRAM0_README_MD "README.md" +#define VRAM0_AESKEY_DB "aeskey.db" +#ifndef SAFEMODE +#define VRAM0_SPLASH_QLZ "gm9_splash.qlz" +#else +#define VRAM0_SPLASH_QLZ "sm9_splash_baby.qlz" +#endif + + #define VRAM0_OFFSET 0x18000000 #define VRAM0_LIMIT 0x00300000 diff --git a/source/utils/scripting.c b/source/utils/scripting.c index 947de19..5f147ce 100644 --- a/source/utils/scripting.c +++ b/source/utils/scripting.c @@ -823,11 +823,12 @@ bool run_line(const char* line_start, const char* line_end, u32* flags, char* er // checks for illegal ASCII symbols bool ValidateText(const char* text, u32 len) { + if (!len) return false; for (u32 i = 0; i < len; i++) { char c = text[i]; if ((c == '\r') && ((i+1) < len) && (text[i+1] != '\n')) return false; // CR without LF if ((c < 0x20) && (c != '\t') && (c != '\r') && (c != '\n')) return false; // illegal control char - if (c == 0xFF) return false; // other illegal char + if (c == 0xFF) return false; // 0xFF illegal char } return true; }