From 72ca446dc21f9e355d7f417ac62ae309efc628c4 Mon Sep 17 00:00:00 2001 From: nakasima Date: Wed, 26 Dec 2007 06:32:12 +0000 Subject: [PATCH] =?UTF-8?q?makegcdfirm=E3=81=B8ROM=E3=83=98=E3=83=83?= =?UTF-8?q?=E3=83=80=E3=83=86=E3=83=B3=E3=83=97=E3=83=AC=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=82=92=E6=8C=87=E5=AE=9A=E3=81=99=E3=82=8B=E3=82=AA=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@402 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/buildtools/modulerules.firm | 6 ++++++ build/libraries/init/ARM9/crt0_firm.c | 14 -------------- .../gcdfirm_header_twlj.template.sbin | Bin 16384 -> 16384 bytes build/tools/makegcdfirm/makegcdfirm.c | 17 +++++++++++------ build/tools/makegcdfirm/makegcdfirm.h | 2 +- build/tools/makegcdfirm/out_gcdfirm.c | 15 ++++++++++----- tools/bin/gcdfirm_header_twlj.template.sbin | Bin 16384 -> 0 bytes 7 files changed, 28 insertions(+), 26 deletions(-) delete mode 100644 tools/bin/gcdfirm_header_twlj.template.sbin diff --git a/build/buildtools/modulerules.firm b/build/buildtools/modulerules.firm index d0c0634d..79b3acc7 100644 --- a/build/buildtools/modulerules.firm +++ b/build/buildtools/modulerules.firm @@ -40,6 +40,12 @@ MAKEFIRM_DEFS += -DFIRM_ROOT='$(FIRM_ROOT)' \ -DMAKEFIRM_ARM7='$(basename $(MAKEFIRM_ARM7))' \ -DMAKEFIRM_RSA_PRVKEY='$(MAKEFIRM_RSA_PRVKEY)' \ +ifdef TWL_KEYSDIR +MAKEFIRM_FLAGS += -t'$(TWL_KEYSDIR)/blowfish/gcdfirm_header_twlj.template.sbin' +else +MAKEFIRM_FLAGS += -t'$(FIRM_ROOT)/build/tools/makegcdfirm/gcdfirm_header_twlj.template.sbin' +endif + FIRM_SDEPENDS_BIN = $(MAKEFIRM_RSA_PRVKEY) $(MAKEFIRM_ARM9) $(MAKEFIRM_ARM7) diff --git a/build/libraries/init/ARM9/crt0_firm.c b/build/libraries/init/ARM9/crt0_firm.c index bd051802..ac6bbda4 100644 --- a/build/libraries/init/ARM9/crt0_firm.c +++ b/build/libraries/init/ARM9/crt0_firm.c @@ -167,20 +167,6 @@ SDK_WEAK_SYMBOL asm void _start( void ) mov r2, #HW_DTCM_SIZE bl INITi_CpuClear32 -#if 0 - // BG/OBJ palette (1KB) - mov r0, #0 - ldr r1, =HW_PLTT - mov r2, #HW_PLTT_SIZE - bl INITi_CpuClear32 - - // OAM (1KB) - mov r0, #0x0200 - ldr r1, =HW_OAM - mov r2, #HW_OAM_SIZE - bl INITi_CpuClear32 -#endif - //---- load autoload block and initialize bss // bl INITi_DoAutoload #ifndef SDK_FINALROM // for IS-TWL-DEBUGGER diff --git a/build/tools/makegcdfirm/gcdfirm_header_twlj.template.sbin b/build/tools/makegcdfirm/gcdfirm_header_twlj.template.sbin index 60ed6b7f1c5e8d50dba1c3820d4dcff7ea73a12b..06a882131831fcf3eb05aa51ef31d09ace384e7d 100644 GIT binary patch delta 24 WcmZo@U~Fh$Tp+Nqp@AO>GXem2&k3af literal 16384 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 Cvf-cr diff --git a/build/tools/makegcdfirm/makegcdfirm.c b/build/tools/makegcdfirm/makegcdfirm.c index 9afa68ad..887cc4c8 100644 --- a/build/tools/makegcdfirm/makegcdfirm.c +++ b/build/tools/makegcdfirm/makegcdfirm.c @@ -24,7 +24,7 @@ #include "defval.h" #include "version.h" -static int makegcdfirm(const char *specFile, const char *norFile); +static int makegcdfirm(const char *specFile, const char *norFile, const char *rhFile); //--------------------------------------------------------------------------- // Main @@ -35,10 +35,11 @@ int main(int argc, char *argv[]) int n; int narg; char *gcdfirmFile; + char *rhFile = NULL; InitAppName(argv[0]); - while ((n = getopt(argc, argv, "D:hvpd")) != -1) + while ((n = getopt(argc, argv, "D:hvt:pd")) != -1) { switch (n) { @@ -50,6 +51,10 @@ int main(int argc, char *argv[]) AddDefVal(optarg); break; + case 't': + rhFile = optarg; + break; + case 'p': PrintMode = TRUE; break; @@ -70,7 +75,7 @@ int main(int argc, char *argv[]) gcdfirmFile = strdup(narg > 1 ? argv[optind + 1] : ChangeSuffix(argv[optind], DEFAULT_NORFIRM_SUFFIX)); - return makegcdfirm(argv[optind], gcdfirmFile); + return makegcdfirm(argv[optind], gcdfirmFile, rhFile); } usage: @@ -80,7 +85,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "NITRO-SDK Development Tool - %s - Make gcdfirm file \n" "Build %lu\n\n" - "Usage: %s [-phv] [-DNAME=VALUE ...] SPECFILE [NORFIRMFILE]\n\n", + "Usage: %s [-phv] [-tROMHEADERFILE] [-DNAME=VALUE ...] SPECFILE [NORFIRMFILE]\n\n", makegcdfirm, SDK_DATE_OF_LATEST_FILE, makegcdfirm); } return 1; @@ -91,7 +96,7 @@ int main(int argc, char *argv[]) // makegcdfirm //--------------------------------------------------------------------------- -static int makegcdfirm(const char *specFile, const char *norFile) +static int makegcdfirm(const char *specFile, const char *norFile, const char *rhFile) { debug_printf("makegcdfirm(): '%s' -> '%s'\n", specFile, norFile); @@ -102,5 +107,5 @@ static int makegcdfirm(const char *specFile, const char *norFile) return 1; } - return OutputGcdfirmFile(specFile, norFile) ? 0 : 1; + return OutputGcdfirmFile(specFile, norFile, rhFile) ? 0 : 1; } diff --git a/build/tools/makegcdfirm/makegcdfirm.h b/build/tools/makegcdfirm/makegcdfirm.h index c38c14a8..803ce06f 100644 --- a/build/tools/makegcdfirm/makegcdfirm.h +++ b/build/tools/makegcdfirm/makegcdfirm.h @@ -19,6 +19,6 @@ #include "misc.h" -BOOL OutputGcdfirmFile(const char *specFile, const char *gcdFile); +BOOL OutputGcdfirmFile(const char *specFile, const char *gcdFile, const char *rhFile); #endif //MAKEGCDFIRM_H_ diff --git a/build/tools/makegcdfirm/out_gcdfirm.c b/build/tools/makegcdfirm/out_gcdfirm.c index b755fac5..d5a6ae53 100644 --- a/build/tools/makegcdfirm/out_gcdfirm.c +++ b/build/tools/makegcdfirm/out_gcdfirm.c @@ -83,7 +83,7 @@ static BOOL NandFirm_Command(char * line, int num); static BOOL ERROR_Command(char * line, int num); static BOOL InitializeAesKey(void); -static BOOL InitializeGcdfirmFile(void); +static BOOL InitializeGcdfirmFile(const char *rhFile); static BOOL FinalizeGcdfirmFile(const char *gcdFile); static s32 Offset; // Current offset @@ -101,7 +101,7 @@ tErrorFlags errFlags; // Output - gcdfirm File //--------------------------------------------------------------------------- -BOOL OutputGcdfirmFile(const char *specFile, const char *gcdFile) +BOOL OutputGcdfirmFile(const char *specFile, const char *gcdFile, const char *rhFile) { char *buffer; BOOL state; @@ -118,7 +118,7 @@ BOOL OutputGcdfirmFile(const char *specFile, const char *gcdFile) specFileName = specFile; - state = InitializeGcdfirmFile() && ConstructGcdfirmFile(buffer) && + state = InitializeGcdfirmFile( rhFile ) && ConstructGcdfirmFile(buffer) && FinalizeGcdfirmFile(gcdFile) && CloseFile(); if (!state) @@ -933,9 +933,14 @@ static BOOL InitializeAesKey(void) // Output - Initialize Gcdfirm File //--------------------------------------------------------------------------- -static BOOL InitializeGcdfirmFile(void) +static BOOL InitializeGcdfirmFile(const char *rhFile) { - ReadRomHeaderFile( GetSrcPath(GetAppBaseName(), DEFAULT_ROMHEADER_TEMPLATE) ); + if ( !rhFile ) + { + rhFile = GetSrcPath(GetAppBaseName(), DEFAULT_ROMHEADER_TEMPLATE); + } + + ReadRomHeaderFile( rhFile ); memset(&signedContext.hash[FIRM_SIGNED_HASH_IDX_HASH_TABLE], 0x00, sizeof(signedContext.hash[0])); gcdHeader.h.w = wram_regs_init; diff --git a/tools/bin/gcdfirm_header_twlj.template.sbin b/tools/bin/gcdfirm_header_twlj.template.sbin deleted file mode 100644 index 60ed6b7f1c5e8d50dba1c3820d4dcff7ea73a12b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 Cvf-cr