From f74d9ddfd72a64ba60ba6c5269d57c18711686a0 Mon Sep 17 00:00:00 2001 From: d0k3 Date: Wed, 27 Jun 2018 01:33:17 +0200 Subject: [PATCH] Include ARM9 footer when mounting .nds files --- arm9/source/game/nds.h | 3 +++ arm9/source/virtual/vgame.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/arm9/source/game/nds.h b/arm9/source/game/nds.h index 844cb7c..3974a0f 100644 --- a/arm9/source/game/nds.h +++ b/arm9/source/game/nds.h @@ -20,6 +20,9 @@ #define TWL_UNITCODE_TWLNTR 0x02 #define TWL_UNITCODE_TWL 0x03 +// see https://github.com/devkitPro/ndstool/blob/313b0be6440d3087b6d433c3ea057605d2c95197/source/header.cpp#L585-L595 +#define NDS_ARM9_FOOTER_MAGIC 0xDEC00621 + // see: http://problemkaputt.de/gbatek.htm#dscartridgeicontitle typedef struct { u16 version; diff --git a/arm9/source/virtual/vgame.c b/arm9/source/virtual/vgame.c index 13415f1..34ae28a 100644 --- a/arm9/source/virtual/vgame.c +++ b/arm9/source/virtual/vgame.c @@ -497,11 +497,14 @@ bool BuildVGameNdsDir(void) { n++; } - // ARM9 section + // ARM9 section (+ ARM9 section footer) if (twl->arm9_size) { + u32 f = 0; + ReadGameImageBytes(&f, offset_nds + twl->arm9_rom_offset + twl->arm9_size, sizeof(u32)); strncpy(templates[n].name, NAME_NDS_ARM9, 32); templates[n].offset = offset_nds + twl->arm9_rom_offset; templates[n].size = twl->arm9_size; + if (f == NDS_ARM9_FOOTER_MAGIC) templates[n].size += 0xC; templates[n].keyslot = 0xFF; templates[n].flags = 0; n++;