The 8721 PLA, or programmable logic array, was one of the chips that had to be invented to make the Commodore 128, the last of the 8-bit computers that formed the leading edge of the early PC revolution, a reality. [decided to reverse engineer it, to see what the C-128 designers had in mind back in mid-1980s.
] got a hold of one of these chips andPLAs were the FPGAs of the day, with arrays of AND gates and OR gates that could be connected into complex logic circuits. [Johan]’s investigation started with liberating the 8721 die from its package, for which he used the quick and easy method favored by [CuriousMarc]. The next step was tooling up, as the microscope he was using proved insufficient to the task. Even with a better microscope in hand, [Johan] still found the need to tweak it, adding one of the new high-quality Raspberry Pi cameras and motorizing the stage with some stepper motors and a CNC controller board.
With optics sorted out, he was able to identify all the pads on the die and to find the main gate array areas. Zooming in a little further, he was able to see the connections between the matrices of the AND and OR gates, which makes decoding the logic a relative snap, although the presence of what appears to be an output block with latching functions confounds this somewhat.
The end result is a full Verilog HDL file that reflects the original 8721 logic, which we think is a pretty neat trick. And we’d love it if our own [Bil Herd] could chime in on this; after all, he literally designed the C-128.
Great job, Johan! This kind of work is increasingly important as these machines age. Could I humbly request you add the VDC to your to-do list?
Next man up is to do the MMU, followed by the video chips as I learn. Still new to the whole silicon reversing process so I’m trying to do them in order of escalating difficulty.
I bet he could figure out how to reverse engineer the custom GAL used in the MYARC Geneve 9640. That was an almost 100% TI-99/4A compatible computer with faster/better CPU and video chips. Able to use more RAM and had much better graphics courtesy of a TMS9995 and Yamaha V9938. It also had its own OS to be able to fully utilize the better graphics and RAM.
What’s long stood in the way of anyone making clones is the GAL. Apparently the design files are unavailable and the original chips had a reputation for failing.
http://aug.99er.net/geneve_9640.htm
Can’t easily reverse-engineer a GAL, I think. Would you be able to see the state of a GAL fuse with an optical device?
Maybe there is a way to decap the GAL, then somehow reset or bypass the protection fuse, and then simply read out the, now unprotected, GAL?
GAL have very low amount of logic. e.g. 20V10 with at most 10 D F/F states and very limited pin functions. You would think someone determined enough would be able to figure the insides from a logic analyzer captures of signals going in/out of it.
If a PAL/GAL chip is striclty combinatorial, e.g. a given set of inputs always results in a given set of outputs you can reverse engineer it by stepping through all possible input combinations and recording the outputs.
Many of them however are running in registered mode, meaning they are sequential logic. The outputs does no longer only depend on the inputs, they can also depend on previous inputs as well.
This is really not true in at least two senses.
Firstly, Ferranti-based ASICs (called ULAs) were far more versatile and complex than PLAs and were in production home computers before and after the Commodore 128. For example, the Sinclair ZX81 used a ULA and it was released in 1981.
Secondly, the Commodore 128 was not the end of the 8-bit era. The ZX Spectrum +3D was released in 1987; two years after the Commodore 128.
https://en.wikipedia.org/wiki/Gate_array
https://en.wikipedia.org/wiki/ZX_Spectrum#ZX_Spectrum_+3
The Amstrad CPC used a Ferranti ULA, it was decoded a few years ago.
A similar method was used – http://www.cpcwiki.eu/index.php/Gate_Array#Pictures and https://www.cpcwiki.eu/forum/amstrad-cpc-hardware/gate-array-decapped!/ which resulted in verilog which is now used in CPC FPGA implementations.
The MSX2+ was from 1988.
Amstrad released the 8 Bit PCW16 in 1995, but since it was hard to put other programs on it, one could regard that one as a word processing appliance, and step back to the PCW 9512+ which was CP/M compatible, released in 1991.
However, there may have been ex Soviet sphere and indigenous South American 8 bit machines introduced after this.
Also, I very much doubt the C64 had much to do with the PC revolution, I was using CPM which was well developed at the time, and we all know the evolution of DOS and the PC followed that route. Perhaps some mild influence in getting kids interested, not necessarily more than many other home computers.
HAD tends to dump comments into a black hole somewhere. So typing this again, brief version:
Sales of somewhere between 12 and 33 million units. 17 million is the most agreed on.
400,000 units per month for years.
Spectrum under Sinclair and Amstrad combined only managed 3 million.
OS options: GEOS, ACE, Asterix, DOS/65, GeckOS, CP/M, Contiki, LUnix.
Massive quantity of bulletin board systems all over the world.
Quantum Link Which became America Online. Compuserve, which was bought by AOL.
Compunet (UK), TheSource (USA), Minitel (France).
Gave us the MUD (Multi-User Dimension) which morphed into what we know as MMO games. Read up on #2 and #1 on this list: https://www.oldest.org/entertainment/mmo-games/
Uncountable scores of people who learned to program or run BBSs on Commodore machines who are now running the networks the internet runs on and write the software and games you use/play.
A system with 87% brand recognition to this day.
It would be interesting to run the numbers on youtube retro computer channels to see the breakdown of videos dedicated to each type/brand of machine. But the vast majority are dedicated to Commodore brand (C64, 128 and Amiga). There is a lot of PC clone videos as well but mostly because everyone was making oddball stuff just to differentiate. Not much exciting on the PC software / internals side of things. Sure people are slapping together their dream dos machine to play old games, but mostly non-descript boxes.
Sure.. C64 didnt have much to do with the PC revolution.
Who had the biggest market share in the 80s?
depends on how we define “the last 8-bit computer”. AFIK Amstrad was simply putting older Spectrum boards into new shiny cases and adding disk drives. At best they may have made a few optimizations and added additional RAM. but they certainly did not DESIGN a NEW 8-bit computer.
As per your link, the +3 had additional ROMs (an OS/software update), floppy drive and a bit more RAM, but was otherwise a 2A motherboard, which was the first mobo manufactured by Amstrad but itself was identical to the Spectrum 128. That puts its design somewhere before January of 1986 (first sales).
The Spectrum 128 is the first mention of any real compatibility issues with early software, due to hardware changes in the RAM/ROM architecture.
In the case of the Commodore 128, it is a totally different architecture than the C64. AFIK there is not a single piece of software outside of very simplistic BASIC programs that would load and run in both 64 and 128 mode.
I consider software compatibility issues due to hardware changes as good (not perfect) indicator of “new design” and not just optimizing layout or adding accessories.
By that logic, They are roughly the same “age”. Though one could easily argue that the Spectrum 128 did not deviate enough from the very first spectrum designs to qualify as a “new” computer.
As others pointed out, there are other machines which could qualify, and countries which “westerners” dont have much information about regarding early home computing.
Note to editors and writers: It is always best to avoid superlatives in writing. Most significantly when stating “facts”. I consistently avoid them and never use them myself. ;)
There wasn’t anything we could do to the C64 mode that wouldn’t break compatibility. We moved the dot on the letter I in the font ROM and Koala Paint stopped working for example. We also decided not to make a super C64 mode on purpose as we didn’t want to dilute what “C64 Compatible” meant. We then failed to engage third party developers like we had on TED and so didn’t hit the ground supporting much software other than the C64 base and the CPM base. But C64’ness was really a closed design by that time, we left one register bit in thinking nothing bad would happened and bad things happened.
Heh, programmers be like “Shall I just go and waste a whole 4 bytes setting and storing a constant when the bitmap of the letter i is the right value…”
that must be great era … kudis guys!
Heh, we used diffusion slugs (Layer 2) for the ANDs I think and pre-ohmic contacts (layer 5) for the other term (OR’s or vice versa). The actual terms are available to check against somewhere.
It would be fantastic to get validation that the equations I extracted are correct.
What was the purpose of the PLA in the C128?
Bil can tell you, but address decoding is one.
The primary purpose of the PLA in the C128 is the same as in the C64, generating chip selects for the various chips connected to the system bus. It’s also involved in the DRAM refresh system.
Since the C128 is C654 compatible, it contains the full C64 PLA functionality as well, controlled with an mode select signal coming from the MMU chip.
Ah, interesting. It became easier to find relevant info when I searched for “Commodore 64 PLA”. It seems somewhat strange they (and other computer mfgs?) opted for a PLA rather than an ASIC considering they did do in-house IC designs.
You could ask the same thing about the ROM, why did they use a ROM instead of hard coding every byte into a custom chip?
I wonder a bit with the C64 if they’d have made the same choice knowing how many they’d eventually produce. The up-front cost is a lot higher, but they produced an awful, awful lot of C64s.
Sifting through the verilog, input DMAACK appears to be used nowhere. However, on the photo of the die, it seems to have at least one connection.
After careful examination of the die’s photo, I believe p69 should be corrected like this:
p69 = !charen & !vma5 & vma4 & ms3 & aec & dmaack;