{set FLAME_MODE=On;} :)
I get a bit aggrieved when I hear the term 'microcode' being used pretty synonymously with 'machine code', 'firmware', etc. This term is abused not just here in HP calc-land but in service contracts (i.e., microcode update meaning firmware update, etc.) and lots of descriptions of ROM-based firmware.
Microcode is the result of "microprogramming" work and is really the content of a CPU's "writeable control store" (WCS) memory, which can either be a small ROM or a PLA (which is a logic array with a collapsed number of states, kinda a minimized ROM that takes less gates/area.)
Microcode talks directly to the inner hardware of a CPU and is used to define "macroinstructions" which are the normal machine code/assembly instructions that system & application firmware programmers use. Many bits of a microinstruction are just used to bank various pieces of CPU hardware in/out, select registers, etc. Microcode is often 'wide' to achieve decent parallelism - an 8-bit processor could have 30 to 80-bit wide microcode. It is usually not that deep because each instruction (one would hope!) only takes one or a few microcycles. The original VAX instruction set, for example, took 16K words of 42-bit wide microinstruction memory to implement its 400+ instruction set. Some VAXen also had a RAM area to allow customer to create user-written instructions in microcode.
It's true that some very very simple control apps could be written entirely in microcode (fast state machine controller, etc.) but in general microcode manipulates a CPU's inner hardware to render the instruction set opcodes viewable to the outside world.
Microcoding's original concepts were to allow hardware changes at the lowest level while presenting a common 'user interface' at a higher level. The actual CPU architecture internals over a CPU line, back in mainframe days, could differ substantially yet app programs could remain unchanged (same instruction set).
Also, in the days when RAM was slow, CISCy architectures really made sense: a slow instruction fetch from RAM, core, etc. would translate into a series of very fast microinstructions that executed out of very fast but limited depth instruction memory. The slower the main memory, the deeper the microcode per instruction can be. As memory speeds up, the microcode needs to get more done in parallel, so a redesign of inner CPU architecture might start using wider microinstructions with more work getting done each microcycle.
Another way of thinking: the CISC instructions represented, in a way, 'compressed data' and were decompressed within the CPU into a sequence of microinstructions. The microcode in effect, can also be thought of as an internal L1 cache!
Many processors are NOT microcoded - for example, RISC or RISC-like CPUs. The instruction word has some very simple logic decoding that selects read/write, type of ALU op, etc. and the opcodes+operands essentially directly drive the CPU hardware.
Our HP calcs' instructions have (say, in Coconut CPUs) a 10bit instruction path width (serialized). These instructions are at the lowest level of hardware control and are not 'interpreted' by a microengine. Thus content of HP ROMs w/machine code is NOT microcode.
Really the only way you could regard HP instruction ROM content as microcode is if you regard regular HP RPN programming as an assembler instruction set, but that's a little too high-level for my mind: I think of HP RPN programming as a higher-level language like C or BASIC that's interpreted by a program written in assembler.
Bill Wiese
San Jose, CA