Skip to content

Commit 95df889

Browse files
committed
slot1launch: Improve Slot-1 reset
Ported from Lorenzooone/Simple-DS-Slot-1-Launcher@a9386b6
1 parent 5cff876 commit 95df889

File tree

4 files changed

+20
-86
lines changed

4 files changed

+20
-86
lines changed

slot1launch/arm7/source/main.c

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,8 @@
2020
#include <nds/arm7/input.h>
2121
#include <nds/system.h>
2222

23-
#include "resetslot.h"
24-
25-
void VcountHandler() {
26-
inputGetAndSend();
27-
}
28-
2923
void VblankHandler(void) {
24+
inputGetAndSend();
3025
}
3126

3227
int main(void) {
@@ -39,26 +34,14 @@ int main(void) {
3934
initClockIRQ();
4035
fifoInit();
4136

42-
SetYtrigger(80);
43-
4437
installSystemFIFO();
4538

46-
irqSet(IRQ_VCOUNT, VcountHandler);
4739
irqSet(IRQ_VBLANK, VblankHandler);
48-
49-
irqEnable( IRQ_VBLANK | IRQ_VCOUNT);
40+
irqEnable(IRQ_VBLANK);
5041

5142
if (isDSiMode()) {
5243
i2cWriteRegister(0x4A, 0x12, 0x00); // Press power-button for auto-reset
5344
i2cWriteRegister(0x4A, 0x70, 0x01); // Bootflag = Warmboot/SkipHealthSafety
54-
55-
// Make sure Arm9 had a chance to check slot status
56-
fifoWaitValue32(FIFO_USER_01);
57-
// If Arm9 reported slot is powered off, have Arm7 wait for Arm9 to be ready before card reset. This makes sure arm7 doesn't try card reset too early.
58-
if (fifoCheckValue32(FIFO_USER_02)) {
59-
if (fifoCheckValue32(FIFO_USER_07)) { TWL_ResetSlot1(); } else { PowerOnSlot(); }
60-
}
61-
fifoSendValue32(FIFO_USER_03, 1);
6245
}
6346

6447
while (1) {

slot1launch/arm7/source/resetslot.c

Lines changed: 0 additions & 28 deletions
This file was deleted.

slot1launch/arm7/source/resetslot.h

Lines changed: 0 additions & 18 deletions
This file was deleted.

slot1launch/arm9/source/main.cpp

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,22 @@ off_t getFileSize(const char *fileName)
8484
return fsize;
8585
}
8686

87+
static void cart_reset() {
88+
if(isDSiMode()) {
89+
disableSlot1();
90+
for(int i = 0; i < 20; i++)
91+
swiWaitForVBlank();
92+
enableSlot1();
93+
while(REG_ROMCTRL & CARD_BUSY)
94+
swiWaitForVBlank();
95+
for(int i = 0; i < 2; i++)
96+
swiWaitForVBlank();
97+
REG_ROMCTRL = CARD_nRESET;
98+
for(int i = 0; i < 15; i++)
99+
swiWaitForVBlank();
100+
}
101+
}
102+
87103

88104
bool consoleOn = false;
89105

@@ -105,16 +121,8 @@ int main() {
105121
runCardEngine = settingsini.GetInt("SRLOADER","SLOT1_CARDENGINE",1);
106122
EnableSD = settingsini.GetInt("SRLOADER","SLOT1_ENABLESD",0);
107123

108-
// Tell Arm7 it's ready for card reset (if card reset is nessecery)
109-
fifoSendValue32(FIFO_USER_01, 1);
110-
// Waits for Arm7 to finish card reset (if nessecery)
111-
fifoWaitValue32(FIFO_USER_03);
112-
113-
// Wait for card to stablize before continuing
114-
for (int i = 0; i < 30; i++) { swiWaitForVBlank(); }
115-
116124
sysSetCardOwner (BUS_OWNER_ARM9);
117-
125+
cart_reset();
118126
cardReadHeader((uint8*)&ndsHeader);
119127

120128
char gameTid[5];
@@ -171,19 +179,8 @@ int main() {
171179
}
172180

173181
} else {
174-
//fifoSendValue32(FIFO_USER_02, 1);
175-
//fifoSendValue32(FIFO_USER_07, 1);
176-
177-
// Tell Arm7 it's ready for card reset (if card reset is nessecery)
178-
fifoSendValue32(FIFO_USER_01, 1);
179-
// Waits for Arm7 to finish card reset (if nessecery)
180-
fifoWaitValue32(FIFO_USER_03);
181-
182-
// Wait for card to stablize before continuing
183-
for (int i = 0; i < 30; i++) { swiWaitForVBlank(); }
184-
185182
sysSetCardOwner (BUS_OWNER_ARM9);
186-
183+
cart_reset();
187184
cardReadHeader((uint8*)&ndsHeader);
188185
}
189186

0 commit comments

Comments
 (0)