What is a coprocessor).
I supported the James Bowman. The community around this device so far is small but friendly. It includes electronics and programmers buffs from all kinds of backgrounds.
The Kit
One of the things that struck me when I first opened the box was how exposed everything seems! At some point I would like to either buy a case or mod something to hold the device; but as I have just moved from the UK to the Austin area in to a little apartment, I do not have the tools to fashion something myself just yet.
Here you can see the interfaces of the board. The SparkFun.
I put a pen in shot to give a sense of scale to the pictures.
The boards communicate to each other via pins and slots which can be seen in the picture above. The shields are designed in such a way that plugging things in the correct way feels natural. On my kit, the audio jack and USB are stacked directly in a way that makes it impossible to push the board all the way home; however, the pins are long enough that it does not matter.
After I constructed the device, the next thing I wanted to do was sit on the sofa with it and play on the television. After asking a few questions on the Gameduino answers forum I decided to try and use sixteen feet of VGA, USB and audio cable. I skipped buying a power supply as my television has a USB port – so I could buy a USB extension cable that is cheaper, less bulky and more generally useful.
Despite the length of the cable and low power draw of Gameduino, it works nicely (well for me anyway!) over that distance. So when playing the Gameduino, it only needs to be connected to the television – though granted via three cables. During development I use the laptop USB for both power and data transfer, while the TV acts as my screen.
Above you can see the boot screen of the Gameduino (which is on the right side of the Kinect under the television). It also plays a nice chord on startup.
Specifications
ArduinoUno (source)
Processor | ATmega328 8-bit microcontroller |
Clock Speed | 16 Mhz |
Flash Memory | 32KB – 0.5KB used by boot loader |
SRAM | 2KB |
EEPROM | 1KB |
Gameduino (source)
Resolution | 400×300 – Compatible with any standard VGA monitor (800×600 @ 72Hz) |
Color | 512 colors, processed internally at 15-bit precision |
Background graphics | 512×512 pixel character background. 256 characters, each with independent 4 color palette. Pixel smooth X-Y scroll (wraparound) |
Foreground graphics | Sprites are 16×16 pixels with per-pixel transparency. Each can use 256, 16 or 4 colors. Four-way rotate and flip. 96 sprites per scan-line, 1536 texels per line. Pixel perfect sprite collision detection. |
Audio | Stereo. 12-bit frequency synthesizer. 64 independent voices 10-8000 Hz. Per-voice sine wave or white noise. Sample playback channel. |
Memory | 32 KB – addresses are 15 bit, last bit indicates read or write (via SPI interface) |
Coprocessor | J1 Forth CPU. 16-bit internal bus, 8-bit memory interface. 50 MIPS. Direct access to entire Gameduino memory. Executes code from set 256 byte range. Machine instructions very close to Forth. Single-cycle 16×16 bit multiply, plus barrel shifter. Fast, efficient stack machine. |
Why
I wanted to get back to basics a little bit. My favorite language these days is C# but for a long time it was C++.
I believe constraints can force creativity in some interesting ways. Necessity is the mother of invention after all. The Gameduino is constrained with its specification, though has many interesting quirks I look forward to learning about. For example, the co-processor needs instructions in Forth!
Next
Practicing skills and learning new things is always more interesting when trying to accomplish something rather than just going through exercises. I plan to have a little game of my own running on it in time. I have not got that far yet, but below is a sneak peak.
I have started to get used to the processing based environment provided for Arduino. Projects are called sketches and basically include all the c/c++ source and header files in a folder. It is an IDE that provides a way to compile and upload your program, plus serial monitor which is helpful for sending debug messages. I do not think there is a way of stepping through code on the device without more hardware though.
My aim is to try some test driven development with the Gameduino now I have explored it a little. Ideally I would like my own project to be built and deployed to the device via a single line on the command line or a double click of an icon… I am not there yet though.
If anyone has any Gameduino projects to share or has worked on similar devices, please say something in the comments. It would be nice to know that people are reading this!
Further Reading
- Gameduino site
- via forum)
- Derek
- Fungus
- Arduino development environment
- Gameduino Coprocessor
- Gameduino Reference Poster
- Gameduino sample programs and library
- Gameduino Python Package
- Gameduino for Artists
- Gameduino Answers
- Gameduino twitter – tweeting and retweeting community activity with the Gameduino
- Mark VandeWettering
- David Roberts