Xerox Alto I Hardware Manual page 74

A personal computer system alto series
Table of Contents

Advertisement

Alto Hardware Manual
Section 9: Nuts and Bolts for the Microcoder
65
9.2.4 How to tell
if
extended
ROM
or
RAM
exists
A standard convention assures that location 777B in
RaMI,
if it exists, contains the code:
SWRET:
SWMODE;
:START;
First, we store the following snatch of code in
RAMO,
with
INRAM
located at location 777B:
INRAM:
L+-ACO+ 1, SWMODE;
ACO ... L, :START;
Now we store 0 in
ACO,
and use the
JMPRAM
emulator instruction to branch to location 777B. This will
cause either the
SWRET
or
INRAM
code to be executed; in any case, the emulator instruction following the
JMPRAM
will eventually be executed. If
ACO
has been set to 1,
RaMI
does not exist; otherwise
RaMI
does
exist.
To determine whether the
3K RAM
option is present, use
WRTRAM
to write different values into
corresponding locations in two different
RAM
banks, then use
RDRAM
to read back the first location
written. If the
3K RAM
option is present, the location will still contain the value written into it; if the
option is absent, it will have been clobbered by the value intended for the second
RAM
bank.
9.2.5
RAM
Utility Area
It sometimes happens that a small piece of microcode must be loaded into the
RAM
so that the emulator
can execute it by doing a
JMPRAM
to it; it will then return to the emulator. For example, such a piece
of code is required in order to set the reset mode register. By convention, we reserve a utility area of
RAMO
for this purpose. The normal procedure is to save the contents of this area (using
RDRAM),
store
the piece of code that is to be executed (using
WRTRAM),
execute the code (using
JMPRAM),
and then
restore the original contents.
Writers of microcode should avoid placing code in the utility area that is
not part of the emulator task, as it may be temporarily altered for these utility operations.
The normal utility area is 774B through 1003B inclusive. The alert reader will recognize that
JMPRAM
can
successfully transfer into this area in
RAMO
when coming from
RaMO
(locations 1000B-1003B are
accessible) or from
RaMI
(locations 774B-777B are accessible). A program will therefore need to know
where it is executing
(RaMO
or
RaMI)
and use an appropriate entry point to the utility area.
9.2.6 Other Information
Correct operation of most Alto peripherals depends vitally on their tasks receiving adequate service. This
in tum depends on two things:
'
l. A task must have sufficient priority to gain however many cycles it needs for service, at the
expense of lower-priority tasks. The choice of priority must be made carefully when the
interface is designed.
2. Other tasks at the same and lower priorities must be well-behaved. In particular, they must
perform task switches no further apart than the maximum latency permitted for the task in
question.

Advertisement

Table of Contents
loading

This manual is also suitable for:

Alto ii

Table of Contents