Archive for the ‘ds homebrew’ Category

RAM Unlocking API (Ram API)

I haven’t posted about my RAM Unlocking API on this blog, so here’s a short description.

Some of the Slot-2 homebrew devices and also the Opera RAM Expansion have External Memory that can be used as Extra RAM. The amount of RAM depends on the specific devices, where it can go from 4MB to 32MB. Opera RAM Expansion for example, provides us with 8MB.

To use this RAM we need to unlock the hardware first. Because this procedure is different on all those devices, I have decided to collect all the Unlock Sequences (it’s how you call ’em) into one package and I named it RAM Unlocking API or just Ram API.

So now if you’re a DS homebrew developer and you want to use the Extra RAM, you can, with just a few simple calls to Ram API.

Find more information on Ram API, go here.

Rebootlib (successor of Libcartreset)

I haven’t posted about Rebootlib on my blog, so for completeness’ sake I’ll just post a short introduction here.

In the beginning there was Libcartreset. It was a small library that provided procedures to reset the Nintendo DS to the Slot-2 Device’s bootmenu. For example if you have a Supercard and you ran DSLiveWeather, you would be able to return to the Supercard’s bootmenu -without- powercycling your DS.

Even though the library was functional and in my own opinion very useful, not many developers have made us of it. I decided to rewrite it from scratch and added support for a few new devices.
Rebootlib was born.

Rebootlib is not a compiled library like Libcartreset (*.a). You just include it to your project’s sources (*.h *.c *.cpp) and it will be compiled with your project.

Find information on how to Download and implement Rebootlib.

DSLiveWeather Update July 12

New in the July 12 version of DSLiveWeather:

  • Automatically searches for the DSLiveWeather directory within 3 depth levels away from the root. This means that the following three configurations will work:
    1. /DSLiveWeather
    2. /<1>/DSLiveWeather
    3. /<1>/<2>/DSLiveWeather

    This procedure is done with my Locator() function. If you would like to see this feature in more homebrew projects, spread the word to the developers!

  • People experienced problems with Saving to FAT. This should be fixed.
  • This build uses the latest official DSWifi 0.3.2. I hope it fixes some of the WiFi problems.

That’s it! Download DSLiveWeather Update July 12.

– Lick

backlight fading demo

I was interested in the backlight fade-in that the original firmware does. According to gbatek (Backlight Dimming / Backlight caused Shut-Down(s)) the backlight has to be turned on/off at different rates so it simulates a smooth fade-in.

This is the result. It works, but I don’t recommend that anyone reuses the code in their projects. It’s bad code.

It should work on Phat DSes as well. 

– Lick

Short update..

Hey everyone,

I haven’t posted anything on my blog lately, but it’s time to crawl out from under my rock.

First thing that I need to say is that I’ve compiled DSLiveWeather against the latest revolution in the DS homebrew toolchains, namely chishms DLDI. You can grab the new build of DSLiveWeather “Vesper” from this link (~390 KiB).

Also, I got dugg, makezine’d, crunchgear’ed, rojo’d, gizmodo’d, itechnews’ed and many more! Yes, even though I haven’t posted any information on this blog about Licks Media Player the iPod-look-a-like-music-player, formerly known as “.bleepz” (hehe), it is true that I was working on it for a while and discontinued the project. Never thought it’d get so much (late) attention, since the software barely played songs. And a funny note: most of the articles that wrote about LMP never even mention me! Bah..

Back to development-talk, if you use libcartreset, you’ll notice that it doesn’t work that well anymore. I should update it to be compatible with more fatlibs and devices, but I just need to find time to rewrite it a bit. Some people asked me if <their Slot-1 device> will be supported, but unfortunately, no one actually knows how to do this. The only chance is to ask the manufacturers how their hardware works, because –I– have no idea.

And that all I got to say for now. Happy 2007, by the way!

– Lick

libcartreset 0.72, 1 bug fixed

0.72 Update – Fixed Supercard Lite support.

Same story: Choose libfat version if you use chishm’s libfat that comes DevKitPro. If you use a different fatlib, then choose nolibfat version.

– Lick

libcartreset_nolibfat 0.7

I added a build that works without libfat. This will allow developers who use something like SATA’s fatlib or libfatdragon to do their own detection and simply pass it to cartSetMenuMode(deviceType).

– Lick

libcartreset 0.7, first release

I released the reset to gbaslot cartridge code as a library.

Here‘s the project page.

Useful tip on using FIFO for large transfers

A lot of tutorials tell you to wait before reading the FIFO:

while(REG_IPC_FIFO_CR & IPC_FIFO_RECV_EMPTY); // if empty, wait..
whatever = REG_IPC_FIFO_RX; // ..then read/receive!

But when mass-transfering variables through the FIFO queue, it is also wise to check before writing/sending, if the queue isn’t full. ‘Cuz if it is, you will have to wait until there’s a spot free, or the write will fail. Note: there is a total of 16 free spots in the queue.

So to add to those lacking tutorials, check the queue before sending data!!

while(REG_IPC_FIFO_CR & IPC_FIFO_SEND_FULL); // if full, wait..
REG_IPC_FIFO_TX = whatever; // ..then write/send!

The above code is safe to do within a loop. Here’s an example:

for(i=0; i<17; i++) // OMG!! More than 16!!

REG_IPC_FIFO_TX = data[i];


For me, another bug solved! 😉 Hehe..
– Lick

DSLite Brightness: Found the missing bit!

I found the bit in the UserSettings that stores the Nintendo DS Lite boot-up brightnesslevel. By reading/writing to this address, we can make the Lite boot-up with the desired brightnesslevel. Unless I’m slow, this hasn’t been done before.

Anyway, the bits are at the Language and Flags variable in the UserSettings. Bit 4 and Bit 5 will have to value of 0-3 (2 bits) indicating which brightnesslevel is stored.
(For read-only, libnds provides PersonalData->RESERVED3.)

– Lick