Chris Kennedy wrote:
Bob Shannon wrote:
[stuff deleted]
Because there already is microcode running, or
your Pentium cannot run
your assembly
level program. Whats unclear here?
I'm reading this as suggesting that if any of the logic used to deliver a
set
of abstractions is soft then the next higher level of abstraction (which is
_usually_ the ISA of the processor) cannot be considered microcode. That
might be a useful metric, but, as you acknowledge, nanocode exists, so the
utility
of this metric as a definition of microcode vs. something else is at least
suspect.
Not at all.
I'm not even attempting to define 'microcode' specifically.
The application in question was an emaulation of a PDP-11 running on a Pentium
processor, in Pentium assembly level code. This is unquestionably emulation,
and is a full layer of abstraction away from the Pentium's physical microcode.
To describe this application as 'microcode' is indefensibly wrong.
<snip>
Well, here's _one_ textbook definition of
microcode:
"...programming that is ordinarily not program-addressable, but, unlike
hardwired
logic, is capable of being modified..."
which says nothing about other levels of microcode, nor about the complexity
of the abstraction on which the microprogram executes.
Not a bad definition. Now apply this to the concept of emulating a PDP-11 on
a Pentium please.
It's notable that IBM uses the
"well-defined" term "microcode" to describe
what
most of us would consider "firmware". The definition of microcode can
certainly
be fuzzy, and Tony has already postulated an implementation using processors
rather than discrete logic or bitslices that would meet the definition
above.
I disagree with your interpretation of IBM's definition. Firmware is clearly
program-addressable!
<snip>
I'm fairly certain most of us have written both,
and this thread is
prompting some of
us to ask just _what_ the real difference is between the two. Thus far I've
seen
two arguments advanced as to why what is being described is an "emulator"
rather
than "microcode", and they seem to revolve around two arguments:
- It can't be called microcode if there's microcode beneath the abstraction
at
which you're coding. Obviously this one can be dismissed by using a
non-microcoded
processor as the functional unit.
- There is some level of hardware abstraction above which it can't be
considered
microcode. I'm not sure how this gets translated into a quantitative
metric.
It's can't run on anything more complex than a sequencer? By that
definition
the code on the K6 isn't microcode, it's an emulator. Execution of an
"instruction" takes more than one memory cycle? Given speculative
fetching
of blocks of memory on contemporary processors it's possible for an
"instruction" to execute with zero memory references. It's just
"too
complex"? By that definition the B1700/1800 didn't have an assembly
language.
First off, I strongly doubt that the majority of list members have ever written
true microcode. Its just not commonly done.
Secondly the use of a non-microprogrammed machine has nothing to do with
the definition of emulation, nor microcode.
Lastly, I'm not familiar with the K6 microarchitecture, so I cannot comment on
its operation.
But lets remind ourselves of the actual issue here. Running an assembly-level
program on a Pentium which emulates the instruction set of a PDP-11.
This was described as microcode. Its clearly an assembly-language emulation.
Once again, whats unclear here?
<snip>
All I can say
is that your useage of the terms is totally incorrect as
they are used by
people who write both assembly-level and
microprograms.
Well, I've done both, and at this point I can hardly agree that Tony's usage
is
"totally incorrect".
Really? An assembly level program, running on an already microcoded processor
is still microcode? Do you put this sort of experiance on your resume?
There is a
full order of magnitude of difference in the degree of hardware
abstraction between these two very different forms of programming.
Which takes me back to the K6. A die with dual RISC processors running code
which fetches, cracks and "executes" X86 instructions. By the definition
being
advanced by Tony this is clearly microcode; by your definition it's not --
it's
an emulator -- yet any CPU designer that I know (including myself) would
certainly consider it to be microcode.
Um, emulators can be written in microcode. Perhaps this is how the K6 works?
<snip>
Who has an emotional attachment? I've been
writing both microprograms and
assemhly
crap for more than a quarter century and _I_ can't see a clear distinction,
and
your definition is clearly at odds with that used by IBM -- which at the
very least
suggests that the term is not as well-defined as you'd like to believe.
But firmware IS program-addressable, now isn't it? I don't agree that my
concept of 'microcode' is at odds with IBM's.