Die shots by John McMaster.
If someone wants to refine the alignement, beware that the vectorization is aligned to the m68000-m-3.png image, which should not change.
The svg uses m68000-m-3.png as background, which should be in the same directory. Beware that inkscape uses 5+G of ram to open and display it.
Six layers with its own style for each: active (blue), polysilicon (red), buried contacts (pink), metal (black), vias (white/grey), capacitors (dark green).
Metal layer was done by Quietust, everything else by me, Olivier Galibert.
generate-bitmask-images generate six pbm (bitmap) images (one per layer) using librsvg for the rendering (27M each)
generate-circuit generates the mosfets, the capas, the circuits, etc from the bitmaps. It generates a layers.map file for circuit lookup (2.6G) and a m68000.txt file with the circuit description.
The m68000.txt is a columns-based text file, with the number of entries and the block name at the start of each block. Blocks and columns are:
Note that the simulation program is essentially digital, with the side effect that relatively important things like the clock do not work.
The text version of the schematics is composed of 3 parts:
The schematics are automatically generated from the previously generated files then the circuits are moved around by a lua program. Run remap.lua to generate a new svg/text, run remap.lua toto to also generate the google map tiles.
The 68000 uses a *lot* of latches. They generally look like that:
The latch value is set through the input line. The value goes through two inverters then loops through a weak (l/w < 0.2) enhancement mosfet with terminal and gate tied. That way the input drive can easily override it to set a new value.
Both the output and its inverse are available, making it easy to build an amplifier afterwards.
The register bits are described in patent 4,296,469. They look like that:
At the center two inverters are looped to keep the value. Two independant vertical busses a and d are used for both reading and writing. Reading is done by letting the bus float and connecting the memory to the bus with the a ctrl or the d ctrl line. Writing is done by locking a value first on the bus then afterwards connecting the memory bit to the bus.