Skip to content

Commit

Permalink
B4DS: Add support for *Cat Frenzy*
Browse files Browse the repository at this point in the history
Requires DS Debug console
  • Loading branch information
RocketRobz committed Jan 16, 2024
1 parent fc3fa09 commit 2cb5f3a
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 31 deletions.
2 changes: 1 addition & 1 deletion retail/arm9/include/dsiwaresSetForBootloader.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ static const char dsiWareForBootloader1[][4] = {
"KC5", // Castle Conqueror: Heroes
"KXC", // Castle Conqueror: Heroes 2
"KQN", // Castle Conqueror: Revolution
"KVX", // Cat Frenzy (bootloaderi-exclusive)
"KVX", // Cat Frenzy
"KCV", // Cave Story
"KCT", // Chess Challenge!
"KBG", // Chotto DS Bun ga Kuzenshuu: Sekai no Bungaku 20
Expand Down
21 changes: 17 additions & 4 deletions retail/bootloader/source/arm7/dsi2ds_patches.c
Original file line number Diff line number Diff line change
Expand Up @@ -6623,14 +6623,15 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {

// Cat Frenzy (USA)
// Cat Frenzy (Europe)
// May require 8MB of RAM
/* else if (strcmp(romTid, "KVXE") == 0 || strcmp(romTid, "KVXP") == 0) {
// Requires 8MB of RAM
else if ((strcmp(romTid, "KVXE") == 0 || strcmp(romTid, "KVXP") == 0) && extendedMemory) {
useSharedFont = twlFontFound;
*(u32*)0x020050EC = 0xE1A00000; // nop
*(u32*)0x020176F4 = 0xE1A00000; // nop
tonccpy((u32*)0x02018278, dsiSaveGetResultCode, 0xC);
*(u32*)0x0201AED4 = 0xE1A00000; // nop
patchInitDSiWare(0x02021B28, heapEnd);
*(u32*)0x02021EB4 = *(u32*)0x02004FE8;
// *(u32*)0x02021EB4 = *(u32*)0x02004FE8;
patchUserSettingsReadDSiWare(0x0202301C);
*(u32*)0x02027F58 = 0xE1A00000; // nop
*(u32*)0x02027F60 = 0xE1A00000; // nop
Expand All @@ -6646,7 +6647,19 @@ void patchDSiModeToDSMode(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {
setBL(0x020295AC, (u32)dsiSaveRead); // dsiSaveReadAsync
setBL(0x020295DC, (u32)dsiSaveClose);
*(u32*)0x020296D0 = 0xE1A00000; // nop
} */
if (!useSharedFont) {
if (romTid[3] == 'E') {
*(u32*)0x020544D4 = 0xE1A00000; // nop (Disable NFTR loading from TWLNAND)
} else {
*(u32*)0x0205456C = 0xE1A00000; // nop (Disable NFTR loading from TWLNAND)
}
}
/* if (romTid[3] == 'E') {
*(u32*)0x02054894 = 0xE3A0470A; // mov r4, #0x280000
} else {
*(u32*)0x0205492C = 0xE3A0470A; // mov r4, #0x280000
} */
}

// Cave Story (USA)
else if (strcmp(romTid, "KCVE") == 0) {
Expand Down
66 changes: 40 additions & 26 deletions retail/bootloaderi/source/arm7/patch_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -4115,35 +4115,49 @@ void dsiWarePatch(cardengineArm9* ce9, const tNDSHeader* ndsHeader) {

// Cat Frenzy (USA)
// Cat Frenzy (Europe)
else if ((strcmp(romTid, "KVXE") == 0 || strcmp(romTid, "KVXP") == 0) && saveOnFlashcard) {
tonccpy((u32*)0x02018278, dsiSaveGetResultCode, 0xC);
setBL(0x020293A0, (u32)dsiSaveGetInfo);
setBL(0x020293D4, (u32)dsiSaveCreate);
setBL(0x020293FC, (u32)dsiSaveOpen);
setBL(0x02029424, (u32)dsiSaveSetLength);
setBL(0x0202943C, (u32)dsiSaveWrite);
setBL(0x02029444, (u32)dsiSaveClose);
setBL(0x020294A8, (u32)dsiSaveOpen);
setBL(0x020294D0, (u32)dsiSaveSetLength);
setBL(0x02029554, (u32)dsiSaveWrite); // dsiSaveWriteAsync
setBL(0x020295AC, (u32)dsiSaveRead); // dsiSaveReadAsync
setBL(0x020295DC, (u32)dsiSaveClose);
else if (strcmp(romTid, "KVXE") == 0 || strcmp(romTid, "KVXP") == 0) {
if (saveOnFlashcard) {
tonccpy((u32*)0x02018278, dsiSaveGetResultCode, 0xC);
setBL(0x020293A0, (u32)dsiSaveGetInfo);
setBL(0x020293D4, (u32)dsiSaveCreate);
setBL(0x020293FC, (u32)dsiSaveOpen);
setBL(0x02029424, (u32)dsiSaveSetLength);
setBL(0x0202943C, (u32)dsiSaveWrite);
setBL(0x02029444, (u32)dsiSaveClose);
setBL(0x020294A8, (u32)dsiSaveOpen);
setBL(0x020294D0, (u32)dsiSaveSetLength);
setBL(0x02029554, (u32)dsiSaveWrite); // dsiSaveWriteAsync
setBL(0x020295AC, (u32)dsiSaveRead); // dsiSaveReadAsync
setBL(0x020295DC, (u32)dsiSaveClose);
}
if (!twlFontFound) {
if (romTid[3] == 'E') {
*(u32*)0x020544D4 = 0xE1A00000; // nop (Disable NFTR loading from TWLNAND)
} else {
*(u32*)0x0205456C = 0xE1A00000; // nop (Disable NFTR loading from TWLNAND)
}
}
}

// Mew Mew Chamber (Japan)
else if (strcmp(romTid, "KVXJ") == 0 && saveOnFlashcard) {
tonccpy((u32*)0x02018254, dsiSaveGetResultCode, 0xC);
setBL(0x0202929C, (u32)dsiSaveGetInfo);
setBL(0x020292D0, (u32)dsiSaveCreate);
setBL(0x020292F8, (u32)dsiSaveOpen);
setBL(0x02029320, (u32)dsiSaveSetLength);
setBL(0x02029338, (u32)dsiSaveWrite);
setBL(0x02029340, (u32)dsiSaveClose);
setBL(0x020293A4, (u32)dsiSaveOpen);
setBL(0x020293CC, (u32)dsiSaveSetLength);
setBL(0x02029450, (u32)dsiSaveWrite); // dsiSaveWriteAsync
setBL(0x020294A8, (u32)dsiSaveRead); // dsiSaveReadAsync
setBL(0x020294D8, (u32)dsiSaveClose);
else if (strcmp(romTid, "KVXJ") == 0) {
if (saveOnFlashcard) {
tonccpy((u32*)0x02018254, dsiSaveGetResultCode, 0xC);
setBL(0x0202929C, (u32)dsiSaveGetInfo);
setBL(0x020292D0, (u32)dsiSaveCreate);
setBL(0x020292F8, (u32)dsiSaveOpen);
setBL(0x02029320, (u32)dsiSaveSetLength);
setBL(0x02029338, (u32)dsiSaveWrite);
setBL(0x02029340, (u32)dsiSaveClose);
setBL(0x020293A4, (u32)dsiSaveOpen);
setBL(0x020293CC, (u32)dsiSaveSetLength);
setBL(0x02029450, (u32)dsiSaveWrite); // dsiSaveWriteAsync
setBL(0x020294A8, (u32)dsiSaveRead); // dsiSaveReadAsync
setBL(0x020294D8, (u32)dsiSaveClose);
}
if (!twlFontFound) {
*(u32*)0x02051F08 = 0xE1A00000; // nop (Disable NFTR loading from TWLNAND)
}
}

// Cave Story (USA)
Expand Down

0 comments on commit 2cb5f3a

Please sign in to comment.