Skip to content

Commit

Permalink
Fix #1581, #1653
Browse files Browse the repository at this point in the history
  • Loading branch information
RocketRobz committed Jan 16, 2024
1 parent 897b24b commit 8c73290
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 34 deletions.
2 changes: 1 addition & 1 deletion retail/cardengine/arm7/source/cardengine.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ static bool customMusic = false;
static bool wifiIrq = false;
static int wifiIrqTimer = 0;
#endif
bool returnToMenu = false;
// bool returnToMenu = false;
bool isSdk5Set = false;

static const tNDSHeader* ndsHeader = NULL;
Expand Down
13 changes: 8 additions & 5 deletions retail/cardengine/arm7/source/inGameMenu.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ extern u32 valueBits;

extern vu32* volatile sharedAddr;
extern bool ipcEveryFrame;
extern bool returnToMenu;
// extern bool returnToMenu;

extern void rebootConsole(void);
extern void reset(void);
Expand Down Expand Up @@ -102,9 +102,9 @@ void inGameMenu(void) {
while (REG_VCOUNT == 191) swiDelay(100);

switch (sharedAddr[4]) {
case 0x54495845: // EXIT
/* case 0x54495845: // EXIT
exitMenu = true;
break;
break; */
case 0x54455352: // RSET
case 0x54495551: // QUIT
exitMenu = true;
Expand Down Expand Up @@ -159,14 +159,17 @@ void inGameMenu(void) {
break;
}

if (!exitMenu) {
if (sharedAddr[4] == 0x54495845) { // EXIT
// returnToMenu = (sharedAddr[1]);
exitMenu = true;
} else if (!exitMenu) {
sharedAddr[4] = 0x554E454D; // MENU
}
}
}

sharedAddr[0] = errorBak;
sharedAddr[4] = 0x54495845; // EXIT
sharedAddr[4] = 0;
sharedAddr[7] -= 0x10000000; // Clear time receive flag
timeTillStatusRefresh = 7;

Expand Down
6 changes: 5 additions & 1 deletion retail/cardenginei/arm7/source/cardengine.c
Original file line number Diff line number Diff line change
Expand Up @@ -1542,10 +1542,12 @@ void myIrqHandlerVBlank(void) {
if (language >= 0 && language <= 7 && languageTimer < 60*3) {
// Change language
personalData->language = language;
#ifndef TWLSDK
if (languageAddr > 0) {
// Extra measure for specific games
*languageAddr = language;
}
#endif
languageTimer++;
}

Expand Down Expand Up @@ -1598,11 +1600,13 @@ void myIrqHandlerVBlank(void) {
funcsUnpatched = true;
}

#ifndef TWLSDK
if (!(valueBits & gameOnFlashcard) && !(valueBits & ROMinRAM) && isSdEjected()) {
tonccpy((u32*)0x02000300, sr_data_error, 0x020);
i2cWriteRegister(0x4A, 0x70, 0x01);
i2cWriteRegister(0x4A, 0x11, 0x01); // Reboot into error screen if SD card is removed
}
#endif

/* #ifndef TWLSDK
if (valueBits & isDlp) {
Expand All @@ -1613,7 +1617,7 @@ void myIrqHandlerVBlank(void) {
}
#endif */

if ((0 == (REG_KEYINPUT & igmHotkey) && 0 == (REG_EXTKEYINPUT & (((igmHotkey >> 10) & 3) | ((igmHotkey >> 6) & 0xC0))) && (valueBits & igmAccessible) && !wifiIrq) || returnToMenu || sharedAddr[5] == 0x4C4D4749 /* IGML */) {
if ((0 == (REG_KEYINPUT & igmHotkey) && 0 == (REG_EXTKEYINPUT & (((igmHotkey >> 10) & 3) | ((igmHotkey >> 6) & 0xC0))) && (valueBits & igmAccessible) && !wifiIrq) /* || returnToMenu */ || sharedAddr[5] == 0x4C4D4749 /* IGML */) {
#ifdef TWLSDK
igmText = (struct IgmText *)INGAME_MENU_LOCATION;
i2cWriteRegister(0x4A, 0x12, 0x00);
Expand Down
19 changes: 11 additions & 8 deletions retail/cardenginei/arm7/source/inGameMenu.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ extern u8 consoleModel;

extern vu32* volatile sharedAddr;
extern bool ipcEveryFrame;
extern bool returnToMenu;
// extern bool returnToMenu;

extern struct IgmText *igmText;

Expand Down Expand Up @@ -53,7 +53,7 @@ void biosRead(void* dst, const void* src, u32 len)
volatile int timeTillStatusRefresh = 7;

void inGameMenu(void) {
returnToMenu = false;
// returnToMenu = false;
sharedAddr[4] = 0x554E454D; // 'MENU'
u32 errorBak = sharedAddr[0];
IPC_SendSync(0x9);
Expand Down Expand Up @@ -122,9 +122,9 @@ void inGameMenu(void) {
while (REG_VCOUNT == 191) swiDelay(100);

switch (sharedAddr[4]) {
case 0x54495845: // EXIT
/* case 0x54495845: // EXIT
exitMenu = true;
break;
break; */
case 0x54455352: // RSET
exitMenu = true;
timeTillStatusRefresh = 7;
Expand Down Expand Up @@ -152,10 +152,10 @@ void inGameMenu(void) {
dumpRam();
exitMenu = true;
break;
case 0x50455453: // STEP
/* case 0x50455453: // STEP
returnToMenu = true;
exitMenu = true;
break;
break; */
case 0x50505353: // SSPP
prepareScreenshot();
break;
Expand Down Expand Up @@ -208,14 +208,17 @@ void inGameMenu(void) {
break;
}

if (!exitMenu) {
if (sharedAddr[4] == 0x54495845) { // EXIT
// returnToMenu = (sharedAddr[1]);
exitMenu = true;
} else if (!exitMenu) {
sharedAddr[4] = 0x554E454D; // MENU
}
}
}

sharedAddr[0] = errorBak;
sharedAddr[4] = 0x54495845; // EXIT
sharedAddr[4] = 0;
sharedAddr[7] -= 0x10000000; // Clear time receive flag
timeTillStatusRefresh = 7;

Expand Down
10 changes: 5 additions & 5 deletions retail/cardenginei/arm7_dsiware/source/cardengine.c
Original file line number Diff line number Diff line change
Expand Up @@ -717,10 +717,10 @@ void myIrqHandlerVBlank(void) {
if (language >= 0 && language <= 7 && languageTimer < 60*3) {
// Change language
personalData->language = language;
if (languageAddr > 0) {
/* if (languageAddr > 0) {
// Extra measure for specific games
*languageAddr = language;
}
} */
languageTimer++;
}

Expand All @@ -743,13 +743,13 @@ void myIrqHandlerVBlank(void) {
funcsUnpatched = true;
}

if (isSdEjected()) {
/* if (isSdEjected()) {
tonccpy((u32*)0x02000300, sr_data_error, 0x020);
i2cWriteRegister(0x4A, 0x70, 0x01);
i2cWriteRegister(0x4A, 0x11, 0x01); // Reboot into error screen if SD card is removed
}
} */

if ((0 == (REG_KEYINPUT & igmHotkey) && 0 == (REG_EXTKEYINPUT & (((igmHotkey >> 10) & 3) | ((igmHotkey >> 6) & 0xC0))) && (valueBits & igmAccessible) && !wifiIrq) || returnToMenu || sharedAddr[5] == 0x4C4D4749 /* IGML */) {
if ((0 == (REG_KEYINPUT & igmHotkey) && 0 == (REG_EXTKEYINPUT & (((igmHotkey >> 10) & 3) | ((igmHotkey >> 6) & 0xC0))) && (valueBits & igmAccessible) && !wifiIrq) /* || returnToMenu */ || sharedAddr[5] == 0x4C4D4749 /* IGML */) {
bakData();
inGameMenu();
restoreBakData();
Expand Down
21 changes: 13 additions & 8 deletions retail/cardenginei/arm7_dsiware/source/inGameMenu.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ extern u8 consoleModel;

extern vu32* volatile sharedAddr;
extern bool ipcEveryFrame;
extern bool returnToMenu;
// extern bool returnToMenu;

extern struct IgmText *igmText;

Expand Down Expand Up @@ -53,8 +53,9 @@ void biosRead(void* dst, const void* src, u32 len)
volatile int timeTillStatusRefresh = 7;

void inGameMenu(void) {
returnToMenu = false;
// returnToMenu = false;
sharedAddr[4] = 0x554E454D; // 'MENU'
u32 errorBak = sharedAddr[0];
IPC_SendSync(0x9);
REG_MASTER_VOLUME = 0;
int oldIME = enterCriticalSection();
Expand Down Expand Up @@ -121,9 +122,9 @@ void inGameMenu(void) {
while (REG_VCOUNT == 191) swiDelay(100);

switch (sharedAddr[4]) {
case 0x54495845: // EXIT
/* case 0x54495845: // EXIT
exitMenu = true;
break;
break; */
case 0x54455352: // RSET
exitMenu = true;
timeTillStatusRefresh = 7;
Expand All @@ -150,10 +151,10 @@ void inGameMenu(void) {
dumpRam();
exitMenu = true;
break;
case 0x50455453: // STEP
/* case 0x50455453: // STEP
returnToMenu = true;
exitMenu = true;
break;
break; */
case 0x50505353: // SSPP
prepareScreenshot();
break;
Expand Down Expand Up @@ -206,13 +207,17 @@ void inGameMenu(void) {
break;
}

if (!exitMenu) {
if (sharedAddr[4] == 0x54495845) { // EXIT
// returnToMenu = (sharedAddr[1]);
exitMenu = true;
} else if (!exitMenu) {
sharedAddr[4] = 0x554E454D; // MENU
}
}
}

sharedAddr[4] = 0x54495845; // EXIT
sharedAddr[0] = errorBak;
sharedAddr[4] = 0;
sharedAddr[7] -= 0x10000000; // Clear time receive flag
timeTillStatusRefresh = 7;

Expand Down
17 changes: 11 additions & 6 deletions retail/cardenginei/arm9_igm/source/inGameMenu.c
Original file line number Diff line number Diff line change
Expand Up @@ -888,7 +888,9 @@ void inGameMenu(s32 *mainScreen, u32 consoleModel, s32 *exceptionRegisters) {
while (REG_VCOUNT != 191) mySwiDelay(100);
while (REG_VCOUNT == 191) mySwiDelay(100);
} while(KEYS & KEY_A);
// sharedAddr[1] = 0;
sharedAddr[4] = 0x54495845; // EXIT
while (sharedAddr[4] != 0) swiDelay(100);
break;
case MENU_RESET:
extern bool exceptionPrinted;
Expand All @@ -910,8 +912,10 @@ void inGameMenu(s32 *mainScreen, u32 consoleModel, s32 *exceptionRegisters) {
while (REG_VCOUNT == 191) mySwiDelay(100);
}
#else
// sharedAddr[1] = 0;
sharedAddr[3] = 0x444D4152; // RAMD
sharedAddr[4] = 0x54495845; // EXIT
while (sharedAddr[4] != 0) swiDelay(100);
#endif
break;
case MENU_OPTIONS:
Expand All @@ -932,17 +936,18 @@ void inGameMenu(s32 *mainScreen, u32 consoleModel, s32 *exceptionRegisters) {
while (REG_VCOUNT != 191) mySwiDelay(100);
while (REG_VCOUNT == 191) mySwiDelay(100);
} while(KEYS & KEY_B);
// sharedAddr[1] = 0;
sharedAddr[4] = 0x54495845; // EXIT
}
#ifndef B4DS
else if (KEYS & KEY_R && !exception) {
while (sharedAddr[4] != 0) swiDelay(100);
} /* else if (KEYS & KEY_R && !exception) {
do {
while (REG_VCOUNT != 191) mySwiDelay(100);
while (REG_VCOUNT == 191) mySwiDelay(100);
} while(KEYS & KEY_R);
sharedAddr[4] = 0x50455453; // STEP
}
#endif
sharedAddr[1] = 1;
sharedAddr[4] = 0x54495845; // EXIT
while (sharedAddr[4] != 0) swiDelay(100);
} */
}

tonccpy(BG_MAP_RAM_SUB(15), bgMapBak, sizeof(bgMapBak)); // Restore BG_MAP_RAM
Expand Down

0 comments on commit 8c73290

Please sign in to comment.