Text preview for : Alto_II_Microcode_Aug75.pdf part of xerox Alto II Microcode Aug75 xerox alto memos_1975 Alto_II_Microcode_Aug75.pdf



Back to : Alto_II_Microcode_Aug75.p | Home

Inter-Office l\'Temorand urn

To Alto Users Date 19 August 1975
From C. Thacker location Palo Alto
Subject Alto II Microcode Organization CSL


XEROX
This memo is a description of the changes which have been made in the standard
Alto microcode for the second build. These changes will not affect the operation of
the present software (except to make it work better in some cases), but they will
make it possible to run Lisp, and make certain const.ructs simpler for those who wish
to wri te special purpose microcode.
The changes are:

1) A bug which sometimes caused a 1\1:44 disk to get spurious da ta late errors when
the processor executed the BLT or BLKS instruction has been fixed.
2) The constant memory has been expanded.
3) Unused opcodes 61022-61037, which if executed would produce bizarre results, now
trap.
4) A bug which caused unused parameterless opcodes in the ranges 61013-61017 and
61022-61377 to occasionally trap to the incorrect location has been fixed. This bug
will be fixed on all present machines, as well as on the second build.
5) Currently, all unused opcodes which replace the Nova I/O instructions trap to a
location determined by bi ts 3-7 of their opcodes. There is a prom (DISP) which maps
these instructions into the single microlocation TRAP. The Bytelisp system requires
that this be changed; All unused opcodes except 77400b (which is used by Swat) now
transfer to microlocation U16, which executes:
U16: SWMODE, :TRAP;

The result of this is that if your machine has a control RA1\I, these instructions will
cause control to enter it at a location which is equal to TRAP in the PROM
microcode. If no RAM is .present, things will work normally.
6) A feature has been added to the Ethernet microcode which causes it to reject
truncated packets at the microcode level, rather than posting them to the softv.'are.
7) CurrentJy, the IDISP function produces the follo\ving values, which are
ORed with NEXT:
IR[01],IR[02] Value
00 IR[02],IR[03]
o1 4
10 5
1 1 if IR[03]-IR[07]=16b then
6 else 1
To allow passing of up to 16 return address indices to subroutines, the final case
above has been changed to:
IR[Ol],IR[02] Value
11 if IR[04]-IR[07]= 1Gb then 6
elsei f IR[04]-IR[07]= 6 then 16b
elseif IR[04]-IR[07] = 0 then 1
elseif IR[04]-IR[07] = 1 then 0
else IR[04]-IR[07]
The constants srO through sr17 have been defined in the standard constant memory
so that a subroutine can be called from one of sixteen places thusly:
IR~ srX, :subr;
retX: foo,mumble;
The subroutine does:
subr: bletch;
subrl7: mumble;
foo;
zort, IDISP;
:retO;
The return addresses are all predefined to lie in a contiguous 16 element vector
ending at a location which is l:'b mod 20b.
Note that since IR~ has itself the side effect of doing a 16 way branch, subr17 must
be at a location which is 17b mod 2Gb.
8) The cursor vertical size has been increased from its present 15 to its advertised 16
scan lines.
The microcode to which these changes are added is the XI0 version. The new
microcode is designated ALTOCODE.XI3. The DISP prom which must accompany
this version is designated DISP14. ALTOCODE.X13 and DISP14.SR, which is the
source of the BCPL program used to generate the DISP prom, may be found on the
directory on MAXC.


Note: Many of the new machines have an incorrect version of the DISP prom
(DISP13). A bug was discovered after these Froms were insta1.led. The effect of the
bug is to cause the CYCLE instruction to fail in certain circumstances. These proms
will be replaced soon with the correct version. .