Nice article. While reading I remembered that I watched some time ago the Oral History of Gary Davidian and he was quite bit involved with microcoding. And if I were you I would try asking him if he could be able to give you some ideas where to get more information about microcode workings and development.
Here are links to that interview, if you have time to watch it. It's in two parts.
- https://www.youtube.com/watch?v=l_Go9D1kLNU
- https://www.youtube.com/watch?v=MVEKt_H3FsI
Cheers,
:-) riku
Instead, Intel decided to go with an incomprehensible system of naming: Pentium Overdrive, Pentium MMX, Pentium Pro, Pentium II, Pentium III, Pentium III Xeon, Pentium D, Pentium M, Pentium Extreme Edition, etc. Good luck trying to figure out the ordering of these processors.
EDIT: The later Atom processors were dumped, are there any similarities?
[1] https://x.com/_markel___/status/1262697756805795841
[2] https://github.com/chip-red-pill/glm-ucode
EDIT 2: Some Pentium Pro disassembly work: https://pbx.sh/pentiumii-part2/
I'm curious if this is a better way than somehow scanning the ROM electronically? Asking based on my very shallow understanding of how ROM works in this situation, although I did read the bit about M1, M2, and M3 lines/contacts.
[edit: I also read about the testing circuitry, that "runs through each address," but it's unclear if this is an auto feature running without being asked at startup, or if there is some way to tap into / intercept this functionality from outside.]
The Pentium's built-in self test is somewhat documented: you pull the INIT pin high while the RESET pin goes low to trigger the test. You can also execute the RUNBIST instruction through boundary scan. I don't think this helps you get the ROM data; the test just reports pass/fail.
https://www.cs.cmu.edu/~ralf/papers/highmsr.html
> To the left of the MAR is a 32-bit register that is apparently unrelated to the microcode ROM, although I haven't determined its function.
I hear things like "What do you mean it's slow? It's an i7!" or "It can't be slow -- it's a Xeon!" from too many people in the wild.
To them, the first number is the important one. What they see is that it is still an i7 and therefore they think it must be still be (relatively) fast, even if their second-gen i7-2600 is demonstrably pretty slow.
I tried once to explain how Intel's numbering system has worked to a friend. I failed pretty miserably. I even used a whiteboard. I couldn't convey what needed to be conveyed in order to explain why his computer (an i7) wasn't keeping up with the tasks he gave to it.
But I can convey the problem simply enough in this crowd, here on HNN: What's faster, a "Core i3-9100" or a "Core i7-2600"?
(At least with 286, 386, 486, and Pentium, the nomenclature was much more digestible.)
One has 4 threads, the other has 8; and the difference between 6 generations is actually not that big, especially if you start talking about overclocking, cooling, and thermal throttling.
At least with 286, 386, 486, and Pentium, the nomenclature was much more digestible
Those were all single-core, but still, you could ask "what's faster, a 486SX-16 or a 386DX-33?" (The answer may surprise you. Sorry, couldn't resist...):
https://dependency-injection.com/the-slowest-486-vs-fastest-...
His observations on the Itanium make me gasp.
https://www.sigmicro.org/media/oralhistories/colwell.pdf
https://news.ycombinator.com/item?id=38459128
'I said, wait I am sorry to derail this meeting. But how would you use a simulator if you don't have a compiler? He said, well that's true we don't have a compiler yet, so I hand assembled my simulations. I asked "How did you do thousands of line of code that way?" He said “No, I did 30 lines of code”. Flabbergasted, I said, "You're predicting the entire future of this architecture on 30 lines of hand generated code?" [chuckle], I said it just like that, I did not mean to be insulting but I was just thunderstruck. Andy Grove piped up and said "we are not here right now to reconsider the future of this effort, so let’s move on".'
Colwell is (more formally) the author of The Pentium Chronicles which I plan to read someday.
https://www.amazon.com/Pentium-Chronicles-Robert-P-Colwell/d...
These fixed transistors imply no upgradability.
Don't know about the format, but if you look thru old ITJ articles[^1], it seems like the "direct access" interface for reading out different memories exists on older Pentium parts too. Presumably, if it were possible to dump over JTAG, it would be at least a little bit similar to what Peter/Mark have already looked at on newer parts.
[^1: https://www.intel.com/content/dam/www/public/us/en/documents...
https://thechipletter.substack.com/p/intel-vs-nec-the-case-o...
Also I'm not sure multiplication/division are quadratic if your algorithm is not "add X to itself Y times." Look at this for 6502 16-bit multiply - https://www.llx.com/Neil/a2/mult.html - it's dependent on the bit width, not the value of the multiplier/cand. Of course this is for integers, not floating point.
I also wrote about the Pentium's division circuitry and the infamous FDIV bug: https://www.righto.com/2024/12/this-die-photo-of-pentium-sho... The short answer is that the Pentium used base-4 SRT division, similar to long division but generating two bits of result per cycle. It used a lookup table to determine the two quotient bits; an error in this table resulted in the bug.