Allow building standalone script runners

... just include autorun.gm9 in the data folder
This commit is contained in:
d0k3 2017-09-08 15:39:06 +02:00
parent c094c6c192
commit c32908e4cf
5 changed files with 58 additions and 10 deletions

View File

@ -60,10 +60,14 @@ ifeq ($(SWITCH_SCREENS),1)
CFLAGS += -DSWITCH_SCREENS CFLAGS += -DSWITCH_SCREENS
endif endif
ifneq ("$(wildcard $(CURDIR)/data/aeskeydb.bin)","") ifneq ("$(wildcard $(CURDIR)/../$(DATA)/aeskeydb.bin)","")
CFLAGS += -DHARDCODE_KEYS CFLAGS += -DHARDCODE_KEYS
endif endif
ifneq ("$(wildcard $(CURDIR)/../$(DATA)/autorun.gm9)","")
CFLAGS += -DAUTORUN_SCRIPT
endif
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
LDFLAGS = -T../link.ld -nostartfiles -g $(ARCH) -Wl,-Map,$(TARGET).map LDFLAGS = -T../link.ld -nostartfiles -g $(ARCH) -Wl,-Map,$(TARGET).map
@ -95,11 +99,12 @@ export DEPSDIR := $(CURDIR)/$(BUILD)
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/gm9*.*))) \ BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/aeskeydb.bin))) \
$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/aeskeydb.bin))) $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/autorun.gm9)))
ifeq ($(SAFEMODE),1) ifeq ($(SAFEMODE),1)
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/sm9*.*))) \ BINFILES += $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/sm9*.*)))
$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/aeskeydb.bin))) else
BINFILES += $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/gm9*.*)))
endif endif
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@ -198,6 +203,11 @@ $(OUTPUT).elf : $(OFILES)
@$(bin2o) @$(bin2o)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
%_bin.h %.bin.o: %.bin %_bin.h %.bin.o: %.bin
#---------------------------------------------------------------------------------
@echo $(notdir $<)
@$(bin2o)
#---------------------------------------------------------------------------------
%_gm9.h %.gm9.o: %.gm9
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@echo $(notdir $<) @echo $(notdir $<)
@$(bin2o) @$(bin2o)

View File

@ -27,6 +27,9 @@
#include "rtc.h" #include "rtc.h"
#include "sysinfo.h" #include "sysinfo.h"
#include QLZ_SPLASH_H #include QLZ_SPLASH_H
#ifdef AUTORUN_SCRIPT
#include "autorun_gm9.h"
#endif
#define N_PANES 2 #define N_PANES 2
@ -1907,3 +1910,32 @@ u32 GodMode(bool is_b9s) {
return exit_mode; return exit_mode;
} }
#ifdef AUTORUN_SCRIPT
u32 ScriptRunner(bool is_b9s) {
// show splash and initialize
ClearScreenF(true, true, COLOR_STD_BG);
SplashInit();
u64 timer = timer_start();
InitSDCardFS();
AutoEmuNandBase(true);
InitNandCrypto(!is_b9s);
InitExtFS();
while (CheckButton(BUTTON_A)); // don't continue while A is held
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);
// deinit
DeinitExtFS();
DeinitSDCardFS();
return GODMODE_EXIT_REBOOT;
}
#endif

View File

@ -6,3 +6,4 @@
#define GODMODE_EXIT_POWEROFF 1 #define GODMODE_EXIT_POWEROFF 1
u32 GodMode(bool is_b9s); u32 GodMode(bool is_b9s);
u32 ScriptRunner(bool is_b9s);

View File

@ -9,7 +9,13 @@ void main(int argc, char** argv)
// Wait for ARM11 // Wait for ARM11
PXI_WaitRemote(PXI_READY); PXI_WaitRemote(PXI_READY);
#ifdef AUTORUN_SCRIPT
// Run the script runner
if (ScriptRunner(argc) == GODMODE_EXIT_REBOOT) Reboot();
else PowerOff();
#else
// Run the main program // Run the main program
if (GodMode(argc) == GODMODE_EXIT_REBOOT) Reboot(); if (GodMode(argc) == GODMODE_EXIT_REBOOT) Reboot();
else PowerOff(); else PowerOff();
#endif
} }

View File

@ -851,13 +851,12 @@ bool FileTextViewer(const char* path, bool as_script) {
} }
bool ExecuteGM9Script(const char* path_script) { bool ExecuteGM9Script(const char* path_script) {
// revert mount state?
char* script = (char*) SCRIPT_BUFFER; char* script = (char*) SCRIPT_BUFFER;
char* ptr = script; char* ptr = script;
// fetch script // fetch script - if no path is given, assume script already in script buffer
u32 script_size; u32 script_size = (path_script) ? FileGetData(path_script, (u8*) script, SCRIPT_MAX_SIZE, 0) : strnlen(script, SCRIPT_BUFFER_SIZE);
if (!(script_size = FileGetData(path_script, (u8*) script, SCRIPT_MAX_SIZE, 0))) if (!script_size || (script_size >= SCRIPT_BUFFER_SIZE))
return false; return false;
char* end = script + script_size; char* end = script + script_size;
*end = '\0'; *end = '\0';