From 7a7bc96a9b353f7d9e2b7ca1fcef6701a456d107 Mon Sep 17 00:00:00 2001 From: d0k3 Date: Sun, 12 Feb 2017 16:00:59 +0100 Subject: [PATCH] Full mount compatibility for all known FIRM versions --- source/game/firm.h | 2 +- source/virtual/vgame.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/source/game/firm.h b/source/game/firm.h index 06b8d84..72d33b8 100644 --- a/source/game/firm.h +++ b/source/game/firm.h @@ -8,8 +8,8 @@ #define SECRET_NAME "secret_sector.bin" #define FIRM_MAX_SIZE 0x400000 // 4MB, due to FIRM partition size +#define ARM11NCCH_OFFSET 0, 0x2A000, 0x2B000, 0x2C000 #define ARM9BIN_OFFSET 0x800 -#define ARM11V2_OFFSET 0x2B000 // see: https://www.3dbrew.org/wiki/FIRM#Firmware_Section_Headers typedef struct { diff --git a/source/virtual/vgame.c b/source/virtual/vgame.c index 3909a1f..a468d21 100644 --- a/source/virtual/vgame.c +++ b/source/virtual/vgame.c @@ -414,9 +414,10 @@ bool BuildVGameFirmDir(void) { n++; } } else if (section->type == 1) { // ARM11 section, search for modules + const u32 arm11_ncch_offset[] = { ARM11NCCH_OFFSET }; NcchHeader firm_ncch; - for (u32 v = 0; v < 2; v++) { - u32 start = v ? ARM11V2_OFFSET : 0; + for (u32 v = 0; v < sizeof(arm11_ncch_offset) / sizeof(u32); v++) { + u32 start = arm11_ncch_offset[v]; for (u32 p = start; p < section->size; p += firm_ncch.size * NCCH_MEDIA_UNIT) { char name[8]; if ((ReadImageBytes((u8*) &firm_ncch, section->offset + p, 0x200) != 0) ||