From 3a7c7432ca31bd9e152f36d15edd6866dffd4f82 Mon Sep 17 00:00:00 2001 From: d0k3 Date: Wed, 18 Apr 2018 01:24:27 +0200 Subject: [PATCH] Always read CTR carts in 1MB chunks This fixes #346 --- arm9/source/gamecart/gamecart.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/arm9/source/gamecart/gamecart.c b/arm9/source/gamecart/gamecart.c index 24bc5e0..ce13912 100644 --- a/arm9/source/gamecart/gamecart.c +++ b/arm9/source/gamecart/gamecart.c @@ -140,9 +140,15 @@ u32 ReadCartSectors(void* buffer, u32 sector, u32 count, CartData* cdata) { if (!count) return 0; // actual cart reads if (cdata->cart_type & CART_CTR) { - Cart_Dummy(); - Cart_Dummy(); - CTR_CmdReadData(sector, 0x200, count, buffer8); + // don't read more than 1MB at once + const u32 max_read = 0x800; + u8* buff = buffer8; + for (u32 i = 0; i < count; i += max_read) { + Cart_Dummy(); + Cart_Dummy(); + CTR_CmdReadData(sector + i, 0x200, min(max_read, count - i), buff); + buff += max_read * 0x200; + } // overwrite the card2 savegame with 0xFF u32 card2_offset = getle32(cdata->header + 0x200); if ((card2_offset != 0xFFFFFFFF) &&