Post subject: TASLink: rugged hardware for console playback (and more)
Emulator Coder, Player (69)
Joined: 10/4/2005
Posts: 197
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.
Amaraticando
It/Its
Editor, Player (159)
Joined: 1/10/2012
Posts: 673
Location: Brazil
This is so @#$ing cool! Thanks for the effort, time and money spent in this project. I hope it pays off at Games Done Quick events.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3807)
Joined: 11/30/2014
Posts: 2827
Location: US
Wow this is amazing! Great work on some professional looking technology there. I love seeing hardware type stuff like this, keep up the great work!
ALAKTORN
He/Him
Former player
Joined: 10/19/2009
Posts: 2527
Location: Italy
Amazing. Where’s the DS stuff?
Post subject: SNES visualization update
Emulator Coder, Player (69)
Joined: 10/4/2005
Posts: 197
Thanks for all the kind words everyone!
ALAKTORN wrote:
Where’s the DS stuff?
I hadn't really considered that part of this project. The code for it is available on github, but I haven't had the time to really document it. I've been busy working on the SNES visualization hardware. Here's what I came up with: This is the main board(s) as viewed from the back of the controller (dpad is on the right). The circuit board is split in two due to a limitation with the free PCB software I am using. EAGLE Cad has a limit on how big your PCB can be if you are using the freeware license. To keep this open source and to not require paid software for anyone who is interested in playing with these designs, I decided to split the board to fit within the limit. There is a joiner board in the middle to reassemble the two parts. Here is the circuit board overlaid on the front of the controller shell (shell image is mirrored): You will see 2 LEDs in each of the holes for ABXY. This is to account for the extra 4 bits in the SNES controller communication that don't correspond to any buttons. I also had to make circuit boards for the shoulder buttons: For the LED colors, we decided to match ABXY to the super famicom colors of red, yellow, blue, and green. The extra bits will be red, L/R and the dpad will be blue, and start/select will be green. I have the circuit boards and parts on order, and should have them back within the next few weeks. There are still some things to work out, like which green LED I will be using for the Y button, and also how I will mount the L/R LEDs to point forwards. I'll post a photo once I have one built! The circuit board designs are all available on github if anyone is interested in looking at them.
BigBoct
He/Him
Editor, Former player
Joined: 8/9/2007
Posts: 1692
Location: Tiffin/Republic, OH
Regarding the LEDs for the extra bits, I don't think having them share a color with the face buttons (the A button specifically) is a good idea because then if someone's doing ACE how can you tell if the A button is being pressed or the unused bit?
Previous Name: boct1584
Emulator Coder, Player (69)
Joined: 10/4/2005
Posts: 197
boct1584 wrote:
Regarding the LEDs for the extra bits, I don't think having them share a color with the face buttons (the A button specifically) is a good idea because then if someone's doing ACE how can you tell if the A button is being pressed or the unused bit?
The problem is that there aren't many choices for LED color other than red, green, blue, and yellow. Amber/orange is an option, but it looks like a mix between red and yellow, and all of the ones I tested were very bad looking. All of the white LEDs I tested were extremely bright and drowned out the other colors. There are other shades of the same colors available, but it's hard to say whether they will look good or not. Hopefully position will give it away since ABXY will be closer to the middle. The two LEDs in each hole are slightly spaced apart, but not by much. Also typically the extra bits are only used when sending code/data, which is done per frame (60Hz) or faster. At that speed it won't really matter if you can't tell for fraction of a second whether you saw an A or the extra bit light up. And during regular game play it will be obvious it is only A being pressed. However I will test how this looks, and if it doesn't look good enough I may switch to a 3mm LED for the extra bits to make it obvious which is which.
Post subject: SNES Visualization, visualization breakout
Emulator Coder, Player (69)
Joined: 10/4/2005
Posts: 197
Here is the end result of the SNES visualization boards: The split circuit board design actually came out very well and resulted in a very strong and stable board. I made a small mistake with one corner of the board such that it didn't fit in the shell with the shoulder board in place. I was able to file the corner down without it being a problem. I also made a 2 port visualization breakout board: This board lets me plug two visualization boards into one port on the TASLink board, making it very useful for y-cable setups on the SNES.
Joined: 5/23/2014
Posts: 162
What if, instead of putting the four extra bits in the ABXY buttons, you had the four seperately, say, above the START/SELECT buttons? Yes, this would require modifying the controller shell, but it may end up being easier to visualize then. You could then center the ABXY LEDs and it would probably look better; those ABXY buttons look rather cramped. The shoulder buttons look really nifty, though. How fragile are they? (AKA could you possibly put these inside the controller shell instead of just outside them)?