Tue, 26 Feb 2002 12:07:26 -0600
Date: Tue, 26 Feb 2002 12:38:18 -0500 (EST)
From: Nyef <email@example.com>
In short, enough information to
write my own microcode or a microcode interpreter or to be able to
understand a disassembly of the microload band.
I'm also hoping for a description of the input syntax for the microcode
assembler, since that would make it easier to know what parts of the raw
output from a disassembler can be elided.
Excuse me, I'm laughing.
It's probably a reasonable request, but it doesn't have a reasonable
answer. What you really want is the processor spec (never made public,
so far as I know), plus some other internal documentation that was never
made public, plus some internal information that was never written down
except as a program.
The microcode assembler really had no syntax. Each instruction was
either a label or a list of symbols whose values were ORed together to
make the instruction word. (Well, there were extra parens added to
differentiate register destinations from register sources, and others
for LDB expressions, but that's about it.) Most of the symbols came
from def-elroy.lisp and ravfmt.lisp and ravsym.lisp, which I think are
in sys:ubin; or sys:ucode; if they made it to released source.
I've toyed with constructing a microcode disassembler from the tools I
have handy, but there are several catches: (a) what I have is for
Explorer 1, so I'd need to update it from the processor spec; (b) the
microcode symbol table is lost in the mists of time, along with the
microcode source, so it'll be hard to reconstruct certain things in a
meaningful way; (c) TI could conceivably get upset (which is one reason
I'm leery of releasing the processor spec itself, which is labeled
There was an Explorer 1 microcode simulator in the microcode debug tools
(also never made public); I don't know if it was updated for Explorer 2
but I think we've lost the Explorer 2 tools, too.
Anyway, that gets into the question of what level you want to emulate an
Explorer at. If you stick to the macroinstruction level, you don't
really need exact details of the microcode. If you emulate microcode,
you also have to worry about emulating the boards, since the controllers
for disk and display and ethernet are all NuBus devices that respond to
values read and written at particular memory addresses.
I'm in the macroinstruction camp, but at the same time I worry about
things like paging (which can probably happen transparently behind the
scenes) and GC (which is partly behind the scenes and partly in
instructions like %gc-scavenge).
If I ever get my Explorer put back together and get my home PC updated
to FreeBSD 4.5, I'll try to do a microcode disassembler and contribute
something more than hot air.
ps Anyone have a good substitute for Explorer dust filters? Mine have
sagged and shredded.