Friday, July 30, 2010

Arduino->NES Transfer Tool + FaMI - Family MIDI


I've been working at a serial connection to the NES for a few months now. At first I came up with a board to try and establish a serial line to the NES through the controller port - I only made 2. They worked - but I figured that it was possible to do it without the board if I did some tricky stuff with the ATMega interrupts on the Arduino. After a few days of debugging (and cycle counting) it’s working flawlessly. The advantage of this over a software serial based approach is that the Arduino acts as a buffer that’ll hold incoming messages (up to 128 bytes) until the NES is ready to get the next one. This means that the NES is free to do other things and doesn’t need to spend time polling the controller port! The latency is extremely low - about as fast as the NES could handle - faster than the MIDI standard. The serial code is compact and easily relocatable - it works great as a replacement to any controller code. Working on a new name for this since it really just acts like a bridge between your PC and the NES. Both the ROMs and the Arduino stuff will be open source so if you have the hardware you're ready to go!

Arduino->NES Transfer Tool features:

PRG Upload (2K max ($6000-$7FFF) - great for quickly debugging small programs)
CHR-RAM Uploader - CHR banks / nametable data
Full PPU control (palette / scroll registers / mirroring etc..)
Full sound register control

Demo video of PRG/PPU uploading. First the transfer tool is loaded from the powerpak - then glitchNES is uploaded over serial- then from there a couple of new CHR banks are loaded while glitchNES is running.


Example software: (I'll upload videos as I record them)
PRG Upload for fast development cycle on real hardware
Bridge PC data through serial - (ex. network data sent over serial to Twitter client)
Analog sensor input for alternate controls
MIDI CC control of glitchNES
Atari punk type console using the APU
Hardware NSF player

What you need:

An NES
Arduino Duemilanove or equivalent (testing RBBB this weekend - should be no problems)
Desoldered NES controller cord (I have about 50 of these that I intended to use for the boards)
Powerpak or other devcart (All software is currently using NROM (PRG-ROM + CHR-RAM) to make things simpler)
Optional: MIDI-in circuit for Arduino for FaMI

- That’s it! No internal modification / extra components needed. It took a while to get the Arduino to handle everything but it was worth it to eliminate any external components. Just hook up the wires to the Arduino / run the software and pop that badboy into port 2.




And... presenting...


FaMI (Family MIDI) - Open source NES MIDI software + live visualization by NO CARRIER


Right now channels 1-4 are working with no issues. There aren't any effects yet - but it’s completely stable / performance worthy in the state that it’s in. I'll be working on pitch bends / cc control in the next couple of weeks - but it's open source so hopefully people will develop beyond that! The samples work but they are fixed- I’m working on a mapper for powerpak right now that may allow sample uploading.

What’s great about using this Arduino setup is that you can use VBlanks MIDI->serial processing app so you don’t even need to build a MIDI circuit - just use the USB cable!

I’ll be releasing the source code for the Arduino/ROMs within the next week after I clean up the code/comment. I'm hoping to have a suite of audio/VJ tools that are ready to run so I’m looking for inspiration as to what else to use this stuff for! So please let me know if you have any ideas!

Thanks to
+ NO CARRIER for FaMI name / logo / layout
+ bucky for the encouragement / pitch tables
+ Animal Style / enso / entire Philly crew for being awesome dudes.
+ neilbaldwin and blargg for inspiration to finish this NES stuff

Oh yeah I've got a bunch of desoldered controller cables (40+) - if you're going to pulsewave this weekend and have the hardware to try this out, let me know! I'll bring you one so you don't have to destroy a controller - free of charge - just help me test this stuff! smile

2 comments:

  1. This is great. Hopefully more people catch on to your blog or at least comment. All my gear just went into temporary storage since moving and it probably won't make it out until February but I definitely need to pick up an Arduino in the future. Being able sent data/commands over the controller port is ideal.

    ReplyDelete
  2. I love this, but where is the download for the PRG upload tool

    ReplyDelete