390MHz ARM9 with OpenGL Accelerator for less than 30€
Warning! This is a work in progress. You will likely destroy your Didj. I'm not responsible for any damages, claims or injuries that may result from this write up and files. If you don't know what you are doing just leave the Didj as it is.
Update 12.02.2010 :
Some notes about the availability of the cartridges.
Update 24.05.2009 :
Finished my custom cartridge layout and successfully compiled a uClibc/GCC 4.1 compiler for cross-compiling linux apps for the Didj
Udpate 31.05.2009 :
Added preliminary x-modem upload support in lightning-boot. Stitch together a lightning-boot Winarm package for easy cross-compiling on windows machines
Found the xmodem EOT bug. Identified more pins on the cartridge connector. Added u-boot download mode in lighning boot. Build u-boot for the Didj and build a Linux Kernel out of the Leapfrog tarball which surprisingly works :-)
Build a DIDJ to xD Card Adapter. Linux reads the correct Flash ID from the xD Card.
Dumped the xD Card thing, got the SD-Card controller partially working in u-boot. Lightning-boot loads u-boot from the internal NAND Flash.
Ordered 10 Didj cartridge PCBs. Set up a project on Berlios
New Cartridge Pinout.
The PCBs arrived yesterday. Prototype is working :-)
Finished the cartridges.
A couple of months ago I found this blog . Too sad the Didj isn't avaiable in Europe yet , but my mother was on holiday in the states. So she bought me two of these ( Thanks :-) )
I was impressed about the size of the Didj , really big for a children's toy. The screen is also big compared to other toys (OnStation,those 20€ Sega Handhelds,..).
Here a couple of pictures showing the front and back ...
The Didj runs on 4 AA cells or with an external 9V DC adapter. It has a build in speaker and a headphone connector. On the top side there is a USB device connector and the cartridge slot. It has 32MB of DDR RAM and 256MB of NAND Flash. On the NAND there are 7 partitions (Lightning Boot,Atomic Bootflags,Kernel,Rootfs,RFS Kernel?,RFS Rootfs?,Brio and EXT)
So let's start ...
Thanks to elinux.org that the pins for the console are known. I soldered a 3.3V RS232 level shifter on these pins. Poking around in the filesystem I found some interesting test tools in the /usr/bin directory.
- lftest_lcd - puts some color patterns on the screen and shows a picture of a guy
- lftest_oss - plays a audio file ( some part of classic tune or whatever)
- lftest_rtc - counts some seconds on the rtc device
- lftest_usb - does some stuff with the USB device , didn't figured out yet what it does
Time to do some serious hacking!
Leapfrog published the source code of the linux kernel , uboot (which isn't used in the release version of the Didj) and a custom bootloader called "lightning-boot".
Theoretically it would be possible to build a own kernel from the published source code and use the usbctl application to transfer it to the Didj overwriting the original kernel in the NAND , but what if the build fails (what is likely !) and the Didj won't start anymore? No more usbctl to access the NAND -> Brick
I figured two ways out to boot the Didj from external sources.
The processor (Magic Eyes Pollux , or some kind of custom derivate for Leapfrog called LF1000) has the ability to boot over the UART. An other nice feature is the possibility to swap the NAND chip select lines with those on the cartridge connector.
This features are controlled by pull up / down resistors on the cartridge slot . For example if you want to use the UART boot feature you have to pull D5 and D6 down (I used some 470 Ohm resistors). The next time you power up the Didj it seems as it won't start , but the processor is full functional an waits for some input on the UART.
The pinout of the cartridge slot ( no guarantee !)
and plugged in the DIDJ
Long time no updates, but I wasn't lazy :-) I was busy getting the SD-Card controller working. At the first try I added SD-Card support in lightning-boot. But this was a mess an never worked really , since I have no real information how the SD controller works it was mostly guesswork. After some days I found a u-boot tarball for the GPH WIZ , the GPH WIZ uses the same CPU as the DIDJ and has SD-Card support in u-boot! I just picked the needed files out of the tarball and patched the leapfrog u-boot. After some attempts i got this in u-boot :
LF1000 # mmcinit
SD ver 2.0
SD found : Size = 3930624 KBytes
Yeah right , 4GB SDHC on the DIDJ :-) Plenty of space for homebrew
Since it is really difficult to get those non - "Type M" xD-Cards these days , I dumped the xD-Card cartridge idea and go for a simple SD-Card cartridge without any controller or other fancy stuff on it ( except for a FTDI USB/RS232 converter for console access) .
Further , as mentioned above, I did some stuff with lightning-boot. Lightning-boot now has LCD Text output and some simple drawing functions ( setpixel , clear screen). Lightning-boot loads u-boot from the internal NAND flash, I added u-boot to the kernel partition ( which has a obscure "filesystem" , called TFS but luckily in the leapfrog tarball there is a python script to generate a flashable TFS image).
On my to-do list are now this things :
- Add SD-Card support to the Kernel
- Clean up the Sources of lightning-boot and u-boot
- Design and build a SD-Card cartridge
- Put all together in a Buildroot or Openembedded package
- Write a howto for getting u-boot and lightning-boot on a new Didj without loosing the original functionality of the Didj
Maybe , if there there is demand , I will produce a small batch of these SD-Card cartridges and will sell them for small money (~15€ / ~20$ + shipping )
Just drop me a email if you need a cartdridge.
I ordered 10 Didj cartridge PCBs. The PCBs will arrive on October the 8th. As soon I populated,soldered and tested the cartridges I will ship them.
One cartridge will cost 15€ , please be aware that I don't earn a single cent from this. Alone the manufactured PCB without components costs ~9€
The shipping costs are : US ~6€ , Europe ~ 3€
Only 2 cartridges left.
The cartridges will have an FTDI FT232RL for console access and an SD Card socket. Further ther is an unpopulated Footprint for a NAND Flash.
Here are the schematics and a rendering of the cartridge
I will release the Altium Designer project , Gerber files and BOM as soon the first batch of PCBs is populated and I'm sure that there are no errors in the layout.
Also I have set up a project on Berlios, named
There you will find a git repository filled with the Leapfrog tarball and an (empty) Wiki...
Feel free to join :-) Any kind of help is welcome !
In the future I will shift this page to the Berlios Opendidj Wiki.
New Cartridge Pinout. Still waiting for my PCBs to arrive ....
The Cartridge PCBs arrived yesterday. I build one prototype and it works!
The bare PCB
And the backside of the PCB
Don't worry the Cartridges I will ship look far better. They will be soldered in a reflow oven.
Next week I will have next to no spare time, so I will populate and solder the cartridges next weekend.
Finally finished the cartridges , sorry to everyone who orderd for the delay!
I had an really busy time the last months
Waiting for the glue to dry :-) I will write an email to everyone who orderd a cartridge
All cartridges are sold !
By request the Gerber files for the Cartridge : DidjCartV1.zip
I get many request if I ever build a second batch of the Cartridges.
At the moment I'm not planing doing so. I will try to find a manufacturer who
build the Cartridges for me.
But the Cartridges definitely get more expensive If i build them by myself.
I will let you know when I get an offer from the manufacturer.