General InfoWhat's a 6502?
It was the CPU of choice for the very first mass market home computers and so, played a central role in the home computer revolution. It was the brain of the first computers from Apple, Commodore, Acorn, and Atari. It ran the Atari 2600 game console, and its core was incorporated into the central processor of Nintendo's NES. Check out the pictures in our slides and the excellent Wikipedia article.

* So, what has it done for me lately?
Descendants of the 6502 and the chips it influenced are sold today in quantities of hundreds of millions annually. It was a strong influence in the development of the ARM architecture. It also powers Bender's brain in the TV series Futurama, and Arnold Schwarzenegger's ruthlessness in The Terminator.

* Why don't you just run a 6502 emulator?
There are many excellent emulators available, but emulation is approximation. It can be extremely difficult to create an accurate emulator, because the typical approach to writing an emulator is to glean information from chip specification documents or more rarely from any chip schematics that happen to be available. This information is always incomplete and even the original chip logic schematics (also Verilog and VHDL code) can differ from what was actually built in silicon (see ECO). A disciplined emulator will capture and use traces of actual chip behavior, but it's near impossible to capture the billions of sequences of bits that a real chip gives rise to. Instead, we build a virtual chip by modeling and simulating the actual microscopic parts of a physical chip. We're interested in accurately preserving historic designs. It's archaeology for microchips.
While a multitude of people understand the instruction set for the 6502, almost no one, apart from the original designers, understands how the physical chip achieves this instruction set. The design is as elegant and sophisticated as any program written for the 6502. As digital archaeologists, we invite the current generation of hardware and software engineers to appreciate the work of the small number of designers who created the basis of everything we do today.

* Are all your answers to FAQs so long?
No... err, maybe!

* How long does it take to 'preserve' a chip?
Six weeks for the 6502, and 133 hours for the Atari TIA. This was one person, Greg, working in his spare time.
De-packaging and photographing takes one day. Aligning and assembling the 200 or so photographs into full-chip images takes several days, but our methods have been primitive, and we look forward to working with Small World Explorations and Hugin for a better process. The work to turn images into vector polygons was spread over four or five weeks for each chip. The 6502 from November 11, 2009 to December 12, 2009, and the TIA from May 26, 2010 to July 7, 2010. The simulation code and JavaScript demo by Barry and Brian Silverman was many months of work and is used for both chips.

* What software do you use?
A bit of Photoshop for image stuff (but see above). After assembling the high resolution full-chip images, we use our own software written in Python to view the images, model polygons on top of them, turn the polygons into a full-chip netlist, and run the netlist in simulation. Python is great for this type of work!

* How do you turn bitmaps into polygons?
We draw them in our custom Python app. We spent about two months looking at automatic vectorization and using the bitmaps to create polygon fragments, but neither of these was better than just sitting down and clicking out the polygons. It's almost essential to have our own vector drawing app, so we can control snapping, do fancy copy-paste, get good vector data, and greatly speed up the work.

* How did automatic vectorization fail?
It was more work to clean up the results of automatic vectorization than to do clean work in the first place. Damage, dirt, and ambiguous or falsely detected features in the chip die shots create problems. We also rely on finding and modeling buried contacts like they would appear in the original fabrication masks, not like they appear in silicon. This is very difficult, if not impossible, to do automatically.

* What are you working on lately?
9/11/2010: This website =) and the MOS 6532 'RIOT', aka. Atari's 'PIA'. Currently, we emulate this chip in our combined 6502 + TIA simulation to produce video from Atari 2600 games (see our slides). The 6532 is a simple RAM and timer, and finishing it will complete our set of Atari 2600 chips. Greg is also shooting and assembling images of a Zilog Z80.

* Would you work on my favorite chip, the ____?
Sure, if it has only one or two metal layers and was made before about 1985. See our chip donation page. We do this work in our free time and have a big backlog, so it might take a while!

6502* How fast is your simulation?
The Python gate-level sim runs about 55 half-clock steps per second, meaning the 6502 clock is going about 27 Hz. The JavaScript sim is only a few hertz, limited by drawing the chip parts. We hope to create several flavors of simulation, including C++ and CUDA, and to re-process, reduce, or otherwise re-compile our chip model into faster logical blocks.

* How does the simulation differ from the real chip?
The simulator is running an idealized "digital" circuit based on our model of the chip's network of transistors and wires. It does not account for "analog" behavior (resistance, capacitance, leakage), has no propagation delays, and transistors switch on and off instantaneously. The real chip uses the same network of transistors (barring any mistakes we may have made in our model), but these transistors are analog devices. Our simulation uses a few simple heuristics to account for the differences in behavior between the actual analog circuits and our idealized digital model. In our simulation, if a transient short occurs from power to ground, ground wins. This may happen in our iterative solver as the simulation state is converging. Also, when two floating regions are switched together, their final voltage is taken from the region with the most components. This is a simple but completely non-physical way to account for capacitance.