Tony Duell wrote:
<snip>
Consider the PERQ for the moment. It has
user-writeable microcode -- in
fact the only microcode in the system at power-on is a little boot PROM
that reads the rest of the microcode from the disk.
This microcode runs on a well-documented micromachine. Which has 256 20
bit registers, 16 ALU operations, various jumps, calls and dispatches,
and so on.
One of the standard microcodes implements a version of the UCSD p-system
instruction set. When it is loaded, it's conventional to call the PERQ a
p-machine, and to regard p-code as the machine code of the processor.
But, you can also consider things one level lower. The 'machine code' of
the PERQ is what is normally termed the microcode instruction set (after
all, it's perfectly possible -- and encouraged -- for users to write
programs in that instruction set). The PERQ runs an emulator (normally
called the 'microcode') for the p-machine.
While the line between assembly code and microcode is often grey, when it
takes more than an instruction to read main memory, chances are your at the
microcode level, as with the PERQ.
Microcode is used to write machine code instructions, which may do several
memory cycles. This is a pretty good yardstick I think.
Now, as far as I can see, there's mothing to limit
the complexity of the
micromachine. So, why can't we consider the Pentium as a micromachine[1]
(that fact that it itself contains 'microcode' is irrelevent here) and
then write a program that runs some other instruction set to run on that
'micromachine'. It may be unconventional to call it 'microcode' but it
may not be _wrong_ to do so.
I suppose this completely depends on which books you have read.
The main difference between the 2 systems I've described is that the PERQ
microcode (or 'p-machine emulator') and the p-code instructions are in
totally different address spaces, while the PDP-11 emulator code for the
Pentium and the PDP11 instructions are presumably in the same address
space. If this is why you can't call the PDP11 emulator code 'microcode'
then how separate do the address spaces have to be (totally separate, as
on the PERQ, logically separate (say separated by an MMU), on different
buses, ..)?
Its not a matter of having a seperate address space!
I've worked with microcoded machines that have the microprogram RAM mapped into the
main memory address space.
Most microcoded machines run several microinstructions for each main memory cycle,
the clear difference being speed, and the degree of abstraction from the actual
hardware.
From a hardware standpoint, the line is pretty clear.