diff options
Diffstat (limited to 'backends')
| -rw-r--r-- | backends/platform/ds/arm9/makefile | 8 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/cdaudio.cpp | 4 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/dsmain.cpp | 64 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/disc_io.c | 27 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/disc_io.h | 37 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/io_dldi.h | 34 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/io_dldi.s | 70 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/io_m3sd.c | 4 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/io_njsd.c | 2 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/io_scsd.c | 3 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/fat/io_scsd.h | 31 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/libcartreset/cartreset.c | 107 | ||||
| -rw-r--r-- | backends/platform/ds/arm9/source/libcartreset/cartreset_nolibfat.h | 56 | 
13 files changed, 401 insertions, 46 deletions
diff --git a/backends/platform/ds/arm9/makefile b/backends/platform/ds/arm9/makefile index fee64198b6..edf21887ab 100644 --- a/backends/platform/ds/arm9/makefile +++ b/backends/platform/ds/arm9/makefile @@ -118,7 +118,8 @@ LDFLAGS = -specs=ds_arm9.specs -mthumb-interwork -mno-fpu -Wl,-Map,map.txt  INCLUDES= -I./ -I$(portdir)/$(BUILD) -I$(srcdir) -I$(srcdir)/common -I$(portdir)/source -I$(portdir)/source/compressor -I$(portdir)/source/fat \  			-I$(srcdir)/backends/fs  -I$(srcdir)/backends/fs/ds -I$(portdir)/data -I$(libndsdir)/include -I$(portdir)/../commoninclude\ -			-I$(srcdir)/scumm -I$(libndsdir)/include -I$(libndsdir)/include/nds -I$(srcdir)/engines -I$(portdir)/source/mad +			-I$(srcdir)/scumm -I$(libndsdir)/include -I$(libndsdir)/include/nds -I$(srcdir)/engines -I$(portdir)/source/mad\ +			-I$(portdir)/source/libcartreset  LIBS	= -lm -L$(libndsdir)/lib -L$(portdir)/lib -lnds9 @@ -172,16 +173,19 @@ FAT_OBJS :=  $(portdir)/source/fat/disc_io.o $(portdir)/source/fat/gba_nds_fat.o  			$(portdir)/source/fat/io_mmcf.o \  			$(portdir)/source/fat/io_sd_common.o \  			$(portdir)/source/fat/io_m3_common.o \ +			$(portdir)/source/fat/io_dldi.o \  			$(portdir)/source/fat/m3sd.o +  #			$(portdir)/source/fat/io_cf_common.o $(portdir)/source/fat/io_m3_common.o\  #			$(portdir)/source/fat/io_sd_common.o $(portdir)/source/fat/io_scsd_s.o \  #			$(portdir)/source/fat/io_sc_common.o $(portdir)/source/fat/io_sd_common.o  +LIBCARTRESET_OBJS := $(portdir)/source/libcartreset/cartreset.o -OBJS := $(DATA_OBJS) $(PORT_OBJS) $(COMPRESSOR_OBJS) $(FAT_OBJS)  +OBJS := $(DATA_OBJS) $(LIBCARTRESET_OBJS) $(PORT_OBJS) $(COMPRESSOR_OBJS) $(FAT_OBJS)  diff --git a/backends/platform/ds/arm9/source/cdaudio.cpp b/backends/platform/ds/arm9/source/cdaudio.cpp index 5b354342c4..7261800802 100644 --- a/backends/platform/ds/arm9/source/cdaudio.cpp +++ b/backends/platform/ds/arm9/source/cdaudio.cpp @@ -114,7 +114,7 @@ void allocBuffers() {  }  void setActive(bool active) { -	active = active; +	DS::CD::active = active;  }  bool getActive() { @@ -232,7 +232,7 @@ void playTrack(int track, int numLoops, int startFrame, int duration) {  	//decompressBlock();  	playNextBlock(); -	numLoops = numLoops; +	DS::CD::numLoops = numLoops;  }  void update() { diff --git a/backends/platform/ds/arm9/source/dsmain.cpp b/backends/platform/ds/arm9/source/dsmain.cpp index 1367c72260..bb764bc75a 100644 --- a/backends/platform/ds/arm9/source/dsmain.cpp +++ b/backends/platform/ds/arm9/source/dsmain.cpp @@ -43,6 +43,7 @@  // - Software scaler?  // - 100% scale +#define USE_LIBCARTRESET  #include <nds.h> @@ -71,6 +72,7 @@  #include "ramsave.h"  #include "disc_io.h"  #include "blitters.h" +#include "cartreset_nolibfat.h"  namespace DS { @@ -2035,6 +2037,58 @@ void debug_print_stub(char *string) {  }  #endif +#ifdef USE_LIBCARTRESET +void reboot() { +	int deviceType = -1; + +	switch (disc_getDeviceId()) { +		case DEVICE_M3SD: { +			deviceType = DEVICE_TYPE_M3SD; +			break; +		} +		case DEVICE_MMCF: { +			deviceType = -1; +			break; +		} +		case DEVICE_M3CF: { +			deviceType = DEVICE_TYPE_M3CF; +			break; +		} +		case DEVICE_MPCF: { +			deviceType = DEVICE_TYPE_MPCF; +			break; +		} +		case DEVICE_SCCF: { +			deviceType = DEVICE_TYPE_SCCF; +			break; +		} +		case DEVICE_NJSD: { +			deviceType = -1; +			break; +		} +		case DEVICE_SCSD: { +			deviceType = DEVICE_TYPE_SCSD; +			break; +		} +		case DEVICE_NMMC: { +			deviceType = DEVICE_TYPE_NMMC; +			break; +		} +	} + +	consolePrintf("Device: %x\n", deviceType); + +	if (deviceType == -1) { +		IPC->reset = true;				// Send message to ARM7 to turn power off +	} else { +		cartSetMenuMode(deviceType); +		passmeloopEnter(); +	} + +	while (true);		// Stop the program continuing beyond this point +} +#endif +  void powerOff() {  	while (keysHeld() != 0) {		// Wait for all keys to be released.  		swiWaitForVBlank();			// Allow you to read error before the power @@ -2047,8 +2101,13 @@ void powerOff() {  	if (ConfMan.hasKey("disablepoweroff", "ds") && ConfMan.getBool("disablepoweroff", "ds")) {  		while (true);  	} else { + +#ifdef USE_LIBCARTRESET +		reboot(); +#else  		IPC->reset = true;				// Send message to ARM7 to turn power off  		while (true);		// Stop the program continuing beyond this point +#endif  	}  } @@ -2059,11 +2118,12 @@ void powerOff() {  int main(void)  { +  	soundCallback = NULL; -	  	initHardware(); -	 + +  #ifdef USE_DEBUGGER  	for (int r = 0; r < 150; r++) {  		swiWaitForVBlank(); diff --git a/backends/platform/ds/arm9/source/fat/disc_io.c b/backends/platform/ds/arm9/source/fat/disc_io.c index 69befa09b7..988810073d 100644 --- a/backends/platform/ds/arm9/source/fat/disc_io.c +++ b/backends/platform/ds/arm9/source/fat/disc_io.c @@ -77,6 +77,8 @@   #include "io_mmcf.h"  #endif +#include "io_dldi.h" +  // Keep a pointer to the active interface  LPIO_INTERFACE active_interface = 0; @@ -104,6 +106,8 @@ static struct {  	u32 count;  } cache[ DISC_CACHE_COUNT ]; +FATDevice currentDevice; +  static u32 disc_CacheFind(u32 sector) {  	u32 i; @@ -245,6 +249,7 @@ bool disc_setGbaSlotInterface (void)  		if (active_interface->fn_StartUp())  		{  			// set M3 SD as default IO +			currentDevice = DEVICE_M3SD;  			return true ;  		} ;  	} @@ -259,6 +264,7 @@ bool disc_setGbaSlotInterface (void)  	if (active_interface->fn_StartUp())  	{  		// set MMCF as default IO +		currentDevice = DEVICE_MMCF;  		return true ;  	} ;  #endif @@ -271,6 +277,7 @@ bool disc_setGbaSlotInterface (void)  	if (active_interface->fn_StartUp())  	{  		// set M3 CF as default IO +		currentDevice = DEVICE_M3CF;  		return true ;  	} ;  #endif @@ -282,6 +289,7 @@ bool disc_setGbaSlotInterface (void)  	if (active_interface->fn_StartUp())  	{  		// set GBAMP as default IO +		currentDevice = DEVICE_MPCF;  		return true ;  	} ;  #endif @@ -293,6 +301,7 @@ bool disc_setGbaSlotInterface (void)  	if (active_interface->fn_StartUp())  	{  		// set SC CF as default IO +		currentDevice = DEVICE_SCCF;  		return true ;  	} ;  #endif @@ -325,6 +334,11 @@ bool disc_setGbaSlotInterface (void)  	return false;  } + +FATDevice disc_getDeviceId() { +	return currentDevice; +} +  #ifdef NDS  // Check the DS card slot for a valid memory card interface  // If an interface is found, it is set as the default interace @@ -339,6 +353,16 @@ bool disc_setDsSlotInterface (void)  	WAIT_CR |= (1<<11);  #endif +	active_interface = DLDI_GetInterface(); + +	if (active_interface->fn_StartUp()) { +		consolePrintf("DLDI Driver Initialised OK!\n"); +		currentDevice = DEVICE_DLDI; +		return true; +	} else { +		consolePrintf("DLDI Initialise failed.\n"); +	} +  #ifdef SUPPORT_SCSD  	// check if we have a SuperCard SD plugged in  	if (discDetect == 2) { @@ -347,6 +371,7 @@ bool disc_setDsSlotInterface (void)  		if (active_interface->fn_StartUp())  		{  			// set SC SD as default IO +			currentDevice = DEVICE_SCSD;  			return true ;  		} ;  	} @@ -358,6 +383,7 @@ bool disc_setDsSlotInterface (void)  	if (active_interface->fn_StartUp())  	{  		// set NJSD as default IO +		currentDevice = DEVICE_NJSD;  		return true ;  	} ;  #endif @@ -368,6 +394,7 @@ bool disc_setDsSlotInterface (void)  	if (active_interface->fn_StartUp())  	{  		// set Neoflash MK2 / MK3 as default IO +		currentDevice = DEVICE_NMMC;  		return true ;  	} ;  #endif diff --git a/backends/platform/ds/arm9/source/fat/disc_io.h b/backends/platform/ds/arm9/source/fat/disc_io.h index e904071c37..2fff7f3bd5 100644 --- a/backends/platform/ds/arm9/source/fat/disc_io.h +++ b/backends/platform/ds/arm9/source/fat/disc_io.h @@ -15,16 +15,18 @@  // Device support options, added by www.neoflash.com -#define SUPPORT_NMMC		// comment out this line to remove Neoflash MK2 MMC Card support -#define SUPPORT_MPCF		// comment out this line to remove GBA Movie Player support -#define SUPPORT_M3CF		// comment out this line to remove M3 Perfect CF support -#define SUPPORT_M3SD		// comment out this line to remove M3 Perfect SD support -#define SUPPORT_SCCF		// comment out this line to remove Supercard CF support -#define SUPPORT_SCSD		// comment out this line to remove Supercard SD support +//#define SUPPORT_MPCF		// comment out this line to remove GBA Movie Player support +//#define SUPPORT_M3CF		// comment out this line to remove M3 Perfect CF support +//#define SUPPORT_M3SD		// comment out this line to remove M3 Perfect SD support +//#define SUPPORT_SCCF		// comment out this line to remove Supercard CF support +//#define SUPPORT_SCSD		// comment out this line to remove Supercard SD support +//#define SUPPORT_NJSD +//#define SUPPORT_MMCF +  //#define SUPPORT_EFA2		// comment out this line to remove EFA2 linker support -#define SUPPORT_FCSR		// comment out this line to remove GBA Flash Cart support -#define SUPPORT_NJSD -#define SUPPORT_MMCF +//#define SUPPORT_FCSR		// comment out this line to remove GBA Flash Cart support +//#define SUPPORT_NMMC		// comment out this line to remove Neoflash MK2 MMC Card support +  // Disk caching options, added by www.neoflash.com  // Each additional sector cache uses 512 bytes of memory @@ -72,6 +74,20 @@  extern "C" {  #endif + +typedef enum { +	DEVICE_NONE = 0, +	DEVICE_M3SD, +	DEVICE_MMCF, +	DEVICE_M3CF, +	DEVICE_MPCF, +	DEVICE_SCCF, +	DEVICE_NJSD, +	DEVICE_SCSD, +	DEVICE_NMMC, +	DEVICE_DLDI +} FATDevice; +  /*-----------------------------------------------------------------  disc_Init  Detects the inserted hardware and initialises it if necessary @@ -88,6 +104,8 @@ extern bool disc_IsInserted(void) ;  extern void disc_setEnable(int en); +extern FATDevice disc_getDeviceId(); +  /*-----------------------------------------------------------------  disc_ReadSectors  Read 512 byte sector numbered "sector" into "buffer" @@ -161,6 +179,7 @@ static inline bool disc_CacheFlush(void)  #define FEATURE_SLOT_GBA			0x00000010  #define FEATURE_SLOT_NDS			0x00000020 +  typedef bool (* FN_MEDIUM_STARTUP)(void) ;  typedef bool (* FN_MEDIUM_ISINSERTED)(void) ;  typedef bool (* FN_MEDIUM_READSECTORS)(u32 sector, u8 numSecs, void* buffer) ; diff --git a/backends/platform/ds/arm9/source/fat/io_dldi.h b/backends/platform/ds/arm9/source/fat/io_dldi.h new file mode 100644 index 0000000000..6f97ca7b45 --- /dev/null +++ b/backends/platform/ds/arm9/source/fat/io_dldi.h @@ -0,0 +1,34 @@ +/* +	io_dldi.h  + +	Reserved space for new drivers +	 +	This software is completely free. No warranty is provided. +	If you use it, please give me credit and email me about your +	project at chishm@hotmail.com + +	See gba_nds_fat.txt for help and license details. +*/ + +#ifndef IO_DLDI_H +#define IO_DLDI_H + +// 'DLDI' +#define DEVICE_TYPE_DLDD 0x49444C44 + +#include "disc_io.h" +#ifdef NDS +#include <nds/memory.h> +#endif + +extern IO_INTERFACE _io_dldi; + +// export interface +static inline LPIO_INTERFACE DLDI_GetInterface(void) { +#ifdef NDS +	WAIT_CR &= ~(ARM9_OWNS_ROM | ARM9_OWNS_CARD); +#endif // defined NDS +	return &_io_dldi; +} + +#endif	// define IO_DLDI_H diff --git a/backends/platform/ds/arm9/source/fat/io_dldi.s b/backends/platform/ds/arm9/source/fat/io_dldi.s new file mode 100644 index 0000000000..8d21522baf --- /dev/null +++ b/backends/platform/ds/arm9/source/fat/io_dldi.s @@ -0,0 +1,70 @@ +@--------------------------------------------------------------------------------- +	.align	4 +	.arm +	.global _io_dldi +@--------------------------------------------------------------------------------- +.equ FEATURE_MEDIUM_CANREAD,		0x00000001 +.equ FEATURE_MEDIUM_CANWRITE,		0x00000002 +.equ FEATURE_SLOT_GBA,				0x00000010 +.equ FEATURE_SLOT_NDS,				0x00000020 + + +@--------------------------------------------------------------------------------- +@ Driver patch file standard header -- 16 bytes +	.word	0xBF8DA5ED		@ Magic number to identify this region +	.asciz	" Chishm"		@ Identifying Magic string (8 bytes with null terminator) +	.byte	0x01			@ Version number +	.byte	0x0F	@32KiB	@ Log [base-2] of the size of this driver in bytes. +	.byte	0x00			@ Sections to fix +	.byte 	0x0F	@32KiB	@ Log [base-2] of the allocated space in bytes. +	 +@--------------------------------------------------------------------------------- +@ Text identifier - can be anything up to 47 chars + terminating null -- 16 bytes +	.align	4 +	.asciz "Default (No interface)" + +@--------------------------------------------------------------------------------- +@ Offsets to important sections within the data	-- 32 bytes +	.align	6 +	.word   0x00000000		@ data start +	.word   0x00000000		@ data end +	.word	0x00000000		@ Interworking glue start	-- Needs address fixing +	.word	0x00000000		@ Interworking glue end +	.word   0x00000000		@ GOT start					-- Needs address fixing +	.word   0x00000000		@ GOT end +	.word   0x00000000		@ bss start					-- Needs setting to zero +	.word   0x00000000		@ bss end + +@--------------------------------------------------------------------------------- +@ IO_INTERFACE data -- 32 bytes +_io_dldi: +	.ascii	"DLDI"					@ ioType +	.word	0x00000000				@ Features +	.word	_DLDI_startup			@  +	.word	_DLDI_isInserted		@  +	.word	_DLDI_readSectors		@   Function pointers to standard device driver functions +	.word	_DLDI_writeSectors		@  +	.word	_DLDI_clearStatus		@  +	.word	_DLDI_shutdown			@  +	 +@--------------------------------------------------------------------------------- + +_DLDI_startup: +_DLDI_isInserted: +_DLDI_readSectors: +_DLDI_writeSectors: +_DLDI_clearStatus: +_DLDI_shutdown: +	mov		r0, #0x00				@ Return false for every function +	bx		lr + + + +@--------------------------------------------------------------------------------- +	.align +	.pool + +.space 32632						@ Fill to 32KiB + +	.end +@--------------------------------------------------------------------------------- diff --git a/backends/platform/ds/arm9/source/fat/io_m3sd.c b/backends/platform/ds/arm9/source/fat/io_m3sd.c index fba264a438..914b83e06e 100644 --- a/backends/platform/ds/arm9/source/fat/io_m3sd.c +++ b/backends/platform/ds/arm9/source/fat/io_m3sd.c @@ -1,7 +1,7 @@  #define io_M3SD_c  #include "io_m3sd.h" - +#ifdef SUPPORT_M3SD  //M3-SD interface SD card.  #define DMA3SAD      *(volatile u32*)0x040000D4 @@ -379,3 +379,5 @@ LPIO_INTERFACE M3SD_GetInterface(void)  {  	return &io_m3sd ;  } + +#endif diff --git a/backends/platform/ds/arm9/source/fat/io_njsd.c b/backends/platform/ds/arm9/source/fat/io_njsd.c index 8c06b468c7..fbb223d560 100644 --- a/backends/platform/ds/arm9/source/fat/io_njsd.c +++ b/backends/platform/ds/arm9/source/fat/io_njsd.c @@ -35,6 +35,7 @@  #include "io_njsd.h" +#ifdef SUPPORT_NJSD  #ifdef NDS  #include <nds.h> @@ -677,3 +678,4 @@ LPIO_INTERFACE NJSD_GetInterface(void) {  } ;  #endif // defined NDS +#endif
\ No newline at end of file diff --git a/backends/platform/ds/arm9/source/fat/io_scsd.c b/backends/platform/ds/arm9/source/fat/io_scsd.c index 9904a0ac28..9359fefb6d 100644 --- a/backends/platform/ds/arm9/source/fat/io_scsd.c +++ b/backends/platform/ds/arm9/source/fat/io_scsd.c @@ -26,6 +26,8 @@  #include "io_scsd.h" +#ifdef SUPPORT_SCSD +  /*-----------------------------------------------------------------  Since all CF addresses and commands are the same for the GBAMP,  simply use it's functions instead. @@ -101,3 +103,4 @@ LPIO_INTERFACE SCSD_GetInterface(void) {  	return &io_scsd ;  } ; +#endif
\ No newline at end of file diff --git a/backends/platform/ds/arm9/source/fat/io_scsd.h b/backends/platform/ds/arm9/source/fat/io_scsd.h index 1e4e17dbb8..75115b8d62 100644 --- a/backends/platform/ds/arm9/source/fat/io_scsd.h +++ b/backends/platform/ds/arm9/source/fat/io_scsd.h @@ -26,33 +26,4 @@  // export interface  extern LPIO_INTERFACE SCSD_GetInterface(void) ; -#endif	// define IO_SCSD_H -/* -	io_scsd.h by SaTa. -	based on io_sccf.h -	 -	 -*/ - -/* -	io_sccf.h  - -	Hardware Routines for reading a compact flash card -	using the GBA Movie Player - -	This software is completely free. No warranty is provided. -	If you use it, please give me credit and email me about your -	project at chishm@hotmail.com - -	See gba_nds_fat.txt for help and license details. -*/ - -#ifndef IO_SCSD_H -#define IO_SCSD_H - -#include "disc_io.h" - -// export interface -extern LPIO_INTERFACE SCSD_GetInterface(void) ; - -#endif	// define IO_SCSD_H +#endif	// define IO_SCSD_H
\ No newline at end of file diff --git a/backends/platform/ds/arm9/source/libcartreset/cartreset.c b/backends/platform/ds/arm9/source/libcartreset/cartreset.c new file mode 100644 index 0000000000..01ba33736a --- /dev/null +++ b/backends/platform/ds/arm9/source/libcartreset/cartreset.c @@ -0,0 +1,107 @@ +/********************************** +  Copyright (C) Rick Wong (Lick) +  http://licklick.wordpress.com/ +***********************************/ +#include <cartreset_nolibfat.h> + + +#ifdef ARM9 + +bool cartSetMenuMode(u32 _deviceType) +{ +    *(vu16*)(0x04000204) &= ~0x0880;    //sysSetBusOwners(true, true); +    u32 deviceType = _deviceType; + +    *((vu32*)0x027FFFF8) = 0x080000C0; // ARM7 reset address + +    if(deviceType == DEVICE_TYPE_EFA2) +    { +        *(u16 *)0x9FE0000 = 0xD200; +        *(u16 *)0x8000000 = 0x1500; +        *(u16 *)0x8020000 = 0xD200; +        *(u16 *)0x8040000 = 0x1500; +        *(u16 *)0x9880000 = 1 << 15; +        *(u16 *)0x9FC0000 = 0x1500; +        return true; +    } +    else if(deviceType == DEVICE_TYPE_MPCF) +    { +        return true; +    } +    else if(deviceType == DEVICE_TYPE_EZSD) +    { +        return true; +    } +    else if(deviceType == DEVICE_TYPE_M3CF || deviceType == DEVICE_TYPE_M3SD) +    { +        u32 mode = 0x00400004; +	    vu16 tmp; +        tmp = *(vu16*)(0x08E00002); +        tmp = *(vu16*)(0x0800000E); +        tmp = *(vu16*)(0x08801FFC); +        tmp = *(vu16*)(0x0800104A); +        tmp = *(vu16*)(0x08800612); +        tmp = *(vu16*)(0x08000000); +        tmp = *(vu16*)(0x08801B66); +        tmp = *(vu16*)(0x08000000 + (mode << 1));  +        tmp = *(vu16*)(0x0800080E); +        tmp = *(vu16*)(0x08000000); + +        tmp = *(vu16*)(0x080001E4); +        tmp = *(vu16*)(0x080001E4); +        tmp = *(vu16*)(0x08000188); +        tmp = *(vu16*)(0x08000188); +        return true; +    } +    else if(deviceType == DEVICE_TYPE_SCCF || deviceType == DEVICE_TYPE_SCSD) +    { +        *(vu16*)0x09FFFFFE = 0xA55A; +        *(vu16*)0x09FFFFFE = 0xA55A; +        *(vu16*)0x09FFFFFE = 0; +        *(vu16*)0x09FFFFFE = 0; +        *((vu32*)0x027FFFF8) = 0x08000000; // Special ARM7 reset address +        return true; +    } + +    return false; +} + + + +void passmeloopEnter() +{ +    *(vu16*)(0x04000208) = 0;           //REG_IME = IME_DISABLE; +    *(vu16*)(0x04000204) |= 0x0880;     //sysSetBusOwners(false, false); +    *((vu32*)0x027FFFFC) = 0; +    *((vu32*)0x027FFE04) = (u32)0xE59FF018; +    *((vu32*)0x027FFE24) = (u32)0x027FFE04; +    asm("swi 0x00");                    //swiSoftReset(); +    asm("bx lr"); +} + +#endif + + +#ifdef ARM7 + +bool passmeloopQuery() +{ +    if(*((vu32*)0x027FFE24) == (u32)0x027FFE04) +        return true; +    return false; +} + + + +void cartExecute() +{ +    *(vu16*)(0x04000208) = 0;       //REG_IME = IME_DISABLE; +    *((vu32*)0x027FFE34) = *((vu32*)0x027FFFF8); +    asm("swi 0x00");                //swiSoftReset(); +    asm("bx lr"); +} + +#endif + + + diff --git a/backends/platform/ds/arm9/source/libcartreset/cartreset_nolibfat.h b/backends/platform/ds/arm9/source/libcartreset/cartreset_nolibfat.h new file mode 100644 index 0000000000..133ae97e0f --- /dev/null +++ b/backends/platform/ds/arm9/source/libcartreset/cartreset_nolibfat.h @@ -0,0 +1,56 @@ +/********************************** +  Copyright (C) Rick Wong (Lick) +  http://licklick.wordpress.com/ +***********************************/ +#ifndef CARTRESET_H +#define CARTRESET_H + +#include <fat.h> + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef ARM9 +// Auto detect: +#define DEVICE_TYPE_AUTO        0x00000000 // doesn't work in libcartreset "nolibfat" version + +// Not supported: +#define DEVICE_TYPE_FCSR        0x52534346 +#define DEVICE_TYPE_MMCF        0x46434D4D +#define DEVICE_TYPE_NJSD        0x44534A4E +#define DEVICE_TYPE_NMMC        0x434D4D4E + +// Supported: +#define DEVICE_TYPE_EFA2        0x32414645 +#define DEVICE_TYPE_MPCF        0x4643504D +#define DEVICE_TYPE_M3CF        0x4643334D +#define DEVICE_TYPE_M3SD        0x4453334D +#define DEVICE_TYPE_SCCF        0x46434353 +#define DEVICE_TYPE_SCSD        0x44534353 + +// Supported, but libfat doesn't detect the device: +#define DEVICE_TYPE_EZSD        0x44535A45 + + +bool cartSetMenuMode(u32 _deviceType); +void passmeloopEnter(); + +#endif + + +#ifdef ARM7 + +bool passmeloopQuery(); +void cartExecute(); + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif  +  | 
