"Replacement" engineering projects:

Many of the old arcade boards use specialized chips to reduce the amount of (usually TTL) logic chips on the one hand and to prevent simple "copying" boards on the other hand. Unfortunately these chips are not produced anymore for quite some time and the existing ones will cease to work at any time.

But there is a chance to preserve them using modern FPGA or CPLD devices, some are still capable to handle 5V environments:
Replacement Setups

Of course these devices need to be programmed by developing a proper "replacement" code for them. Today there are a lot of resources on the internet to get more information about these custom chips. And tools like powerful logic analyzers are not at all out of reach for a hobbyist like me to examine the behavior of such parts quite accurately (especially within the environment they are operating).

Below you can find some more information how I did this reverse-engineering of the chips listed here.

My custom IC reverse-engineering and replacement projects:

Check out the detailed project pages to get more information on the parts and (if I consider good enough) also the VHDL source code.

The Namco 05xx IC:

<05xx> This is the 05xx custom chip, which is the famous Namco starfield generator IC used on boards like Galaga and Bosconian. Up to now there is no implementation I know which is 100% correct in the behavior. This project changes everything...
Click on the IC picture to jump to the detailed project page.



The Namco 06xx IC:

<06xx> Here is the 06xx custom chip, which is an interface chip between a MCU (usually Z80) and slave custom chips (usually something like 51xx, 54xx and so on).
Click on the IC picture to jump to the detailed project page.



The Namco 50xx IC:

<50xx> The custom bus sequencer IC is "work in progress" (currently under testing) - coming up soon.
Click on the IC picture to jump to the detailed project page.



The Namco 51xx IC:

<51xx> Here is the 51xx custom chip, which is a game input-controller and credit counter chip based on a 4 bit controller.
Click on the IC picture to jump to the detailed project page.



The Namco 52xx IC:

<52xx> Here is the 52xx custom chip, which is a 4bit single-channel sound synthesis IC (requiring an external memory containing sound samples).
Click on the IC picture to jump to the detailed project page.



The Namco 53xx IC:

<53xx> Here is the 53xx custom chip, which is a flexible game controller/steering controller based on a 4 bit controller.
Click on the IC picture to jump to the detailed project page.



The Namco 54xx IC:

<54xx> Here is the 54xx custom chip, which is a sound/noise generator chip based on a 4 bit controller, it is "work in progress".
Click on the IC picture to jump to the detailed project page.



The Matsushita Panasonic MN6221AA IC (analog-in-FPGA !):

<MN6221AA> This 18 pin DIL IC is not really a custom IC, but a specialized melody chip used by (one) arcade board(s).
I did an extraction of the melodies and set up a new sequencer controlling two tone generators, including the required envelope control. This implementation is fully digital and runs on a FPGA.

The detailed project page will be available soon.



The famous 555 IC (analog-in-FPGA !):

<555> Again, not at all a custom IC, but used with customized circuitries on many arcade boards. And it is a nice example of the capabilities of VHDL: It allows to set up the external R and C circuitry as generic real numbers to the VHDL implementation and provides a synthesizable code emulating the IC!

The detailed project page will be available soon.



Linear, conservative analogue networks from discrete arcade PCBs (analog-in-FPGA !):

To simplify reverse-engineering work for arcade boards, I set up "synthesize-able" analogue blocks which can be parameterised with "physical" constraints (aka R, L, C). Parameters allow also to scale the analogue bit widths to trade off FPGA space with analogue emulation accuracy.

About my analog-in-FPGA approach via HDL languages:

As nowadays people use directly HLS-tools (I did some academic research with Synopsys tools in 2004) to allow coding in much more convenient languages also for analog (e.g. SystemC or other high-level languages) and synthesize directly to an FPGA, I stopped this activities. It's not worth to continue. When I have some time, I'd like to try out a more modern way rather hacking tons of code in a "digital" HDL language not really made for this kind of approaches - unfortunately as this is only a few years old, open-source tools are rather rare. But I am sure it won't take long that this tools become "commodity" again, as the classic FPGA synthesis approach is.



A short overview of my reverse-engineering procedure:

First internet research & PCB analysis:
The first step is gathering information of different sources - every bits and piece can help! Datasheets, PCB schematics manuals or in lucky cases (partial) implementations in other hardware languages or sources of software-based emulators.
At least the knowledge of the pins and some idea of the functionality is needed to start analyzing with the logic analyzer. Here the schematics of the PCBs are the best source to get out what seems to be a clock, supply, input or output line.

Detailed analysis:
Analyzing variants of control signals or modifying timing is sometimes a good way to find "corners" of the functionality. This can not be done with the original PCB. So I set up my own logic-test environment for that purpose. It can answer some of the "what if" questions which may arise looking at the schematics and the initial analysis data. This setup is kept in parallel during the first implementation phase of the replacement (in my case in VHDL).

In case of custom ICs like the 5xxx further resources like the mb88xx datasheet from Fujitsu were of great help. Of course it is not possible to acquire the firmware code of the microcontrollers by just analyzing its behavior, so also sites like the Guru's de-capping project were essential to proceed. But also the MAME sources could be really useful in case of doubts - e.g. when the datasheets seem to be not correct or simply are not accurate enough.

Analyze the implementation using a replacement part:
Finally - at least where possible - we set up a replacement part using a CPLD or FPGA. Using a FPGA is much more complicated, as the old boards are usually on 5V I/O, but all modern FPGA drive usually 3.3V I/O and may be only 5V tolerant on the inputs. For less complex parts CPLDs, which are still available for 5V, can be used nicely. My favorites are Mikes TTL replacement boards, but I also use other CPLDs on prototyping PCBs to fit them to the required IC socket.

For larger devices (like the Namco 51xx and 54xx devices), I designed my own FPGA-DIL replacement board. I was able to verify my Namco 51xx implementation using this setup. Now a second generation of this boards is available, a prototype is shown on the left picture.




For more analogue or M/S chips, I have to use certain measurement equipment (DSO, SA, VNA) I own as well. This approach is not so straight forward, usually more thoughts are required with quite individual setups, sometimes also quite indirect approaches to get out how the chips are built. Sometimes - like with the Commodore/MOS SID chip other groups provide valuable input from decapping and reverse-engineering approaches.


All custom IC projects yet available and running:

Here a complete list of all Namco custom ICs (only some of them are required for some of my arcade boards):
Note: links to FPGA arcade project and the PPC clone project lead to external web sites.

The Namco 00xx IC:

The tilemap RAM addresser IC from Mike J. (fpgaarcade.com) as VHDL code.

The Namco 01xx IC:

Never saw one of these, seems not to exist at all. Added in this list just as placeholder...

The Namco 02xx IC:

The video pixel shifter IC from Adam C. (PPC clone project) as Verilog code (and re-coded by me in VHDL just for Galaga).

The Namco 03xx IC:

The 6bit controllable depth FIFO/buffer IC from Adam C. (PPC clone project) as Verilog code.

The Namco 04xx IC:

The object RAM addresser IC from Mike J. (fpgaarcade.com) as VHDL code. Adam C. (PPC clone project) set up also a Verilog implementation.

The Namco 05xx IC:

The starfield generator IC from me as VHDL code. In Galaga, I currently use a own creation, but I am soon finalizing the "real thing"! See above and here.

The Namco 06xx IC:

The custom bus interface IC from me as VHDL code. See above and here.

The Namco 07xx IC:

The sync/timing generator IC from Mike J. (fpgaarcade.com) as VHDL code.

The Namco 08xx IC:

The synchronous bus interface IC from Mike J. (fpgaarcade.com) as VHDL code.

The Namco 09xx IC:

This one is done by Adam C. (PPC clone project), maybe I'll need it some time...

The Namco 10xx IC:

This one is done by Adam C. (PPC clone project), maybe I'll need it some time...

The Namco 11xx IC:

Playfield shifter IC from Mike J. (fpgaarcade.com) as VHDL code.

The Namco 12xx IC:

Sprite positioner IC from Mike J. (fpgaarcade.com) as VHDL code.

The Namco 13xx IC:

Horizontal scroller IC from Mike J. (fpgaarcade.com) as VHDL code.

The Namco 50xx IC:

Custom bus sequencer (WIP by me as VHDL code). See above and here.

The Namco 51xx IC:

The coin/input processing IC from me as VHDL code. See above and here.

The Namco 52xx IC:

The 4bit single channel audio syntheses IC from me as VHDL code. See above and here.

The Namco 53xx IC:

The input controller processing IC from me as VHDL code. See above and here.

The Namco 54xx IC:

The noise sound generator IC (WIP by me as VHDL code). See above and here.