Some of you might have been following this, but recently I’ve completed some DS homebrew code to make it simple to send data between processors; This took a good bit longer than it probably should have but it is done now, and being integrated into libnds as part of our plans for world domination, er, our plans to make homebrew easier. The basic idea behind the system is to take the single pipe between the processors (the IPC FIFO) and use a system wrapped around it to create a set of virtual channels, through which you can send data from one processor to the other. The system is set up with the ability to use callbacks, which will automatically dispatch the message on the receiving end to a user function, or the receiving code can just check the incoming queue occasionally. As it was designed, the system will pipe one of 3 types of value through to the other processor – it can either send a mainram address, a 32bit data value, or a sequence of 32bit values. It’s designed to be very fast and efficient about this sort of thing, the latency to send a value through is very low, and it’s all interrupt driven to receive data as soon as it comes in.

For now, the code is not available to the general public, right now it’s intended to be used as a low-level communication layer and currently the plans are being made to integrate it into the libnds examples as a way to quickly get information (buttons, touch, rtc) from arm7, and  provide a channel for controlling the arm7 (i.e. sound, power control, others) – the hope is to have a more solid interface for this sort of thing to help people who don’t really want to deal with the hardware directly but still want to play sound and things like that. I expect that some level of access to all this will also be provided for people who want to do their own thing on arm7, and this code I hope (and expect) will help provide a better environment for developing applications across both CPUs.