Skip to content

Commit 3d1e3ad

Browse files
committed
Fix screen swap not working with screen color filter and/or DS Phat colors enabled
1 parent c20d596 commit 3d1e3ad

File tree

6 files changed

+44
-41
lines changed

6 files changed

+44
-41
lines changed

retail/cardengine/arm7/source/cardengine.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -415,10 +415,12 @@ void myIrqHandlerVBlank(void) {
415415
reset();
416416
}
417417

418+
u8 screenIpc = 0x6;
419+
418420
if (0 == (REG_KEYINPUT & screenSwapHotkey) && 0 == (REG_EXTKEYINPUT & (((screenSwapHotkey >> 10) & 3) | ((screenSwapHotkey >> 6) & 0xC0)))) {
419421
if (swapTimer == 60){
420422
swapTimer = 0;
421-
IPC_SendSync(0x7);
423+
screenIpc = 0x7;
422424
mainScreen++;
423425
if (mainScreen > 2) {
424426
mainScreen = 0;
@@ -522,7 +524,7 @@ void myIrqHandlerVBlank(void) {
522524

523525
// Swap screens
524526
if (mainScreen > 0) {
525-
IPC_SendSync(0x6);
527+
IPC_SendSync(screenIpc);
526528
}
527529

528530
if (sharedAddr[0] == 0x524F5245) { // 'EROR'

retail/cardengine/arm9/source/cardengine.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -643,17 +643,16 @@ void myIrqHandlerIPC(void) {
643643
break;
644644
#endif // FOTO
645645
#endif // NODSIWARE
646+
case 0x7:
647+
ce9->mainScreen++;
648+
if(ce9->mainScreen > 2)
649+
ce9->mainScreen = 0;
646650
case 0x6:
647651
if(ce9->mainScreen == 1)
648652
REG_POWERCNT &= ~POWER_SWAP_LCDS;
649653
else if(ce9->mainScreen == 2)
650654
REG_POWERCNT |= POWER_SWAP_LCDS;
651655
break;
652-
case 0x7:
653-
ce9->mainScreen++;
654-
if(ce9->mainScreen > 2)
655-
ce9->mainScreen = 0;
656-
break;
657656
case 0x9:
658657
inGameMenu((s32*)0);
659658
break;

retail/cardenginei/arm7/source/cardengine.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,10 +1842,22 @@ void myIrqHandlerVBlank(void) {
18421842
}
18431843
}
18441844

1845+
if (afterSwapTimer > 0) {
1846+
if (afterSwapTimer == 60*3) {
1847+
if (lockMutex(&saveMutex)) {
1848+
saveMainScreenSetting();
1849+
}
1850+
unlockMutex(&saveMutex);
1851+
afterSwapTimer = 0;
1852+
} else afterSwapTimer++;
1853+
}
1854+
1855+
u8 screenIpc = 0x6;
1856+
18451857
if (0 == (REG_KEYINPUT & screenSwapHotkey) && 0 == (REG_EXTKEYINPUT & (((screenSwapHotkey >> 10) & 3) | ((screenSwapHotkey >> 6) & 0xC0)))) {
18461858
if (swapTimer == 60){
18471859
swapTimer = 0;
1848-
IPC_SendSync(0x7);
1860+
screenIpc = 0x7;
18491861
mainScreen++;
18501862
if (mainScreen > 2) {
18511863
mainScreen = 0;
@@ -1857,16 +1869,6 @@ void myIrqHandlerVBlank(void) {
18571869
swapTimer = 0;
18581870
}
18591871

1860-
if (afterSwapTimer > 0) {
1861-
if (afterSwapTimer == 60*3) {
1862-
if (lockMutex(&saveMutex)) {
1863-
saveMainScreenSetting();
1864-
}
1865-
unlockMutex(&saveMutex);
1866-
afterSwapTimer = 0;
1867-
} else afterSwapTimer++;
1868-
}
1869-
18701872
#ifdef TWLSDK
18711873
if (sharedAddr[3] == (vu32)0x54495845) {
18721874
returnToLoader(false);
@@ -1999,7 +2001,7 @@ void myIrqHandlerVBlank(void) {
19992001

20002002
// Fix ARM9 VCount IRQ settings for color LUT and/or swap screens
20012003
if ((valueBits & useColorLut) || (mainScreen > 0)) {
2002-
IPC_SendSync(0x6);
2004+
IPC_SendSync(screenIpc);
20032005
}
20042006

20052007
if (sharedAddr[0] == 0x524F5245) { // 'EROR'

retail/cardenginei/arm7_dsiware/source/cardengine.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -757,10 +757,22 @@ void myIrqHandlerVBlank(void) {
757757
restoreBakData();
758758
}
759759

760+
if (afterSwapTimer > 0) {
761+
if (afterSwapTimer == 60*3) {
762+
bakData();
763+
saveMainScreenSetting();
764+
restoreBakData();
765+
766+
afterSwapTimer = 0;
767+
} else afterSwapTimer++;
768+
}
769+
770+
u8 screenIpc = 0x6;
771+
760772
if (0 == (REG_KEYINPUT & screenSwapHotkey) && 0 == (REG_EXTKEYINPUT & (((screenSwapHotkey >> 10) & 3) | ((screenSwapHotkey >> 6) & 0xC0)))) {
761773
if (swapTimer == 60){
762774
swapTimer = 0;
763-
IPC_SendSync(0x7);
775+
screenIpc = 0x7;
764776
mainScreen++;
765777
if (mainScreen > 2) {
766778
mainScreen = 0;
@@ -772,16 +784,6 @@ void myIrqHandlerVBlank(void) {
772784
swapTimer = 0;
773785
}
774786

775-
if (afterSwapTimer > 0) {
776-
if (afterSwapTimer == 60*3) {
777-
bakData();
778-
saveMainScreenSetting();
779-
restoreBakData();
780-
781-
afterSwapTimer = 0;
782-
} else afterSwapTimer++;
783-
}
784-
785787
if (0 == (REG_KEYINPUT & (KEY_L | KEY_R | KEY_DOWN | KEY_B))) {
786788
if (returnTimer == 60 * 2) {
787789
IPC_SendSync(0x5);
@@ -886,7 +888,7 @@ void myIrqHandlerVBlank(void) {
886888

887889
// Fix ARM9 VCount IRQ settings for color LUT and/or swap screens
888890
if ((valueBits & useColorLut) || (mainScreen > 0)) {
889-
IPC_SendSync(0x6);
891+
IPC_SendSync(screenIpc);
890892
}
891893

892894
if (sharedAddr[0] == 0x524F5245) { // 'EROR'

retail/cardenginei/arm9/source/cardengine.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1654,6 +1654,10 @@ void myIrqHandlerIPC(void) {
16541654
reset(0xFFFFFFFF, 0);
16551655
#endif
16561656
break;
1657+
case 0x7:
1658+
ce9->mainScreen++;
1659+
if(ce9->mainScreen > 2)
1660+
ce9->mainScreen = 0;
16571661
case 0x6: {
16581662
if (ce9->valueBits & useColorLut) {
16591663
if (!(ce9->valueBits & colorLutBlockVCount)) {
@@ -1698,11 +1702,6 @@ void myIrqHandlerIPC(void) {
16981702
else if (ce9->mainScreen == 2)
16991703
REG_POWERCNT |= POWER_SWAP_LCDS;
17001704
} break;
1701-
case 0x7:
1702-
ce9->mainScreen++;
1703-
if(ce9->mainScreen > 2)
1704-
ce9->mainScreen = 0;
1705-
break;
17061705
case 0x9:
17071706
inGameMenu((s32*)0);
17081707
break;

retail/cardenginei/arm9_dsiware/source/cardengine.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ void myIrqHandlerIPC(void) {
298298
sharedAddr[3] = 0x54495845;
299299
reset(0, 0);
300300
break;
301+
case 0x7:
302+
ce9->mainScreen++;
303+
if(ce9->mainScreen > 2)
304+
ce9->mainScreen = 0;
301305
case 0x6: {
302306
if (ce9->valueBits & useColorLut) {
303307
if (!(ce9->valueBits & colorLutBlockVCount)) {
@@ -319,11 +323,6 @@ void myIrqHandlerIPC(void) {
319323
else if(ce9->mainScreen == 2)
320324
REG_POWERCNT |= POWER_SWAP_LCDS;
321325
} break;
322-
case 0x7:
323-
ce9->mainScreen++;
324-
if(ce9->mainScreen > 2)
325-
ce9->mainScreen = 0;
326-
break;
327326
case 0x9:
328327
inGameMenu((s32*)0);
329328
break;

0 commit comments

Comments
 (0)