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 Gams N Music for Nintendo DS

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.

« previous post next post »

filed under:  hacks + mods


tags:

July 27th, 2007 comments (641): stumble it! digg it! by: technabob


subscribe to technabob rss feed

comments (641):

  1. The wire says:

    cancel that. i will use supload or mega upload.

  2. jake123454321 says:

    or i could host it for you
    wire

  3. Izy says:

    Whoa, i thought i ended the rom talk with my noob comment like 9 months ago lol. Seems like Techna hasnt disabled comments :D , he probably thinks this isnt going anywhere =/, Well Good Luck ppl!

  4. AppleX says:

    umm when will it be ready, im leavin on saturday

  5. leo says:

    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

  6. leo says:

    OH UPDATES WILL BE UP MONDAY MORNING!!!!!!!! IF NOT THEN PROBABLY SUNDAY NIGHT!!!!!!!!!!!!

  7. Zero says:

    u guysknow that Maximum Overload 1.3 is out right

  8. Zero says:

    anyone here still

  9. Zero says:

    does anyone want the program for it

  10. Zero says:

    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

  11. Zero says:

    C U Guys Later

  12. leo says:

    post is zero now

  13. Javier says:

    If i have an R4DS , can I play commercial ROMS?also how many .nds files cam i store?

  14. Javier says:

    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

  15. Javier says:

    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

  16. benji says:

    keep it up guys .

  17. n8 says:

    for dslinux go here dslinux.org

  18. AppleX says:

    http://kineox.free.fr/DS/
    dslinux
    use original gnm boot method no moonshell or ds organize

  19. jake123454321 says:

    IS ANY ONE HERE WILLING TO RISK THERE GnM

    OPEN YOUR GnM

    THEN DO THIS http://teamleosplace.dyndns.org/GNM%20FINAL%20RESORT!!!.JPG

  20. jake123454321 says:

    notice of above post please copy and paste the link don’t click it

  21. jake123454321 says:

    ignore thos 2 post above me click this link instead http://teamleosplace.dyndns.org/GNM%20FINAL%20RESORT.jpg

  22. jake123454321 says:

    BEFORE DOING SO POST ON HERE THAT YOU WOULD OR WONT AND WAIT FOR LEO’S INSTRUCTIONS

  23. Rom Hacker #2 says:

    MY GnM OPENED! AWAITING INSTRUCTIONS!

  24. Rom Hacker #2 says:

    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! :D

  25. leo says:

    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

  26. CPU says:

    Romhacker 2 what happened now! The suspense is killing me to death.

  27. AppleX says:

    Yea im like whoa is the project over or does it work, lol

  28. CPU says:

    im ready for the answer that will give humanitys fate

  29. psphakr says:

    the suspense is killing me!!!!

  30. CPU says:

    Come on romhacker2 this is worse than a goosebumps book. Holy Deadbaby tell us.!

  31. forbidden4finder says:

    I cut the pin and tried running Trama Center and all I got were two black screens

  32. mark says:

    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

  33. CPU says:

    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

  34. jake123454321 says:

    iwhile the pin is cut try the loader here http://www.filedropper.com/gnmloader

  35. leo says:

    jake is my poster from now on

    leo is out 4ever

  36. Rom Hacker #2 says:

    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 :D

  37. Rom Hacker #2 says:

    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

  38. The wire says:

    I need a host for my files. its just the base arm9 and arm7 code! PERFICT!! NOW IT CAN BE EDITEDED! thanks to chism!

  39. jake123454321 says:

    i can host the files for you

  40. mark says:

    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

  41. The wire says:

    try reformating the card and if is still dont work return your g ‘n’ m to where you got it and get a ttds

  42. mark says:

    thanks wire!! ill try that

  43. mark says:

    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?

  44. AppleX says:

    tf = transflash
    same thing as micro sd but with a changed name

  45. forbidden4finder says:

    so is the project dead?

  46. Rom Hacker #2 says:

    Im afraid so, i even changed the forums to a diff subject also (STEAM)

  47. The wire says:

    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!

  48. The wire says:

    I am still observing

  49. Rom Hacker #2 says:

    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)

post a comment:

Want a personal avatar on your comments? Sign up for a free Gravatar now!

related posts on technabob:

iplayer nintendo dsi
easy proposal maker propose nintendo ds homebrew search master tile game marriage romance
Pop N Music Be Mouse by Konami
Gamepark GP2X F-200
Microsoft Zune Logo

« previous post next post »