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.
RSS feed for comments on this post. | TrackBack URI
February 12th, 2008 at 3:25 pm
But what does this mean for DS-DS wireless multiplayer!?!
:)
No, seriously, that’s all I care about seeing in the DS homebrew scene.
February 13th, 2008 at 4:54 am
Ryan, i thinmk that was mean :(
youre not paying this guy, hes doing this on his free time.
you should say what i will say:
Glad you made it!
now coding homebrew will be alot easier and we may see some very nice homebrew soon ;)
keep up the good work!
Me and Ryan is rooting for you! woohooo!
lol, seriously, were happy ^^
February 13th, 2008 at 9:38 am
XD
well I can’t say I’m too concerned really :) I just do what I feel like doing anyway, can’t think of much that would get specific stuff done faster ;)
It’ll all get done eventually, but the order in which it gets done is really a wildcard, depending on how much time I have around, how much I’m bothered to do specific things, how much I want to do specific things, and etc. Makes things quite complicated
February 14th, 2008 at 1:46 am
Seconded. As another DS coder, I’ve only “nearly” worked out the kinks in my asynchronous IPC. I’m still unsure of the best methods or the most elegant API. (Mainly as I support events, nesting and reentrancy. Oww, hehee. :P)
So well-tested IPC is awesome. :) I think that many a hair shall be saved!
February 26th, 2008 at 4:04 pm
“how much I’m bothered to do specific things”… :)