We have been working the last 4 Weekends on a cool side project – we built a DIY Super Nintendo development hardware. As a SNES Programmer or SNES Nerd you always want to run your code on the orignal hardware. But this is only possible using old backup stations from the 90ies like the Super Wild Card or Game Doctor. But all these tools lack cool features like SD Card support, USB connection or real time debugging. I own an old Super Wild Card and its a pain in the ass. I can’t get the parallel port connection working and so i have to use the builtin floppy drive 🙂 There are newer projects around, but either not working or not really cool.
So we decided to build our own hardware. Today we got our proof of concept working. Its based on a STK500 setup using a ATmega16 (Ja.. I fried the ATmega32 while setting the fuses..). Attached is a SD Card and a home cooked memory bus driver for one 512k SRAM Chip.
Both the ATmega and the SNES memorybus are connected to this SRAM via busdrivers. The ATmega does the housekeeping and manages the access to the RAM. To save IOpins on the ATmega side, we use shiftregisters and counter to set the adress. On the SNES side its connected to a Snes Multi Cartridge Adapter. One slot holds an orginal game, so we can use the lockout chip from there and solder the data and address from the other slot to our memory interface.
Now we are able to upload a 2Mbit SNES rom. A mario sprite on flashing background. We load this rom image from the SD Card and write it to the attached SRAM. When this is done we switch the busdriver and connect it to the SNES memory bus. Today we got the demo working.
See the video and pics.
We did like 3 other proof of conecpts before to get this working.
Made my very own openwii version including debug routines. So i added a another status led to the chiip design and also added IO lines to the ATmega SIO pins. So now i have a drive chip which prints debug info via a serial line. So everybody who want to understand the dvd drive patching can watch this in serial console. The debug code retrieves the media status flag and prints some other status flags.
This is really usefull, isn’t it. Made a video driver for gnuboy based on aalib. The sound it actually done by sdl lib. But i don’t care about sound to much because this thingy is meant to be played via telnet. So hook up the aagnuboy binary into xinted and have fun.
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
log_on_failure += USERID
port = 1989
server = /usr/local/bin/aagnuboy
server_args = /usr/local/games/roms/demo.gb
log_type = SYSLOG daemon info
Updated my old SNES demo a little so that it runs on real hardware. Was able to get my handy on a half broken Super Wild Card. So i finally i fixed the rom headers and now the little demo runs on a real snes. Nice.
Made a Futurecomposer player to the PSP. This version is hacked together from the xmms-fc and the fcplay sources. First i did x86 version using alsa interface. Later ported this over to the psp using the native audio interface.
Memory footprint is quite ok, despite the fact that the old FC engine is written in c++ so that the whole stuff has to be linked against libstdc++ which makes the player kind of bloated.