TASLink is a hardware/software console playback project that I started working on after
AGDQ 2016. dwangoAC and I decided that if we are going to continue presenting at live events like *GDQ we needed to improve the hardware we use. TASLink is built on the
Papilio Pro FPGA development board in the form of "wings" (or "shields") that can be attached depending on the situation. I had thought about using an FPGA for this application for a few years, and once we realized the communication speeds we needed to handle I thought this was a good time to actually do it. I was also interested in spending some time practicing with VHDL. My goals were the following:
• Rugged hardware: Traveling is tough on the hardware. Cabling and other components constantly fall apart and we end up having to fix them at the event. We needed more rugged equipment to stand up to this level of abuse.
• Better EMI protection: AGDQ 2014 is a good example of when EMI became a problem. We couldn't get Gradius to sync, most likely due to the EMI present in the hotel which was made worse by the metal cart we were using. We later tried adding shielding to the cabling in the form of tape+aluminum foil, but we really needed something less hacked together.
• Support for visualization: Visualization is important for the audience at live events, so this was a must. We also wanted it to be more visible on camera and not inverted like it has been for the past 3 years.
• Fast playback: The new hardware had to be able to at least play back all of the movies we have shown at the GDQ events so far, and hopefully also be capable enough to support even more.
• Open source: Hardware design and supporting software should all remain open source.
NES/SNES
This is currently the main board for NES/SNES:
This board has 4 console ports (shielded RJ45) and 4 visualization ports (unshielded RJ45). The console ports are used to connect to a console in a [1 TASLink port] <-> [1 console controller port] fashion. This allows the board to support up to 4 separate consoles simultaneously with one controller cable each. It can also be used for 2 consoles, 2 cables each, or many other combinations. These ports have D0 and D1 hooked up allowing for a y-cable setup on SNES (2 controllers per cable). The console ports are shielded to help with EMI protection. RJ45 connectors were used to make connection easy, and also to use a connector that is readily available. The board has a number of debug connections for a logic analyzer or an oscilloscope. This board will be used at SGDQ 2016 to demonstrate
SMB 1+2+3 on 3 separate consoles with visualization for each.
This is another NES/SNES board that only supports 2 controllers, and they must be on the same console. However, this board supports the SNES multitap, enabling playback of the
Snake/Pong SMW run shown at
AGDQ 2014. This was one of my early prototype boards so it doesn't have any visualization support and the console ports are unshielded. I plan to redo this board with support for more features in the future.
The software for these boards is highly configurable. With the 4-port board it is possible to play back 2 NESes and 2 SNESes at the same time, or any other combination. Some controller response times can be adjusted, and I have support to ignore the
DPCM input glitch (seen with SMB3 and others) which can be enabled/disabled. I run the USB serial port at 2M baud, and when combined with the large 64 frame buffer I am able to successfully
play back SMW+SMB which requires a high datarate.
NES Visualization
For visualization we wanted to match the look of a NES controller as much as possible. I used knock-off controllers for the controller shells, and I designed my own circuit board to fit inside. I spent a while picking LEDs which looked good, were bright enough to see on camera, and didn't draw too much power. I wanted to limit the current draw of the boards to prevent overdrawing the USB port they are powered from. I carefully chose the LEDs to be bright at low current, and I was able to run each LED at ~2mA for a total of only ~16mA for each visualization board. I am currently in the process of designing a SNES visualization board and I will post photos of my progress later. These boards can be plugged in directly to the visualization ports if only a single controller is needed. For a y-cable or multitap setup I have a breakout board that separates a single visualization port into 4 ports.
NES/SNES Cables
The SNES cables we currently use are regular 5 conductor SNES controller cables with 2 extra wires ziptied onto the side that are then covered in aluminum foil and tape for shielding. These are horribly sketchy, so to replace these cables I found Eurocable brand CAT-5 which is both braided and foil shielded. It has a thick jacket making it more durable, and 8 conductors (we only need 7). I bought some NES and SNES extension cables that I was able to disassemble and reuse the console side connector. I also found crimp pins that fit in those connector shells and that work with the consoles. I stripped the jacketing, crimped the wires, assembled the connectors, epoxied them shut, and added heatshrink for strain relief. I terminated the other side with a shielded RJ45 and a connector boot to protect the locking tab. Each cable was around 2 hours of work, but they should stand up to a lot more abuse than the cables we have been using. The double shielding should also give us better EMI protection.
N64
This is a prototype board for N64 support. I only recently started working with this, so it is still very rough. I have basic playback working, and I have begun playing around with some more advanced functions including memory packs and the transfer pak. Recently I used it to have some fun with Pokemon Stadium as seen
here. More development to come.
We're hoping this new hardware will serve us well for future live events. The FPGA should be plenty fast enough for the foreseeable future. The hardware should stand up against more abuse and be better shielded. And of course the whole project is and will remain open source.
Thanks to everyone who has helped out including dwangoAC, Ilari, p4plus2, serisium, TheAxeMan, Ownasaurus, and others I am probably forgetting.
Take a look through the
github repository where you will find the PCB designs, VHDL code, and some streaming scripts for running the hardware. I will be adding a bill of material for everything in the near future.