Trailing-Edge
-
PDP-10 Archives
-
BB-BL69D-SB_1986
-
klx.doc
There are 4 other files named klx.doc in the archive. Click here to see a list.
KL MICROCODE RELEASE DOCUMENT -- V2.1(442)
July 1986
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1977,1978,
1979,1980,1981,1982,1983,1984,1986. ALL RIGHTS RESERVED.
THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A SINGLE
COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION OF THE ABOVE
COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES THEREOF, MAY NOT
BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR
USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS.
TITLE TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN IN
DIGITAL.
THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
CORPORATION.
DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
KL MICROCODE RELEASE DOCUMENT -- V2.1(442) Page 2
KL-UCODE-RELEASE.DOC -- V2.1(442)
July 1986
1.0 SUMMARY
1. Microcode version 2.1(442) is the thirteenth release of the
KL10 microcode. Microcode version 2.1(442) appears as
KLX.MCB only. It supports a model B KL10 with or without an
MCA25 for TOPS-10 V7.03 and TOPS-20 V6.1 only.
This is the eighth release of the KL10 microcode that
supports an 'Extended KL10' described in the Hardware
Reference Manual. Only KLX.RAM supports the 'Extended KL10.'
(KLX.MCB is derived from KLX.RAM and does support the
'Extended KL10.')
2. The KL10 microcode is not dependent on any monitor, but
because of hardware differences between the various -10
processors, a monitor must be built specifically for the
KL10. KL10 microcode V2.1(442) has been tested with the
TOPS-10 V7.03 and TOPS-20 V6.1 monitors only.
See LCREV for information regarding microcode requirements for various
hardware revision levels.
2.0 KNOWN DEFICIENCIES
None
KL MICROCODE RELEASE DOCUMENT -- V2.1(442) Page 3
3.0 ADDITIONAL INSTRUCTIONS
Specification for PMOVE and PMOVEM Instructions:
This describes the format and operation of the new PMOVE and
PMOVEM instructions. The instruction format is shown below:
PMOVE
+-------------------------------------------------------------------------+
! 0 5 2 | A | I | X | Y !
+-------------------------------------------------------------------------+
0 8 9 12 13 14 17 18 35
PMOVEM
+-------------------------------------------------------------------------+
! 0 5 3 | A | I | X | Y !
+-------------------------------------------------------------------------+
0 8 9 12 13 14 17 18 35
If these instructions are executed in user mode, they are treated
as MUUOs. Otherwise, take the contents of location E as a physical
address, and move a word from the location specified by that physical
address to AC (PMOVE), or from AC to that physical location (PMOVEM).
During the effective address calculation, all references will be
to virtual locations. Only the contents of the effective address will
be assumed to be a physical address. Note that this allows references
to any physical address to be made from any section.
4.0 FIXED PROBLEMS
The following problems have been fixed:
442 29 May 86--Clean up the listing a bit in a few miscellaneous places.
Rewrite the SETCA group to use AR_AC0 COMP (looks more obvious than
the previous stuff). Avoid the write test for HRRZM, using the last
remaining microword to optimize it. This looks like the last edit
from QQSV. So long, everybody. It's been real!
441 27 May 86--An afterthought edit. Move DB2WD in line with CVTDBx
code, and use the space to make JUMPA fetch faster. This required
moving the TDN dispatch block as well due to DRAM constraints.
440 23 May 86--A final omnibus speedup edit. Add an instruction to allow
TLO/TSO/TLZ/TSZ/TLC/TSC to prefetch. Special case AOJ, AOJA, SOJ,
SOJA, AOS, and SOS to speed the next instruction fetch in all cases.
Allow JFCL 0, to take a fast path. Make MOVES, SKIP, HLLS, and HRRS
all use new code that starts the instruction fetch a fair amount
quicker in a few cases. Juggle the DRAM for all adjacent instructions,
and reconfigure the explicit CRAM addresses where necessary.
437 22 May 86--Make MOVSO and MOVST start the I FETCH a few micro-
instructions later when they abort. A page fault on the I FETCH was
KL MICROCODE RELEASE DOCUMENT -- V2.1(442) Page 4
leaving the SR set, and resulted in random garbage ending up in AC0.
Merge GTST and CNV2WD into TST2WD, saving a few words and a little bit
of time.
436 17 Apr 86--Back off optimization of JRSTF. Going to user mode doesn't
set USER in time for the FETCH to occur on the same microinstruction.
435 14 Apr 86--Install bit 4 of APRID as PMOVE present option bit.
434 7 Apr 86--Edit PMOVE and PMOVEM onto proper op codes.
433 4 Apr 86--Edit new JFFO onto proper op code. Install prototype PMOVE
and PMOVEM, using op codes 100 and 101 for now.
432 1 Apr 86--Edit new ADJSP onto proper op code. Rewrite JFFO to isolate
the bit number within a group more quickly, and install it on op codes
100 and 101 for debugging.
431 31 Mar 86--Rewrite ADJSP to start the I FETCH several cycles earlier
by not using PUSH code to set TRAP2.
430 20 Mar 86--Start the I FETCH for IMULB, IDIVB, and friends at ST2AC+1
by making it use the DSHIFT code. Eliminate the EXIT DBL macro as
obsolete. Move the op code 247 dispatch in with other UUOs in
SKPJMP. Knock a cycle out of SETMM and SETMB by making them go
directly to IFNOP and IFSTAC. (This is pretty useless, but
harmless and correct.) Make a few cosmetic edits.
427 18 Mar 86--Install rewritten XBLT in production form, and eliminate
old code. This makes the BLT file entirely new code. Make room
for this by rewriting effective address decodes for EXTEND sub
op and for byte pointer in string instructions, making use of
indirection decoder used for single byte instructions. (Note that
this could impact the PXCTability of EXTEND op codes, but since
only XBLT is supposed to be PXCTed, this should never matter.) In
the process, fix bug where indirection in byte pointer calculations
was taking interrupt without going to CLEAN first. Also fix bug in
LDB of an illegal OWG, where an LDB of an OWG with a P&S field of
(for example) 45 was not properly clearing the right half. This
was introduced when we rewrote SETZ.
426 13 Mar 86--Rewrite XBLT. Implement it on opcodes 100 and 101 for
debugging convenience.
425 8 Mar 86--Install optimized BLT. Eliminate obsolete conditionals
BACK.BLT, BLT.PXCT, and RPW (not related) in the process.
424 17 Feb 86--Remove IMULM and IMULB from IMULx optimization, allowing
IMUL and IMULI to begin their I FETCH one microinstruction earlier.
Fix ADJBP of a TWG with byte size zero to correctly load both
halves of the byte pointer (at TWGCPY+1). Re-edit BYTSUB.MIC to
remove a few extraneous words that are no longer needed now that
the single byte instructions have been rewritten.
423 13 Feb 86--Install upgraded ASH code. Reedit ASHC to remove code
used only by ASH previously.
422 29 Jan 86--Rework speeded IDIVx code onto the proper opcodes, and
delete old IDIVx code. Reedit a few instructions in that vicinity
to clean up the listing, and remove references to NODIVD label by
making those instructions do SET NO DIVIDE on their own.
421 23 Jan 86--Force the SETZ group to use HLLZ code, saving a word.
Make sure DMOVNM loads both halves of AC1 when it starts.
Implement speeded up IDIVx on opcodes 100 and 101 for easy debugging.
420 21 Jan 86--Add logic to the integer divide instructions to enable
generating the maximum negative number as a quotient. This is
in preparation for the IDIVx optimization.
417 10 Jan 86--Prevent ROT from (sometimes) clobbering the next
KL MICROCODE RELEASE DOCUMENT -- V2.1(442) Page 5
instruction in ARX on a short right rotation (the timing was
close, so it worked most of the time--very bad). Costs a
microword (sigh).
416 7 Dec 85--Rewrite IMULx to do what the old IMULI.OPT should have
done, namely, optimize IMULx of a positive by a positive when
we can be sure that no overflow will occur. Costs five words,
only two more than the original (broken) IMULI.OPT. Eliminate
that conditional as obsolete.
415 7 Dec 85--Rewrite LSHC and ROTC (at a cost of one word), saving
some time, particularly on right rotates and shifts.
414 5 Dec 85--Rewrite the JRST group, not affecting speed very much
but saving many microwords in the process. Shuffle MOVMI dispatch
to make it identical to HRRZI, saving a bit of time. Work on UUO
code to save some space. Crack a couple of words out of JRA,
speeding it up (almost in spite of ourselves). Force old EIS
effective address dispatch to exit to 3177 instead of 3077, releasing
3077 for other uses. Knock another word out of POPJ. Make PF24
go directly to PFPAR, saving a cycle for illegal indirect page
faults (and buying back three words in the process). Edits 234,
242, and 271 appear ill conceived. Fix ARL IND and TIME fields
for second counting loop in JFFO, buying a little free speed.
Rework dispatches for FAD/FSB/FMP/FDV, and fix FPLONG conditional,
saving a couple of words and making FADL/FSBL/FMPL/FDVL work when
the conditional is turned on. Also twiddle definitions of EXP_SIGN
macros to fix a couple of conflicts. Make FMPRI and FDVRI go to
same spot, as well as FDVx and FMPx, saving a couple of words.
413 24 Sept 85--Continue the cleanup/speedup begun in 412. Rewrite LSH
and ROT, spending some CRAM for speed. Rework the DMOVxx group to
minimize the memory dead time for DMOVE and DMOVEM, particularly.
Prevent SETA from referencing memory (useless, but harmless and
correct). Squeeze words out of POP and POPJ. There are some old
tailings from the DMOVxx code left for use by floating point and
IO code; it would be nice to clean them up.
412 12 Sept 85--Freeze work on strings and start doing cleanup and
speedup on other (simpler) instructions. Move around DRAM and
first words of several instructions (e.g., BLT, EXTEND, XCT,
and several EXTEND sub ops) so that instructions don't jump around
from place to place so much. Decommit obsolete conditionals WRTST,
XADDR, EPT540, LONG.PC, MODEL.B, KLPAGE, SMP, SHIFT.MUUO, SXCT,
PUSHM, EXTEND, DIAG.INST, and DBL.INT--we haven't supported one
side or the other of these for a long time, in some cases.
Rework all noops and pure skips to use the same code as TRN and
TRNA. Make TRO, TDO, TRC, TDC, TRZ, and TDZ use the equivalent
boolean code. Make SETAM and SETAB equivalent to MOVEM. Save a
cycle in MOVN by having it exit directly without going through MOVE.
All of this involves moving some code around in a few cases. Clean
up the listings a bit.
411 24 July 85--Another try at the SMP fix. PI cycle 7 must go to
memory for interlock to work, so delete use of the cache on the
PHYS REF. This may have performance drawbacks for TOPS-20 and
TOPS-10 uniprocessor, so there may have to be two versions of
microcode (again!) to resolve this.
410 11 July 85--Force PI functions 3 and 7 to use RPW cycles, so
SMP will work properly. Save a couple words in the process.
KL MICROCODE RELEASE DOCUMENT -- V2.1(442) Page 6
5.0 RELATED DOCUMENTATION
THE MICROCODE IS IMPLICITLY DOCUMENTED IN THE SYSTEM REFERENCE MANUAL,
IN THAT IT IS AN IMPLEMENTATION OF A PDP-10. THE ONLY OTHER
DOCUMENTATION IS IN THE LISTING AND PRINTS OF THE KL10 PROCESSOR.
[End of E442RD.RND]