Designing a TRON Interface Board
作者修复并改装了经典街机游戏《印第安纳琼斯》和《TRON》,克服了信号转换、音频处理及旋钮控制等技术难题,并分享了自制电路板的解决方案。 2025-7-28 13:26:34 Author: www.zdziarski.com(查看原文) 阅读量:18 收藏

General

On July 28, 2025 by

It wasn’t called retro gaming when I was a kid, it was just gaming. I’ve been dabbling a bit in amateur EE this summer as my interest in rehabbing arcade games has recently hit a nerd peak. It started with this 40-year old trashed Indiana Jones: Temple of Doom Atari System 1 board I found for cheap. Hint: If the seller says, “was working last time I played it, but don’t have the ability to test it now”, that’s code for “it’s trashed”. Nevertheless, it’s pretty rare and was one of the three arcade games I remember playing (at a pizza joint) with my dad before he got too sick, so it has sentimental value. After hours of reading schematics and replacing 11 bad ICs (probably the result of a past power surge), I finally got it running after a couple weeks.

Because there’s no JAMMA converter board for System 1 games, I had to patch it into a JAMMA rig by hand, only to find that the directional pins were active-high. This is a problem, as JAMMA is active-low. Thus, my first foray into circuit building involved a 74LS04 (hex inverter, or “a bunch of NOT gates”) and a soldering gun. With the schematics in hand, some Molex wiring work, and a little op-amp from Amazon, I was able to play it on my coffee table. I still suck.

This got me thinking, what other arcade boards are out there that don’t have JAMMA converter boards for them yet? Well, to celebrate Disney’s coming TRON: Ares movie (which I’m really hoping they didn’t turn into a musical), I picked up an original TRON board (1982). TRON is a tough one to convert to JAMMA, because the original arcade game had a spinner. The spinner is driven by an optical encoder, which nobody’s really taken the time to reverse engineer. There are also a few smaller quirks with TRON. The video signal has a separate H and V sync, and so these need to be combined into a composite sync to work with a modern SuperGun. TRON also takes advantage of stereo audio, and requires both channels to hear all of the sounds; JAMMA only supports mono, and so these will need to be combined. So to make TRON work, you’ll need at least three circuits: a video sync combiner, a stereo-to-mono circuit, and some type of interface to emulate the spinner control. There are a few other less significant things I discovered you don’t really need to interface with a JAMMA board; for example, the reset circuit requires +5V for only a few moments when the game boots. I find that the game boots most of the time without it, and when it doesn’t, there’s a reset switch right on the main board you can press.

So the first, and easiest, circuit to tackle is a stereo-to-mono converter. This can be built with just a couple of 470 ohm resistors. Each channel goes in at one end, and you combine the lines at the other end to make your mono circuit. This protects the audio on the board, which you could easily blow if you just tie the two channels together. I had initially tried with 1K resistors, but the sound was too quiet. Same with Indiana Jones (although I discovered later that the left and right channels in IJ are identical, so you can get away just using one channel).

Next, a sync combiner is most easily built as an NXOR circuit. For this, I used a 74LS86 (quad XOR IC) using two of the four gates. For the first XOR gate, you feed in H and V sync lines, and your output is the XOR of the two. Then, to turn it into an NXOR, take the output of that gate and feed it into another XOR gate on one input, with your +5V line as the other input. The output is a composite sync going to your JAMMA edge.

Next is the challenging bit. How could we emulate the spinner, so that Tron’s arm moves quickly enough in any direction? I didn’t want to have to buy a spinner and use a different set of controls; what I wanted was to map one button to move his arm counter-clockwise, and another button to move it clockwise. OK, but how? The schematic for the optical encoder shows a 74LS491 directly interfaces with seven pins that ultimate connect to J4 on the I/O board:

The LS491 IC is a 10-bit counter, but it looks like Bally is only using seven of those bits (0-127). After a little bit of experimenting in Test mode, it looks like Bally takes an initial reading at boot, and sometimes at the beginning of each mini-game (like the tanks game), and then moves Tron’s arm (or the tank turret) depending on whether that number goes up or down. Because those values could be anything whenever the pins are polled, there’s no specific value that corresponds to a direction. By default, whatever value it samples at the time it’s polled is mapped to 90° R. The act of turning the spinner quickly increments or decrements the value, telling the game to rotate left or right. You can go round and round, and since the board is ignoring the high 3 bits, it just keeps rolling over back to 0. Nice.

So it looks like your 74LS491 IC is the interface to the I/O board, and however you decide to move that counter is going to determine what direction and how fast Tron’s arm moves. The LS491 counts on the rising edge of the clock (CLK) pin, and the direction is determined by whether pin 9 (UP) is high or low. So both buttons need to pulse the clock, but one also needs to force the UP pin low.

After a bit of trial and error, I put together a prototype board to test out. In Test mode, you can see the value of the encoder increasing or decreasing with each button press. I included a 74LS04 to invert the signal for UP, as CLK requires high even when UP is pulled low.

In actual game play, however, you don’t want to have to sit there and mash the buttons 64 times just to turn Tron’s arm halfway around. Ideally, you want an adjustable clock pulse to do this for you. Now the buttons on a JAMMA interface are only polled at 60hz, meaning the fastest you could map a rapid fire would be 30 times per second (e.g. 30 pulses high and low). The turbo-fire options in the BlueRetro receiver I’m using allows me to roughly hit this limit, and surprisingly makes the game quite playable – even at higher levels. But to get higher, a clock pulse is needed on the LS491 clock line, rather than on the JAMMA control. A simple NE555 can do the job, however the signal will need to be inverted again so that the active-low JAMMA signal can engage the timer.

I rebuilt this circuit in KiCad for anyone interested in building their own TRON interface board. I am told that Adrian from PCBJunkie has also designed and is beta testing a board, but this will likely not be released for quite a while.

The rest of the JAMMA interface is simply connecting wires. The schematic has the layout, and there are some easier-to-read pinouts on Mike’s Arcade site for those looking to do the same. Unless you’re using a CRT, you’ll need something that can render in Scaler mode, like an OSSC Pro, to play this game as it runs at an oddball video mode (the same mode as Popeye).

In the end, it’s worth the effort for a classic game that will never get old.


文章来源: https://www.zdziarski.com/blog/?p=12821
如有侵权请联系:admin#unsafe.sh