datel games ‘n’ music homebrew cart for nintendo ds
July 27th, 2007 comments (641) stumble it! digg it! by: technabob
This add-on for the Nintendo DS not only lets you play MP3 files, but it lets you run tons of homebrew games on the portable console.

Datel’s Games ‘n’ Music plugs into the DS and gives you an easy way to play custom games and apps on the DS and DS Lite. The $30 add-on even comes with a CD loaded with 25 mini-games to get you started. It also bundles a video converter that makes it easy to transfer media clips to your DS too (there’s a bundled USB cable to make transfers painless.) While it only comes with 128MB of storage, it’s expandable up to 2GB thanks to a Micro SD slot.
Available from TotalConsole, the Games ‘n’ Music costs $29.99.
filed under: hacks + mods
July 27th, 2007 comments (641): stumble it! digg it! by: technabob
subscribe to technabob rss feed
comments (641):
post a comment:
« previous post next post »









subscribe
follow us
facebook

cancel that. i will use supload or mega upload.
or i could host it for you
wire
Whoa, i thought i ended the rom talk with my noob comment like 9 months ago lol. Seems like Techna hasnt disabled comments
, he probably thinks this isnt going anywhere =/, Well Good Luck ppl!
umm when will it be ready, im leavin on saturday
sorry i have been gone for awhile
(college and the olympics have kept me busy)
i have worked on a N5 loader, but my gnm freezes when the .nds is launched…
BUT the N5 loader also doesnt boot small homebrew!!!!!WHICH CAN PROVES that the gnm specifically denies large .nds files, in its boot code, WHICH MEANS, there is some part of the gnm i have been neglecting! this weekend im dedicating myself all to the gnm!!!!
leo is out
OH UPDATES WILL BE UP MONDAY MORNING!!!!!!!! IF NOT THEN PROBABLY SUNDAY NIGHT!!!!!!!!!!!!
u guysknow that Maximum Overload 1.3 is out right
anyone here still
does anyone want the program for it
oh well i guess not because this program i got from my friend and hes a great hacker and can crack any code plus he was a producer of R4
NO LIE
C U Guys Later
post is zero now
If i have an R4DS , can I play commercial ROMS?also how many .nds files cam i store?
Hi again. if i had an R4DS do i need anything else like a memory expansion pak to use DSLinux. also, what size is the DSLinux
I freaking need help trying to find DSLinux on the web!!!!!!!
I googled it and i can’t find it please send the link to : d.pachirisu.d@gmail.com thank you
keep it up guys .
for dslinux go here dslinux.org
http://kineox.free.fr/DS/
dslinux
use original gnm boot method no moonshell or ds organize
IS ANY ONE HERE WILLING TO RISK THERE GnM
OPEN YOUR GnM
THEN DO THIS http://teamleosplace.dyndns.org/GNM%20FINAL%20RESORT!!!.JPG
notice of above post please copy and paste the link don’t click it
ignore thos 2 post above me click this link instead http://teamleosplace.dyndns.org/GNM%20FINAL%20RESORT.jpg
BEFORE DOING SO POST ON HERE THAT YOU WOULD OR WONT AND WAIT FOR LEO’S INSTRUCTIONS
MY GnM OPENED! AWAITING INSTRUCTIONS!
It was already opened up so…..no need to flame me about “i said to wait for instructions 1st”……..LEO! Post those instructions ASAP! me is waiting!
u will need to cut the pin that was circled in the picture
i said await because u must kno that the pin must be as precise as possible to be cut in half after that put a large game and try it out
if this does not work then i have to close my research
leo is out
Romhacker 2 what happened now! The suspense is killing me to death.
Yea im like whoa is the project over or does it work, lol
im ready for the answer that will give humanitys fate
the suspense is killing me!!!!
Come on romhacker2 this is worse than a goosebumps book. Holy Deadbaby tell us.!
I cut the pin and tried running Trama Center and all I got were two black screens
wait so to play commercial roms on gnm you have to take it apart and cut the pin, then can you play the bigger sized games? plz respond ASAP
CRAP if this doesnt work though i still have a maxmedia dock and a Top Toy Ds so it will suck for u guys and me. Kind of…l
iwhile the pin is cut try the loader here http://www.filedropper.com/gnmloader
jake is my poster from now on
leo is out 4ever
Well, im just about to try it with the gnm loader jake provided and see what happens
me doesnt mind if anything goes wrong because me has spare card
Epic failure! I did it, used loader, loader failed….didnt even boot, also when i tried a large rom, my ds went to some “mode” all that it said in the middle of both screens was [ERROR] and background kept flashing different colors, anyway my GnM is now scrap as it fails to load any .nds file Im not loosing out though because i got a “Express Card” from cheapmod.net
I need a host for my files. its just the base arm9 and arm7 code! PERFICT!! NOW IT CAN BE EDITEDED! thanks to chism!
i can host the files for you
SWEET!
hey wait so the loader does not work at all? so that means the project is done right?
But is leo still working on the web browser or not?
and one last question
I try to put my microsd card and reader in my computer but when i click on it to start it says no disk found in drive and I cant access files on my gnm. what do I do? I wanted to try the loader for myself and now i cant
try reformating the card and if is still dont work return your g ‘n’ m to where you got it and get a ttds
thanks wire!! ill try that
hey wire i was looking at a ttds at dealextreme and it came with a 2gb kingston tf. and I wanted to know what a tf is. is it like a micro sd card?
tf = transflash
same thing as micro sd but with a changed name
so is the project dead?
Im afraid so, i even changed the forums to a diff subject also (STEAM)
Yea but i did kinda continue even after I said I had stopped.
I have a feeling that you guys deserve some info I have cracked the main Vram port and the RsA lock as some have said it is called is a fake. Here that? its a fake chishm made it up so people would stop asking him to hack it. I hope this helps. Rom Hacker #2 I can email you the stuff if you want to re-dispute it. badabababa I’m lovin it. I <3 mcdonalds XD thats where I desided to Let the info fly! ehh here is somthing to look up to me by (gotta love chishm)
Make file:
#———————————————————————————
.SUFFIXES:
#———————————————————————————
ifeq ($(strip $(DEVKITARM)),)
$(error “Please set DEVKITARM in your environment. export DEVKITARM=devkitARM)
endif
include $(DEVKITARM)/ds_rules
#———————————————————————————
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# DATA is a list of directories containing data files
# INCLUDES is a list of directories containing header files
# SPECS is the directory containing the important build and link files
#———————————————————————————
export TARGET := $(shell basename $(CURDIR))
BUILD := build
SOURCES := source
DATA := data
INCLUDES := include
#———————————————————————————
# options for code generation
#———————————————————————————
ARCH := -mthumb-interwork
CFLAGS := -g -Wall -O2\
-mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer\
-ffast-math \
$(ARCH)
CFLAGS += $(INCLUDE) -DARM9 -fPIC
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
ASFLAGS := -g $(ARCH)
LDFLAGS = -nostartfiles -nostdlib -T dldi.ld -g $(ARCH) -Wl,-Map,$(TARGET).map
LIBS := -lnds9
#———————————————————————————
# list of directories containing libraries, this must be the top level containing
# include and lib
#———————————————————————————
LIBDIRS := $(LIBNDS)
#———————————————————————————
# no real need to edit anything past this point unless you need to add additional
# rules for different file extensions
#———————————————————————————
ifneq ($(BUILD),$(notdir $(CURDIR)))
#———————————————————————————
export OUTPUT := $(CURDIR)/$(TARGET)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
export DEPSDIR := $(CURDIR)/$(BUILD)
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
#———————————————————————————
# use CXX for linking C++ projects, CC for standard C
#———————————————————————————
ifeq ($(strip $(CPPFILES)),)
#———————————————————————————
export LD := $(CC)
#———————————————————————————
else
#———————————————————————————
export LD := $(CXX)
#———————————————————————————
endif
#———————————————————————————
export OFILES := $(addsuffix .o,$(BINFILES)) \
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
-I$(CURDIR)/$(BUILD)
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
.PHONY: $(BUILD) clean all
#———————————————————————————
all: $(BUILD)
$(BUILD):
@[ -d $@ ] || mkdir -p $@
@make –no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
#———————————————————————————
clean:
@echo clean …
@rm -fr $(BUILD) $(TARGET).dldi $(TARGET).elf
#———————————————————————————
else
DEPENDS := $(OFILES:.o=.d)
#———————————————————————————
# main targets
#———————————————————————————
$(OUTPUT).dldi : $(OUTPUT).elf
$(OUTPUT).elf : $(OFILES)
#———————————————————————————
%.dldi: %.elf
@$(OBJCOPY) -O binary $< $@
@echo built … $(notdir $@)
-include $(DEPENDS)
#—————————————————————————————
endif
#—————————————————————————————
DlDI header.s:
@———————————————————————————
.section “.init”
@———————————————————————————
.global _start
.align 2
.arm
@———————————————————————————
.equ FEATURE_MEDIUM_CANREAD, 0×00000001
.equ FEATURE_MEDIUM_CANWRITE, 0×00000002
.equ FEATURE_SLOT_GBA, 0×00000010
.equ FEATURE_SLOT_NDS, 0×00000020
.equ FIX_ALL, 0×01
.equ FIX_GLUE, 0×02
.equ FIX_GOT, 0×04
.equ FIX_BSS, 0×08
@———————————————————————————
@ 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 0×01 @ Version number
.byte 0×0D @8KiB @ Log [base-2] of the maximum size of this driver in bytes.
.byte FIX_GOT | FIX_BSS | FIX_GLUE @ Sections to fix
.byte 0×00 @ Space allocated in the application, not important here.
@———————————————————————————
@ Text identifier – can be anything up to 47 chars + terminating null — 48 bytes
.align 4
.asciz “Datel Games ‘n’ Music (microSD)”
@———————————————————————————
@ Offsets to important sections within the data – 32 bytes
.align 6
.word __text_start @ data start
.word __data_end @ data end
.word __glue_start @ Interworking glue start – Needs address fixing
.word __glue_end @ Interworking glue end
.word __got_start @ GOT start – Needs address fixing
.word __got_end @ GOT end
.word __bss_start @ bss start – Needs setting to zero
.word __bss_end @ bss end
@———————————————————————————
@ IO_INTERFACE data — 32 bytes
.ascii “GMTF” @ ioType
.word FEATURE_MEDIUM_CANREAD | FEATURE_MEDIUM_CANWRITE | FEATURE_SLOT_NDS
.word startup @
.word isInserted @
.word readSectors @ Function pointers to standard device driver functions
.word writeSectors @
.word clearStatus @
.word shutdown @
@———————————————————————————
_start:
@———————————————————————————
.align
.pool
.end
@———————————————————————————
GMTF (XD Micro sd verson):
ifndef NDS
#if defined ARM9 || defined ARM7
#define NDS
#endif
#endif
#ifndef NDS
#error “This is a DS only card”
#endif
#include
#define BYTES_PER_SECTOR 0×200
#ifndef NULL
#define NULL 0
#endif
//———————————————————————————
// The following were taken from libnds
#define CARD_CR1 (*(vuint16*)0×040001A0)
#define CARD_CR1H (*(vuint8*)0×040001A1)
#define CARD_EEPDATA (*(vuint8*)0×040001A2)
#define CARD_CR2 (*(vuint32*)0×040001A4)
#define CARD_COMMAND ((vuint8*)0×040001A8)
#define CARD_DATA_RD (*(vuint32*)0×04100010)
#define CARD_CR1_ENABLE 0×80 // in byte 1, i.e. 0×8000
#define CARD_CR1_IRQ 0×40 // in byte 1, i.e. 0×4000
#define CARD_BUSY (1<> 24);
commandData[2] = (u8)(argument >> 16);
commandData[3] = (u8)(argument >> 8);
commandData[4] = (u8)(argument >> 0);
commandData[5] = 0×95; // Fake CRC, 0×95 is only important for SD CMD 0
// Send read sector command
for (i = 0; i 0);
return spiByte;
}
bool sdRead (u32 sector, u8* dest)
{
u8 spiByte;
int timeout;
int i;
volatile u32 temp;
if (sendCommand (READ_SINGLE_BLOCK, sector * BYTES_PER_SECTOR) != 0×00) {
return false;
}
// Wait for data start token
timeout = SD_COMMAND_TIMEOUT;
do {
spiByte = getSpiByte ();
} while (spiByte == 0xFF && –timeout > 0);
if (spiByte != 0xFE) {
return false;
}
for (i = BYTES_PER_SECTOR; i > 0; i–) {
*dest++ = getSpiByte();
}
// Clean up CRC
temp = getSpiByte();
temp = getSpiByte();
// Send 8 clocks for SD card
getSpiByte ();
return true;
}
bool sdReadMultiple (u32 sector, u8* dest, u32 numSectors)
{
u8 spiByte;
int timeout;
int i;
volatile u32 temp;
if (sendCommand (READ_MULTIPLE_BLOCK, sector * BYTES_PER_SECTOR) != 0×00) {
return false;
}
while (numSectors > 0) {
// Wait for data start token
timeout = SD_COMMAND_TIMEOUT;
do {
spiByte = getSpiByte ();
} while (spiByte == 0xFF && –timeout > 0);
if (spiByte != 0xFE) {
return false;
}
for (i = BYTES_PER_SECTOR; i > 0; i–) {
*dest++ = getSpiByte();
}
// Clean up CRC
temp = getSpiByte();
temp = getSpiByte();
– numSectors;
}
spiByte = sendCommand (STOP_TRANSMISSION, 0);
// Wait for card to write data
timeout = SD_COMMAND_TIMEOUT;
while (spiByte == 0 && –timeout > 0) {
spiByte = getSpiByte();
}
if (timeout == 0) {
return false;
}
// Send 8 clocks for SD card
getSpiByte ();
return true;
}
bool sdWrite (u32 sector, u8* src)
{
int i;
int timeout;
if (sendCommand (WRITE_SINGLE_BLOCK, sector * BYTES_PER_SECTOR) != 0) {
return false;
}
// Send start token
transferSpiByte (0xFE);
// Send data
for (i = BYTES_PER_SECTOR; i > 0; i–) {
CARD_EEPDATA = *src++;
while (CARD_CR1 & CARD_SPI_BUSY);
}
// Send fake CRC
transferSpiByte (0xFF);
transferSpiByte (0xFF);
// Get data response
if ((getSpiByte() & 0×0F) != SD_WRITE_OK) {
return false;
}
// Wait for card to write data
timeout = SD_WRITE_TIMEOUT;
while (getSpiByte() == 0 && –timeout > 0);
if (timeout == 0) {
return false;
}
// Send 8 clocks for SD card
getSpiByte ();
return true;
}
/*—————————————————————–
startUp
Initialize the interface, geting it into an idle, ready state
returns true if successful, otherwise returns false
—————————————————————–*/
bool startup(void) {
openSpi ();
return true;
}
/*—————————————————————–
isInserted
Is a card inserted?
return true if a card is inserted and usable
—————————————————————–*/
bool isInserted (void) {
return true;
}
/*—————————————————————–
clearStatus
Reset the card, clearing any status errors
return true if the card is idle and ready
—————————————————————–*/
bool clearStatus (void) {
return true;
}
/*—————————————————————–
readSectors
Read “numSectors” 512-byte sized sectors from the card into “buffer”,
starting at “sector”.
return true if it was successful, false if it failed for any reason
—————————————————————–*/
bool readSectors (u32 sector, u32 numSectors, void* buffer) {
u8* data = (u8*)buffer;
if (numSectors == 1) {
return sdRead (sector, data);
} else {
return sdReadMultiple (sector, data, numSectors);
}
}
/*—————————————————————–
writeSectors
Write “numSectors” 512-byte sized sectors from “buffer” to the card,
starting at “sector”.
return true if it was successful, false if it failed for any reason
—————————————————————–*/
bool writeSectors (u32 sector, u32 numSectors, void* buffer) {
u8* data = (u8*)buffer;
while (numSectors > 0) {
if (!sdWrite (sector, data)) {
return false;
}
sector ++;
data += BYTES_PER_SECTOR;
numSectors –;
}
return true;
}
/*—————————————————————–
shutdown
shutdown the card, performing any needed cleanup operations
—————————————————————–*/
bool shutdown(void) {
closeSpi ();
return true;
}
Tada enjoy the 3 parts of the code
Be happy… haha… dont worry… this wont screw your card leo was worryed about that part!
I am still observing
Soz for not replying in LONG, had major sate HDD failure and it took few days to recover lost data…..Wire….i am wondering…seeing as this RSA lock is fake….how in hell do datel stop users loading .NDS files? Large ones i mean…..also..this code..i am wondering if you can compile it? I cant test anything anymore until i get a new card as my other cards SRAM (EEPROM, OR WHATEVER) decided to die on me…and the card i used had the OS on it (the cards OS) …was playing a game and it locked up with [ERROR_NO_EEPROM] on both screens….anyway i may go back to the old gba days and get a XROM (a gba flash card basically)…..but wire….if you can compile this I CAN TRY USE A DS EMULATOR! because i wanna see if my pc can “handle” a ds emulator, it would actually be nice for other people to have this. Also if it is compiled it,ll be on the forums AS SOON AS WIRE MAILS ME! my email is user1690@gmail.com PLEASE PLEASE PLEASE DONOT USE THIS EMAIL FOR SPAM USAGE! If it is, i,ll read the header of the spam email….and i,ll trace it back to the user who used my mail…….(yeah i can do that)