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) &&