The die is real
Every polygon comes from the visual6502 team's trace of a decapped 6502: 8,233 shapes across six mask layers, triangulated into 83,227 triangles. Metal is drawn translucent on top, in the order the mask layers sit on silicon.
Transistor-level
Loading simulator…
Transistor-level · from the real die
Nothing here models the 6502's behaviour. The simulation holds 1725 nodes and 3510 transistors taken from the die, and the behaviour is what those switches do. Register values are read back out of storage nodes; cycle counts are counted, not looked up.
The die view
Every polygon comes from the visual6502 team's trace of a decapped 6502: 8,233 shapes across six mask layers, triangulated into 83,227 triangles. Metal is drawn translucent on top, in the order the mask layers sit on silicon.
A node is drawn lit when it is high. Nothing is animated: 3,510 switches are solved to a fixed point twice per clock cycle, and the resulting levels are uploaded to the GPU as a 1725-byte texture.
Tap any trace to see what it is connected to at that instant. The connected group is recomputed as transistors open and close, because a level belongs to the group a node is joined to rather than to the node.
The Lab
The 6502 has no instruction decoder in the sense a textbook means. An opcode is a byte that lands in a latch; a PLA turns those eight bits into about forty control lines; those lines open and close switches that connect registers to buses. There is no microcode and nothing to step through: the decode is combinational, a pure function of what is in the instruction register at that moment.
The Lab follows a single instruction through that, a half-cycle at a time, framing the die on whichever part is doing the work. The control lines it lists are read out of the running chip at that instant rather than written down here, so the narration can be checked against the silicon.
The ADC link opens at +5 half-cycles, where the adder holds the sum and the accumulator still holds the old value.
The Blueprint
The die view shows 3510 switches where they actually sit, which is accurate and hard to read. The Blueprint draws the datapath as a block diagram instead: buses as lines, registers as boxes, a switch wherever the silicon has one, running off the same engine.
Nobody drew it. Every unit and every path was found by asking which transistors join which nodes, and each one is labelled with the decode line that opens it. It accounts for 159 of the 3510 transistors, and it says so on the page.
Try this
The 6502 does not put an ALU result into the accumulator when the
instruction ends. Run ADC and step one half-cycle at a
time: it reaches the next opcode fetch with A still
holding the old value. The result is sitting in the ALU's hold register,
and it transfers a cycle later. LDA, which bypasses the ALU,
lands a cycle earlier.
An emulator that commits results at instruction boundaries cannot show this, because the boundary it commits at does not exist on the die.
Verification
A headless harness runs the original visual6502 JavaScript and dumps the level of all 1725 nodes at every half-cycle. This engine matches bit-exactly. Matching registers would only show agreement about the 6502; matching every node shows agreement about the silicon.
Documented cycle counts including page-crossing and branch penalties, the read-modify-write double write, JSR/RTS stack layout, ADC/SBC flags, decimal mode. A shared misreading of the die data would pass the first test and fail this one.
About 28,500 half-cycles per second natively, roughly 94× the original JavaScript. The renderer redraws in six draw calls at any zoom, because the layout never changes and only a 1725-byte level array is uploaded per frame.
Credit
This exists because the visual6502 team decapped a 6502, photographed the die, traced it by hand, and gave it away. Greg James, Brian Silverman, Barry Silverman, Ed Spittles, Segher Boessenkool, Achim Breidenbach, and everyone else who contributed.
That site is failing. Its wiki, a decade of research on the 6502, returns HTTP 500 on all 169 pages, and the 2.3 GB of die photography is still served correctly but nothing links to it any more. All of it is mirrored here, with the wiki rebuilt from Internet Archive captures: the archive.
Code is MIT. The die geometry is CC BY-NC-SA 3.0, attributed to Greg James and www.visual6502.org, and those terms carry to this deployment.