From 75a23a15c325ed3abf9c29219014b98416ad7da8 Mon Sep 17 00:00:00 2001 From: d0k3 Date: Mon, 5 Nov 2018 00:19:41 +0100 Subject: [PATCH] Show cart ID and type on cart drive Fixes #435 --- arm9/source/filesys/fsdrive.c | 6 ++++++ arm9/source/virtual/vcart.c | 10 ++++++++++ arm9/source/virtual/vcart.h | 1 + 3 files changed, 17 insertions(+) diff --git a/arm9/source/filesys/fsdrive.c b/arm9/source/filesys/fsdrive.c index c1de794..34def9b 100644 --- a/arm9/source/filesys/fsdrive.c +++ b/arm9/source/filesys/fsdrive.c @@ -2,6 +2,7 @@ #include "fsgame.h" #include "fsinit.h" #include "virtual.h" +#include "vcart.h" #include "sddata.h" #include "image.h" #include "ui.h" @@ -85,6 +86,9 @@ bool GetRootDirContentsWorker(DirStruct* contents) { char sdlabel[16]; if (!GetFATVolumeLabel("0:", sdlabel)) snprintf(sdlabel, 16, "NOLABEL"); + + char carttype[16]; + GetVCartTypeString(carttype); // virtual root objects hacked in for (u32 i = 0; (i < NORM_FS+VIRT_FS) && (n_entries < MAX_DIR_ENTRIES); i++) { @@ -109,6 +113,8 @@ bool GetRootDirContentsWorker(DirStruct* contents) { (GetMountState() & GAME_NDS ) ? "NDS" : (GetMountState() & SYS_FIRM ) ? "FIRM" : (GetMountState() & GAME_TAD ) ? "DSIWARE" : "UNK", drvname[i]); + else if (*(drvnum[i]) == 'C') // Game cart handling + snprintf(entry->name, 32, "[%s] %s (%s)", drvnum[i], drvname[i], carttype); else if (*(drvnum[i]) == '0') // SD card handling snprintf(entry->name, 32, "[%s] %s (%s)", drvnum[i], drvname[i], sdlabel); else snprintf(entry->name, 32, "[%s] %s", drvnum[i], drvname[i]); diff --git a/arm9/source/virtual/vcart.c b/arm9/source/virtual/vcart.c index 71c32a1..3828f4e 100644 --- a/arm9/source/virtual/vcart.c +++ b/arm9/source/virtual/vcart.c @@ -70,3 +70,13 @@ int ReadVCartFile(const VirtualFile* vfile, void* buffer, u64 offset, u64 count) u64 GetVCartDriveSize(void) { return cart_init ? cdata->cart_size : 0; } + +void GetVCartTypeString(char* typestr) { + // typestr needs to be at least 11 + 1 chars big + if (!cart_init || !cdata) sprintf(typestr, "EMPTY"); + else sprintf(typestr, "%s%08lX", + (cdata->cart_type & CART_CTR) ? "CTR" : + (cdata->cart_type & CART_TWL) ? "TWL" : + (cdata->cart_type & CART_NTR) ? "NTR" : "???", + cdata->cart_id); +} diff --git a/arm9/source/virtual/vcart.h b/arm9/source/virtual/vcart.h index 6979219..9b3825d 100644 --- a/arm9/source/virtual/vcart.h +++ b/arm9/source/virtual/vcart.h @@ -8,3 +8,4 @@ bool ReadVCartDir(VirtualFile* vfile, VirtualDir* vdir); int ReadVCartFile(const VirtualFile* vfile, void* buffer, u64 offset, u64 count); // int WriteVCartFile(const VirtualFile* vfile, const void* buffer, u64 offset, u64 count); // no writes u64 GetVCartDriveSize(void); +void GetVCartTypeString(char* typestr);