Easy To Use Patents Search & Patent Lawyer Directory

At Patents you can conduct a Patent Search, File a Patent Application, find a Patent Attorney, or search available technology through our Patent Exchange. Patents are available using simple keyword or date criteria. If you are looking to hire a patent attorney, you've come to the right place. Protect your idea and hire a patent lawyer.

Digital data processing system having an I/O means using unique address
providing and access priority control techniques

Abstract

A data processing system having a flexible internal structure, protected
from and effectively invisible to users, with multilevel control and stack
mechanisms and capability of performing multiple, concurrent operations,
and providing a flexible, simplified interface to users. The system is
internally comprised of a plurality of separate, independent processors,
each having a separate microinstruction control and at least one separate,
independent port to a central communications and memory node. The
communications and memory node is an independent processor having
separate, independent microinstruction control and comprised of a
plurality of independently operating, microinstruction controlled
processors capable of performing multiple, concurrent memory and
communications operations. Addressing mechanisms allow permanent, unique
indentification of information as objects and an extremely large address
space accessible and common to all such systems. Addresses are independent
of system physical configuration. Information is identified to bit
granular level and to information type and format. Protection mechanisms
provide variable access rights associated with individual bodies of
information. User language instructions are transformed into dialect
coded, uniform, intermediate level instructions to provide equal facility
of execution for all user languages. Operands are referred to by uniform
format names which are transformed, by internal mechanisms transparent to
users, into addresses.

1. In a digital computer system including processor means for performing operations on operands, memory means for storing at least instructions for directing said operations,
bus means for conducting said at least instructions between said memory means and said processor means, and I/O means connected to a selected one of said processor means or said memory means for conducting at least said operands between devices external
to said digital computer system and said digital computer system, said I/O means comprising:

a plurality of data channel devices connected from said external devices and responsive to the operation of said external devices for conducting said operands between said external devices and said I/O means,

each of said data channel devices being connected from at least one of said external devices and having a compatible data transmission interface to said at least one of said external devices,

data mover means connected between each of said plurality of data channel devices and said selected means of said digital computer system for conducting said operands between said plurality of data channel devices and said selected means of said
digital computer system, and

control means connected to said data channel devices, said external devices and said data mover means and responsive to the operation of said plurality of data channel devices and said digital computer system for providing control outputs for
controlling the conducting of said operands between said external devices and said digital computer system, and

further wherein each of said plurality of data channel devices further comprises:

means for providing addresses of storage locations in said memory means to permit the conducting of said operands between said storage locations of such memory means and said at least one of said external devices,

said address providing means including map memory means for storing a map comprising said addresses,

and said control means further comprises means for providing a said map for each said map memory means of each of said plurality of data channel devices.

2. The digital computer system of claim 1, wherein each of said plurality of data channel devices further comprises:

buffer memory means for storing said operands being conducted between said selected means of said digital computer system and said at least one of said external devices.

3. The digital computer system of claims 1 or 2 wherein said data mover means further comprises:

ring generator means for providing a repetitive sequence of access available outputs representing sequential access periods in time to said selected means of said digital computer system,

gating means for associating at least a selected one of said access available outputs with each of said plurality of data channel devices,

said gating means being responsive to the operation of each of said plurality of data channel devices and to said access available outputs for providing grant control outputs to said data mover means and to each of said plurality of data channel
devices for granting access to said selected means of said digital computer system to each of said plurality of data channel means upon coincidence of a requirement by one of said plurality of data channel means for access to said selected means of said
digital computer system and an associated selected one of said access available outputs.

4. The digital computer system of claim 3 wherein said data mover means has a first port connected from each of said plurality of data channel devices and a second port connected from said selected means of said digital computer system for
conducting said operands therebetween; and

said first port has a data transmission interface compatible with each of said plurality of data channel devices and said second port has a data transmission interface compatible with said selected means of said digital computer system.

5. In a digital computer system including processor means for performing operations on operands, memory means for storing at least instructions for directing said operations, bus means for conducting said at least instructions between said
memory means and said processor means, and I/O means connected to a selected one of said processor means or said memory means for conducting at least said operands between devices external to said digital computer system and said digital computer system,
said I/O means comprising:

a plurality of data channel devices connected from said external devices and responsive to operation of said external devices for conducting said operands between said external devices and said I/O means,

each one of said data channel devices being connected from at least one of said external devices and having a compatible data transmission interface to said at least one of said external devices,

data mover means connected between each of said plurality of data channel devices and said selected means of said digital computer system for conducting said operands between said plurality of data channel devices and said selected means of said
digital computer system, and

control means connected to said data channel devices, said external devices and said data mover means and responsive to the operation of said plurality of data channel devices and said digital computer system for providing control outputs for
controlling the conducting of said operands between said external devices and said digital computer system

and further wherein said data mover means further comprises

ring generator means for providing a repetitive sequence of access available outputs representing sequential access periods in time to said selected means of said digital computer system,

gating means for associating at least a selected one of said access available outputs with each of said plurality of data channel devices,

said gating means responsive to operation of each of said plurality of data channel devices and to said access available outputs for providing grant control outputs to said data mover means and to each of said plurality of data channel devices
for granting access to said selected means of said digital computer system to each of said plurality of data channel means upon coincidence of a requirement by one of said plurality of data channel means for access to said selected means of said digital
computer system and an associated selected one of said access available outputs.

6. The digital computer system of claim 5, wherein each of said plurality of data channel devices further comprises buffer memory means for storing said operands being conducted between said selected means of said digital computer system and
said at least one of said external devices.

7. The digital computer system of claims 1, 2, 5 or 6 wherein said data mover means has a first port connected from each of said plurality of data channel devices and a second port connected from said selected means of said digital computer
system for conducting said operands therebetween; and

said first port has a data transmission interface compatible with each of said plurality of data channel devices and said second port has a data transmission interface compatible with said selected means of said digital computer system.

Description

CROSS REFERENCE TO RELATED APPLICATIONS

The present patent application is related to other patent applications assigned to the assignee of the present application.

BACKGROUND OF THE INVENTION

1. Field of the Invention

The present invention relates to a digital data processing system and, more particularly, to a multiprocess digital data processing system suitable for use in a data processing network and having a simplified, flexible user interface and
flexible, multileveled internal mechanisms.

2. Description of Prior Art

A general trend in the development of data processing systems has been towards systems suitable for use in interconnected data processing networks. Another trend has been towards data processing systems wherein the internal structure of the
system is flexible, protected from users, and effectively invisible to the user and wherein the user is presented with a flexible and simplified interface to the system.

Certain problems and shortcomings affecting the realization of such a data processing system have appeared repeatedly in the prior art and must be overcome to create a data processing system having the above attributes. These prior art problems
and limitations include the following topics.

First, the data processing systems of the prior art have not provided a system wide addressing system suitable for use in common by a large number of data processing systems interconnected into a network. Addressing systems of the prior art have
not provided sufficiently large address spaces and have not allowed information to be permanently and uniquely identified. Prior addressing systems have not made provisions for information to be located and identified as to type or format, and have not
provided sufficient granularity. In addition, prior addressing systems have reflected the physical structure of particular data processing systems. That is, the addressing systems have been dependent upon whether a particular computer was, for example,
an 8, 16, 32, 64 or 128 bit machine. Since prior data processing systems have incorporated addressing mechanisms wherein the actual physical structure of the processing system is apparent to the user, the operations a user could perform have been
limited by the addressing mechanisms. In addition, prior processor systems have operated as fixed word length machines, further limiting user operations.

Prior data processing systems have not provided effective protection mechanisms preventing one user from effecting another user's data and programs without permission. Such protection mechanisms have not allowed unique, positive identification
of users requesting access to information, or of information, nor have such mechanisms been sufficiently flexible in operation. In addition, access rights have pertained to the users rather than to the information, so that control of access rights has
been difficult. Finally, prior art protection mechanisms have allowed the use of "Trojan Horse arguments". That is, users not having access rights to certain information have been able to gain access to that information through another user or
procedure having such access rights.

Yet another problem of the prior art is that of providing a simple and flexible interface user interface to a data processing system. The character of user's interface to a data processing system is determined, in part, by the means by which a
user refers to and identifies operands and procedures of the user's programs and by the instruction structure of the system. Operands and procedures are customarily referred to and identified by some form of logical address having points of reference,
and validity, only within a user's program. These addresses must be translated into logical and physical addresses within a data processing system each time a program is executed, and must then be frequently retranslated or generated during execution of
a program. In addition, a user must provide specific instructions as to data format and handling. As such reference to operands or procedures typically comprise a major portion of the instruction stream of the user's program and requires numerous
machine translations and operations to implement. A user's interface to a conventional system is thereby complicated, and the speed of execution of programs reduced, because of the complexity of the program references to operands and procedures.

A data processing system's instruction structure includes both the instructions for controlling system operations and the means by which these instructions are executed. Conventional data processing systems are designed to efficiently execute
instructions in one or two user languages, for example, FORTRAN or COBOL. Programs written in any other language are not efficiently executable. In addition, a user is often faced with difficult programming problems when using any high level language
other than the particular one or two languages that a particular conventional system is designed to utilize.

Yet another problem in conventional data processing systems is that of protecting the system's internal mechanisms, for example, stack mechanisms and internal control mechanisms, from accidental or malicious interference by a user.

Finally, the internal structure and operation of prior art data processing systems have not been flexible, or adaptive, in structure and operation. That is, the internal structure structure and operation of prior systems have not allowed the
systems to be easily modified or adapted to meet particular data processing requirements. Such modifications may include changes in internal memory capacity, such as the addition or deletion of special purpose subsystems, for example, floating point or
array processors. In addition, such modifications have significantly affected the users interface with the system. Ideally, the actual physical structure and operation of the data processing system should not be apparent at the user interface.

The present invention provides data processing system improvements and features which solve the above-described problems and limitations.

SUMMARY OF THE INVENTION

The present invention relates to structure and operation of a data processing system suitable for use in interconnected data processing networks, which internal structure is flexible, protected from users, effectively invisible to users, and
provides a flexible and simplified interface to users. The data processing system provides an addressing mechanism allowing permanent and unique identification of all information generated for use in or by operation of the system, and an extremely large
address space which is accessible to and common to all such data processing systems. The addressing mechanism provides addresses which are independent of the physical configuration of the system and allow information to be completely identified, with a
single address, to the bit granular level and with regard to information type or format. The present invention further provides a protection mechanism wherein variable access rights are associated with individual bodies of information. Information, and
users requesting access to information, are uniquely identified through the system addressing mechanism. The protection mechanism also prevents use of Trojan Horse arguments. And, the present invention provides an instruction structure wherein high
level user language instructions are transformed into dialect coded, uniform, intermediate level instructions to provide equal facility of execution for a plurality of user languages. Another feature of such a system is the provision of an operand
reference mechanism wherein operands are referred to in user's programs by uniform format names which are transformed, by an internal mechanism transparent to the user, into addresses. The present invention can be used in a system which additionally
provides multilevel control and stack mechanisms protecting the system's internal mechanism from interference by users. Yet another feature of such a system is a data processing system having a flexible internal structure capable of performing multiple,
concurrent operations and comprised of a plurality of separate, independent processors. Each such independent processor has a separate microinstruction control and at least one separate and independent port to a central communications and memory node.
The communications and memory node is also an independent processor having separate and independent microinstruction control. The memory processor is internally comprised of a plurality of independently operating, microinstruction controlled processors
capable of performing multiple, concurrent memory and communications operations. The present invention also provides further data processing system structural and operational features for implementing the above features.

It is thus advantageous to incorporate the present invention into a data processing system because the present invention provides addressing mechanisms suitable for use in large interconnected data processing networks. Additionally, the present
invention can be used in a system which is advantageous in that it provides an information protection mechanism suitable for use in large, interconnected data processing networks. The present invention can be used in a system which is further
advantageous in that it provides a simplified, flexible, and more efficient interface to a data processing system. The present invention can be used in a system which is yet further advantageous in that it provides a data processing system which is
equally efficient with any user level language by providing a mechanism for referring to operands in user programs by uniform format names and instruction structure incorporating dialect coded, uniform format intermediate level instructions.
Additionally, such a system protects data processing system internal mechanisms from user interference by providing multilevel control and stack mechanisms. The present invention is yet further advantageous in providing a flexible internal system
structure capable of performing multiple, concurrent operations, comprising a plurality of separate, independent processors, each having a separate microinstruction control and at least one separate and independent port to a central, independent
communications and memory processor comprised of a plurality of independent processors capable of performing multiple, concurrent memory and communications operations.

It is thus an object of the present invention to provide an improved data processing system.

It is another object of the present invention to provide a data processing system capable of use in large, interconnected data processing networks.

It is yet another object of the present invention to provide an improved addressing mechanism suitable for use in large, interconnected data processing networks.

It is a further object of the present invention to provide an improved information protection mechanism.

It is still another object of the present invention to provide a simplified and flexible user interface to a data processing system.

It is yet a further object of the present invention to provide an improved mechanism for referring to operands.

It is a still further object of the present invention to provide an instruction structure allowing efficient data processing system operation with a plurality of high level user languages.

It is a further object of the present invention to provide data processing internal mechanisms protected from user interference.

It is yet another object of the present invention to provide a data processing system having a flexible internal structure capable of multiple, concurrent operations.

Other objects, advantages and features of the present invention will be understood by those of ordinary skill in the art, after referring to the following detailed description of the preferred embodiments and drawings wherein:

BRIEF
DESCRIPTION OF DRAWINGS

FIG. 1 is a partial block diagram of a computer system incorporating the present invention;

FIG. 2 is a diagram illustrating computer system addressing structure of the present invention;

FIG. 3 is a diagram illustrating the computer system instruction stream of the present invention;

FIG. 4 is a diagram illustrating the control structure of a conventional computer system;

FIG. 4A is a diagram illustrating the control structure of a computer system incorporating the present invention;

FIG. 5-FIG. A1 inclusive are diagrams all relating to the present invention;

The following description presents the structure and operation of a computer system incorporating a presently preferred embodiment of the present invention. As indicated in the following Table of Contents, certain features of computer system
structure and operation will first be described in an Introductory Overview. Next, these and other features will be described in further detail in a more detailed Introduction to the detailed descriptions of the computer system. Following the
Introduction, the structure and operation of the computer system will be described in detail. The detailed descriptions will present descriptions of the structure and operation of each of the major subsystems, or elements, of the computer system, of the
interfaces between these major subsystems, and of overall computer system operation. Next, certain features of the operation of the individual subsystems will be presented in further detail, followed by a more detailed description of overall computer
system operation. Finally, appendices will describe certain features of the operation of individual subsystems and of the overall system in yet further detail. Of these appendices, Appendix A presents a detailed description of the microcode operation
of the present computer system. Appendix B presents a further detailed description of the overall operation of the present computer system. Appendix B is not essential for one of ordinary skill in the art to gain a complete understanding of the present
invention and is provided as a supplement to the following detailed description. As such, Appendix B is provided, together with the present patent application, as a separate document to reside in the prosecution history of the present patent application
and thus to be available to readers desiring additional information.

Certain conventions are used throughout the following descriptions to enhance clarity of presentation. First, and with exception of the Introductory Overview, each figure referred to in the following descriptions will be referred to by a three
digit number. The most significant digit represents the number of the chapter in the following descriptions in which a particular figure is first referred to. The two least significant digits represent the sequential number of appearance of a figure in
a particular chapter. For example, FIG. 319 would be the nineteenth figure appearing in the third chapter. Figures appearing in the Introductory Overview are referred to by a one or two digit number representing the order in which they are referred to
in the Introductory Overview. It should be noted that certain figure numbers, for example, FIG. 208, do not appear in the following figures and descriptions; the subject matter of these figures has been incorporated into other figures and these figures
deleted, during drafting of the following descriptions, to enhance clarity of presentation.

Second, reference numerals comprise a two digit number (00-99) preceded by the number of the figure in which the corresponding elements first appear. For example, reference numerals 31901 to 31999 would refer to elements 1 through 99 appearing
in FIG. 319.

Finally, interconnections between related circuitry is represented in two ways. First, to enhance clarity of presentation, interconnections between circuitry may be represented by common signal names or references, rather than by drawn
representations of wires or buses. Second, where related circuitry is shown in two or more figures, the figures may share a common figure number and will be distinguished by a letter designation, for example, FIGS. 319, 319A, and 319B. Common
electrical points between such circuitry may be indicated by a bracket enclosing a lead to such a point and a designation of the form "A-b". "A" indicates other figures having the same common point for example, 319A, and "b" designates the particular
common electrical point. In cases of related circuitry shown in this manner in two or more figures, reference numerals to elements will be assigned in sequence through the group of figures; the figure number portion of such reference numerals will be
that of the first figure of the group of figures.

The following overview will first briefly describe the overall physical structure and operation of a presently preferred embodiment of a digital computer system incorporating the present invention. Then certain operating features of that
computer system will be individually described. Next, overall operation of the computer system will be described in terms of those individual features. Finally, the computer system's implementation will be described in further detail.

A. Hardware Overview (FIG. 1)

Referring to FIG. 1, a block diagram of Computer System (CS) 101 incorporating the present invention is shown. Major elements of CS 101 are I/O System (IOS) 116, Memory (MEM) 112, and Job Processor (JP) 114. JP 114 is comprised of a Fetch Unit
(FU) 120 and an Execute Unit (EU) 122. CS 101 may also include a Diagnostic Processor (DP), not shown or described in the instant description.

Referring first to IOS 116, a primary function of IOS 116 is control of transfer of information between MEM 112 and the outside world. Information is transferred from MEM 112 to IOS 116 through IOM Bus 130, and from IOS 116 to MEM 112 through
MIO Bus 129. IOMC Bus 131 is comprised of bi-directional control signals coordinating operation of MEM 112 and IOS 116. IOS 116 also has an interface to FU 120 through IOJP Bus 132. IOJP Bus 132 is a bi-directional control bus comprised essentially of
two interrupt lines. These interrupt lines allow FU 120 to indicate to IOS 116 that a request for information by FU 120 has been placed in MEM 112, and allows IOS 116 to inform FU 120 that information requested by FU 120 has been transferred into a
location in MEM 112. MEM 112 is CS 101's main memory and serves as the path for information transfer between the outside world and JP 114. MEM 112 provides instructions and data to FU 120 and EU 122 through Memory Output Data (MOD) Bus 140 and receives
information from FU 120 and EU 122 through Job Processor Data (JPD) Bus 142. FU 120 submits read and write requests to MEM 112 through Physical Descriptor (PD) Bus 146.

JP 114 is CS 101's CPU and, as described above, is comprised of FU 120 and EU 122. A primary function of FU 120 is executing operations of user's programs. As part of this function, FU 120 controls transfer of instructions and data from MEM 112
and transfer of results of JP 114 operations back to MEM 112. FU 120 also performs operating system type functions, and is capable of operating as a complete, general purpose CPU. EU 122 is primarily an arithmetic and logic unit provided to relieve FU
120 of certain arithmetic operations. FU 120, however, is capable of performing EU 122 operations. In alternate embodiments of CS 101, EU 122 may be provided only as an option for users having particular arithmetic requirements. Coordination of FU 120
and EU 122 operations is accomplished through FU/EU (FUEU) Bus 148, which includes bi-directional control signals and mutual interrupt lines. As described further below, both FU 120 and EU 122 contain register file arrays referred to respectively as CRF
and ERF, in addition to registers associated with, for example, ALUs.

A primary feature of CS 101 is that IOS 116, MEM 112, FU 120 and EU 122 each contain separate and independent microinstruction control, so that IOS 116, MEM 112, and EU 122 operate asynchronously under the general control of FU 120. EU 122, for
example, may execute a complex arithmetic operation upon receipt of data and a single, initial command from FU 120.

Having briefly described the overall structure and operation of CS 101, certain features of CS 101 will be individually further described next below.

B. Individual Operating Features (FIGS. 2,3,4,5,6)

1. Addressing (FIG. 2)

Referring to FIG. 2, a diagramic representation of portions of CS 101's addressing structure is shown. CS 101's addressing structure is based upon the concept of Objects. An Object may be regarded as a container for holding a particular type of
information. For example, one type of Object may contain data while another type of Object may contain instructions or procedures, such as a user program. Still another type of Object may contain microcode. In general, a particular Object may contain
only one type or class of informtion. An Object may, for example, contain up to 2.sup.32 bits of information, but the actual size of a particular Object is flexible. That is, the actual size of a particular Object will increase as information is
written into that Object and will decrease as information is taken from that Object. In general, information in Objects is stored sequentially, that is without gaps.

Each Object which can ever exist in any CS 101 system is uniquely identified by a serial number referred to as a Unique Identifier (UID). A UID is a 128 bit value comprised of a serial number dependent upon, for example, the particular CS 101
system and user, and a time code indicating time of creation of that Object. UIDs are permanently assigned to Objects, no two Objects may have the same UID, and UIDs may not be reused. UIDs provide an addressing base common to all CS 101 systems which
may ever exist, through which any Object ever created may be permanently and uniquely identified.

As described above, UIDs are 128 bit values and are thus larger than may be conveniently handled in present embodiments of CS 101. In each CS 101, therefore, those Objects which are active (currently being used) in that system are assigned 14
bit Active Object Numbers (AONs). Each Object active in that system will have a unique AON. Unlike UIDs, AONs are only temporarily assigned to particular Objects. AONs are valid only within a particular CS 101 and are not unique between systems. An
Object need not physically reside in a system to be assigned an AON, but can be active in that system only if it has been assigned an AON.

A particular bit within a particular Object may be identified by means of a UID address or an AON address. In CS 101, AONs and AON addresses are valid only within JP 114 while UIDs and UID addresses are used in MEM 112 and elsewhere. UID and
AON addresses are formed by appending a 32 bit Offset (0) field to that Object's UID or AON. O fields indicate offset, or location, of a particular bit relative to the start of a particular Object.

Segments of information (sequences of information bits) within particular Objects may be identified by means of descriptors. A UID descriptor is formed by appending a 32 bit Length (L) field of a UID address. An AON, or logical descriptor is
formed by appending a 32 bit L field to an AON address. L fields identify length of a segment of information bits within an Object, starting from the information bit identified by the UID or AON address. In addition to length information, UID and
logical descriptors also contain Type fields containing information regarding certain characteristics of the information in the information segment. Again, AON based descriptors are used within JP 114, while UID based descriptors are used in MEM 112.

Referring to FIGS. 1 and 2 together, translation between UID addresses and descriptors and AON addresses and descriptors is performed at the interface between MEM 112 and JP 114. That is, addresses and descriptors within JP 114 are in AON form
while addresses and descriptors in MEM 112, IOS 116, and the external world are in UID form. In other embodiments of CS 101 using AONs, transformation from UID to AON addressing may occur at other interfaces, for example at the IOS 116 to MEM 112
interface, or at the IOS 116 to external world interface. Other embodiments of CS 101 may use UIDs throughout, that is not use AONs even in JP 114.

Finally, information within MEM 112 is located through MEM 112 Physical Addresses identifying particular physical locations within MEM 112's memory space. Both IOS 116 and JP 114 address information within MEM 112 by providing physical addresses
to MEM 112. In the case of physical addresses provided by JP 114, these addresses are referred to as Physical Descriptors (PDs). As described below, JP 114 contains circuitry to translate logical descriptors into physical descriptors.

2. S-Language Instructions and Namespace Addressing (FIG. 3)

CS 101 is both an S-Language machine and a Namespace machine. That is, operations to be executed by CS 101 are expressed as S-Language Operations (SOPs) while operands are identified by Names. SOPs are of a lower, more detailed, level than user
language instructions, for example FORTRAN and COBOL, but of a higher level than conventional machine language instructions. SOPs are specific to particular user languages rather than a particular embodiment of CS 101, while conventional machine
language instructions are specific to particular machines. SOPs are in turn interpreted and executed by microcode. There will be an S-Language Dialect, a set of SOPs, for each user languages. CS 101, for example, may have SOP Dialects for COBOL,
FORTRAN, and SPL. A particular distinction of CS 101 is that all SOPs are of a uniform, fixed length, for example 16 bits. CS 101 may generally contain one or more sets of microcode for each S-Language Dialect. These microcode Dialect Sets may be
completely distinct, or may overlap where more than one SOP utilizes the same microcode.

As stated above, in CS 101 all operands are identified by Names, which are 8, 12, or 16 bit numbers. CS 101 includes one or more "Name Tables" containing an Entry for each operand Name appearing in programs currently being executed Each Name
Table Entry contains information describing the operand referred to by a particular Name, and the directions necessary for CS 101 to translate that information into a corresponding logical descriptor. As previously described, logical descriptors may
then be transformed into physical descriptors to read and write operands from or to MEM 112. As described above, UIDs are unique for all CS 101 systems and AONs are unique within individual CS 101 systems. Names, however, are unique only within the
context of a user's program. That is, a particular Name may appear in two different user's programs and, within each program, will have different Name Table Entries and will refer to different operands.

CS 101 may thereby be considered as utilizing two sets of instructions. A first set is comprised of SOPs, that is instructions selecting algorithms to be executed. The second set of instructions are comprised of Names, which may be regarded as
entry points into tables of instructions for making references regarding operands.

Referring to FIG.3, a diagramic representation of CS 101 instruction stream is shown. A typical SIN is comprised of an SOP and may include one or more Names referring to operands. SOPs and Names allow user's programs to be expressed in very
compact code. Fewer SOPs than machine language instructions are required to express a user's program. Also, use of SOPs allows easier and simpler construction of compilers, and facilitates adaption of CS 101 systems to new user languages. In addition,
use of Names to refer to operands means that SOPs are independent of the form of the operands upon which they operate. This in turn allows for more compact code in expressing user programs in that SOPs specifying operations dependent upon operand form
are not required.

3. Architectural Base Pointer Addressing

As will be described further below, a user's program residing in CS 101 will include one or more Objects. First, a Procedure Object contains at least the SINs of the user's programs and a Name Table containing entries for operand Names of the
program. The SINs may include references, or calls, to other Procedure Objects containing, for example, procedures available in common to many users. Second, a Static Data Area may contain static data, that is data having an existence for at least a
single execution of the program. And third, a Macro-stack, described below, may contain local data, that is data generated during execution of a program. Each Procedure Object, the Static Data Area and the Macro-stack are individual Objects identified
by UIDs and AONs and addressable through UID and AON addresses and descriptors.

Locations of information within a user's Procedure Objects, Static Data Area, and Macro-stack are expressed as offsets from one of three values, or base addresses, referred to as Architectural Base Pointers (ABPs). For example, location
information in Name Tables is expressed as offsets from one of the ABPs. ABPs may be expressed as previously described.

The three ABPs are the Frame Pointer (FP), the Procedure Base Pointer (PBP), and the Static Data Pointer (SDP). Locations of data local to a procedure, for example in the procedure's Macrostack, are described as offsets from FP. Locations of
non-local data, that is Static Data, are described as offsets from SDP. Locations of SINs in Procedure Objects are expressed as offsets from PBP; these offsets are determined as a Program Counter (PC) value. Values of the ABPs vary during program
execution and are therefore not provided by the compiler converting a user's high level language program into a program to be executed in a CS 101 system. When the program is executed, CS 101 provides the proper values for the ABPs. When a program is
actually being executed, the ABP's values are stored in FU 120's GRF.

Other pointers are used, for example, to identify the top frame of CS 101's Secure Stack (a microcode level stack described below) or to identify the microcode Dialect currently being used in execute the SINs of a procedure. These pointers are
similar to FP, SDP, and PBP.

4. Stack Mechanisms (FIGS. 4-5)

Referring to FIG. 4 and 4A, diagramic representations of various control levels and stack mechanisms of, respectively, conventional machines and CS 101, are shown. Referring first to FIG. 4, top level of control is provided by User Language
Instructions 402, for example in FORTRAN or COBOL. User Language Instructions 402 are converted into a greater number of more detailed Machine Language Instructions 404, used within a machine to execute user's programs. Within the machine, Machine
Language Instructions 404 are interpreted and executed by Microcode Instructions 406, that is sequences of microinstructions which in turn directly control Machine Hardware 408. Some conventional machines may include a Stack Mechanism 410 used to save
current machine state, that is current microinstruction and contents of various machine registers, if a current Machine Language Instruction 404 cannot be executed or is interrupted. In general, machine state on the microcode and hardware level is not
saved. Execution of a current Machine Language Instruction 404 is later resumed at start of the microinstruction sequence for executing that Machine Language Instruction 404.

Referring to FIG. 4A, top level control in CS 101 is by User Language Instructions 412 as in a conventional machine. In CS 101, however, User Language Instructions 412 are translated into SINs 414 which are of a higher level than conventional
machine language instructions. In general, a single User Language Instruction 412 is transformed into at most two or three SINs 414, as opposed to an entire sequence of conventional Machine Language Instructions 404. SINs 414 are interpreted and
executed by Microcode Instructions 416 (sequences of microinstructions) which directly control CS 101 Hardware 418. CS 101 includes a Macro-stack Mechanism (MAS) 420, at SINs 414 level, which is comparable to but different in construction and operation
from a conventional Machine Language Stack Mechanism 410. CS 101 also includes Micro-code Stack Mechanisms 422 operating at Microcode 416 level, so that execution of an interrupted microinstruction of a microinstruction sequence may be later resumed
with the particular microinstruction which was active at the time of the interrupt. CS 101 is therefore more efficient in handling interrupts in that execution of microinstruction sequences is resumed from the particular point that a microinstruction
sequence was interrupted, rather than from the beginning of that sequence. As will be described further below, CS 101's Micro-code Stack Mechanisms 422 on microcode level is effectively comprised of two stack mechanisms. The first stack is
Micro-instruction Stack (MIS) 424 while the second stack is referred to as Monitor Stack (MOS) 426. CS 101 SIN Microcode 428 and MIS 424 are primarily concerned with execution of SOPs of user's programs. Monitor Microcode 430 and MOS 426 are concerned
with operation of certain CS 101 internal functions.

Division of CS 101's microcode stacks into an MIS 424 and a MOS 426 illustrates a further feature of CS 101. In conventional machines, monitor functions may be performed by a separate CPU operating in conjunction with the machine's primary CPU.
In CS 101, a single hardware CPU is used to perform both functions with actual execution of both functions performed by separate groups of microcode. Monitor microcode operations may be initiated either by certain SINs 414 or by control signals
generated directly by CS 101's Hardware 418. Invocation of Monitor Microcode 430 by Hardware 418 generated signals insures that CS 101's monitor functions may always be invoked.

Referring to FIG. 5, a diagramic representation of CS 101's stack mechanisms for single user's program, or procedure, is shown. Basically, and with exception of MOS 426, CS 101's stacks reside in MEM 112 with certain portions of those stacks
accelerated into FU 120 and EU 122 to enhance speed of operation.

Certain areas of MEM 112 storage space are set aside to contain Macro-Stacks (MASs) 502, stack mechanisms operating on the SINs level, as described above. Other areas of MEM 112 are set aside to contain Secure Stack (SS) 504, operating on the
microcode level, as described above and of which MIS 424 is a part.

As described further below, both FU 120 and EU 122 contain register file arrays, referred to respectively as GRF and ERF, in addition to registers associated with, for example, ALUs. Referring to FU 120, shown therein is FU 120's GRF 506. GRF
506 is horizontally divided into three areas. A first area, referred to as General Registers (GRs) 508 may in general be used in the same manner as registers in a conventional machine. A second area of GRF 506 is Micro-Stack (MIS) 424, and is set aside
to contain a portion of a Process's SS 504. A third portion of GRF 506 is set aside to contain MOS 426. Also indicated in FU 120 is a block referred to as Microcode Control State (mCS) 510. mCS 510 represents registers and other FU 120 hardware
containing current operating state of FU 120 on the microinstruction and hardware level. mCS 510 may include, for example, the current microinstruction controlling operation of FU 120.

Referring to EU 122, indicated therein is a first block referred to as Execute Unit State (EUS) 512 and a second block referred to as SOP Stack 514. EUS 512 is similar to mCS 510 in FU 120 and includes all registers and other EU 122 hardware
containing information reflecting EU 122's current operating state. SOP Stack 518 is a portion of EU 122's ERF 516 which has been set aside as a stack mechanism to contain a portion of a process's SS 504 pertaining to EU 122 operations.

Considering first MASs 502, as stated above MASs 502 operate generally upon the SINs level. MASs 502 are used in general to store current state of a process's (defined below) execution of a user's program.

Referring next to MIS 424, in a present embodiment of CS 101 that portion of GRF 506 set aside to contain MIS 424 may have a capacity of eight stack frames. That is, up to 8 microinstruction level interrupts or calls pertaining to execution of a
user's program may be stacked within MIS 424. Information stored in MIS 424 stack frames is generally information from GR 508 and MCS 510. MIS 424 stack frames are transferred between MIS 424 and SS 504 such that at least one frame, and no more than 8
frames, of SS 504 reside in GRF 506. This insures that at least the top-most frames of a process's SS 504 are present in FU 120, thereby enhancing speed of operation of FU 120 by providing rapid access to those top frames. SS 504, residing in MEM 112,
may contain, for all practical purposes, an unlimited number of frames so that MIS 424 and SS 504 appear to a user to be effectively an infinitely deep stack.

MOS 426 resides entirely in FU 120 and, in a present embodiment of CS 101, may have a capacity of 8 stack frames. A feature of CS 101 operation is that CS 101 mechanisms for handling certain events or interrupts should not rely in its operation
upon those portions of CS 101 whose operation has resulted in those faults or interrupts. Among events handled by CS 101 monitor microcode, for example, are MEM 112 page faults. An MEM 112 page fault occurs whenever FU 120 makes a reference to data in
MEM 112 and that data is not in MEM 112. Due to this and similar operations, MOS 426 resides entirely in FU 120 and thus does not rely upon information in MEM 112.

As described above, GRs 508, MIS 424, and MOS 426 each reside in certain assigned portions of GRF 506. This allows flexibility in modifying the capacity of GRs 508, MIS 424, and MOS 426 as indicated by experience, or to modify an individual CS
101 for particular purposes.

Referring finally to EU 122, EUS 512 is functionally a part of a process's SS 504. Also as previously described, EU 122 performs arithmetic operations in response to SINs and may be interrupted by FU 120 to aid certain FU 120 operations. EUS
512 allows stacking of interrupts. For example, FU 120 may first interrupt an arithmetic SOP to request EU 122 to aid in evaluation of a Name Table Entry. Before that first interrupt is completed, FU 120 may interrupt again, and so on.

SOP Stack 514, is a single frame stack for storing current state of EU 122 when an interrupt interrupts execution of an arithmetic SOP. An interrupted SOP's state is transferred into SOP Stack 514 and the interrupt begins execution in EUS 512.
Upon occurrence of a second interrupt (before the first interrupt is completed) EU's first interrupt state is transferred from EUS 512 to a stack frame in SS 504, and execution of the second interrupt begins in EUS 512. If a third interrupt occurs
before completion of second interrupt, EU's second interrupt state is transferred from EUS 512 to another stack frame in SS 504 and execution of the third interrupt is begun in EUS 512; and so on. EUS 512 and SS 504 thus provide an apparently infinitely
deep microstack for EU 122. Assuming that the third interrupt is completed, state of second interrupt is transferred from SS 504 to EUS 512 and execution of second interrupt resumed. Upon completion of second interrupt, state of first interrupt is
transferred from SS 504 to EUS 512 and completed. After completion of first interrupt, state of the original SOP is transferred from SOP Stack 514 to EUS 512 and execution of that SOP resumed.

C. Procedure Processes, and Virtual Processors (FIG. 6)

Referring to FIG. 6, a diagramic representation of procedures, processes, and virtual processes is shown. As described above, a user's program to be executed is compiled to result in a Procedure 602. A Procedure 602 includes a User's Procedure
Object 604 containing the SOPs of the user's program and a Name Table containing Entries for operand Names of the user's program, and a Static Data Area 606. A Procedure 602 may also include other Procedure Objects 608, for example utility programs
available in common to many users. In effect, a Procedure 602 contains the instructions (procedures) and data of a user's program.

A Process 610 includes, as described above, a Macro-Stack (MAS) 502 storing state of execution of a user's Procedure 602 at the SOP level, and a Secure Stack (SS) 504 storing state of execution of a user's Procedure 602 at the microcode level. A
Process 610 is associated with a user's Procedure 602 through the ABPs described above and which are stored in the MAS 502 of the Process 610. Similarly, the MAS 502 and SS 504 of a Process 610 are associated through non-architectural pointers,
described above. A Process 610 is effectively a body of information linking the resources, hardware, microcode, and software, of CS 101 to a user's Procedure 602. In effect, a Process 610 makes the resources of CS 101 available to a user's Procedure
602 for executing of that Procedure 602. CS 101 is a multi-program machine capable of accommodating up to, for example, 128 Processes 610 concurrently. The number of Processes 610 which may be executed concurrently is determined by the number of
Virtual Processors 612 of CS 101. There may be, for example, up to 16 Virtual Processors 612.

As indicated in FIG. 6, a Virtual Processor 612 is comprised of a Virtual Processor State Block (VPSB) 614 associated with the SS 504 of a Process 612. A VPSB 614 is, in effect, a body of information accessible to CS 101's operating system and
through which CS 101's operating system is informed of, and provided with access to, a Process 610 through that Process 610's SS 504. A VPSB 614 is associated with a particular Process 610 by writing information regarding that Process 610 into that VPSB
614. CS 101's operating system may, by gaining access to a Process 610 through an associated UPSP 614, read information, such as ABP's, from that Process 610 to FU 120, thereby swapping that Process 610 onto FU 120 for execution. It is said that a
Virtual Processor 612 thereby executes a Process 610; a Virtual Processor 612 may be regarded therefor, as a processor having "Virtual", or potential, existence which becomes "real" when its associated Process 610 is swapped into FU 120. In CS 101, as
indicated in FIG. 6, only one Virtual Processor 612 may execute on FU 120 at a time and the operating system selects which Virtual Processor 612 will excecute on FU 120 at any given time. In addition, CS 101's operating system selects which Processes
610 will be associated with the available Virtual Processors 612.

Having briefly described certain individual structural and operating features of CS 101, the overall operation of CS 101 will be described in further detail next below in terms of these individual features.

As indicated in FIG. 7, CS 101 is a multiple level system wherein operations in one level are generally transparent to higher levels. User 701 does not see the S-Language, addressing, and protection mechanisms defined at Architectural Level 708. Instead, he sees User Interface 709, which is defined by Compilers 702, Binder 703, and Extended (high level) Operating System (EOS) 704. Compilers 702 translate high-level language code into SINs and Binder 703 translates symbolic Names in programs
into UID-offset addresses.

As FIG. 7 shows, Architectural Level 708 is not defined by FU 120 Interface 711. Instead, the architectural resources level are created by S-Language interpreted SINs when a program is executed; Name Interpreter 715 operates under control of
S-Language Interpreters 705 and translates Names into logical descriptors. In CS 101, both S-Language Interpreters 705 and Name Interpreter 715 are implemented as microcode which executes on FU 120. S-Language Interpreters 705 may also use EU 122 to
perform calculations. A Kernel Operating System (KOS) provides CS 101 with UID-offset addressing, objects, access checking, processes, and virtual processors, described further below. KOS has three kinds of components: KOS Microcode 710, KOS Software
706, and KOS Tables in MEM 112. KOS 710 components are microcode routines which assist FU 120 in performing certain required operations. Like other high-level language routines, KOS 706 components contain SINs which are interpreted by S-Interpreter
Microcode 705. Many KOS High-Level Language Routines 706 are executed by special KOS processes; others may be executed by any process. Both KOS High-Level Language Routines 706 and KOS Microcode 710 manipulate KOS Tables in MEM 112.

FU 120 Interface 711 is visible only to KOS and to S-Interpreter Microcode 705. For the purposes of this discussion, FU 120 may be seen as a processor which contains the following main elements:

A Control Mechanism 725 which executes microcode stored in Writable Control Store 713 and manipulates FU 120 devices as directed by this microcode.

A GRF 506 containing registers in which data may be stored.

A Processing Unit 715.

All microcode which executes on FU 120 uses these devices; there is in addition a group of devices for performing special functions; these devices are used only by microcode connected with those functions. The microcode, the specialized devices,
and sometimes tables in MEM 112 make up logical machines for performing certain functions. These machines will be described in detail below.

In the following, each of the levels illustrated in FIG. 7 will be discussed in turn. First, the components at User Interface 709 will be examined to see how they translate user programs and requests into forms usable by CS 101. Then the
components below the User Interface 709 will be examined to see how they create logical machines for performing CS 101 operations.

2. Compilers 702 (FIG. 7)

Compilers 702 translate files containing the high-level language code written by User 701 into Procedure Objects 608. Two components of a Procedure Object 608 are code (SOPs) and Names, previously described. SOPs represent operations, and the
Names represent data. A single SIN thus specifies an operation to be performed on the data represented by the Names.

3. Binder 703 (FIG. 7)

In some cases, Compiler 702 cannot define locations as offsets from an ABP. For example, if a procedure calls a procedure contained in another procedure object, the location to which the call transfers control cannot be defined as an offset from
the PBP used by the calling procedure. In these cases, the compiler uses symbolic Names to define the locations. Binder 703 is a utility which translates symbolic Names into UID-offset addresses. It does so in two ways: by combining separate Procedure
Objects 608 into a single large Procedure Object 608, and then redefining symbolic Names as offsets from that Procedure Object 608's ABPs, or by translating symbolic Names when the program is executed. In the second case, Binder 703 requires assistance
from EOS 704.

4. EOS 704 (FIG. 7)

EOS 704 manages the resources that User 701 requires to execute his programs. From User 701's point of view, the most important of these resources are files and processes. EOS 704 creates files by requesting KOS to create an object and then
mapping the file onto the object. When a User 701 performs an operation on a file, EOS 704 translates the file operation into an operation on an object. KOS creates them at EOS 704's request and makes them available to EOS 704, which in turn makes them
available to User 701. EOS 704 causes a process to execute by associating it a Virtual Processor 612. In logical terms, a Virtual Processor 612 is the means which KOS provides EOS 704 for executing Processes 610. As many Processes 610 may apparently
execute simultaneously in CS 101 as there are Virtual Processors 612. The illusion of simultaneous execution is created by multiplexing JP 114 among the Virtual Processors; the manner in which Processes 610 and Virtual Processors 610 are implemented
will be explained in detail below.

5. KOS and Architectural Interface 708 (FIG. 7)

S-Interpreter Microcode 705 and Name Interpreter Microcode 715 require an environment provided by KOS Microcode 710 and KOS Software 706 to execute SINs. For example, as previously explained, Names and program locations are defined in terms of
ABPs whose values vary during execution of the program. The KOS environment provides values for the ABPs, and therefore makes it possible to interpret Names and program locations as locations in MEM 112. Similarly, KOS help is required to transform
logical descriptors into references to MEM 112 and to perform protection checks.

The environment provided by KOS has the following elements:

A Process 610 which contains the state of an execution of the program for a given User 701.

A Virtual Processor 612 which gives the Process 610 access to JP 114.

An Object Management System which translates UIDs into values that are usable inside JP 114.

A Protection System which checks whether a Process 610 has the right to perform an operation on an Object.

A Virtual Memory Management System which moves those portions of Objects which a Process 610 actually references from the outside world into MEM 112 and translates logical descriptors into physical descriptors.

In the following, the logical properties of this environment and the manner in which a program is executed in it will be explained.

6. Processes 610 and Virtual Processors 612 (FIG. 8)

Processes 610 and Virtual Processors 612 have already been described in logical terms; FIG. 8 gives a high-level view of their physical implementation.

FIG. 8 illustrates the relationship between Processes 610, Virtual Processors 612, and JP 114. In physical terms, a Process 610 is an area of MEM 112 which contains the current state of a user's execution of a program. One example of such state
is the current values of the ABPs and a Program Counter (PC). Given the current value of the PBP and the PC, the next SOP in the program can be executed; similarly, given the current values of SDP and FP, the program's Names can be correctly resolved.
Since the Process 610 contains the current state of a program's execution, the program's physical execution can be stopped and resumed at any point. It is thus possible to control program execution by means of the Process 610.

As already mentioned, a Process 610's execution proceeds only when KOS has bound it to a Virtual Processor 612, that is, an area of MEM 112 containing the state required to execute microinstructions on JP 114 hardware. The operation of binding
is simply a transfer of Process 610 state from the Process 610's area of MEM 112 to a Virtual Processor 612's area of MEM 112. Since binding and unbinding may take place at any time, EOS 704 may multiplex Processes 610 among Virtual Processors 612. In
FIG. 8, there are more Processes 610 than there are Virtual Processors 612. The physical execution of a Process 610 on JP 114 takes place only while the Process 610's Virtual Processor 612 is bound to JP 114, i.e., when state is transferred from Virtual
Processor 612's area of MEM 112 to JP 114's registers. Just as EOS 704 multiplexes Virtual Processors 612 among Processes 610, KOS multiplexes JP 114 among Virtual Processors 612. In FIG. 8, only one Process 610 is being physically executed. The means
by which JP 114 is multiplexed among Virtual Processors 612 will be described in further detail below.

7. Processes 610 and Stacks (FIG. 9)

In CS 101 systems, a Process 610 is made up of six Objects: one Process Object 901 and Five Stack Objects 902 to 906. FIG. 9 illustrates a Process 610. Process Object 901 contains the information which EOS 704 requires to manage the Process
610. EOS 704 has no direct access to Process Object 901, but instead obtains the information it needs by means of functions provided to it by KOS 706, 710. Included in the information are the UIDs of Stack Objects 902 through 906. Stack Objects 902 to
906 contain the Process 610's state.

Stack Objects 902 through 905, are required by CS 101's domain protection method and comprise Process 610's MAS 502. Briefly, a domain is determined in part by operations performed when a system is operating in that domain. For example, the
system is in EOS 704 domain when executing EOS 704 operations and in KOS 706, 710 domain when executing KOS 706, 710 operations. A Process 610 must have one stack for each domain it enters. In the present embodiment, the number of domains is fixed at
four, but alternate embodiments may allow any number of domains, and correspondingly, any number of Stack Objects. Stack Object 906 comprises Process 610's Secure Stack 504 and is required to store state which may be manipulated only by KOS 706, 710.

Each invocation made by a Process 610 results in the addition of frames to Secure Stack 504 and to Macro-Stack 502. The state stored in the Secure Stack 504 frame includes the macrostate for the invocation, the state required to bind Process 610
to a Virtual Processor 612. The frame added to Macro-Stack 502 is placed in one of Stack Objects 902 through 905. Which Stack Objects 902 to 905 gets the frame is determined by the invoked procedure's domain of execution.

FIG. 9 shows the condition of a Process 610's MAS 502 and Secure Stack 504 after the Process 610 has executed four invocations. Secure Stack 504 has one frame for each invocation; the frames of Process 610's MAS 502 are found in Stack Objects
902, 904, and 905. As revealed by their locations, Frame 1 is for an invocation of a routine with KOS 706, 710 domain of execution, Frame 2 for an invocation of a routine with the EOS 704 domain of execution, and Frames 3 and 4 for invocations of
routines with the User domain of execution. Process 610 has not yet invoked a routine with the Data Base Management System (DBMS) domain of execution. The frames in Stack Objects 902 through 905 are linked together, and a frame is added to or removed
from Secure Stack 504 every time a frame is added to Stack Objects 902 through 905. MAS 502 and Secure Stack 504 thereby function as a single logical stack even though logically contained in five separate Objects.

8. Processes 610 and Calls (FIGS. 10, 11)

In the CS 101, calls and returns are executed by KOS 706, 710. When KOS 706, 710 performs a call for a process, it does the following:

It saves the calling invocation's macrostate in the top frame of Secure Stack 504 (FIG. 9).

It locates the procedure whose Name is contained in the call. The location of the first SIN in the procedure becomes the new PBP.

Using information contained in the called procedure, KOS 706, 710 creates a new MAS 502 frame in the proper Stack Object 902 through 905 and a new Secure Stack 504 frame in Secure Stack 504. FP is updated to point to the new MAS 502. If
necessary, SDP is also updated.

Once the values of the ABPs have been updated, the PC is defined, Names can be resolved, and execution of the invoked routine can commence. On a return from the invocation to the invoking routine, the stack frames are deleted and the ABPs are
set to the values saved in the invoking routine's macrostate. The invoking routine then continues execution at the point following the invocation.

A Process 610 may be illustrated in detail by putting the FORTRAN statement A+B into a FORTRAN routine called EXAMPLE and invoking it from another FORTRAN routine named CALLER. To simplify the example, it is assumed that CALLER and EXAMPLE both
have the same domain of execution. The parts of EXAMPLE which are of interest look like this:

SUBROUTINE EXAMPLE (C)

INTEGER X,C

INTEGER A,B

...

A=B

...

RETURN

END

The new elements are a formal argument, C, and a new local variable, X. A formal argument is a data item which receives its value from a data item used in the invoking routine. The formal argument's value thus varies from invocation to
invocation. The portions of INVOKER which are of interest look like this:

SUBROUTINE INVOKER

INTEGER Z

...

CALL EXAMPLE (Z)

...

END

The CALL statement in INVOKER specifies the Name of the subroutine being invoked and the actual arguments for the subroutine's formal arguments. During the invocation, the subroutine's formal arguments take on the values of the actual arguments. Thus, during the invocation specified by this CALL statement, the formal argument C will have the value represented by the variable Z in INVOKER.

When INVOKER is compiled, the compiler produces a CALL SIN corresponding to the CALL statement. The CALL SIN contains a Name representing a pointer to the beginning of the called routine's location in a procedure object and a list of Names
representing the call's actual arguments. When CALL is executed, the Names are interpreted to resolve the SIN's Names as previously described, and KOS 710 microcode to perform MAS 502 and Secure Stack 504 operations.

FIG. 10 illustrates the manner in which the KOS 710 call microcode manipulates MAS 502 and Secure Stack 504. FIG. 10 includes the following elements:

Call Microcode 1001, contained in FU 120 Writable Control Store 1014.

PC Device 1002, which contains part of macrostate belonging to the invocation of INVOKER which is executing the CALL statement.

Registers in FU Registers 1004. Registers 1004 contents include the remainder of macrostate and the descriptors corresponding to Names for EXAMPLE's location and the actual argument Z.

Procedure Object 1006 contains the entries for INVOKER and EXAMPLE, their Name Tables, and their code.

Macro-Stack Object 1008 (MAS 502) and Secure Stack Object 1010 (Secure Stack 504) contain the stack frames for the invocations of INVOKER and EXAMPLE being discussed here. EXAMPLE's frame is in the same Macro-Stack object as INVOKER's frame
because both routines are contained in the same Procedure Object 1006, and therefore have the same domain of execution.

KOS Call Microcode 1001 first saves the macrostate of INVOKER's invocation on Secure Stack 504. As will be discussed later, when the state is saved, KOS 706 Call Microcode 1001 uses other KOS 706 microcode to translate the location information
contained in the macrostate into the kind of pointers used in MEM 112. Then Microcode 1001 uses the descriptor for the routine Name to locate the pointer to EXAMPLE's entry in Procedure Object 1006. From the entry, it locates pointers to EXAMPLE's Name
Table and the beginning of EXAMPLE's code. Microcode 1001 takes these pointers, uses other KOS 706 microcode to translate them into descriptors, and places the descriptors in the locations in Registers 1004 reserved for the values of the PBP and NTP.
It then updates the values contained in PC Device 1002 so that when the call is finished, the next SIN to be executed will be the first SIN in EXAMPLE.

CALL Microcode 1001 next constructs the frames for EXAMPLE on Secure Stack 504 and Macro-Stack 502. This discussion concerns itself only with Frame 1102 on Macro-Stack 502. FIG. 11 illustrates EXAMPLE's Frame 1102. The size of Frame 1102 is
determined by EXAMPLE's local variables (X, A, and B) and formal arguments (C). At the bottom of Frame 1102 is Header 1104. Header 1104 contains information used by KOS 706, 710 to manage the stack. Next comes Pointer 1106 to the location which
contains the value represented by the argument C. In the invocation, the actual for C is the local variable Z in INVOKER. As is the case with all local variables, the storage represented by Z is contained in the stack frame belonging to INVOKER's
invocation. When a name interpreter resolved C's name, it placed the descriptor in a register. Call Microcode 1001 takes this descriptor, converts it to a pointer, and stores the pointer above Header 1104.

Since the FP ABP points to the location following the last pointer to an actual argument, Call Microcode 1001 can now calculate that location, convert it into a descriptor, and place it in a FU Register 1004 reserved for FP. The next step is
providing storage for EXAMPLE's local variables. EXAMPLE's Procedure Object 1006 contains the size of the storage required for the local variables, so Call Microcode 1001 obtains this information from Procedure Object 1006 and adds that much storage to
Frame 1102. Using the new value of FP and the information contained in the Name Table Entries for the local data, Name Interpreter 715 can now construct descriptors for the local data. For example, A's entry in Name Table specified that it was offset
32 bits from FP, and was 32 bits long. Thus, its storage falls between the storage for X and B in FIG. 11.

As already explained, a logical descriptor contains an AON field, an offset field, and a length field. FIG. 12 illustrates a Physical Descriptor. Physical Descriptor 1202 contains a Frame Number (FN) field, a Displacement (D) field, and a
Length (L) field. Together, the Frame Number field and the Displacement field specify the location in MEM 112 containing the data, and the Length field specifies the length of the data.

As is clear from the above, the virtual memory management system must translate the AON-offset location contained in a logical descriptor 1204 into a Frame Number-Displacement location. It does so by associating logical pages with MEM 112
frames. (N.B: MEM 112 frames are not to be confused with stack frames). FIG. 13, illustrates how Macrostack 502 Object 1302 is divided into Logical Pages 1304 in secondary memory and how Logical Pages 1304 are moved onto Frames 1306 in MEM 112. A
Frame 1306 is a fixed-size, contiguous area of MEM 112. When the virtual memory management system brings data into MEM 112, it does so in frame-sized chunks called Logical Pages 1308. Thus, from the virtual memory system's point of view, each object is
divided into Logical Pages 1308 and the address of data on a page consists of the AON of the data's Object, the number of pages in the object, and its displacement on the page. In FIG. 13, the location of the local variable B of EXAMPLE is shown as it
is defined by the virtual memory system. B's location is a UID and an offset, or, inside JP 114, an AON and an offset. As defined by the virtual memory system, B's location is the AON, the page number 1308, and a displacement within the page. When a
process references the variable B, the virtual memory management system moves all of Logical Page 1308 into a MEM 112 Frame 1306. B's displacement remains the same, and the virtual memory system translates its Logical Page Number 1308 into the number of
Frame 1306 in MEM 112 which contains the page.

The virtual memory management system must therefore perform two kinds of translations: (1) AON-offset addresses into AON-page number-displacement addresses, and (2) AON-page number into a frame number.

10. Access Control (FIG. 14)

Each time a reference is made to an Object, KOS 706, 710 checks whether the reference is legal. The following discusson will first present the logical structure of access control in CS 101, and then discuss the microcode and devices which
implement it. CS 101 defines access in terms of subjects, modes of access, and Object size. A process may reference a data item located in an Object if three conditions hold:

(1) If the process's subject has access to the Object.

(2) If the modes of access specified for the subject include those required to perform the intended operation.

(3) If the data item is completely contained in the Object, i.e., if the data item's length added to the data item's offset do not exceed the number of bits in the Object.

The subjects which have access to an Object and the kinds of access they have to the Object are specified by a data structure associated with the Object called the Access Control List (ACL). An Object's size is one of its attributes. Neither an
Object's size nor its ACL is contained in the Object. Both are contained in system tables, and are accessible by means of the Object's UID.

FIG. 14 shows the logical structure of access control in CS 101. Subject 1408 has four components: Principal 1404, Process 1405, Domain 1406, and Tag 1407. Tag 1407 is not implemented in a present embodiment of CS 101, so the following
description will deal only with Principal 1404, Process 1405, and Domain 1406.

Principal 1404 specifies a user for which the process which is making the reference was created;

Process 1405 specifies the process which is making the reference; and,

Domain 1406 specifies the domain of execution of the procedure which the process is executing when it makes the reference.

Each component of the Subject 1408 is represented by a UID. If the UID is a null UID, that component of the subject does not affect access checking. Non-null UIDs are the UIDs of Objects that contain information about the subject components.
Principal Object 1404 contains identification and accounting information regarding system users, Process Object 1405 contains process management information, and Domain Object 1406 contains information about per-domain error handlers.

There may be three modes of accessing an Object 1410: read, write, and execute. Read and write are self-explanatory; execute is access which allows a subject to execute instructions contained in the Object.

Access Control Lists (ACLs), 1412 are made up of Entries 1414. Each entry has two components: Subject Template 1416 and Mode Specifier 1418. Subject Template 1416 specifies a group of subjects that may reference the Object and Mode Specifier
1418 specifies the kinds of access these subjects may have to the Object. Logically speaking, ACL 1412 is checked each time a process references an Object 1410. The reference may succeed only if the process's current Subject 1408 is one of those on
Object 1410's ACL 1412 and if the modes in the ACL Entry 1414 for the Subject 1408 allow the kind of access the process wishes to make.

11. Virtual Processors and Virtual Processor Swapping FIG. 15)

As previously mentioned, the execution of a program by a Process 610 cannot take place unles EOS 704 has bound the Process 610 to a Virtual Processor 612. Physical execution of the Process 610 takes place only while the process's Virtual
Processor 612 is bound to JP 114. The following discussion deals with the data bases belonging to a Virtual Processor 612 and the means by which a Virtual Processor 612 is bound to and removed from JP 114.

FIG. 15 illustrates the devices and tables which KOS 706, 710 uses to implement Virtual Processors 612. FU 120 WCS contains KOS Microcode 706 for binding Virtual Processors 612 to JP 114 and removing them from JP 114. Timers 1502 and Interrupt
Line 1504 are hardware devices which produce signals that cause the invocation of KOS Microcode 706. Timers 1502 contains two timing devices: Interval Timer 1506, which may be set by KOS 706, 710 to signal when a certain time is reached, and Egg Timer
1508, which guarantees that there is a maximum time interval for which a Virtual Processor 612 can be bound to JP 114 before it invokes KOS Microcode 706. Interrupt Line 1504 becomes active when JP 114 receives a message from IOS 116, for example when
IOS 116 has finished loading a logical page into MEM 112.

FU 120 Registers 508 contain state belonging to the Virtual Processor 612 currently bound to JP 114. Here, this Virtual Processor 612 is called Virtual Processor A. In addition, Registers 508 contain registers reserved for the execution of VP
Swapping Microcode 1510. ALU 1942 (part of FU 120) is used for the descriptor-to-pointer and pointer-to-descriptor transformations required when one Virtual Processor 612 is unbound from JP 114 and another bound to JP 114. MEM 112 contains data bases
for Virtual Processors 612 and data bases used by KOS 706, 710 to manage Virtual Processors 612. KOS 706, 710 provides a fixed number of Virtual Processors 612 for CS 101. Each Virtual Processor 612 is represented by a Virtual Processor State Block
(VPSB) 614. Each VPSB 614 contains information used by KOS 706, 710 to manage the Virtual Processor 612, and in addition contains information associating the Virtual Processor 612 with a process. FIG. 15 shows two VPSBs 614, one belonging to Virtual
Processor 612A, and another belonging to Virtual Processor 612B, which will replace Virtual Processor 612A on JP 114. The VPSBs 614 are contained in VPSB Array 1512. The index of a VPSB 614 in VPSB Array 1512 is Virtual Processor Number 1514 belonging
to the Virtual Processor 612 represented by a VPSB 614. Virtual Processor Lists 1516 are lists which KOS 706, 710 uses to manage Virtual Processors 612. If a Virtual Processor 612 is able to execute, its Virtual Processor Number 1514 is on a list
called the Runnable List; Virtual Processors 612 which cannot run are on other lists, depending on the reason why they cannot run. It is assumed that Virtual Processor 612B's Virtual Processor Number 1514 is the first one on the Runnable List.

When a process is bound to a Virtual Procesor 612, the Virtual Processor Number 1514 is copied into the process's Process Object 901 and the AONs of the process's Process Object 901 and stacks are copied into the Virtual Processor 612's VPSB 614. (AONs are used because a process's stacks are wired active as long as the process is bound to a Virtual Processor 612). Binding is carried out by KOS 706, 710 at the request of EOS 704. In FIG. 15, two Secure Stack Objects 906 are shown, one belonging
to the process to which Virtual Processor 612A is bound, and one belonging to that to which Virtual Processor 612B is bound.

Having described certain overall operating features of CS 101, a present implementation of CS 101's structure will be described further next below.

E. CS 101 Structural Implementation (FIGS. 16,17,18,19,20)

1. (IOS 116 (FIGS. 16, 17)

Referring to FIG. 16, a partial block diagram of IOS 116 is shown. Major elements of IOS 116 include an ECLIPSE.RTM. Burst Multiplexer Channel (BMC) 1614 and a NOVA.RTM. Data Channel (NDC) 1616, an IO Controller (IOC) 1618 and a Data Mover
(DM) 1610. IOS 116's data channel devices, for example BMC 1614 and NDC 1616, comprise IOS 116's interface to the outside world. Information and addresses are received from external devices, such as disk drives, communications modes, or other computer
systems, by IOS 116's data channel devices and are transferred to DM 1610 (described below) to be written into MEM 112. Similarly, information read from MEM 112 is provided through DM 1610 to IOS 116's data channel devices and thus to the above
described external devices. These external devices are a part of CS 101's addressable memory space and may be addressed through UID addresses.

IOC 1618 is a general purpose CPU, for example an ECLIPSE.RTM. computer available from Data General Corporation. A primary function of IOC 1618 is control of data transfer through IOS 116. In addition, IOC 1618 generates individual Maps for
each data channel device for translating external device addresses into physical addresses within MEM 112. As indicated in FIG. 16, each data channel device contains an individual Address Translation Map (MAP) 1632 and 1636. This allows IOS 116 to
assign individual areas of MEM 112's physical address space to each data channel device. This feature provides protection against one data channel device writing into or reading from information belonging to another data channel device. In addition,
IOC 1618 may generate overlapping address translation Maps for two or more data channel devices to allow these data channel devices to share a common area of MEM 112 physical address space.

Data transfer between IOS 116's data channel devices and MEM 112 is through DM 1610, which includes a Buffer memory (BUF) 1641. BUF 1641 allows MEM 112 and IOS 116 to operate asychronously. DM 1610 also includes a Ring Grant Generator (RGG)
1644 which controls access of various data channel devices to MEM 112. RGG 1644 is designed to be flexible in apportioning access to MEM 112 among IOS 116's data channel devices as loads carried by various data channel devices varies. In addition, RGG
1644 insures that no one, or group, of data channel devices may monopolize access to MEM 112.

Referring to FIG. 17, a diagramic representation of RGG 1644's operation is shown. As described further in a following description, RGG 1644 may be regarded as a commutator scanning a number of ports which are assigned to various channel
devices. For example, ports A, C, E, and G may be assigned to a BMC 1614, ports B and F to a NDC 1616, and ports D and H to another data channel device. RGG 1644 will scan each of these ports in turn and, if the data channel device associated with a
particular port is requesting access to MEM 112, will grant access to MEM 112 to that data channel device. If no request is present at a given port, RGG 1644 will continue immediately to the next port. Each data channel device assigned one or more
ports is thereby insured opportunity of access to MEM 112. Unused ports, for example indicating data channel devices which are not presently engaged in information transfer, are effectively skipped over so that access to MEM 112 is dynamically modified
according to the information transfer loads of the various data channel devices. RGG 1644's ports may be reassigned among IOS 116's various data channel devices as required to suit the needs of a particular CS 101 system. If, for example, a particular
CS 101 utilizes NDC 1616 more than a BMC 1614, that CS 101's NDC 1616 may be assigned more ports while that CS 101's BMC 1614 is assigned fewer ports.

2 Memory (MEM) 112 (FIG. 18)

Referring to FIG. 18, a partial block diagram of MEM 112 is shown. Major elements of MEM 112 are Main Store Bank (MSB) 1810, a Bank Controller (BC) 1814, a Memory Cache (MC) 1816, a Field Interface Unit (FIU) 1820, and Memory Interface
Controller (MIC) 1822. Interconnections of these elements with input and output buses of MEM 112 to IOS 116 and JP 114 are indicated.

MEM 112 is an intelligent, prioritizing memory having a single port to IOS 116, comprised of IOM Bus 130, MIO Bus 129, and IOMC Bus 131, and dual ports to JP 114. A first JP 114 port is comprised of MOD Bus 140 and PD Bus 146, and a second port
is comprised of JPD Bus 142 and PD Bus 146. In general, all data transfers from and to MEM 112 by IOS 116 and JP 114 are of single, 32 bit words; IOM Bus 130, MIO Bus 129, MOD Bus 140, and JPD Bus 142 are each 32 bits wide. CS 101, however, is a
variable word length machine wherein the actual physical width of data buses are not apparent to a user. For example, a Name in a user's program may refer to an operand containing 97 bits of data. To the user, that 97 bit data item will appear to be
read from MEM 112 to JP 114 in a single operation. In actuality, JP 114 will read that operand from MEM 112 in a series of read operations referred to as a string transfer. In this example, the string transfer will comprise three 32 bit read transfers
and one single bit read transfer. The final single bit transfer, containing a single data bit, will be of a 32 bit word wherein one bit is data and 31 bits are fill. Write operations to MEM 112 may be performed in the same manner. If a single read or
write request to MEM 112 specifies a data item of less than 32 bits of data, that transfer will be accomplished in the same manner as the final transfer described above. That is, a single 32 bit word will be transferred wherein non-data bits are fill
bits.

Bulk data storage in MEM 112 is provided in MSB 1810, which is comprised of one or more Memory Array cards (MAs) 1812. The data path into and out of MA 1812 is through BC 1814, which performs all control and timing functions for MAs 1812. BC
1814's functions include addressing, transfer of data, controlling whether a read or write operation is performed, refresh, sniffing, and error correction code operations. All read and write operations from and to MAs 1812 through BC 1814 are in blocks
of four 32 bit words.

The various MAs 1812 comprising MSB 1810 need not be of the same data storage capacity. For example, certain MAs 1812 may have a capacity of 256 kilobytes while other MAs 1812 may have a capacity of 512 kilobytes. Addressing of the MAs 1812 in
MSB 1810 is automatically adapted to various MA 1812 configurations. As indicated in FIG. 18, each MA 1812 contains an address circuit (A) which receives an input from the next lower MA 1812 indicating the highest address in that next lower MA 1812.
The A circuit on an MA 1812 also receives an input from that MA 1812 indicating the total address space of that MA 1812. The A circuit of that MA 1812 adds the highest address input from next lower MA 1812 to its own input representing its own capacity
and generates an output to the next MA 1812 indicating its own highest address. All MAs 1812 of MSB 1810 are addressed in parallel by BC 1814. Each MA 1812 compares such addresses to its input from the next lower MA 1812, representing highest address
of that next lower MA 1812, and its own output, representing its own highest address, to determine whether a particular address provided by BC 1814 lies within the range of addresses contained within that particular MA 1812. The particular MA 1812 whose
address space includes that address will then respond by accepting the read or write request from BC 1814.

MC 1816 is the data path for transfer of data between BC 1814 and IOS 116 and JP 114. MC 1816 contains a high speed cache storing data from MSB 1810 which is currently being utilized by either IOS 116 or JP 114. MSB 1810 thereby provides MEM
112 with a large storage capacity while MC 1816 provides the appearance of a high speed memory. In addition to operating as a cache, MC 1816 includes a bypass write path which allows IOS 116 to write blocks of four 32 bit words directly into MSB 1810
through BC 1814. In addition, MC 1816 includes a cache write-back path which allows data to be transferred out of MC 1816's cache and stored while further data is transferred into MC 1816's cache. Displaced data from MC 1816's cache may then be written
back into MSB 1810 at a later, more convenient time. This write-back path enhances speed of operation of MC 1816 by avoiding delays incurred by transferring data from MC 1816 to MSB 1810 before new data may be written into MC 1816.

MEM 112's FIU 1820 allows manipulation of data formats in writes to and reads from MEM 112 by both JP 114 and IOS 116. For example, FIU 1820 may convert unpacked decimal data to packed decimal data, and vice versa. In addition, FIU 1820 allows
MEM 112 to operate as a bit addressable memory. For example, as described all data transfers to and from MEM 112 are of 32 bit words. If a data transfer of less than 32 bits is required, the 32 bit word containing those data bits may be read from MC
1816 to FIU 1820 and therein manipulated to extract the required data bits. FIU 1820 then generates a 32 bit word containing those required data bits, plus fill bits, and provides that new 32 bit word to JP 114 or IOS 116. When writing into MEM 112
from IOS 116 through FIU 1820, data is transferred onto IOM Bus 130, read into FIU 1820, operated upon, transferred onto MOD Bus 140, and transferred from MOD Bus 140 to MC 1816. In read operations from MEM 112 to IOS 116, data is transferred from MC
1816 to MOD Bus 140, written into FIU 1820 and operated upon, and transferred onto MIO Bus 129 to IOS 116. In a data read from MEM 112 to JP 114, data is transferred from MC 1816 onto MOD Bus 140, transferred into FIU 1820 and operated upon, and
transferred again onto MOD Bus 140 to JP 114. In write operations from JP 114 to MEM 112, data on JPD Bus 142 is transferred into FIU 1820 and operated upon, and is then transferred onto MOD Bus 140 to MC 1816. MOD Bus 140 is thereby utilized as an MEM
112 internal bus for FIU 1820 operations.

A primary function of FU 120 is to execute SINs. In doing so, FU 120 fetches instructions and data (SOPs and Names) from MEM 112, returns results of operations to MEM 112, directs operation of EU 122, executes instructions of user's programs,
and performs the various functions of CS 101's operating systems. As part of these functions, FU 120 generates and manipulates logical addresses and descriptors and is capable of operating as a general purpose CPU.

Referring to FIG. 19, a major element of FU 120 is the Descriptor Processor (DESP) 1910. DESP 1910 includes General Register File (GRF) 506. GRF 506 is a large register array divided vertically into three parts which are addressed in parallel.
A first part, AONGRF 1932, stores AON fields of logical addresses and descriptors. A second part, OFFGRF 1934, stores offset fields of logical addresses and descriptors and is utilized as a 32 bit wide general register array. A third portion GRF 506,
LENGRF 1936, is a 32 bit wide register array for storing length fields of logical descriptors and as a general register for storing data. Primary data path from MEM 112 to FU 120 is through MOD Bus 140, which provides inputs to OFFGRF 1934. As
indicated in FIG. 19, data may be transferred from OFFGRF 1934 to inputs of AONGRF 1932 and LENGRF 1936 through various interconnections. Similarly, outputs from LENGRF 1936 and AONGRF 1932 may be transferred to inputs of AONGRF 1932, OFFGRF 1934, and
LENGRF 1936.

Output of OFFGRF 1934 is connected to inputs of DESP 1910's Arithmetic and Logic Unit (ALU) 1942. ALU 1942 is a general purpose 32 bit ALU which may be used in generating and manipulating logical addresses and descriptors, as distinct from
general purpose arithmetic and logic operands performed by MUX 1940. Output of ALU 1942 is connected to JPD Bus 142 to allow results of arithmetic and logic operations to be transferred to MEM 112 or EU 122.

Also connected from output of OFFGRF 1934 is Descriptor Multiplexer (MUX) 1940. An output of MUX 1940 is provided to an input of ALU 1942. MUX 1940 is a 32 bit ALU, including an accumulator, for data manipulation operations. MUX 1940, together
with ALU 1942, allows DESP 1910 to perform 32 bit arithmetic and logic operations. MUX 1940 and ALU 1942 may allow arithmetic and logic operations upon operands of greater than 32 bits by performing successive operations upon successive 32 bit words of
larger operands.

LD Bus 1902 is also connected to write input of Name Cache (NC) 1926. NC 1926 is a cache mechanism for storing logical descriptors corresponding to operand Names currently being used in user's programs. As previously described, Name Table
Entries corresponding to operands currently being used in user's programs are stored in MEM 112. Certain Name Table Entries for operands of a user's program currently being executed are transferred from those Name Tables in MEM 112 to FU 120 and are
therein evaluated to generate corresponding logical descriptors. These logical descriptors are then stored in NC 1926. As will be described further below, the instruction stream of a user's program is provided to FU 120's Instruction Buffer (IB) 1962
through MOD Bus 140. FU 120's Parser (P) 1964 separates out, or parses, Names from IB 1962 and provides those Names as address inputs to NC 1924. NC 1924 in turn provides logical descriptor outputs to LD Bus 1902, and thus to input of ATU 1928. NC
1926 input from LD Bus 1902 allows logical descriptors resulting from evaluation of Name Table Entries to be written into NC 1926. FU 120's Protections Cache (PC) 1934 is a cache mechanism having an input connected from LD Bus 1902 and providing
information, as described further below, regarding protection aspects of references to data in MEM 112 by user's programs. NC 1926, ATU 1928, and PC 1934 are thereby acceleration mechanisms of, respectively, CS 101's Namespace addressing, logical to
physical address structure, and protection mechanism.

Referring again to DESP 1910, DESP 1910 includes BIAS 1952, connected from output of LENGRF 1936. As previously described, operands containing more than 32 data bits are transferred beteen MEM 112 and JP 114 by means of string transfers. In
order to perform string transfers, it is necessary for FU 120 to generate a corresponding succession of logical descriptors wherein length fields of those logical descriptors is no greater than 5 bits, that is, specify lengths of no greater than 32 data
bits.

A logical descriptor describing a data item to be transferred by means of a string transfer will be stored in GRF 506. AON field of the logical descriptor will reside in AONGRF 1932, O field in OFFGRF 1934, and L field in LENGRF 1936. At each
successive transfer of a 32 bit word in the string transfer, O field of that original logical descriptor will be incremented by the number of data bits transferred while L field will be accordingly decremented. The logical descriptor residing in GRF 506
will thereby describe, upon each successsive transfer of the string transfer, that portion of the data item yet to be transferred. O field in OFFGRF 1934 will indicate increasingly larger offsets into that data item, while L field will indicate
successively shorter lengths. AON and O fields of the logical descriptor in GRF 506 may be utilized directly as AON and O fields of the successive logical descriptors of the string transfer. L field of the logical descriptor residing in LENGRF 1936,
however, may not be so used as L fields of the successive string transfer logical descriptors as this L field indicates remaining length of data item yet to be transferred. Instead, BIAS 1952 generates the 5 bit L fields of successive string transfer
logical descriptors while correspondingly decrementing L field of the logical descriptor in LENGRF 1936. During each transfer, BIAS 1952 generates L field of the next string transfer logical descriptor while concurrently providing L field of the current
string transfer logical descriptor. By doing so, BIAS 1952 thereby increases speed of execution of string transfers by performing pipelined L field operations. BIAS 1952 thereby allows CS 101 to appear to the user to be a variable word length machine
by automatically performing string transfers. This mechanism is used for transfer of any data item greater than 32 bits, for example double precision floating point numbers.

Finally, FU 120 includes microcode circuitry for controlling all FU 120 operations described above. In particular, FU 120 includes a microinstruction sequence control store (mC) 1920 storing sequences of microinstructions for controlling step by
step execution of all FU 120 operations. In general, these FU 120 operations fall into two classes. A first class includes those microinstruction sequences directly concerned with executing the SOPs of user's programs. The second class includes
microinstruction sequences concerned with CS 101's operating systems, including certain automatic, internal FU 120 functions such as evaluation of Name Table Entries.

As previously described, CS 101 is a multiple S-Language machine. For example, mC 1920 may contain microinstruction sequences for executing user's SOPs in at least four different Dialects. mC 1920 is comprised of a writeable control store and
sets of microinstruction sequences for various Dialects may be transferred into and out of mC 1920 as required for execution of various user's programs. By storing sets of microinstruction sequences for more than one Dialect in mC 1920, it is possible
for user's programs to be written in a mixture of user languages. For example, a particular user's program may be written primarily in FORTRAN but may call certain COBOL routines. These COBOL routines will be correspondingly translated into COBOL
dialect SOPs and executed by COBOL microinstruction sequences stored in mC 1920.

The instruction stream provided to FU 120 from MEM 112 has been previously described with reference to FIG. 3. SOPs and Names of this instruction stream are transferred from MOD Bus 140 into IB 1962 as they are provided from MEM 112. IB 1962
includes two 32 bit (one word) registers. IB 1962 also includes prefetch circuitry for reading for SOPs and Names of the instruction stream from MEM 112 in such a manner that IB 1962 shall always contain at least one SOPs or Name. FU 120 includes (P)
1964 which reads and separates, or parses, SOPs and Names from IB 1962. As previously described, P 1964 provides those Names to NC 1926, which accordingly provides logical descriptors to ATU 1928 so as to read the corresponding operands from MEM 112.

SOPs parsed by P 1964 are provided as inputs to Fetch Unit Dispatch Table (FUDT) 1904 and Execute Unit Dispatch Table (EUDT) 1966. Referring first to FUDT 1904, FUDT 1904 is effectively a table for translating SOPs to starting addresses in mC
1912 of corresponding microinstruction sequences. This intermediate translation of SOPs to mC 1912 addresses allows efficient packing of microinstruction sequences within mC 1912. That is, certain microinstruction sequences may be common to two or more
S-Language Dialects. Such microinstruction sequences may therefore be written into mC 1912 once and may be referred to by different SOPs of different S-Language Dialects.

EUDT 1966 performs a similar function with respect to EU 122. As will be described below, EU 122 contains a mC, similar to mC 1912, which is addressed through EUDT 1966 by SOPs specifying EU 122 operations. In addition, FU 120 may provide such
addresses mC 1912 to initiate EU 122 operations as required to assist certain FU 120 operations. Examples of such operations which may be requested by FU 120 include calculations required in evaluating Name Table Entries to provide logical descriptors
to be loaded into NC 1926.

Associated with both FUDT 1904 and EUDT 1966 are Dialect (D) registers 1905 and 1967. D registers 1905 and 1967 store information indicating the particular S-Language Dialect currently being utilized in execution of a user's program. Outputs of
D registers 1905 and 1967 are utilized as part of the address inputs to mC 1912 and EU 122's mC.

4. Execute Unit (EU) 122 (FIG. 20)

As previously described, EU 122 is an arithmetic and logic unit provided to relieve FU 120 of certain arithmetic operations. EU 122 is capable of performing addition, subtraction, multiplication, and division operations on integer, packed and
unpacked decimal, and single and double precision floating operands. EU 122 is an independently operating microcode controlled machine including Microcode Control (mC) 2010 which, as described above, is addressed by EUDT 1966 to initiate EU 122
operations. mC 2010 also includes logic for handling mutual interrupts between FU 120 and EU 122. That is, FU 120 may interrupt current EU 122 operations to call upon EU 122 to assist an FU 120 operation. For example, FU 120 may interrupt an
arithmetic operation currently being executed by EU 122 to call upon EU 122 to assist in generating a logical descriptor from a Name Table Entry. Similarly, EU 122 may interrupt current FU 120 operations when EU 122 requires FU 120 assistance in
executing a current arithmetic operation. For example, EU 122 may interrupt a current FU 120 operation if EU 122 receives an instruction and operands requiring EU 122 to perform a divide by zero.

Referring to FIG. 20, a partial block diagram of EU 122 is shown. EU 122 includes two arithmetic and logic units. A first arithmetic and logic unit (MULT) 2014 is utilized to perform addition, subtraction, multiplication, and division
operations upon integer and decimal operands, and upon mantissa fields of single and double precision floating point operands. Second ALU (EXP) 2016 is utilized to perform operations upon single and double precision floating point operand exponent
fields in parallel with operations performed upon floating point mantissa fields by MULT 2014. Both MULT 2014 and EXP 2016 include an arithmetic and logic unit, respectively MALU 2074 and EXPALU 2084. MULT 2014 and EXP 2016 also include register files,
respectively MRF 2050 and ERF 2080, which operate and are addressed in parallel in a manner similar to AONGRF 1932, OFFGRF 1984 and LENGRF 1936.

Operands for EU 122 to operate upon are provided from MEM 112 through MOD Bus 140 and are transferred into Operand Buffer (OPB) 2022. In addition to serving as an input buffer, OPB 2022 performs certain data format manipulation operations to
transform input operands into formats most efficiently operated with by EU 122. In particular, EU 122 and MULT 2014 may be designed to operate efficiently with packed decimal operands. OPB 2022 may transform unpacked decimal operands into packed
decimal operands. Unpacked decimal operands are in the form of ASCII characters wherein four bits of each characters are binary codes specifying a decimal value between zero and nine. Other bits of each character are referred to as zone fields and in
general contain information identifying particular ASCII characters. For example, zone field bits may specify whether a particular ASCII character is a number, a letter, or punctuation. Packed decimal operands are comprised of a series of four bit
fields wherein each field contains a binary number specifying a decimal value of between zero and nine. OPB 2022 converts unpacked decimal to packed decimal operands by extracting zone field bits and packing the four numeric value bits of each character
into the four bit fields of a packed decimal number.

EU 122 is also capable of transforming the results of arithmetic operands, for example in packed decimal format, into unpacked decimal format for transfer back to MEM 112 or FU 120. In this case, a packed decimal result appearing at output of
MALU 2074 is written into MRF 2050 through a multiplexer, not shown in FIG. 20, which transforms the four bit numeric code fields of the packed decimal results into corresponding bits of unpacked decimal operand characters, and forces blanks into the
zone field bits of those unpacked decimal characters. The results of this operation are then read from MRF 2050 to MALU 2074 and zone field bits for those unpacked decimal characters are read from Constant Store (CST) 2060 to MALU 2074. These inputs
from MRF 2050 and CST 2060 are added by MALU 2074 to generate final result outputs in unpacked decimal format. These final results may then be transferred onto JPD Bus 142 through Output Multiplexer (OM) 2024.

Considering first floating point operations, in addition or subtraction of floating point operands it is necessary to equalize the values of the floating point operand exponent fields. This is referred to as prealignment. In floating point
operations, exponent fields of the two operands are transferred into EXPALU 2034 and compared to determine the difference between exponent fields. An output representing difference between exponent fields is provided from EXPALU 2034 to an input of
floating point control (FPC) 2002. FPC 2002 in turn provides control outputs to MALU 2074, which has received the mantissa fields of the two operands. MALU 2074, operating under direction of FPC 2002, accordingly right or left shifts one operand's
mantissa field to effectively align that operand's exponent field with the other operand's exponent field. Addition or subtraction of the operand's mantissa fields may then proceed.

EXPALU 2034 also performs addition or subtraction of floating point operand exponent fields in multiplication or division operations, while MALU 2074 performs multiplication and division of the operand mantissa fields. Multiplication and
division of floating point operand mantissa fields by MALU 2074 is performed by successive shifting of one operand, corresponding generation of partial products of the other operand, and successive addition and subtraction of those partial products.

Finally, EU 122 performs normalization of the results of floating point operand operations by left shifting of a final result's mantissa field to eliminate zeros in the most significant characters of the final result mantissa field, and
corresponding shifting of the final result exponent fields. Normalization of floating point operation results is controlled by FPC 2002. FPC 2002 examines an unnormalized floating point result output of MALU 2074 to detect which, if any, of the most
significant characters of that results contain zeros. FPC 2002 then accordingly provides control outputs to EXPALU 2034 and MALU 2074 to correspondingly shift the exponent and mantissa fields of those results so as to eliminate leading character zeros
from the mantissa field. Normalized mantissa and exponent fields of floating point results may then be transferred from MALU 2074 and EXPALU 2034 to JPD Bus 142 through OM 2024.

As described above, EU 122 also performs addition, subtraction, multiplication, and division operations on operands. In this respect, EU 122 uses a leading zero detector in FPC 2002 in efficiently performing multiplication and division
operations. FPC 2002's leading zero detector examines the characters or bits of two operands to be multiplied or divided, starting from the highest, to determine which, if any, contain zeros so as not to require a multiplication or division operation.
FPC 2002 accordingly left shifts the operands to effectively eliminate those characters or bits, thus reducing the number of operations to multiply or divide the operands and accordingly reducing the time required to operate upon the operands.

Finally, EU 122 utilizes a unique method, with associated hardware, for performing arithmetic operations on decimal operands by utilizing circuitry which is otherwise conventionally used only to perform operations upon floating point operands.
As described above, MULT 2074 is designed to operate with packed decimal operands, that is operands in the form of consecutive blocks of four bits wherein each block of four bits contains a binary code representing numeric values of between zero and
nine. Floating point operands are similarly in the form of consecutive blocks of four bits. Each block of four bits in a floating point operand, however, contains a binary number representing a hexadecimal value of between zero and fifteen. As an
initial step in operating with packed decimal operands, those operands are loaded, one at a time, into MALU 2074 and, with each such operand, a number comprised of all hexadecimal sixes is loaded into MALU 2074 from CST 2060. This CST 2060 number is
added to each packed decimal operand to effectively convert those packed decimal operands into hexadecimal operands wherein the four bit blocks contain numeric values in the range of six to fifteen, rather than in the original range of zero to nine.
MULT 2014 then performs arithmetic operation upon those transformed operands, and in doing so detects and saves information regarding which four bit characters of those operands have resulted in generation of carries during the arithmetic operations. In
a final step, the intermediate result resulting from completion of those arithmetic operations upon those transformed operands are reconverted to packed decimal format by subtraction of hexadecimal sixes from those characters for which carries have been
generated. Effectively, EU 122 converts packed decimal operands into "Excess Six" operands, performs arithmetic operations upon those "Excess Six" operands, and reconverts "Excess Six" results of those operations back into packed decimal format.

Finally, as previously descibed FU 120 controls transfer of arithmetic results from EU 122 to MEM 112. In doing so, FU 120 generates a logical descriptor describing the size of MEM 112 address space, or "container", that result is to be
transferred into. In certain arithmetic operations, for example integer operations, an arithmetic result may be larger than anticipated and may contain more bits than the MEM 112 "container". Container Size Check Circuit (CSC) 2052 compares actual size
of arithmetic results and L fields of MEM 112 "container" logical descriptors. CSC 2052 generates an output indicating whether an MEM 112 "container" is smaller than an arithmetic result.

Having briefly described certain features of CS 101 structure and operation in the above overview, these and other features of CS 101 will be described in further detail next below in a more detailed introduction of CS 101 structure and
operation. Then, in further descriptions, these and other features of CS 101 structure and operation will be described in depth.

As will be discussed further below, IOS 10116 and MEM 10112 operate independently under general control of JP 10114 in executing multiple user's programs. In this regard, MEM 10112 is an intelligent, prioritizing memory having separate and
independent ports MIO 10128 and MJP 10140 to IOS 10116 and JP 10114 respectively. MEM 10112 is the primary path for information transfer between External Devices 10124 (through IOS 10116) and JP 10114. MEM 10112 thus operates both as a buffer for
receiving and storing various individual user's programs (e.g., data, instructions, and results of program execution) and as a main memory for JP 10114.

A primary function of IOS 10116 is as an input/output buffer between CS 10110 and ED 10124. Data and instructions are transferred from ED 10124 to IOS 10116 through I/O Bus 10126 in a manner and format compatible with ED 10124. IOS 10116
receives and stores this information, and manipulates the information into formats suitable for transfer into MEM 10112. IOS 10116 then indicates to MEM 10112 that new information is available for transfer into MEM 10112. Upon acknowledgement by MEM
10112, this information is transferred into MEM 10112 through IOM Bus 10130 and MIO Port 10128. MEM 10112 stores the information in selected portions of MEM 10112 physical address space. At this time, IOS 10116 notifies JP 10114 that new information is
present in MEM 10112 by providing a "semaphore" signal to FU 10120 through IOJP Bus 10132. As will be described further below, CS 10110 manipulates the data and instructions stored in MEM 10112 into certain information structures used in executing
user's programs. Among these structures are certain structures, discussed further below, which are used by CS 10110 in organizing and controlling flow and execution of user programs.

FU 10120 and EU 10122 are independently operating microcode controlled "machines" together comprising the CS 10110 micromachine for executing user's programs stored in MEM 10112. Among the principal functions of FU 10120 are: (1) fetching and
interpreting instructions and data from MEM 10112 for use by FU 10120 and EU 10122; (2) organizing and controlling flow of user programs; (3) initiating EU 10122 operations; (4) performing arithmetic and logic operations on data; (5) controlling transfer
of data from FU 10120 and EU 10122 to MEM 10112; and, (6) maintaining certain "stack" and "register" mechanisms, described below. FU 10120 "cache" mechanisms, also described below, are provided to enhance the speed of operation of JP 10114. These cache
mechanisms are acceleration circuitry including, in part, high speed memories for storing copies of selected information stored in MEM 10112. The information stored in this acceleration circuitry is therefore more rapidly available to JP 10114. EU
10122 is an arithmetic unit capable of executing integer, decimal, or floating point arithmetic operations. The primary function of EU 10122 is to relieve FU 10120 from certain extensive arithmetic operations, thus enhancing the efficiency of CS 10110.

In general, operations in JP 10114 are executed on a memory to memory basis; data is read from MEM 10112, operated upon, and the results returned to MEM 10112. In this regard, certain stack and cache mechanisms in JP 10114 (described below)
operate as extensions of MEM 10112 address space.

In operation, FU 10120 reads data and instructions from MEM 10112 by providing physical addresses to MEM 10112 by way of PD Bus 10146 and MJP Port 10140. The instructions and data are transferred to FU 10120 and EU 10122 by way of MJP Port 10140
and MOD Bus 10140. Instructions are interpreted by FU 10120 microcode circuitry, not shown in FIG. 101 but described below, and when necessary, microcode instructions are provided to EU 10122 from FU 10120's microcode control by way of F/E Bus 10148, or
by way of JPD Bus 10142.

As stated above, FU 10120 and EU 10122 operate asynchronously with respect to each other's functions. A microinstruction from FU 10120 microcode circuitry to EU 10122 may initiate a selected operation of EU 10122. EU 10122 may then proceed to
independently execute the selected operation. FU 10120 may proceed to concurrently execute other operations while EU 10122 is completing the selected arithmetic operation. At completion of the selected arithmetic operation, EU 10122 signals FU 10120
that the operation results are available by way of a "handshake" signal through F/E Bus 10148. FU 10120 may then receive the arithmetic operation results for further processing or, as discussed momentarily, may directly transfer the arithmetic operation
results to MEM 10112. As described further below, an instruction buffer referred to as a "queue" between FU 10120 and EU 10122 allows FU 10120 to assign a sequence of arithmetic operations to be performed by EU 10122.

Information, such as results of executing an instruction, is written into MEM 10112 from FU 10120 or EU 10122 by way of JPD Bus 10142. FU 10120 provides a "physical write address" signal to MEM 10112 by way of PD Bus 10146 and MJP Port 10140.
Concurrently, the information to be written into MEM 10112 is placed on JPD Bus 10142 and is subsequently written into MEM 10112 at the locations selected by the physical write address.

FU 10120 places a semaphore signal on IOJP Bus 10132 to signal to IOS 10116 that information, such as the results of executing a user's program, is available to be read out of CS 10110. IOS 10116 may then transfer the information from MEM 10112
to IOS 10116 by way of MIO Port 10128 and IOM Bus 10130. Information stored in IOS 10116 is then transferred to ED 10124 through I/O Bus 10126.

During execution of a user's program, certain information required by JP 10116 may not be available in MEM 10112. In such cases as further described in a following discussion, JP 10114 may write a request for information into MEM 10112 and
notify IOS 10116, by way of IOJP Bus 10132, that such a request has been made. IOS 10116 will then read the request and transfer the desired information from ED 10124 into MEM 10112 through IOS 10116 in the manner described above. In such operations,
IOS 10116 and JP 10114 operate together as a memory manager wherein the memory space addressable by JP 10114 is termed virtual memory space, and includes both MEM 10112 memory space and all external devices to which IOS 10116 has access.

As previously described, DP 10118 provides a second interface between Computer System 10110 and the external world by way of DPIO Bus 10136. DP 10118 allows DU 10134, for example a CRT and keyboard unit or a teletype, to perform all functions
which are conventionally provided by a hard (i.e., switches and lights) console. For example, DP 10118 allows DU 10134 to exercise control of Computer System 10110 for such purposes as system initialization and start up, execution of diagnostic
processes, and fault monitoring and identification. DP 10118 has read and write access to most memory and register portions within each of IOS 10116, MEM 10112, FU 10120, and EU 10122 by way of DP Bus 10138. Memories and registers in CS 10110 can
therefore be directly loaded or initialized during system start up, and can be directly read or loaded with test and diagnostic signals for fault monitoring and identification. In addition, as described further below, microinstructions may be loaded
into JP 10114's microcode circuitry at system start up or as required.

Having described the general structure and operation of Computer System 10110, certain features of Computer System 10110 will next be briefly described to aid in understanding the following, more detailed descriptions of these and other features
of Computer System 10110.

c. Definition of Certain Terms

Certain terms are used relating to the structure and operation of CS 10110 throughout the following discussions. Certain of these terms will be discussed and defined first, to aid in understanding the following descriptions. Other terms will be
introduced in the following descriptions as required.

A procedure is a sequence of operational steps, or instructions, to be executed to perform some operation. A procedure may include data to be operated upon in performing the operation.

A program is a static group of one or more procedures. In general, programs may be classified as user programs, utility programs, and operating system programs. A user program is a group of procedures generated by and private to one particular
user of a group of users interfacing with CS 10110. Utility programs are commonly available to all users; for example, a compiler comprises a set of procedures for compiling a user language program into an S-language program. Operating system programs
are groups of procedures internal to CS 10110 for allocation and control of CS 10110 resources. Operating system programs also define interfaces within CS 10110. For example, as will be discussed further below all operands in a program are referred to
by "NAME". An operating system program translates operand NAME into the physical locations of the operands in MEM 10112. The NAME translation program thus defines the interface between operand NAME (name space addresses) and MEM 10112 physical
addresses.

A process is an independent locus of control passing through physical, logical or virtual address spaces, or, more particularly, a path of execution through a series of programs (i.e., procedures). A process will generally include a user program
and data plus one or more utility programs (e.g., a compiler) and operating system programs necessary to execute the user program.

An object is a uniquely identifiable portion of "data space" accessible to CS 10110. An object may be regarded as a container for information and may contain data or procedure information or both. An object may contain for example, an entire
program, or set of procedures, or a single bit of data. Objects need not be contiguously located in the data space accessible to CS 10110, and the information contained in an object need not be contiguously located in that object.

A domain is a state of operation of CS 10110 for the purposes of CS 10110's protection mechanisms. Each domain is defined by a set of procedures having access to objects within that domain for their execution. Each object has a single domain of
execution in which it is executed if it is a procedure object, or used, if it is a data object. CS 10110 is said to be operating in a particular domain if it is executing a procedure having that domain of execution. Each object may belong to one or
more domains; an object belongs to a domain if a procedure executing in that domain has potential access to the object. CS 10110 may, for example have four domains: User domain, Data Base Management System (DBMS) domain, Extended Operating System (EOS)
domain, and Kernel Operating System (KOS) domain. User domain is the domain of execution of all user provided procedures, such as user or utility procedures. DBMS domain is the domain of execution for operating system procedures for storing,
retrieving, and handling data. EOS domain is the domain of execution of operating system procedures defining and forming the user level interface with CS 10110, such as procedures for controlling and executing files, processes, and I/O operations. KOS
domain is the domain of execution of the low level, secure operating system which manages and controls CS 10110' s physical resources. Other embodiments of CS 10110 may have fewer or more domains than those just described. For example, DBMS procedures
may be incorporated into the EOS domain or EOS domain may be divided by incorporating the I/O procedures into an I/O domain. There is no hardware enforced limitation on the number of, or boundaries between, domains in CS 10110. Certain CS 10110
hardware functions and structures are, however, dependent upon domains.

A subject is defined, for purposes of CS 10110's protection mechanisms, as a combination of the current principle (user), the current process being executed, and the domain the process is currently being executed in. In addition to principle,
process, and domain, which are identified by UIDs, subject may include a Tag, which is a user assigned identification code used where added security is required. For a given process, principle and process are constant but the domain is determined by the
procedure currently being executed. A process's associated subject is therefore variable along the path of execution of the process.

Having discussed and defined the above terms, certain features of CS 10110 will next be briefly described.

d. Multi-Program Operation

CS 10110 is capable of concurrently executing two or more programs and selecting the sequence of execution of programs to make most effective use of CS 10110's resources. This is referred to as multiprogramming. In this regard, CS 10110 may
temporarily suspend execution of one program, for example when a resource or certain information required for that program is not immediately available, and proceed to execute another program until the required resource or information becomes available.
For example, particular information required by a first program may not be available in MEM 10112 when called for. JP 10114 may, as discussed further below, suspend execution of the first program, transfer a request for that information to IOS 10116,
and proceed to call and execute a second program. IOS 10116 would fetch the requested information from ED 10124 and transfer it into MEM 10112. At some time after IOS 10116 notifies JP 10114 that the requested information is available in MEM 10112, JP
10114 could suspend execution of the second program and resume execution of the first program.

e. Multi-Language Operation

As previously described, CS 10110 is a multiple language machine. Each program written in a high level user language, such as COBOL or FORTRAN, is compiled into a corresponding Soft (S) Language program. That is, in terms of a conventional
computer system, each user level language has a corresponding machine language, classically defined as an assembly language. In contrast to classical assembly languages, S-Languages are mid-level languages wherein each command in a user's high level
language is replaced by, in general, two or three S-Language instructions, referred to as SINs. Certain SINs may be shared by two or more high level user languages. CS 10110, as further described in following discussions, provides a set, or dialect, of
microcode instructions (S-Interpreters) for each S-Language. S-Interpreters interpret SINs and provide corresponding sequences of microinstructions for detailed control of CS 10110. CS 10110's instruction set and operation may therefore be tailored to
each user's program, regardless of the particular user language, so as to most efficiently execute the user's program. Computer System 10110 may, for example, execute programs in both FORTRAN and COBOL with comparable efficiency. In addition, a user
may write a program in more than one high level user language without loss of efficiency. For example, a user may write a portion of his program in COBOL, but may wish to write certain portions in FORTRAN. In such cases, the COBOL portions would be
compiled into COBOL SINs and executed with the COBOL dialect S-Interpreter. The FORTRAN portions would be compiled into FORTRAN SINs and executed with a FORTRAN dialect S-Interpreter. The present embodiment of CS 10110 utilizes a uniform format for all
SINs. This feature allows simpler S-Interpreter structures and increases efficiency of SIN interpretation because it is not necessary to provide means for interpreting each dialect individually.

f. Addressing Structure

Each object created for use in, or by operation of, a CS 10110 is permanently assigned a Unique Identifier (UID). An object's UID allows that object to be uniquely identified and located at any time, regardless of which particular CS 10110 it
was created by or for or where it is subsequently located. Thus each time a new object is defined, a new and unique UID is allocated, much as social security numbers are allocated to individuals. A particular piece of information contained in an object
may be located by a logical address comprising the object's UID, an offset from the start of the object of the first bit of the segment, and the length (number of bits) of the information segment. Data within an object may therefore be addressed on a
bit granular basis. As will be described further in following discussions, UID's are used within a CS 10110 as logical addresses, and, for example, as pointers. Logically, all addresses and pointers in CS 10110 are UID addresses and pointers. As
previously described and as described below, however, short, temporary unique identifiers, valid only within JP 10114 and referred to as Active Object Numbers are used within JP 10114 to reduce the width of address buses and amount of address information
handled.

An object becomes active in CS 10110 when it is transferred from backing store ED 10124 to MEM 10112 for use in executing a process. At this time, each such object is assigned an Active Object Number (AON). AONs are short unique identifiers and
are related to the object's UIDs through certain CS 10110 information structures described below. AONs are used only within JP 10114 and are used in JP 10114, in place of UIDs, to reduce the required width of JP 10114's address buses and the amount of
address data handled in JP 10114. As with UID logical addresses, a piece of data in an object may be addressed through a bit granular AON logical address comprising the object's AON, an offset from the start of the object of the first bit of the piece,
and the length of the piece.

The transfer of logical addresses, for example pointers, between MEM 10112 (UIDA) and JP 10114 (AONs) during execution of a process requires translations between UIDs and AONs. As will be described in a later discussion, this translation is
accomplished, in part, through the information structures mentioned above. Similarly, translation of logical addresses to physical addresses in MEM 10112, to physically access information stored in MEM 10112, is accomplished through CS 10110 information
structures relating AON logical addresses to MEM 10112 physical addresses.

Each operand appearing in a program is assigned a Name when the program is compiled. Thereafter, all references to the operands are through their assigned Names. As will be described in detail in a later discussion, CS 10110's addressing
structure includes a mechanism for recognizing Names as they appear in an instruction stream and Name Tables containing directions for resolving Names to AON logical addresses. AON logical addresses may then be evaluated, for example translated into a
MEM 10112 physical address, to provide actual operands. The use of Names to identify operands in the instructions stream (process) (1) allows a complicated address to be replaced by a simple reference of uniform format; (2) does not require that an
operation be directly defined by data type in the instruction stream; (3) allows repeated references to an operand to be made in an instruction stream by merely repeating the operand's Name; and, (4) allows partially completed Name to address
translations to be stored in a cache to speed up operand references. The use of Names thereby substantially reduces the volume of information required in the instruction stream for operand references and increases CS 10110 speed and efficiency by
performing operands references through a parallel operating, underlying mechanism.

Finally, CS 10110 address structure incorporates a set of Architectural Base Pointers (ABPs) for each process. ABPs provide an addressing framework to locate data and procedure information belonging to a process and are used, for example, in
resolving Names to AON logical addresses.

g. Protection Mechanism

CS 10110's protection mechanism is constructed to prevent a user from (1) gaining access to or disrupting another user's process, including data, and (2) interfering with or otherwise subverting the operation of CS 10110. Access rights to each
particular active object are dynamically granted as a function of the currently active subject. A subject is defined by a combination of the current principle (user), the current process being executed, and the domain in which the process is currently
being executed. In addition to principle, process, and domain, subject may include a Tag, which is a user assigned identification code used where added security is required. For a given process, the principle and process are constant but the domain is
determined by the procedure currently being executed. A process's associated subject is therefore variable along the path of execution of the process.

In a present embodiment of CS 10110, procedures having KOS domain of execution have access to objects in KOS, EOS, DBMS, and User domains; procedures having EOS domain of execution have access to objects in EOS, DBMS, and User domains; procedures
having DBMS domain of execution have access to objects in DBMS and User domains; and procedures having User domain of execution have access only to objects in User domain. A user cannot, therefore, obtain access to objects in KOS domain of execution and
cannot influence CS 10110's low level, secure operating system. The user's process may, however, call for execution of a procedure having KOS domain of execution. At this point the process's subject is in the KOS domain and the procedure will have
access to certain objects in KOS domain.

In a present embodiment of CS 10110, also described in a later discussion, each object has associated with it an Access Control List (ACL). An ACL contains an Access Control Entry (ACE) for each subject having access to that object. ACEs
specify, for each subject, access rights a subject has with regard to that object.

There is normally no relationship, other than that defined by an object's ACL, between subjects and objects. CS 10110, however, supports Extended Type Objects having Extended ACLs wherein a user may specifically define which subjects have what
access rights to the object.

In another embodiment of CS 10110, described in a following discussion, access rights are granted on a dynamic basis. In executing a process, a procedure may call a second procedure and pass an argument to the called procedure. The calling
procedure will also pass selected access rights to that argument to the called procedure. The passed access rights exist only for the duration of the call.

In the dynamic access embodiment, access rights are granted only at the time they are required. In the ACL embodiment, access rights are granted upon object creation or upon specific request. In either embodiment, each procedure to which
arguments may be passed in a cross-domain call has associated with it an Access Information Array (AIA). A procedure's AIA states what access rights a calling procedure (subject) must have before the called procedure can operate on the passed argument.
CS 10110's protection mechanisms compare the calling procedure's access rights to the rights required by the called procedure. This ensures that a calling procedure may not ask a called procedure to do what the calling procedure is not allowed to do.
Effectively, a calling procedure can pass to a called procedure only the access rights held by the calling procedure.

Having described the general structure and operation and certain features of CS 10110, those and other features of CS 10110 operation will next be described in greater detail.

CS 10110 contains certain information structures and mechanisms to assist in efficient execution of processes. These structures and mechanisms may be considered as falling into three general types. The first type concerns the processes
themselves, i.e., procedure and data objects comprising a user's process or directly related to execution of a user's process. The second type are for management, control, and execution of processes. These structures are generally shared by all
processes active in CS 10110. The third type are CS 10110 micromachine information structures and mechanisms. These structures are concerned with the internal operation of the CS 10110 micromachine and are private to the CS 10110 micro-machine.

a. Introduction (FIG. 102)

Referring to FIG. 102, a pictorial representation of CS 10110 (MEM 10112, FU 10120, and EU 10122) is shown with certain information structures and mechanisms depicted therein. It should be understood that these information structures and
mechanisms transcend or "cut across" the boundaries between MEM 10112, FU 10120, EU 10122, and IOS 10116. Referring to the upper portion of FIG. 102 Process Structures 10210 contains those information structures and mechanisms most closely concerned
with individual processes, the first and third types of information structures described above. Process Structures 10210 reside in MEM 10112 and Virtual Processes 10212 include Virtual Processes (VP) 1 through N. Virtual Processes 10212 may contain, in
a present embodiment of CS 10110, up to 256 VP's. As previously described, each VP includes certain objects particular to a single user's process, for example stack objects previously described and further described in a following description. Each VP
also includes a Process Object containing certain information required to execute the process, for example pointers to other process information.

A particular VP is bound into CS 10110 when a Virtual Process Dispatcher, described in a following discussion selects that VP as eligible for execution. The selected VPs Process Object, as previously described, is swapped into a VPSB. VPSBs
10218 may contain, for example 16 or 32 State Blocks so that CS 10110 may concurrently execute up to 16 or 32 VPs. When a VP assigned to a VPSB is to be executed, the VP is swapped onto the information structures and mechanisms shown in FU 10120 and EU
10122. FU Register and Stack Mechanism (FURSM) 10214 and EU Register and Stack Mechanism (EURSM) 10216, shown respectively in FU 10120 and EU 10122, comprise register and stack mechanisms used in execution of VPs bound to CS 10110. These register and
stack mechanisms, as will be discussed below, are also used for certain CS 10110 process management functions. Procedure Objects (POs) 10213 contains Procedure Objects (POs) 1 to N of the processes executing in CS 10110.

Having thus briefly described certain CS 10110 information structures and mechanisms with the aid of FIG. 102, those information structures and mechanisms will next be described in further detail in the order mentioned above. In these
descriptions it should be noted that, in representation of MEM 10112 shown in FIG. 102 and in other figures of following discussions, the addressable memory space of MEM 10112 is depicted. Certain portions of MEM 10112 address space have been designated
as containing certain information structures and mechanisms. These structures and mechanisms have real physical existence in MEM 10112, but may vary in both location and volume of MEM 10112 address space they occupy. Assigning position of a single,
large memory to contain these structures and mechanisms allows these structures and mechanisms to be reconfigured as required for most efficient operation of CS 10110. In an alternate embodiment, physically separate memories may be used to contain the
structures and mechanisms depicted in MEM 10112, rather than assigned portions of a single memory.

b. Process Structures 10210 (FIGS. 103, 104, 105)

Referring to FIG. 103, a partial schematic representation of Process Structures 10210 is shown. Specifically, FIG. 103 shows a Process (P) 10310 selected for execution, and its associated Procedure Objects (POs) 10213. P 10310 is represented in
FIG. 103 as including four procedure objects in POs 10213. It is to be understood that this representation is for clarity of presentation; a particular P 10310 may include any number of procedure objects. Also for clarity of presentation, EURSM 10216
is not shown as EURSM 10216 is similar to FURSM 10214. EURSM 10216 will be described in detail in the following detailed discussons of CS 10110's structure and operation.

As previously discussed, each process includes certain data and procedure object As represented in FIG. 103 for P 10310 the procedure objects reside in POs 10213. The data objects include Static Data Areas and stack mechanisms in P 10310. POs,
for example KOS Procedure Object (KOSPO) 10318, contain the various procedures of the process, each procedure being a sequence of SINs defining an operation to be performed in executing the process. As will be described below, Procedure Objects also
contain certain information used in executing the procedures contained therein. Static Data Areas (SDAs) are data objects generally reserved for storing data having an existence for the duration of the process. P 10310's stack mechanisms allow stacking
of procedures for procedure calls and returns and for swapping processes in and out of JP 10114. Macro-Stacks (MAS) 10328 to 10334 are generally used to store automatic data (data generated during execution of a procedure and having an existence for the
duration of that procedure). Although shown as separate from the stacks in P 10310, the SDAs may be contained with MASs 10328 to 10334. Secure Stack (SS) 10336 stores, in general, CS 10110 micro-machine state for each procedure called. Information
stored in SS 10336 allows machine state to be recovered upon return from a called procedure, or when binding (swapping) a VP into CS 10110.

As shown in P 10310, each process is structured on a domain basis. A P 10310 may therefore include, for each domain, one or more procedure objects containing procedures having that domain as their domain of execution, an SDA and an MAS. For
example, KOS domain of P 10310 includes KOSPO 10318, KOSSDA 10326, and KOSMAS 10334. P 10310's SS 10336 does not reside in any single domain of P 10310, but instead is a stack mechanism belonging to CS 10110 micromachine.

Having described the overall structure of a P 10310, the individual information structures and mechanisms of a P 10310 will next be described in greater detail.

1. Procedure Objects (FIG. 103)

KOSPO 10318 is typical of CS 10110 procedure objects and will be referred to for illustration in the following discussion. Major components of KOSPO 10318 are Header 10338, External Entry Descripter (EED) Area 10340, Internal Entry Descripter
(IED) Area 10342, S-Op Code Area 10344, Procedure Environment Descripter (PED) 10348, Name Table (NT) 10350, and Access Information Array (AIA) Area 10352.

Header 10338 contains certain information identifying PO 10318 and indicating the number of entries in EED area 10340, discussed momentarily.

EED area 10340 and IED area 10342 together contain an Entry Descripter (ED) for each procedure in KOSPO 10318. KOSPO 10318 is represented as containing Procedures 1, 2, and 11, of which Procedure 11 will be used as an example in the present
discussion. EDs effectively comprise an index through which certain information in KOSPO 10318 can be located. IEDs form an index to all KOSPO 10318 procedures which may be called only from other procedures contained in KOSPO 10318. EEDs form an index
to all KOSPO 10318 procedures which may be called by procedures external to KOSPO 10318. Externally callable procedures are distinguished aid, as described in a following discussion of CS 10110's protection mechanisms, in confirming external calling
procedure's access rights.

Referring to ED 11, ED for procedure 11, three fields are shown therein. Procedure Environment Descripter Offset (PEDO) field indicates the start, relative to start of KOSPO 10318, of Procedure 11's PED in PED Area 10348. As will be discussed
further below, a procedure's PED contains a set of pointers for locating information used in the execution of that procedure. PED Area 10348 contains a PED for each procedure contained in 10318. In the present embodiment of CS 10110, a single PED may
be shared by two or more procedures. Code Entry Point (CEP) field indicates the start, relative to Procedure Base Pointer (PBP) which will be discussed below, of Procedure 11's SIN Code and SIN Code Area 10344. Finally, ED 11's Initial Frame Size (IFS)
field indicates the required Initial Frame Size of the KOSMAS 10334 frame storing Procedure 11's automatic data.

PED 11, Procedure 11's PED in PED Area 10348, contains a set of pointers for locating information used in execution of Procedure 11. The first entry in PED 11 is a header containing information identifying PED 11. PED 11's Procedure Base
Pointer (PBP) entry is a pointer providing a fixed reference from which other information in PO 10318 may be located. In a specific example, Procedure 11's CEP indicates the location, relative to PBP, of the start of Procedure 11's S-Op code in S-Op
Code Area 10344. As will be described further below, PBP is a CS 10110 Architectural Base Pointer (ABP). CS 10110's ABP's are a set of architectural pointers used in CS 10110 to facilitate addressing of CS 10110's address space. PED 11's Static Data
Pointer (SDP) entry points to data, in PO 10318, specifying certain parameters of P 10310's KOSSDA 10326. Name Table Pointer (NTP) entry is a pointer indicating the location, in NT 10350, of Name Table Entry's (NTE's) for Procedure 11's operands. NT
10350 and NTE's will be described in greater detail in the following discussion of Computer System 10110's Addressing Structure. PED 11's S-Interpreter Pointer (SIP) entry is a pointer, discussed in greater detail in a following discussion of CS 10110's
microcode structure, pointing to the particular S-Interpeter (SINT) to be used in interpreting Procedure 11's SIN Code.

Referring finally to AIA 10352, AIA 10352 contains, as previously discussed, information pertaining to access rights required of any external procedure calling a 10318 procedure. There is an AIA 10352 entry for each PO 10318 procedure which may
be called by an external procedure. A particular AIA entry may be shared by one or more procedures having an ED in EED Area 10340. Each EED contains certain information, not shown for clarity of presentation, indicating that that procedure's
corresponding AIA entry must be referred to, and the calling procedure's access rights confirmed, whenever that procedure is called.

2. Stack Mechanisms (FIGS. 104, 105)

As previously described, P 10310's stack mechanisms include SS 10336, used in part for storing machine state, and MAS's 10328 to 10334, used to store local data generated during execution of P 10310's procedures. P 10310 is represented as
containing an MAS for each CS 10110 domain. In an alternate embodiment of CS 10110, a particular P 10310 will include MAS's only for those domains in which that P 10310 is executing a procedure.

Referring to MAS's 10328 to 10334 and SS 10336, P 10310 is represented as having had eleven procedure calls. Procedure 0 has called Procedure 1, Procedure 1 has called Procedure 2, and so on. Each time a procedure is called, a corresponding
stack frame is constructed on the MAS of the domain in which the called procedure is executed. For example, Procedures 1, 2, and 11 execute in KOS domain; MAS frames for Procedures 1, 2, and 11 therefore are placed on KOSMAS 10334. Similarly,
Procedures 3 and 9 execute in EOS domain, so that their stack frames are placed on EOSMAS 10332. Procedures 5 and 6 execute in DBMS domain, so that their stack frames are placed on DBMSMAS 10330. Procedures 4, 7, 8, and 10 execute in User domain with
their stack frames being placed on USERMAS 10328. Procedure 11 is the most recently called procedure and procedure 11's stack frame on KOSMAS 10334 is referred to as the current frame. Procedure 11 is the procedure which is currently being executed
when VP 10310 is bound to CS 10110.

SS 10336, which is a stack mechanism of CS 10110 micromachine, contains a frame for each of Procedures 1 to 11. Each SS 10336 frame contains, in part, CS 10110 operating state for its corresponding procedure.

Referring to FIG. 104, a schematic representation of a typical MAS, for example KOSMAS 10334, is shown. KOSMAS 10334 includes Stack Header 10410 and a Frame 1Q0412 for each procedure on KOSMAS 10334. Each Frame 10412 includes a Frame Header
10414, and may contain a Linkage Pointer Block 10416, a Local Pointer Block 10418, and a Local (Automatic) Data Block 10420.

(1) an offset, relative to Stack Header 10410, indicating the location of Frame Header 10414 of the first frame on KOSMAS 10334;

(2) a Stack Top Offset (STO) indicating location, relative to start of KOSMAS 10334, of the top of KOSMAS 10334; top of KOSMAS 10334 is indicated by pointer STO pointing to the top of the last entry of Procedure 11 Frame 10412's Local Data Block
10420;

(3) an offset, relative to start of KOSMAS 10334, indicating location of Frame Header 10414 of the current top frame of KOSMAS 10334; in FIG. 104 this offset is represented by Frame Pointer (FP), an ABP discussed further below;

(4) the VP 10310's UID;

(5) a UID pointer indicating location of certain domain environment information, described further in a following discussion;

(1) offsets, relative to the Frame Header 10414, indicating the locations of Frame Headers 10414 of the previous and next frames of KOSMAS 10334;

(2) an offset, relative to the Frame Header 10414, indicating the location of the top of that Frame 10412;

(3) information indicating the number of passed arguments contained in that Frame 10412;

(4) a dynamic back pointer, in UID/Offset format, to the previous Frame 10412 if that previous Frame 10412 resides in another domain;

(5) a UID/Offset pointer to the environmental descripter of the procedure calling that procedure;

(6) a frame label sequence containing information indicating the locations of other Frame Headers 10414 in KOSMAS 10334; this information is used to locate other frames in KOSMAS 10334 for the purpose of executing local go-to operations. Frame
Headers 10414 thereby contain information for locating certain important points in KOSMAS 10334 structure, and certain data pertinent to executing the associated procedures. In addition, Frame Headers 10414, in combination with Stack Header 10410,
contain information for linking the activation records of each VP 10310 MAS, and for linking together the activation records of the individual MAS's.

Linkage Pointer Blocks 10416 contain pointers to arguments passed from a calling procedure to the called procedure. For example, Linkage Pointer Block 10416 of Procedure 11's Frame 10412 will contain pointers to arguments passed to Procedure 11
from Procedure 10. The use of linkage pointers in CS 10110's addressing structure will be discussed further in a following discussion of CS 10110's Addressing Structure. Local Data Pointer Blocks 10418 contain pointers to certain of the associated
procedure's local data. Indicated in FIG. 104 is a pointer, Frame Pointer (FP), pointing between top most Frame 10412's Linkage Pointer Block 10416 and Local Data Pointer Block 10418. FP, described further in following discussions, is an ABP to MAS
Frame 10412 of the process's current procedure.

As described above, at each procedure call a MAS frame is constructed on top of the MAS of the domain in which the called procedure is executed. For example, when Procedure 10 calls Procedure 11 a Frame Header 10414 for Procedure 11 is
constructed and placed on KOSMAS 10334. Procedure 11's linkage pointers are then generated, and placed in Procedure 11's Linkage Pointer Block 10416. Next Procedure 11's local pointers are generated and placed in Procedure 11's Local Pointer Block
10418. Finally, Procedure 11's local data is placed in Procedure 11's Local Data Block 10420. During this operation, USERMAS 10328's frame label sequence is updated to include an entry pointing to Procedure 11's Frame Header 10414. KOSMAS 10334's
Stack Header 10410 is updated with respect to STO to the new top of KOSMAS 10334. Procedure 2's Frame Header 10414 is updated with respect to offset to Frame Header 10414 of Procedure 11 Frame 10412, and with respect to frame label sequence indicating
location of Procedure 11's Frame Header 10414. As Procedure 11 is then the current procedure, FP is updated to a point between Linkage Pointer Block 10416 and Local Pointer Block 10418 of Procedure 11's Frame 10412. Also, as will be discussed below, a
new frame is constructed on SS 10336 or Procedure 11. CS 10110 will then proceed to execute Procedure 11. During execution of Procedure 11, any further local data generated may be placed on the top of Procedure 11's Local Data Block 10420. The top of
stack offset information in Procedure 11's Frame Header 10414 and in KOSMAS 10334 Stack Header 10410 will be updated accordingly.

MAS's 10328 to 10334 thereby provide a per domain stack mechanism for storing data pertaining to individual procedures, thus allowing stacking of procedures without loss of this data. Although structured on a domain basis, MAS's 10328 to 10334
comprise a unified logical stack structure threaded together through information stored in MAS stack and frame headers.

As described above and previously, SS 10336 is a CS 10110 micromachine stack structure for storing, in part, CS 10110 micromachine state for each stacked VP 10310 procedure. Referring to FIG. 105, a partial schematic representation of a SS 10336
Stack Frame 10510 is shown. SS 10336 Stack Header 10512 and Frame Headers 10514 contain information similar to that in MAS Stack Headers 10410 and Frame Headers 10414. Again, the information contained therein locates certain points within SS 10336
structure, and threads together SS 10336 with MAS's 10328 to 10334.

Having briefly described Virtual Processes 10212, FURSM 10214 will be described next. As stated above, EURSM 10216 is similar in operation to FURSM 10214 and will be described in following detailed descriptions of CS 10110 structure and
operation.

3. FURSM 10214 (FIG. 103)

Referring again to FIG. 103, FURSM 10214 includes CS 10110 micromachine information structures used internally to CS 10110 micromachine in executing the procedures of a P 10310. When a VP, for example P 10310, is to be executed, certain
information regarding that VP is transferred from the Virtual Processes 10212 to FURSM 10214 for use in executing that procedure. In this respect, FURSM 10214 may be regarded as an acceleration mechanism for the current Virtual Process 10212.

Referring first to GRF 10354, and assuming for example that Procedure 11 of P 10310 is currently being executed, GRF 10354 primarily contains certain pointers to P 10310 data used in execution of Procedure 11. As previously discussed, CS 10110's
addressing structure includes certain Architectural Base Pointers (ABP's) for each procedure. ABPs provide a framework for accessing CS 10110's address space. The ABPs of each procedure include a Frame Pointer (FP), a Procedure Base Pointer (PBP), and
a Static Data Pointer (STP). As discussed above with reference to KOSPO 10318, these ABPs reside in the procedure's PEDs. When a procedure is called, these ABP's are transferred from that procedure's PED to ABR's 10364 and reside therein for the
duration of that procedure. As indicated in FIG. 103, FP points between Linkage Pointer Block 10416 and Local Pointer Blocks 10418 of Procedure 11's Frame 10412 on KOSMAS 10334. PBP points to the reference point from which the elements of KOSPO 10318
are located. SDP points to KOSSDA 10326. If Procedure 11 calls, for example, a Procedure 12, Procedure 11's ABPs will be transferred onto Procedure Pointer Block 10516 of SS 10336 Stack Frame 10510 for Procedure 11. Upon return to Procedure 11,
Procedure 11's ABPs will be transferred from Procedure Pointer Block 10516 to ABR' s 10364 and execution of Procedure 11 resumed.

MCRs 10336 contain certain pointers used by CS 10110 micromachine in executing Procedure 11. CS 10110 micromachine pointers indicated in FIG. 103 include Program Counter (PC), Name Table Pointer (NTP), S-Interpreter Pointer (SIP), Secure Stack
Pointer (SSP), and Secure Stack Top Offset (SSTO). NTP and SIP have been previously described with reference to KOSPO 10318 and reside in KOSPO 10318. NTP and SIP are transferred into MCR's 10366 at start of execution of Procedure 11. PC, as indicated
in FIG. 103, is a pointer to the Procedure 11 SIN currently being executed by CS 10110. PC is initially generated from Procedure 11's PBP and CEP and is thereafter incremented by CS 10110 micromachine as Procedure 11's SIN sequences are executed. SSP
and SSTO are, as described in a following discussion, generated from information contained in SS 10336's Stack Header 10512 and Frame Headers 10514. As indicated in FIG. 103 SSP points to start of SS 10336 while SSTO indicates the current top frame on
SS 10336, whether Procedure Pointer Block 10516 or a MRF 10518 of MRS 10520, by indicating an offset relative to SSP. If Procedure 11 calls a subsequent procedure, the contents of MCR's 10366 are transferred into Procedure 11's Procedure Pointer Block
10516 on SS 10336, and are returned to MCR's 10366 upon return to Procedure 11.

Registers 10360 contain further pointers, described in following detailed discussions of CS 10110 operation, and certain registers which may be used to contain the current procedure's local data.

Referring now to Stack Registers 10362, MIS 10368 is an upward extension, or acceleration, of MRS 10520 of the current procedure. As previously stated, MRS 10520 is used by CS 10110 micromachine in executing certain microroutines during
execution of a particular procedure. MIS 10368 enhances the efficiency of CS 10110 micromachine in executing these microroutines by accelerating certain most recent MRFs 10518 of that procedure's MRS 10520 into FU 10120. MIS 10368 may contain, for
example, up to the eight most recent MRFs 10518 of the current procedures MRS 10520. As various microroutines are called or returned from, MRS 10520 MRF's 10518 are transferred accordingly between SS 10336 and MIS 10368 so that MIS 10368 always contains
at least the top MRF 10518 of MRS 10520, and at most eight MRFs 10518 of MRS 10520. MISPR 10356 is a CS 10110 micromachine mechanism for maintaining MIS 10368. MISPR 10356 contains a Current Pointer, a Previous Pointer, and a Bottom Pointer. Current
Pointer points to the top-most MRF 10518 on MIS 10368. Previous Pointer points to the previous MRF 10518 on MIS 10368, and Bottom Pointer points to the bottom-most MRF 10518 on MIS 10368. MISPR 10356's Current, Previous and Bottom Pointers are updated
as MRFs 10518 are transferred between SS 10336 and MIS 10368. If Procedure 11 calls a subsequent procedure, all Procedure 11 MRFs 10518 are transferred from MIS 10368 to Procedure 11's MRS 10520 on SS 10336. Upon return to Procedure 11, up to seven of
Procedure 11's MRFs 10518 frames are returned from SS 10336 to MIS 10368.

Referring to MOS 10370, MOS 10370 is a stack mechanism used by CS 10110 micromachine for certain microroutines for handling fault or error conditions. These microroutines always run to completion, so that MOS 10370 resides entirely in FU 10120
and is not an extension of a stack residing in a P 10310 in MEM 10112. MOS 10370 may contain, for example, eight frames. If more than eight successive fault or error conditions occur, this is regarded as a major failure of CS 10110. Control of CS
10110 may then be transferred to DP 10118. As will be described in a following discussion, diagnostic programs in DP 10118 may then be used to diagnose and locate the CS 10110 faults or errors. In other embodiments of CS 10110 MOS 10370 may contain
more or fewer stack frames, depending upon the degree of self diagnosis and correction capability desired for CS 10110.

RCWS 10358 is a two-part stack mechanism. A first part operates in parallel with MIS 10368 and a second part operates in parallel with MOS 10370. As previously described, CS 10110 is a microcode controlled system. RCWS is a stack for storing
the current microinstruction being executed by CS 10110 micromachine when the current procedure is interrupted by a fault or error condition, or when a subsequent procedure is called. That portion of RCWS 10358 associated with MIS 10368 contains an
entry for each MRF 10518 residing in MIS 10368. These RCWS 10358 entries are transferred between SS 10336 and MIS 10368 in parallel with their associated MRFs 10518. When resident in SS 10336, these RCWS 10358 entries are stored within their associated
MRFs 10518. That portion of RCWS 10358 associated with MOS 10370 similarly operates in parallel with MOS 10370 and, like MOS 10370, is not an extension of an MEM 10112 resident stack.

In summary, each process active in CS 10110 exists as a separate, complete, and self-contained entity, or Virtual Process, and is structurally organized on a domain basis. Each Virtual Process includes, besides procedure and data objects, a set
of MAS's for storing local data of that processes procedures. Each Virtual Process also includes a CS 10110 micromachine stack, SS 10336, for storing CS 10110 micromachine state pertaining to each stacked procedure of the Virtual Process. CS 10110
micromachine includes a set of information structures, register 10360, MIS 10368, MOS 10370, and RCWS 10358, used by CS 10110 micromachine in executing the Virtual Process's procedures. Certain of these CS 10110 micromachine information structures are
shared with the currently executing Virtual Process, and thus are effectively acceleration mechanisms for the current Virtual Process, while others are completely internal to CS 10110 micromachine.

A primary feature of CS 10110 is that each process' macrostacks and secure stack resides in MEM 10112. CS 10110's macrostack and secure stacks are therefore effectively unlimited in depth.

Yet another feature of CS 10110 micromachine is the use of GRF 10354. GRF 10354 is, in an embodiment of CS 10110, a unitary register array containing for example, 256 registers. Certain portions, or address locations, of GRF 10354 are dedicated
to, respectively, GRs 10360, MIS 10368, and MOS 10370. The capacities of GR 10360, MIS 10368, and MOS 10370, may therefore be adjusted, as required for optimum CS 10110 efficiency, by reassignment of GRF 10354's address space. In other embodiments of
CS 10110, GRs 10360, MIS 10368, and MOS 10370 may be implemented as functionally separate registers arrays.

Having briefly described the structure and operation of Process Structures 10210, VP State Block 10218 will be described next below.

Referring again to FIG. 102, VP State Blocks 10218 is used in management and control of processes. VP State Blocks 10218 contains a VP State Block for each Virtual Process (VP) selected for execution by CS 10110. Each such VP State Block
contains at least the following information:

(1) the state, or identification number of a VP;

(2) entries identifying the particular principle and particular process of the VP;

The information contained in each VP State Block thereby defines the current state of the asociated VP.

A Process is loaded into CS 10110 by building a primitive access record and loading this access record into CS 10110 to appear as an already existing VP. A VP is created by creating a Process Object, including pointers to macro-and secure-stack
objects created for that VP, micromachine state entries, and a pointer to the user's program. CS 10110's KOS then generates Macro- and Secure-Stack Objects with headers for that process and, as described further below, loads protection information
regarding that process' objects into Protection Structures 10230. CS 10110's KOS then copies this primitive machine state record into a vacant VPSB selected by CS 10110's VP Manager, thus binding the newly created VP into CS 10110. At that time a KOS
Initializer procedure completes creation of the VP for example by calling in the user's program through a compiler. The newly creatd VP may then be executed by CS 10110.

Having briefly described VP State Blocks 10218 and creation of a VP, CS 10110's Addressing Structures 10220 will be described next below.

D. Addressing Structures 10220 (FIGS. 103, 106, 107, 108)

1. Objects, UID's, AON's, Names, and Physical Addresses (FIG. 106)

As previously described, the data space accessible to CS 10110 is divided into segments, or containers, referred to as objects. In an embodiment of CS 10110, the addressable data space of each object has a capacity of 2.sup.32 information and is
structured into 2.sup.18 pages with each page containing 2.sup.14 bits of information.

Referring to FIG. 106A, a schematic representation of CS 10110's addressing structure is shown. Each object created for use in, or by operation of, a CS 10110 is permanently assigned a unique identifier (UID). An object's UID allows an object
to be uniquely identified and located at any future point in time. Each UID is an 80 bit number, so that the total addressable space of all CS 10110's includes 2.sup.80 objects wherein each object may contain up to 2.sup.32 bits of information. As
indicated in FIG. 106, each 80 bit UID is comprised of 32 bits of Logical Allocation Unit Identifier (LAUID) and 48 bits of Object Serial Number (OSN). LAUIDs are associated with individual CS 10110 systems. LAUIDs identify the particular CS 10110
system generating a particular object. Each LAUID is comprised of a Logical Allocation Unit Group Number (LAUGN) and a Logical Allocation Unit Serial Number (LAUSN). LAUGNs are assigned to individual CS 10110 systems and may be guaranteed to be unique
to a particular system. A particular system may, however, be assigned more than one LAUGN so that there may be a time varying mapping between LAUGNs and CS 10110 systems. LAUSNs are assigned within a particular system and, while LAUSNs may be unique
within a particular system, LAUSNs need not be unique between systems and need not map onto the physical structure of a particular system.

OSNs are associated with individual objects created by an LAU and are generated by an Architectural Clock in each CS 10110. Architectural clock is defined as a 64 bit binary number representing increasing time. Least significant bit of
architectural clock represents increments of 600 picoseconds, and most significant bit represents increments of 127 years. In the present embodiment of CS 10110, certain most significant and least significant bits of architectural clock time are
disregarded as generally not required practice. Time indicated by architectural clock is measured relative to an arbitrary, fixed point in time. This point in time is the same for all CS 10110s which will ever be constructed. All CS 10110s in
existence will therefore indicate the same architectural clock time and all UIDs generated will have a common basis. The use of an architectural clock for generation of OSNs is advantageous in that it avoids the possibility of accidental duplication of
OSNs if a CSC 10110 fails and is subsequently reinitiated.

As stated above, each object generated by or for use in a CS 10110 is uniquely identified by its associated UID. By appending Offset (O) and Length (L) information to an object's UID, a UID logical address is generated which may be used to
locate particular segments of data residing in a particular object. As indicted in FIG. 106, O and L fields of a UID logical address are each 32 bits. O and L fields can therefore indicate any particular bit, out of 2.sup.32-1 bits, in an object and
thus allow bit granular addressing of information in objects.

As indicated in FIG. 106 and as previously described, each object active in CS 10110 is assigned a short temporary unique identifier valid only within JP 10114 and referred to as an Active Object Number (AON). Because fewer objects may be active
in a CS 10110 than may exist in a CS 10110's address space, AON's are, in the present embodiment of CS 10110, 14 bits in length. A particular CS 10110 may therefore contain up to 2.sup.14 active objects. An object's AON is used within JP 10114 in place
of that object's UID. For example, as discussed above with reference to process structures 10210, a procedure's FP points to start of that procedure's frame on its process' MAS. When that FP is residing in SS 10336, it is expressed as a UID. When that
procedure is to be executed, FP is transferred from SS 10336 to ABR's 10364 and is translated into the corresponding AON. Similarly, when that procedure is stacked, FP is returned to SS 10336 and in doing so is translated into the corresponding UID.
Again, a particular data segment in an object may be addressed by means of an AON logical address comprising the object's AON plus associated 32 bit Offset (O) and Length (L) fields.

Each operand appearing in a process is assigned a Name and all references to a process's operands are through those assigned Names. As indicated in FIG. 106B, in the present embodiment of CS 10110 each Name is an 8, 12, or 16 bit number. All
Names within a particular process will be of the same length As will be described in a following discussion, Names appearing during execution of a process may be resolved, through a procedure's Name Table 10350 or through Name Cache 10226, to an AON
logical address As described below, an AON logical address corresponding to an operand Name may then be evaluated to a MEM 10112 physical address to locate the operand referred to.

The evaluation of AON logical addresses to MEM 10112 physical addresses is represented in FIG. 106C. An AON logical address's L field is not involved in evaluation of an AON logical address to a physical address and, for purposes of clarity of
presentation, is therefore not represented in FIG. 106C. AON logical address L field is to be understood to be appended to the addresses represented in the various steps of the evaluation procedure shown in FIG. 106C.

As described above, objects are 2.sup.32 bits structured into 2.sup.18 pages with each page containing a 2.sup.14 bits of data. MEM 10112 is similarly physically structured into frames with, in the present embodiment of CS 10110, each frame
containing 2.sup.14 bits of data. In other embodiments of CS 10110, both pages and frames may be of different sizes but the translation of AON logical addresses to MEM 10112 physical addresses will be similar to that described momentarily.

An AON logical address O field was previously described as a 32 bit number representing the start, relative to start of the object, of the addressed data segment within the object. The 18 most significant bits of O field represent the number (P)
of the page within the object upon which the first bit of the addressed data occurs. The 14 least significant bits of O field represent the offset (O.sub.P), relative to the start of the page, within that page of the first bit of the addressed data.
AON logical address 0 field may therefore, as indicated in FIG. 106C, be divided into an 18 bit page (P) field and a 14 bit offset within page (O.sub.P) field. Since, as described above, MEM 10112 physical frame size is equal to object page size, AON
logical address O.sub.P field may be used directly as an offset within frame (O.sub.F) field of the physical address. As will be described below, an AON logical address AON and P fields may then be related to the frame number (FN) of the MEM 10112 frame
in which that page resides, through Addressing Mechanisms 10220.

Having briefly described the relationships between UIDs, UID Logical Addresses, Names, AONs, AON Logical Addresses, and MEM 10112 Physical Addresses, Addressing Mechanisms 10220 will be described next below.

An AON corresponding to a particular UID is determined through AOTHT 10710. The UID is hashed to provide a UID index into AOTHT 10710, which then provides the corresponding AON. AOTHT 10710 is effectively an acceleration mechanism of AOT 10712
to, as just described, provide rapid translation of UIDs to AONs. AONs are used as indexes into AOT 10712, which provides a corresponding AOT Entry (AOTE). An AOTE as described in following detailed discussions of CS 10110, includes, among other
information, the UID corresponding to the AON indexing the AOTE. In addition to providing translation between AONs and UIDs, the UID of an AOTE may be compared to an original UID to determine the correctness of an AON from AOTHT 10710.

Associated with AOT 10712 is AOTA 10714. AOTA 10714 is an extension of AOT 10712 and contains certain information pertaining to active objects, for example the domain of execution of each active procedure object.

Having briefly described CS 10110's mechanism for relating UIDs and AONs, CS 10110's mechanism for resolving operand Names to AON logical addresses will be described next below.

3. Name Resolution (FIGS. 103, 108)

Referring first to FIG. 103, each procedure object in a VP, for example KOSPO 10318 in VP 10310, was described as containing a Name Table (NT) 10350. Each NT 10350 contains a Name, Table Entry (NTE) for each operand whose Name appears in its
procedure. Each NTE contains a description of how to resolve the corresponding Name to an AON Logical Address, including fetch mode information, type of data referred to by that Name, and length of the data segment referred to.

Referring to FIG. 108, a representation of an NTE is shown. As indicated, this NTE contains seven information fields: Flag, Base (B), Predisplacement (PR), Length (L), Displacement (D), Index (I), and Inter-element Spacing (IES). Flag Field, in
part, contains information describing how the remaining fields of the NTE are to be interpreted, type of information referred to by the NTE, and how that information is to be handled when fetched from MEM 10112. L Field, as previously described,
indicates length, or number of bits in, the data segment. Functions of the other NTE fields will be described during the following discussions.

In a present embodiment of CS 10110, there are five types of NTE: (1) base (B) is not a Name, address resolution is not indirect; (2) B is not a Name, address resolution is indirect; (3) B is a Name, address resolution is indirect; (4) B is a
Name, address resolution is indirect. A fifth type is an NTE selecting a particular element from an array of elements. These five types of NTE and their resolution will be described below, in the order mentioned.

In the first type, B is not a Name and address resolution is not indirect, B Field specifies an ABR 10364 containing an AON plus offset (AON/0) Pointer. The contents of D Field are added to the O Field of this pointer, and the result is the AON
Logical Address of the operand. In the second type, B is not a Name and address resolution is indirect, B Field again specifies an ABR 10364 containing an AON/O pointer. The contents of PR Field are added to the O Field of the AON/O pointer to provide
an AON Logical Address of a Base Pointer. The Base Pointer AON Logical Address is evaluated, as described below, and the Base Pointer fetched from MEM 10112. The contents of D Field are added to the O Field of the Base Pointer and the result is the AON
Logical Address of the operand.

NTE types 3 and 4 correspond, respectively to NTE types 1 and 2 and are resolved in the same manner except that B Field contains a Name. The B Field Name is resolved through another NTE to obtain an AON/O pointer which is used in place of the
ABR 10364 pointers referred to in discussion of types 1 and 2.

The fifth type of NTE is used in references to elements of an array. These array NTEs are resolved in the same manner as NTE types 1 through 4 above to provide an AON Logical Address of the start of the array. I and IES Fields provide
additional information to locate a particular element in the array. I Field is always Name which is resolved to obtain an operand value representing the particular element in the array. IES Field provides information regarding spacing between elements
of the array, that is the number of bits between adjacent element of the array. IES Field may contain the actual IES value, or it may contain a Name which is resolved to an AON Logical Address leading to the inter-element spacing value The I and IES
values, obtained by resolving the I and IES Fields as just described, are multiplied together to determine the offset, relative to the start of the array, of the particular element referred to by the NTE. This within array offset is added to the O Field
of the AON Logical Address of the start of the array to provide the AON Logical Address of the element.

In the current embodiment of CS 10110, certain NTE fields, for example B, D, and Flag fields, always contain literals. Certain other fields, for example, IES, D, PRE, and L fields, may contain either literals or names to be resolved Yet other
fields, for example I field, always contain names which must be resolved.

Passing of arguments from a calling procedure to a called procedure has been previously discussed with reference to Virtual Processes 10212 above, and more specifically with regard to MAS's 10328 to 10334 of VP 0310 Passing of arguments is
accomplished through the calling and called procedure's Name Tables 10350. In illustration, a procedure W(a,b,c) may wish to pass arguments a, b, and c to procedure X(u,v,w), where arguments, v and w correspond to arguments a, b, and c. At compilation,
NTEs are generated for arguments a, b, and c in Procedure W's procedure object, and NTEs are generated for arguments u, v and w in Procedure X's procedure object Procedure X's NTEs for u, v, and w are constructed to resolve to point to pointers in
Linkage Pointer Block 10416 of Procedure X's Frame 10412 in MAS. To pass arguments a, b, and c from Procedure W to Procedure X, the NTEs of arguments a, b, and c are resolved t AON Logical Addresses (i.e., AON/O form). Arguments a, b, and c's AON
Logical Addresses are then translated to corresponding UID addresses which are placed in Procedure X's Linkage Pointer Block 10416 at those places pointed to by Procedure X's NTEs for u, v, and w. When Procedure X is executed, the resolution of Procedure
X's NTEs for u, v, and w will be resolved to locate the pointers, in Procedure X's Linkage Pointer Block 10416 to arguments a, b, and c. When arguments are passed in this manner, the data type and length information are obtained from the called
procedure's NTEs, rather than the calling procedure's NTEs. This allows the calling procedure to pass only a portion of, for example, arguments a, b, or c, to the called procedure and thus may be regarded as a feature of CS 10110's protection
mechanisms.

Having briefly described resolution of Names to AON/Offset addresses, and having previously described translation of UID addresses to AON addresses, the evaluation of AON addresses to MEM 10112 physical addresses will be described next below.

4. Evaluation of AON Addresses to Physical Addresses (FIG. 107)

Referring again to FIG. 107, a partial schematic representation of CS 10110's Memory Management Table 10224 is shown. Memory Hash Table (MHT) 10716 and Memory Frame Table (MFT) 10718 are concerned with translation of AON addresses into MEM 10112
physical addresses and will be discussed first. Working Set Matrix (WSM) 10720 and Virtual Memory Manager Request Queue (VMMRQ) 10722 are concerned with management of MEM 10112's available physical address base and will be discussed second. Active
Object Request Queue (AORQ) 10728 and Logical Allocation Unit Directory (LAUD) 10730 are concerned with locating inactive objects and management of which objects are active in CS 10110 and will be discussed last.

Translation of AON/O Logical Addresses to MEM 10112 physical addresses was previously discussed with reference to FIG. 106C. As stated in that discussion, objects are divided into pages. Correspondingly, the AON/O Logical Address' O Field is
divided into an 18 bit page number (P) Field and a 14 bit offset within a page (O.sub.P) Field. MEM 10112 is structured into frames, each of which in the present embodiment of CS 10110 is equal to a page of an object. An AON/O address' O.sub.P Field
may therefore be used directly as an offset within frame (O.sub.F) of the corresponding physical address. The AON and P fields of an AON address must, however, be translated into a MEM 10112 frame represented by a corresponding Frame Number (FN).

Referring now to FIG. 107, an AON address' AON and P Fields are "hashed" to generate an MHT index which is used as an index into MHT 10716. Briefly, "hashing" is a method of indexing, or locating, information in a table herein indexes to the
information are generated from the information itself through a "hashing function". A hashing function maps each piece of information to the corresponding index generated from it through the hashing function. MHT 10716 then provides the corresponding
FN of the MEM 10112 frame in which, that page is stored. FNs are used as indexes into MFT 10718, which contains, for each FN, an entry describing the page stored in that frame. This information includes the AON and P of the page stored in that MEM
10112 frame. An FN from MHT 10716 may therefore be used as an index into MFT 10718 and the resulting AON/P of MFT 10718 compared to the original AON/P to confirm the correctness of the FN obtained from MHT 10716. MHT 10716 is an effectively
acceleration mechanism of MFT 10718 to provide rapid translation of AON address to MEM 10112 physical addresses.

MFT 10718 also stores "used" and "modified" information for each page in MEM 10112. This information indicates which page frames stored therein have been used and which have been modified. This information is used by CS 10110 in determining
which frames may be deleted from MEM 10112, or are free, when pages are to be written into MEM 10112 from backing store (ED 10124). For example, if a page's modified bit indicates that that page has not been written into, it is not necessary to write
that page back into backing store when it is deleted from MEM 10112; instead, that page may be simply erased.

Referring finally to ATU 10228, ATU 10228 is an acceleration mechanism for MHT 10716. AON/O addresses are used directly, without hashing, as indexes into ATU 10228 and ATU 10228 correctly provides corresponding FN and O.sub.P outputs. A CS
10110 mechanism, described in a following detailed discussion of CS 10110 operation, continually updates the contents of ATU 10228 so that ATU 10228 contain the FN's and O.sub.P's (O.sub.F's) of the pages most frequently referenced by the current
process. If ATU 10228 does not contain a corresponding entry for a given AON input, an ATU fault occurs and the FN and O.sub.F information may be obtained directly from MHT 10716.

Referring now to WSM 10720 and VMMRQ 10722, as previously stated these mechanisms are concerned with the management of MEM 10112's available address space. For example, if MHT 10716 and MFT 10718 do not contain an entry for a page referenced by
the current procedure, an MHT/MFT fault occurs and the reference page must be fetched from backing store (ED 10124) and read into MEM 10112. WSM 10720 contains an entry for each page resident in MEM 10112. These entries are accessed by indexes
comprising the Virtual Processor Number (VPN) of the virtual process making a page reference and the P of the page being referenced. Each WSM 10720 entry contains 2 bits stating whether the particular page is part of a VP's working set, that is, used by
that VP, and whether that page has been referenced by that VP. This information, together with the information contained in that MFT 10718 entries described above, is used by CS 10110's Virtual Memory Manager (VMM) in transferring pages into and out of
MEM 10112.

CS 10110's VMM maintains VMMRQ 10722, which is used by VMM to control transfer of pages into and out of MEM 10112. VMMRQ 10722 includes Virtual Memory Request Counter (VMRC) 10724 and a Queue of Virtual Memory Request Entries (VMREs) 10726. As
will be discussed momentarily, VMRC 10724 tracks the number of currently outstanding request for pages. Each VMRE 10726 describes a particular page which has been requested. Upon occurrence of a MHT/MFT (or page) fault, VMRC 10724 is incremented, which
initiates operation of CS 10110's VMM, and a VMRE 10726 is placed in the queue. Each VMRE 10726 comprises the VPN of the process requesting the page and the AON/O of the page requested. At this time, the VP making the request is swapped out of JP 10114
and another VP bound to JP 10114. VMM allocates MEM 10112 frame to contain the requested page, using the previously described information in MFT 10718 and WSM 10720 to select this frame. In doing so, VMM may discard a page currently resident in MEM
10112 for example, on the basis of being the oldest page, an unused page, or an unmodified page which does not have to be written back into backing store. VMM then requests an I/O operation to transfer the requested page into the frame selected by the
VMM. While the I/O operation is proceeding, VMM generates new entries in MHT 10716 and MFT 10718 for the requested page, cleans the frame in MEM 10112 which is to be occupied by that page, and suspends operation. IOS 10116 will proceed to execute the
I/0 operation and writes the requested page directly into MEM 10112 in the frame specified by VMM. IOS 10116 then notifies CS 10110's VMM that the page now resides in memory and can be referenced. At some later time, that VP requesting that page will
resume execution and repeat that reference. Going first to ATU 10228, that VP will take an ATU 10228 fault since VP 10212 has not yet been updated to contain that page. The VP will then go to MHT 10716 and MFT 10718 for the required information and,
concurrently, WSM 10720 and ATU 10228 will be updated.

In regard to the above operations, each VP active in CS 10110 is assigned a Page Fault Frequency Time Factor (PFFT) which is used by CS 10110's VMM to adjust that VP's working set so that the interval between successive page faults for that VP
lies in an optimum time range. This assists in ensuring CS 10110's VMM is operating most efficiently and allows CS 10110's VMM to be tuned as required.

The above discussions have assumed that the page being referenced, whether from a UID/O address, an AON/O address, or a Name, is resident in an object active in CS 10110. While an object need not have a page in MEM 10112 to be active, the object
must be active to have a page in MEM 10112. A VP, however, may reference a page in an object not active in CS 10110. If such a reference is made, the object must be made active in CS 10110 before the page can be brought into MEM 10112. The result is
an operation similar to the page fault operation described above. CS 10110 maintains an Active Object Manager (AOM), including Active Object Request Queue (AORQ) 10728, which are similar in operation to CS 10110's VMM and VMMRQ 10722. CS 10110's AOM
and AORQ 10728 operate in conjunction with AOTHT 10710 and AOT 10712 to locate inactive objects and make them active by assigning them AON's and generating entries for them in AOTHT 10710, AOT 10712, and AOTA 10714.

Before a particular object can be made active in CS 10110, it must first be located in backing store (ED 10124). All objects on backing store are located through a Logical Allocation Unit Directory (LAUD) 10730, which is resident in backing
store. An LAUD 10730 contains entries for each object accessible to the particular CS 10110. Each LAUD 10730 entry contains the information necessary to generate an AOT 10712 entry for that object. An LAUD 10730 is accessed through a UID/O address
contained in CS 10110's VMM. A reference to an LAUD 10730 results in MEM 10112 frames being assigned to that LAUD 10730, and LAUD 10730 being transferred into MEM 10112. If an LAUD 10730 entry exists for the referenced inactive object, the LAUD 10730
entry is transferred into AOT 10712. At the next reference to a page in that object, AOT 10712 will provide the AON for that object but, because the page has not yet been transferred into MEM 10112, a page fault will occur. This page fault will be
handled in the manner described above and the referenced page transferred into MEM 10112.

Having briefly described the structure and operation of CS 10110's Addressing Structure, including the relationship between UIDs, Names, AONs, and Physical Addresses and the mechanisms by which CS 10110 manages the available address space of MEM
10112, CS 10110's protection structures will be described next below.

As previously discussed, access rights to objects are arbitrated on the basis of subjects. A subject has been defined as a particular combination of a Principle, Process, and Domain (PPD), each of which is identified by a corresponding UID.
Each object has associated with it an Access Control List (ACL) 10918 containing an ACL Entry (ACLE) for each subject having access rights to that object.

When an object becomes active in CS 10110 (i.e., is assigned an AON) each ACLE in that object's ACL 10918 is written into APAM 10910. Concurrently, each subject having access rights to that object, and for which there is an ACLE in that object's
ACL 10918, is assigned an Active Subject Number (ASN). These ASNs are written into ASNHT 10912 and their corresponding PPDs are written into AST 10914. Subsequently, the ASN of any subject requesting access to that object is obtained by hashing the PPD
of that subject to obtain a PPD index into ASNHT 10912. ASNHT 10912 will in turn provide a corresponding ASN. An ASN may be used as an index into AST 10914. AST 10914 will provide the corresponding PPD, which may be compared to an original PPD to
confirm the accuracy of the ASN.

As described above, APAM 10910 contains an ACL 10918 for each object active in CS 10110. The access rights of any particular active subject to a particular active object are determined by using that subject's ASN and that object's AON as indexes
into APAM 10910. APAM 10910 in turn provides a 4 bit output defining whether that subject has Read (R) Write (W) or Execute (E) rights with respect to that object, and whether that particular entry is Valid (V).

ASN Register 10916 and PC 10234 are effectively acceleration mechanisms of Protection Tables 10232. ASN Register 10916 stores the ASN of a currently active subject while PC 10234 stores certain access right information for objects being used by
the current process. PC 10234 entries are indexed by ASNs from ASN register 10916 and by a mode input from JP 10114. Mode input defines whether the current procedure intends to read, write, or execute with respect to a particular object having an entry
in PC 10234. Upon receiving ASN and mode inputs, PC 10234 provides a go/nogo output indicating whether that subject has the access rights required to execute the intended operation with respect to that object.

In addition to the above mechanism, each procedure to which arguments may be passed in a cross-domain call has associated with it an Access Information Array (AIA) 10352, as discussed with reference to Virtual Processes 10212. A procedure's AIA
10352 states what access rights a calling procedure (subject) must have to a particular object (argument) before the called procedure can operate on the passed argument CS 10110's protection mechanisms compare the calling procedures access rights to the
rights required by the called procedure. This insures the calling procedure may not ask a called procedure to do what the calling procedure is not allowed to do. Effectively, a calling procedure can pass to a called procedure only the access rights
held by the calling procedure.

Finally, PC 10234, APAM 10910, or AST 10914 faults (i.e., misses) are handled in the same manner as described above with reference to page faults in discussion of CS 10110's Addressing Mechanisms 10220. As such, the handling of protection misses
will not be discussed further at this point.

Having briefly described structure and operation of CS 10110's Protection Mechanisms 10230, CS 10110's Micro-Instruction Mechanisms 10236 will be described next below.

F. CS 10110 Micro-Instruction Mechanisms (FIG. 110)

As previously described, CS 10110 is a multiple language machine. Each program written in a high level user language is compiled into a corresponding S-Language program containing instructions expressed as SINs. CS 10110 provides a set, or
dialect, of microcode instructions, referred to as S-Interpreters (SINTs) for each S-Language. SINTs interpret SINs and provide corresponding sequences of microinstructions for detailed control of CS 10110.

Referring to FIG. 110, a partial schematic representation of CS 10110's Micro-Instruction Mechanisms 10236 is shown. At system initialization all CS 10110 microcode, including SINTs and all machine assist microcode, is transferred from backing
store to Micro-Code Control Store (mCCS) 10238 in MEM 10112. The Micro-Code is then transferred from mCCS 10238 to FU Micro-Code Structure (FUmC) 10240 and EU Micro-Code Structure (EUmC) 10242. EUmC 10242 is similar in structure and operation to FUmC
10240 and thus will be described in following detailed descriptions of CS 10110's structure and operation. Similarly, CS 10110 machine assist microcode will be described in following detailed discussions. The present discussion will concern CS 10110's
S-Interpreter mechanisms.

CS 10110's S-Interpreters (SINTs) are loaded into S-Interpret Table (SITT) 11012, which is represented in FIG. 110 as containing S-Interpreters 1 to N. Each SIT contains one or more sequences of micro-code; each sequence of microcode corresponds
to a particular SIN in that S-Language dialect. S-Interpreter Dispatch Table (SDT) 11010 contains S-Interpreter Dispatchers (SDs) 1 to N. There is one SD for each SINT in SITT 11012, and thus a SD for each S-Language dialect. Each SD comprises a set of
pointers. Each pointer in a particular SD corresponds to a particular SIN of that SD's dialect and points to the corresponding sequence of microinstructions for interpreting that SIN in that dialect's SIT in SITT 11012. In illustration, as previously
discussed when a particular procedure is being executed the SIP for that procedure is transferred into one of mCR's 10366. That SIP points to the start of the SD for the SIT which is to be used to interpret the SINs of that procedure. In FIG. 110, the
SIP in mCRs 10366 is shown as pointing to the start of SD2. Each S-Op appearing during execution of that procedure is an offset, relative to the start of the selected SD, pointing to a corresponding SD pointer. That SD pointer in turn points to the
corresponding sequence of microinstructions for interpreting that SIN in the corresponding SIT in SITT 11012. As will be described in following discussions, once the start of a microcode sequence for interpreting an SIN has been selected, CS 10110
micromachine then proceeds to sequentially call the microinstructions of that sequence from SITT 11012 and use those microinstructions to control operation of CS 10110.

G. Summary of Certain CS 10110 Features and Alternate Embodiments

The above Introductory Overview has described the overall structure and operation and certain features of CS 101, that is, CS 10110. The above Introduction has further described the structure and operation and further features of CS 10110 and,
in particular, the physical implementation and operation of CS 10110's information, control, and addressing mechanisms. Certain of these CS 10110 features are summarized next below to briefly state the basic concepts of these features as implemented in
CS 10110. In addition, possible alternate embodiments of certain of these concepts are described.

First, CS 10110 is comprised of a plurality of independently operating processors, each processor having a separate microinstruction control. In the present embodiment of CS 10110, these processors include FU 10120, EU 10122, MEM 10112 and IOS
10116. Other such independently operating processors, for example, special arithmetic processors such as an array processor, or multiple FU 10120's, may be added to the present CS 10110.

In this regard, MEM 10112 is a multiport processor having one or more separate and independent ports to each processor in CS 10110. All communications between CS 10110's processors are through MEM 10112, so that MEM 10112 operates as the central
communications node of CS 10110, as well as performing memory operations. Further separate and independent ports may be added to MEM 10112 as further processors are added to CS 10110. CS 10110 may therefore be described as comprised of a plurality of
separate, independent processors, each having a separate microinstruction control and having a separate and independent port to a central communications and memory node which in itself is an independent processor having a separate and independent
microinstruction control. As will be further described in a following detailed description of MEM 10112, MEM 10112 itself is comprised of a plurality of independently operating processors, each performing memory related operations and each having a
separate microinstruction control. Coordination of operations between CS 10110's processors is achieved by passing "messages" between the processors, for example, SOP's and descriptors.

CS 10110's addressing mechanisms are based, first, upon UID addressing of objects That is, all information generated for use in or by operation of a CS 10110, for example, data and procedures, is structured into objects and each object is
assigned a permanent UID. Each UID is unique within a particular CS 10110 and between all CS 10110's and is permanently associated with a particular object. The use of UID addressing provides a permanent, unique addressing means which is common to all
CS 10110's, and to other computer systems using CS 10110's UID addressing.

Effectively, UID addressing means that the address (or memory) space of a particular CS 10110 includes the address space of all systems, for example disc drives or other CS 10110s, to which that particular CS 10110 has access. UID addressing
allows any process in any CS 10110 to obtain access to any object in any CS 10110 to which it has physical access, for example, another CS 10110 on the other side of the world. This access is constrained only by CS 10110's protection mechanism. In
alternate embodiments of CS 10110, certain UIDs may be set aside for use only within a particular CS 10110 and may be unique only within that particular CS 10110. These reserved UIDs would, however, be a limited group known to all CS 10110 systems as
not having uniqueness between systems, so that the unique object addressing capability of CS 10110's UID addressing is preserved.

As previously stated, AONs and physical descriptors are presently used for addressing within a CS 10110, effectively as shortened UIDs. In alternate embodiments of CS 10110, other forms of AONs may be used, or AONs may be discarded entirely and
UIDs used for addressing within as well as between CS 10110s.

CS 10110's addressing mechanisms are also based upon the use of descriptors within and between CS 10110s. Each descriptor includes an AON or UID field to identify a particular object, an offset field to specify a bit granular offset within the
object, and a length field to specify a particular number of bits beginning at the specified offset. Descriptors may also include a type, or format field identifying the particular format of the data referred to by the descriptor. Physical descriptors
are used for addressing MEM 10112 and, in this case, the AON or UID field is replaced by a frame number field referring to a physical location in MEM 10112.

As stated above, descriptors are used for addressing within and between the separate, independent processors (FU 10120, EU 10122, MEM 10112, and IOS 10116) comprising CS 10110. thereby providing common, system wide bit granular addressing which
includes format information. In particular, MEM 10112 responds to the type information fields of descriptors by performing formatting operations to provide requestors with data in the format specified by the requestor in the descriptor. MEM 10112 also
accepts data in a format specified in a descriptor and reformats that data into a format most efficiently used by MEM 10112 to store the data.

As previously described, all operands are referred to in CS 10110 by Names wherein all Names within a particular S-Language dialect are of a uniform, fixed size and format. A K value specifying Name size is provided to FU 10120, at each change
in S-Language dialect, and is used by FU 10120 in parsing Names from the instruction stream. In an alternate embodiment of CS 10110, all Names are the same size in all S-Language dialects, so that K values, and the associated circuitry in FU 10120's
parser, are not required.

Finally, in descriptions of CS 10110's use of SOPs, FU 10120's microinstruction circuitry was described as storing one or more S-Interpreters. S-Interpreters are sets of sequences of microinstructions for interpreting the SOPs of various
S-Language dialects and providing corresponding sequences of microinstructions to control CS 10110. In an alternate embodiment of CS 10110, these S-Interpreters (SITT 11012) would be stored in MEM 10112. FU 10120 would receive SOPs from the instruction
stream and, using one or more S-Interpreter Base Pointers (that is, architectural base pointers pointing to the SITT 11012 in MEM 10112), address the SITT 11012 stored in MEM 10112. MEM 10112 would respond by providing, from the SITT 11012 in MEM 10112,
sequences of microinstructions to be used directly in controlling CS 10110. Alternately, the SITT 11012 in MEM 10112 could provide conventional instructions usable by a conventional CPU, for example, Fortran or machine language instructions. This, for
example, would allow FU 10120 to be replaced by a conventional CPU, such as a Data General Corporation Eclipse.RTM..

Having briefly summarized certain features of CS 10110, and alternate embodiments of certain of these features, the structure and operation of CS 10110 will be described in detail below.

Having previously described the overall structure and operation of CS 10110, the structure and operation of CS 10110's major subsystems will next be individually described in further detail. As previously discussed, CS 10110's major subsystems
are, in the order in which they will be described, MEM 10112, FU 10120, EU 10122, IOS 10116, and DP 10118. Individual block diagrams of MEM 10112, FU 10120, EU 10122, IOS 10116, and DP 10118 are shown in, respectively, FIGS. 201 through 205. FIGS. 201
through 205 may be assembled as shown in FIG. 206 to construct a more detailed block diagram of CS 10110 corresponding to that shown in FIG. 101. For the purposes of the following descriptions, it is assumed that FIGS. 201 through 205 have been
assembled as shown in FIG. 206 to construct such a block diagram. Further diagrams will be presented in following descriptions as required to convey structure and operation of CS 10110 to one of ordinary skill in the art.

As previously described, MEM 10112 is an intelligent, priortizing memory having separate and independent ports MIO 10128 and MJP 10140 to, respectively, IOS 10116 and JP 10114. MEM 10112 is shared by and is accessible to both JP 10114 and IOS
10116 and is the primary memory of CS 10110. In addition, MEM 10112 is the primary path for information transferred between the external world (through IOS 10116) and JP 10114.

As will be described further below, MEM 10112 is a two-level memory providing fast access to data stored therein. MEM 10112 first level is comprised of a large set of random access arrays and MEM 10112 second level is comprised of a high speed
cache whose operation is generally transparent to memory users, that is JP 10114 and IOS 10116. Information stored in MEM 10112, in either level, appears to be bit addressable to both JP 10114 and IOS 10116. In addition, MEM 10112 presents simple
interfaces to both JP 10114 and IOS 10116. Due to a high degree of pipe lining (concurrent and overlapping memory operations) MEM 10112 interfaces to both JP 10114 and IOS 10116 appear as if each JP 10114 and IOS 10116 have full access to MEM 10112.
This feature allows data transfer rates of up to, for example, 63.6 megabytes per second from MEM 10112 and 50 megabytes per second to MEM 10112.

In the following descriptions, certain terminology used on those descriptions will be introduced first, followed by description of MEM 10112 physical organization. Then MEM 10112 port structures will be described, followed by descriptions of MEM
10112's control organization and control flow. Next, MEM 10112's interfaces to JP 10114 and IOS 10116 will be described. Following these overall descriptions the major logical structures of MEM 10112 will be individually described, starting at MEM
10112's interfaces to JP 10114 and IOS 10116 and proceeding inwardly to MEM 10112's first (or bulk) level of data stored. Finally, certain features of MEM 10112 microcode control structure will be described.

A. MEM 10112 (FIGS. 201, 206, 207-237)

a. Terminology

Certain terms are used throughout the following descriptions and are defined here below for reference by the reader.

A word is 32 bits of data

A byte is 8 bits of data

A block is 128 bits of data (that is, 4 words).

A block is always aligned on a block boundary, that is the low order 7 bits of logical or physical address are zero (see Chapter 1, Sections A.f and D. Descriptions of CS 10110 Addressing).

The term aligned refers to the starting bit address of a data item relative to certain address boundaries. A starting bit address is block aligned when the low order 7 bits of starting bit address are equal to zero, that is the starting bit
address falls on a boundary between adjacent blocks. A word align starting bit address means that the low order 5 bits of starting bit address are zero, the starting bit address points to a boundary between adjacent words. A byte aligned starting bit
address means that the low order 3 bits of starting bit address are zero, the starting bit address points to a boundary between adjacent bytes.

Bit granular data has a starting bit address falling within a byte, but not on a byte boundary, or the address is aligned on a byte boundary but the length of the data is bit granular, that is not a multiple of 8 bits.

MSB 20110 comprises MEM 10112's first or bulk level of storage. MSB 20110 may include from one to, for example, 16 MA 20112's. Each MA 20112 may have a storage capacity, for example, 256 K-byte, 512 K-byte, 1 M-byte, or 2 M-bytes of storage
capacity. As will be described further below, MA 20112's of different capacities may be used together in MSB 20110 Each MA 20112 has a data input connected in parallel to Write Data (WD) Bus 20124 and a data output connected in parallel to Read Data
(RD) Bus 20126. MA's 20112 also have control and address ports connected in parallel to address and control (ADCTL) Bus 20128. In particular, Data Inputs 20124 of Memory Arrays 20112 are connected in parallel to Write Data (WD) Bus 20126, and Data
Outputs 20128 of Memory Arrays 20112 are connected in parallel to Read Data (RD) Bus 20130. Control Address Ports 20132 of Memory Arrays 20112 are connected in parallel to Address and Control (ADCTL) Bus 20134.

Referring first to MEM 10112's interface to IOS 10116, this interface includes MIO Bus 10129, IOM Bus 10130, and IOMC Bus 10131. Read and Write Addresses and data to be written into MEM 10112 are transferred from IOS 10116 to MEM 10112 through
IOM Bus 10130. Data read from MEM 10112 is transferred to IOS 10116 through MIO Bus 10129. IOMC 10131 is a Bi-directional Control bus between MEM 10112 and IOS 10116 and, as described further below, transfers control signals between MEM 10112 and IOS
10116 to control transfer of data between MEM 10112 and IOS 10116.

MEM 10112's interface to JP 10114 is MJP Port 10140 and includes JPD Bus 10142, MOD Bus 10144, PD Bus 10146, and JPMC Bus 10147. Physical descriptors, that is MEM 10112 physical read and write addresses, are transferred from JP 10114 to MEM
10112 through PD Bus 10146. S Ops, that is sequences of S Instructions and operand names, are transferred from MEM 10112 to JP 10114 through MOD Bus 10144 while data to be written into MEM 10112 from JP 10114 is transferred from JP 10114 to MEM 10112
through JPD Bus 10142. JPMC Bus 10147 is a By-directional Control bus for transferring command and control signals between MEM 10112 and JP 10114 for controlling transfer of data between MEM 10112 and JP 10114. As will be described further below, MJP
Port 10140, and in particular MOD Bus 10144 and PD Bus 10146, is generally physically organized as a single port that operates as a dual port. In a first case, MJP Port 10140 operates as a Job Processor Instruction (JI) Port for transferring S Ops from
MEM 10112 to JP 10114. In a second case, MOD 10144 and PD 10146 operate as a Job Processor Operand (JO) Port for transfer of operands, from MEM 10112 to JP 10114, while JPD Bus 10142 and PD Bus transfer operands from JP 10114 to MEM 10112.

Referring to MSB 20110, MSB 20110 contains MEM 10112's first, or bulk, level of storage capacity. MSB 20110 may contain from one to, for example, 16 MA's 20112. Each MA 20112 contains a dynamic, random access memory array and may have a storage
capacity of, for example 256 Kilo-bytes, 512 Kilo-bytes, 1 Mega-bytes, or 2 Mega-bytes. MEM 10112 may therefore have a physical capacity of up to, for example, 16 Mega-bytes of bulk storage. As will be described further below MA 20112's of different
capacity may be used together in MSB 20110, for example, four 2 Mega-byte MA 20112's and four 1 Mega-byte MA 20112's.

BC 20114 controls operation of MA's 20112 and is the path for transfer of data to and from MA's 20112. In addition, BC 20114 performs error detection and correction on data transferred into and out of MA's 20112, refreshes data stored in MA's
20112, and, during refresh operations, performs error detection and correction of data stored in MA's 20112.

MC 20116 comprises MEM 10112's second, or cache, level of storage capacity and contains, for example 8 Kilo-bytes of high speed memory. MC 20116, including BYF 20118, is also the path for data transfer between MSB 20110 (through BC 20114) and JP
10114 and IOS 10116. In general, all read and write operations between JP 10114 and IOS 10116 are through MC 20116. IOS 10116 may, however, perform read and write operations of complete blocks by-passing MC 20116. Block write operations from IOS 10116
are accomplished through BYF 20118 while block read operations are performed through a data transfer path internal to MC 20116 and shown and described below. All read and write operations between MEM 10112 and JP 10114, however, must be performed
through the cache internal to MC 20116, as will be shown and described further below.

As also shown and described below, FIU 20120 includes write data registers for receiving data to be written into MEM 10112 from JP 10114 and IOS 10116, and circuitry for manipulating data read from MSB 20110 so that MEM 10112 appears as a bit
addressable memory. FIU 20120, in addition to providing bit addressability of MEM 10112, performs right and left alignment of data, zero fill of data, sign extension operations, and other data manipulation operations described further below. In
performing these data manipulation operations on data read from MEM 10112 to JP 10114, MOD Bus 10144 is used as a data path internal to MEM 10112 for transferring of data from MC 20116 to FIU 20120, and from FIU 20120 to MC 20116. That is, data to be
transferred to JP 10114 is read from MC 20116, transferred through MOD Bus 10144 to FIU 20120, manipulated by FIU 20120, and transferred from FIU 20120 to JP 10114 through MOD Bus 10144.

Having described the overall structure and operation of MEM 10112, the structure and operation of MEM 10112's Port, MIO Port 10128, and MJP Port 10140, will be described next, followed by descriptions of MEM 10112's control structure and the
control and flow of MEM 10112 read and write requests.

d. MEM 10112 Port Structure

MEM 10112 port structure is designed to provide a simple interface to JP 10114 and IOS 10116. While providing fast and flexible operation in servicing MEM 10112 read and write requests from JP 10114 and IOS 10116. In this regard, MEM 10112, as
will be described further below, may handle up to 4 read and write requests concurrently and up to, for example, a 63.6 M-byte per second data rate. In addition MEM 10112 is capable of performing bit granular addressing, block read and write operations,
and data manipulations, such as alignment and filling, to enable JP 10114 and IOS 10116 to operate most efficiently.

MEM 10112 effectively services requests from three ports. These ports are MIO Port 10128 to IOS 10116, hereafter referred to as IO Port, and JI and JO Ports, described above, to JP 10114. These three ports share the entire address base of MEM
10112, but IOS 10116, for example, may be limited from making full use of MEM 10112's address space. Each port has a different set of allowed operations. For example, JO Port can use bit granular addresses but can reference only 32 bits of data on each
request. JI Port can make read requests only to word align 32 bit data items. IO Port may reference bit granular data, and, as described further below, may read or write up to 16 bytes on each read or write request. The characteristics of each of
these ports will be discussed next below.

1. IO Port Characteristics

IOS 10116 may access MEM 10112 in either of two modes. The first mode is block transfers by-passing or through the cache in MC 20116, and the second is non-block transfer through the cache in MC 20116.

Block by-passes may occur for both read and write operations. A read or write operation is eligible for a block by-pass if the data is on block boundaries, is 16 bytes long, and the read or write request is not accompanied by a control signal
indicating that an encache (load into MC 20116's cache) operation is to be performed. A by-pass operation takes place only if the block address, that is the physical address of the block in MEM 10112 does not address a currently encached block, that is
the block is not present in MC 20116's cache. If the block is encached in MC 20116's cache, the read or write transfer is to MC 20116's cache.

Partial block references, that is non-full block transfers will go through MC 20116's cache. If a cache miss occurs, that is the reference data is not present in MC 20116's cache, MEM 10112's control structures transfer the data to or from MSB
20110 and update MC 20116's cache. It should be noted that partial blocks may be as short as one byte, or up to 15 bytes long. A starting byte address may be anywhere within a block, but the partial block's length may not cross a block boundary.

Bit length transfers, that is transfers of data items having a length of 1 to 16 bits and not a multiple of a byte, or where address is not on a byte boundary, go through MC 20116's cache. These operations may cross byte, word, or block
boundaries but may not cross page boundaries. These specific operations requested by IO port determines whether a read or write request is a partial block or bit length transfer.

2. JO Port Characteristics

All read or write requests from JO Port must go through MC 20116's cache; by-pass operations may not be performed. The data transferred between MEM 10112 and JP 10114 is always 32 bits in length but, of the 32 bits passed, from zero to 32 bits
may be valid data. JP 10114 determines the location of valid data within the 32 bits by referring to certain FIU specification bits provided as part of the read or write request. As will be described further below, FIU specification bits, and other
control bits, are provided to MIC 20122 by JP 10114 through JPMC Bus 10147 when each read or write request is made.

While MEM 10112 does not perform block by-pass operations to JP 10114, MEM 10112 may perform a cache read-through operation. Such operations occur on a JP 10114 read request wherein the requested data is not present in MC 20116's cache. If the
JP 10114 read request is for a full word, which is word aligned, MEM 10112's Load Manager, discussed below, transfers the requested data directly to JP 10114 while concurrently loading the requested data into MC 20116's cache. This operation is referred
to as a "hand-off" operation. These operations may also be performed by IO Port for 16 bit half words aligned on the right hand half word of a 32 bit word, or if a full block is handed left and loaded into MC 20116's cache.

3. JI Port Characteristics

All JI Port requests are satisfied through MC 20116's cache; MEM 10112 does not perform by-pass operations to JI Port. JI Port requests are always read requests for full-word aligned words and are handed off, as described above, if a cache miss
occurs. In most other respects, JI Port requests are similar to JO Port requests.

Having described the overall structure and operation of MEM 10112, including MEM 10112's input and output ports to JP 10114 and IOS 10116, MEM 10112's control structure will be described next below.

e. MEM 10112 Control Structure and Operation (FIG. 207)

Referring to FIG. 207, a more detailed block diagram of MIC 20116 is shown. FIG. 207 will be referred to in conjunction with FIG. 201 in the following discussion of MEM 10112's control structure

Outputs of PC 20716 are connected to inputs of JOPAR 20710, JIPAR 20712, IOPAR 20714, PRMUX 20720, and LP 20724 through Bus 20738. Bus 20740 is connected between an input/output of PC 20716 and an input/output of RM 20722.

An output of BR/WC 20718 is connected to MCNTL-MC Bus 20164B through Bus 20742. Inputs of BR/WC 20718 are connected from outputs of RM 20722 and Read Queue (RQ) 20728 through, respectively, Buses 20744 and 20746.

RM 20722 has outputs connected to MCNTL-BC Bus 20164A, MCNTL-FIU Bus 20164C, and input of MISSC 20726, and an input of LP 20724 through, respectively, Buses 20748, 20750, 20752, and 20754. MISSC 20726's output is connected to MCNTL-BC Bus
20164A. Outputs of LP 20724 are connected to MCNTL-MC Bus 20164B and to an input of LM 20730 through, respectively, Buses 20756 and 20758. RQ 20728's input is connected from MCNTL-MC Bus 20164B through Bus 20760 and RQ 20728 has outputs connected to an
input of LP 20724, through Bus 20762, and as previously described to an input of BR/WC 20718 through Bus 20746. Finally, LM 20730's output is connected to MCNTL-MC Bus 20164B through Bus 20764.

Having described the structure of MIC 20122 with reference to FIG. 207, and having previously described the structure of MEM 10112 with reference to FIG. 201, MEM 10112's control structure operation will next be described with reference to both
FIGS. 201 and 207.

2. MEM 10112 Control Operation

Referring first to FIG. 207, JOPAR 20710, JIPAR 20712, and IOPAR 20714 are, as previously described, connected from PD Bus 10146 from JP 10114 and IOM Bus 10130 from IOS 10116. JPAR 20710, JIPAR 20712, and IOPAR 20714 receive read and write
request addresses from JP 10114 and IOS 10116 and store these addresses for subsequent service by MEM 10112. As will be described further below, these address inputs from JP 10114 and IOS 10116 include FIU information specifying what data manipulation
operations must be performed by FIU 20120 before requested data is transferred to the requestor or written into MEM 10112, information regarding the destination data read from MEM 10112 is to be provided to, information regarding the type of operation to
be performed by MEM 10112, and information regarding operand length. Request address information received and stored in JOPAR 20710, JIPAR 20712, and IOPAR 20714 is retained therein until MEM 10112 has initiated service of the corresponding requests.
MEM 10112 will accept further request address information into a given port register only after a previous request into that port has been serviced or aborted. Address information outputs from JOPAR 20710, JIPAR 20712, and IOPAR 20714 are transferred
through PRMUX 20720 to Bus 20738 and from there to RM 20722, MC 20116, and FIU 20120 as service of individual requests is initiated. As will be described below, this address information will be transferred through PRMUX 20720 and Bus 20738 to LP 20724
for use in servicing a cache miss upon occurrence of a MC 20116 miss.

PC 20716 receives command and control signals pertinent to each requested memory operation from JP 10114 and IOS 10116 through JPMC Bus 10147 and IOMC Bus 10131. PC 20716 includes request arbitration logic and port state logic. Request
arbitration logic determines the sequence in which IO, JI, JO ports are serviced, and when each port is to be serviced. In determining the sequence of port service, request arbitration logic uses present port state information for each port from the
port state logic, information from JPMC Bus 10147 and IOMC Bus 10131 regarding each incoming request, and information from RM 20722 concerning the present state of operation of MEM 10112. Port state logic selects each particular port to be serviced and,
by control signals through Bus 20738, enables transfer of each port's request address information from JOPAR 20710, JIPAR 20712, and IOPAR 20714 through PRMUX 20720 to Bus 20738 for use by the remainder of MEM 10112's control logic in servicing the
selected port. In addition to request information received from JP 10114 and IOS 10116 through JPMC Bus 10147 and IOMC Bus 10131, port state logic utilizes information from RM 20722 and, upon occurrence of a cache miss, from LM 20730 (for clarity of
presentation, this connection is not represented in FIG. 207). Port state logic also controls various port state flag signals, for example port availability signals, signals indicating valid requests, and signals indicating that various ports are
waiting service.

RM 20722 controls execution of service for each request. RM 20722 is a microcode controlled "micro-machine" executing programs called for by requested MEM 10112 operations. Inputs of RM 20722 include request address information from IOPAR
20714, JIPAR 20212, and JOPAR 20210, including information regarding the type of MEM 10112 operation to be performed in servicing a particular request, interrupt signals from other MEM 10112 control elements, and, for example, start signals from PC
20716's request arbitration logic. RM 20722 provides control signals to FIU 20120, MC 20116, and most other parts of MEM 10112's control structure.

Referring to FIG. 201, MC 20116's cache is, for example, an 8 Kilo-byte, four set associative cache used to provide rapid access to a subset of data stored in MSB 20110. The subset of MSB 20110 data stored in MC 20116's cache at any time is the
data most recently used by JP 10114 or IOS 10116. MC 20116's cache, described further below, includes tag store comparison logic for determining encached addresses, a data store containing corresponding encached data, and registers and logic necessary
to up-date cache contents upon occurrence of a cache miss. Registers and logic for servicing cache misses includes logic for determining the least recently used cache entry and registers for capture and storage of information regarding missed cache
references, for example modify bits and replacement page numbers. Inputs to MC 20116 are provided from RM 20722, LM 20730 (discussed further below), FIU 20120, MSB 20110 (through BC 20114), LP 20724 (described further below) and address information from
PRMUX 20720. Outputs of MC 20116 include data and go to FIU 20120 (through MOD Bus 10144), the data requestors (JP 10114 and IOS 10116), and a MC 20116 Write Back File (described further below).

As previously described, FIU 20120 includes logic necessary to make MEM 10112 appear bit addressable. In addition, FIU 20120 includes logic for performing certain data manipulation operations as required by the requestors (JP 10114 or IOS
10116). Data is transferred into FIU 20120 from MC 20116 through that portion of MOD Bus 10144 internal to MEM 10112, is manipulated as required, and is then transferred to the requestor through MOD Bus 10144 or MIO Bus 10129. In the case of writes
requiring read-modify-write of encached data, the data is transferred back to MC 20116 through MOD Bus 10144 after manipulation. In general, data manipulation operations include locating requested data onto selected MOD Bus 10144 or MIO Bus 10129 lines
and filling unused bus lines as specified by the requestor. Data inputs to FIU 20120 may be provided from MC 20116 or JP 10114 through MOD Bus 10144 or from IOS 10116 through IOM Bus 10130. Data outputs from FIU 20120 may be provided to MC 20116, JP
10114, or IOS 10116 through these same buses. Control information is provided to FIU 20120 from RM 20722 through Bus 20748 and MCNTL-FIU Bus 20164C. Address information may be provided to FIU 20120 from JOPAR 20710, JIPAR 20712, or IOPAR 20714 through
PRMUX 20720, Bus 20738, and MCNTL-FIU Bus 20164C.

Returning to FIG. 207, MISSC 20726 is used in handling MC 20116 misses. In the event of a request referring to data not in MC 20116's cache, MISSC 20726 stores a block address of the reference and type of operation to be performed, this
information being provided from an address register in MC 20116 and from RM 20722. MISSC 20726 utilizes this information in generating a command to BC 20114, through MCNTL-BC Bus 20164A, for a data read from MSB 20110 to obtain the referenced data. BC
20114 places this command in a queue, or register, and subsequently executes the commanded read operation. MISSC 20726 also generates an entry into RQ 20728 (described further below) indicating the type of operation to be performed when referenced data
is subsequently read from MSB 20110.

RQ 20728 is, for example, a three-level deep queue storing information indicating operations associated with data being read from MSB 20110. Two kinds of operation may be indicated: block by-pass reads and cache loads. If a cache load is
specified, that is a read and store to MC 20116's cache, is indicated, RM 20722 is interrupted and forced to place other MEM 10112 operations in idle until cache load is completed. A block by-pass read operation results in by-pass read control
(described below) assuming control of the data from MSB 20110. Inputs to RQ 20728 are control signals from RM 20722, MISSC 20726, and BC 20114. RQ 20728 provides control outputs to LP 20724 (described below) LM 20730 (described below) RM 20722, and
by-pass read control (described below).

LP 20724 is a set of registers for storing information necessary for servicing MC 20116 misses that result in order to load MC 20116's tag store. LM 20730 uses this information when data stored in MSB 20110 and read from MSB 20110 to service a
MC 20116 cache miss, becomes available through BC 20114. Inputs to LP 20724 include the address of the missing reference, provided from JOPAR 20710, JIPAR 20712, or IOPAR 20714 through PRMUX 20720 and Bus 20738, commands from RM 20722, and a control
signal from RQ 20728. LP 20724 outputs include addresses of missed references to MC 20116, through Bus 20756 and MNCTL-MC 20164B, and command signals to LM 20730 and BR/WC 20718.

LM 20730, referred to above, controls loading of MC 20116's cache with data from MSB 20110 after occurrence of a cache miss. RQ 20728, referred to above, indicates, for each data read from MSB 20110, whether the data read is the result of a MC
20116 cache miss. If the data is read from MSB 20110 as a result of a cache miss, LM 20730 proceeds to issue a sequence of control signals for loading the data from MSB 20110 and its associated address into MC 20116's cache. This data is transferred
into MC 20116's cache data store while the block address, from LP 20724 is transferred into the tag store (described in the following discussion) of MC 20116's cache. If the transfer of data into MC 20116's cache replaces data previously resident in
that cache, and that previous data is "dirty", that is has been written into so as to be different from an original copy of the data stored on MSB 20110, the modified data resident in MC 20116's cache must be written back into MSB 20110. This operation
is performed through a Write Back File contained in MC 20116 and described below. In the event of such an operation, LM 20730 initiates a write back operation by MC 20116 and BC 20114, also as described below.

As will be described further in a following description, all MC 20116 cache load operations are full 4 word blocks. A request resulting in a MC 20116 cache miss may result in a "hand-off", that is a read operation of a full 4 word block.
Handoff operations also may be of single 32 bit words wherein a 32 bit word aligned word is transferred from JP 10114 or a 16 bit operand aligned on the right half-word is transferred from IOS 10116. In such a handoff operation, LM 20730 will send a
valid request signal to the requesting port and a handoff operation will be performed. Otherwise, a waiting signal will be sent to the requesting port and the request will re-enter the priority queue of PC 20716 for subsequent execution. To accomplish
these operations, LM 20730 receives input from RQ 20728, (not shown in FIG. 207 for clarity of presentation) and LP 20724. LM 20730 provides outputs to port state logic of PC 20716, to MC 20116, MC 20116's Write Back File and MC 20116's Write Back
Address Register and to BC 20114.

Referring to FIG. 201, as previously discussed IOS 10116 may request a full block write operation directly to MSB 20110. Such a by-pass write request may be honored if the block being transferred is not encached in MC 20116's cache. In such a
case, RM 20722 will initiate the transfer setting up By-Pass Write Control logic in BR/WC 20718, and may then pass control of the operation over to BR/WC 20718's By-Pass Write Control logic for completion. By-Pass Write Control may then accept the
remaining portion of the data block from IOS 10116, generating appropriate hand shaking signals through IOMC Bus 10131, in load the data block into BYF 20118 and MC 20116. MISSC 20726 will provide a by-pass write command to BC 20114, through MNCTL-PC
Bus 20164A. BC 20114 will then transfer the data block from BYF 20118 and into MA's 20112 in MSB 20110.

As previously described, BC 20114 manages all data transfers to and from MA's 20112 in MSB 20110. BC 20114 receives requests for data transfers from RM 20722 in an internal queue register. All data transfers to and from MSB 20110 are full block
transfers with block aligned addresses. On data write operations, BC 20114 receives data from BWF 20118 or from MC 20116's Write Back File and transfers the data into MA's 20112. During read operations, BC 20114 fetches the data block from MA's 20112
and places the data block on RDO Bus 20158 while signalling to MIC 20122 that the data is available. As described above, MIC 20122 tracks and controls transfer of data and BYF 20118, MC 20116, and MC 20116's Write Back File, and directs data read from
MSB 20110 to the appropriate destination, MC 20116's Data Store, JP 10114, or IOS 10116.

In addition to the above operations, BC 20114 controls refresh of MA's 20112 and performs error detection and correction operations. In this regard, BC 20114 performs two error detection and correction operations. In the first, BC 20114 detects
single and double bit errors in data read from MSB 20110 and corrects single bit errors. In the second, BC 20114 reads data stored in MA's 20112 during refresh operations and performs single bit error detection. Whenever an error is detected, during
either read operations or refresh operations, BC 20114 makes a record of that error in an error log contained in BC 20114 (described further in a following description). Both JP 10114 and IOS 10116 may read BC 20114's error log, and information from BC
20114's error log may be recorded in a CS 10110 maintenance log and to assist in repair and trouble shooting of CS 10110. BC 20114's error log may be addressed directly by RM 20722 and data from BC 20114's error log is transferred to JP 10114 or IOS
10116 in the same manner as data stored in MSB 20110.

Referring finally to MA's 20112, each MA 20112 contains an array of dynamic semiconductor random access memories. Each MA 20112 may contain 256 Kilo-bytes, 512 Kilo-bytes, 1 Mega-bytes, or 2 Mega-bytes of data storage. The storage capacity of
each MA 20112 is organized as segments of 256 Kilo-bytes each. In addressing a particular MA 20112, BC 20114 selects that particular MA 20112 as will be described further below. BC 20114 concurrently selects a segment within that MA 20112, and a block
of four words within that segment. Each word may comprise 39 bits of information, 32 bits of data and 7 bits of error correcting code. The full 39 bits of each MA 20112 word are transferred between BC 20114 and MA's 20112 during each read and write
operation. Having briefly described the general structure and operation of MEM 10112, certain types of operations which may be performed by MEM 10112 will be described next below.

f. MEM 10112 Operations

MEM 10112 may perform two general types of operation. The first type are data transfer operations and the second type are memory maintenance operations. Data transfer operations may include read, write, and read and set. Memory maintenance
operations may include read error log, repair block, and flush cache. Except during a flush cache operation, the existence of MC 20116 and its operation is invisible to the requestors, that is JP 10114 and IOS 10116.

A MEM 10112 read operation transfers data from MS 10112 to a requestor, either JP 10114 or IOS 10116. A read data transfer is asynchronous in that the requestor cannot predict elapsed time between submission of a memory operation request and
return of requested data. Operation of a requestor in MEM 10112 is coordinated by a requested data available signal transmitted from MEM 10112 to the requestor.

A MEM 10112 write operation transfers data from either JP 10114 or IOS 10116 to MEM 10112. During such operations, JP 10114 is not required to wait for a signal from MEM 10112 that data provided to MEM 10112 from JP 10114 has been accepted. JP
10114 may transfer data to MEM 10112's JO Port whenever a JO Port available signal from MEM 10112 is present; read data is accepted immediately without further action or waiting required of JP 10114. Word write operations from IOS 10116 are performed in
a similar manner. On block write operations, however, IOS 10116 is required to wait for a data taken signal from MEM 10112 before sending the 2nd, 3rd and 4th words of a block.

MEM 10112 has a capability to perform "lock bit" operations. In such operations, a bit granular read of the data is performed and the entire operand is transmitted to the requestor. At the same time, the most significant bit of the operand,
that is the Lock Bit, is set to one in the copy of data stored in MEM 10112. In the operand sent to the requestor, the lock bit remains at its previous value, the value before the current read and set operation. Test and set operations are performed by
performing read and set operations wherein the data item length is specified to be one bit.

As previously described, MEM 10112 performs certain maintenance operations, including error detection. MEM 10112's Error Log in BC 20114 is a 32 bit register containing an address field and an error code field. On a first error to occur, the
error type and in some cases, such as ERCC errors on read data stored in MSB 20110, the address of the data containing the error is stored in BC 20114's Error Log Register. An interrupt signal indicating detection of an error is raised at the same that
information regarding the error is stored in the Error Log. If multiple errors occur before Error Log is read and reset, the information regarding the first error will be retained and will remain valid The Error Log code field will, however, indicate
that more than one error has occurred.

JP 10114 may request a read Error Log operation referred to as a "Read Log and Reset" operation. In this operation, MEM 10112 reads the entire contents of Error Log to JP 10114, resets Error Log Register, and resets the interrupt signal
indicating presence of an error. IOS 10116, as discussed further below, is limited to reading 16 bits at a time from MEM 10112. It therefore requires two read operations to read Error Log. First read operation to IOS 10116 reads an upper 16 bits of
Error Log data and does not reset Error Log. The second read operation is performed in the same manner as a JP 10114 Read Log and Reset operation, except that only the low order 16 bits of Error Log are read to IOS 10116.

MEM 10112 performs repair block operations to correct parity or ERCC errors in data stored in MC 20116's Cache or in data stored in MA's 20112. In a repair block procedure, parity bits for data stored in MC 20116's Cache, or ERCC check bits of
data stored in MA's 20112, are modified to agree with the data bits of data stored therein. In this regard, repaired uncorrectible errors, such as two bit errors of data in MA's 20112, will have good ERCC and parity values. Until a repair block
operation is performed, any read request directed to bad data, that is data having parity or ERCC check bits indicating invalid data, will be flagged as invalid. Repair block operations therefore allow such data to be read as valid, for example to be
used in a data correction operation. Errors are ignored and not logged in BC 20114's Error Log in repair block operations. A write operation into an area containing bad data may be accomplished if MEM 10112's internal operation does not require a
read-modified-write procedure. Only byte aligned writes of integral byte length data residing in MC 20116 and word aligned writes of integral word lengths of data in MSP 20110 do not require read-modified-write operation. By utilizing such write
operations, it is therefore possible to overwrite bad data by use of normal write operations before or instead of repair block operations.

MEM 10112 performs a cache flush operation in event of a power failure, that is when MEM 10112 goes into battery back-up operation. In such an event, only MA's 20112 and BC 20114 remain powered. Before JP 10114 and IOS 10116 lose power, JP
10114 and IOS 10116 must transfer to MEM 10112 any data, including operating state, to be saved. This is accomplished by using a series of normal write operations. After conclusion of these write operations, both JP 10114 and IOS 10116 transmit a flush
cache request to MEM 10112. Upon receiving two flush cache requests, MEM 10112 flushes MC 20116's Cache so that all dirty data encached in MC 20116's Cache is transferred into MA's 20112 before power is lost. If only JP 10114 or IOS 10116 is operating,
DP 10118 will detect this fact and will have transmitted an enabling signal (FLUSHOK) to MEM 10112 during system initialization. FLUSHOK enables MEM 10112 to perform cache flush upon receiving a single flush cache request. After a cache flush
operation, no further MEM 10112 operations are possible until DP 10118 resets a power failure lock-out signal to enable MEM 10112 to resume normal operation.

Having described MEM 10112's overall structure and operation and certain operations which may be performed by MEM 10112, MEM 10112's interfaces to JP 10114 and IOS 10116 will be described next below.

IO Port 20910 handles all IOS 10116 requests to MEM 10112, including transfer of both instructions and operands. JPO Port 21010 is used for read and write operations of operands, for example numeric values, to and from JP 10114. JPI Port 21110
is used to read SINs, that is SOPs and operand NAMEs, from MEM 10112 to JP 10114. Memory service requests to a particular port are serviced in the order that the requests are provided to the Port. Serial order is not maintained between requests to
different ports, but ports may be serviced in the order of their priority. In one embodiment of the present invention, IO Port 20910 is accorded highest priority, followed by JPO Port 21010, and lastly by JPI Port 21110, with requests currently
contained in a port having priority over incoming requests. As described above and will be described in more detail in following descriptions, MEM 10112 operations are pipelined. This pipelining allows interleaving of requests from IO Port 20910, JPO
Port 21010, and JPI Port 21110, as well as overlapping service of requests at a particular port. By overlapping operations it is meant that one operation servicing a particular port begins before a previous operation servicing that port has been
completed.

1. IO Port 20910 Operating Characteristics (FIGS. 209, 204)

Referring first to FIG. 209, a diagramic representation of IO Port 20910 is shown. Signals are transmitted between IO Port 20910 and IOS 10116 through MIO Bus 10129, IOM Bus 10130, and IOMC Bus 10131. MIO Bus 10129 is a unidirectional bus
having inputs from MC 20116 and FIU 20120 and dedicated to transfers of data and instructions from MEM 10112 to IOS 10116. IOM Bus 10130 is likewise a unidirectional bus and is dedicated to the transfer, from IOS 10116 to MEM 10112, of read addresses,
write addresses, and data to be written into MEM 10112. IOM Bus 10130 provides inputs to BYF 20118, FIU 20120, and MIC 20122. IOMC Bus 10131 is a set of dedicated signal lines for the exchange of control signals between IOS 10116 and MEM 10112.

Referring first to MIO Bus 10129, MIO Bus 10129 is a 36 bit bus receiving read data inputs from MC 20116's Cache and from FIU 20120. A single read operation from MEM 10112 to IOS 10116 transfers one 32 bit word (or 4 bytes) of data (MIO(0-31))
and four bits of odd parity (MIOP(0-3)), or one parity bit per byte.

Referring next to IOM Bus 10130, a single transfer from IOS 10116 to MEM 10112 includes 36 bits of information which may comprise either a memory request comprising a physical address, a true length, and command bits. These memory requests and
data are multiplexed onto IOM 10130 by IOS 10116.

Data transfers from IOS 10116 to MEM 10112 each comprise a single 32 bit data word (IOM(0-31)) and four bits of odd parity (IOMP(0-3)) or one parity bit per byte. Such data transfers are received by either BYF 20118 or FIU 20120.

Each IOS 10116 memory request to MEM 10112, as described above, includes an address field, a length field, and an operation code field. Address and length fields occupy the 32 IOM Bus 10130 lines used for transfer of data to MEM 10112 in IOS
10116 write operations. Length field includes four bits of information occupying bits (IOM(0-3)) of IOM Bus 10130 and address field contains 27 bits of information occupying bits (IOM(4-31)) of IOM Bus 10130. Together, address and length field specify
a physical starting address and true length of the particular data item to be written into or read from MEM 10112. Operation code field specifies the type of operation to be performed by MEM 10112. Certain basic operation codes comprise 3 bits of
information occupying bits (IOMP (32-36)) of IOM Bus 10130; as described above. These same lines are used for transfer of parity bits during data transfers. Certain operations which may be requested of MEM 10112 by IOS 10116 are, together with their
corresponding command code fields, are;

000=read,

001=read and set,

010=write,

011=error,

100=read error log (first half),

101=read error log (second half) and reset,

110=repair block, and

111=flush cache.

Two further command bits may specify further operations to be performed by MEM 10112. A first command bit, indicates to MEM 10112 during write operations whether it is desirable to encache the data being written into MEM 10112 in MC 20116's
Cache. IOS 10116 may set this bit to zero if reuse of the data is unlikely, thereby indicating to MEM 10112 that MEM 10112 should avoid enchaching the data. IOS 10116 may set this bit to one if the data is likely to be reused, thereby indicating to MEM
10112 that it is preferable to encache the data. A second command bit is referred to a CYCLE. CYCLE command bit indicates to MEM 10112 whether a particular data transfer is a single cycle operation, that is a bit granular word, or a four cycle
operation, that is a block aligned block or a byte aligned partial block.

IOMC 10131 includes a set of dedicated lines for exchange of control signals between IOS 10116 and MEM 10112 to coordinate operation of IOS 10116 and MEM 10112. A first such signal is Load IO Request (LIOR) from IOS 10116 to MEM 10112. When IOS
10116 wishes to load a memory request into MEM 10112, IOS 10116 asserts LIOR to MEM 10112. IOS 10116 must assert LIOR during the same system cycle during which the memory request, that is address, length, and command code fields, are valid. If LIOR and
IO Port Available (IOPA) signals, described below, are asserted during the same clock cyle, MEM 10112's port is loaded from IOS 10116 and IOPA is dropped, indicating the request has been accepted. If a load of a request is attempted and IOPA is not
asserted, MEM 10112 remains unaware of the request, LIOR remains active, and the request must then be repeated when IOPA is asserted.

IOPA is a signal from MEM 10112 to IOS 10116 which is asserted by MEM 10112 when MEM 10112 is available to accept a new request from IOS 10116. IOPA may be asserted while a previous request from IOS 10116 is completing operation if the address,
length, and operation code fields of the previous request are no longer required by MEM 10112, for example in servicing bypass operations.

IO Data Taken (TIOMD) is a signal from MEM 10112 to IOS 10116 indicating that MEM 10112 has accepted data from IOS 10116. IOS 10116 places a first data word on IOM Bus 10130 on the next system clock cycle after a write request is loaded; that
is, LIOR has been asserted, a memory request presented, and IOPA dropped. MEM 10112 then takes that data word on the clock edge beginning the next system clock cycle. At this point, MEM 10112 asserts TIOMD to indicate the data has been accepted. On a
single word operations TIOMD is not used by IOS 10116 as a first data word is always accepted by MEM 10112 if IO Port 20910 was available. On block operations, a first data word is always taken but a delay may occur between acceptance of first and
second words. IOS 10116 is required to hold the second word valid on IOM Bus 10130 until MEM 10112 responds with TIOMD to indicate that the block operation may proceed.

Data Available for IO (DAVIO) is a signal asserted by MEM 10112 to IOS 10116 indicating that data requested by IOS 10116 is available. DAVIO is asserted by MEM 10112 during the system clock cycle in which MEM 10112 places the requested data on
MIO Bus 10129. In any single word type transfer, DAVIO is active for a single system clock transfer. In block type transfers, DAVIO is normally active for four consecutive system clock cycles. Upon event of a single cycle "bubble" resulting from
detection and correction of an ERCC error by BC 20114, DAVIO will remain high for four non-consecutive system clock cycles and with a single cycle bubble, a non-assertion, in DAVIO corresponding to the detection and correction of the error.

IO Memory Interrupt (IMINT) is a signal asserted by MEM 10112 to IOS 10116 when BC 20114 places a record of a detected error in BC 20114's Error Log, as described above.

Previous MIO Transfer Invalid (PMIOI) signal is similarly a signal asserted by MEM 10112 to IOS 10116 regarding errors in data read from MEM 10112 to IOS 10116. If an uncorrectible error appears in such data, that is an error in two or more data
bits, the incorrect data is read to IOS 10116 and PMIOI signal asserted by MEM 10112. Correctible, or single bit, errors in data do not result in assertion of PMIOI. MEM 10112 will assert PMIOI to IOS 10116 of the next system clock cycle following MEM
10112's assertion of DAVIO.

Having described MEM 10112's interface to IOS 10116, and certain operations which IOS 10116 may request of MEM 10112, certain MEM 10112 operations within the capability of the interface will be described next. First, operand transfers, for
example of numeric data, between MEM 10112 and IOS 10116 may be bit granular with any length from one to sixteen bits. Operand transfers may cross boundaries within a page but may not cross physical page boundaries. As previously described, MIO Bus
10129 and IOM Bus 10130 are capable of transferring 32 bits of data at a time. The least significant 16 bits of these buses, that is bits 16 to 31, will contain right justified data during operand transfers. The contents of the most significant 16 bits
of these buses is generally not defined as MEM 10112 generally does not perform fill oerations on read operations to IO Port 20910, nor does IOS 10116 fill unused bits during write operations. During a read or write operation, only those data bits
indicated by length field in the corresponding memory request are of significance. In all cases, however, parity must be valid on all 32 bits of MIO Bus 10129 and IOM Bus 10130.

Referring to FIG. 204A, IOS 10116 includes Data Channels 20410 and 20412 each of which will be described further in a following detailed description of IOS 10116. Data Channels 20410 and 20412 each possess particular characteristics defining
certain IO Port 20910 operations. Data Channel 20410 operates to read and write block aligned full and partial blocks. Full blocks have block aligned addresses and lengths of 16 bytes. Partial blocks have byte aligned addresses and lengths of 1 to 15
bytes; a partial block transfer must be within a block, that is not cross block boundaries. A full 4 word block will be transferred between IOS 10116 and MEM 10112 in either case, but only those blocks indicated by length of field in a corresponding MEM
10112 request are of actual significance in a write operation. Non-addressed bytes in such operations may contain any information so long as parity is valid for the entire data transfer. Data Channel 20412 preferably reads or writes 16 bits at a time
on double byte boundaries. Such reads and writes are right justified on MIO Bus 10129 and IOM Bus 10130. The most significant 16 bits of these buses may contain any information during such operations so long as parity is valid for the entire 32 bits.
Data Channel 20412 operations are similar to IOS 10116 operand read and write operations with double byte aligned addresses and lengths of 16 bits. Finally, instructions, for example controlling IOS 10116 operation, are read from MEM 10112 to IOS 10116
a block at a time. Such operations are identical to a full block data read.

Having described the operating characteristics of IO Port 20910, the operating characteristics of JPO Port 21010 will be described next.

Referring first to JPO Port 21010's read data output to MOD Bus 10144, MOD Bus 10144 is used by JPO Port 21010 to transfer data, for example operands, to JP 10114. MOD Bus 10144 is also utilized internal to MEM 10112 as a bi-directional bus to
transfer data between MC 20116 and FIU 20120. In this manner, data may be transferred from MC 20116 to FIU 20120 where certain data format operations are performed on the data before the data is transferred to JP 10114 through MOD Bus 10144. Data may
also be used to transfer data from FIU 20120 to MC 20116 after a data format operation is performed in a write operation. Data may also be transferred directly from MC 20116 to JP 10114 through MOD Bus 10144. Internal to MEM 10112, MOD Bus 10144 is a
36 bit bus for concurrent transfer of 32 bits of data, MOD Bus 10144 bits (MOD(0-31)), and 4 bits of odd parity, 1 bit per byte, MOD Bus 10144 bits (MODP(0-3)). External to MEM 10112, MOD Bus 10144 is a 32 bit bus, comprising bits (MOD(0-31)); parity
bits are not read to JP 10114.

Data is written into MEM 10112 through JPD Bus 10142 to FIU 20120. As just described, data format operations may then be performed on this data before it is transferred from FIU 20120 to MC 20116 through MOD Bus 10144. In such operations, JPD
Bus 10142 operates as a 32 bit bus carrying 32 bits of data, bits (JPD (0-31)), with no parity bits. JO Port 21010 generates parity for JPD Bus 10142 data to be written into MEM 10112 as this data is transferred into MEM 10112.

Memory requests are also transmitted to MEM 10112 from JP 10114 through JPD Bus 10142, which operates in this regard as a 40 bit bus. Each such request includes an address field, a length field, an FIU field specifying data formating operations
to be performed, operation code field, and a destination code field specifying destination of data read from MEM 10112. Address field includes a 13 bit physical page number field, (JPPN(0-12)), and a 14 bit physical page offset field, (JPPO(0-13)).
Length field includes 6 bits of length information, (JLNG(0-5)), and expresses true length of the data item to be written to or read from MEM 10112. As JPD Bus 10142 and MOD Bus 10144 are each capable of transferring 32 bits of data in a single MEM
10112 read or write cycle, 6 bits of length information are required to express true length. As will be described in a following description, JP 10114 may provide physical page offset and length information directly to MEM 10112, perform logical page
number to physical page number translations, and may perform a Protection Mechanism 10230 check on the resulting physical page number. As such, MEM 10112 expects to receive (JPPN(0-12)) later than (JPPO(0-13)) and (JLNG(0-5)). (JPPO(0-13)) and
(JLNG(0-5)) should, however, be valid during the system clock cycle in which a JP 10114 memory request is loaded into MEM 10112.

Operation code field provided to MEM 10112 from JP 10114 is a 3 bit code, (JMCMD(0-2)) specifying an operation to be formed by MEM 10112. Certain operations which JP 10114 may request of MEM 10112, and their corresponding operation codes, are:

000=read;

001=read and set;

010=write;

011=error;

100=error;

101=read error log and reset;

110=repair block; and,

111=flush cache.

Two bit FIU field, (JFIU(0-1)) specifies data manipulation operations to be performed in executing read and write operations. Among the data manipulation operations which may be requested by JP 10114, and their FIU fields, are:

00=right justified, zero fill;

01=right justified, sign extend;

10=left justify, zero fill; and,

11=left justify, blank fill.

For write operations, JPO Port 21010 may respond only to the most significant bit of FIU field, that is the FIU field bit specifying alignment.

Finally, destination field is a two bit field specifying a JP 10114 destination for data read from MEM 10112. This field is ignored for write operations to MEM 10112. A first bit of destination field, JPMDST, identifies the destination to be FU
10120, and the second field, EBMDST, specifies EU 10122 as the destination.

JPMC Bus 10147 includes dedicated lines for exchange of control signals between JPO Port 21010 and JP 10114. Among these control signals is Load JO Request (LJOR), which is asserted by JP 10114 when JP 10114 wishes to load a request into MEM
10112. LJOR is asserted concurrently with presentation of the memory request to MEM 10112 through PD Bus 10146. JO Port Available (JOPA) is asserted by MEM 10112 when JPO Port 21010 is available to accept a new memory request from JP 10114. If LJOR
and JOPA are asserted concurrently, MEM 10112 accepts the memory request from JP 10114 and MEM 10112 drops JOPA to indicate that memory request has been accepted. As previously discussed, MEM 10112 may assert JOPA while a previous request is being
executed and the PD Bus 10146 information, that is the memory request previously provided concerning the previous request, is no longer required.

If JP 10114 submits a memory request and JOPA is not asserted by MEM 10112, MEM 10112 does not accept the request and JP 10114 must resubmit that request when JOPA is asserted. Because, as described above, JPPN field of a memory request from JP
10114 may arrive late compared to the other fields of the request, MEM 10112 will delay loading of JPPN field for a particular request until the next system clock cycle after the request was initially submitted. MEM 10112 may also obtain this JPPN field
at the same time it is being loaded into the port register by by-passing the port register.

JP 10114 may abort a memory request upon asserting Abort JP Request (ABJR). ABJR will be accepted by MEM 10112 during system clock cycle after accepting memory request from JP 10114 and ABJR will result in cancellation of the requested
operation. A single ABJR line is provided for both JPO Port 21010 and JPI Port 1110 because, as described in a following description, MEM 10112 may accept only a single request from JP 10114, to either JPO Port 21010 or to JPI Port 21110, during a
single system clock cycle.

Upon completion of an operand read operation requested through JPO Port 21010 MEM 10112 may assert either of two data available signals to JP 10114. These signals are data available for FA(DAVFA) and data available for EB(DAVEB). As previously
described, a part of each read request from JP 10114 includes a destination field specifying the intended destination of the requested data. As will be described further below, MEM 10112 tracks such destination information for read requests and returns
destination information with corresponding information in the form of DAVFA and DAVEB. DAVFA indicates a destination in FU 10120 while DAVEB indicates a destination in EU 10122. MEM 10112 may also assert signal zero filled (ZFILL) specifying whether
read data for JPO Port 21010 is zero filled. ZFILL is valid only when DAVEB is asserted.

For a JPO Port 21010 write request, the associated write data word should be valid on the same system clock cycle as the request, or one system clock cycle later. JP 10114 asserts Load JP Write Data (LJWD) during the system clock cycle when JP
10114 places valid write data on JPD Bus 10142.

As previously discussed, when MEM 10112 detects an error in servicing a JP 10114 request MEM 10112 places a record of this error in MC 20116's Error Log. When an entry is placed in Error Log for either JPO Port 21010 or IO Port 20910, MEM 10112
asserts an interrupt flag signal indicating a valid Error Log entry is present. DP 10118 detects this flag signal and may direct the flag signal to either JP 10114 or IOS 10116, or both. IOS 10116 or JP 10114, as selected by DP 10118, may then read and
reset Error Log and reset the flag. The interrupt flag signal is not necessarily directed to the requestor, JP 10114 or IOS 10116, whose request resulted in the error.

If an uncorrectible MEM 10112 error, that is an error in two or more bits of a single data word, is detected in a read operation the incorrect data is read to JP 10114 and an invalid data signal asserted. A signal, Previous MOD Transfer Invalid
(PMODI), is asserted by MEM 10112 on the next system clock cycle following either DAVFA or DAVEB. PMODI is not asserted for single bit errors, instead the data is corrected and the corrected data read to JP 10114.

Having described JPO Port 21010's structure, and characteristics, JPI Port 21110 will be described next below.

3. JPI Port 21110 Operating Characteristics (FIG. 211)

Referring to FIG. 211, a diagramic representation of JPI Port 21110 is shown. JPI Port 21110 includes an address input from PD Bus 10146 to FIU 20120, a data output to MOD Bus 10144 from MC 20116, and bi-directional control inputs and outputs
from MIC 20122 to JPMC Bus 10147. As previously described, a primary function of JPI Port 21110 is the transfer of SOPs and operand NAMEs from MEM 10112 to JP 10114 upon request from JP 10114. JPI Port thereby performs only read operations wherein each
read operation is a transfer of a single 32 bit word having a word aligned address.

Referring to JPI Port 21110 input from PD Bus 10146, read requests to MEM 10112 by JP 10114 for SOPs and operand NAMEs each comprise a 21 bit word address. As described above, each JPI Port 21110 read operation is of a single 32 bit word. As
such, the five least significant bits of address are ignored by MEM 10112. For the same reason, a JPI Port 21110 request to MEM 10112 does not include a length field, an operation code field, an FIU field, or a destination code field. Length, operation
code, and FIU code fields are not required since JPI Port 21110 performs only a single type of operation and destination code field is not required because destination is inherent in a JPI Port 21110 request.

The 32 bit words read from MEM 10112 in response to JPI Port 21110 requests are transferred to JP 10114 through MC 20116's 32 bit output to MOD Bus 10144. As in the case of JPO 21010 read outputs to JP 10114, JPI Port 21110 does not provide
parity information to JP 10114.

Control signals exchange between JP 10114 and JPI Port 21110 through JPMC Bus 10147 include Load JI Request (LJIR) and JI Port Available (JIPA), which operate in the same manner as discussed with reference to JPO Port 21010. As previously
described, JPO Port 21010 and JPI Port 21110 share a single Abort JP Request (ABJR) command. Similarly, JPO Port 21010 and JPI Port 21110 share Previous MOD Transfer Invalid (PMODI) from MEM 10112. As described above, a JPI Port 21110 request does not
include a destination field as destination is implied. MEM 10112 does, however, provide a Data Available Signal (DAVFI) to JP 10114 when a word read from MEM 10112 in response to a JPI Port 21110 request is present on MOD Bus 10144 and valid.

Having described the overall structure and operation of MEM 10112, and the structure and operation of MEM 10112's interfaces to JP 10114 and IOS 10116, the structure and operation of each major functional block of MEM 10112 will next be described
in further detail. In general, these discussions will begin at MEM 10112's interfaces to JP 10114 and IOS 10116, and will progress inwards to MA's 20112. As such, MIC 20122 will be described first, followed by descriptions of MC 20116, FIU 20120, BC
20114, and MA's 20112, in that order.

h. MIC 20122 Structure and Operation (FIGS. 207, 212-225)

MIC 20122, as previously described with reference to FIG. 207, provides primary control for MEM 10112. Among the functions controlled by MIC 20122 are: selection and control of service of requests to IO Port 20910, JPO Port 21010, and JPI Port
21110; interrogation and service of MC 20116; control of data formating operations by FIU 20120; control of data paths through MEM 10112; and, initiation of BC 20114 operations in response to request to MEM 10112. MIC 20122 is microcode controlled with
primary control residing in RM 20722. RM 20722 may initiate operations of subordinate MIC 20122 circuits for example BR/WC 20718, and subsequently execute operations in parallel with those operations initiated by RM 20722. This division of control
responsibility, that is the capability of RM 20722 to initiate subordinate operations while executing parallel operations, allows MEM 10112 to, for example, overlap block transfers to and from IOS 10116 while executing read and write operations between
MC 20116 and JP 10114.

During the following descriptions, the sequence of MIC 20122 operations executed for each MEM 10112 operation will be described together with the MIC 20122 structures involved in these operations. The following descriptions will begin at those
portions of IO Port 20714, JPI Port 20712, and JPO Port 20710 resident in MIC 20122, and will progress through, for example, RM 20722, LM 20730, and MIC 20122's interface to BC 20114. FIG. 207 will be referred to during these descriptions, together with
other figures showing portions of MIC 20122 in further detail, which will be introduced as required.

1. JOPAR 20710, JIPAR 20712, IOPAR 20714, and PRMUX 20720 (FIG. 212)

Referring to FIGS. 212 and 212A, those portions of IO Port 20910, JPO Port 21010, and JPI Port 21110 residing in MIC 20122, and PRMUX 20720, are shown together with other MIC 20122 logic circuitry which will be discussed further below.

As indicated in FIG. 212, JOPAR 20710, JIPAR 20712, and IOPAR 20714 are each composed of a set of registers (for example, SN74S194s) for receiving and storing address, length, operation code, FIU code, and destination code fields of memory
requests. As described above, inputs of JOPAR 20710, JIPAR 20712, and IOPAR 20714 are connected from, respectively, PD Bus 10146 and IOM Bus 10130. The memory request fields received and stored by JOPAR 20710, JIPAR 20712, and IOPAR 20714, together
with their corresponding inputs from JO, JI and IO Ports, are indicated in FIG. 212. Outputs of JOPAR 20710, JIPAR 20712, and IOPAR 20714 are connected to inputs of PRMUX 20720, which is comprised of corresponding sets of tri-state driver circuits (for
example, SN74S244s).

Referring first to IO Port 20910, including IOPAR 20714, IO Port Request Registers (IOPRR) 21218 receive 36 bits of request information from IOM Bus 10130. This information includes Physical Page Number (PPN), Physical Page Offset (PPO), Length
Field (BLN), and an Encache Bit indicating whether data to be written into MEM 10112 is to be encached in MC 20116 and is loaded directly into IOPRR 21218. Adder 21240 receives BLN and the five least significant bits of PPO and adds these inputs to
generate a five bit Final Bit Within-A-Word Address (FBA(0-4)), which is then loaded into IOPRR 21218.

As will be described in a following description, FBA(0-4) actually points one bit past actual final bit address and is subsequently corrected in later request processing. If calculation of FBA(0-4) results in a carry, and FBA(0-4) is not 0, then
the memory request is a cross word reference, that is the data item extends across a word boundary. This occurence is indicated by setting to one an IO Cross Word (IOCW) flag which is stored in IOPRR 21218.

Encode Logic (ENC) 21242 is a Read Only Memory (ROM) and combinatorial logic receiving the three bit operation code field, five least significant bits of PPO of address, and four bits of BLN. ENC 21242 encodes this information to generate a four
bit Next IO Operation (OP) code which is subsequently loaded into IOPRR 21218. Operation code field of an IOS 10116 request indicates only the general type of MEM 10112 operation to be executed in servicing a particular request. The actual operation
performed by MEM 10112 will depend upon the specific operation command and the address boundaries of the data item referred to in the particular memory request. For example, a byte granular length with a starting address aligned on a word boundary may
require MEM 10112 to execute a different operation than does a word granular length aligned on a word boundary.

IOPA input to IOPRR 21218 is, as previously discussed, a signal generated by MEM 10112 indicating that IO Port 20910 is available to accept a memory request from IOS 10116. IOPA is used in IOPRR 21218 as an enabling signal and, when asserted,
allows a memory request from IOS 10116 to be transferred into IOPRR 21218.

Three enabling signals to Gates 21224 of PRMUX 20720 gate the contents of IOPRR onto Bus 20738, which, as indicated in FIG. 212, is comprised of certain sub-buses. These enabling signals are generated by other portions of MIC 20122 logic
described in a following description. These enabling signals, the portions of IOPRR 21218's contents gated onto each of Bus 20738's sub-bus by each signal, and Bus 20738's sub-buses, are:

IO Port Select (IOPORTSEL)

(1) IOPORTSEL gates the low order five bits of PPO onto Starting Bit Address (SBA) Bus 21226, which transfers this information to FIU 20120. These low order five bits of PPO define a starting bit address within a word or, for block transfers,
define a starting byte address within a block.

(2) IOPORTSEL gates BLN (Length) onto BLN Bus 21214. Because IOS 10116 reads or writes at most 16 bits, or 16 bytes on block transfers, at a time the most significant bit of length information on BLN Bus 21214 is forced to zero.

(3) IOPORTSEL gates FBA (Final Bit Address) onto FBA Bus 21228 of Bus 20738. FBA defines a final bit address within a word or a final byte within a block address when block transfers are performed.

(5) IOPORTSEL gates IO Cross Word (IOCW) onto Cross Word (CROSSWORD) Line 21230 of Bus 20738. IOCW, together with any NEXTOP, are used within MIC 20122 to control the operation performed by MEM 10112 when the corresponding memory request is
serviced.

(6) IOS 10116 expects all data to be right aligned, half words with no fill or extension, or block aligned, 32 bit block transfers. As such, when servicing an IOS 10116 request, IOPORTSEL forces zeros onto two bit Alignment (ALIGN) Bus 21232 of
Bus 20738. ALIGN Bus 21232, as described further below, transmits alignment information to FIU 20120 where it is used in selecting data formating operations performed by FIU 20120 in servicing memory requests.

IO Block Selet (IOBLKSEL)

(1) IOBLKSEL gates two bits of word and block address information from PPO field of memory request onto NEXTDSW Bus 21212 through Word Address Multiplexer (WAM) 21234. WAM 21234 also receives a two bit word within block address information from
JOPAR 20710, and a two bit Load Sequence (LOADSEQ) Word and Block Address generated by MIC 20122. As will be discussed further below, LOADSEQ is generated by MIC 20122 during MC 20116 block load operations, and is used to select blocks to be loaded into
MC 20116's cache. The selection of which WAM 21234's inputs is transferred onto NEXTDSW Bus 21212 is determined by a two bit control input comprising signals Load Active (LOADACT) and Automatic Word Operation (AUTOWORDOP). AUTOWORDOP selects whether
NEXTDSW Bus 21212 will receive two bits of word and block address information from one of requestor JOPAR 20710, JIPAR 20712, and IOPAR 20714, or from Request Manager (RM) 20722. LOADACT selects WAM 21234 input LOADSEQ during block loads of MC 20116.
NEXTDSW Bus 21212 two bit word address information is, as described in a following description, used to determine a next word to be referenced in MC 20116's cache.

As previously described, IOS 10116 may suggest to MEM 10112 whether MEM 10112 should encache data access by block operations that might otherwise by-pass MC 20116's cache. Encache bit of IOS 10116 memory request is received and stored in IOPRR
21218 and passed directly from there to other portions of MIC 20122 through single bit IO Encache (IOENCACHE) Bus 21236. If IOENCACHE bit is set to 1, MEM 10112 may not perform a MC 20116 cache by-pass operation in servicing that particular memory
request. If IOENCACHE bit is not set to one, MEM 10112, and in particular MIC 20122, decides whether a block access operation must go through MC 20116's cache, depending upon whether the referenced data is presently encached or not.

Referring to JOPAR 20710, JPO Port 21010 requests are received and stored in Job Processor Operand Port Request Register (JPOPRR) 21233. Contents of JPOPRR 21238 include a PPN field, a PPO field, a BLN field and a FIU field, a destination (DEST)
field, an OP field, and a CROSSWORD field PPO field includes a 7 bit block-within-physical-page (PLA) field, a two bit word-within-block (WD) field, and a 5 bit bit-within-word (BIT) field. The PPN, PPO, BLN, FIU, and DEST fields into JPOPRR 21233 are
received directly from JP 10114 as, respectively, JPPN(0-12), JPPO(90-13), JLNG(0-5), JFIU10-1), and JMDST or EBMDST, which have been previously discussed with reference to MEM 10112's interface to JP 10114. FBA and CROSSWORD fields of JPOPRR 21233 are
generated by Adder 21240 from the five least significant bits of JPPO(0-13) and the 6 bits of JLNG(0-5) in a manner similar to that discussed with reference to IOPAR 20714. NEXTOP field is generated by Encoder (ENC) 21242 from the five least significant
bits of JPPO(0-13), the 6 bits of JLN(0-5) and 3 bit JMCMD(0-2).

(4) JOPORTSEL gates 2 bit FIU field onto ALIGN Bus 21232 to FIU 20120 for use in data formating operations. It should be noted, as described further below, that ALIGN Bus 21232 does not go directly to FIU 20120, but to RM 20722 which generates
corresponding control signals to FIU 20120.

(5) JOPORTSEL gates 4 bit NEXTJPOP field onto REQOP Bus 21216. As previously described, next operation information on REQOP Bus 21216 is used by MIC 20122 in determining what type of MEM 10112 operation is to be performed in servicing the
associated memory request.

(1) JOBLKSEL gates BLK field of PPO field onto bits 13 to 19 of TSA Bus 21210. As previously described, TSA Bus 21210 transfers BLK field to MC 20116 for use in addressing MC 20116's cache.

(2) JOBLKSEL gates WD field of PPO field to an input of WAM 21234. As previously described, WAM 21234 may then switch WD field onto NEXTDSW Bus 21212 to MC 20116 for use in addressing MC 20116's cache.

(1) LATEPAGESEL may gate PPN (JPPN(0-12)) directly from PD Bus 10146 to bits 0-12 of TSA Bus 21210. LATEPAGESEL may do so, for example, when MEM 10112 and, in particular, MIC 20122 begins execution of a request from JP 10114 on the clock cycle
immediately following the request. PPN (JPPN(0-12)) will always arrive one clock cycle after the request, as described in a following description, and will be landed into JPOPAR 21233, or JPIPRR 21248. LATEPAGESEL allows PPN to by pass JPOPRR 21233 and
JPIPRR 21248 to TSA Bus 21210 to be available for use during the same clock cycle in which it is received. It should be noted that PPN is loaded into JPOPRR 21233 by TOOKJO, rather than by JOPORTAV.

Finally, 2 bit DEST field, JMDST, and EBMDST, are provided directly to MIC 20122 through JP Operand Destination (JODEST) Bus 21246 as two bit signal JODEST. JODEST is used by MIC 20122 in generating control signals DAVEA and DAVEB to JP 10114 in
indicating destination of data being read from MEM 10112 in response to the associated memory request.

Referring to JPI Port 21110, JPI Port 21110 may accept only one type of memory request, a 32 bit, word aligned read request. As will be described in a following description of JP 10114, destination of all JPI 21110 memory requests is an
instruction buffer in JP 10114. JPI Port Request Register (JPIPRR) 21248 therefore contains only a 13 bit PPN field (JPPN(0-12)) and a 14 bit PPO field (JPPO(0-13)), both received from PD Bus 10146. In addition, PPO field in JPIPRR 21248 stores only 7
bit block within page field (BLK) and 2 bit word within block field (WD). JPIPRR 21248 is enabled to accept a memory request input from PD Bus 10146 by enable signal inputs JIPORTAV previously discussed, and Took JI Port (TJIP) in a manner as previously
described with reference to JPO Port 21010.

Enable signals JI Page Select (JIPAGESEL), JI Block Select (JIBLKSEL), and JI Port Select (JIPORTSEL) gate JPIPRR 21248 contents, and a hard wire control signal described below, through Gates 21250 of PRMUX 20720. These enable signals, the JPIRR
21248 fields gated by these enabling signals, and the sub-buses of Bus 20738 to which these fields are gated, are:

(1) JIBLKSEL enables WD field of PPO field to an input of WAM 21234 where it may be subsequently gated onto NEXTDSW Bus 21212 as previously described.

(2) JIBLKSEL gates block on page field BLK of PPO field onto bits 13 to 19 of TSA Bus 21210, where in turn it is provided to MC 20116 for use in addressing MC 20116's cache.

JIPAGESEL

(1) JIPAGESEL gates 13 bit PPN field onto bits 0-12 of TSA Bus 21210, where this information is provided in turn to MC 20116's for use in addressing MC 20116's cache.

Referring to LDPTR 20724, LDPTR 20724 data inputs are connected from outputs of PRMUX 20720 to receive 13 bits of PPN field and 7 bits of BLK field from IOPRR 21218, JPOPRR 21238, and JPIPRR 21248. LDPTR receives and stores PPN and BLK fields of
the memory request in an outstanding cache load to be serviced. In particular, LDPTR stored PPN and BLK fields of the currently outstanding cache load operation being performed by MEM 10112 in servicing a memory request. Enable signal Any Load
(ANYLOAD) enables LDPTR 20724 to receive PPN and BLK fields of any memory request currently being serviced Load Address Select (LOADADRSEL) enable signal to gates 21252 of PRMUX 20720 may transfer the stored PPN and BLK fields of LPTR 20724 onto,
respectively, bits 0-12 and bits 13-19 of TSA Bus 21210 As previously described, PPN and BLK information on TSA Bus 21210 is transferred to MC 20116 for addressing of MC 20116's cache.

PPN and BLK fields of LDPTR 20724 are used by LM 20730, described below, to provide addressing information to MC 20116's data cache during cache load operations. LDPTR normally samples TSA Bus 21210's PPN and BLK fields during service of each
memory request until a MC 20116 cache miss occurs. Upon occurrence of such a miss, LDPTR is locked, storing PPN and BLK fields of the memory request resulting in a MC 20116 cache miss. LM 20730 may subsequently use LDPTR 20724's PPN and BLK fields to
load the data from MSB 20110 into MC 20116. Upon return of the necessary data from MSB 20110 to MC 20116, LM 20730 may use LDPTR 20724's PPN and BLK fields to update MC 20116's cache tag store and address MC 20116's cache and for loading the data into
MC 20116's cache.

Associated with LDPTR 20724 is comparator 21254. Comparator 21254 compares BLK fields currently present on bits 14-19 of TSA Bus 21210 to LDPTR 20724's BLK field. Comparison of TSA Bus 21210 and LDPTR 20724 BLK fields detects the event of an
attempted access to an MC 20116 cache slot currently awaiting updating by transfer of data from MSB 20110. Such a "collision" will result in the conflicting, or second, request to await execution until MC 20116's cache is updated by being loaded with
data from MSB 20110. Service of the second, colliding, request is delayed to prevent a change in usage and dirty bit state of the MC 20116 cache block currently waiting updating and which was determined at the time of the original MC 20116 cache miss.
A pending MC 20116 cache update does not affect access to other blocks in MC 20116's cache.

Referring to Increment Register (INCREG) 21211, INCREG 21211 is used by RM 20722 to generate MC 20116 addresses, that is a PPN, BLK, and WD field, for memory requests crossing word boundaries and for flushing of MC 20116's cache. Upon occurrence
of a memory request crossing word boundaries, two least significant bits of PPN field the 7 bits of BLK field and 2 bits of WD field from IOPRR 21218, JPOPRR 21233, or JPIPRR 21248 are read from PSA Bus 21210 to a first input of Adder 21256. Two other
inputs to Adder 21256 are single bit inputs ADDFOUR and ADDONE. In event of cross word memory request, MC 20122 asserts input ADDONE to Adder 21256. Adder 21256 then generates an output equal to the word address, that is PPN, BLK and WD fields, of the
cross word memory address plus one. Word address output of Adder 21256 is thereby that of the second word of the cross word memory request. Adder 21256 output is then transferred into INCREG 21211 upon occurrence of enabling signal Increment Register
Enable (INCREGE). In servicing the cross word memory request, RM 20722 will transfer PPN, BLK, and WD fields of IOPRR 21218, JPOPRR 21238, or JPIPRR 21248 to TSA Bus 21210 as first word address of the cross word memory request. Subsequently, RM 20722
will transfer BLK and WD field of INCREG 21211 to TSA Bus 21210 as second word address of the cross word memory request. Contents of INCREG 21211 are transferred onto TSA Bus 21210 through Gates 21258 of PRMUX 20720. Enabling signals Increment Block
Select (INCBLKSEL) and. Increment Page Select (INCPAGESEL) to Gates 21258 are used, respectively, to transfer BLK and WD fields and PPN field to TSA Bus 21210. The original PPN is not incremented as a cross word operation and can not cross page
boundaries.

As previously stated, RM 20722 may also use INCREG 21211 in flushing MC 20116's cache. In such flush operations, MC 20116's cache is scanned to determine which words stored therein are "dirty", that is have been written on to so as to contain
different data than the original copies of these words stored in MSB 20110. For these purposes, PPN, BLK and WD fields of INCREG 21211, that is starting address of MC 20116 cache locations, and ADDFOUR input to 21256 is enabled. INCBLKSEL and
INCPAGESEL are then asserted to transfer address onto TSA Bus 21210. Addresses transferred onto TSA Bus 21210 are fed back to Adder 21256's first input, and increased by four by Adder 21256's ADDFOUR input, and transferred into INCREGE 21211 by enable
input INCREG. INCREG 21211 thereby generates successive word addresses incremented by four, and thereby generates successive block addresses for MC 20116 cache. Whenever, as will be described in the following description, MC 20116 detects a "dirty"
block during a "FLUSH" operation, that block is written back into MSB 20110.

Having described the structure and operation of JOPAR 20710, JIPAR 20712, IOPAR 20714, PRMUX 20720, LDPTR 20724, and INCREG 21211, Port Control (PC) 20716 will be described next below.

2. Port Control 20716 (FIG. 213)

Referring to FIG. 213, Port Control (PC) 20716 is shown. Due to the large number of interconnections between logic elements of PC 20716, and between PC 20716 and other circuits of MIC 20122, signal interconnections are not shown by connecting
lines but, for clarity of presentation, are indicated by commonality of signal names between common electrical points.

Major functional elements of PC 20716, and certain of their functions, are:

(2) Port Wait Flag Logic (PWF) 21312; PWF 21312 generates port waiting signals, discussed previously, whenever RM 20722 attempts to service a request at a memory port and is unable to do so. Any port having an asserted waiting flag signal is
masked from the priority queue, described below, that is inhibited from receiving service, until that port's waiting flag is removed.

Referring to PRS 21310, PRS 21310 includes logic for each MEM 10112 Port, that is IO Port 20910, JPO Port 21010, and JPI Port 21110, for determining and tracking the validity of each request to each of these ports and availability of each of
these ports to JP 10114 and IOS 10116. A first set of signals generated by PRS 21310, IOPA and IOPA, JOPA and JOPA, JIPA and JIPA, indicate, respectively, whether IO Port 20910, JPO Port 21010, and JPI Port 21110 are available to accept memory requests. A second set of signals, IO Request Valid (IOREQVALID), JO Request Valid (JOREQVALID), and JI Request Valid (JIREQVALID) indicate whether a particular memory request to, respectively IO Port 20910, JPO Port 21010, or JPI Port 21110, is valid. Port
Available and Port Request Validity signals are generated concurrently by PRS 21310.

Inputs to PRS 21310 include IOREQVALID, JOREQVALID, and JIREQVALID from outputs of Register 21320. These inputs serve PRS 21310 as an indicator of a current state of Port availability as previously determined by PRS 21310. Input Hand-Off-Next
(HANDOFFNXT) from another portion of MIC 20122 (described below) indicates that a next operation to be performed is a Hand Off operation as previously described. Input Reset Request (RESETREQ) is a reset signal generated by MIC 20122 indicating that a
currently serviced request valid flag is to be reset, that is terminated. Inputs IO Port Select (IOPORTSEL) and IO Previous Port (IOPREVPORT) are MIC 20122 generated signals indicating, respectively, that IO Port 20910 is currently selected for service
and that IO Port 20910 was the port to be serviced selected for service on the previous clock cycle. Input (TMLOCKIO) is provided via FIU 20120 and indicates that the request valid flag and port available signal for IO Port 20910 is to remain unchanged;
this is a test and diagnostic function. Load Port (LOADPORT) is a two bit input generated by another portion of MIC 20122 and indicating which Port, of IO Port 20910, JPO Port 21010 or JPI Port 21110, is currently having data loaded into MC 20116's
Cache on its behalf. LOADPORT is provided from LOAD POINTER 20724, and is used to determine which request valid to reset on a handoff. Taking IO Requests (TAKINGIOREQ) is an MIC 20122 generated signal indicating that an IO Port 20910 request is
currently being accepted and setting the IO request valid flag. JOPORTSEL and JIPORTSEL, JOPREVPORT and JIPREVPORT, TMLOCKJO and TMLOCKJI, and TAKINGJOREQ and TAKINGJIREQ are similar in function and operation to, respectively, IOPORTSEL, IOPREVPORT,
TMLOCKIO, and TAKINGIOREQ. Inputs JO Aborted (JOABORTED) and JI Aborted (JIABORTED) are MIC 20122 generated signals indicating, respectively, that a JPO Port 21010 or JPI Port 21110 request has been aborted. Input Request Finish (REQFINISH) is
generated by other portions of MIC 20122 to indicate conclusion of servicing of a memory request. Input Keep Request Valid (KEEPREQVLD) is generated by other portions of MIC 20122 to indicate that while a current request may not be serviced immediately,
for example due to a need to transfer requested data from MSB 20110 to MC 20114, the request will be retained and serviced when possible. KEEPREQVLD also resets the reset valid flag, which would have been reset in anticipation of completion of the
request. Input TMDEPEXAM is a test and diagnostic signal set by DP 10118 to force all ports to appear busy to the requestors.

In summary, as described above and as previously described, PRS 21310's Port availability outputs, that is IOPA, IOPA, JOPA, JOPA, JIPA and JIPA, indicate when a particular port is available to receive a memory request. PRS 21310's request valid
outputs, that is IOREQVALID, JOREQVALID, and JIREQVALID indicate when a particular port has a currently outstanding valid request. A LOADPORT Signal, that is LIOR, LJOR, or LJIR, from JP 10114 or IOS 10116 will result in the corresponding port
availability flag being set and the corresponding request entering the priority queue for service. Either RM 20722 or JP 10114 may reset the corresponding port availability and request valid flag for JP 10114. JP 10114 may abort a memory request for
either JPO Port 21010 or JPI Port 21110. An abort resets both the corresponding ports validity and availability flag, and terminates processing the corresponding request. There is one flag per port, as described, and both the request valid and port
available signals are derived from the same signal. RM 20722 may reset a particular port availability and port request flag to indicate request not valid and port available on the last sequence of the service sequence for that particular port request.
If the request valid flag is set by DP 10118, it will remain set and continuously executed; if it is reset by DP 10118, it cannot be set by a requestor. In addition, FIU 20120 may send signals TMLOCKIO, TMLOCKJO, or TMLOCKJI, to PRS 21310 to lock,
respectively, IO Port 20910, JPO Port 21010, or JPI Port 21110 and prevent the port from changing state. A port so locked results in PRS 21310 indicating that the port is unavailable. In general, TMLOCKIO, TMLOCKJO, and TMLOCKJI are used for test and
diagnosis of MEM 10112. It should be noted that, in general, PRS 21310's request validity and port availability outputs are based upon current information loaded into JOPAR 20710, JIPAR 20712, and IOPAR 20714 and thus represent each particular port's
validity and availability state, that is the current state of the request being serviced for a particular port.

It may be necessary to suspend service of a particular port's request because RM 20722 is currently unable to service that request. Such events may occur, for example, when an IO request "collides", that is conflicts with, a MC 20116 cache load
or because of a conflict with a by-pass read operation. PWF 21312 includes combinatorial logic for generating flags indicating when particular ports are forced to wait for service. These flags are IO Wait For Bypass Read (IOWAITBYRD), IO Wait For Cache
Load (IOWAITLOAD), JO Waiting Cache Load (JOWAITING), and JI Waiting Cache Load (JIWAITING). These signals are generated as outputs of PWF 21312 and stored in 4 bit PWF Registers (PWFR) 21322. Inputs to PWF 21312 include Set Wait For Bypass Read
(SETWATBYRD) generated by other portions of MIC 20122 and indicating that the current IO request must wait for an IO BYPASS READ operation, which is in the pipeline, to complete. Input Stop (STOP) is generated by MIC 20122 and is used to synchronize MEM
10112 with IOS 10116 and JP 10114 when CS 10110 is placed in a test and diagnostic single pulse operating mode. Input Any Bypass Read (ANYBYD) is generated by MIC 20122 upon any MC 20116 Bypass Read Operation and remain valid as long as a Bypass Read is
in the pipeline Input Set Wait Load (SETWATLOAD) is also generated by MIC 20122 whenever a MC 20116 cache load operation is being initiated. Inputs IO PREVPORT, JOPREVPORT, JIPREVPORT indicate that, respectively, IO Port 20910, JPO Port 21010, or JPI
Port 21110 was the particular port serviced the previous clock cycle. PWF 21312 uses these inputs to determine which port was serviced by RM 20722 the previous clock cycle and must wait until, for example, a cache load is completed. As indicated in
FIG. 213, PWF 21312's outputs IOWAITBYRD, IOWAITLOAD, JOWAITING, and JIWAITING are provided as inputs to PWF 21312 to indicate to PWF 21312 current status of those ports waiting service.

In summary, RM 20122 may attempt to service a particular port's request and be unable to do so. In such occurrences, that port is flagged as waiting and is masked from priority queue, described below, until that port's wait flag is removed PWF
21312 sets a bit in PWFR 21322 whenever a request must be so suspended. For JP 10114, a wait may occur, for example, on a collision with a MC 20116 cache load. An IOS 10116 request may be required to wait after a collision with a MC 20116 cache load or
because of a conflict with a bypass read operation. A port waiting flag will mask that port's current request, but leaves the corresponding request valid flag output of PRS 21310 and PRSR 21320 set, indicating a valid request. Completion of a MC 20116
cache load operation may reset all waiting flags except IOWAITBYRD, indicating that IO Port 20910 is waiting upon a bypass read operation IOWAITBYRD may be reset at the end of that by-pass read operation. Waiting flag outputs of PWFR 21322 will continue
to be set on each system clock cycle during which FUTURELOAD is asserted, indicating that a cache load is in the pipeline of BC 20114. IOWAITBYRD flag will be set on each system clock cycle during which ANYBYRD is asserted, indicating that a by-pass
read operation is in the pipeline of BC 20114. Removal of inputs FUTURELOAD or ANYBYRD allows corresponding wait flag outputs of PWFR 21322 to be reset and allows any port previously having had a wait flag due to FUTURELOAD or ANYBYRD to be returned to
request priority queue.

RPS 21314 determines a priority for each request received by IO Port 20910, JPO Port 21010, and JPI Port 21110 and selects the highest priority port for service. This priority determination is performed upon each system clock cycle and
determines the port to be serviced on next system clock cycle. Port selection is encoded and loaded into Request Priority Selection Register (RPSR) 21324 as two bit code output, Port Select (PORTSEL) 1 and Port Select (PORTSEL) 0. Encoding for port
selection may be: 00, no request is outstanding and no port is selected; 01, select JPO Port 21010 for service; 10, select JPI Port 21110 for service; and, 11, select IO Port 20910 for service. Other outputs of RPS 21314 include Start New Request
(STARTNEWREQ) and Use Late Page (USELATEPAGE). STARTNEWREQ indicates that service of a selected request is to be initiated, and jams RM 20722 to begin execution at sequence count 1 indicates, as previously described with reference to JOPAR 20710, and
JIPAR 20712 that PPN field of a request will be accepted onto TSA Bus 21210 by bypassing JPORPAR 21238 and JPIPRR 21248.

Inputs to RPS 21314 include IOREQVALID, IOPA, and LIOR relating to IO Port 20910, and corresponding signals relating to JPO Port 21010 and JPI Port 21110. RP 21314 inputs also include IOWAITBYRD, IOWAITLOAD, JOWAITING, and JIWAITING. Input
Select Next Request (SELNEXTREQ) is an output of RM 20722 indicating that the next port to be serviced is to be selected. Unless SELNEXTREQ is asserted, next port to be serviced is the same port as on previous system clock cycle.

Each port, IO Port 20910, JPO Port 21010, and JPI Port 21110, has two possible request histories, that is old request and new request. An old request is one for which a REQVALID flag, described above, is asserted. A new request is one for which
a port available signal, that is IOPA, JOPA, or JIPA, has been asserted and for which the requestor has asserted a load request signal, that is LIOR, LJOR, or LJIR. RPS 21314 internally generates six "request ready" signals indicating whether there is
currently present a valid old or new request for IO Port 20910, JPO Port 21010 and JPI Port 21110. As will be described momentarily, these six possible request ready signals are ranked in priority, and a particular request ready signal will mask all
request ready signals of lower priority. RPS 21314 will therefore see and act upon only one such internally generated request ready signal in generating outputs PORTSEL 1 and PORTSEL 0. Any request ready signal will result in RPS 21314 asserting
STARTNEWREQ which, in turn, may force RM 20722 to initiate a sequence servicing the selected request. PPN always follows the other fields of a request by one clock cycle. If RM 20722 begins execution of a JPI Port 21110 or JPO Port 21010 immediately
upon receipt of a request, PP will by-pass JPOPAR 21238 or JPIPRR 21248 to TSA Bus 21210 to avoid a register delay in initiating request execution. When, therefore, the selected request is a new JPO Port 21010 or JPI Port 21110 request, RPS 21314 will
assert USELATEPAGE, thus enabling the late arriving PPN field of the request to TSA Bus 21210. RPS 21314's internally generated request ready signals are, in descending order of priority:

(1) Old IO Ready (OLDIORDY) is asserted if IOREQVALID is asserted and IO Port 20910 is not waiting a cache load or bypass read to complete, that is IOWAITBYRD and IOWAITLOAD are not asserted. OLDIORDY is suppressed if IOPORTSEL is asserted
because IO Port 20910 is already being serviced.

(2) Old JO Ready (OLDJORDY) is asserted if JOREQVALID is asserted and JPO Port 21010 is not awaiting a MC 20116 cache load to complete, that is JOWAITING is not asserted. OLDJORDY is suppressed if JOPORTSEL is asserted because JPO Port 21010 is
already being serviced. OLDJORDY will not be asserted if higher priority OLDIORDY is asserted.

(3) Old JI Ready (OLDJIRDY) is asserted if JIREQVALID is asserted and JI Port 21110 is not awaiting a MC 20116 cache load to complete, that is JIWAITING is not asserted. OLDJIRDY is suppressed if JIPORTSEL is asserted because JPI Port 21110 is
already being serviced. OLDJIRDY will be suppressed if higher priority signals OLDJORDY or OLDIORDY are asserted.

(4) New IO Ready (NEWIORDY) is asserted if IOPA and LIOR are asserted. NEWIORDY will be suppressed if OLDJIRDY, OLDJORDY, or OLDIORDY are asserted.

(5) New JO Ready (NEWJORDY) is asserted if JOPA and LJOR are asserted. NEWJORDY will be suppressed if NEWIORDY, OLDJIRDY, OLDJORDY, or OLDIORDY are asserted.

(6) New JI Ready (NEWJIRDY) is asserted if JIPA and LJIR are asserted. NEWJIRDY will be suppressed if NEWJORDY, NEWIORDY, OLDJIRDY, OLDJORDY, or OLDIORDY are asserted.

Address Selection Decoding (ADSD) 21316 generates enabling signals to JOPAR 20710, JIPAR 20712, IOPAR 20714, and PRMUX 20720, previously described, to select which memory request address fields will be gated onto, for example TSA Bus 21210.
These outputs of ADSD 21316 include LOADADRSEL, LATEPAGESEL, INCPAGESEL, JIPAGESEL, JOPAGESEL, IOPAGESEL, INCBLKSEL, JIBLKSEL, JOBLKSEL, IOBLKSEL, JIPORTSEL, JOPORTSEL, and, IOPORTSEL. Further outputs include Memory Idle (MEMIDLE), used within MIC 20122
as will be described below to indicate that MEM 10112 is not currently servicing a request. Outputs JIPORTSEL, JOPORTSEL, and IOPORTSEL from ADSD 21316 are stored in ADSD Register (ADSDR) 21326 to provide outputs, respectively, JIPREVPORT, JOPREVPORT,
and IOPREVPORT. These previous port signals, discussed previously, are port select signals delayed by one system clock cycle and are provided to JPABORT 21318 and, as previously discussed, PRS 21310 and RPS 21314. JIPREVPORT, JOPREVPORT, and IOPREVPORT
indicate the port serviced the previous clock cycle and are used to determine which port is to be aborted or set to waiting. Such decisions are made on system clock cycle after a port is selected, by JIPORTSEL, JOPORTSEL, and IOPORTSEL, as these port
select signals will not indicate the particular port to be aborted or set to waiting during the system clock cycle in which the port is selected since the port select signals may be referencing the service of another port.

Inputs to ADSD 21316 include PORTSEL 1 and PORTSEL 0. PORTSEL 0 and 1 are the primary signals from which ADSD 21316 outputs are generated. Generation of block and page address selection signals by ADSD 21316 is further controlled by inputs Use
Late Page (USELATEPAGE), Use Increment Register 21211 Page field (USEINCPAGE), and Use Increment Register 21211 Block field (USEINCBLK). These inputs are generated by RM 20722 to indicate, for example when request address field gated onto TSA Bus 21210
is to be derived from Late Page Bypass around JPOPRR 21238 and JPIPRR 21248 or from INCREG 21211. USEINCPAGE, USEINCBLK, and USELATEPAGE are delayed by one clock cycle in ADSDUSE Register (ADSDUSER) 21328 for timing alignment purposes. Yet another
input to ADSD 21316 is RAWLOADNEXT which is asserted by LM 20730 when a MC 20116 cache load operation will occur on next system clock cycle. In such cases, block and page address fields gated onto TSA Bus 21210 are taken from block and page address
fields of LP 20724 during that next system clock cycle. RAWLOADNEXT is delayed by one clock cycle in ADSD Cache Load Next (ADSDCLN) register 21330 for timing alignment purposes.

As previously described and will be described further below, JP 10114 performs a number of check operations on validity of JP 10114 references to MEM 10112. If a JP 10114 memory request fails these validity checks, JP 10114 may abort that
request by providing control signal ABORT to MEM 10112 more particularly to JPABORT 21318 of MIC 20122. Such abort requests may arise due to a protection violation, referred in earlier descriptions of CS 10110's Protection Mechanisms 10230, or due to
lack of logical to physical address translation as described in Addressing Structures 10220. In general, JP 10114 may discover that a request to MEM 10112 should be aborted only after that request has been accepted by MEM 10112. JP 10114 may then send
an abort request to MEM 10112. A JP 10114 memory request to be aborted may be queued up and waiting for service, or may have already begun execution. In the first case, the corresponding request validity flag, as previously described with reference to
PRS 21310, will be reset and JP 10114 may submit further memory requests. In a second case, the JP 10114 request to be aborted is currently being serviced and is forced inactive, that is the RM 20722 sequence servicing that request is terminated.

JPABORT 21318 is comprised of a set of combinatorial gating, for example, SN74S00s and SN74S02s. Associated with JPABORT 21318 is Abort Register (ABORTR) 21332, for example a SN74S194. Outputs of JPABORT 21318 include Taking JO Request
(TAKINGJOREQ) and Taking JI Request (TAKINGJIREQ), both of which have been previously discussed with reference to PRS 21310. TAKINGJOREQ indicates that MEM 10112 is receiving a memory request from JPO Port 21010, that it is receiving a LJOR from JP
10114. TAKINGJIREQ similarly indicates that MEM 10112 is receiving a JPI Port 21110 request, that it is receiving a JIPA from JP 10114. Outputs Took JO Request (TOOKJOREQ) and Took JI Request (TOOKJIREQ) from ABORTR 21332 are JPABORT 21318 outputs
TAKINGJOREQ and TAKINGJIREQ outputs, respectively, delayed by one system clock cycle. TOOKJOREQ and TOOKJIREQ indicate, respectively, that MEM 10112 has just accepted memory requests from JPO Port 21010 and JPI Port 21110. As will be described now
following description, TOOKJOREQ and TOOKJIREQ are used by other portions of MIC 20122 in determining appropriate action to be taken in aborting a JPO Port 21010 or JPI Port 21110 request.

Outputs Abort Previous JO Request (JOPREVABRT), Abort Previous JI Request (JIPREVABRT), Abort JO Present Request (JOPRESABRT), and Abort Present JI Request (JIPRESABRT) of JPABORT 21318 indicate, respectively, whether MEM 10112 is to abort a
request that may have been active one clock cycle previously, or is presently active, or is a pending JPO Port 21010 or JPI Port 21110 request. These outputs are provided to another portion of MIC 20122 logic, which will be described further below.
Outputs JOPREVABRT and JIPREVABRT cause termination of RM 20722 sequences set up by services to the port one clock cycle previously. Outputs JOPRESABRT and JIPRESABRT result in cancellation of MEM 10112 requests for which service has been initiated and
is being serviced on the present system clock cycle. Request Aborted (JOABORTED) and JPI Port 21110 Request Aborted (JIABORTED). JOABORTED and JIABORTED are, as previously described, provided as inputs to PRS 21310 and indicate, respectively, that a
JPO Port 21010 or a JPI Port 21110 request has been aborted, and that the request valid flag is to be reset.

Inputs to JPABORT include ABORT, LJOR, and LJIR from JP 10114, JOPA and JIPA from PRS 21310, and JOPREVPORT, JIPREVPORT, JOPORTSEL, and JIPORTSEL from ADSD 21316, all of which have been previously discussed. Other inputs to JPABORT 21318 include
TOOKJOREQ and TOOKJIREQ, and JOABORTED and JIABORTED, which have also been previously discussed. These inputs indicate to JPABORT that a request from JP 10114 is to be aborted, what requests to JPO Port 21010 and JPI Port 21110 are currently or have
previously been received, and which of JPO Port 21010 and JPI Port 21110 was serviced on the previous clock cycle or is currently being serviced.

Having described structure and operation of MEM 10112 circuitry comprising MEM 10112's interfaces to JP 10114 and IOS 10116, that is JPAR 20710, JIPAR 20712, IOPAR 20714, PRMUX 20720, and PC 20716, together with other related circuitry, MEM
10112's primary control structure will be described next.

3. MIC 20122 Control Circuitry (FIGS. 214-237)

Primary control of MEM 10112 is provided by Request Manager (RM) 20722 with associated trailer condition logic described below, MISS Control (MISSC) 20726, Read Queue (RQ) 20728, Load Manager (LM) 20730, Bypass Read/Write Control (BR/WC) 20718,
and other associated circuitry. As will be described below, RM 20722 includes an array of Programmable Read Only Memories (PROMs) containing sequences of microinstructions for controlling operation of MEM 10112 in response to each possible memory
request submitted by JP 10114 and IOS 10116. RM 20722 microinstruction sequences may, during executon, be altered by operation of jam and interrupt operations described below. RM 20722 microinstruction sequences may also be altered by trailers.
Trailers are conditionally executed commands, executed or not on the clock cycle after the command is issued. A trailer action is a conditional action occurring under control of MIC 20722's trailer condition logic in response to occurrence of a trailer
condition in MEM 10112's operation. Trailer actions affect or modify the normal sequence of RM 20722 microinstruction sequences, or conditionally allow certain commands to be executed. There may be one or more trailer actions associated with each RM
20722 microinstruction sequence for servicing memory requests. In general, a trailer action will be executed only if that trailer action's associated trailer condition occurs. MEM 10112 will therefore execute request servicing operations of the form:
in response to memory request A execute RM 20722 microinstruction sequence B, but if trailer sequence C occurs then execute trailer action D, or if trailer condition E occurs execute trailer action F and so on.

As stated above, primary control of MEM 10112 operation is provided by RM 20722 and MIC 20122's trailer condition logic. During servicing of a memory request RM 20722 and MIC 20122's trailer condition logic will provide sequences of
microinstructions, that is control signals, to subsidiary MIC 20122 control "nodes". Each control node will in turn execute a limited sequence of related actions necessary to execute these microinstructions. Certain nodes may be simple conditional
commands (control signals), rather than sequences of microinstructions. It is these subsidiary control nodes which actually execute MEM 10112 trailer actions. Among MIC 20122's subsidiary control nodes include MISSC 20726, RQ 20728, LM 20730, BR/WC
20718, and PC 20738 and LP 20724 which have been previously described. These MIC 20122 control nodes in turn provide control signals to JOPAR 20710, JIPAR 20712, IOPAR 20714, PRMUX 20720, INCREG 21210, BY/WF 20118, MC 20116, and BC 20114. MC 20116 also
receives certain control direct control signals from RM 20722 while all direct control of FIU 20120 is provided directly from RM 20722.

a.a. Request Manager RM 20722 (FIG. 214)

Referring to FIG. 214, RM 20722 is shown. RM 20722 includes Request Manager Prom Array (RMPA) 21410. RMPA 21410 is a 256 word by 68 bit array of, for example, 82S131 PROMs. A particular microinstruction sequence contained in RMPA 21410 is
selected by 8 bit address input comprised of 4 bit input REQOP and single bit input CROSSWORD, previously described with reference to PRMUX 20720, and 3 bit input Sequence Step (SEQSTP). REQOP and CROSSWORD together form a 5 bit address selecting a
particular microinstruction sequence to be executed. SEQSTP selects a particular step, or microinstruction, within that sequence. Each RM 20722 microinstruction sequence is executed within at most 6 steps which are defined as steps 001(1) to 110(6).
As will be discussed below, steps 000(0) and 111(7) are special steps of each sequence. In normal operation, SEQSTP is derived from Next Step (NXTSTP) output of RMPA 21410, which, for each step, defines the next step of that particular sequence. NXTSTP
is delayed by one system clock cycle, in Request Manager Prom Array Register (RMPAR) 21412, to become SEQSTP during the next system clock cycle. In normal operation, therefore, each request step chooses the following request step to be executed.
Execution of a microinstruction sequence for servicing a request therefore normally proceeds in numerical order of step from SEQSTP equals one until completion of the sequence. NXTSTP may, however, be overridden by a jam or interrupt operation and
SEQSTP forced to a different step number than that provided by NXTSTP output of RMPA 21410. A jam operation may be forced by inputs STRTNEWREQ and LOADACT to Jam Network (JAMN) 21414 which is connected between NXTSTP output of RMPA 21410 and RMPAR
21412's input. STRTNEWREQ, as previously discussed, indicates start of service of a new request and forces an NXTSTP value of one to RMPAR 21412's input. As previously described, SEQSTP equals one selects the first step of all RMPA 21410
microinstruction sequences. LOADACT, also previously described, forces the currently active port, that is the port whose request is currently being serviced, into waiting state as described with reference to PWF 21312. LOADACT input to JAMN 21414
forces a NXTSTP value of zero to RMPAR 21412's input. SEQSTP equals zero is, as previously discussed, a special step of each of RMPA 21410's microinstruction sequences. Step zero is the idle state of each microinstruction sequence. When in this step
of any microinstruction sequence, RM 20722 is waiting for a valid request from a port. Step zero is also entered at completion of service for any request if no other requests are valid and waiting execution. STRTNEWREQ and LOADACT therefore both
terminate a currently executing microinstruction upon occurrence of next system clock to RMPAR 21412. STRTNEWREQ will force RM 20722 to step one, that is the first step, of the microinstruction sequence for servicing a memory request whose service is to
begin upon that next system clock cycle, while LOADACT will force RM 20722 to an idle state, that is SEQSTP equals zero, to wait for a valid request.

Interrupts are initiated by INTERRUPT input to Request Manager Prom Array Gate (RMPAG) 21416. Assertion of INTERRUPT immediately forces SEQSTP to SEQSTP equals 7. Step 7 of each microinstruction sequence is an idle state similar to step zero
but is entered from an interrupted request sequence. That interrupted sequence may re-enter priority queue for subsequent service, that is the request is not aborted or otherwise discarded by MEM 10112. As in the case of being forced to step zero, RM
20722 may begin service of a new request from step 7, when a valid request is presented to RM 20722.

Certain conditions resulting in a jam or interrupt operation are, for example:

(1) A memory request accesses MC 20116's cache and an MC 20116 cache miss occurs. An RM 20722 interrupt results and RM 20722 is forced to SEQSTP equals 7. Unless this request is a bypass read or write operation, that request re-enters priority
queue for subsequent service when its wait condition is satisfied. That request will be forced to wait as a result of the cache load or a collision with a previous MC 20116 cache load address, that is an interfering request to an MC 20116 cache address
awaiting data to be loaded from MSB 20110.

(2) As will be described further below, LM 20730 may require concurrent use of TSA Bus 21210 and MC 20116's cache. LOADACT will be asserted and force a jam of SEQSTP equals zero. As previously discussed, LOADACT and REQACT will result in the
currently active port, that is the port whose request is currently being serviced, to enter waiting state. After MC 20116 cache load operation is completed, such waiting ports re-enter priority queue. It should be noted that LOADACT will suppress
assertion of SELNEXTPORT, so that all ports awaiting service are forced to continue waiting until MC 20116 cache load operation is complete.

(3) A JPO Port 21010 or JPI Port 21110 request may be aborted after RM 20722 has begun service of that request. RM 20722 is interrupted and forced to SEQSTP equals 7. As previously discussed, JPABORT 21318 will reset JOREQVALID or JIREQVALID as
required. The wait flags are not set.

(4) An IOS 10116 read operation from MC 20116's cache may be requested before an IO 10116 bypass read operation has completed. RM 20722 will be jammed to SEQSTP equals zero and IO Port 20910 will enter waiting state until bypass read operation
is completed. An IO Port 20910 wait is necesary so that data may return to IOS 10116 in the order in which it was requested.

(5) A memory request to flush MC 20116's cache may be submitted when flag OK To Flush (OKTOFLUSH), described below, is not asserted. RM 20722 will be jammed to SEQSTP equals zero and the flush request will be discarded. That request for a flush
will result in OKTOFLUSH being asserted, and any subsequent flush request will be executed. The wait flags are not set.

(6) A memory request requiring use of MC 20116's Write Back File may be submitted when the Write Back File is busy. RM 20722 will be forced to SEQSTP equals 7 and that request will be returned to priority queue. The wait flags are not set.

(7) Certain steps in microinstruction sequences servicing particular memory requests are non-interruptable, for example SEQSTP equals one of an IOS 10116 block read. RQ 20728, described below, may at this time contain indication of a request for
a MC 20116 cache load operation or a bypass read operation. RM 20722 will be forced to SEQSTP equals 7 and the non-interruptable request will re-enter priority queue for later service. The appropriate wait flag is set.

RM 20722 may receive a memory request to read BC 20114's error log while a request to BC 20114 is pending as will be described below, request to BC 20114's error log are not put in BC 20114's command queue thus resulting in a conflict for use of
MEM 10112's data buses, for example RDO 20158. RM 20722 will be forced to SEQSTP equals 7 and the memory request for read of BC 20114's error log will re-enter priority queue.

Considering first the four bit REQOP and single bit CROSSWORD fields of RMPA 21410's address, these fields select particular microinstructions sequences for controlling corresponding MEM 10112 operations to be performed in servicing memory
requests. Certain of these operation codes, that is REQOPs, the MEM 10112 operations specified by those operation codes, and the number of sequenced steps required to complete those operations, are:

(1) REQOP (0000)=Null Write: a null write operation is a request to write to memory with a length field of 0. No data stored in MEM 10112 will be altered by such an operation but, if a MIC 20116 cache block so referenced is not resident in MC
20116's cache, a load sequence will be initiated to transfer referenced data from MSB 20110 to MC 20116 cache. A null write operation is completed in one sequence step.

(2) REQOP (0001)=Bit Write: a bit write is any write to memory of a data item of 1 to 32 bits in length which requires a read and modify of MC 20116's cache contents in order to maintain correct parity of the corresponding data in MC 20116's
cache. Bit writes do not begin on a byte boundary or are not an integral number of bytes in length. A bit write requires three sequence steps for execution if the reference does not cross word boundaries, and requires five sequence steps for execution
if the request crosses word boundaries.

(3) REQOP (0010)=Rotate Write: rotate writes are writes of data items 8 to 32 bits in length, in multiples of 8 bits, which begin on a byte boundary. A rotate write operation requires one sequence step for execution if it does not cross word
boundaries, and requires two sequence steps if a cross word boundary operation is required.

(4) REQOP (0011)=Partial Block Write: partial block writes are block writes from IO 10116 which have a byte length of less than sixteen. Partial block write operations require loading of MC 20116's cache if the information is not already
encached. Partial block write operations may not by-pass MC 20116's cache. Starting address of a partial block write may be located anywhere within a block so long as it falls on a byte boundary. Length of a partial block write must be such that the
write does not overflow into an adjacent block. Partial block write operations require five sequence steps for completion.

(5) REQOP (0100)=Full Block Write: a full block write is a write of an entire sixteen byte block which begins on a block boundary. A full block write may be performed by a by-pass write operation if IOS 10116 does not request encaching of the
block and the block is not already encached. A full block write operation requires five sequence steps for completion.

(6) REQOP (0101)=Read and Set: in a read and set operation from 1 to 32 bits may be read and returned to the requestor, that is JP 10114 or IOS 10116. The particular bit pointed to by starting bit address is then set to one and written back into
MC 20116's cache. This is a non-interruptable memory operation. A read and set operation requires four sequence steps for completion if word boundaries are not crossed, and five sequenced steps if word boundaries are crossed.

(9) REQOP (1000)=Null Read: a null read operation results from any memory read request with a specified length of 0. No MEM 10112 data is transferred to requestor; a data word consisting of all zeros or all blanks, however, will be read to the
requestor depending upon certain FIU alignment bits specified in the memory request resulting in a null read operation. A null read operation requires two sequence steps for completion.

(10) REQOP (1001)=Bit Read: a bit read operation requires that the requested data to be read must be passed through FIU 20120, described in the following description, for either alignment, blank fill-in, or the operation crosses word boundaries
and requires assembly, or sign extension manipulation operations to be performed. All JP 10114 read requests of less than 32 bits or that are not word aligned are bit read operations. A bit read operation requires three sequence steps for completion if
word boundaries are not crossed, and four sequence steps if word boundaries are crossed.

(11) REQOP (1010)=Rotate Read: a rotate read operation is a read operation executed through FIU 20120. A rotate read operation rotates a data word from MC 20116's cache so that the requested data occupies least significant sixteen bits of MIO
Bus 10129. A rotate read operation requires two sequence steps for completion if word boundaries are not crossed, and four sequence steps if word boundaries are crossed.

(12) REQOP (1011)=Full Word Read: a full word read operation is executed when JP 10114 makes a memory read request for 32 bits aligned on a word boundary. This data is transferred directly from MC 20116's cache to JP 10114. A full word read
operation will also occur when IOS 10116 requests a read of sixteen bits of data which are already located in the least significant sixteen bits of a word. This data will be transferred directly from MC 20116's cache to IOS 10116. A full word read
operation requires one sequence step for completion.

(13) REQOP (1100)=Block Read: a block read operation transfers a sixteen byte block, beginning on a block boundary, to a requestor. A block read operation is eligible for a bypass read operation to IOS 10116 if IOS 10116 has not requested that
the requested data be encached in MC 20116's cache and the block is not already encached. A block read operation requires four sequence steps for completion.

(14) REQOP (1101)=Error Operation: an error operation will result from any memory request requesting RM 20722 to execute a memory request which is not valid for that particular requestor. An error operation results in an Invalid Operation
(INVALIDOP) flag being loaded into BC 20114 error log and an interrupt to the current error processor, either JP 10114 or IOS 10116. An error operation requires one sequence step for completion.

(15) REQOP (1110)=Repair Block: a repair block operation writes a block encached in MC 20116's cache back to MSB 20110, ignoring any MIC 20116 cache parity errors, and generating correct ERCC code for use in BC 20114 and MSB 20110. If a block
referred to in a repair block operation is not encached in MIC 20116's cache, it is brought to MC 20116 cache without logging of ERCC errors appearing upon transfer of the block from MSB 20110 to MC 20116's cache where the block is written back into MSB
20110 as described above. A repair block operation, as previously described, leaves the data undergoing repair block operation free of ERCC or MC 20116 parity errors. A repair block operation requires five sequence steps for completion.

(16) REQOP (1111)=Flush Cache: a flush cache operation is, as previously described, used only upon loss of power to CS 10110. A flush cache operation writes all "dirty" MC, 20116 cache blocks back into MSB 20110 if, as previously described,
OKTOFLUSH bit has been previously set. OKTOFLUSH may be set either by flush cache commands to MEM 10112 from both JP 10114 and IOS 10116, or by a flush cache command from either JP 10114 or IOS 10116 together with previous approval from DP 10118. A
flush cache operation requires five sequence steps per block flushed for completion.

Having described structure and operation of Request Manager 20722, structure and operation of RM 20722's associated trailer condition logic will be described next below.

b.b. Trailer Condition Logic 21510 (FIG. 215)

Referring to FIG. 215, Trailer Condition Logic (TCL) 21510 is shown. As previously described, TCL 21510 initiates conditional actions, the execution of which is dependent upon occurrence of certain conditions arising in MEM 10112 operation.
These conditional actions may either modify or assist in execution of microinstruction sequences provided from RM 20722 in response to memory request.

TCL 21510 includes Trailer Condition Encoding logic (TCE) 21512, which receives inputs from MIC 20722 and other portions of MEM 10112 circuitry representing current state of MEM 10112 operation in general, and Cache/Hit/Miss Encoding logic (CHME)
21514, which in general receives inputs regarding operation of MC 20116. Encoded outputs TCE 21512 and CHME 21514 are loaded into, respectively, Trailer Condition Encoding Register (TCER) 21516 and Cache/Hit/Miss Encoding Register (CHMER) 21518.
Encoded outputs of TCER 21516 and CHMER 21518 are provided as inputs to Trailer Decoding Network (TDN) 21520, together with other inputs representing current state of MEM 10112 operation. Outputs of TDN 21520 are provided to other portions of MEM 10112
circuitry, including MIC 20722, and are signals directing operation of MEM 10112 based upon certain conditions arising in operation of MEM 10112 on the current and previous clock cycles. Trailer Command Register (TCR) 21522 receives control signals,
generally from RM 20722, indicating certain MEM 10112 operations to be executed during the next microinstruction sequence step. These command signals will be transferred into TCR 21522 and provided as TCR 21522 control outputs to other portions of MEM
10112, including MIC 20722, at start of that next microinstruction sequence step. Certain of these TCR 21522 command signal outputs are gated, in Gates 21524, by an output of TDN 21520, to selectively suppress, depending upon certain trailer conditions,
certain of those operations if corresponding trailer conditions occur in MEM 10112 operation.

In summary, during a first clock cycle certain outputs of RM 20722 representing MEM 10112 operations to be initiated or executed during a second clock cycle are presented as inputs to TCR 21522. Concurrently, certain signals representing current
operating condition of MEM 10112 and MC 20116 are sampled and encoded by TCE 21512 and CHME 21514. Encoded outputs of TCE 21512 and CHME 21514 are then presented as inputs to TCER 21516 and CHMER 21518. At start of second clock cycle, TCR 21522 inputs
presented during first clock cycle are loaded into TCR 21522 and appear as TCR 21522 outputs representing RM 20722 selected operations to be initiated or executed during second clock cycle. Concurrently, encoded outputs of TCE 21512 and CHME 21514 are
transferred into TCER 21516 and CHMER 21518, to appear as TCER 21516 and CHMER 21518 outputs representing MEM 10112's state of operation during first clock cycle, that is MEM 10112's previous state of operation. At start of second clock cycle, these
encoded outputs of TCR 21516 and CHMER 21518, together with TDN 21520's other inputs representing a current state of MEM 10112 operation, are decoded by TDN 21520. TDN 21520 then provides, this time, outputs initiating certain MEM 10112 conditional
actions based upon previous and current state of MEM 10112 operation. One of these TDN 21520 outputs, Suppress Micro Trailer (SUPMCROTLR) is provided as a gating input Gates 21524 to prevent or otherwise modify certain MEM 10112 operations, previously
selected by RM 20722, which would otherwise have been initiated or executed during the second clock cycle. RM 20722 and TCL 21510 thereby provide MEM 10112 operation control based upon previous and current state of MEM 10112 operation of the form
"execute or initiate" operation A as selected by RM 20722 in response to memory request B, or if trailer condition C has arisen in MEM 10112 operation execute conditional action to D, or if trailer condition E has arisen execute conditional action F, and
so on.

Referring now to specific inputs and outputs of TCL 21510, inputs to TCE 21512 include Check Flush OK (CHKFLUSHOK), that is RM 20722 has initiated an operation to determine whether an MC 20116 cache flush is currently permissible, and OK TO Flush
(OKFLUSH) indicating that an MC 20116 cache flush operation may currently be performed. Input Operation Check Write Back File (OPCHECKWBF) and Write Back File Busy (WBFBUSY) respectively indicate that an operation to check current status MC 20116's
write back file is currently being performed and that MC 20116's write back file is currently busy, that is executing a write back operation. Input Operation is Non-Interrupt (OPISNONINT) indicates that a non-interruptable MEM 10112 operation is
currently being executed. Input Future Load (FUTURELOAD) indicates that an MC 20116 cache load operation is pending. Load Address Match (LDADDRMTCH), previously discussed with reference to JOPAR 20710 to IOPAR 20714 and PRMUX 20720, indicates that
memory request to an MC 20116 cache set currently awaiting a load operation has occurred Input IO Port Select (IOPORTSEL) previously discussed, indicates that IO Port 20910 is selected for service. Input Any Bypass Read (ANYBYRD) indicates that a bypass
read operation is being executed (that is a bypass read in the pipeline) while input Operation Read (OPREAD) indicates that a general read operation is being executed by RM 20722. Input Request Active (REQACTIVE) indicates that a memory request is
currently being actively serviced. Input Load Active (LOADACT) indicates that LM 20730 is currently actively loading MC 20116's cache. Input I/O Wait Bypass Read (IOWAITBYRD) indicates that a request in IO Port 20910 is currently waiting a bypass read
operation. Inputs Any Load (ANYLOAD) and Any Bypass Read (ANYBYRD) discussed above, represent respectively that an MC 20116 cache load operation is to be executed and that a bypass read operation is in the data queue pipeline waiting for data from BC
20114. Input Operation Log Access (OPLOGACCESS) indicates that a memory request requiring access to MC 20116's error log is being serviced. Input Operation Not Bypass Read or Write (OPNOTBYP) indicates that MEM 10112 operation currently being executed
does not require a bypass read or write. Input Test Memory Stop Bypass (TMSTOPBYP) indicates that a MEM 10112 test mode is prohibiting bypass read and write operations.

Inputs of CHME 21514 include No Hit (NOHIT) which indicates a request to MC 20116's cache has been made and there has been a cache miss, that is the requested data was not resident in MC 20116's cache. Inputs Test Mode Force Hit (TMFORCEHIT) and
Test Mode Force Miss (TMFORCEMISS) indicate, respectively, that a memory test mode is forcing an MC 20116 cache hit or miss. Inputs Operation Sure Hit (OPSUREHIT) and Operation Sure Miss (OPSUREMISS) forces, respectively, the cache miss signal in TCL
21510 to indicate a cache hit or miss.

Referring to inputs of TDN 21520, LOADACT, JOPREVABRT, JIPREVABRT, JOPRESABRT, JIPRESABRT, and NEWREQUEST have been previously discussed, as has TMSTOPBYP. Input Miss Busy (MISSBUSY) indicates that a memory request to MISSC 20726 has been made,
that a miss has resulted, and that MC 20116's cache is currently busy with another operation and will not presently be loaded with the required data from MSB 20110. As previously described, these inputs represent current state of certain MEM 10112
operations.

Outputs of TDN 21520, as discussed above, represent conditional actions to be executed by MEM 10112, as determined by previous and present MEM 10112 trailer conditions. Outputs Select LRU Slot Number (SSLRPL) and Select Physical Page Number
(SSLPPN) indicate, respectively, that the cache slot referenced will be forced to the least recently used slot number or the slot indicated by the two least significant bits of PPN sourced from INCREG 21211. Output Cache Missed (CACHEMISSED) indicates
that a memory request for data in MC 20116's has been submitted, the requested data was not resident therein, and that data must be loaded into MC 20116's cache from MSB 20110 or that a bypass read or write operation may continue. Output Suppress Micro
Trailer (SUPMCROTLR) is provided to Gates 21524 to suppress certain MEM 10112 operations selected by RM 20722. Output Suppress Bank Request (SUPBANKREQ) indicates that a read or write request to MSB 20110 is not to be executed. Output Suppress Bypass
Read/Write Trailer (SUPBRWTTLR) indicates that a by-pass read or write operation is not be be executed. Output Set Wait Bypass Read (SETWATBYRD) indicates that the current IO Port 20910 request is to be placed in waiting status for a previously
initiated by-pass read to complete, as previously discussed with reference to PWF 21312. Output Interrupt (INTERRUPT) indicates that RM 20722 currently servicing a memory request is to be interrupted. Output Stop Bypass Write (STOPBYPWRT) indicates
that a current request eligible for by-pass write operation will not by-pass MC 20116's cache. Output Sets Wait Load (SETWATLOAD) indicates that the current operation is to be set in waiting status for an outstanding cache load operation, previously
initiated, to be completed. Output Keep Request Valid (KEEPREQVLD), previously discussed, indicates that a current request is to remain valid, that is returned to priority queue but not to be currently executed

Inputs to TCR 21522, as previously described, are control signals from RM 20722 indicating certain MEM 10112 operations to be initiated or executed. These inputs include Take IO Data Next (TAKEIODNXT), indicating that upon next system clock
cycle a word of write data will be taken from IOS 10116 over IOM Bus 10130. Input Reset Log (RESETLOG) indicates that BC 20114 error log is to be reset as previously discussed. Flip Half Next (FLIPHALFNXT) indicates that FIU 20120 is to execute an
operation described in a following description of FIU 20120. Input Cache Read Next (CACHRDNXT) indicates that the next clock cycle is to be a read of MC 20116's cache. Similarly, inputs Cache Write Next (CACHWRTNEXT) indicates the next clock cycle is
to be a MC 20116 cache write operation. Input Operation Unload Next (OPUNLDNXT) indicates that the next clock cycle is to unload MC 20116's cache, reading a word from the cache to Write Back File (WBF) 23212 (described below). Input Add Four Next
(ADDFOURNXT) is an instruction to INCREG 21210, previously discussed, to increment the address stored therein by 4 words, for example during a MC 20116 cache flush. Input Invalidate Tag Next (INVTAGNXT) is a control signal to MC 20116's cache and will
be described further in a following description of MC 20116. Input Read Log (READLOG) indicates that MC 20114's error log is to be read to RDO Bus 20158. Read to FIU Next (RDTOFIUNXT) indicates that a next operation is to be a read to FIU 20120 from MC
20116's cache. Input Word 2 Next (WORD2NXT) is asserted during a cross word boundary read or write and indicates that the second word is to be read or written. Input Check Flush OK (CHKFLUSHOK) is asserted prior to an MC 20116 cache flush operation and
indicates that MEM 10112 operating state is to be checked to determine whether a MC 20116 cache flush operation may be executed.

Referring to outputs of TCR 21522, outputs Reset Log (RESETLOG), Data Store Write Enable (DSWE), and Read Log (READLOG) are gated by SUPMCROTLR, described previously with reference to TDN 21520. RESETLOG is a control signal indicating that BC
20114's error log is to be reset. READLOG is a control signal indicating that contents of BC 20114's error log are to be read. DSWE is an enable signal for writing data into MC 20116's Data Store (MCDS) 23220 (described below). Outputs Increment By
Four (INCBYFOUR) and Increment By One (INCBYONE) are control signals for incrementing INCREG 21211, INCBYFOUR incrementing MC 20116 address on a block by block basis while INCBYONE increments this address on a word by word basis. These outputs are gated
by LCLEAR which is asserted upon execution of a machine clear by DP 10118. Output Take Data (TAKEDATA) initiates acceptance of write data from IOS 10116. Output Flip Half (FLIPHALF) indicates that the FIU 20120 flip half operation is to be executed.
Outputs Cache Read Cycle (CACHRDCYC) and Operation Unload Cycle (OPUNLDCYC) indicate, respectively, that MC 20116's cache is to execute a read cycle or is to be read and written to WBF 23212. Output Invalidate (INVALIDATE) indicates that an MC 20116
cache tag store entry is to be invalidated. Read Input Data Load (RIDLD) indicates that read data from MC 20116's cache is to be loaded into FIU 20120. Output Word Two (WORD2) indicates that the second word of a cross word boundary read or write
operation is to be read or written. Output OK To Flush (OKTOFLUSH), previously discussed, indicates that an MC 20116 cache flush operation may be executed. This output is fed back to an input of TCR 21522 to sustain this operating state until MC
20116's cache has been completely flushed.

Having described the structure and operation of RM 20722 and associated Trailer Control Logic 21510, other subsidiary MIC 20122 control will be described next below, starting with Miss Control (MISSC) 20726.

c.c. Miss Control 20726 (FIG. 216)

Referring to FIG. 216, MISSC 20726 is shown. MISSC 20726 includes Miss Control Register (MISSCTRLR) 21610, with associated Gate 21612, and Bank Controller Request (BCRL) 21614. MISSCTRLR 21610 may be comprised of, for example, SN74S194
registers, Gate 21612 may be comprised, for example of, compatible gates, and BCRL 21614 may, for example, be comprised of 82S131 PROMs. Also included in MISSC 20726 is a Miss Address Register (MISADR). MISSC 20726's MISADR is functionally a part of
both MISSC 20726 and MC 20116's cache and resides in MC 20116. Operation of MISSC 20726's MISADR with respect to MISSC 20726 will be described in the following description of MISSC 20726 and will be further described in a following description of MC
20116.

Interconnections between MISSCTRL 21610, Gate 21612, and BCRL 21614 are indicated in FIG. 216 and will not be described further. Interconnections between MISSC 20726 and other portions of MEM 10112 are indicated by signal names appended to
inputs and outputs of MISSC 20726. These inputs and outputs will be individually described in the following description of MISSC 20726 operation.

As previously described, all data reads from MEM 10112 to JP 10114 or IOS 10116, with exception of bypass reads, are through MC 20116's cache. A MC 20116 cache miss will, however, occur if the data referenced on a particular memory read request
is not resident in MC 20116's cache. Upon occurence of such a cache miss, MISSC 20726 provides certain control signals, described below, to MB 20114 to transfer the requested data from MSB 20110 to MC 20116's cache. As will also be described below,
MISSC 20726 also generates control signals, pertaining to cache misses, to RQ 20728 and BR/WC 20718.

MISSCTRLR 21610 and MISSC 20726's MISADR together comprise a trap register for capturing information pertaining to memory read requests resulting in MC 20116 cache misses. As indicated in FIG. 216, data inputs to MISSCTRLR include REQOP from
PRMUX 20720, indicating the type of operation to be performed by MEM 10112 in servicing a currently active request, and Miss Enable (MISCE) from BCRL 21614 indicating whether MISSCTRLR 21610 and MISSC 20726's MISADR can be loaded or must hold its present
contents. As will be described shortly, MISCE is also provided as of enable input to MISSCTRLR 21610. Input REQACTIVE to Gate 21612 indicates whether a memory request is currently active and being serviced in MEM 10112. REQACTIVE is gated together
with STOP in Gate 21612 and STOP will sychronize BC 20114 with MIC 20122 when MEM 10112 is in single pulse test and diagnostic mode. Gate 21612's output to MISSCTRLR 21610 therefore indicates whether a memory request is currently active and being
serviced in MEM 10112 and MIC 20122 is receiving a system clock this cycle. MISSCTRLR 21610 is clocked on each system clock cycle so as to receive and store REQOP of the memory request currently active, current state of its own load enable (MISCE), and
whether a memory request is currently active in MEM 10112. Upon occurrence of an MC 20116 cache miss, Cache Missed (CACHMISSED) input to BCRL 21614 may result in assertion of MISCE output of BCRL 21614 which, in turn, disables MISSCTRLR. MISSCTRLR
21610 will therefore trap and store REQOP of the memory request resulting in the MC 20116 cache miss, the fact that a memory request was active, and the block address in MC 20116's MISADR, and the fact that MISSC 20726 was not at that time busy servicing
an MC 20116 cache miss. This information trapped in MISSCTRLR 21610 is provided to BCRL 21614 as, respectively, outputs REQOP, Request Was Active (REQWACT), and Miss Control Busy (MISSBUSY).

MISSC 20726's MISADR, located in MC 20116, is connected from TSA Bus 21210 from PRMUX 20720. MISSC 20726's MISADR thereby receives and stores page and block address fields of each memory request as service of that request is started. Upon
occurrence of an MC 20116 cache miss, MISSC 20726's MISADR will trap and store page and block address fields of the memory request resulting in an MC 20116 cache miss.

MISSC 20726 will use information stored in MISSCTRLR 21610 and MISSC 20726's MISADR together with other inputs to BCRL 21614, to generate a request to BC 20114 to transfer the required data from MSB 20110 to MC 20116's cache or to bypass the
cache on bypass reads and writes. This request will include a request to BC 20114 along with certain control information provided to LP 20724 and RQ 20728 which is required for correct servicing of MISSC 20726's request to BC 20114. MISSC 20726's
request to BC 20114 will include the address, that is block and page fields, of the required data from MISSC 20726's MISADR plus outputs Bank Command (BANKCMD) and Bank Start (BANKSTART) from BCRL 21614. BANKCMD is a three bit code determining what
operation by BC 20114 is required while BANKSTART is a request to MC 20114 to execute the requested operation. BANKCMD and BANKSTART are gated by Miss Valid (MISSVALID) in BCRL 21614. MISSVALID is an enable signal which is true if the MC 20116 cache
miss indicated by CACHEMISSED occurred during an inactive cycle of RM 20722 wherein SUPBANKREQ trailer condition is not asserted and CACHMISSED is asserted. MISSVALID thereby enables BCRL 21614's request to BC 20114 if a cache miss did occur and the
memory request resulting in a cache miss was suppressed by a trailer condition.

(3) BANKCMD=010: read data is to be loaded into MC 20116's cache but ERCC errors detected by BC 20114 are not to be loaded into BC 20114's error log; or bad parity is to be generated to correspond to multiple bit ECC errors.

Concurrently with submission of BCRL 21614's request to BC 20114, BCRL 21614 generates signals Bypass Read Requested (BYRDREQ) and Load Cache Requested (LOADREQD) to RQ 20724 and Bypass Write Requested (BYWRREQD) to WC 20718. BYRDREQD and
LOADREQD are stored in 20728 for subsequent use by LM 20730, described below, to determine whether to load the requested data from MSB 20110 and to MC 20116's cache or to pass this data off to JP 10114 or IOS 10116 directly. BYWRREQD is asserted when
block write from IOS 10116 will bypass MC 20116's cache and MSB 20110 will accept write data from MC 20116's BYF 20118 rather than from MC 20116's WBF 23286.

BC 20114 indicates whether it is currently able to accept a request from MISSC 20726 through input Bank Ready (BANKRDY). BC 20114 indicates that it is ready to accept a request by asserting BANKRDY. SELWBA may be asserted, for example, when
MISSC 20726 is engaged in writing back data from MC 20116's cache to MSB 20110 to make space available in MC 20116's cache for data to be written from MSB 20110 in response to an earlier cache miss. SELWBA selects the source of address and command to be
BC 20114 by selecting either MISSC 20726's MISADR or MC 20116's Write Back Address Register (WBAR), described below. If BC 20114 does accept the request from MISSC 20726, as indicated by assertion of BANKRDY and non-assertion of SELWBA, MISSC 20726 will
drop that request as it is accepted by BC 20114 and be free to accept a subsequent cache miss. If BC 20114 is not ready to take another request, for example is taking a write back request, MISSC 20726 will continue to lock MISSCTRLR 21610, through
MISCE, and assert Miss Busy (MISSBUSY), indicating that MISSC 20726 is not currently free to accept a cache miss. When BC 20114 subsequently accepts MISSC 20726's request, MISSBUSY will be dropped and MISSCTRLR 21610 is able to accept subsequent cache
misses. If RM 20722 receives an MC 20116 cache miss, and attempts to use MISSC 20726 while MISSBUSY is asserted, that memory request resulting in that subsequent cache miss will be interrupted and the port containing that memory request will re-enter
priority queue for subsequent service.

Certain other inputs to BCRL 21614, not previously discussed, affect generation of MISSC 20726's request to BC 20114, and MISSC 20726's outputs to RQ 20728 and BY/WC 20718. Test Mode Stop Handoff (TMSTOPHAND) affects outputs BYRDREQD and
LOADREQD. TMSTOPHAND, by affecting these outputs, indicates that MC 20116 is to be inhibited from handing off the data read from MSB 20110 when that data is read into MC 20116's cache. TMSTOPHAND may be asserted, by DP 10118 during diagnostic tests.
Load Pending (LOADPEND) prevents a second load MC 20116 cache load operation from being initiated while a previous MC 20116 cache load operation is present in RQ 20728. Because the present embodiment of MEM 10112 accommodates only one level of miss
information to be stored at a time, two outstanding loads are not permitted. IO Encache (IOENCACHE), previously discussed, indicates that IOS 10116 has requested that certain data be encached and modifies a bypass read or write request into a MC 20116
cache read or write. Test Mode Stop Bypass (TMSTOPBYP) is used to test MEM 10112, in particular MC 20116. TMSTOPBYP inhibits initiation of a bypass read or write operation and modifies such an operation into a cache read or write. Input Correct Write
Back Parity (CORRWBPAR) is asserted by RM 20722 as part of a repair block operation. Such an operation may be executed as part of a write back operation to transfer data from MC 20116's cache to MSB 20110 in response to a Repair Block request. When
CORRWBPAR is asserted, the write back operation is performed but parity errors ignored and correct ERCC generated. Input Test Mode Write Back Auxiliary (TMWBAUX) is a test signal used in de-bugging operations and again alters a write back operation
performed by BC 20114. When TMWBAUX is asserted, a sequence of reads to MC 20116's cache is performed rather than a sequence of writes in response to a Cache Flush request. This allows MEM 10112 to exercise MSB 20110, in a particular MA's 20112 at a
higher rate than can be achieved by submitting read and write requests through IO Port 20910, JPO Port 21010, and JPI Port 21110.

Having described structure and operation of MISSC 20726, structure and operation of RQ 20728 will be described next below.

RQE 21710 may be comprised, for example, of 82S131 PROMs and RQD 21714 may be comprised of, for example, SN74302s and SN74S00s. RQSR 21712 may be comprised of, for example, SN74S194 registers.

As previously described, MEM 10112 may be capable of pipelining up to three concurrent memory requests. Each of these requests may require data to be read from MSB 20110, for example in loading MC 20116's cache upon occurrence of a cache miss or
in bypass reads to JP 10114 or IOS 10116. In general, BC 20114 will honor requests for data to be read from MSB 20110 in the order in which those requests are submitted to BC 20114. RQ 20728 comprises a three level stack for storing the information
pertaining to each of up to three sequential read requests made to BC 20114. Information stored in RQ 20728 determines what operations are to be performed by MEM 10112 in handling requested data from MSB 20110 when data corresponding to a particular
request is read from MSB 20110 by BC 20114. This stack is a First-In-First-Out (FIFO) queue. The kind of operation required for handling data read from MSB 20110 responds to a particular request is determined when that request is submitted to BC 20114
and is loaded into RQ 20728 at that time. Each level of RQ 20728's stack contains two entries. One entry indicates that, for a particular request, data read from MSB 20110 is to be written into MC 20116's cache. The other entry indicates that, for a
particular request, data read from MSB 20110 is to be passed directly to IOS 10116 in a bypass read operation. Only one of these two entries may be asserted in any given RQ 20728 stack level. That is, a single stack level entry may not both indicate
that the data is to be read into MC 20116's cache and that the data is to be bypassed read to the requestor. If the entry says that the data is to be loaded into MC 20116's cache, Load Pointer (LDPTR) 20724 may indicate that the block or one word may be
passed to the requestor in addition to loading MC 20116's cache. In addition, in the above discussion of MISSC 20726 it was indicated that MEM 10112 may handle only one cache load in the pipeline at a time. As such, only one RQ 20728 stack level at a
time may contain an entry asserting that the data read from MSB 20110 is to be read into MC 20116's cache.

RQSR 21712's three stack levels are referred to as Top entry level, Next entry level, and Active entry level. Active level is the bottom level of RQSR 21712's stack. Active level determines the kind of operation currently being performed by MEM
10112 on data being delivered from MSB 20110. Information stored in Active level indicates either of two MEM 10112, and in particular MIC 20722, operating states. First is Load Active (LOADACT) and second is Bypass Read Active (BYRDACT). These two
states indicate respectively that MEM 10112 is performing an operation to load MC 20116's cache or to perform a bypass read operation. Next Level indicates an MEM 10112 operation to be performed upon next appearance of data from MSB 20110. Next level
indicates states Load Next Queue (LOADNEXTQ) and Bypass Read Next Queue (BYRDNEXTQ). LOADNEXTQ and BYRDNEXTQ respectively indicate that, upon next read of data from MSB 20110, MEM 10112 is to load that data into MC 20116's cache or to perform a bypass
read operation. Top entry level represents the most recent entry in RQSR 21712. Top entry level indicates states Load Entering Queue (LOADENTERQ) and Bypass Read Entering Queue (BYRDENTRQ). Information stored in Top entry level indicate a type of
operation associated with the most recent request, that is the most recent request of a sequence of requests, presented to BC 20114. LOADENTERQ and BYRDENTRQ respectively indicate that the most recent request to BC 20114 has been for data to be used by
MEM 10112 in performing an MC 20116 cache load operation or a bypass read operation. Data appearing in response to a BC 20114 request represented in RQSR 21712's top entry level will be provided from MSB 20110 after data appearing in response to a
request represented in next entry level has appeared.

A particular request will enter RQSR 21712's stack when a request is made to BC 20114, for example MISSC 20726 as described above. BC 20114's acceptance of request is indicated to RQ 20728 by assertion of Input Bank Ready (BANKRDY) to RQE 21710
by BC 20114. Each entry in a RQSR 21712 stack level will move down to next lower stack level when BC 20114 indicates to RQ 20728 that data is being read from MSB 21010 in response to a request in RQSR 21712. BC 20114 indicates to RQ 20728 that such
data being read from MSB 20110 by asserting input Data Coming (DCOM) to RQE 21710. A higher level request entry will move down to an empty (no operation specified) level, with the condition that no entry will move down to active entry level until DCOM
is asserted by BC 20114.

Referring to other inputs of RQ 20728, inputs LOADREQD and BYREQD, previously discussed, to RQ 21710 indicate, respectively, whether a data request to BC 20114 is for an MC 20116 cache load or for a bypass read operation. As previously
described, BC 20114 includes error correction circuitry for correcting errors in data read from MSB 20110. As will be described further in a following description, such an error correction operation by BC 20114 results in a one system clock cycle delay
in the data read from MSB 20110. If such an operation results in reading data from MSB 20110 in response to a BC 20114 request in RQ 20728, BC 20114 will assert DCOM to indicate that data will be appearing, and input Delay (DLY) to RQE 21710 to indicate
that that data will be delayed by one clock cycle. DLY is asserted on the clock cycle when the data word being corrected would have been available from BC 20114 and remains asserted until the block transfer is complete. Finally, Read Data Output Strobe
(RDOPS) to RDQ 21714 is provided from BC 20114 to indicate that read data from MSB 20110 is present on RDO Bus 20158. RDOPS is a data confirmation signal preventing initiation of a MC 20116 cache load or bypass read operation with invalid data.

Referring now to outputs of RQ 20728, these outputs indicate what operation MEM 10112 is to perform, that is a cache load or bypass read, with respect to data presently being read from MSB 20110 through BC 20114. These outputs are provided to LM
20730, described below, LP 20724, BR/WC 20718, and RM 20722. RM 20722 receives Load Active (LOADACT), indicating that MEM 10112 is to perform an MC 20116 cache load operation with respect to data currently being read from MSB 20110. RM 20722 also
receives, from RQE 21710, Raw Load Next (RAWLOADNXT) that, without further qualification, interrupts RM 20722 so that MC 20116's cache may be used for loading. LM 20730 and LP 20724 both receive LOADACT and input Any Load (ANYLOAD). ANYLOAD trailer
condition indicates that an MC 20116 cache load request is present in RQ 20728 and is used in inhibiting subsequent cache load operations from being requested because, as described above, MISSC 20726 will accept only one cache miss, and thus cache load
operation, at a time. BR/WC 20718 receives outputs LOADACT and Bypass Read Active (BYRDACT) from RQD 21714. LOADACT has been described above. BYRDACT indicates to BR/WC 20718 that MEM 10112 is executing a bypass read operation with respect to the data
currently being read from MSB 20110. As will be described below, LM 20722 stores address information regarding blocks of data to be read into MC 20116 cache from MSB 20110. Output Load Sequence (0-1) (LOADSEQ(0-1) of RQD 21714 is provided as a state
machine address to LM 20730 to identify to LM 20730 which of a sequence of control signals to generate. LM 20730 in turn uses LOADSE0(0-1) information to identify the corresponding word address of the block of data being written into MC 20116's cache.

Other outputs of ROD 21714 are provided to PC 20716 to control operation of PC 20716. These outputs include Load In Progress (LOADINPROG), indicating the MEM 10112 is executing a MC 20116 cache load operation, and Future Load (FUTURELOAD)
indicating that some point in the future MEM 10112 will perform an MC 20116 cache load operation. Outputs Any Load (ANYLOAD) and Any Bypass Read (ANYBYRD) indicate that RQ 20728 contains, respectively, an MC 20116 load request and a bypass read request. Output Data Store Address Chip Enable (DSACE) of RQD 21714 is, as will be described in a following description, an addressing enable signal to MC 20116's cache and is used therein to enable addressing of that cache.

Having described the structure and operation of RQ 20728, structure and operation of Load Manager (LM) 20730 will be described next below. Operation of LM 20730 is tightly coupled with the operation of LP 20724, previously described, and RQ
20728, just described. For this reason, FIGS. 212 and 217, respectively showing LP 20720 and RQ 20728, should be referred to during the following description.

e.e. Load Manager 20730 (FIG. 213)

Referring to FIG. 218, Load Manager (LM) 20730 is shown. LM 20730 includes Load Control Register (LCR) 21810 with associated input Gate 21812 and Load Decode Logic (LDL) 21814. LCR 21810, Gate 21812, and LDL 21814 may be comprised of, for
example, SN74S194 registers, SN74S02 gates, and 82S131 PROMs. Also included in LM 20730 is Load Stage Register (LSR) 21816 and MC 20116 Cache Decode Logic (MCCD) 21820, comprised, for example, of SN74S194 registers and SN74S51 gates. Inputs to and
outputs from LM 20730 and other portions of MEM 10112, in particular MIC 20127, are indicated as previously described by signal names appended to inputs and outputs of LM 20730. As indicated in FIG. 218, LCR 21810 receives certain data and enable inputs
from MEM 10112 sources external to LM 20730, certain of which are gated through Gate 21812 which provides in turn a data input to LCR 21810. LCR 21810 provides certain outputs to MEM 10112's circuitry external to LM 20730, and certain inputs to LDL
21814. LDL 21814, as just stated, receives inputs from LCR 21810, with other inputs from sources external to LM 20730. LDL 21814 provides outputs to other portions of MEM 10112 and data inputs to LSR 21816. LSR 21816 provides control signal outputs to
portions of MEM 10112's circuitry external to LM 20730, and an input to MCCD 21820. In addition to an input from LSR 21816, MCCD 21820 receives inputs from sources external to LM 20730 and in turn provides outputs to, in particular MC 20116.

As stated above, operation of LM 20730 is closely related to operation of LP 20724 and RM 20722. In general, LM 20730 is responsible for handling data that is read from MSB 20110 by BC 20114 in response to requests for MC 20116 cache load
operations and bypass read operations. LM 20730 may direct the data read from MSB 20110 be loaded into MC 20116's cache, that this data be passed to IOS 10116 in a bypass read operation, or that the data may be both loaded into MC 20116's cache while
concurrently transferred as a word or block to the requestor, that is a handoff operation. LM 20730 also controls writing back to MSB 20110 of dirty blocks that have been displaced from MC 20116's cache to make room for a new block to be loaded in
response to MC 20116 cache miss.

Referring first to LCR 21810, LCR 21810 data inputs receive information describing what MEM 10112 operations are to be performed in regard to data read from MSB 20110 in response to memory request calling for a bypass read or resulting in a MC
20116 cache miss and subsequent cache load operation. Data inputs to LCR 21810 provide information indicating what operation is to be performed by LM 20722 in servicing data read from BC 20114 to be loaded into MC 20116's cache and is provided to LCR
21810 during servicing of a present memory request. This information is transferred into LCR 21810 by enable signal ANYLOAD, previously discussed, at start of any MEM 10112 operation. Input JO Port Destination (JODEST) is provided from PRMUX 20720,
previously described. JODEST determines, for each JPO Port 21010 read request, whether the requested data is to be provided to FU 10120 or EU 10122. Input Load Operation One Next (LOADOP1NXT) to LCR 21810 and Load Operation 0 Next (LOADOP0NXT) to Gate
21812 are provided from RM 20722. As previously described, each memory request includes a two bit upcode field describing what operation is to be performed by MEM 10112. LOADOP1NEXT and LOADOP0NXT are a corresponding two bit code provided by RM 20722
and describe, to LM 20730, what operation is to be performed by MEM 10112 with regard to the next data item to be read from MSB 20110. LOADOP0NXT is gated together with Test Mode Stop Handoff (TMSTOPHAND) in Gate 21812 to inhibit execution of handoff
operations during MEM 10112 test as previously described. LCR 21810 provides two bit output LOADOP(0-1) corresponding to LOADOP0NXT and LOADOP1NXT and indicates what operation is to be performed with regard to the 4 word block being presently read from
MSB 20110.

Input WD(0-1) to LCR 21810 is provided from WD Bus 21212 from PRMUX 20720, previously described. Also as previously described, all data read operations from MSB 20110 are in the form of four word blocks. In handoff word-read operations, input
WD(0-1) to LCR 21810 is used as a word within block address to select which particular word of the four word block presently being read from MSB 20110 is to be read to the requestor. Output LOADWORD(0-1) of LCR 21810 corresponds to input WD(0-1) and is
word within block address of the word to be read out to requestor during a handoff word-read operation currently being executed by MEM 10112. During handoff operations or MC 20116 cache load operations, LOADSEQ(0-1) input to LDL 21814 is used as word
within block address to successively transfer the four words of the block into MC 20116's cache. Input LOADACT to LDL 21814, like input LOADOP(0-1) from LCR 21810, indicates what operation is to be performed by MEM 10112. In this case, LOADACT
indicates that MEM 10112 is to initiate a MC 20116 cache load operation with the data block currently being read from MSB 20110.

Finally, input PORTSEL(0-1) to LCR 21810 is provided from RPSR 21324 of Request Priority Selection Logic 21314, previously described. PORTSEL(0-1) is a two bit code indicating which of IO Port 20910, JPO Port 21010, and JPI Port 21110 is
currently being serviced. Load Port(0-1) (LOADPORT(0-1)) output of LCR 21810 corresponds to input PORTSEL(0-1) and indicates which of these ports is to have its wait flag or request flag reset and, on handoff operations, which port is to receive read
data.

Referring now to outputs of LCR 21810 and LDL 21814 to other parts of MEM 10112, Load Destination (LOADDEST) corresponds to JODEST. LOADDEST indicates whether FU 10120 or EU 10122 is to receive data currently being read from MSB 20110. Output
Handoff Next (HANDOFFNXT) from LDL 21814 indicates to Port Request State Logic (PRS) 21310, previously described, that a data word is to be transferred to the appropriate requestor on the next clock cycle. Output Load Get Write Back Address (LDGETWBA)
is provided to TCR 21522 and TCL 21510 to indicate that a write back address will be written into MC 20116's Write Back Address Register from tag store of MC 20116's cache. LDGETWBA may occur, for example, when it is necessary to write a block of data
from MC 20116's cacher to MSB 20110 to free cache space for the block currently being read from MSB 20110. Similarly, output Load Write Back Requested (LOADWBREQD) is provided to BC 20114 to indicate that a write back of data from MC 20116's cache to
MSB 20110 is required as part of a MC 20116 cache load operation. Output Tag Load Next (TAGLOADNXT) is provided to MC 20116, as described further in a following description of MC 20116, to indicate that the tag store is to be loaded on the next clock
cycle with the address of the new block of data being loaded into the cache. Output Load Port(0-1) (LOADPORT(0-1)) is provided to PRS 21310 to indicate which port of IO Port 20910, JPO Port 21010, and JPI Port 21110 had submitted a memory request
requiring a MC 20116 cache load operation, in order to handoff data or reset the request valid flag.

LDL 21814 provides two outputs, Data Store Load Next (DSLOADNXT) and Load Unload (LDUNLDNXT) to LSR 21816. DSLOADNXT indicates that during the next memory request service a data word from MSB 20110 will be written into Memory Cache Data Store
(MCDS) 23220 (described below). LDUNLDNXT indicates that during next clock cycle a data word from MCDS 23220 is to be transferrred to Write Back File (WBF) 23212 (described below). Other inputs to LSR 21816 are TAGLOADNXT and ANYLOAD, both of which
have been previously described.

LSR 21816 is a staging register used for pipelining of commands and instructions from LM 20730. Inputs to LSR 21816 have been described above. Outputs of LSR 21816 include Load Unload Cycle (LDUNLDCYC), indicating that a data word is to be
transferred from MCDS 23220 to WBF 23212 during the current clock cycle. Output Data Store Load (DSLOAD) is provided to MC 20116 to indicate that a data word is to be written into MCDS 23220 during the current clock cycle. Output Tag Load Cycle
(TAGLOADCYC) is provided to MC 20116, as described further in a following description, to load a new block address into Memory Cache Tag Store (MCTS) 23214 (described below). Output Replace Chip Enable (RPLCE) is also provided to MC 20116 to control the
loading of Least Recently Used Logic (LRUL) 23224 replacement register, described below.

Referring finally to MCCD 21820, MCCD 21820 provides certain control signals to MC 20116 for control of MC 20116's cache. The functions of these control signals will be described further in a following description of MC 20116 but will be briefly
summarized here. Inputs to MCCD 21820 include TAGLOADCYC, previously discussed. Input Invalidate (INVALIDATE) is provided from RM 20722 during cache invalidation operations and the address tag store entry is to be marked invalid. Input Cache Hit
(CACHHIT) is provided from MC 20116 and indicates that data referred to in a memory read request has been found to be resident in MC 20116's cache. Input LCLEAR, previously described, is a general CS 10110 clear command from DP 10118 and, in this case,
may initiate clearing of MC 20116's cache.

Outputs of MCCD 21820 include Tag Store Initiate (TSINIT), Tag Valid (TAGVAL), and Tag Store Write Enable (TSWE) as will be described further in a following description of MC 20116, TSINIT and TSWE respectively clears 4 tag slot entries and
enable writing of addresses into MC 20116's tag store. TAGVAL indicates that, upon a particular tag store write, the corresponding MC 20116 tag entry is to be marked invalid.

f.f. Bypass Write and Cache Write Back Control 21910 (FIG. 219)

Referring to FIG. 219, Bypass Write and Cache Write Back Control (BWCC) 21910 is shown. BWCC 21910 is generally associated with LM 20730 and generates certain signals regarding bypass write and writeback operations which are used by other
portions of MIC 20122 circuitry in controlling bypass write and data write back operations. As indicated in FIG. 219, BWCC 21910 includes BWCC Status Registers (BWCCSRs) 21912, 21914, and 21916. BWCCSRs 21912, 21914, and 21916 receive certain bypass
write and data write back status signals from other portions of MIC 20122 circuitry, either directly or through Gate 21918. BWCCSRs 21912 to 21916 in turn provide encoded status outputs (flags) to BWCC Register (BWCCR) 21920. BWCCR 21920 in turn
provides outputs, to other portions of MIC 20122 circuitry, regarding bypass write and data write back operations currently being performed by MEM 10112.

Outputs provided by BWCC 21910 from BWCCR 21920 include Bypass File Busy (BYFBUSY); Write Back Address Busy (WBABUSY), and Write Back File Busy (WBFBUSY). BYFBUSY indicates that BYF 20118 currently contains valid write data to be written into
MSB 20110. WBABUSY indicates that MC 20116's WBAR currently contains a valid address corresponding to data in WBF 20118 to be written into MSB 20110 in connection with a cache load operation. WBFBUSY indicates that WBF 20118 currently contains valid
data to be written from MC 20116's cache to MSB 20110 in connection with a cache load operation.

Inputs to BWCCSR 21914 which provides WBA Busy Flag (WBABUSY), include Operation Get Write Back Address (OPGETWBA) and Load Write Back Requested (LOADWBREQD) the former from RM 20722, the latter from LM 20720, and which are gated together in Gate
21918. Another input to BWCCSR 21914 is Bank Ready (BANKRDY) from BC 20114. LOADWBREQD indicates that LM 20720 is loading WBAR with the write back address corresponding to the write back operation of data from MC 20116 to MSB 20110 in association with
a cache load operation. OPGETWBA indicates that RM 20722 is loading the WBAR from tag store with a write back address corresponding to the write back of data from MC 20116 to MSB 20110 in association with a repair block or cache flush operation.
BANKRDY indicates that BC 20114 has accepted a request to execute this operation and that the WBAR can now be reused again. LOADWBREQD and OPGETWBA set WBABUSY while BANKRDY resets WBABUSY.

Inputs to BWCCSR 21916, which provides WBF Busy Flag (WBFBUSY), include the output of Gate 21918, that is gated signals OPGETWBA and LOADWBREQD, as just discussed. Input STRTWBF is provided from BC 20114. STRTWBF indicates that BC 20114 has
begun to execute a request for write back operation and that WBF 20118 is now free to be reused. OPGETWBA or LOADWBREQD sets WBFBUSY to protect the valid contents of WBF 20118, while STRTWBF resets WBFBUSY.

g.g. Write Back Control Logic 22010 (FIG. 220)

Referring to FIG. 220, Write Back Control Logic (WBCL) 22010 is shown. WBCL 22010 is associated with LM 20730 and BWCC 21910 and generates certain control signals used in execution of write back operations of data from MC 20116's cache to MSB
20110. WBCL 22010 includes Write Back Control Register (WBCR) 22012 and Write Back Decision Logic WBDL 22014. WBCR 22012 in turn provides certain outputs to WBDL 22014 and to other portions of MIC 20122 circuitry. WBDL 22014 also receives WBABUSY from
BWCC 21910. WBDL 22014 then provides address selection signals to MC 20116's cache, selecting either the WBAR or Miss Address Register (MISAR), described below. These signals also generate write back requests to BC 20114 via MISCTRL 20726. WBCR 22012
and WBDL 22014 may, for example, be respectively comprised of SN74S194 registers and gates such as SN74S00s and SN74S02s.

Outputs of WBCL 22010 included Select Write Back Address (SELWBA) outputs from WBDL 22014. A first SELWBA output is used within MIC 20122, for example, by MISCTRL 20726, to generate yet further control signals directing selection of a write back
address by BC 20114 in execution of a write back operation. The second SELWBA output is provided to, for example, MC 20116 directly to indicate that a write back address for use in a write back operation is to be selected. WBCL 22010 also provides
outputs Test Memory Write Back Auxiliary (TMWBAUX) and Correct Write Back Parity (CORRWBPAR) from WBCR 22012. TMWBAUX and CORRWBPAR are used, for example, by MISCTRL 20726 as previously described. TMWBAUX, as previously described, is used in certain
memory test operations to control execution of write back operations in testing BC 20114 and MCB 20110. CORRWBPAR, also previously described, indicates that, in each block transferred during the requested write back operation, parity errors are to be
corrected. CORRWBPAR may, for example, be asserted in case of a write back operation executed for a repair block and MC 20116 cache flush operation.

Referring now to inputs of WBCL 22010, WBABUSY is, as previously stated and previously discussed with reference to BWCC 21910, provided to WBDL 22014 to indicate that a write back operation is desired if it is appropriate to do so. WBABUSY is
effectively an enable signal for WBDL 22014 to generate SELWBA outputs. Inputs to WBCR 22012 include TMWBAUX from MC 20116 which, as previously discussed, indicates that an MEM 10112 test operation is to be performed. Input Write Back Parity Dirty
(WBPDRT) is provided from MC 20116 and indicates that the dirty bit associated with a particular block being displaced from MC 20116's cache is asserted. As such, that particular block must be written back to MSB 20110 to replace a previous copy of that
block already resident in MSB 20110. Input Write Back Valid (WBVAL) is similarly provided from MC 20116 and indicates that the validity bit of a particular block being displaced from MC 20116's cache is asserted. WBVAL thereby indicates that that block
may be safely used. Input Correct Next Write Back (CORRNXTWB) is provided from RM 20722 and indicates that the parity bits of a particular block to be written back into MSB 20110 during a next operation are to be ignored. In particular, assertion of
CORRNXTWB results in assertion of output CORRWBPAR.

h.h. Byte Write Select Logic 22310 (FIG. 223)

Referring to FIG. 223, Byte Write Select Logic (BWS) 22310 is shown. As previously described, each byte of a 32 bit data word, and its associated byte parity, can be selectively written into MC 20116's cache. This operation is effectively an
acceleration of a read/modify/write operation which would otherwise be necessary where parity could change due to writing on a byte by byte basis rather than a word basis. Since each byte is written with its parity, an operation of writing half words,
COBOL character strings, and partial blocks is executed more rapidly because this operation may be performed directly in MC 20116 without going through FIU 20120. A condition for performing a byte write operation is that the write must be an integral
number of bytes in length and beginning on a byte boundary, as indicated by the starting bit address provided as part of the associated memory request. A full word write occurring on a word boundary is a special case of this byte write condition. In
addition to writes of individual bytes, a block write operation may be performed as a sequence of byte write operations.

BWS 22310 which may, for example, be comprised of 82S131 PROMs and SN74S158 multiplexors, generates output Data Store Byte Select (DSBS) (0-3) to MC 20116 during execution of byte write operations. DSBS (0-3) is used by MC 20116 as a byte select
address and is effectively a byte within word address.

Referring to inputs of BWS 22310, Block Write Operation (BLKWRTOP) is provided from RM 20722. BLKWRTOP will be asserted when a byte by byte block operation is to be performed. Considering first the case of a partial block operation wherein less
than a full block is to be written into MC 20116, input Request Op (REQOP) (0-1) from PRMUX 20720 through REQOP Bus 21216 indicates what type of operation is to be performed by MEM 10112; this is for non-block operations only. In this case, a byte
operation is indicated. Input Word two (WORD2) from TCR 21522 (described below) indicates whether the byte currently being written is from first or second word when the write operation crosses word boundaries. Inputs Starting Bit Address (SBA) (0-1),
Autoword (WD) (0-1), and Byte Length Number (BLN) (0-4) are provided from PRMUX 20720. SBA (0-1) is provided through SBA Bus 21226 and identifies starting byte address of the first byte to be written. Input WD (0-1) is word within block address of the
byte to be written and is provided through WD Bus 21212. Input BLN (0-4) identifies length of the data item, that is number of bytes, to be written and is provided through BLN Bus 21214. Together, inputs SBA (0-1), WD (0-1), and BLN (0-4) identify the
particular byte or bytes to be written into MC 20116. BW522310 will generate corresponding DSBS (0-3) outputs to MC 20116 to cause those bytes to be written into MC 20116's cache.

As previously stated, if BLKWRTOP is asserted, a block is to be written on a byte by byte basis. In such a case, beginning word and byte addresses are provided by inputs WD (0-1) and SBA (0-1). Input AUTOWORD (0-1) is, as previously described,
a sequence of word within block addresses generated by RM 20722 during block write operations. During a byte by byte block write operation, inputs SBA (0-1) and WD (0-1) are compared to the current word to be written as indicated by AUTOWORD (0-1). BWS
22310 generates DSBS (0-3) for WD (0-1) falling within a range defined by inputs SBA (0-1), WD (0-1), and BLN (0-1). DSBS (0-3) are thereby generated for bytes whose addresses fall in the range of: SBA (0-1) less than or equal to AUTOWORD (0-1) less
than or equal to SBA (0-1) plus BLN (0-2) minus 1. DSBS (0-3) are thereby generated for a sequence of bytes comprising a partial block having boundaries on byte boundaries.

i.i. Bypass Write Control 20718 (FIG. 221)

Referring to FIG. 221, Bypass Write Control (BWC) 20718 is shown. BWC 20718 includes Write Control Logic (WCL) 22110 and Register 22112. As previously described, BWC 20718 generates certain control signals for execution of bypass read and write
operations. As indicated in FIG. 221, WCL 22110 receives certain inputs, each described below, from other portions of MIC 20122 circuitry and provides outputs to, for example, MC 20116. Certain WCL 22110 outputs are provided as inputs to Register
22112, which stores current state of certain WCL 22110 conditions and returns those conditions as an input to WCL 22110 to aid in determining future outputs of WCL 22110.

Referring first to outputs of WCL 22110, the majority of these outputs are provided to MC 20116 and will be described more fully in a following description of MC 20116. Outputs Next Bypass Write 1 (NEXTBYWl) and Next Bypass Write 0 (NEXTBYW0)
comprise a two bit address code to MC 20116's Bypass Write File (BWF) 20118. NEXTBYW1 and NEXTBYW0 are used in BYF 20118 to assist in addressing of BYF 20118 when data is written into BYF 20118 from IOM Bus 10130. Outputs Bypass File Write Enable
(BYFWE) and Bypass Write Chip Enable (BYWCE) are similarly provided to BYF 20118 as enable signals used in writing of data into BYF 20118 from IOM Bus 10130. Output IWD Load (IWDLD) is an enable input to the IWD register, described in a following
description of BYF 20118, which is used in particular for receiving data from IOM 10130. Output TIOMD of WCL 22110 is, as previously discussed, a command and control signal communicated to IOS 10116 to indicate to IOS 10116 that MEM 10112 has accepted
data presented by IOS 10116.

Referring also to the previous description of RM 20722, output Reset Request (RESETREQ) of Register 22112 indicates, as previously discussed with reference to Port Request Stat Logic (PRS) 21310, that the current request being serviced by RM
20722 is to be terminated due to an attempt to execute a cache flush before OKTOFLUSH has been set.

Considering those WCL 22110 inputs used in generation of WCL 22110 outputs to BYF 20128, referring to inputs of WCL 22110, Bypass Write Trailer Next (BYWTRLRNXT) is provided from RM 20722 and indicates that a bypass write trailer condition will
be active during next clock cycle to possibly start a bypass write operation. Input Suppress Bypass Write Trailer (SUPBYWTTLR) is provided from TDN 21520 and suppresses generation of a bypass write operation, if certain conditions are met. Input Cache
Missed (CACHMISSED) indicates, as previously described, that a memory request has resulted in a cache miss and thus that the bypass write may proceed. Input Miss Busy (MISSBUSY) indicates that MISSC 20726 is busy handling a previous MC 20116 cache miss
and thus that a present request which has resulted in a further cache miss must be deferred, that is RESETREQ must be asserted.

Input Stop Bypass Write (STOPBYPWRT) is provided from TDN 21520 and TCL 21510 and indicates that a trailer condition requiring a stop of a bypass write has occurred. Input IO Port Available (IOIPA) is provided from PRS 21310 and has been
previously discussed with reference to PRS 21310. Input Load IO Request (LIOR) is a command and control signal, previously discussed, provided by IOS 10116 to indicate that IOS 10116 has loaded a memory request into IO Port 20910. Input Take Data
(TAKEDATA) is generated by RM 20722 and indicates that BYF 20118 is to accept the data from IOM Bus 10130 on next clock cycle. Input IO Previous Port (IOPREVPORT) is, as previously discussed, provided from Address Selection Decoding (ADSD) 21316 of PC
20716 and indicates that IO Port 20910 was the port whose memory request was previously serviced. Input Suppress Micro Control Trailer (SUPMCROTLR) is provided from TDN 21520 and indicates that no trailer actions are to be executed on next clock cycle,
in this case no bypass write operation. Input Test Mode Deposit Examine (TMDEPEXAM) indicates that a MEM 10112 test operation is to be performed. As will be described in a following description of FIU 20120, TMDEPEXAM indicates that certain information
contained in FIU 20120 registers are to be provided to DP 10118.

j.j. Memory Cache Usage Looic 22210 (FIG. 222)

Referring to FIG. 222, Memory Cache Usage Logic (MCU) 22210 is shown. As previously described, MC 20116's cache, in general, contains that data which is presently required by JP 10114 and IOS 10116. It is therefore necessary for MC 20116 to
transfer data between MC 20116's cache and MSB 20110 in a manner that data contained in MC 20116's cache at any time is that data most probably required by JP 10114 and IOS 10116. By doing so, MC 20116 may minimize the incidents of MC 20116 cache misses
wherein data requested by JP 10114 or IOS 10116 is not resident in MC 20116's cache. In general, MC 20116 tracks usage of data contained in MC 20116's cache and, when necessary, transfers that data which is least recently used back to MSB 20110 while
retaining that data which is most recently used. MCU 22210 provides certain control signals to MC 20116 which aid in selecting which MC 20116 cache resident data is to be transferred to MSB 20110 and which is to be retained in MC 20116's cache. These
control signals also assist in directing MC 20116 internal operations with regard to MC 20116 cache to increase efficiency of MC 20116 cache operations. Control signals provided by MCU 22210 are based upon pending MEM 10112 operations, in particular MC
20116 cache operations.

As shown in FIG. 222, MCU 22210 includes MCU Encoding Logic (MCUE) 22212 and MCU Register (MCUR) 22214. MCUE 22212 may be comprised, for example, of various TTL gates while MCUR 22214 may be, for example, comprised of SN74S194 registers. MCUE
2221 receives inputs regarding pending MC 20116 cache operations from other portions of MIC 20122 circuitry. MCUE 22212 generates a three bit encoded output representing pending MC 20116 operations. MCUR 22214 operates as a buffer register for
receiving MCUE 22212's encoded output and delaying this output by one clock cycle, that is until those pending MC 20116 operations are to be executed. MCUR 22214 then provides the three bit encoded output from MCUE 22212 to MC 20116.

MCUE 22212 inputs Cache Read Next (CACHRDNXT), and Cache Write Next (CACHWRTNXT) are provided from RM 20722 and Tag Load Next (TAGLOADNXT) from LM 20730. CACHRDNXT and CACHWRTNXT indicate, respectively, that MC 20116 is to perform a MC 20116
cache read or write operation upon next clock period. TAGLOADNXT indicates that, on next clock period, MC 20116 is to perform an operation loading MC 20116's cache tag store, as described in a following description of MC 20116. Input IO Port Select
(IOPORTSEL) is, as previously described, provided from PC 20716. IOPORTSEL indicates that the current memory request being serviced is from IO Port 20910. Input IO Encache (IOENCACHE) is, as previously described, a control command signal provided from
IOS 10116 as part of a memory request. IOENCACHE is a request to MC 20116 that data read into MEM 10112 in association with that memory request be encached in MC 20116's cache.

Referring to outputs of MCUR 22214, Update 1 (UPDT1) and Update 0 (UPDT0) comprised a two bit code indicating operations to be performed by MC 20116. One code, for example 00, indicates that no MC 20116 cache operation is pending and that MC
20116 cache's usage RAMs should not be altered. A second code, for example 11, is derived from TAGLOADNXT and indicates that MC 20116 should update its usage RAMs to indicate a valid, clean block is encached. Two other codes, for example 01 and 10,
indicate respectively that MC 20116 should update its usage RAMs to indicate that the block should be marked to indicate a read or write has occurred. MCUR 22214's third output is Priority IO (PRIO) is derived from IOPORTSEL and IOENCACHE. Normally,
data written into MEM 10112 may be encached in MC 20116's cache or may already be resident in MC 20116's cache. In such cases, MC 20116 will designate that information in MC 20116 cache as the most recently used data therein. If, however, IOS 10116
asserts IOENCACHE, MC 20116 will write the data from IOS 10116 into MC 20116's cache and will indicate that data written therein as the least recently used data therein. This allows MC 20116, if necessary, to immediately write back that data to MSB
20110 if, for example, MC 20116 cache space is required for other purposes. This operation effectively causes IOENCACHE from IOS 10116 to place data in the cache that it might need again but if necessary may go to backing store (MSB 20110) if displaced.

k.k. Data Path Steering Logic 22410 (FIG. 224)

Referring to FIG. 224, Data Path Steering Logic (DPS) 22410 is shown. MEM 10112 controls three principal data buses. MIO Bus 10129 is controlled by MEM 10112 for transfer of data from MEM 10112 to IOS 10116. MOD Bus 10144 is also controlled by
MEM 10112 for transfers of data from MEM 10112 to JP 10114, and for internal memory transfers between MC 20116's cache and FIU 20120. A third principal MEM 10112 data bus is IB bus which is an internal data bus for FIU 20120 and will be described
further in a following description of FIU 20120. DPS 22410 generates encoded enabling signals selecting data sources for each of these buses. These encoded enabling signals are generated by inputs to DPS 22410, from other portions of MIC 20122
circuitry, indicating data transfers to be performed by MEM 10112. As will be described in a following description of FIU 20120, a pipeline register in FIU 20120 receives encoded enabling signal outputs of DPS 22410, decodes these enabling signals, and
distributes enabling signals to various sources for MIO Bus 10129, MOD Bus 10144, and FIU 20122's IB bus.

Referring to inputs of DPS 22410, TMDEPEXAM, previously discussed, is provided from FIU 10120 and indicates that an MEM 10112 test operation is being executed. Specifically, a register referred to as IARM in FIU 10120 is to be loaded with read
data from MEM 10112 to be transferred to DP 10118, or data from DP 10118 which will have been loaded into register IARM in FIU 10120 is to be written into MEM 10112. BYRDACT from RM 20722 indicates, as previously discussed, that MEM 10112 is to perform
a bypass read operation. IOPORTSEL is provided from PC 20716 and indicates that IO Port 20910 is currently being serviced by RM 20722. LOADACT from RM 20722 indicates that a MC 20116 cache load operation is being executed. Inputs Use Read Input Data
Next (USERIDNXT) and Use IOS-or-JP Word Next (USEIJWDNXT) are provided from RM 20722 and refer respectively to a Read Input Data (RID) register and either IOS 10116 or JP 10114 write data register in FIU 20120. Inputs USERIDNXT and USEIJWDNXT
respectively indicate that data in these registers is to be transferred to FIU 10120's internal IB bus for a subsequent data manipulation operation. Input JOPORTSEL indicates that a JPO Port 21010 memory request is being serviced. Input Output Assembly
Next (OUTASSYNXT) is provided from RM 20720 and refers to an Assembly Register (ASYMR) in FIU 10120. FIU 10120's ASYMR is effectively a result register for receiving results of data manipulation operations. OUTASSYNXT indicates that the contents of FIU
10120's ASYMR is to be transferred on to MOD Bus 10144 and MIO Bus 10129 the next clock cycle. Input Immediate Read Next (IMMEDRDNXT) is provided from RM 20722 and indicates that MEM 10112 is to place the contents of a read operation from MC 20116's
cache onto MOD Bus 10144 and MIO Bus 10129 on the next clock cycle. Input Out Shift Next (OUTSHFTNXT) is provided from RM 20722 and refers to a data shifting network in FIU 10122. OUTSHFTNXT indicates that the output of FIU 10120's data shifting
network is to be transferred on to MOD Bus 10144 and MIO Bus 10129 during next clock cycle. Input Read to FIU Next (RDTOFIUNXT) is provided from RM 20722 and indicates that data on MOD Bus 10144, that is from MC 20116, is to be transferred into the RID
registers in FIU 20120 on the next clock cycle. Input STOP, previously discussed, from DP 10118 indicates that MEM 10112 has been temporarily stopped for single pulsing the register.

Referring now to outputs of DPS 22410. Drive MOD Bus (DRVMOD) (0-1) is an encoded value specifying a source whose data is to be transferred on to MOD Bus 10144 during next system clock cycle. Possible sources are FIU 10120's shift network, FIU
10120's ASYMR, MC 20116, and the BC 20114 read output register. RM 20722 may specify FIU 10120's shift network as source by asserting OUTSHFTNXT or FIU 10120's ASYMR as source by asserting OUTASSYNXT. RM 20722 may select MC 20116 as source by asserting
IMMEDRDNXT. LM 20730 may override any selection of RM 20722 by asserting LOADACT. LOADACT will select BC 20114's read output register as source to MOD Bus 10144 and MIO Bus 10129. LOADACT causes BC 20114's read output register to drive MIO Bus 10129
and MOD Bus 10144 so that handoff of data to JP 10114 in conjunction with a MC 20116 cache load operation can be transferred to the requestor.

Output Drive MIO Bus (DRVMIO) (0-1) is an encoded value specifying a source whose data is to be transferred on to MIO Bus 10129 during next system clock cycle. Possible sources are the same as for MOD Bus 10144 and RM 20722 control of MIO Bus
10129 is the same as for MOD Bus 10144. Whenever RM 20722 selects a source for MOD Bus 10140 it also selects that same source MIO Bus 10129. Although the same data is therefore transferred on to both buses, confusion is avoided as only the appropriate
requestor, that is JP 10114 or IOS 10116 is provided with a data available signal, previously discussed.

MIO Bus 10129 may be active in a bypass read operation at same that MOD Bus 10144 is active for a JP 10114 operation. This is accomplished by having BYRDACT override RM 20722 on selection of a source for MIO Bus 10129. In addition, inputs
IOPORTSEL and JPPORTSEL to DPS 22410 are asserted as requried. There will be no conflict with RM 20722 since RM 20722 may not perform a read operation to IOS 10116 while a bypass read operation is being executed. LM 20730 may override RM 20722 for
access to MIO Bus 10129 for cache load operations. There will, however, be no conflict with an MC 20116 cache load operation because during such a cache load operation no other operations may be initiated.

Output Enable Register (ENREG) (0-1) is an encoded value specifying which of four FIU 20120 registers are to be used as data source for FIU 10120's internal IB bus into FIU 10120's shift and mask network. Two of these registers, JWD and RID,
have been previously discussed. A third register is IO Word Register (IWD) for receiving data from IOM Bus 10130. The fourth register is referred to as IARMREG and is a register used to transfer data from DP 10118 to FIU 10120. RM 20722 sets up,
during current system clock cycle, a register to be used as a source for FIU 10120's IB bus on next clock cycle USERIDNXT gates RID register on to IB bus. USEIJWDNXT gates either IWD or JWD bus to next cycle. If JPO Port 21010 is active, source to IB
bus is JWD register. If IO Port 20910, is active IWD register is source to IB bus. Input TMDEPEXAM selects IARMREG to be source to IB bus on next cycle. DP 10118 will cause TMDPEXAM to be asserted when DP 10118 wishes to write data into MEM 10112.

RDH 22510 data error output signals include IO Parity Error (IOPERR), Previous MOD Invalid (PMODI), and Previous MIO Invalid (PMIOI). IOPERR indicates that the parity bits of data being transferred from IOS 10116 indicate that there are errors
in that data. PMODI indicates that parity bits of data transferred onto MOD Bus 10144 the previous cycle indicate that there are errors in that data. PMIOI similarly indicates that parity bits of data being transferred on to MIO Bus 10129 the previous
cycle indicate that that data contains errors.

As indicated in FIG. 225, IOPERR is generated by inputs STOP and Parity Error (PER) to Gate 22516 and by an output of ERRR 22514. Input STOP to Gate 22516 indicates that DP 10118 has stopped MEM 10112 and is essentially an indication of a test
single pulse condition. Input PER is provided from FIU 10120 and indicates that FIU 10120 has detected a parity error in data being transferred from IOS 10116. Referring to Gate 22516's inputs from ERR 22514, these inputs represent the inputs to ERRR
22514 but delayed by a clock cycle. ERRR 22514's input Check FIU Next (CHEKFIUNXT) is provided from TCL 21510. CHEKFIUNXT is a trailer condition indicating that errors in data from IOS 10116 should be checked for in the next cycle. ERRR 22514's input
from ERRAC 22512 indicates that, during a cache read, MC 20116 has detected parity errors in the data. Input Cache Parity Error (CAPERR) is provided from MC 20116 and indicates that, in a word being read from MC 20116's cache, parity errors have been
detected. Input Do Accumulated Error (DOACCUMERR) to ERRAC 22512 is provided from RM 20722 and is an enable signal for ERRAC 22512 to perform an error accumulation operation over a cross word operation. During a multiple word read operation, ERRAC
22512 will generate an error output for each word of that block after a first word in which a parity error has been detected. This continuing error indication of an initially detected error condition in a multiple word read is generated by the signal
fed back from ERRR 22514 output to an input of ERRAC 22512.

Together, ERRAC 22512 and ERRR 22514, with other signals into Gate 22516, provide an indication of when data errors occur in data read from MC 20116's cache. Referring now to ERRXF 22518, EXR 22520, and GBXC 22522 generating outputs PMODI and
PMIOI, input to GPXC 22522 from ERRR 22514 indicates, as just described, an error in a block transfer to JP 10114 or IOS 10116. Inputs to ERRXF 22518 include Read Data Out Invalid (RDOINV) from BC 20114. RDOINV is a general indication that data being
read through BC 20114 to MOD Bus 10144 or MIO Bus 10129 is invalid due to ECC multiple hit errors. Input Test Mode Ignore Errors (TMIGNERRS) is provided from FIU 20122 and is a result of a test condition requiring data to be read from MEM 10112
regardless of errors contained therein. Other inputs to ERRXF 22518 are, as previously described, from Pipeline Registers 22526 and 22528. As will be discussed below, these inputs provide a determination of where data is being read to (that is JP 10114
or IOS 10116). This information, together RDOINV and TMIGNERRS inputs to ERRXF 22518, are encoded and transferred to Pipeline Register EXR 22520 which, in turn, provides this information to GBXC 22522. Information provided through EXR 22520 is used by
GBXC 22522 to indicate, in particular, whether data appearing on MOD Bus 10144 or MIO Bus 10129 is invalid. GBXC 22522, as previously described, provides these indications with outputs PMODI and PMIOI.

RDH 22510 outputs indicating data availability include DAVFI, DAVFA, DAVEB, and DAVIO, all of which have been previously discussed with reference to MEM 10112 interfaces to JP 10114 and IOS 10116. These outputs are generated from inputs, as
indicated from FIG. 225, to Pipeline Register 22526, DD 22524, and DUV 22530, each of which will be described below.

Either LM 20730 or RM 20722 may place data on either MIO Bus 10129 or MOD Bus 10144. BRC 20718 may place data on MIO Bus 10129 whenever RQ 20728 indicates an active bypass read operation, that is BYRDACT is asserted. Because of Pipelining
Registers, for example, Registers 22526 and 22528, a data transfer is set up in one system clock cycle and the data transferred, with its corresponding control signals, on following clock cycle.

DD 22524 generates a four bit code indicating destination of data being transferred from those inputs to DD 22524 as indicated in FIG. 225. A destination for a data transfer initiated by RM 20722 is indicated by inputs IOPORTSEL, JOPORTSEL,
JIPORTSEL, all of which have been described previously as indicating a port selected for service. In addition, RM 20722 will assert input JODEST or EBDEST to indicate destination of a data transfer to JP 10114, that is whether the data is to go to FU
10120 or EU 10122. Upon a data transfer initiated by LM 20730, LM 20730 will provide a destination code comprising inputs LOADPORT0 and LOADPORT1, both of which have been similarly described before. Input LOADACT to DD 22524 is asserted during a
handoff read operation to indicate that LOADPORT(0-1), JODEST, and EBDEST are valid so that if LM 20730 asserts HANDOFFNXT the destination of data will be known. Input TMDEPEXAM to DD 22524 indicates that a MEM 10112 test operation is being performed
wherein data is being transferred into an FIU 20122 register referred to as BARM and described further in a following description of FIU 20122. Staging Register 22528 receives four bit destination code from DD 22524 and delays that code by one clock
cycle so that a data availability signal from RDH 22510 will be generated concurrently with availability of that data. Output of Pipeline Register 22528 is provided to DV 22530 to select the particular data availability output to be asserted.

Referring now to Pipeline Register 22526's inputs, these inputs indicate, in general, that data availability signal is to be generated. These inputs are transferred through Pipeline Register 22526 to DV 22530 to aid in determining the particular
data availability signal to be generated. As will be described below, inputs SUPMCROTLR and RDOPS, both previously described, are inputs expressing conditions which may inhibit generation of a data availability output from DV 22530.

If RM 20722 is initiator of a data transfer, RM 20722 asserts Send Data Next (SENDDATNXT) which is staged in Register 22526 for use during following clock cycle. During that following clock cycle any faults, for example a cache miss, will cause
SUPMCROTLR to be asserted. SUPMCROTLR will then inhibit any data availability output from being asserted. Similarly, when LM 20730 initiates a data transfer, LM 20730 asserts HANDOFFNXT one cycle prior to the data being available for transfer. Again,
Pipeline Register 22526 delays HANDOFFNXT by one clock cycle. Input Read Data Output Sent (RDOS) provided from BC 20114 will gate HANDOFFNXT to enable the data availability signal selected by the encoded output of DD 22524. Similarly, a bypass read
operaton will gate RDOPS with BYRDACT to generate data available signal DAVIO since IOS 10116 is the only requestor which may receive a bypass read.

Having described structure, operation, and certain timing relationships of MIC 20122 circuitry, structure and operation of FIU 20120 will be described next below.

i. FIU 20120 (FIGS. 201, 230, 231)

As previously described, FIU 20120 performs certain data manipulation operations, including those operations necessary to make MEM 10112 bit addressable. Data manipulation operations may be performed on data being written into MEM 10112, for
example, JP 10114 through JPD Bus 10142 or from IOS 10116 through IOM Bus 10130. Data manipulations operations may also be performed on data being read from MEM 10112 to JPD 10114 or IOS 10116. In case of data read to JP 10114, MOD Bus 10144 is used
both as a MEM 10112 internal bus, in transferring data from MC 20116 to FIU 20120 for manipulation, and to transfer manipulated data from MEM 10112 to JP 10114. In case of data read to IOS 10116, MOD Bus 10144 is again used as MEM 10112 internal bus to
read data from MC 20116 to FIU 20120 for subsequent manipulation. The manipulated data is then read from FIU 20120 to IOS 10116 through MIO Bus 10129.

Certain data manipulation operations which may be performed by FIU 20120 have been previously described. In general, a data manipulation operation consists of four distinct operations, and FIU 20120 may manipulate data in any possible manner
which may be achieved through performing any combination of these operations. These four possible operations are selection of data to be manipulated, rotation or shifting of that data, masking of that data, and transfer of that manipulated data to a
selected destination. Each FIU 20120 data input will comprise a thirty-two bit data word and, as described above, may be selected from input provided from JPD Bus 10142, MOD Bus 10144, and IOM Bus 10130. In certain cases, an FIU 20120 data input may
comprise two thirty-two bit words, for example, when a cross word operation is performed generating an output comprised of bits from each of two different thirty-two bit words. Rotation or shifting of a selected thirty-two bit data word enables bits
within a selected word to be repositioned with respect to word boundaries. When used in conjunction with the masking operation, described momentarily, rotation and shifting may be reiterably performed to transfer any selected bits in a word to any
selected locations in that word. As will be described further below, a masking operation allows any selected bits of a word to be effectively erased, thus leaving only certain other selected bits, or certain selected bits to be forced to predetermined
values. A masking operation may be performed, for example, to zero fill or sign extend portions of a thirty-two bit word. In conjunction with a rotation or shifting operation, a masking operation may, for example, select a single bit of a thirty-two
bit input word, position that bit in any selected bit location, and force all other bits of that word to zero. Each output of FIU 20120 is a thirty-two bit data word and, as described above, may be transferred on to MOD Bus 10144 or onto MIO Bus 10129.
As will be described below, selection of a particular sequence of the above four operations to be performed on a particular data word is determined by control inputs provided from MIC 20122. These control inputs from MIC 20122 are decoded and executed
by microinstruction control logic included within FIU 20120.

Registers IARMR 23044 and BARMR 23046, which will be described further in a following description of DP 10118, are used by DP 10118 to, respectively, write data words onto IB 23030 and to Read data words from MOD Bus 10144, for example
manipulated data words from FIU 20120. Data word written into IARMR 23044 from DP 10118, that is 32 bits of data and 4 bits of parity, will be transferred onto IB Bus 23030 when register enable output signal IARM enable output (IARMEO) from FIUC 23012
is asserted. Similarly, a data word present on MOD Bus 10144, comprising 32 bits of data plus 4 bits of parity, will be written into BARMR 23046 when load enable signal Load BARMR (LDBARMR) to BARMR 23046 is asserted by MIC 20122. A data word written
into BARMR 23046 from MOD Bus 10144 may then subsequently be read to DP 10118. IARMR 23044 and BARMR 23046 are similar to JWDR 23022, IWDR 23024, and IRDR 23026 and may be comprised, for example, of SN74S299 registers.

As previously described, DS 23016 performs data manipulation operations involving shifting of bits within a data word. In general, data shift operations performed by DS 23016 are rotations wherein data bits are right shifted, with least
significant bits of data word being shifted into most significant bit position and most significant bits being translated towards least significant bit positions. DS 23016 rotation operations are performed in two stages. First stage is performed by
BYNL 23050 and PRL 23052 and comprises right rotations on a nibble basis (a nibble is defined as 4 bits of data). That is, BYNL 23050 right shifts a data word by an integral number of 4 bit increments. A right rotation on a nibble by nibble basis may,
for example, be performed when RM 20722 asserts FLIPHALF previously described. FLIPHALF is asserted for IOS 10116 half word read operations wherein the request data resides in the most significant 16 bits of a data word from MC 20116. BYNL 23050 will
perform a right rotation of 4 nibbles to transfer the desired 16 bits of data into the least significant 16 bits of BYNL 23050's output. Resulting BYNR 23050 output, together PRL 23052's parity bit output would then be transferred through DSO 23050 to
MIO Bus 10129. In addition to performing data shifting operations, DS 23016 may transfer a data word, that is the 32 bits of data, directly to MSK 23018 when data manipulation to be performed does not require data shifting, that is shifts of 0 bits may
be performed.

Because data bits are shifted by BYNL 23050 on a nibble basis, the relationship between the 32 data bits of a word and the corresponding 4 parity bits may be maintained if parity bits are similarly right rotated by an amount corresponding to
right rotation of data bits. This relationship is true if the data word is shifted in multiples of 2 nibbles, that is 8 bits or 1 byte. PRL 23052 right rotates the 4 parity bits of a data word by an amount corresponding to right rotation of the
corresponding 32 data bits in BYNL 23050. Right rotated outputs of BYNL 23050 and PRL 23052 therefore comprise a valid data word having 32 bits of data and 4 bits of parity wherein the parity bits are correctly related to the data bits. A right rotated
data word output from BYNL 23050 and PRL 23052 may be transferred onto DSO Bus 23032 for subsequent transfer to MOD Bus 10144 or MIO Bus 10129 as described above. DSO 23032 is used as FIU 20120's output data path for byte write operations and "rotate
read" operations wherein the required manipulation of a particular data word requires only an integral numer of right rotations by bytes. Amount of right rotation of 32 bits of data in BYNL 23050 and 4 bits of parity in PRL 23052 is controlled by input
signal shift (SHFT) (0-2) to BYNL 23050 and PRL 23052. As will be described below, SHFT (0-2) is generated, together with SHFT (3-4) controlling BSL 23054, by FIUC 23012. BYNL 23050 and PRL 23052, like BSL 23054 described below, are parallel shift
logic chips and entire rotation operation of BYNL 23050 and PRL 23052 or BSL 23054 may be performed in a single clock cycle.

Second stage of rotation is performed by BSL 23054 which, as described above, receives the 32 data bits of a data word from BYNL 23050. BSL 23054 performs right rotation on a bit by bit basis with the shift amount being selectable between 0-3
bits. Therefore, BSL 23054 may rotate bits through nibble boundaries. BYNL 23050 and BSL 23054 therefore comprise a data shifting circuit capable of performing bit-by-bit right rotation by an amount from 1 bit to a full 32 bit right rotation.

Referring now to MSK 23018, MSK 23018 is comprised of 5 32 bit Mask Word Generators (MWG's) 23056 to 23064. MSK 23018 generates a 32 bit output to AR 23020 by selectively combining 32 bit mask word outputs of MWG's 23056 to 23064. Each mask
word generated by one of MWG's 23056 to 23064 is effectively comprised of a bit by bit combination of a set of enabling bits and a pre-determined 32 bit mask word, generated by FIUC 23012 and MIC 20122. MWG's 23058 to 23064 are each comprised of for
example, open collector NAND gates for performing these functions, while MWG 23056 is comprised of a PROM.

As just described, outputs of MWG's 23056 to 23064 are all open collector circuits so that any selected combination of mask word outputs from MWG's 23056 to 23064 may be ORed together to comprise the 32 bit output of MSK 23018.

DMW (0-31) from MWG 23060 is generated by ANDing enable Input Data Mask (DMSK) (0-31) with the 32 bit output of DS 23016. DMSK (0-31) is a 32 bit enabling word generated, as described below, by FIUC 23012. FIUC 23012 may generate 4 different
DMSK (0-31) patterns. Referring to FIG. 231, the 4 DMSKs (0-31) which may be generated by FIUC 20132 are shown. DMSKA (0-31) is shown in Line A of FIG. 231. In DMSKA (0-31) all bits to the left of but not including a bit designated by Left Bit Address
(LBA) and all bits to the right of and not including a bit designated by Right Bit Address (RBA) are 0. All bits between, and including, those bits designated by LBA and RBA are 1's. DMSKB (0-31) is shown in Line B of FIG. 231 and is DMSKA (0-31)
inverted DMSKC (0-31) and DMSKD (0-31) are shown, respectively, in Lines C and D of FIG. 231 and are comprised of, respectively, all 0's or all 1's. As stated above DMSK (0-31) is ANDed with the 32 bit output of DS 23016. As such, DMSKC (0-31) may be
used, for example, to inhibit DS 23016's output while DMSKD (0-31) may be used, for example, to pass DS 23016's output to AR 23020. DMSKA (0-31) and DMSKB (0-31) may be used, for example, to gate selected portions of DS 23016's output to AR 23020 where,
for example, the selected portions of DS 23016's output may be ORed with other mask word outputs MSK 23018.

Referring again to FIG. 231, Line E therein shows 32 bit right mask (RMSK) (0-31) which may be generated by FIUC 23012. In the most general case, RMSK contains zeros in all bit positions to the left of and including a bit position designated by
RBA. When used in a blank fill operation, bit positions 2, 10, 18, and 26 may be selected to contain logic 1's depending upon those byte positions containing logic 1's, that is in those bytes containing ASCII blanks; these bytes to the right of RBA are
determined by RMSK (0-31). RMSK (0-31) is enabled through MWG 23062 as BWF (0-31) when MWG 23062 is enabled by blank fill (BLNKFILL) provided from FIU 23012.

As described above, MWG's 23058 to 23064 and in particular MWG's 23060 and MWG 23062 are NAND gate operations. Therefore, the outputs of MWGs 23056 through 23064 are active low signals. The inverted output of ASYMR 23066 is used as an output to
ASYRO 23034 to invert these outputs to active high.

MWG 23058, generating SEW (0-31), is used in generating sign extended or filled words. In sign extended words, all bit spaces to the left of the most significant bit of a 32 bit data word are filled with the sign bit of the data contained
therein, the left most bits of the 32 bit word are filled with 1's or 0's depending on whether that word's sign bit indicates that the data contained therein is a positive or negative number.

Sign Select Multiplexor (SIGNSEL) 23066 is connected to receive the 32 data bits of a word present on IB Bus 23030. Sign Select (SGNSEL) (0-4) to SIGNSEL 23066 is derived from SBA (0-4), that is from SBA Bus 21226 from PRMUX 20720. As
previously described, SBA (0-4) is Starting Bit Address identifying the first or most significant bit of a data word. When a data word contains a signed number, most significant bit contains sign bit of that number. SGNSEL (0-4) input to SIGNSEL 23066
is used as a selection input and, when SIGNSEL is enabled by Sign Extend (SIGNEXT) from FIU 23012, selects the sign bit on IB Bus 23030 and provides that sign bit as an input to MWG 23058.

Sign bit input to MWG 23058 is ANDed with each bit of left hand mask (LMSK) (0-31) from FIUC 23012. Referring again to FIG. 231, LMSK (0-31) is shown on Line F thereof. LMSK (0-31) contains all 0's to the right of and including the bit space
identified by LBA and 1's in all bit spaces to the left of that bit space identified by LBA. SEW (0-31) will therefore contain sign bit in all bit spaces to the left of the most significant bit of the data word present on output of MWG 23058. The data
word on IB Bus 23030 may then be passed through DS 23016 and subjected to a DMSK operation wherein all bits to the left of the most significant bit are forced to 0. SEW (0-31) and DMW (0-31) outputs of MWG's 23058 and 23060 may then be ORed to provide
the desired find extended word output.

LBW (0-31), provided by MWG 23056, is used in locked bit operations wherein the most significant data bit of a data word is in MEM 10112 forced to logic 1. SIGNSEL (0-4) is an address input to MWG 23056 and, as previously described, indicates
most significant data bit of a data word present on an IB Bus 23030. MWG 23056 is enabled by input Lock (LOCK) from FIUC 23012 and the resulting LBW (0-31) will contain a single logic 1 in the bit space of the most significant data bit of the data word
present on IB Bus 23030. The data word present on IB Bus 23030 may then be passed through DS 23016 and MWG 23060 to be ORed with LBW (0-31) so that that data words most significant data bit is forced to logic 1.

Referring to AR 23020, AR 23020 includes ASYMR 23066, which may be comprised for example of a SN74S175 registers, and Assembly Register Parity Generator (ASYPG) 23070. As previously described, ASYMR 23066 is connected from MSK 23018 32 bit
output. A 32 bit word present on MSK 23018's output will be transferred into ASYMR 23066 when ASYMR 23066 is enabled by Assembly Register Load (ASYMLD) from MIC 20122. The 32 bit word generated through DS 23016 and MSK 23018 will then be present on
ASYRO Bus 23034 and may, as described above, then be transferred onto MOD Bus 10144 or MIO Bus 10129. ASYPG 23070 is connected from ASYMR 23066 32 bit output and will generate 4 parity bits for the 32 bit word presently on the 32 data lines of ASYRO Bus
23034. ASYPG 23070's 4 bit parity output is bused on the 4 parity bit lines of ASYRO Bus 23034 and accompany the 32 bit data word present thereon.

Having described structure and operation of Data Manipulation Circuitry 23010, FIUC 23012 will be described next below.

Referring again to FIG. 230, FIUC 23012 provides pipelined microinstruction control of FIU 20120. That is, control signals are received from MIC 20122 during a first clock cycle and certain of the control signals are decoded by microinstruction
logic to generate further FIUC 23012 control signals. During the second clock cycle, control signals received and generated during the first clock cycle are provided to DMC 23010, some of which are further decoded to provide yet other control signals to
control operation of FIUC 23012. FIUC 23012 includes Initial Decode Logic (IDL) 23074, Pipeline Registers (PPLR) 23072, Final Decoding Logic (FDL) 23076, and Enable Signal Pipeline Register (ESPR) 23098 with Enable Signal Decode Logic (ESDL) 23099.

IDL 23074 and Control Pipeline Register (CPR) 23084 of PPLR 23072 are connected from control outputs of MIC 20122 to receive control signals therefrom during a first clock cycle as described above. IDL 23074 provides outputs to control pipeline
registers Right Bit Address Register (RBAR) 23086, Left Bit Address Register (LBAR) 23088 and Shift Register (SHFR) 23090 of PPLR 23072. CPR 23084 and SHFR 23090 provide control outputs directly to DMC 23010. As described above these outputs control
DMC 23010 during the second clock cycle.

ESPR 23098 and ESDL 23099 receive enable and control signals from MIC 20122 and in turn provide enable and control signals to DMC 23010 and certain other portions of MEM 10112 circuitry.

IDL 23074 and FDL 23076 may be comprised, for example, of PROMs. CPR 23084, RBAR 23086, LBAR 23088, SHFR 23090, and ESPR 23098 may be comprised, for example, of SN74S194 registers. ESDL 23099 may be comprised of, for example, compatible
decoders, such as logic gates.

Referring again to IDL 23074, SHFAMTDL 23082 decodes certain control inputs from MIC 20122 to generate, through SHFR 23090, control inputs SHFT (0-4) and SGNSEL (0-4) to, respectively, DS 23016, SIGNSEL 23068 and MWG 23056. Address inputs to the
PROMs comprising SHFAMTBL 23082 include FBA (0-4), SBA (0-4), and FLIPHALF (FLIPHALF) from MIC 20122. FBA (0-4) and SBA (0-4) have been described above. FLIPHALF is a control signal indicating, as described above, that 16 bits of data requested by IOS
10116 resides in the upper half of a 32 bit data word and causes those 16 bits to be transferred to the lower half of FIU 20120's output data word onto MIO Bus 10129. MIC 20122 also provides chip enable signals ATCS 10, 11, 12, 13, and 14. Upon
receiving these control inputs from MIC 20122, SHFAMTDL 23082 generates an output shift amount (SHFAMT) (0-4) which, together with SBA (0-4) from MIC 20122, is transferred into SHFR 23090 by PIPELD at start of second clock cycle. SHFR 23090 then
provides corresponding outputs SHFT (0-4) and SIGNSEL (0-4). As described above, SIGNSEL (0-4) are provided to SIGNSEL 23068 and MWG 23056 and MSK 23018. SHFT (0-4) is provided as SHFT (0-2) and SHFT (3-4) to, respectively, BYNL 23050 and BSL 23054 and
DS 23016.

Referring to CPR 23084, as described above certain control signals are provided directly to FIU 20120 circuitry without being decoded by IDL 23074 or FDL 23076. Inputs to CPR 23084 include Sign Extension (SIGNEXT) and Lock (LOCK) indicating,
respectively, that FIU 20120 is to perform a sign extension operation through MWG 23058 or a lock bit word operation through MWG 23056. CPR 23084 provides corresponding outputs SIGNEXT and LOCK to MSK 23018 to select these operations. Input Assembly
Output Register (ASYMOR) and Blank Fill (BLANKFILL) are passed through CPR 23084 as ASYMOR and BLANKFILL to, respectively, MWG 23064 and MWG 23062 to select the output of ASYMR 23066 as a mask or to indicate that MSK 23018 is to generate a blank filled
word through MWG 23062. Inputs OUTMSK and MSKENBL to CPR 23084 are provided, as discussed above, as enable signals OUTMSK and MSKENBL to, respectively, EXOR/ENOR 23096 and RMSKDL 23092 and LMSKBL 23094 and generating RMSK (0-31), LMSK (0-31), and DMSK
(0-31) as described above.

As previously described, MC 20116 and, in particular, MCC 23210, is MEM 10112's second or high speed level of data storage. MC 20116 is the primary path of data transfer between MSB 20110 and JP 10114 and IOS 10116. MCC 23210 contains that data
presently being used by JP 10114 and IOS 10116. As JP 10114 and IOS 10116 execute processes, data is transferred between MCC 23210 and MSB 20110 in a manner to update the contents of MCC 23210 in accordance with execution of those processes, that is so
that MCC 23210 always contains that data currently required by JP 10114 or IOS 10116. As previously described, updating of the data contents of MCC 23210 requires data to be written back to MSB 20110. Write back operations are accomplished, as
described further below, through WBF 23212. In addition, and as also previously described, IOS 10116 may write and read complete blocks of four words directly from MSB 20110, bypassing MCC 23210. Bypass write operations are accomplished, as described
further below, through BYF 20118.

1. General Cache Operation (FIG. 233)

Referring to FIG. 233, a partial diagramic representation of MCC 23210 is shown and will be used in describing overall structure and operation of MCC 23210. MCC 23210 is an 8-K byte, 4-way set, associative cache which is word readable and byte
writable. MCDS 23220 is MCC 23210's data store, that is contains all data stored in MCC 23210. MCDS 23220 may contain, for example, up to 2,048 data words, each data word comprising 32 bits, or 4 bytes, of data plus 4 bits of byte parity.

MCDS 23220's internal structure is divided into 128 sets, sets 0-127, wherein each set contains four cache frames, that is Frames A, B, C, and D. Each cache frame, for example Frame A of Set 0, contains four 36 bit words, that is 32 bits of data
plus 4 bits of parity as described above.

Data storage locations in MCDS 23220 are selected, for data read or write operations, by physical addresses provided from IO Port 20910, JPO Port 21010, and JPI Port 21110. As indicated in FIG. 233, physical addresses provided to MCC 23210 are
comprised of a 13 bit Physical Page Number (PPN) field, a 7 bit Block (BLK) within physical page field, a 2 bit Word (WD) with block field, and a 4 bit Byte Write Enable (BYTE) within word field. BYTE field is generated from the two most significant
bits of a physical addresses bit within word field, previously described. A physical address provided to MCC 23210 may, therefore, individually identify each of 2 data words. MCDS 23220, however, has a capacity in the present example of 2,048 data
words. In addition, data words are not stored in MCDS 23220 in a predetermined sequence but are stored therein as data storage spaces become available as data is transferred into and out of MCDS 23220. It is, therefore, necessary to translate between
physical addresses and data store addresses (DSA), which are used to access MCDS 23220's data storage space. As indicated in FIG. 233, a DSA is comprised of a 7 bit Index (INDEX) field, a 2 bit Frame number (FRAME) field, a 2 bit Word (WD) field, and a
4 bit Byte Write Enable (BYTE). INDEX field is taken directly from BLK field of physical address and identifies a particular set of MCDS 23220's 128 sets. FRAME field identifies a particular frame within that set. WD field is taken directly from
physical addresses WD field and identifies a particular word within that frame. BYTE field is similarly generated from physical addresses BYTE field and bytes to be written within that word. Because a DSA INDEX field is taken directly from a physical
address BLK field, MCDS 23220's address space corresponds to MEM 10112's physical address space on a block by block basis. That is, all words within a particular block identified by a particular physical address block field will, if present in MCDS
23220, reside in a particular corresponding one of MCDS 23220's 128 sets. Similarly, a particular word within a given block will always reside in a corresponding particular one of four possible word spaces in the set selected by block field. For
example, if a particular physical address's block field has indicated set zero and word field has indicated word two, corresponding data word space in MCDS 23220 will reside in set zero, word two of Frames A, B, C, or D. Finally, physical address byte
write enable field corresponds directly to an MCDS 23220 byte locations within words.

A physical address's BLK, DWD, and BYTE fields are, therefore, sufficient to define within MCDS 23220's address space, a particular set, one of four word locations within that set, that is a word space and Frames A, B, C, or D, and the bytes to
be written within one of those four words. A physical addresses PPN field is, however, necessary to uniquely define any particular word in MEM 10112's address space and correspondingly, to identify the particular frame in a set in which a word
identified by a physical address is located. FRAME field of ASDA identifies a particular frame and is provided by MCTS 23214. MCTS 23214 contains the PPN fields, referred to as "Tags" of all words residing in MCDS 23220. As indicated in FIG. 233, MCTS
23214 is comprised of Tag Memory A (MTAGA) 23226, Tag Memory B (MTAGB) 23228, Tag Memory C (MTAGC) 23230, and Tag Memory D (MTAGD) 23232. MTAGA 23226 contains the PPN's, that is tags, of all words residing in frames A of sets 0 to 127 of MCDS 23220.
Similarly, MTAGB 23228, MTAGC 23230 and MTAGD 23232 contain tags of words residing in, respectively, frames B, C, and D of sets 0 to 127. MTAGA 23226 to MTAGD 23232 are addressed by INDEX and correspondingly provide the tags (PPN) of those data words
residing in frames A to D of the set selected by INDEX. If a requested data word is contained in MCDS 23220, at least one of MTAGA 23226 to MTAGD 23232 will respond by providing a corresponding tag. The finding of a MCC 23210 entry corresponding to a
physical address submitted to MCC 23210 is referred to as a cache "hit". TAG outputs of MTAGA 23226 to MTAGD 23232 are compared to physical addresses PPN field by CHCL 23216. CHCL 23216 identifies which of MTAGA 23226 to MTAGD 23232 responded with a
tag corresponding to physical address PPN field and generates a corresponding FRAME identifying the frame within a set in which the desired data word is located. That data word may then be read from MCDS 23220.

Having described overall operation of MCC 23210, structure and operation of MCC 23210 will be described in further detail below.

2. Memory Cache 20116's Cache MCC 23210 (FIG. 232)

Referring to FIG. 232, MCC 23210, corresponding to MCC 23210 of FIG. 232, is shown. As described above, MCTS 23214 contains the tags, that is PPN fields, of physical addresses of all data words stored in MCDS 23220. In addition to containing
thirteen bits of TAG for corresponding entries in MCDS 23220, each entry in MTAGA 23226 to MTAGD 23232 includes a validity bit and auxiliary bit. Auxiliary bit may be used as a flag to indicate special conditions while validity bit indicates that valid
data has been written into the corresponding MCDS 23220 entry. If the validity bit of a MCTS 23214 entry has not been set, that MCTS 23214 entry will not be considered by CHCL 23216 in comparing INDEX to MCTS 23214's tag outputs.

As indicated in FIG. 232, MTAGA 23226 to MTAGD 23232 are each 128 word by fifteen bit random access memories, comprised for example of 93422 256X4 RAMs. Data inputs of MTAGA 23226 to MTAGD 23232 are connected from TSA Bus 21210 from PRMUX 20720
to receive the PPN fields or Tags, of data words being written into MCDS 23220. MTAGA 23226 to MTAGD 23232 data inputs also receive Tag Valid (TAGVAL) and Auxiliary (AUX) bits from MIC 20122 as described above. MTAGA 23226 to MTAGD 23232 address inputs
are also provided from TSA Bus 21210 and comprise the BLK fields, or INDEX, of physical addresses data words being written into or read from MCDS 23220. Individual Write Enable (WE) inputs are provided to MTAGA 23226 to MTAGD 23232 when TAGs are to be
written into MCTS 23214. MTAGA 23226 to MTAGD 23232 WE inputs are provided from Tag Write Enable Gates (TAGWEG) 23234. Enable inputs Tag Store Initiate (TSINIT) and Tag Store Write Enable (TSWE) are provided to TAGWEG 23234 from MIC 20122, and in
particular from RM 20722. A frame number input selecting one of MTAGA 23226 to MTAGD 23232 to be written into is provided to TAGWEG 23234 from Data Store Frame Address Register (DSFAR) 23236, described further below.

Tag outputs of MTAGA 23226 to MTAGD 23232 are provided to CHCL 23216, and in particular to Tag Comparitor (TAGC) 23238 and Write Back Page Multiplexer (WBPMUX) 23240. In addition to four tag inputs from MCTS 23214, TAGC 23238 receives TAG input,
that is PPN field of physical address, from TSA Bus 21210 and PRMUX 20720 as previously described. TAGC 23238, as described above, compares TAG inputs from MCTS 23214 and PPN input. TAGC 23238 then provides a two bit encoded output, FRAME, indicating
whether TAG corresponding to INDEX has been located in either MTAGA 23226, MTAGB 23228, TAGC 23230, or MTAGD 23232. If no corresponding TAG has been found, TAGC 23238 indicates that the requested data is not contained within MCC 23210, that is that a
cache miss has occurred, by asserting output No Hit (NOHIT) to MIC 20122.

As stated above, WBPMUX 23240 also receives TAG outputs of MCTS 23214. WBPMUX 23240 also receives a two bit select input from Frame Select Mux (FRAMESMUX), described further below. WBPMUX 23240's select input selects, as WBPMUX 23240's output,
that TAG input from MCTS 23214 corresponding to an INDEX to TAGC 23238. While a load is in progress, the new PPN of the block being loaded in the cache is written into the corresponding tag store. Before the new TAG is written, the old TAG is read out
via WBPMUX 23240 that corresponds to the data that is being written back to MSB 20110. As will be described further below, this TAG information is captured for subsequent use by WBF 23212 in executing a write back operation wherein data is read from MCC
23210 and written back into MSB 20110.

Associated with WBPMUX 23240 is Dirty Flag Multiplexer (DFMUX) 23244. DFMUX 23244 receives the same two bit frame select input as provided to WBPMUX 23240 but receives dirty bit data inputs from, as described further below, LRUL 23224. As will
be described below, LRUL 23224 includes a memory operating parallel to MCTS 23214 and MCDS 23220. In part, LRUL 23224 memory includes a "dirty bit", or "dirty flag", for each entry in MCDS 23220 and corresponding TAG and MCTS 23214. LRUL 23224's dirty
flags indicate, for each corresponding entry in MCTS 23214 whether that entry has been written into, that is presently contains different data than a corresponding entry in MSB 20110. Upon occurrence of a cache miss, therefore, DFMUX 23244 provides a
single dirty bit output referring to the corresponding entry in MCTS 23214. If WBF 23212 is to perform a write back operation, the single dirty bit output of DFMUX 23244 is provided to MIC 20122 as Write Back Page Dirty (WBPDRT) to indicate that that
particular MCDS 23220 entry is dirty and must be written back to MSB 20110 rather than discarded. Also provided to MIC 20122 are outputs Write Back Page Validity (WBPVAL) and Write Back Page Auxiliary Bit (WBPAUX) from WBPMUX 23240. As described above,
these outputs to MIC 20122 are taken from miss entries in MCTS 23214. Where a cache miss has occurred and an entry is to be written back to MSB 20110, WBPVAL indicates whether that entry and MCDS 23220 is valid. If that entry does not contain valid
data, WBPVAL will indicate, despite assertion of WBPDRT, that that entry need not be written back to MSB 20110. WBPAUX is, as described above, an auxiliary bit which may be used to indicate special conditions.

As previously described with reference to FIG. 233 CHCL 23216 provides a two bit FRAME output comprising FRAME field of a DSA to MCDS 23220. FRAME output is provided by FRAMESMUX 23242. FRAMESMUX 23242 receives three two bit FRAME number
inputs, and any one of which may be selected to be CHCL 23216's FRAME output. A first FRAME number input of FRAMESMUX 23242 is FRAME number output of TAGC 23238 and is FRAME number of an MCTS 23214 entry, in corresponding MCDS 23220 entry, corresponding
to an INDEX of a memory request. FRAME number output of TAGC 23238 is provided as FRAME number output of FRAMESMUX 23242 when a memory request is submitted to MCC 23210 to determine whether requested data is resident in MCC 23210. If, as previously
described, a cache hit occurs, that is the requested data is contained in MCDS 23210, FRAME number output of FRAMESMUX 23242 will be that of the corresponding entry in MCDS 23220.

A second input of FRAMESMUX 23242 is two bits provided from INCREG 21211 through TSA Bus 21210 from PRMUX 20720. As previously described, INCREG 21211 generates sequential MCC 23210 addresses, for example during cache flush operations.
FRAMESMUX 23242 FRAME number output will therefore be provided from INCREG 21210 during cache flushes in order to select each of the frames.

FRAMESMUX 23242's third FRAME number input is provided from LRUL 23224 and, as described below, is used to select the least recently used frame of a particular MCDS 23220 set. FRAMESMUX 23242's FRAME number input LRUL 23224 is provided as
FRAMESMUX 23242's FRAME number output during write back operations in which least recently used frames of MCDS 23220 are written back to MSB 20110, as described in an above description of WBPMUX 23240.

Selection between FRAMESMUX 23242's three FRAME number inputs is controlled by two bit Frame Select (FRAMESEL) input from MIC 20122. A first bit of FRAMESEL is Source Select Physical Page Number (SSLPPN) used, in general, during all MCC 23210
read and write operations. A secod bit of FRAMESEL is Source Select Replace (SSLRPL) which, in particular, selects FRAMESMUX 23242's input from LRUL 23224 during, for example, write back operations when data in MCDS 23220 is replaced by new data and the
replaced data read back to MSB 20110.

As previously described, an MCC 23210 access operation is executed in two clock cycles. During first clock cycle, MCTS 23214 is read, resulting TAG outputs are compared to INDEX, and FRAMESMUX 23242 provides a corresponding FRAME number output
or TAGC 23238 indicates a cache miss by asserting NOHIT. At start of second clock cycle, FRAMESMUX 23242's FRAME number output, together with INDEX, WD, and byte write enable fields of physical address, are transferred into Address Registers (AR) 23218. During second clock cycle, address information residing in AR's 23218 is provided for example, to MCDS 23220 to read or write data stored therein. AR 23218 includes Data Store Frame Address Register (DSFAR) 23236, Data Store Word Address Register
(DSWAR) 23244, and Data Store Byte Address Register (DSBAR) 23246, all of which provide address information to MCDS 23220 for use in reading data from or writing data into MCDS 23220. AR 23218 also includes Write Back Address Register (WBAR) 23248,
storing address information for use in write back operations, and Miss Address Register (MISAR) 23250, storing physical address of memory requests resulting in a cache miss. Bypass Write Address Register (BYWAR) 23252 is, as described further below,
used by BYF 20118 in writing data into BYF 20118 bypass write operations. DSFAR 23236, DSWAR 23244, DSBAR 23246, WDAR 23248, MISAR 23250, and BYWAR 23252 may be comprised, for example, of SN74S194 registers.

Referring first to DSFAR 23236, DSWAR 23244, and DSBAR 23246, as stated above these registers provide data store addresses to MCDS 23220 for use in writing data into or reading data from MCDS 23220. DSFAR 23236 receives two bits of FRAME number
from CHCL 23216 and seven bits of INDEX from TSA Bus 21210 from PRMUX 20720. DSFAR 23236 in turn provides FRAME number and INDEX to LRUL 23224, described further below, and as part of address input to MCDS 23220. As previously described, DSFAR 23236
provides FRAME number to TAGWEG 23234 for tag loads.

DSWAR 23234 receives two bits of WD field, indicated as Next Data Store Word (NEXTDSW) (0-1) from MIC 20122. DSWAR 23234 in turn provides two bits of WD field as part of address input to MCDS 23220. DSBAR 23246 receives four bits of BYTE field,
Next Bytes (NEXTBYTES) (0-3) from MIC 20122. DSBAR 23246 in turn provides four bits of byte field as part of data store byte write enables to MCDS 23220. DSBAR 23246's output is gated in Data Store Address Byte Gates (DSABYG) 23254 by Data Store Write
Enable (DSWE) and Data Store Load (DSLOAD) from MIC 20122. DSWE is asserted during write operations to MCDS 23220 and DSLOAD is asserted during a MCDS 23220 load operation. As previously described, all MCDS 23220 read accesses are on word boundaries
whereas load and write operations are on byte boundaries Therefore, unless DSWE and DSLOAD are asserted, a MCDS 23220 read access is indicated and BYTE field of MCDS 23220 address is ignored. Finally, addresses are transferred into DSFAR 23236, DSWAR
23244, and DSBAR 23246 upon assertion of Data Store Address Chip Enable (DSACE) to enable inputs of DSFAR 23236, DSWAR 23244, and DSBAR 23246. DSACE is provided from MIC 20122.

Referring to MISAR 23250, MISAR 23250 captures block addresses of all references to MCC 23210 during first clock cycle of a MCC 23210 cache read or write operation. If a cache miss occurs, MISAR 23250 contents are locked, thus saving block
address of a memory reference resulting in a cache miss. Address output of MISAR 23250 is provided, as described further below, to BC 20114 for use in servicing that cache miss. Data inputs to MISAR 23250 includes twenty bits of physical address from
TSA Bus 21210 from PRMUX 20720. Address information provided to MISAR 23250 is transferred into MISAR 23250 by assertion of Miss Chip Enable (MISCE) from MIC 20122 to enable input of MISAR 23250. MISAR 23250 contents are locked therein by dropping
MISCE.

WBAR 23248 is, as described previously, provided with TAG, that is PPN, address information through WBPMUX 23240 upon occurrence of a cache miss, that is when a memory request results in the requested data not being located in MCC 23210. WBAR
23248 also receives INDEX, or BLK field a physical address, from TSA Bus 21210. WBAR 23248 thereby captures block address of all MCC 23210 references resulting in a cache miss. WBAR 23248 is only loaded on a cache miss that results in a cache load in
order to provide the address for data to be written back to MSB 20110. This address information is saved by WBAR 23248 for subsequent use in performing write back operations when data is displaced from MCC 23210 to be written back into MSB 20110.
Address information is transferred into WBAR 23248 upon assertion of Write Back Address Chip Enable (WBACE) to WBAR 23248 enable input from MIC 20122.

In case of a cache miss or a requirement for a write back operation, address of missed cache reference from MISAR 23250 or address of data to be written back into MSB 20110 from WBAR 23248 is provided to BC 20114 through SBA Bus 20152. As
indicated in FIG. 232, address outputs of MISAR 23250 and WBAR 23248 as provided as inputs to SBAMUX 23256. Address output of SBAMUX 23256 is provided to SBA Bus 20152. Selection between address outputs of MISAR 23250 and WBAR 23248 is provided by
selection input Select Write Back Address (SELWBA) to SBAMUX 23256 from MIC 20122.

Finally, BYWAR 23252 provides to BYF 20118 address information regarding data to be written into BYF 20118 during bypass write operations. In particular, BYWAR 23252 data input is Next Bypass Write (NEXTBYW) (0-1) which is a two bit address
specifying which of four data storage locations in BYF 20118 that a 36 bit data word from IOM Bus 10130 is to be written. A NEXTBYW (0-1) address is transferred into BYWAR 23252 when Bypass Write Chip Enable (BYWCE) to BYWAR 23252's enable is asserted
by MIC 20122. As indicated in FIG. 232, NEXTBYW (0-1) is provided from BYWAR 23252 as Write Address input (WA) to BYF 20118 which will be described further below.

As previously described, data may be written into MCDS 23220, and in particular into DSCM 23258, from MSB 20110 through BC 20114. Data may also be written into MCDS 23220 from MOD Bus 10144, for example when MOD Bus 10144 is used as MEM 10112
internal data bus for transferring data between FIU 20120 and MCDS 23220. As shown in FIG. 232, data inputs to DSMUX 23260 are provided from RDO Bus 20158 from BC 20114, and from MOD Bus 10144. DSMUX 23260 in turn provides data input to DSCM 23258.
Selection of RDO Bus 20158 or MOD Bus 10144 as data input to DSCM 23258 is provided by Selection Input Data Store Load (DSLOAD) to DSMUX 23260 from MIC 20122.

Data read and write address inputs to DSCM 23258 include Ten Bit Address (A) input, Single Bit Chip Select (CS) input, and Four Bit Write Enable (WE) input. Ten Bit A input and Single Bit CS input are provided from DSFAR 23236 and DSWAR 23244 as
previously described. Four Bit WE input is provided from DSBAR 23246 through DSABYG 23254. DSBAR 23246's byte write enable field address output is used as write enable input DSCM 23248 because, as previously discussed, DSCM 23258 is byte addressable
only during write operations while all read operations are word addressable.

Referring finally to LRUL 23224, LRUL 23224 tracks, for each MCDS 23220 set, which are most and least recently used frames. This information is then used in selecting frames whose data is to be read back to MSB 20110 when it is necessary to
displace data from DSCM 23258 to provide memory space for data to be written therein. LRUL 23224 includes Use Encoding Logic (UEL) 23274, Usage Tracking Memory (UTM) 23276, Usage Tracking Register (UTR) 23278, and Least Recently Used Algorithm Logic
(LRUAL) 23280. UEL 23274 receives current FRAME number output from DSFAR 23236, indicating which frame of a set is currently being used, together with UPDT and PRIO from MCU 22210 in MIC 20122. UEL 23274 generates, for each DSCM 23258 set currently
being accessed, a six bit code indicating relative usage of the four frames therein. These six bits indicate, respectively, that: frame A has been referenced since frame B was referenced (AsB), AsC, AsD, BsC, BsD, and CsD. UTM 23276 is a 128 word by
ten bit memory comprised, for example, of 93425A RAMs. UTM 23276 contains a usage word entry for each of DSCM 23258's 128 sets. Each usage word is comprised of six bits of usage information provided from UEL 23274 and four dirty flag bits, that is one
dirty flag bit for each frame in a particular DSCM 23258 set. In addition to six bits of usage code from UEL 23274, UTM 23276 receives an Address (A) input from DSFAR 23236 comprising seven INDEX bits identify the DSCM 23258 set currently being
accessed. Write Enable (WE) input to UTM 23276 is provided from UTM Gate (UTMG) 23282. Inputs of UTMG 23282 include an enable bit from UEL 23274 indicating when data is being written into a particular frame DSCM 23258 and Use Write Enable (USEWE) input
from MIC 20122 indicating that a usage word is to be written into UTM 23276. UTM 23276 uses its Address (A) and Write Enable (WE) inputs to generate dirty flag bits for each usage word currently being written into UTM 23276. Upon each access of a DSCM
23258 frame, UTM 23276 provides a corresponding ten bit usage word output to UTMR 23278 where that information is captured for subsequent use. In particular, usage words are transferred into UTMR 23278 when it is necessary to displace a data word from
DSCM 23258. Transfer of a usage word into UTMR 23278 is enabled by enable signal Replace Chip Enable (RPLCE) from MIC 20122. UTMR 23278 may be comprised of, for example, a SN74S194 register.

UTMR 23278 provides, for each usage word captured therein, four bits of dirty flag to DFMUX 23244 as previously described. This information is used by MIC 20122 in write back operations to determine whether a particular block is "dirty" and must
thus be written back into MSB 20110 rather than discarded. The six bits of usage information of a usage word captured in UTMR 23278 are provided to LRUAL 23280 and are used therein to indicate which frame of a DSCM 23258 set currently being accessed is
least recently used and thus should be replaced when it is necessary to make DSCM 23258 memory space available for further data. LRUAL 23280 decodes each usage word's six usage bits and provides a corresponding least recently used FRAME input to
FRAMESMUX 23242 as previously described. Least recently used FRAME numbers are used in generating addresses to DSCM 23258 to read data words from DSCM 23258 when executing write back operations and for reading old page numbers for MCTS 23214 and writing
new page numbers into MCTS 23214.

Referring to WBF 23212, as previously described WBF 23212 is a buffer register file for transfer of displaced data from DSCM 23258 to MSB 20110. All data writes or reads to or from MSB 20110 are in full four word blocks. Similarly, when data is
to be displaced from DSCM 23258 and written back to MSB 20110, a full four word block is transferred. WBF 23212 includes Saver Register (SAVER) 23284 which captures all thirty-six bit data words read from DSCM 23258. If those data words read from DSCM
23258 are to be subsequently written back to MSB 20110, they are transferred from SAVER 23284 to Write Back File Memory (WBFM) 23286. WBFM 23286 is a four word by thirty-six bit memory comprised, for example, of SN74LS70 4.times.4 register files. WBFM
23286 receives and stores four data words, or one block, at a time of data to be transferred to MSB 20110. In addition to data word input from SAVER 23284, WBFM 23286 receives the word portion of Write Address (WA) from DSWAR 23244, as previously
described, and a Write enable input Write Back File Write Enable (WBFWE) from MIC 20122. These write address and enable inputs are used in writing words from DSCM 23258 through SAVER 23284 to WBFM 23286. WBFM 23286 receives separate read address and
enable inputs, Write Back File Read Address (WBFRA) (0-1) and Write Back File Read Enable (WBFRE) from BC 20114. These read address enable inputs are provided by BC 20114 to read data words from WBFM 23286 to BC 20114. Data output of WBFM 23286 is
provided to Store Back Data (SBD) Bus 20146 to BC 20114.

Finally, as previously described, data may be written to or read from MSB 20110 directly in full four word block transfers bypassing MCC 23210. As previously described, bypass reads are accomplished through RDO Bus 20156 and RDOMIODRV 23262 or
RDOMODDRV 23264. In a bypass read operation, therefore, four data words at a time are read directly from MSB 20110 through BC 20114 to MIO Bus 10129 or MOD Bus 10144.

BYF 20118 is used for bypass write operations and includes a full word by thirty-six bit buffer register. BYF 20118 receives four data words, not necessarily in four consecutive clock cycles, from IOM Bus 10130 and subsequently transfers four
data words at a time to BC 20114 in four consecutive clock cycles. In both WBF 23212 and BYF 20118, data words may be concurrently written into and read from WBF 23212 and BYF 20118 so long as the same address is not written into during the same clock
cycle that address is being read. As indicated in FIG. 232, BYF 20118 receives, in addition to data inputs from IOM Bus 10130, separate write and read address and enable inputs. BYF 20118 write address input is, as previously described, provided from
BYWAR 23252. Write enable input Bypass File Write Enable (BYFWE) is provided from MIC 20122. BYF 20118 read address input, Write Back File Read Address (WBFRA) (0-1) is provided from BC 20114, as is BYF 20118 Read Enable input BYFRE. BYF 20118 write
operations are thus controlled by MIC 20122 and MCC 23210 while BYF 20118 read operations are controlled by BC 20114.

Having described the structure and operation of MC 20116, the structure and operation of MA's 20112 will be described below, followed by structure and operation of BC 20114. MA's 20112 are described before BC 20114 to aid in understanding
operation of BC 20114.

k. Memory Arrays MA 20112 (FIGS. 234, 235, 236)

As previously described, MSB 20110 comprises MEM 10112's first, or bulk, level of data storage. MSB 20110 includes one to, for example, sixteen MA 20112's, each of which contains a portion of MEM 10112 bulk data storage. Each MA 20112 may
contain, for example, 256 Kilobytes, 512 Kilobytes, 1 Megabyte, or 2 Megabytes of data storage. MEM 10112's physical address space, and physical data storage space, is organized in segments of 256 Kilobytes each. Each MA 20112 is referred to as a data
module and may therefore contain between one and eight segments of data storage capacity. As will be described further below, MSB 20110's and MA 20112's, addressing circuitry is designed to allow addressing of up to 64 segments. Memory capacity of
individual MA 20112's may therefore be increased if required. As also will be described below, an MA 20112's data storage capacity may be increased without requiring modifications of MSB 20110's or BC 20114's addressing circuitry or operation. All data
writes to or reads from MSB 20110, that is MA's 20112, are comprised of four word blocks as previously described. That is, each write to or read from MSB 20110 is comprised of a sequential transfer of four data words. Each data word residing in MSB
20110 is comprised of thirty-two bits of data plus seven bits of error correcting hamming code.

Referring to FIG. 234, a partial block diagram of an MA 20112 is shown. MA 20112's data storage is comprised of four random access memory arrays indicated in FIG. 234 as Memory Array Plane 0 (PLN0) 23410 to Memory Array Plane 3 (PLN3) 23416.
Each RAM of PLN0 23410 to PLN3 23416 may have a data storage capacity of, for example, sixteen Kilobits or 64 Kilobits if MA 20112 contains, respectively, 256 Kilobytes or one Megabyte of data storage. As stated above, data is stored in, written into,
and read from MSB 20110 in blocks of four words which may be referred to as word 0, word 1, word 2, and word 3. In MA 20112, all word zeros of blocks stored therein are contained in PLN0 23410 and words 1, 2 and 3 are stored, respectively, in PLN1
23412, PLN2 23414 and PLN3 23416. A write to or read from an MA 20112 therefore comprises a write or read of single word to or from each of PLN0 23410 to PLN3 23416, and is performed in that order.

Referring to FIG. 235, relationship between physical address provided to MEM 10112 from IO Port 20910, JPO Port 21010, or JIP Port 21110 and physical address provided to MA 20112 is shown. As described above, all data transfers to and from an MA
20112 are four word blocks. Physical address to a MA 20112 therefore comprises the twenty most significant bits of a physical address provided to MEM 10112, that is physical address to block level. As indicated in FIG. 235, that portion of physical
address from which an MA 20112 is derived includes the thirteen bit PPN field and seven bit BLK field of physical address. In an MA 20112, PLN0 23410 to PLN 3 23416 are logically arranged, and addressed as an array of rows and columns of data storage
spaces. Each data storage space containing four thirty-nine bit data words, or one block of data. Selection of a four word block of MA 20112 data space thereby requires a row address and a column address. As previously described, words 0 to 3 of a
block in MA 20112's data space are contained, respectively, in PLN0 23410 to PLN3 23416. A particular group of four words residing in PLN0 23410 to PLN3 23416 is identified by a corresponding single combination of row and column address. Presently that
combination of row and column address to address inputs of PLN0 23410 to PLN3 23416 will thereby select, respectively, words zero to three of the block identified by that combination of row and column addresses. Also as stated above, each MA 20112 may,
for example, contain either 256 Kilobytes, 512 Kilobytes or one Megabyte of storage capacity, respectively corresponding to either sixteen K or 64 K blocks of data, either single or double density boards. A row and column address of a data block in a MA
20112 must therefore comprise either seven bits each of row and column address or eight bits each of row and column address if that MA 20112 contains, respectively, 256 Kilobytes or 512 Kilobytes, 1 Megabyte or 2 Megabytes, of storage capacity.

In addition to row and column address to identify a particular data block in an MA 20112, address to MA's 20112 of MSB 20110 must include a Module Selection (MODSEL) field to select the particular module, or MA 20112, in which a particular data
block resides. As indicated in FIG. 235, MODSEL field of an MA 20112 address contains six bits of address information and is thus sufficient to identify up to 64 modules wherein each module contains 256 K bytes, or 16 K blocks of data.

As indicated in FIG. 235, the six most significant bits of physical address PPN field are used directly as MODSEL field of MA 20112 address. Bits six to twelve inclusive of physical address PPN field are used directly as bits one to seven of MA
address CA field and the seven bits of physical address BLK field are used directly as bits one to seven of MA address RA field. Bits three and four of physical address PPN field are, in addition to comprising bits four and five of MODSEL field, used
respectively as bits zero of CA field and RA field of MA address. Bits four and five MA address MODSEL field thereby overlap bits zero of MA address CA and RA fields, and twenty bits of physical address are translated into twenty-two bits of MA address. When a particular MA 20112 contains 1 Megabyte or 2 Megabytes of data storage space, that MA 20112 will utilize all eight bits of MA address CA and RA fields. In an MA 20112 having 256 Kilobytes or 512 Kilobytes of address space, bits zero of MA address
CA and RA fields are ignored, but the address information contained therein is not discarded but is retained in MA address MODSEL field. As will be described further below, each MA 20112 and MSB 20110 includes circuitry for examining MODSEL fields of MA
addresses in such a manner that each particular MA 20112 will respond only to MA addresses referring to segments residing in that particular MA 20112. MA 20112s of differing capacity may therefore be combined in a particular CS 10110 to comprise MSB
20110, without need for complex mapping between physical addresses and MA addresses or modifications to BC 20114 or MSB 20110 circuitry to adapt MSB 20110 to varying data storage capacities.

As previously described, all data transfers to and from an MA 20112 are of four word blocks wherein the four words are sequentially transferred in four consecutive clock cycles. Also as described above, the four words comprising a block reside
in four corresponding row and column address locations in PLN0 23410 to PLN3 23416. That is, the four word locations comprising a block in PLN0 23410 to PLN3 23416 are identified by a single combination of MA address CA and RA field. A read or write of
a particular four word block is accomplished by sequentially addressing, with RA and CA fields of a MA address, PLN0 23410 to PLN3 23416, in that order. Address and control inputs to a memory plane include an eight bit Address input (ADDR) as RA and CA,
and five control signals comprising a Row Address Strobe (RAS), a Column Address Strobe (CAS), Load Out (LDOUT), Load In (LDIN) and Write Enable (WE). WE is asserted only during write operations. Referring to FIG. 236, a timing diagram of a MA 20112's
control and address inputs for read or write operation is shown. A write to or read from a single plane is executed in 4 clock cycles (CCs). Operations of PLN0 23410 to PLN3 23416 are overlapped, as shown, so that four words are sequentially written
into or read from PLN0 23410 to PLN3 23416 during 8 consecutive clock cycles. Address, control, and data inputs and outputs of a MA 20112 are shown at top of FIG. 236. As stated above, RA and CA fields of an MA address are provided sequentially to a
plane's address inputs, accompanied by corresponding address strobe inputs RAS and CAS. Referring to the MA 20112 control and address inputs, RA field is provided first, accompanied by Row Address Strobe 0 (RAS0), and followed by CA field which is
accompanied by Column Address Strobe 0 (CASO). If a data read operation is being executed, LDOUT is asserted during CC3. If a data write operation is being executed, data is applied at start of or before CC0 and LDIN asserted during CC1. The
sequential assertion of each plane's RA, RAS, CA, and CAS is shown below the MA 20112 control and address inputs. WE is generated from LDIN and asserted during write operations. Data read out appears as Data Out (DOUT(0-3)). MA 20112 refresh
operations are executed by performing a MA 20112 read operation wherein CAS is not asserted and CA field is not provided, that is only RA field is provided and only RAS asserted. This results in a MA 20112 read operation of all columns having that row
address. Having described overall structure and operation of an MA 20112, MA 20112 circuitry shown in FIG. 234 will now be described in further detail. PLN0 23410 to PLN3 3416 have been discussed above.

Referring again to FIG. 201, data inputs and data outputs of all MA 20112 are connected in parallel to, respectively, WD Bus 20126 and RD Bus 20130 which are in turn connected to data output and data input of BC 20114. Control inputs and outputs
of all MA 20112's and BC 20114 are similarly connected and parallel to ADCTL Bus 20134.

MACG 23446 receives control inputs MODSEL from ADRCOMP 23452, and LDIN0 to LDIN3 and LDOUT0 to LDOUT3 from SWAR 23442. MACG 23446 in turn provides outputs RDSEL, DRIVE, SYSCLK, ADRCLK, WDEVEN, and WDODD to other circuitry of MA 20112, and SEL to
BC 20114.

Data inputs, that is four word blocks, are provided to each MA 20112 in parallel through Word (WD) Bus 20126 and Word Buffer (WDB) 23418. WDB 23418 may, for example, be comprised SN74S04s. WDB 23418's output is provided as data inputs to Even
Word Latch (EWL) 23420 and Odd Word Latch (OWL) 23422. Even data words, that is words 0 and 2 of a block, are transferred into and captured in EWL 23420 and odd data words, that is data words 1 and 3 of a block, are transferred into and captured in OWL
23422. Data outputs of EWL 23420 are provided through Buses 23424 and 23426 to, respectively, PLN0 23410's DIN and PLN2 23414's DIN. Data outputs of OWL 23422 are provided through Buses 23428 and 23430 to PLN1 23412's DIN and PLN3 23416's DIN. EWL
23420 and OWL 23422 therefore provide even numbered data words and odd numbered data words to, respectively, PLN0 23410 and PLN2 23414, and PLN1 23412 and PLN3 23416. EWL 23420 and OWL 23422 are provided to satisfy data set up and hold times for the
random access memories comprising PLN0 23410 to PLN3 23416. These random access memories have a data set up and hold time requirement slightly greater, in the present embodiment of MA 20112, than the available time interval between system clocks. By
capturing alternate even and odd data words in EWL 23420 and OWL 23422, data words to be transferred into PLN0 23410 to PLN3 23416 are available over an interval of two clock cycles, thereby meeting data set up and hold time requirements.

Referring first to CARAR 23440, row and column address fields of MA addresses are provided as Plain Address (PLNADR) (0-7) to inputs of CARAR's 23440 of all MA 20112s in parallel. CARAR 23440, as shown in FIG. 234, is four stage shift register
providing six successive MA address RA and CA field outputs to Planes A and B of PLN0 23410 to PLN3 23416, in that order, during four consecutive clock cycles.

As described above with reference to FIG. 236, RA field and CA field address inputs to PLN0 23410 to PLN3 23416 are accompanied by RAS and CAS control inputs, and WE inputs if a write operation is to be performed. These inputs are provided
through SWAR 23442. Inputs to SWAR 23442 from BC 20114 through ADCTL 20134 include, as indicated in clock cycle zero (CC0) of FIG. 236, PLNRAS, PLNCAS and PLNLDIN. SWAR 23442 is again a four stage register providing successive outputs to control inputs
of Banks A and B of PLN0 23410 to PLN3 23416. PLNRAS, PLNCAS and PLNLDIN are thus provided successively to PLN0 23410 to PLN3 23416 as, respectively, RAS, CAS, and WE when MODSEL 23454 is enabled by MODSEL input from ADRCOMP 23452. As indicated in FIG.
234, separate RAS outputs are generated for Banks A and Banks B of PLN0 23410 to PLN3 23416. Selection between Banks A and Banks B is controlled through RASG 23456 which enables RAS inputs to either Banks A or Banks B of PLN0 23410 to PLN3 23416.
Selection between Banks A and Banks B of PLN0 23410 to PLN3 23416 is provided by Bank Select (BNKSEL) input from RASG 23456 from ADRCOMP 23452, described further below.

Input Plane Refresh (PLNRFSH) to MODSEL 23454 is asserted by BC 20114 during refresh operations. Banks A and B of PLN0 23410 to PLN3 23416 are provided with RAS inputs, thereby accomplishing a refresh operation. As stated above, input PLNLDIN
is asserted to generate WE to PLN0 23410 to PLN3 23416 when a write operation is to be performed. Similarly, input PLNRDOUT to MODSEL 23454 is asserted by BC 20114 when an MA 20112 read operation is to be performed. PLNRDOUT, together with PLNLDIN,
generate outputs LDIN0 to LDIN3 and LDOUT0 to LDOUT of SWAR 23442. As will be described further below, these outputs are provided to MACG 23446 to generate MACG 23446 output DRIVE, WDEVEN, and WDODD. As described above, DRIVE, WDEVEN, and WDODD are
provided, respectively, to MAODRV 23438, EWL 23420 and OWL 23422 to control transfer of data into and out of MA 20112.

Referring to ERAS 23444, in a present embodiment of MA 20112 it is necessary, to insure adequate precharge periods for the integrated circuits comprising PLN0 23410 to PLN3 23416, to generate RAS inputs to the data RAMs which are less than 3 full
clock cycles in length. ERAS 23444 is a four stage shift register receiving PLNRAS and clocked by ADRCLK. As described below with reference to MACG 23446, ADRCLK is a clock signal occuring before SYSCLK by a sufficient amount to insure proper setup
time of addresses at the RAMs. Outputs of ERAS 23444 are RAS to PLN0 23410 to PLN3 23416 occurring earlier than those RAS outputs provided by SWAR 23442. RAS outputs of ERAS 23444 are ANDed with RAS outputs of SWAR 23442 to generate the shortened RAS
inputs to PLN0 23410 to PLN3 23416 as required. Again, separate RAS outputs of ERAS 23444 are provided to Banks A and B of PLN0 23410 to PLN3 23416. Selection between ERAS 23444's RAS outputs is provided through ERASG 23416 and determined by MODSEL
input from ADRCOMP 23452 in a manner similar to that described previously with reference to RASG 23456.

ARDADD 23450 and ADRCOMP 23452 together determine whether the particular segment of MSB 20110 address space is located on that particular MA 20112 and, if so, enable that MA 20112 to perform the operation requested by BC 20114. As described
above, a first input to ADRADD 23450 is PREMADI, specifying the upper limit of the previous MA 20112's addresses space. A second input to ADRADD 23450 is MMAADR specifying the total amount of address space, for example, 256 Kilobyte or 512 Kilobyte or 1
Megabyte or 2 Megabytes of address space contained on that MA 20112. ADRADD 23450 adds PREMADI and MMAADR to generate CURMADO indicating the upper limit of that MA 20112 address space. As described above, CURMADO is provided as an input to the next
higher MA 20112 and is an input to ADRCOMP 23452. ADRCOMP 23452 also receives PREMADI. ADRCOMP 23452 thus has inputs PREMADI and CURMADO indicating, respectively, the upper and lower limits of that MA 20112's address space. Input MODSEL (0-5), that is
the MODSEL field of a MA address, is provided as a third input to ADRCOMP 23452. ADRCOMP 23452 compares MODSEL (0-5) to both PREMADI and CURMADO to determine whether a particular read or write operation indicated by BC 20114 refers to the address space
of Banks A or B of that MA 20112. If so, ADRCOMP 23452 provides MODSEL enable signals to MODSEL 23454 and to MACG 23446. ADRCOMP 23452 also generates and provides BNKSEL to RASG 23456 and ERASG 23460 to select whether Bank A or Bank B of that MA 20112
should be enabled by being provided with RAS inputs from SWAR 23442 and ERAS 23444.

Referring finally to MACG 23446, MACG 23446 as described above generates certain clock and control signals used within that MA 20112 and by BC 20114. First, Drive Logic (DRIVE) receives LDOUT0 to LDOUT3 from SWAR 23442. As previously described,
LDOUT0 to LDOUT3 indicates whether that MA 20112 is to execute a read operation. DRIVE 23460 generates, from LDOUT0 and LDOUT3, RDSEL to MUXREG 23434. RDSEL is a selection enable signal indicating to MUXREG 23434 whether a data input is to be presented
from either PLN0 23410 or PLN2 23414, that is even word planes or from PLN1 23412 or PLN3 23416, that is odd word planes. RDSEL is used within MUXREG 23434 to multiplex even and odd numbered words from PLN0 23410 to PLN3 23416 into MUXREG 23434, and
from MUXREG 23434 to MUXREGO Bus 23436. Inputs LDOUT0 to LDOUT3 to DRIVE 23460 are used to generate an initial signal indicating that a data word is to be read from one PLN0 23410 to PLN3 23416 on next clock cycle. This initial enabling signal is
delayed by one clock cycle in a register and provided as output DRIVE to MAODRV 23438 to enable transfer of a word read from PLN0 23410 to PLN3 23416 on to RD Bus 20130.

ODD Even Select Logic (OES) 23462 receives inputs PL0LDIN to PL3LDIN. These inputs are gated together with a clock input to generate WDEVEN and WDODD to clock data words from WD Bus 20126 and WDB 23418 into, respectively, EWL 23420 and OWL
23422.

Clock Gating (CG) 23464 receives inputs REGCLK, MEMCLK, and CLKENBL from a clock generator in DP 10118 to generate ADRCLK and System Clock (SYSCLK) to other portions of MEM 10112 circuitry.

Aknowledgment Gating (ACK) 23466 of MACG 23446 generates acknowledgment output Select (SEL) to BC 20114 when that MA 20112 has been successively addressed. SEL indicates to BC 20114 that an MA 20112 and MSB 20110 has accepted a request for a
read or write operation. ACK 23466 receives input MODSEL from ADRCOMP 23452 where it is clocked into a register by SYSCLK. Sampled MODSEL input is then provided as SEL.

Having described structure and operation of an MA 20112 above, the structure and operation of BC 20114 will be described next below.

1. Bank Controller 20114 (FIGS. 237, 237A and 237B)

As previously described, BC 20114 is the data transfer path between MSB 20110 and MC 20116. In addition, BC 20114 generates address and control signals for MA 20112's, and performs error detection and correction on data written to, read from,
and stored in MSB 20110.

A request to BC 20114 for a MSB 20110 read or write operation is comprised of physical address to block level, an operation code indicating the operation to be performed, and control bit indicating that the request is valid and should be
performed. Such requests are received and stored in BCRR 23720. Physical address to block level is, as previously described with reference to FIG. 235, comprised of thirteen bits PPN field and seven bits of BLK field of physical address. Thirteen bits
of PPN field and seven bits of BLK field of physical address are provided as address data inputs to BCRR 23720 from PRMUX 20720 through TSA Bus 21210. Operation code is provided to data inputs of BCR 23720 as BANKCMD (0-2) from MISSC 20726. Similarly,
request validity control signals is provided as a data input to BCRR 23720 as BANKSTRT from MISSC 20726. When a request to BC 20114 is to be executed, BCRR 23720 provides outputs Valid Request (VLDREQ) and Operation Code (OPCODE), corresponding
respectively to BANKSTRT and BANKCMD (0-2), as inputs to BCC 23718 which subsequently controls execution of that request.

As previously described, an MA address of an MSB 20110 operation is comprised of MODSEL (0-5) field, and CA and RA fields which are presented sequentially. MODSEL field is comprised of six most significant bits of physical address PPN field and
transferred from BCRR 23720 address data outputs to ADCTL Bus 20134 through MODSMUX 23724, MODSR 23730, and MODSELDRV 23732. As will be described further below, refresh addresses are provided by RAC 23722 which also provides a MODSEL field input MODSMUX
23724. Selection between MODSEL fields from BCRR 23720 and RAC 23722 by MODSMUX 23724 is controlled by Address Source Selection (ADSS) input to MODSMUX 23724 from BCC 23718. MODSR 23730, connected between MODSMUX 23724 and MODSELDRV 23732, is a
pipeline register provided for timing purposes.

CA field of a MA address, as previously described, is comprised of 7 most significant bits, plus bit three, of physical address PPN field RA field is comprised of 7 bit physical address BLK field plus bit four of PPN field. As indicated in FIG.
237A, RRCAMUX 23726 receives as inputs two eight bit fields from PPN field and BLK field of physical address stored in BCRR 23720. One eight bit input field comprises RA field of MA address, while second eight bit field comprises CA field. RRCAMUX
23726 receives selection input CAS (Column Address Strobe) from BCC 23718 and, under control of CAS selects either RA or CA field from BCRR 23720 as RRCAMUX 23726's output. RRCAMUX 23726 also receives an enable signal input Refresh Busy (RFSHBUSY) from
BCC 23718. As will be described further below, RFSHBUSY is asserted when BC 20114 executes a MSB 20110 refresh operation and inhibits RRCAMUX 23726 during refresh operations. RRCAMUX 23726 sequentially transfers RA and CA fields of MA address from BCRR
23720 to input of RCAR 23734. RCAR 23734 is, again, a pipeline register for timing purposes. Output of RCAR 23734 is transferred onto ADCTL Bus 20134 as PLNADR (0-7) through PLNADRRV 23736.

Referring to RAC 23722, RAC 23722 is a counter controlled by Count Down (CNTDOWN) input from BCC 23718. RAC 23722 generates sequential refresh addresses for refreshing MA's 20112 of MSB 20110 as previously described. RAC 23722 generates,
affectively, a thirteen bit PPN field and seven bit BLK field corresponding to thirteen bit PPN and BLK fields of BCRR 23720. Contents of RAC 23722 are thereby a physical address to block level for refresh purposes. Seven most significant bits of
refresh address PPN field are provided, as described above, as an input to MODSMUX 23724 and can be selected by ADSS to appear as MODSEL (0-5) on ADCTL Bus 20134 during refresh operations. RFRCAMUX 23728, like RRCAMUX 23726, receives two eight bit input
fields, that is CA and RA fields of an MA 20112 address from RAC 23722. RFRCAMUX 23728 receives selection inputs CAS, to sequentially select RA and CA fields from RAC 23722 as RFRCAMUX 23728's output. RFRCAMUX 23728 also receives enable input RFSHBUSY. RFSHBUSY to RFRCAMUX 23728 is an enable signal allowing RFRCAMUX 23728 to transfer refresh address RA and CA fields from RAC 23722 to inputs of RCAR 23734. Again, RA and CA fields from RFRCAMUX 23728 are pipelined in RCAR 23734 and provided through
PLNADRDRV to ADCTL Bus 20134 as PLNADR (0-7).

Data words provided to BC 20114 from MC 20116 to be written into MSB 20110 are comprised of thirty-six bit data words, including thirty-two bits of data and four bits of parity. The thirty-two data bits of data words to be written into MSB 20110
are transferred directly into WDR 23738. All thirty-six bits of each data word, that is the thirty-two data bits plus four parity bits, are transferred into WDPC 23740 where a parity check is performed to detect errors in that data word. WDPC 23740
generates a single bit parity error output indicating whether such a parity error has been determined. This parity error is gated together with ENBL and PCG 23742 and provided as a two bit input, indicating occurrence of a parity error, to WDR 23738.
In order to maintain the integrity of data and associated errors, if a parity error has occurred in data to be written into MSB 20110, the two bit parity code causes WDERCCG 23744 to generate a check code output indicating a multiple bit error in the
data. The thirty-two data bits of a data word resident in WDR 23738 plus the two bit parity check code from PCG 23742 are provided from WDR 23738 to WDERCCG 23744. WDERCCG 23744 generates, from these inputs, seven bits of error correcting hamming code
for the thirty-two data bits currently residing WDR 23738. The thirty-two data bits from WDR 23738 plus seven error correcting hamming code bits from WDERCCG 23744 are provided as inputs to WDDRV 23746 which subsequently transfers those thirty-nine bits
onto WD Bus 20126 as a MSB 20110 data word to be written into MA's 20112.

WDR 23738 may be comprised, for example, of SN74S194 registers. WDPC 23740 may be comprised, for example, of SN74S280 parity chips, and PCG 23742 may be comprised, for example of compatible gating or ROM. WDERCCG 23744 may be comprised, for
example, of SN74S280 parity chips. WDDRV 23746 may, as MODSELDRV 23732 and PLNADRV 23736, be comprised of SN74S240 drivers.

In addition to thirty-two bits of data from DPDRV 23758 or ERCCCL 23756, RDOR 23760 receives a single bit memory read error ERCC bit input from BCC 23718. RDOR 23760 provides the thirty-two data bits plus single MREERCC bit as inputs to Read
Data Out Parity Generator (RDOPG) 23762. RDOPG 23762 in turn generates four bits of parity for the thirty-two bits of data currently residing in RDOR 23760. The thirty-two bits of data from RDOR 23760 and four bits of corresponding parity from RDOPG
23762 are connected onto RDO Bus 20158 as a thirty-six bit data word, as previously described. If a multiple bit parity error occurs in data read from MSB 20110, this data is parsed from BC 20116 without modification but the parity bits are set so as to
indicate parity errors in each byte.

RDP 23714's first data path, that is through DPDRV 23758, is utilized when there are no ERCC errors appearing in thirty-nine bit data words read from MSB 20110. RDP 23714's second data path, that is through SBG 23750, RDR 23748, and ERCCCL 23756
is utilized when those thirty-nine bit data words contain ERCC errors.

Considering first RDP 23714's second data path, data words read from MSB 20110, as previously described, include thirty-two bits of data plus seven bits of error correcting hamming code. The thirty-two data bits of each word are transferred
directly into RDR 23748 while all thirty-nine bits, that is thirty-two data bits and seven ERCC bits, are read into SBG 23750. SBG 23750 examines the thirty-two data bits and seven ERCC bits to generate a seven bit syndrome code indicating whether that
word does contain an error and where those errors occur. That seven bit syndrome code is provided to ERCCEG 23752 which, in turn, generates single bit output ERCCERR indicating that an error has been detected. That seven bit syndrome code for a
particular word is also transferred into RDR 23748 together with that data words thirty-two data bits. RDR 23748 in turn provides the thirty-two data bits plus seven syndrome code bits to ERCCCL 23756. Three bits of syndrome code are provided to SCD
23754. SCD 23754 decodes those three syndrome code bits and generates an eight bit code to ERCCCL 23756 indicating which group of data bits are to be corrected. ERCCCL 23756 performs a data correction operation and provides thirty-two bits of corrected
data as input to RDOR 23760. ERCCCL 23756 also provides a five bit ERCCET output to ERRL 23716 indicating the type of error which was detected and the bit address of the error or errors.

If SBG 23750 does not detect an ERCC error in a thirty-nine bit data word being read from RD Bus 20130, DRVENBL to DPDRV 23758 is asserted and the thirty-two data bits of that data word are transferred into RDOR 23760.

RDOR 23760 will therefore contain, for each data word read from RD Bus 20130, thirty-two bits of data and may include four bits of ERCERR code indicating that multiple bit, uncorrectable data ERRCC error has been detected. These thirty-two bits
of data and four possible bits of ERCERR code read into RDOPG 23762 which in turn generates four bits of parity for those thirty-two data bits. As described above, this forces continuity of errors; if multiple bit ECC errors are detected the data is
passed on with parity errors so that the fact that the data is possibly corrupted is not lost. The thirty-two data bits from RDOR 23760 plus corresponding four parity bits from RDOPG 23762 may then be transferred onto RDO Bus 20158 as a thirty-six bit
data word to MC 20116.

A third input to RDP 23714 is provided, as described further below, from ERRL 23716. As previously stated, ERRL 23716 is BC 20114's error log and contains entries for each error detected in data words read from MSB 20110, either directly as part
of a read operation or indirectly as part of a refresh operation, that is sniffing. When BC 20114 receives an error log read request, those addresses are read from ERRL 23716 to RDOR 23760 where they are subsequently treated as thirty-two bits of data.
That is, four bits of corresponding parity are generated and the resulting thirty-six bit data words transferred onto RDO Bus 20158 to be subsequently read to IOS 10116 or JP 10114.

EPIPEREG 23766 receives two data inputs, the first data input being connected from ERCCCL 23756 and containing five bits of bit address of an error which has been detected by SBG 23750. Second input to EPIPEREG 23766 is a two bit word within
block address of an error detected by SBG 23750. Output of EPIPEREG 23766 is a seven bit word and bit within block address of an error detected in a data word read from MSB 20110 and is connected to data inputs of ELOGREG 23774.

EPIPEREG 23768 has a first input connected from ERCCCL 23756, which is a three bit code indicating the type of an error detected by SBG 23750 in a data word read from MSB 20110. A second input of EPIPEREG 23768 indicates that an error has been
detected. Third input of EPIPEREG 23768 is provided from MIC 20122 and is a control signal (RESETLOG) indicating, as previously discussed that ERRL 23716 is to be reset. Output of EPIPEREG 23768 is connected to a first input of ERRENC 23770, and a
second input of ERRENC 23770 is connected from the output of ELOGREG 23776. Outputs of ELOGREG 23772 and ELOG 23774 are connected to data input of RDOR 23760 and have enable inputs connected from BCC 23718. Output of ELOGREG 23776 is, as previously
described, connected to a second input of ERRENC 23770 and is connected to input of Error Log Driver (ERLDRV) 23778. Enable input of ELDRV is connected, and parallel with ELOGREG 23772 and 23774, from BCC 23718. Output of ERLDRV 23778 is connected to
data input of RDOR 23760 in parallel with outputs of ELOGREG 23772 and 23774.

As previously described, ERRL 23716 captures and stores addresses and information regarding errors discovered in data read from MSB 20110 or detected during MSB 20110 refresh operations. When a MA address is provided to MSB 20110 from MAAG
23710, that is for a read, write, or refresh operation, either the twenty bits of physical address to block level present in BCRR 23720 or the twenty bits of refresh address present in RAC 23722 are transferred into and captured in EPIPEREG 23764. When
a corresponding thirty-nine bit data word from MSB 20110 appears on RD Bus 20130 as a result of a read or refresh operation, five bits of bit within word address and two bits of word within block address are transferred into and captured in EPIPEREG
23766 if an error in that thirty-nine bit data word is detected by SBG 23750. Concurrently, information regarding the type of error detected and other error indicators are transferred into and captured in EPIPEREG 23768. At this time, EPIPEREG 23768
samples RESETLOG from MIC 20122 to determine whether ERRL 23716 is to be reset. If, therefore, an error is detected in a thirty-nine bit data word appearing on RD Bus 20130 as a result of a read or refresh request to MSB 20110, EPIPEREG 23764 to 23768
will capture the address of that error down to bit level, the type of error, and other indications, such as RESETLOG, as to what action is to be taken. EPIPEREG 23764 to 23768 thereby operate as a pipeline register for capturing all necessary data to
identify the location and type of an error in a data word read from or residing in MSB 20110 as that information becomes available. Physical address of that error to block level is captured, from MAAG 23710, when a read or refresh request is made to MSB
20110, while address of error to bit level and other information pertaining to that error captured when that data word appears on RD Bus 20130.

A detected error's address to bit level is subsequently transferred from EPIPEREG 23764 and 23766 to ELOGREG 23772 and 23774. Information regarding error type and disposition of error contained in EPIPEREG 23768 is provided as an input to ERRENC
23770. ERRENC 23770 subsequently generates a six bit code containing information, such as error type, pertaining to that error. Output of ERRENC 23770 is then transferred into ELOGREG 23776. ELOGREG 23776 provides the six bit code as an output which
is fed back to ERRENC 23770 to assist in encoding of subsequent errors and controlling operation of ERRL 23716, for example in resetting or clearing ERRL 23716 when RESETLOG from MIC 20122 is asserted. Contents of ELOGREG 23772 to 23776 are transferred
to data inputs of RDOR 23760 when enable signal ELOGEO to ERLDRV 23778 and ELOGREG 23772 and 23774 is asserted by BCC 23718. Output of ELOGREG 23772, ELOGREG 23774, ERLDRV 23778 comprise a thirty-two bit error log entry as previously described. This
thirty-two bit error log entry from ERRL 23716 is, as described above, transferred into RDOR 23760 and subsequently provided to RDO Bus 20158 as a thirty-six bit data word, that is thirty-two bits of data plus four bits of parity, to be subsequently read
to IOS 10116 or JP 10114.

Referring finally to BCC 23718, BCC 23718 includes Bank Controller Microcode Control Logic (BCmC) 23780, Bank Controller Control Pipeline (BCCP) 23782, and Main Store Bank Refresh Control (MSBR) 23784. BCmC 23780 stores and provides sequences of
microinstructions for control of BC 20114, and thus MSB 20110, in response to requests for MSB 20110 operations submitted by MIC 20122 and MC 20116. As previously described, MSB 20110 operations, that is writes to, reads from and refreshes of MA's 20112
are pipelined That is, MSB 20110 operations are performed sequentially and may be overlapped. For example, the start of a write to MA's 20112 may overlap a read from MA's 20112. This overlapping of MSB 20110 operations requires overlapping, and thus
pipelining, of certain BC 20114 control functions and is provided by BCCP 23782. Finally, MSBR 23784 measures the time interval between successive MSB 20110 refresh operations, requests such operations when necessary, and directs execution of refresh
operations.

BCmCS 23786 stores sequences of microinstructions for controlling operation of BC 20114 and thus operation of MSB 20110, that is MA's 20112. Selection of sequences of microinstuctions, and of microinstructions within a selected sequence, is
controlled by seven bit address comprising three bit OPCODE and single bit VLDREQ from BCRR 23720, single bit input RFSHBUSY from MSBR 23784, and two bit address input SEQCNT from BCmCIR 23788. As described above, OPCODE is provided to BCRR 23720 and
thus to BCmCS 23786 by MISSC 20726. OPCODE is BCmCS 23786's primary address input for selecting a particular microinstruction sequence. VLDREQ, again provided from MISSC 20726, is a flag indicating that a request for a BC 20114 and MSB 20110 operation
is valid. RFSHBUSY is a flag requesting that BC 20114 execute an MSB 20110 refresh operation. Two bit input SEQCNT is provided through BCmCIR 23788 from BCmCS 23786's microinstruction output and is comprised of two bits of a previously provided next
microinstruction. The two SEQCNT bits of each microinstruction stored in BCmCS 23786 are used to select the next microinstruction to be executed in a sequence of microinstructions. The two SEQCNT bits of a microinstruction currently being executed, and
thus residing in art in BCmCIR 23788, are thus provided as address input to BCmCS 23786 to select that next microinstruction.

Four bits of each microinstruction provided from BCmCS 23786 are provided as input to BCCP 23782 and will be described further below. Nine bits of each microinstruction are provided by BCmCS 23786 as inputs to BCmCIR 23788, two of these bits
providing SEQCNT output from BCmCIR 23788 to BCmCS 23786 address input. The nine bits of a microinstruction transferred into BCmCIR 23788 are used to control internal operation of BC 20114 and MSB 20110. One bit of a microinstruction currently residing
in BCmCIR 23788 is provided to ERRENC 23770 as input Reset Valid (RESETVLD). RESETVLD indicates that a Reset Error Log Request (RESETLOG) submitted from MIC 20122 is valid and that ERRL 23716 should be reset. Five bits of a microinstruction currently
residing BCmCIR 23788 represent control signals PLNCAS, PLNRAS, PLNLDIN, PLNRDOUT, and PLNRFSH to control inputs of MA's 20112. When certain of these five bits are asserted, corresponding output signals are provided through BCmCDRV 23790 to ADCTL Bus
20134 and thus to control inputs of MA's 20112. BCmCIR 23788 provides a final microinstruction bit output representing CAS to RFRCAMUX 23728 and RRCAMUX 23726, in conjunction with bit PLNCAS, to indicate that a CAS is being provided to MSB 20110 and
directing that RFRCAMUX 23728 or RRCAMUX 23726 correpondingly provide CA fields of a MA address to ADCTL Bus 20134.

Four bits of each microinstruction provided from BCmCS 23786 are provided to MSBR 23784, ERRL 23716, and RDP 23714. Of these four bits, Microcode Enable Request (mCENBREQ) and Microcode Reset Refresh (mCRESTRFSH) are provided to MSBR 23784 to
control, as described further below, generation of refresh requests by MSBR 23784. A third bit is output Load Error Pipe (LDEPIPE) which is provided as an enable input to EPIPEREG 23764 to 23768 to control a transfer of error information into those
registers. Fourth output bit is provided as enable signal Memory Read Enable (MRENBL) to RDOR 23760 to enable transfer of data words read from MSB 20110 into RDOR 23760.

Referring finally to BCmCER 23792, BCmCER 23792 receives six bits of each microinstruction provided from BCmCS 23786, these six bits provide control signals to MC 20116, that is to circuitry external to BC 20114 and MSB 20110. Like BCmCIR 23788,
BCmCER 23792 is pipeline register for holding microinstruction bits of a current microinstruction. Outputs of BCmCER 23792 include Start Bypass File (STRTBYF), Start Write Back File (STRTWBF), Bypass File Read Enable (BYFRE), and Write Back File Read
Enable (WBFRE). As previously described, these outputs of BC 20114 comprising enable signals to WBF 23212 and BYF 20118. Output Write Back File Read Address (WBFRA) (0-1) of BCmCER 23792 is, as previously described, a word address to WBF 23212 to
select a word to be read from WBF 23212 to MSB 20110 through WDR 23738. Output Allow Write Back Enable (ALLOWWBE) of BCmCER 23792 is an enabling signal allowing write back operation to be performed.

As previously described, certain MSB 20110 operations, for example reads and writes, may be overlapped. Overlapping of MSB 20110 functions in turn requires that certain BC 20114 control functions be overlapped. These control functions are
represented by four bits of each microinstruction provided by BCmCS 23786 as inputs to BCCP 23782. BCCP 23782 includes Bank Control Pipeline Registers (BCPR) 23794, Pipeline Control Encoding Logic (PCEN) 23796, and Pipeline Control External Output
Register (PCEOR) 23798. As shown in FIG. 237, BCPR's 23794 have four bits of microinstruction input connected from corresponding outputs of BCmCS 23786 and a single bit Memory Read Error (MRE) input connected from an output of SBG 23750. Outputs of
each of BCPR's 23794 are connected to inputs of PCEN 23796. Outputs of PCEN 23796 are provided directly to other portions of BC 20114 circuitry and to inputs of PCEOR 23798. PCEOR 23798 also has inputs ERCCERR and MRE connected from, respectively,
ERCCEG 23752 and SBG 23750. BCCP 23782 has outputs connected to certain inputs of MIC 20122, as will be described further below, and to another input of PCOR 23798.

At start of execution of each microinstruction provided from BCmCS 23786, four bits of each of those microinstructions plus fifth MRE bit are loaded into the pipeline shift register comprising BCPR's 23794. The contents of BCPR's 23794 are
subsequently shifted through BCPR's 23794 at start of each microinstruction execution. BCPR's 23794 will therefore contain a sequence of microinstruction bits corresponding to the sequence of microinstructions provided from BCmCS 23786 and being
executed by BC 20114. These control bits residing in BCPR's 23794 are provided as inputs to PCEN 23796, which in turn generates corresponding sequential sets of control outputs. For example, a complete MSB 20110 read operation requires four clock
cycles reading for data words for execution. BCPR's 23794 and PCEN 23796 will correspondingly generate a sequence of four sets of control outputs as required for handling of those four data words read from MSB 20110 as those data words appear on RD Bus
20130.

Certain of PCEN 23796's control outputs are provided directly to BC 20114 to control operation of BC 20114. These outputs include two bit ERCC error enable to ERRL 23716 and SBG 23750 to enable operation of ERRL 23716 and SBG 23750 as data words
read from MSB 20110 appear on RD Bus 20130. Two bit output Memory Read Error Log Enable (MRELOGENBL) to ERRL 23716 enables ERRL 23716 to log any errors discovered in data words read from MSB 20110 in a read operation. Single bit output Error Log Block
Address Load (ELOGBLKADL) is an enable signal to EPIPEREG 23764 to enable EPIPEREG 23764 to load RFSHADDR or REQADDR from, respectively, RAC 23722 or BCRR 23720 at start of a request to MSB 20110. Two bit output Read Error Word Address (READERRWDADDR)
is an enable signal to EPIPEREG 23766 and 23768 to enable these registers to load data pertaining an error discovered in a data word read from MSB 20110 in response to a MSB 20110 read or refresh request.

Certain outputs of PCEN 23796 are, as previously described, provided to PCEOR 23798, together with inputs ERCCERROR and MRE, and are subsequently provided as outputs to MIC 20122, indicating state of BC 20114 and MSB 20110 operation. These
outputs include Read Data Output Present Select (RDOPS) indicating that data requested from MSB 20110 is presently available on RDO Bus 20158 and Data Coming (DCOM) indicating that requested data will appear on RDO Bus 20158 as start of next clock cycle. Output Read Data Out Invalid (RDOINV) indicates that data word requested from MSB 20110 is invalid due to discovery of an error in that data word. Output Delay (DLY) indicates that an error has been discovered in a data word being read from MSB 20110,
that the error is being corrected, that the data word will be delayed by one clock cycle due to the error correction operation, and that the data word will appear on RDO Bus 20158 at start of next clock cycle. DLY therefore, as previously described,
indicates occurrence of a "bubble" in the four sequential data words read from MSB 20110 in response to a read request. Reading of that data word will require five or more clock cycles as at least one data word will be delayed by one clock cycle due to
error correction operations. Output DLY is fed back as an input to BCCP 23782 to provide a continuing DLY output in the case of errors in two or more consecutive data words read from MSB 20110.

As stated above, MSBR 23784 controls refresh of data stored in MSB 20110 as previously described with reference to MA's 20112. MSBR 23784 includes Refresh Rate Register (RFSHRATE) 23702, Refresh Margin Logic (RFSHMAR) 23704, Refresh Count Down
Counter (RFSHCDCTR) 23706, and Refresh Control Register (RFSHCR) 23708 with associated Gate 23709. Four bit output of RFSHRATE 23702 is connected to input of RFSHMAR 23704 and eight bit output of RFSHMAR 23704 is connected to data inputs of RFSHCDCTR
23706. Single bit output of RFSHCDCTR 23706 is connected to load input of RFSHCDCTR 23706 and to a first input of RFSHCR 23708. First and second inputs of Gate 23709 are connected from BCmCS 23786 outputs mCENBREQ and mCRESETRFSH. A third input of
Gate 23709 is connected from output Refresh Required (RFSHREQD) of RFSHCR 23708. Output of Gate 23709 is connected to a second input of RFSHCR 23708. A first output, RFSHREQD of RSFHCR 23708 is, as just stated, connected to a third input of Gate 23709. A second output of RFSHCR 23708, Refresh Busy (RFSHBUSY) is connected, as previously described, as an address input to BCmCS 23786 and as enable inputs to RFRCAMUX 23728 and RRCAMUX 23726.

RFSHRATE 23702 contains a four bit binary code representing time interval between successive MSB 20110 refresh operations. As previously described, each refresh operation refreshes all column of a given row of all MAs 20112. This four bit time
interval code is provided as an address input to RFSHMAR 23704, which in turn provides an eight bit binary number representing time interval between successive MSB 20110 refresh operations.

RFSHMAR 23704 may contain, for example, up to sixteen different refresh intervals, each of which is selected by a particular refresh interval code from RFSHRATE 23702. Refresh interval codes are loaded into RFSHRATE 23702 by DP 10118, thus
allowing DP 10118 to select MSB 20110 refresh interval, for example allowing DP 10118 to test MEM 10112 by increasing or decreasing MSB 20110 refresh interval.

At start of each refresh interval, RFSHMAR 23704's eight bit code is loaded into RFSHCDCTR 23706. RFSHCDCTR 23706 is then clocked to count down to zero. Upon occurrence of state zero in RFSHCDCTR 23706, RFSHCDCTR 23706 generates output Refresh
Interval Concluded (RFSHINTC). RFSHINTC is provided to load enable input of RFSHCDCTR 23706 to load a next eight bit binary refresh interval number from RFSHMAR 23704 into RFSHCDCTR 23706 for next refresh interval. RFSHINTC is also provided to a first
input of RFSHCR 23708 to indicate that a refresh operation is to be performed. RFSHCR 23708 provides, on next clock pulse, a corresponding output RFSHREQD to Gate 23709. RFSHREQD is gated together, in Gate 23709, with mCENBREQ and mCRESETRFSH. If
mENBREQ is asserted and mRESETRFSH is not asserted, RFSHREQD is loaded through Gate 23709 into second input of RFSHCR 23708 to appear as RFSHBUSY to an address input of BCmCS 23786 and to RFRCAMUX 23728 and RRCAMUX 23726. If, however, mCENBREQ is not
asserted or RESETRFSH is asserted, RFSHREQD input to Gate 23709 is inhibited and RFSHBUSY is not generated. That is, mCENBREQ from BCmC 23780 indicates that BC 20114 is executing an operation which may not be interrupted, thereby delaying RFSHBUSY until
completion of that operation. BCmC 23780 may assert RESETRFSH at conclusion of a MSB 20110 referesh operation to reset RFSHBUSY, thus terminating refresh operation until conclusion of next refresh interval.

The above discussions have described structure and operation of MEM 10112, including MEM 10112's interfaces to JP 10114 and IOS 10116; structure and operation of MIC 20122, which receives request for MEM 10112 operations for JP 10114 and IOS
10116 and provides primary control for all MEM 10112 operations; MC 20116, which comprises MEM 10112's first, or high speed, level of data storage and primary path for data transfer between MSB 20110 and JP 10114 or IOS 10116; MA's 20112, which comprise
MEM 10112's second, or bulk level of data storage; and BC 20114, which controls all transfers of data between MSB 20110 and BC 20116 and maintains data stored in MSB 20110.

As has been described in the above discussions, MEM 10112 is intelligent, priortizing memory having separate and independent ports to JP 10114 and IOS 10116. MEM 10112 is shared by and is accessable to both JP 10114 and 10116, is primary memory
of CS 10110, and is primary path for information transfer between the external world (through IOS 10116) and JP 10114. MEM 10112 is a two level memory providing fast access to data stored therein. MEM 10112's first, or bulk, level of storage is
comprised of a large set of random access memory arrays, that is MA's 20112, and MEM 10112's second level is comprised of a high speed cache, that is MCC 23210, whose operation is generally transparent to JP 10114 and IOS 10116. Information stored in
MEM 10112 appears bit addressable to both JP 10114 and IOS 10116, and MEM 10112 is capable of performing certain data manipulation operations to provide data in the desired format to both JP 10114 and IOS 10116. In addition, MEM 10112 allows a direct
bypass transfers of full four word blocks between MSB 20110 and IOS 10116 and JP 10114. Due to a high degree of pipelining, that is concurrent overalapping MEM 10112 operations, MEM 10112 interfaces to both JP 10114 and IOS 10116 appear as if each of JP
10114 and IOS 10116 have full, continual access to MEM 10112.

Having described the structure and operation of MEM 10112 above, the structure and operation of FU 10120 will be described next below.

Referring to FIG. 202, a partial block diagram of FU 10120 is shown. To enhance clarity of presentation, certain interconnections within FU 10120, and between FU 10120 and EU 10122 and MEM 10112 are not shown by line connections but, as
described further below, are otherwise indicated, such as by common signal names. Major functional elements of FU 10120 include Descriptor Processor (DESP) 20210, MEM 10112 Interface Logic (MEMINT) 20212, and Fetch Unit Control Logic (FUCTL) 20214. DSP
20210 is, in general, an arithmetic and logic unit for generating and manipulating entries for MEM 10112 and FU 10120 resident stack mechanisms and caches, as described above, and, in particular, for generation and manipulation of logical descriptors.
In addition, as stated above, DESP 20210 is a general purpose Central Processor Unit (CPU) capable of performing certain arithmetic and logic functions.

Having described the overall structure of FU 10120, in particular with regard to previous descriptions in Chapter 1 of this description, DESP 20210, MEMINT 20212, and FUCTL 20214 will be described in further detail below, and in that order.

1. Description Processor 20210 (FIGS. 202, 101, 103, 104, 238, 239)

As described above, DESP 20210 comprises a 32 bit CPU for performing all usual arithmetic and logic operations on data. In addition, a primary function of DESP 20210 is generation and manipulation of entries for, for example, Name Tables (NTs)
10350, ATC 10228, and PC 10234, and generation and manipulation of logical descriptors. As previously described, with reference to CS 10110 addressing structure, logical descriptors are logical addresses, or pointers, to data stored in MEM 10112.
Logical descriptors are used, for example, as architectural base pointers or microcontrol pointers in ABRs 10364 and mCRs 10366 as shown in FIG. 103, or as linkage and local pointers of Procedure Frames 10412 as shown in FIG. 104. In a further example,
logical descriptors generated by DESP 20210 and corresponding to certain operand Names are stored in MC 10226, where they are subsequently accessed by those Names appearing in SINs fetched from MEM 10112 to provide rapid translation between operand Names
and corresponding logical descriptors.

As has been previously discussed with reference to CS 10110 addressing structure, logical descriptors provided to ATU 10228, from DESP 20210 or NC 10226, are translated by ATU 10228 to physical descriptors which are actual physical addresses of
corresponding data stored in MEM 10112. That data subsequently is provided to JP 10114, and in particular to FU 10120 or EU 10122, through MOD Bus 10144.

As has been previously discussed with reference to MEM 10112, each data read to JP 10114 from MEM 10112 may contain up to 32 bits of information. If a particular data item referenced by a logical descriptor contains more than 32 bits of data,
DESP 20210 will, as described further below, generate successive logical descriptors, each logical descriptor referring to 32 bits or less of information, until the entire data item has been read from MEM 10112. In this regard, it should be noted that
NC 10226 may contain logical descriptors only for data items of 255 bits or less in length. All requests to MEM 10112 for data items greater than 32 bits in length are generated by DESP 20210. Most of data items operated on by CS 10110 will, however,
be 32 bits or less in length so that NC 10226 is capable of handling most operand Names to logical descriptor translations.

As described above, DESP 20210 includes AONP 20216, OFFP 20218, and LENP 20220. OFFP 20218 comprises a general purpose 32 bit CPU with additional logic circuitry for generating and manipulating table and cache entries, as described above, and
for generating and manipulating offset fields of AON pointers and logical descriptors. AONP 20216 and LENP 20220 comprise logic circuitry for generating and manipulating, respectively, AON and length fields of AON pointers and logical descriptors. As
indicated in FIG. 202, GRF 10354 is vertically divided in three parts. A first part resides in ANOP 20216 and, in additon to random data, contains AON fields of logical descriptors. Second and third parts reside, respectively, in OFFP 20218 and LENP
20220 and, in addition to containing random data, respectively contain offset and length fields of logical descriptors. AON, Offset, and length portions of GRF 10354 residing respectively in AONP 20216, OFFP 20218, and LENP 20220 are designated,
respectively, as AONGRF, OFFGRF, and LENGRF. AONGRF portion of GRF 10354 is 28 bits wide while OFFGRF and LENGRF portions of GRF 10354 are 32 bits in width. Although shown as divided vertically into three parts, GRF 10354 is addressed and operates as a
unitary structure. That is, a particular address provided to GRF 10354 will address corresponding horizontal segments of each of GRF 10354's three sections residing in AONP 20216, OFFP 20218, and LENP 20220.

OFFSEL 20238 has first and second 32 bit data inputs connected from, respectively, MOD Bus 10144 and JPD Bus 10142. OFFSEL 20238 has a third 32 bit data input connected from a first output of OFFALU 20242, a fourth 28 bit data input connected
from a first output of AONGRF 20232, and a fifth 32 bit data input connected from OFFSET Bus 20228. OFFSEL 20238 has a first 32 bit output connected to input of OFFGRF 20234 and a second 32 bit output connected to a first input of OFFMUX 20240. OFFMUX
20240 has second and third 32 bit data inputs connected from, respectively, MOD Bus 10144 and JPD Bus 10142. OFFMUX 20240 also has a fourth 5 bit data input connected from Bias Logic (BIAS) 20246 and LENP 20220, described further below, and fifth 16 bit
data input connected from NAME Bus 20224. Thirty-two bit data output of OFFGRF 20234 and first 32 bit data output of OFFMUX 20240 are connected to, respectively, first and second data inputs of OFFALUSA 20244. A first 32 bit data output of OFFALUSA
20244 and a second 32 bit data output of OFFMUX 20240 are connected, respectively, to first and second data inputs of OFFALU 20242. A second 32 bit data output of OFFALUSA 20244 is connected to OFFSET Bus 20228. A first 32 bit data output of OFFALU
20242 is connected to JPD Bus 10142, to a first input of AON Input Select Multiplexer (AONSEL) 20248 and AONP 20216, and, as described above, to a third input of OFFSEL 20238. A second 32 bit data output of OFFALU 20242 is connected to OFFSET Bus 20228
and third 16 bit output is connected to NAME Bus 20224.

b. AON Processor 20216 Structure

Referring to AONP 20216, a primary function of AONP 20216 is that of containing AON fields of AON pointers and logical descriptors. In addition, those portions of AONGRF 20232 not otherwise occupied by AON pointers and logical descriptors may be
used as a 28 bit wide general register area by JP 10114. These portions of AONGRF 20232 may be so used either alone or in conjunction with corresponding portions of OFFGRF 20234 and LENGRF 20236. AONP 20216 includes AONSEL 20248 and AONGRF 20232. As
previously described, a first 32 bit data input AONSEL 20248 is connected from a first data output of OFFALU 20242. A second 28 bit data input of AONSEL 20248 is connected from 28 bit output of AONGRF 20232 and from AON Bus 20230. A third 28 bit data
input of AONSEL 20248 is connected from logic zero, that is a 28 bit input wherein each input bit is set to logic zero. Twenty-eight bit data output of AONSEL 20248 is connected to data input of AONGRF 20232. As just described, 28 bit data output of
AONGRF 20232 is connected to second data input of AONSEL 20248, and is connected to AON Bus 20230.

c. Length Processor 20220 Structure

Referring finally to LENP 20220, a primary function of LENP 20220 is the generation and manipulation of length fields of AON pointers and physical descriptors. In addition, LENGRF 20236 may be used, in part, either alone or in conjunction with
corresponding address spaces of AONGRF 20232 and OFFGRF 20234, as general registers for storage of data. LENP 20220 includes Length Input Select Multiplexer (LENSEL) 20250, LENGRF 20236, BIAS 20246, and Length ALU (LENALU) 20252. LENSEL 20250 has first
and second data inputs connected from, respectively, LENGTH Bus 20226 and OFFSET Bus 20228. LENGTH Bus 20226 is eight data bits, zero filled while OFFSET Bus 20228 is 32 data bits. LENSEL 20250 has a third 32 bit data input connected from data output
of LENALU 20252. Thirty-two bit data output of LENSEL 20250 is connected to data input of LENGRF 20236 and to a first data input of BIAS 20246. Second and third 32 bit data inputs of BIAS 20246 are connected from, respectively, Constant (C) and Literal
(L) outputs of FUSITT 11012 as will be described further below. Thirty-two bits data output of LENGRF 20236 is connected to JPD Bus 10142, to Write Length Input (WL) input of NC 10226, and to a first input of LENALU 20252. Five bit output of BIAS 20246
is connected to a second input of LENALU 20252, to LENGTH Bus 20226, and, as previously described, to a fourth input of OFFMUX 20240. Thirty-two bit output of LENALU 20252 is connected, as stated above, to third input of LENSEL 20250.

Having described the overall operation and the structure of DESP 20210, operation of DESP 20210 will be described next below in further detail.

d. Descriptor Processor 20210 Operation

a.a. Offset Selector 20238

Referring to OFFP 20218, GRF 10354 includes GR's 10360 and SR's 10362. GR's 10360 in turn contain ABR's 10364, mCR's 10366, and a set of general registers. SR's 10362 include MIS 10368 and MOS 10370. GRF 10354 is vertically divided into three
parts. AONGRF 20232 is 28 bits wide and resides in AONP 20216, LENGRF 20236 is 32 bits wide and resides in LENP 20220, and OFFGRF 20234 is 32 bits wide and resides in OFFP 20218. AONGRF 20232, OFFGRF 20234, and LENGRF 20236 may be comprised of
Fairchild 93422s.

In addition to storing offset fields of AON pointers and logical descriptors, those portions of OFFGRF 20234 not reserved for ABR's 10365, mCR's 10366, and SR's 10362 may be used as general registers, alone or in conjunction with corresponding
portions AONGRF 20232 and LENGRF 20236, when OFFP 20218 is being utilized as a general purpose, 32 bit CPU. OFFGRF 20234 as will be described further below, is addressed in parallel with AONGRF 20232 and LENGRF 20236 by address inputs provided from
FUCTL 20214.

OFFSEL 20238 is a multiplexer, comprised for example of SN74S244s and SN74S257s, for selecting data inputs to be written into selected address locations of OFFGRF 20234. OFFSEL 20238's first data input is from MOD Bus 10144 and is the primary
path for data transfer between MEM 10112 and DESP 20210. As previously described, each data read from MEM 10112 to JP 10114 is a single 32 bit word where between one and 32 bits may contain actual data. If a data item to be read from MEM 10112 contains
more than 32 bits of data, successive read operations are performed until the entire data item has been transferred.

OFFSEL 20238's second data input is from JPD Bus 10142. As will be described further below, JPD Bus 10142 is a data transfer path by which data outputs of FU 10120 and EU 10122 are written into MEM 10112. OFFSEL 20238's input of JPD Bus 10142
thereby provides a wrap around path by which data present at outputs of FU 10120 or EU 10122 may be transferred back into DESP 20210 for further use. For example, as previously stated a first output of OFFALU 20242 is connected to JPD Bus 10142, thereby
allowing data output of OFFP 20218 to be returned to OFFP 20218 for further processing, or to be transferred to AONP 20216 or LENP 20220 as will be described further below. In addition, output of LENGRF 20236 is also connected to JPD Bus 10142 so that
length fields of AON pointers or physical descriptors, or data, may be read from LENGRF 20236 to OFFP 20218. This path may be used, for example, when LENGRF 20236 is being used as a general purpose register for storing data or intermediate results of
arithmetic or logical operations.

OFFSEL 20238's third input is provided from OFFALU 20242's output. This data path thereby provides a wrap around path whereby offset fields or data residing in OFFGRF 20234 may be operated on and returned to OFFGRF 20234, either in the same
address location as originally read from or to a different address location. OFFP 20218 wrap around path from OFFALU 20242's output to OFFSEL 20238's third input, and thus to OFFGRF 20234, may be utilized, for example, in reading from MEM 10112 a data
item containing more than 32 bits of data. As previously described, each read operation from MEM 10112 to JP 10114 is of a 32 bit word wherein between one and 32 bits may contain actual data. Transfer of a data word containing more than 32 bits is
accomplished by performing a succession of read operations from MEM 10112 to JP 10114. For example, if a requested data item contains 70 bits of data, that data item will be transferred in three consecutive read operations. First and second read
operations will each transfer 32 bits of data, and final read operation will transfer the remaining 6 bits of data. To read a data item of greater than 32 bits from MEM 10112 therefore, DESP 20210 must generate a sequence of logical descriptors, each
defining a successive 32 bit segment of that data item. Final logical descriptor of the sequence may define a segment of less than 32 bits, for example, six bits as in the example just stated. In each successive physical descriptor, offset field must
be incremented by value of length field of the preceding physical descriptor to define starting addresses of successive data items segments to be transferred. Length field of succeeding physical descriptors will, in general, remain constant at 32 bits
except for final transfer which may be less than 32 bits. Offset field will thereby usually be incremented by 32 bits at each transfer until final transfer. OFFP 20218's wrap around data path from OFFALU 20242's output to third input of OFFSEL 20238
may, as stated above, be utilized in such sequential data transfer operations to write incremented or decremented offset field of a current physical descriptor back into OFFGRF 20234 to be offset field of a next succeeding physical descriptor.

In a further example, OFFP 20218's wrap around path from OFFALU 20242's output to third input of OFFSEL 20238 may be used in resolving Entries in Name Tables 10350, that is Name resolutions. In Name resolutions, as previously described, offset
fields of AON pointers, for example Linkage Pointers 10416, are successively added and subtracted to provide a final AON pointer to a desired data item.

OFFSEL 20238's fourth input, from AONGRF 20232's output, may be used to transfer data or AON fields from AONGRF 20232 to OFFGRF 20234 or OFFMUX 20240. This data path may be used, for example, when OFFP 20218 is used to generate AON fields of AON
pointers or physical descriptors or when performing Name evaluations.

Finally, OFFSEL 20238's fifth data input from OFFSET Bus 20228 allows offset fields on OFFSET Bus 20228 to be written into OFFGRF 20234 or transferred into OFFMUX 20240. This data path may be used, for example, to copy offset fields to OFFGRF
20234 when JP 10114 is performing a Name evaluation.

Referring now to OFFMUX 20240, OFFMUX 20240 includes logic circuitry for manipulating individual bits of 32 bit words. OFFMUX 20240 may be used, for example, to increment and decrement offset fields by length fields when performing string
transfers, and to generate entries for, for example, MHT 10716 and MFT 10718. OFFMUX 20240 may also be used to aid in generating and manipulating AON, OFFSET, and LENGTH fields of physical descriptors and AON pointers.

b.b. Offset Multiplexer 20240 Detailed Structure (FIG. 238)

Referring to FIG. 238, a more detailed, partial block diagram of OFFMUX 20240 is shown. OFFMUX 20240 includes Offset Multiplexer Input Selector (OFFMUXIS) 23810, which for example may be comprised of SN74S373s and SN74S244s and Offset
Multiplexer Register (OFFMUXR) 23812, which for example may be comprised of SN74S374s. OFFMUX 20240 also includes Field Extraction Circuit (FEXT) 23814, which may for example be comprised of SN74S257s, and Offset Multiplexer Field Selector (OFFMUXFS)
23816, which for example may be comprised of SN74S257s and SN74S374s. Finally, OFFMUX 20240 includes Offset Scaler (OFFSCALE) 23818, which may for example be comprised of AMD 25S10s, Offset Inter-element Spacing Encoder (OFFIESENC) 23820, which may for
example be comprised of Fairchild 93427s and Offset Multiplexer Output Selector (OFFMUXOS) 23822, which may for example be comprised of AMD 25Ss, Fairchild 93427s, and SN74S244s.

Referring first to OFFMUX 20240's connections to other portions of OFFP 20218, OFFMUX 20240's first data input, from OFFSEL 20238, is connected to a first input of OFFMUXIS 23810. OFFMUX 20240's second input, from MOD Bus 10144, is connected to
a second input of OFFMUXIS 23810. OFFMUX 20240's third input, from JPD Bus 10142, is connected to a first input of OFFMUXFS 23816 while OFFMUX 20240's fourth input, from BIAS 20246, is connected to a first input of OFFMUXOS 23822. OFFMUX 20240's fifth
input, from NAME Bus 20224, is connected to a second input of OFFMUXFS 23816. OFFMUX 20240's first output, to OFFALUSA 20244, is connected from output of OFFMUXR 23812 while OFFMUX 20240's second output, to OFFALU 20242, is connected from output of
OFFMUXOS 23822.

Referring to OFFMUX 20240's internal connections, 32 bit output of OFFMUXIS 23810 is connected to input OFFMUXR 23812 and 32 bit output of OFFMUXR 23812 is connected, as described above, as first output of OFFMUX 20240, and as a third input of
OFFMUXFS 23816. Thirty-two bit output of OFFMUXR 23812 is also connected to input of FEXT 23814. OFFMUXFS 23816's first, second and third inputs are connected as described above. A fourth input of OFFMUXFS 23816 is a 32 bit input wherein 31 bits are
set to logic zero and 1 bit to logic 1. A fifth input is a 32 bit input wherein 31 bits are set to logic 1 and 1 to logic 0. A sixth input of OFFMUXFS 23816 is a 32 bit literal (L) input provided from FUSITT 11012 and is a 32 bit binary number
comprising a part of a microinstruction FUCTL 20214, described below. OFFMUXFS 23816's seventh and eighth input are connected from FEXT 23814. Input 7 comprises FIU and TYPE fields of Name Table Entries which have been read into OFFMUXR 23812. Input 8
is a general purpose input conveying bits extracted from a 32 bit word captured in OFFMUXR 23812. As indicated in FIG. 238, OFFMUXFS 23816's first, third, fourth, fifth, and sixth inputs are each 32 bit inputs which are divided to provide two 16 bit
inputs each. That is, each of these 32 bit inputs is divided into a first input comprising bit 0 to 15 of that 32 bit input, and a second input comprising bits 16 to 31.

Thirty-two bit output of OFFMUXFS 23816 is connected to inputs of OFFSCALE 23818 and OFFIESENC 23820. As indicated in FIG. 238, Field Select Output (FSO) of OFFMUXFS 23816 is a 32 bit word divided into a first word including 0 to 15 and a second
word including bits 16 to 31. Output FSO of OFFMUXFS 23816, as will be described further below, thereby reflects the divided structure of OFFMUXFS 23816's first, third, fourth, fifth, and sixth inputs.

Logical functions performed by OFFMUXFS 23816 in generating output FSO, and which will be described in further detail in following descriptions, include:

(3) Passing a literal value comprising a part of a microinstruction from FUCTL 20214 directly through OFFMUXFS 23816;

(4) Forcing FSO to be literal values 0000 0000;

(5) Forcing FSO to be literal value 0000 001;

(6) Extracting Name Table Entry fields;

(7) Accepting a 32 bit word from OFFMUXR 23812 or JPD Bus 10142, or 32 bits of a microinstruction from FUCTL 20214, and passing the lower 16 bits while forcing the upper 16 bits to logic 0;

(8) Accepting a 32 bit word from OFFMUXR 23812 or JPD Bus 10142, or 32 bits of microinstruction from FUCTL 20214, and passing the higher 16 bits while forcing the lower 16 bits to logic 0;

(9) Accepting a 32 bit word from OFFMUXR 23812, or JPD Bus 10142, or Name Bus 20224, or 32 bits of a microinstruction from FUCTL 20214, and passing the lower 16 bits while sign extending bit 16 to the upper 16 bits; and,

(10) Accepting a 32 bit word from Name Bus 20224 and passing the lowest 8 bits while sign extending bit 24 to the highest 24 bits.

Thirty-two bit output of OFFSCALE 23818 and 3 bit output of OFFIESENC 23820 are connected, respectively, to second and third inputs of OFFMUXOS 23822. OFFMUXOS 23822's first input is, as described above, OFFMUX 20240's fourth input and is
connected from output BIAS 20246. Finally, OFFMUXOS 23822's 32 bit output, OFFMUX (0-31) is OFFMUX 20240's second output and as previously described as connected to a second input of OFFALU 20242.

c.c. Offset Muliplexer 20240 Detailed Operation

a.a.a. Internal Operation

Having described the structure of OFFMUX 20240 as shown in FIG. 238, operation of OFFMUX 20240 will be described below. Internal operation of OFFMUX 20240, as shown in FIG. 238, will be described first, followed by description of OFFMUX 20240's
operation with regard to DESP 20210.

Referring first to OFFMUXR 23812, OFFMUXR 23812 is a 32 bit register receiving either a 32 bit word from MOD Bus 10144, MOD (0-31), or a 32 bit word received from OFFSEL 20238, OFFSEL (0-31), and is selected by OFFMUXIS 23810. OFFMUXR 23812 in
turn provides those selected 32 bit words from MOD Bus 10144 or OFFSEL 20238 as OFFMUX 20240's first data output to OFFALUSA 20244, as FEXT 23814's input, and as OFFMUXFS 23816's third input. OFFMUXR 23812's 32 bit output to OFFMUXFS 23816 is provided
as two parallel 16 bit words designated as OFFMUXR output (OFFMUXRO) (0-15) and (16-31). As described above, OFFMUXFS 23816's output to OFFALUSA 20244 from OFFMUXR 23812 may be right shifted 16 places and the highest 16 bits zero filled.

OFFMUXFS 23816 32 bit output is provided as inputs to OFFSCALE 23818 and OFFIESENC 23820. Referring first to OFFIESENC 23820, OFFIESENC 23820 is used, in particular, in resolving, or evaluating, NT 10350 Entries (NTEs) referring to arrays of
data words. As indicted in FIG. 108, word D of an NTE contains certain information relating to inter-element spacing (IES) of data words of an array. Word D of an NTE may be read from MEM 10112 to MOD Bus 10144 and through OFFMUX 20240 to input of
OFFIESENC 23820. OFFIESENC 23820 then examines word D's IES field to determine whether inter-element spacing of that array is a binary multiple, that is 1, 2, 4, 8, 16, 32, or 64 bits. In particular, OFFIESENC 23820 determines whether 32 bit word D
contains logic zeros in the most significant 25 bits and a single logic one in the least significant 7 bits. If inter-element spacing is such a binary multiple, starting addresses of data words of that array may be determined by left shifting of index
(IES) to obtain offset fields of physical addresses of words in the array and a slower and more complex multiplication operation is not required. In such cases, OFFIESENC generates a first output, IES Encodeable (IESENC) to FUCTL 20214 to indicate that
inter-element spacing may be determined by simple left shifting. OFFIESENC 23820 then generates encoded output, Encoded IES (ENCIES), to OFFMUXOS 23822. ENCIES is then a coded value specifying the amount of left shift necessary to translate index (IES)
value into offsets of words in that array. As indicated in FIG. 238, ENCIES is OFFMUXOS 23822's third input.

OFFSCALE 23818 is a left shift shift network with zero fill of least significant bits, as bits are left shifted. Amount of shift by OFFSCALE 23818 is selectable between zero and 7 bits. Thirty-two bit words transferred into OFFSCALE 23818 from
OFFSCALE 23818 from OFFMUXFS 23816 may therefore be left shifted, bit by bit, to selectively reposition bits within that 32 bit input word. In conjunction with OFFMUXFS 23816, and a wrap around connection provided by OFFALU 20242's output to OFFSEL
20238, OFFSCALE 23818 may be used to generate and manipulate, for example, entries for MHT 10716, MFT 10718, AOT 10712, and AST 10914, and other CS 10110 data structures. OFFMUXOS 23822 is a multiplexer having first, second, and third inputs from,
respectively, BIAS 20246, OFFSCALE 23818, OFFIESENC 23820. OFFMUXOS 23822 may select any one of these inputs as OFFMUX 20240's second output, OFFMUX (0-31). As previously described, OFFMUX 20240's second output is connected to a second input of OFFALU
20242.

Having described internal of OFFMUX 20240, operation of OFFMUX 20240 with regard to overall operation of DESP 20210 will be described next blow.

b.b.b. Operation Relative to Descriptor Processor 20210

OFFMUX 20240's first input, from OFFSEL 20238, allows inputs to OFFSEL to be transferred through OFFMUXIS 23810 and into OFFMUXR 23812. This input allows OFFMUXR 23812 to be loaded, under control of FUCTL 20214 microinstructions, with any input
of OFFSEL 20238. In a particular example, OFFALU 20242's output may be fed back through OFFSEL 20238's third input and OFFMUX 20240's first input to allow OFFMUX 20240 and OFFALU 20242 to perform reiterative operations on a single 32 bit word.

OFFMUX 20240's second input, from MOD Bus 10144, allows OFFMUXR 23812 to be loaded directly from MOD Bus 10144. For example, NTEs from a currently active procedure may be loaded into OFFMUXR 23812 to be operated upon as described above. In
addition, OFFMUX 20240's second input may be used in conjunction with OFFSEL 20238's first input, from MOD Bus 10144, as parallel input paths to OFFP 20218. These parallel input paths allow pipelining of OFFP 20218 operations by allowing OFFSEL 20238
and OFFGRF 20234 to operate independently from OFFMUX 20240. For example, FU 10120 may initiate a read operation from MEM 10112 to OFFMUXR 23812 during a first microinstruction. The data so requested will appear on MOD Bus 10144 during a second
microinstruction and may be loaded into OFFMUXR 23812 through OFFMUX 20240's second input from MOD Bus 10144. Concurrently, FU 10120 may initiate, at start of second microinstruction, an independent operation to be performed by OFFSEL 20238 and OFFGRF
20234, for example loading output of OFFALU 20242 into OFFGRF 20234. Therefore, by providing an independent path into OFFMUX 20240 from MOD Bus 10144, OFFSEL 20238 is free to perform other, concurrent data transfer operations while a data transfer from
MOD Bus 10144 to OFFMUX 20240 is being performed.

OFFMUX 20240's third input, from JPD Bus 10142, is a general purpose data transfer path. For example, data from LENGRF 20236 or OFFALU 20242 may be transferred into OFFMUX 20240 through JPD Bus 10142 and OFFMUX 20240's third input.

OFFMUX 20240's fourth input is connected from BIAS 20246 and primarily used during string transfers as described above. That is, length fields of physical descriptors generated for a string transfer may be transferred into OFFMUX 20240 through
OFFMUX 20240's fourth input to increment or decrement, offset fields of those physical descriptors in OFFALU 20242.

OFFMUX 20240's fifth input is connected from NAME Bus 20224. As will be described further below, Names are provided to NC 10226 by FUCTL 20214 to call, from MC 10226, logical descriptors corresponding to Names appearing on MOD Bus 10144 as part
of sequences of SINs. As each Name is presented to NC 10226, that Name is transferred into and captured in Name Trap (NT) 20254. Upon occurrence of an NC 10226 miss, that is NC 10226 does not contain an entry corresponding to a particular Name, that
Name is subsequently transferred from NT 20254 to OFFMUX 20240 through NAME Bus 20224 and OFFMUX 20240's fifth input. That Name, which is previously described as an 8, 12, or 16 bit binary number, may then be scaled, that is multiplied by a NTE size.
That scaled Name may then be added to Name Table Pointer (NTP) from mCRs 10366 to obtain the address of a corresponding NTE in an NT 10350. In addition, a Name resulting in a NC 10226 miss, or a page fault in the corresponding NT 10350, or requiring a
sequence of Name resolves, may be transferred into OFFGRF 20234 from OFFMUX 20240, through OFFALU 20242 and OFFSEL 20238 third input. That Name may subsequently be read, or restored, from OFFGRF 20234 as required.

Referring now to outputs of OFFMUX 20240, OFFMUX 20240's first output, from OFFMUXR 23812, allows contents of OFFMUXR 23812 to be transferred to first input of OFFALU 20242 through OFFALUSA 20244. OFFMUX 20240's second output, from OFFMUXOS
23822, is provided directly to second input of OFFALU 20242. OFFALU 20242 may be concurrently provided with a first input from OFFMUXR 23812 and a second input, for example a manipulated offset field, from OFFMUXOS 23822.

Referring to OFFALUSA 20244, OFFALUSA 20244 is a multiplexer. OFFALUSA 20244 may select either output of OFFGRF 20234 or first output of OFFMUX 20240 to be either first input of OFFALU 20242 or to be OFFP 20218's output to OFFSET Bus 20228. For
example, an offset field from OFFGRF 20234 may be read to OFFSET Bus 20228 to comprise the offset field of a current logical descriptor, and concurrently read into OFFALU 20242 to be incremented or decremented to generate the offset field of a subsequent
logical descriptor in a string transfer.

OFFALU 20242 is a general purpose, 32 bit arithmetic and logic unit capable of performing all usual ALU operations. For example, OFFALU 20242 may add, subtract, increment, or decrement offset fields of logical descriptors. In addition, OFFALU
20242 may serve as a transfer path for data, that is OFFALU 20242 may transfer input data to OFFALU 20242's outputs without operating upon that data. OFFALU 20242's first output, as described above, is connected to JPD Bus 10142, to third input of
OFFSEL 20238, and to first input of AONSEL 20248. Data transferred or manipulated by OFFALU 20242 may therefore be transferred on to JPD Bus 10142, or wrapped around into OFFP 20218 through OFFSEL 20238 for subsequent or reiterative operations. OFFALU
20242's output to AONSEL 20248 may be used, for example, to load AON fields of AON pointers or physical descriptors generated by OFFP 20218 into AONGRF 20232. In addition, this data path allows FU 10120 to utilize AONGRF 20232 as, for example, a buffer
or temporary memory space for intermediate or final results of FU 10120 operations.

OFFALU 20242's output to OFFSET Bus 20228 allows logical descriptor offset fields to be transferred onto OFFSET Bus 20228 directly from OFFALU 20242. For example, a logical descriptor offset field may be generated by OFFALU 20242 during a first
clock cycle, and transferred immediately onto OFFSET Bus 20228 during a second clock cycle.

OFFALU 20242's third output is to NAME Bus 20224. As will be described further below, NAME Bus 20224 is address input (ADR) to NC 10226. OFFALU 20242's output to NAME Bus 20224 thereby allows OFFP 20218 to generate or provide addresses, that is
Names, to NC 10226.

Having described the operation of OFFP 20218, operation of LENP 20220 will be described next below.

e. Length Processor 20220 (FIG. 239)

Referring to FIG. 202, a primary function of LENP 20220 is generation and manipulation of logical descriptor length fields, including length fields of logical descriptors generated in string transfers. LENP 20220 includes LENGRF 20236, LENSEL
20250, BIAS 20246, and LENALU 20252. LENGRF 20236 may be comprised, for example, of Fairchild 93422s. LENSEL 20250 may be comprised of, for example, SN74S257s, SN74S157s, and SN74S244s, and LENALU 20252 may be comprised of, for example, SN74S381s.

As previously described, LENGRF 20236 is a 32 bit wide vertical section of GRF 10354. LENGRF 20236 operates in parallel with OFFGRF 20234 and AONGRF 20232 and contains, in part, length fields of logical descriptors. In addition, also as
previously described, LENGRF 20236 may contain data.

LENSEL 20250 is a multiplexer having three inputs and providing outputs to LENGRF 20236 and first input of BIAS 20246. LENSEL 20250's first input is from Length Bus 20226 and may be used to write physical descriptor or length fields from LENGTH
Bus 20226 into LENGRF 20236 or into BIAS 20246. Such length fields may be written from LENGTH Bus 20226 to LENGRF 20236, for example, during Name evaluation or resolve operations. LENSEL 20250's second input is from OFFSET Bus 20228. LENSEL 20250's
second input may be used, for example, to load length fields generated by OFFP 20218 into LENGRF 20236. In addition, data operated upon by OFFP 20218 may be read into LENGRF 20236 for storage through LENSEL 20250's second input.

LENSEL 20250's third input is from output of LENALU 20252 and is a wrap around path to return output of LENALU 20252 to LENGRF 20256. LENSEL 20250's third input may, for example, be used during string transfers when length fields of a particular
logical descriptor are incremented or decremented by LENALU 20252 and returned to LENGRF 20236. This data path may also, for example, be used in moving a 32 bit word from one location in LENGRF 20236 to another location in LENGRF 20236. As stated
above, LENSEL 20250's output is also provided to first input BIAS and allows data appearing at first, second, or third inputs of LENSEL 20250 to be provided to first input of BIAS 20246.

BIAS 20246, as will be described in further detail below, generates logical descriptor length fields during string transfers. As described above, no more than 32 bits of data may be read from MEM 10112 during a single read operation. A data
item of greater than 32 bits in length must therefore be transferred in a series, or string, of read operations, each read operation transferring 32 bits or less of data. String transfer logical descriptor length fields generated by BIAS 20246 are
provided to LENGTH Bus 20226, to LENALU 20252 second input, and to OFFMUX 20240's fourth input, as previously described. These string transfer logical descriptor length fields, referred to as bias fields, are provided to LENGTH Bus 20226 by BIAS 20246
to be length fields of the series of logical descriptors generated by DESP 20210 to execute a string transfer. These bias fields are provided to fourth input OFFMUX 20240 to increment or decrement offset fields of those logical descriptors, as
previously described. These bias fields are provided to second input of LENALU 20252, during string transfers, to correspondingly decrement the length field of a data item being read to MEM 10112 in a string transfer. BIAS 20246 will be described in
greater detail below, after LENALU 20252 is first briefly described.

a.a. Length ALU 20252

LENALU 20252 is a general purpose, 32 bit arithmetic and logic unit capable of executing all customary arithmetic and logic operations. In particular, during a string transfer of a particular data item LENALU 20252 receives that data items
length field from LENGRF 20236 and successive bias fields from BIAS 20246. LENALU 20252 then decrements that logical descriptor's current length field to generate a length field to be used during the next read operation of the string transfer, and
transfers the new length field back into LENGRF 20236 through LENSEL 20250's third input.

b.b. BIAS 20246 (FIG. 239)

Referring to FIG. 239, a partial block diagram of BIAS 20246 is shown. BIAS 20246 includes Bias Memory (BIASM) 23910, Length Detector (LDET) 23912, Next Zero Detector (NXTZRO) 23914, and Select Bias (SBIAS) 23916. Input of LDET 23912 is first
input of BIAS 20246 and connected from output of LENSEL 20250. Output of LDET 23912 is connected to data input of BIASM 23910, and data output of BIASM 23910 is connected to input of NXTZRO 23914. Output of NXTZRO 23914 is connected to a first input of
SBIAS 23916. A second input of SBIAS 23916 is BIAS 20246's second input, L8, and is connected from an output of FUCTL 20214. A third input of SBIAS 23916 is BIAS 20246's third input, L, and is connected from yet another output of FUCTL 20214. Output
of SBIAS 23916 is output of BIAS 20246 and, as described above, is connected to LENGTH Bus 20226, to a second input of LENALU 20252, and to fourth input of OFFMUX 20240.

BIASM 23910 is a 7 bit wide random access memory having a length equal to, and operating and addressed in parallel with, SR's 10362 of GRF 10354. BIASM 23910 has an address location corresponding to each address location of SR's 10362 and is
addressed concurrently with those address locations in SR's 10362. BIASM 23910 may be comprised, for example, of AMD 27S03As.

BIASM 23910 contains a bias value of each logical descriptor residing in SR's 10362. As described above, a bias value is a the number representing number of bits to be read from MEM 10112 in a particular read operation when a data item having a
corresponding logical descriptor, with a length field stored in LENGRF 20236, is to be read from MEM 10112. Initially, bias values are written into BIASM 23910, in a manner described below, when their corresponding length fields are written into LENGRF
20236. If a particular data item has a length of less than 32 bits, that data item's initial bias value will represent that data item's actual length. For example, if a data item has a length of 24 bits the associated bias value will be a 6 bit binary
number representing 24. That data item's length field in LENGRF 20236 will similarly contain a length value of 24. If a particular item has a length of greater than 32 bits for example, 70 bits as described in a previous example, that data item must be
read from MEM 10112 in a string transfer operation. As previously described, a string transfer is a series of read operations transferring 32 bits at a time from MEM 10112, with a final transfer of 32 bits or less completing transfer of that data item.
Such a data item's initial length field entry in LENGRF 20236 will contain, using the same example as previously described, a value of 70. That data item's initial bais entry written into a corresponding address space of BIASM 23910 will contain a bias
value of 32. That initial bias value of 32 indicates that at least the first read operation required to transfer that data item from MEM 10112 will transfer 32 bits of data.

When a data item having a length of less than 32 bits, for example 24 bits, is to be read from MEM 10112, that data item's bias value of 24 is read from BIASM 23910 and provided to LENGTH Bus 20226 as the length field of the logical descriptor
for that read operation.

Concurrently, that bias value of 24 is subtracted from that data item's length field read from LENGRF 20236. Subtracting that bias value from that length value will yield a result of zero, indicating that no further read operations are required
to complete transfer of that data item.

If a data item having, for example, a length of 70 bits is to be read from MEM 10112, that data item's initial bias value of 32 is read from BIASM 23910 to LENGTH Bus 20226 as the length field of the first logical descriptor of a string transfer. Concurrently, that data item's initial length field is read from LENGRF 20236. That data item's initial bias value, 32, is subtracted from that data item's initial length value, 70, in LENALU 20252. The result of that subtraction operation is the
remaining length of data item to be transferred in one or more subsequent read operations. In this example, subtracting initial bias value from initial length value indicates that 38 bits of that data item remain to be transferred. LENALU 20252's
output representing results of this subtraction, for example 38, are transferred to LENSEL 20250's third input to LENGRF 20236 and written into the address location from which that data item's initial length value was read. This new length field entry
then represents the remaining length of that data item. Concurrently, LDET 23912 examines that residual length value being written into LENGRF 20236 to determine whether remaining length of that data item is greater than 32 bits or is equal to or less
than 32 bits. If remaining length is greater than 32 bits, LDET 23912 generates a next bias value of 32, which is written into BIASM 23910 and same address location that held initial bias value. If remaining data item length is less than 32 bits, LDET
23912 generates a 6 bit binary number representing actual remaining length of data item to be transferred. Actual remaining length would then, again, be written into BIASM 23910 address location originally containing initial bias value. These
operations are also performed by LDET 23912 in examining initial length field and generating a corresponding initial bias value. These read operations are continued as described above until LDET 23912 detects that remaining length field is 32 bits or
less, and thus that transfer of that data item will be completed upon next read operation. When this event is detected, LDET 23912 generates a seventh bit input into BIASM 23910, which is written into BIASM 23910 together with last bias value of that
string transfer, indicating that remaining length will be zero after next read operation. When a final bias value is read from BIASM 23910 at start of next read operation of that string transfer, that seventh bit is examined by NXTZRO 23914 which
subsequently generates a test condition output, Last Read (LSTRD) to FUCTL 20214. FUCTL 20214 may then terminate execution of that string transfer after that last read operation, if the transfer has been successfully completed.

As previously described, the basic unit of length of a data item in CS 10110 is 32 bits. Accordingly, data items of 32 or fewer bits may be transferred directly while data items of more than 32 bits require a string transfer. In addition,
transfer of a data item through a string transfer requires tracking of the transferred length, and remaining length to be transferred, of both the data item itself and the data storage space of the location the data item is being transferred to. As
such, BIAS 20246 will store, and operate with, in the manner described above, length and bias fields of the logical descriptors of both the data item and the location the data item is being transferred to. FUCTL 20214 will receive an LSTRD test
condition if bias field of source descriptor becomes zero before or concurrently with that of the destination, that is a completed transfer, or if bias field of destination becomes zero before that of the source, and may provide an appropriate microcode
control response. It should be noted that if source bias field becomes zero before that of the destination, the remainder of the location that this data item is being transferred to will be filled and padded with zeros. If the data item is larger than
the destination storage capacity, the destination location will be filled to capacity and FUCTL 20214 notified to initiate appropriate action.

In addition to allowing data item transfers which are insensitive to data item length, BIAS 20246 allows string transfers to be accomplished by short, tight microcode loops which are insensitive to data item length. A string transfer, for
example, from location A to location B is encoded as:

(2) Store to B, subtract length from bias B, and branch to (1) if length of B does not go to zero or fall through (end transfer) if length of B goes to zero. Source (A) length need not be texted as the microcode loop continues until length of B
goes to zero; as described above, B will be filled and padded with zeros if length of A is less than length of B, or B will be filled and the string transfer ended if length of A is greater than or equal to length of B.

LDET 23912 and NXTZRO 23914 thereby allow FUCTL 20214 to automatically initiate a string transfer upon occurrence of a single microinstruction from FUCTL 20214 initiating a read operation by DESP 20210. That microinstruction initiating a read
operation will then be automatically repeated until LSTRD to FUCTL 20214 from NXTZRO 23914 indicates that the string transfer is completed. LDET 23912 and NXTZRO 23914 may, respectively, be comprised for example of S74S260s, SN74S133s, SN74S51s,
SN74S00s, SN74S00s, SN74S04s, SN74S02s, and SN74S32s.

Referring finally to SBIAS 23916, SBIAS 23916 is a multiplexer comprised, for example, of SN74S288s, SN74S374s, and SN74S244s. SBIAS 23916, under microinstruction control from FUCTL 20214, selects BIAS 20246's output to be one of a bias value
from BIASM 23910, L8, or L. SBIAS 23916's first input, from BIASM 23910, has been described above. SBIAS 23916's second input, L8, is provided from FUCTL 20214 and is 8 bits of a microinstruction provided from FUSITT 11012. SBIAS 23916's second input
allows microcode selection of bias values to be used in manipulation of length and offset fields of logical descriptors by LENALU 20252 and OFFALU 20242, and for generating entries to MC 10226. SBIAS 23916's third input, L, is similarly provided from
FUCTL 20214 and is a decoded length value derived from portions of microinstructions in FUSITT 11012. These microcode length values represent certain commonly occurring data item lengths, for example length of 1, 2, 4, 8, 16, 32, and 64 bits. An L
input representing a length of 8 bits, may be used for example in reading data from MEM 10112 on a byte by byte basis.

Having described operation of LENP 20220, operation of AONP 20216 will be described next below.

f. AON Processor 20216

a.a. AONGRF 20232

As described above, AONP 20216 includes AONSEL 20248 and AONGRF 20232. AONGRF 20232 is a 28 bit wide vertical section of GRF 10354 and stores AON fields of AON pointers and logical descriptors. AONSEL 20248 is a multiplexer for selecting inputs
to be written into AONGRF 20232. AONSEL 20248 may be comprised, for example of SN74S257s. AONGRF 20232 may be comprised of, for example, Fairchild 93422s.

As previously described, AONGRF 20232's output is connected onto AON Bus 20230 to allow AON fields of AON pointers and logical descriptors to be transferred onto AON Bus 20230 from AONGRF 20232. AONGRF 20232's output, together with a
bi-directional input from AON Bus 20230, is connected to a second input of AONSEL 20248 and to a fourth input of AONSEL 20238. This data path allows AON fields, either from AONGRF 20232 or from AON Bus 20230, to be written into AONGRF 20232 or AONGRF
20234, or provided as an input to OFFMUX 20240.

b.b. AON Selector 20248

AONSEL 20248's first input is, as previously described, connected from output of OFFALU 20242 and is used, for example, to allow AON fields generated or manipulated by OFFP 20218 to be written into AONGRF 20232. AONSEL 20248's third input is a
28 bit word wherein each bit is a logical zero. AONSEL 20248's third input allows AON fields of all zeros to be written into AONGRF 20232. An AON field of all zeros is reserved to indicate that corresponding entries in OFFGRF 20234 and LENGRF 20236 are
neither AON pointers nor logical descriptors. AON fields of all zeros are thereby reserved to indicate that corresponding entries in OFFGRF 20234 and LENGRF 20236 contain data.

In summary, as described above, DESP 20210 includes AONP 20216, OFFP 20218, and LENP 20220. OFFP 20218 contains a vertical section of GRF 10354, OFFGRF 20234, for storing offset fields of AON pointers and logical descriptors, and for containing
data to be operated upon by DESP 20210. OFFP 20218 is principal path for transfer of data from MEM 10112 to JP 10114 and is a general purpose 32 bit arithmetic and logic unit for performing all usual arithmetic and logic operations. In addition, OFFP
20218 includes circuitry, for example OFFMUX 20240, for generation and manipulation of AON, OFFSET, and LENGTH fields of logical descriptors and AON pointers. OFFP 20218 may also generate and manipulate entries for, for example, NC 10226, ATU 10228, PC
10234, AOT 10712, MHT 10716, MFT 10718, and other data and address structures residing in MEM 10112. LENP 20220 includes a vertical section of GRF 10354, LENGRF 20236, for storing length fields of logical descriptors, and for storing data. LENP 20220
further includes BIAS 20246, used in conjunction with LENGRF 20236 and LENALU 20252, for providing length fields of logical descriptors for MEM 10112 read operations and in particular automatically performing string transfers. AONP 20216 similarly
includes a vertical section of GRF 10354, AONGRF 20232. A primary function AONGRF 20232 is storing and providing AON fields of AON pointers and logical descriptors.

Having described structure and operation of DESP 20210, structure and operation of Memory Interface (MEMINT) 20212 will be described next below.

2. Memory Interface 20212 (FIGS. 106, 240)

MEMINT 20212 comprises FU 10120's interface to ME 10112. As described above, MEMINT 20212 includes Name Cache (NC) 10226, Address Translation Unit (ATU) 10228, and Protection Cache (PC) 10234, all of which have been previously briefly described. MEMINT 20212 further includes Descriptor Trap (DEST) 20256 and Data Trap (DAT) 20258. Functions performed by MEMINT 20212 includes (1) resolution of Names to logical descriptors, by NC 10226; (2) translation of logical descriptors to physical
descriptors, by ATU 10228; and (3) confirmation of access writes to objects, by PC 10234.

As previously described, many CS 10110 operations, in particular MEM 10112 and JP 10114 operations, are pipelined. That is, operations are overlapped with certain sets within two or more operations being executed concurrently. For example, FU
10120 may submit read request to MEM 10112 and, while MEM 10112 is accepting and servicing that request, submit a second read request. DEST 20256 and DAT 20258 assist in execution of overplapping operations by providing a temporary record of these
operations. For example, a part of a read or write request to MEM 10112 by FU 10120 is a logical descriptor provided to ATU 10228. If, for example the first red request just referred to results in a ATU 10228 cache miss or a protection violation, the
logical descriptor of that first request must be recovered for subsequent action by CS 10110 as previously described. That logical descriptor will have been captured and stored in DEST 20256 and thus is immediately available, so that DESP 20210 is not
required to regenerate that descriptor. DAT 20258 serves a similar purpose with regard to data being written into MEM 10112 from JP 10114. That is, DAT 20258 receives and captures a copy of each 32 bit word transferred onto JPD Bus 10142 by JP 10114.
In event of MEM 10112 being unable to accept a write request, that data may be subsequently reprovided from DAT 20258.

Referring to NC 10226, ATU 10228, and PC 10234, these elements of MEMINT 20212 are primarily cache mechanisms to enhance the speed of FU 10120's interface to MEM 10112, and consequently of CS 10110's operation. As described previously, NC 10226
contains a set of logical descriptors corresponding to certain operand names currently appearing in a process being executed by CS 10110. NC 10226 thus effectively provides high speed resolution of certain operand names to corresponding logical
descriptors. As described above with reference to string transfers, NC 10226 will generally contain logical descriptors only for data items of less than 256 bits length. NC 10226 read and write addresses are names provided on NAME Bus 20224. Name read
and write addresses may be provided from DESP 20210, and in particular from OFFP 20218 as previously described, or from FUCTL 20214 as will be described in a following description of FUCTL 20214. Logical descriptors comprising NC 10226 entries, each
entry comprising an AON field, an Offset field, a Length field, are written into NC 10226 through NC 10226 inputs WA, WO, and WL from, respectively, AON Bus 20230, OFFSET Bus 20228, and LENGRF 20236's output. Logical descriptors read from NC 10226 in
response to names provided to NC 10226 ADR input are provided to AON Bus 20230, OFFSET Bus 20228, and LENGTH Bus 20226 from, respectively, NC 10226 outputs RA, RO, and RL.

ATU 10228 is similarly a cache mechanism for providing high speed translation of logical to physical descriptors. In general, ATU 10228 will contain, at any given time, a set of logical to physical page number mappings for MEM 10112 read and
write requests which are currently being made, or anticipated to be made, to MEM 10112 by JP 10114. As previously described, each physical descriptor is comprised of a Frame Number (FN) field, and Offset Within Frame (O) fields, and a Length field. As
discussed with reference to string transfers, a physical descriptor length field, as in a logical descriptor length field, specify a data item of less than or equal to 32 bits length. Referring to FIG. 106C, as previously discussed a logical descriptor
comprised of a 14 bit AON field, a 32 bit Offset field, and Length field, wherein 32 bit logical descriptor Offset field is divided into a 18 bit Page Number (P) field and a 14 bit Offset within Page (O) field. In translating a logicl into a physical
descriptor, logical descriptor Length and O fields are used directly, as respectively, physical descriptor length and O fields. Logical descriptor AON and P fields are translated into physical descriptor FN field. Because no actual translation is
required, ATU 10228 may provide logical descriptor L field and corresponding O field directly, that is without delay, to MEM 10112 as corresponding physical descriptor O and Length fields. ATU 10228 cache entries are thereby comprised of physical
descriptor FN fields corresponding to AON and P fields of those logical descriptors for which ATU 10228 has corresponding entries. Because physical descriptor FN fields are provided from ATU 10228's cache, rather than directly as in physical descriptor
O and Length fields, a physical descriptor's FN field will be provided to MEM 10112, for example, one clock cycle later than that physical descriptors O and Length fields, as has been previously discussed.

Referring to FIG. 202, physical descriptor FN fields to be written into ATU 10228 are, in general, generated by DESP 20210. FN fields to be written into ATU 10228 are provided to ATU 10228 Data Input (DI) through JPD Bus 10142. ATU 10228 read
and write addresses are comprised of AON and P fields of logical descriptors and are provided to ATU 10228's AON and OFF inputs from, respectively, AON Bus 20230 and OFFSET Bus 20228. ATU 10228 read and write addresses may be provided from DESP 20210
or, as described further below, from FUCTL 20214. ATU 10228 FN outputs, together with O and Length fields comprising a physical descriptor, are provided to PD Bus 10146.

PC 10234 is a cache mechanism for confirming active procedure's access rights to objects identified by logical descriptors generated as a part of JP 10114 read or write requests to MEM 10112. As previously described access rights to objects are
arbitrated on the basis of subjects. A subject has been defined as a particular combination of a principal, process, and domain. A principal, process, and domain are each identified by corresponding UIDs. Each subject having access rights to an object
is assigned an Active Subject Number (ASN) as described in a previous description of CS 10110's Protection Mechanism. The ASN of a subject currently active in CS 10110 is stored in ASN Register 10916 in FU 10120. Access rights of a currently active
subject to currently active objects are read from those objects Access Control Lists (ACL) 10918 and stored in PC 10234. If the current ASN changes, PC 10234 is flushed of corresponding access right entries and new entries, corresponding to the new ASN,
are written into PC 10234. The access rights of a particular current ASN to a particular object may be determined by indexing, or addressing, PC 10234 with the AON identifying that object. Addresses to write entries into or read entries from PC 10234
are provided to PC 10234 AON input from AON Bus 20230. Entries to be written into PC 10234 are provided to PC 10234's WEN input from JPD Bus 10142. PC 10234 is also provided with inputs, not shown in FIG. 202 for purposes of clarity, from FUCTL 20214
indicating the current operation to be perfomed by JP 10114 with respect to an object being presently addressed by FU 10120. Whenever FU 10120 submits a read or write request concening a particular object to MEM 10112, AON field of that request is
provided as an addess to PC 10234. Access rights of the current active subject to that object are read from corresponding PC 10234 entry and compared to FUCTL 20214 inputs indicating the particular operation to be performed by JP 10114 with respect to
that object. The operation to be performed by JP 10114 is then compared to that active subject's access rights to that object and PC 10234 provides an output indicating whether that active subject possesses the rights required to perform the intended
operation. Indexing of PC 10234 and comparison of access rights to intended operation is performed concurrently with translation of the memory request logical descriptor to a corresponding physical descriptor by ATU 10228. If PC 10234 indicates that
that active subject has the required access rights, the intended operation is executed by JP 10114. If PC 10234 indicates that that active subject does not have the required access rights, PC 10234 indicates that a protection mechanism violation has
occurred and interrupts execution of the intended operation.

c.c. Structure and Operation of a Generalized Cache and NC 10226 (FIG. 240)

Having described overall structure and operation of NC 10226, ATU 10228, and PC 10234, structure and operation of these caches will be described in further detail below. Structure and operation of NC 10226, ATU 10228, and PC 10234 are similar,
except that NC 10226 is a four-way set associative cache, ATU 10228 is a three-way set associative cache and PC 10234 is a two-way set associative cache.

As such, the structure and operation of NC 10226, ATU 10228, and PC 10234 will be described by reference to and description of a generalized cache similar but not necessarily identical to each of NC 10226, ATU 10228, and PC 10234. Reference will
be made to NC 10226 in the description of a generalized cache next below, both to further illustrate structure and operation of the generalized cache, and to describe differences between the generalized cache and NC 10226. ATU 10228 and PC 10234 will
then be described by description of differences between ATU 10228 and PC 10234 and the generalized cache. General structure and theory of operation of caches has been previously described with reference to MC 20116 and will not be repeated below.

Referring to FIG. 240, a partial block diagram of a generalized four-way, set associative cache is shown. Tag Store (TS) 24010 is comprised of Tag Store A (TSA) 24012, Tag Store B (TSB) 24014, Tag Store C (TSC) 24016, and Tag Store D (TSD)
24018. Each of the cache's sets, represented by TSA 24012 to TSD 24018, may contain, for example as in NC 10226, up to 16 entries, so that TSA 24012 to TSD 24018 are each 16 words long.

As previously described, address inputs to a cache are divided into a tag field and an index field. Tag fields are stored in the cache's tag store and indexed, that is addressed to be read or written from or to tag store by index field of the
address. A tag read from tag store in response to index field of an address is then compared to tag field of that address to indicate whether the cache contains an entry corresponding to that address, that is, whether a cache hit occurs. In, for
example, NC 10226, a Name syllable may be comprised of an 8, 12, or 16 bit binary word, as previously described. The four least significant bits of these words, or Names, comprise NC 10226's index field while the remaining 4, 8, or 12 most significant
bits comprise NC 10226's tag field. TSA 24012 to TDS 24018 may each, therefore, be 12 entry wide memories to store the 12 bit tag fields of 16 bit names. Index (IND) or address inputs of TSA 24012 to TSD 24018, would in NC 10226, be connected from four
least significant bits of NAME Bus 20224 while Tag Inputs (TAGI) of TSA 24012 to TSD 24018 would be connected from the 12 most significant bits of NAME Bus 20224.

As described above, tag outputs of TS 24010 are compared to tag fields of addresses presented to the cache to determine whether the cache contains an entry corresponding to that address. Using NC 10226 as an example 12 bit Tag Outputs (TAGOs) of
TSA 24012 to TSD 24018 are connected to first inputs of Tag Store Comparators (TSC) 24019, respectively to inputs of Tag Store Comparitor A (TSCA) 24020, Tag Store Comparitor B (TSCB) 24022, Tag Store Comparitor D (TSCD) 24024, and Tag Store Comparitor E
(TSCE) 24026. Second 12 bit inputs of TSCA 24020 to TSCE 24026 may be connected from the 12 most significant bits of NAME Bus 20224 to receive tag fields of NC 10226 addresses. TAS 24020 to TSCE 24026 compare tag field of an address to tag outputs read
from TSA 24012 to TSE 24018 in response to index field of that address, and provide four bit outputs indicating which, if any, of the possible 16 entries and their associated tag store correspond to that address tag field. TSCA 24020 to TSCE 24026 may
be comprised, for example, of Fairchild 93S46s.

Four bit outputs of TSCA 24012 to TSCE 24026 are connected in the generalized cache to inputs of Tag Store Pipeline Registers (TSPR) 24027; respectively to inputs of Tag Store Pipeline Register A (TSPRA) 24028, Tag Store Pipeline Register B
(TSPRB) 24030, Tag Store Pipeline Register C (TSPRC) 24032, and Tag Store Pipeline Register D (TSPRD) 24034. As previously described with reference to MC 20116, ATU 10228 and PC 10234 is pipelined with a single cache access operation being executed in
two clock cycles. During first clock cycle tag store is addressed and tags store therein compared to tag field of address to provide indication of whether a cache hit has occurred, that is whether cache contains an entry corresponding to a particular
address. During second clock cycle, as will be described below, a detected cache hit is encoded to obtain access to a corresponding entry in cache data store. Pipeline operation over two clock cycles is provided by cache pipeline registers which
include, in part, TSPRA 24028 to TSPRD 24034. NC 10226 is not pipelined and does not include TSPRA 24028 to TSPRD 24034. In NC 10226, outputs of TSCA 24012 to TSCD 24024 are connected directly to inputs of TSHEA 24036 to TSHED 24042, described below.

Single bit outputs of TSHEA 24036 to TSHED 24042 are connected to inputs of Hit Encoder (HE) 24044. HE 24044 encodes single bit inputs from TSHEA 24036 to TSHED 24042 to provide two sets of ouputs. First outputs of HE 24044 are provided to
Cache Usage Store (CUS) 24046 and indicate in which of the cache's four sets, corresponding to TSA 24012 to TSD 24018, a cache hit has occurred. As described previously with reference to MC 20116, and will be described further below, CUS 24046 is a
memory containing information for tracking usage of cache entries. That is, CUS 24046 contains entries indicating whether, for a particular index, Set A, Set B, Set C or Set D of the cache's four sets has been most recently used and which has been least
recently used. CUS 24046 entries regarding Sets A, B, C, and D are stored in, respectively, memories CUSA 24088, CUSB 24090, CUSC 24092, and CUSD 24094. Second output of HE 24044, as described further below, is connected to selection input of Data
Store Selection Multiplexer (DSSMUX) 24048 to select an output from Data Store (DS) 24050 to be provided as output of the cache when a cache hit occurs.

Referring to DS 24050, as previously described a cache's data store contains the information, or entries, stored in that cache. For example, each entry in NC 10226's DS 24050 is a logical descriptor comprised of an AON, and Offset, and Length.
A cache's data store parallels, in structure and organization, that cache's tag store and entries therein are identified and located through that cache's tag store and associated tag store comparison and decoding logic. In NC 10226, for example, for
each Name having an entry in NC 10226 there will be an entry, the tag field of that name, stored in TS 24010 and a corresponding entry, a logical descriptor corresponding to that Name, in DS 24050. As described above, NC 10226 is a four-way, set
associative cache so that TS 24010 and DS 24050 will each contain four sets of data. Each set was previously described as containing up to 16 entries. DS 24050 is therefore comprised of four 16 word memories. Each memory is 65 bits wide, accommodating
28 bits of AON, 32 bits of offset, and 5 bits of length. These four component data store memories of DS 24050 are indicated in FIG. 240 as Data Store A (DSA) 24052, Data Store B (DSB) 24054, Data Store C (DSC) 24056, and Data Store D (DSD) 24058. DSA
24052, DSB 24054, DSC 24056 and DSD 24058 correspond, respectively, in structure, contents, and operation to TSA 24012, TSB 24014, TSC 24016 and TSD 24018.

Data Inputs (DIs) of DSA 24052 to DSD 24058 are, in NC 10226 for example, connected from AON Bus 20230, OFFSET Bus 20228, LENGTH Bus 20226 and comprise inputs WA, WO, WL respectively of NC 10226. DSA 24052 to DSD 24058 DIs are, in NC 10226 as
previously described, utilized in writing NC 10226 entries into DSA 24052 to DSD 24058. Address inputs of DSA 24052 to DSD 24058 are connected from address outputs of Address Pipeline Register (ADRPR) 24060. As will be described momentarily, except
during cache flush operations, DSA 24052 to DSD 24058 address inputs are comprised of the same index fields of cache addresses as are provided as address inputs to TS 24010, but are delayed by one clock cycle and ADRPR 24060 for pipelining purposes. As
described above, NC 10226 is not pipelined and does not have the one clock cycle delay. An address input to the cache will thereby result in corresponding entries, selected by index field of that address, being read from TSA 24012 to TSD 24018 and DSA
24052 to DSD 24058. The four outputs of DSA 24052 to DSD 24058 selected by a particular index field of a particular address are provided as inputs to DSSMUX 24048. DSSMUX 24048 is concurrently provided with selection control input from HE 24044. As
previously described, this selection input to DSSMUX 24048 is derived from TS 24010 tag entries and indicates which of DSA 24052 to DSD 24058 entries corresponds to an address provided to the cache. In response to that selection control input, DSSMUX
24048 selects one of DS 24050's four logical descriptor outputs as the cache's output corresponding to that address. DSSMUX 24048's output is then provided, through Buffer Driver (BD) 24062 as the cache's output, for example in NC 10226 to AON Bus
20230, OFFSET Bus 20228, and LENGTH Bus 20226.

Referring to ADRMUX 24062, ADRMUX 24062 selects one of two sources to provide address inputs to DS 24050, that is to index to DS 24050. As described above, a first ADRMUX 24062 input is comprised of the cache's address index fields and, for
example in NC 10226, is connected from the four least significant bits of NAME Bus 20224. During cache flush operations, DS 24050 address inputs are provided from Flush Counter (FLUSHCTR) 24066, which in the example is a four bit counter. During cache
flush operations, FLUSHCTR 24066 generates sequential bit addresses which are used to sequentially address DSA 24052 to DSD 24058. Selection between ADRMUX 24062 first and second inputs, respectively the address index fields and from FLUSHCTR 24066, is
controlled by Address Multiplexer Select (ADRMUXS) from FUCTL 20214.

Validity Store (VALS) 24068 and Dirty Store (DIRTYS) 24070 are memories operating in parallel with, and addressed in parallel wih TS 24010. VALS 24068 contains entries indicating validity of corresponding TS 24010 and DS 24050 entries. That is,
VALS 24068 entries indicate whether corresponding entries have been written into corresponding locations in TS 24010 and DS 24050. In the example, VALS 24068 may thereby be a 16 word by 4 bit wide memory. Each bit of a VALS 24068 word indicates
validity of a corresponding location in TSA 24012 and DSA 24052, TSB 24014 and DSB 24054, TSC 24016 and DSC 24056, and TSD 24018 and DSD 24058. DIRTYS 24070 similarly indicates whether corresponding entries in corresponding locations of TS 24010 and DS
24050 have been written over, or modified. Again, DIRTYS 24070 will be a sixteen word by four bit wide memory.

Address inputs of VALS 24068 and DIRTYS 24070 are, for example in NC 10226, connected from least significant bits of NAME Bus 20224 and are thus addressed by index fields of NC 10226 addresses in parallel with TS 24010. Outputs of VALS 24068 are
provided to TSCA 24020 to TSEE 24026 to inhibit outputs of TSCA 24020 through TSCE 24026 upon occurrence of an invalid concurrence between a TS 24010 entry and a NC 10226 address input. Similar outputs of DIRTYS 24070 are provided to FUCTL 20214 for use
in cache flush operations to indicate which NC 10226 entries are dirty and must be written back into an MT 10350 rather than disgarded.

Outputs of VALS 24068 and DIRTYS 24070 are also connected, respectively, to inputs of Validity Pipeline Register (VALPR) 24072 and Dirty Pipeline Register (DIRTYPR) 24074. VALPR 24072 and DIRTYPR 24074 are pipeline registers similar to TSPRA
24028 to TSPRD 24034 and are provided for timing purposes as will be described momentarily. Outputs of VALPR 24072 and DIRTYPR 24074 are connected to inputs of, respectively, Validity Write Logic (VWL) 24076 and Dirty Write Logic (DWL) 24078. As
described above, NC 10226 is not a pipelined cache and does not include VALPR 24072 and DIRTYPR 24074; outputs of VALS 24068 and DIRTYS 24070 are connected directly to inputs of VWL 24076 and DWL 24078. Outputs of VWL 24076 and DWL 24078 are connected,
respectively, to data inputs of VALS 24068 and DIRTYS 24070. Upon occurrence of a write operation to TS 24010 and DS 24050, that is writing in or modifying a cache entry, corresponding validity and dirty word entries are read from VALS 24068 and DIRTYS
24070 by index field of the caches input address. Outputs to VALS 24068 DIRTYS 24070 are received and stored in, respectively, VALPR 24070 and DIRTYPR 24074. At start of next clock cycle, validity and dirty words in VALPR 24072 and DIRTYPR 24074 are
read into, respectively, VWL 24076 and DWL 24078. VWL 24076 and DWL 24078 respectively modify those validity or dirty word entries from VALS 24068 and DIRTYS 24070 in accordance to whether the corresponding entries in TS 24010 and DS 24050 are written
into or modified. These modified validity and dirty words are then written, during second clock cycle, from VWL 24076 and DWL 24078 into, respectively, VALS 24068 and DIRTYS 24070. Control inputs of VWL 24076 and DWL 24078 are provided from FUCTL
20214.

Referring finally to Least Recent Used Logic (LRUL) 24080, as previously described with reference to MC 20116, LRUL 24080 tracks usage of cache entries. As previously described, the generalized cache of FIG. 240 is a four way, set associative
cache with, for example, up to 16 entries in each of NC 10226's sets. Entries within a particular set are identified, as described above, by indexing the cache's TS 24010 and DS 24050 may contain, concurrently, up to four individual entries identified
by the same index but distiguished by having different tags. In this case, one entry would reside in Set A, comprising TSA 24012 and DSA 24052, one in Set B, comprising TSB 24014 and DSB 24054, and so on. Since the possible number of individual entries
having a common tag is greater than the number of cache sets, it may be necessary to delete a particular cache entry when another entry having the same tag is to be written into the cache. In general, the cache's least recently used entry would be
deleted to provide a location in TS 24010 and DS 24050 for writing in the new entry. LRUL 24080 assists in determining which cache entries are to be deleted when necessary in writing in a new entry by tracking and indicating relative usage of the
cache's entries. LRUL 24080 is primarily comprised of a memory, LRU Memory (MLRU) 24081, containing a word for each cache set. As described above, NC 10226, for example, includes 16 sets of 4 frames each, so that LRUL 24080's memory may correspondingly
be, for example, 16 words long. Each word indicates relative usage of the 4 frames in a set and is a 6 bit word.

Words are generated and written into LRUL 24080's MLRU 24081, through Input Register A, B, C, D (RABCD) 24083, according to a write only algorithm executed by HE 24044, as described momentarily. Each bit of each six word pertains to a pair of
frames within a particular cache set and indicates which of those two frames was more recently used than the other. For example, Bit 0 will contain logic 1 if Frame A was used more recently than Frame B and a logic zero if Frame B was used more recently
than Frame A. Similarly, Bit 1 pertains to Frames A and C, Bit 2 to Frames A and D, Bit 3 to Frames B and C, Bit 4 to Frames B and D, and Bit 5 to Frames C and D. Initially, all bits of a particular LRUL 24080 word are set to zero Assuming, for example,
that the frames of a particular set are used in the sequence Frame A, Frame D, Frame B; Bits 0 to 5 of that LRUL 24080 word will initially contain all zeros. Upon a reference to Frame A, Bits 0, 1, and 2, referring respectively to Frames A and B, Frames
A and C, and Frames A and D, will be written as logic 1's. Bits 3, 4, and 5, referring respectively to Frames B and C, Frames B and D, and Frames C and D, will remain logic 0. Upon reference to Frame D, Bits 0 and 1, referring respectively to Frames A
and B and Frames A and C, will remain logic 1's. Bit 2, referring to Frames A and D, will be changed from logic 1 to logic 0 to indicate that Frame D has been referred to more recently than Frame A. Bit 3, referring to Frames B and C, will remain logic
0. Bits 4 and 5, referring respectively to Frames B and D and Frames C and D, will be written as logic 0, although they are already logic zeros, to indicate respectively that Frame D has been used more recently than Frame B or Frame C. Upon reference to
Frame B, Bit 0, referring to Frames A and B, will be written to logic 0 to indicate that Frame B has been used more recently than Frame A. Bits 1 and 2, referring resectively to Frames A and C and Frames A and D, will remain respectively as logic 1 and
logic 0. Bits three and four, referring respectively to Frames B and C and Frames B and D, will be written as logics 1's to indicate respectively that Frame B has been used more recently than Frame C or Frame D. Bit five will remain logic 0.

When it is necessary to replace a cache entry in a particular frame, the LRUL 24080 word referring to the cache set containing that frame will be read from LRUL 24080's MLRL 24081 through LRU Register (RLRU) 24085 and decoded by LRU Decode Logic
(LRUD) 24087 to indicate which is least recently used frame. This decoding is executed by means of a Read Only Memory operating as a set of decoding gating.

Having described the structure and operation of a generalized cache as shown in FIG. 240, with references to NC 10226 for illustration and to point out differences between the generalized cache and NC 10226, structure and operation of ATU 10228
and PC 10234 will be described next below. ATU 10228 and PC 10234 will be described by describing the differences between ATU 10228 and PC 10234 and the generalized cache and NC 10226. ATU 10228 will be described first, followed by PC 10234.

d.d. Address Translation Unit 10228 and Protection Cache 10234

ATU 10228 is a three-way, set associative cache of 16 sets, that is contains 3 frames for each set. Structure and operation of ATU 10228 is similar to the generalized cache described above. Having 3 rather than 4 frames per set, ATU 10228 does
not include a STD 24018, ATSCE 24026, ATSPRD 24034, ATSHED 24042, or ADSD 24058. As previously described ATU 10228 address inputs comprise AON and O fields of logical descriptors. AON fields are each 28 bits and O fields comprise the 18 most
significant bits of logical descriptor offset fields, so that ATU 10228 address inputs are 48 bits wide. Four least significant bits of O fields are used as index. AON fields and the 14 most significant bits of O field comprise ATU 10228's tags. ATU
10228 tags are thereby each 42 bits in width. Accordingly, TSA 24012, TSB 24014, and TSC 24016 of ATU 10228's TS 24010 are each 16 words long by 42 bits wide.

ATU 10228's LRUL 24080 is similar in structure and operation to that of the generalized cache. ATU 12028's LRUL 24080 words, each corresponding to an ATU 10228 set, are each 3 bits in width as 3 bits are sufficient to indicate relative usage of
frames within a 3 frame set. In ATU 10228, Bit 1 of an LRUL 24080 word indicates whether Frame A was used more recently than Frame B, Bit 2 whether Frame A was used more recently than Frame C, and Bit 3 whether Frame B was used more recently than Frame
C. In all other respects, other than as stated above, ATU 10228 is similar in structure and operation to the generalized cache.

Referring to PC 10234, PC 10234 is a two-way, set associative cache of 8 sets, that is has two frames per set. Having 2 rather than 4 frames, PC 10234 will not include a TSL 24016, a TSD 24018, a TSCC 24024, a TSCD 24026, a TSPRC 24032, a TSPRD
24034, a TSHEC 24040, a TSHED 24042, a DSC 24056, or a DSD 24058.

Address inputs of PC 10234 are the 28 bit AON fields of logical descriptors. The 3 least significant bits of those AON fields are utilized as indexes for addressing PC 10234's TS 24010 and DS 24050. The 25 most significant bits of those AON
field address inputs are utilized as PC 10234's tags, so that PC 10234's TSA 24012 and TSB 24014 are each 8 word by 25 bit memories.

Referring to PC 10234's LRUL 24080, a single bit is sufficient to indicate which of the two frames in each of PC 10234's sets was most recently accessed. PC 10234's LRUL 24080's memory is thereby 8 words, or sets long, one bit wide.

As previously described, PC 10234 entries comprise information regarding access rights of certain active subjects to certain active objects. Each PC 10234 entry contains 35 bits of information. Three bits of this information indicate whether a
particular subject was read, write, or execute rights relative to a particular object. The remaining 32 bits effectively comprise a length field indicating the volume or portion, that is the number of data bits, of that object to which those access
rights pertain.

Referring again to FIG. 240, PC 10234 differs from the generalized cache and from NC 10226 and ATU 10228 in further including Extent Check Logic (EXTCHK) 24082 and Operation Check Logic (OPRCHK) 24084. PC 10234 entries include, as described
above, 3 bits identifying type of access rights a particular subject has to a particular object. These 3 bits, representing a Read (R), Write (W), or Execute (E) right, are provided to a first input of OPRCHK 24084. A second input of OPRCHK 24084 is
provided from FUCTL 20214 and specifies whether JP 10114 intends to perform a Read (RI), a Write (WI), or Execute (EI), operation with respect to that object. OPRCHK 24084 compares OPRCHK 24084 access right inputs from DS 24050 to OPRCHK 24084's
intended operation input from FUCTL 20214. If that subject does not possess the rights to that object which are required to perform the operation intended by JP 10114, OPRCHK 24084 generates an Operation Violation (OPRV) indicating that a protection
violation has occurred.

Similarly, the 32 bits of a PC 10234 entry regarding extent rights is provided as an input (EXTENT) to EXTCHK 24082. As stated above. EXTENT field of PC 10234 entry indicates the length or number of data bits, within an obect, to which those
access rights pertain. EXTENT field from PC 10234 entry is compared, by EXTCHK 24082, to offset field of the logical descriptor of the current JP 10114 request to MEM 10112 for which a current protection mechanism check is being made. If comparison of
extent rights and offset field indicate that the current memory request goes beyond the object length to which the corresponding rights read from DS 24050 apply, EXTCHK 24082 generates an Extent Violation (EXTV) output. EXTV indicates that a current
memory request by JP 10114 refers to a portion of an object to which the PC 10234 entry read from BS 24050 does not apply. As described previously, each read from or write to MEM 10112, even as part of a string transfer, is a 32 bit word. As such,
EXTCHK 24082 will generate an EXTV output when OFFSET field of a current logical descriptor describes a segment of an object less than 32 bits from the limit defined by EXTENT field of the PC 10234 entry provided in response to that logical descriptor.
EXTV and OPRV are gated together, by Protection Violation Gate (PVG) 24086 to generate Protection Violation (PROTV) output indicating that either an extent or an operation violation has occurred.

Having described the structure and operation of MEMINT 20212, and previously the structure and operation of DESP 20210, structure and operation of FUCTL 20214 will be described next below.

3. Fetch Unit Control Logic 20214 (FIG. 202)

The following descriptions will provide a detailed description of FU 10120's structure and operation. Overall operation of FU 10120 will be described first, followed by description of FU 10120's structure, and finally by a detailed description
of FU 10120 operation.

As previously described, FUCTL 20214 directs operation of JP 10114 in executing procedures of user's processes. Among the functions performed by FUCTL 20214 are, first, maintenance and operation of CS 10110's Name Space, UID, and AON based
addressing system, previously described; second, interpretation of SOPs of user's processes to provide corresponding sequences of microinstructions to FU 10120 and EU 10122 to control operation of JP 10114 in execution of user's processes, previously
described; and, third, control of operation of CS 10110's internal mechanisms, for example CS 10110's stack mechanisms.

As will be described in further detail below, FUCTL 20214 includes Prefetcher (PREF) 20260 which generates a sequence of logical addresses, each logical address comprising an AON and an offset field, for reading S-Instructions (SINs) of a user's
program from MEM 10112. As previously described, each SIN may be comprised of an S-Operation (SOP) and one or more operand Names and may occupy one or more 32 bit words. SINs are read from MEM 10112 as a sequence of single 32 bit words, so that PREF
20260 need not specify a length field in a MEM 10112 read request for an SIN. SINs are read from MEM 10112 through MOD Bus 10144 and are captured and stored in Instruction Buffer (INSTB) 20262. PARSER 20264 extracts, or parses, SOPs and operand Names
from INSTB 20262. PARSER 20264 provides operand Names to NC 10226 and SOPs to FUS Intrepreter Dispatch Table (FUSDT) 11010 and to EU Dispatch Table (EUSDT) 20266 through Op-Code Register (OPCODEREG) 20268. Operation of INSTB 20262 and PARSER 20264 is
controlled by Current Program Counter (CPC) 20270, Initial Program Counter (IPC) 20272, and Executed Program Counter (EPC) 20274.

As previously described, FUSDT 11010 provides, for each SOP received from OPCODEREG 20268, a corresponding S-Interpreter Dispatch (SD) Pointer, or address, to FUSITT 11012 to select a corresponding sequence of microinstructions to direct
operation of JP 10114, in particular FU 10120. As previously described, FUSITT 11012 also contains sequences of microinstructions for controlling and directing operation of CS 10110's internal mechanisms, for example those mechanisms such as RCWS 10358
which are involved in swapping of processes. EUSDT 20266 performs an analogous function with respect to EU 10122 and provides SD Pointers to EU S-Interpreter Tables (EUSITTs) residing in EU 10122.

As previously described, FUSITT 11012 is a writable microinstruction control store which is loaded with selected S-Interpreters (SINTs) from MEM 10112.

FUSITT 11012 addresses are also provided by Event Logic (EVENT) 20284 and by JAM input from NC 10226. As will be described further below, EVENT 20284 is part of FUCTL 20214's circuitry primarily concerned with operation of CS 10110's internal
mechanisms. Input JAM from NC 10226 initiates certain FUCTL 20214 control functions for CS 10110's Name Space addressing mechanisms, and in particular NC 10226. Selection between the above discussed address inputs to FUSITT 11012 is controlled by
S-Interpreter Table Next Address Generator Logic (SITTNAG) 20286.

As previously described, MISPR 10356 mechanism provides pointers for addressing Micro-Stack (MIS) 10368. As will be described further below, actual MIS 10368 Pointers pointing to current, previous, and bottom frames of MIS 10368 reside in
Micro-Control Word Register 1 (MCW1) 20290. MCW1 20290 and Micro-Control Word Zero Register (MCWO) 20292 together contain certain information indicating the current execution environment of a microinstruction sequence currently being executed by FU
10120. This execution information is used in aide of execution of these microinstruction sequences. State Registers (STATE) 20294 capture and store certain information regarding state of operation of FU 10120. As described further below, this
information, referred to as state vectors, is used to enable and direct operation of FU 10120.

Timers (TIMERS) 20296 monitor elapsed time since occurrence of the events requiring servicing by FU 10120. If waiting time for these events exceeds certain limits, TIMERS 20296 indicate that these limits have been exceeded so that service of
those events may be initiated.

Finally, Fetch Unit to E Unit Interface Logic (FUEUINT) 20298 comprises the FU 10120 portion of the interface between FU 10120 an EU 10122. FUEUINT 20298 is primary path through which operation of FU 10120 and EU 10122 is coordinated.

Having described overall operation of FU 10120, structure of FU 10120 will be described next below with aide of FIG. 202, description of FU 10120's structure will be followed by a detailed description of FU 10120 wherein further, more detailed,
diagrams of certain portions of FU 10120 will be introduced as required to enhance clarity of presentation.

a.a. Fetch Unit Control Logic 20214 Overall Structure

Referring again to FIG. 202, as previously described FIG. 202 includes a partial block diagram of FUCTL 20214. Following the same sequence of description as above, PREF 20260 has a 28 bit bi-directional port connected to AON Bus 20230 and 32 bit
bi-directional port directed from OFFSET Bus 20228. A control input of PREF 20260 is connected from control output of INSTB 20262.

INSTB 20262 32 bit data input (DI) is connected from MOD Bus 10144. INSTB 20262's 16 bit output (DO) is connected to 16 bit bi-directional input of OPCODEREG 20268 and to 16 bit NAME Bus 20224. OPCODEREG 20268's input comprises 8 bits of SINT
and 3 bits of dialect selection. As previously described, NAME Bus 20224 is connected to 16 bit bi-directional port of Name Trap (NT) 20254, to address input ADR of NC 10226, and to inputs and outputs of OFFP 20228. Control inputs of INST 20262 and
PARSER 20264 are connected from a control output of CPC 20270.

Eleven bit outputs of OPCODEREG 20268 are connected to 11 bit address inputs of FUSDT 11010 and EUSDT 20266. These 11 bit address inputs to FUSDT 11010 and EUSDT 20266 each comprise 3 bits of dialect selection code and 8 bits of SINT code.
Twelve bit SDT outputs of EUSDT 20266 is connected to inputs of Microinstruction Control Store in EU 10122, as will be described in a following description of EU 10122. FUSDT 11010 has, as described further below, two outputs connected to address (ADR)
Bus 20298. First output of FUSDT 11010 are six bit SDT pointers, or addresses, corresponding to generic SINTs as will be described further below. Second output of FUSDT 11010 are 15 bit SDT pointers, or addresses, for algorithm microinstruction
sequences, again as will be described further below.

Referring to RCWS 10358, RCWS 10358 has a first bi-directional port connected from JPD Bus 10142. Second, third, and fourth bi-directional ports of RCWS 10358 are connected from, respectively, a bi-directional port of MCW1 20290, a first
bi-directional port EVENT 20284, and a bi-directional port of mPC 20276. An output of RCWS 10358 is connected to ADR Bus 20298.

An input of mPC 20276 is connected from ADR Bus 20298 and first and second outputs of mPC 20276 are connected to, respectively, an input of BRCASE 20278 and to ADR Bus 20298. An output of BRCASE 20278 is connected to ADR Bus 20298.

As described above, a first bi-directional port of EVENT 20284 is connected to RCWS 10358. A second bi-directional port of EVENT 20284 is connected from MCWO 20292. An output of EVENT 20284 is connected to ADR Bus 20298.

Inputs of RPCTR 20280 and PNREG 20282 are connected from JPD Bus 10142. Outputs of RPCTR 20280 and PNREG 20282 are connected to ADR Bus 20298.

ADR Bus 20298, and an input from a first output of FUSITT 11012, are connected to inputs of SITTNAG 20286. Output of SITTNAG 20286 is connected, through Control Store Address (CSADR) Bus 20299, to address input of FUSITT 11012. Data input of
FUSITT 11012 is connected from JPD Bus 10142. Control outputs of FUSITT 11012 are connected to almost all elements of JP 10114 and thus, for clarity of presentation, are not shown in detail by drawn physical connections but are described in following
descriptions.

As described above, MCWO 20292 and MCW1 20290 have bi-directional ports connected to, respectively, bi-directional ports of EVENT 20284 and to a second bi-directional port of RCWS 10358. Outputs of MCWO 20292 and MCW1 20290 are connected to JPD
Bus 10142. Other inputs of MCWO 20292 and MCW1 20290, as will be described further below, are connected from several other elements of JP 10114 and, for clarity of presentation, are not shown herein in detail but are described in the following text.
STATE 20294 similarly has a large number of inputs and outputs connected from and to other elements of JP 10114, and in particular FU 10120. Inputs and outputs of STATE 20294 are not indicated here for clarity of presentation and will be described in
detail below.

RAG 20288 has an input connected from JPD Bus 10142 and other inputs connected, for example, from MCW1 20290. RAG 20288, including MISPR 10356, provides outputs, for example, as address inputs to RCWS 10358 and GRF 10354. Again, for clarity of
presentation, inputs and outputs of RAG 20288 are not shown in detail in FIG. 202 but will be described in detail further below.

TIMERS 20296 receive inputs from EVENT 20284 and FUSITT 11012 and provide outputs to EVENT 20284. For clarity of presentation, these indications are not shown in detail in FIG. 202 but will be described further below.

FUINT 20298 receives control inputs from FUSITT 11012 and EU 10122. FUINT 20298 provides outputs to EU 10122 and to other elements of FUCTL 20214. For clarity of presentation, connections to and from FUINT 20298 are not shown in detail in FIG.
202 but will be described in further detail below.

Having described the overall operation, and structure, of FUCTL 20214, operation of FUCTL 20214 will be described next below. During the following descriptions further diagrams of certain portions of FUCTL 20214 will be introduced as required to
disclose structure and operation of FUCTL 20214 to one of ordinary skill in the art. FUCTL 20214's operation with regard to fetching and interpretation of SINs, that is SOPs and operand Names, will be described first, followed by description of FUCTL
20214's operation with regard to CS 10110's internal mechanisms.

As described above, PREF 20260 generates a series of addresses to MEM 10112 to read SINs of user's programs from MEM 10112 to FUCTL 20214, and in particular to INSTB 20262. Each PREF 20260 read request transfers one 32 bit word from MEM 10112.
Each SIN may be comprised of an SOP and one or more Name syllables Each SOP may comprise, for example, 8 bits of information while each Name syllable may comprise, for example, 8, 12, or 16 bits of data. In general, and as will be described in further
detail in a following description of STATE 20294, PREF 20260 obtains access to MEM 10112 on alternate 110 nano-second system clock cycles. PREF 20260's access to MEM 10112 is conditional upon INSTB 20262 indicating that INSTB 20262 is ready to receive
an SIN read from MEM 10112. In particular, INSTB 20262 generates control output Quiry Prefetch (QPF) to PREF 20260 to enable PREF 20260 to submit a request to MEM 10112 when, as described further below, INSTB 20262 is ready to receive an SIN read from
MEM 10112.

PREF 20260 is a counter register comprised, for example of SN74S163s.

Bi-directional inputs and outputs of PREF 20260 are connected to AON Bus 20230 and OFFSET Bus 20228. As PREF 20260 reads only single 32 bit words, PREF 20260 is not required to specify a LENGTH field as part of an SIN read request, that is an
AON and an OFFSET field are sufficient to define a single 32 bit word. At start of read of a sequence of SINs from MEM 10112, address (AON and OFFSET fields) of first 32 bit word of that SIN sequence are provided to MEM 10112 by DESP 20210 and
concurrently loaded, from AON Bus 20230 and OFFSET Bus 20228, into PREF 20260. Thereafter, as each successive thirty-two bit word of the SIN's sequence is read from MEM 10112, the address residing in PREF 20260 is incremented to specify successive 32
bit words of that SIN's sequence. The successive single word addresses are, for all words after first word of a sequence, provided to MEM 10112 from PREF 20260.

As described above, INSTB 20262 receives SINs from MEM 10112 through MOD Bus 10144 and, with PARSER 20264 and operating under control of CPC 20270, provides Name syllables to NAME Bus 20224 and SINs to OPCODEREG 20268. INSTB 20262 is provided,
together with PREF 20260 to increase execution speed of SINS.

PARSER 20264 receives a first control input from Current Syllable Size Register (CSSR) 24112, associated with CPC 20270. A second control input of PARSER 20264 is provided from Instruction Buffer Syllable Decode Register (IBSDECR) 24114, also
associated with CPC 20270. PARSER 20264 provides an eight bit output to NAME Bus 20224 and to input of OPCODEREG 20268.

Referring to INSTBWC 24110, INSTBWC 24110 provides, as described further below, control signals pertaining to writing of SINs into INSTB 20262 from MOD Bus 10144. INSTBWC 24110 also provides control signals pertaining to operation of PREF 20260. In addition to WC outputs to INSTB 20262, INSTBWC 24110 provides control output QPF to PREF 20260, control output Instruction Buffer Hung (IBHUNG) to EVENT 20284, and control signal Instruction Buffer Wait (IBWAIT) to STATE 20294. INSTBWC 24110 also
receives a control input BRANCH from BRCASE 20278 and an error input from TIMERS 20296.

Referring to CPC 20270, IPC 20272, and EPC 20274, IPC 20272 and EPC 20274 are represented in FIG. 241 as in FIG. 202. Further FUCTL 20214 circuitry is shown as associated with CPC 20270. CPC 20270 is a twenty-nine bit register receiving bits
one to twety-five (CPC(1-25)) from bits one to twenty-five of JPD Bus 10142. CPC 20270 Bit 0 (CPC0) is provided from CPC0 CPCO Select (CPCOS) 24116. Inputs of CPCOS 24116 are Bit 1 output from CPC 20270 (CPC1) and Bit 0 from JPD Bus 10142. Bits
twenty-six, twenty-seven, and twenty-eight of CPC 20270 (CPC(26-28)) are provided from CPC Multiplexer (CPCMUX) 24118. CPCMUX 24118 also provides an input to IBSDECR 24114. Inputs of CPCMUX 24118 are bits twenty-five, twenty-six, and twenty-eight from
JPD Bus 10142 and a three bit output of CPC Arithmetic and Logic Unit (CPCALU) 24120. A first input of CPCALU 24120 is connected from output bits 26, 27, and 28 of CPC 20270. Second input of CPCALU 24120 is connected from CSSR 24112. CSSR 24112's
input is connected from JPD Bus 10142.

As described above, INSTB 20262 is implemented as a sixty-four bit wide register INSTB 20262 is organized as two thirty-two bit words, referred to as Instruction Buffer Word 0 (IB0) and Instruction Buffer Word 1 (IB1), and operates as a two word,
first-in-first-out buffer memory. PREF 20260 loads one of IB0 or IB1 on each memory reference by PREF 20260. Only PREF 20260 may load INSTB 20262, and INSTB 20262 may be loaded only from MOD Bus 10144. Separate clocks, respectively Instruction Buffer
Write Clock 0 (IBWC0) and Instruction Buffer Write Clock 1 (IBWC1), are provided from INSTBWC 24110 to load, respectively, IBW0 and IBW1 into INSTB 20262. IBWC0 and IBWC1 are each a gated 110 nano-second clock. An IBW0 or an IBW1 is written into INSTB
20262 when, respectively, IBWC0 or IBWC1 is enabled by INSTBWC 24110. IBWC0 and IBWCI will be enabled only when MEM 10112 indicates that data for INSTB 20262 is availabe by asserting interface control signal DAVI as previously discussed

INSTBWC 24110 is primarily concerned with control of FU 10120 with respect to writing of SINs into INSTB 20262. As described above, INSTBWC 24110 provides IBWC0 and IBWC1 to INSTB 20262. IBWC0 and IBWC1 are enabled by INSTBWC 24110's input DAVI
from MEM 10112. Selection between IBWC0 and IBWC1 is controlled by INSTBWC 24110's input from CPC 20270. In particular, and as will be described further below, Bit 26 (CPC 26) of CPC 20270's twenty-nine bit word indicates whether IBW0 or IBW1 is
written into INSTB 20262.

In addition to controlling writing of IBW0 and IBW1 into INSTB 20262, INSTBWC 24110 provides control signals to elements of FU 10120 to control reading of SINs from MEM 10112 to INSTB 20262. In this regard, INSTBWC 24110 detects certain
conditions regarding status of SIN words in INSTB 20262 and provides corresponding control signals, described momentarily, to other elements of FU 10120 so that INSTB 20262 would generally always contain at least one valid SOP or Name syllable. First,
if INSTB 20262 is not full, that is either IBW0 or IBW1 or both is invalid, for example because IBW0 has been read from INSTB 20262 and executed, INSTBWC 24110 detects this condition and provides control signal QPF to PREF 20262 to initiate a read from
MEM 10112. INSTBWC 24110 currently enables either IBW0 or IBW1 portion of INSTB 20262 to receive the word read from MEM 10112 in response to PREF 20260's request. As stated above, this operation will be initiated when INSTBWC 24110 detects and
indicates, by generating a validity flag, that either IBW0 or IBW1 is invalid. In this case, IBW0 or IBW1 will be indicated as invalid when read from INSTB 20262 by PARSER 20264. As will be described further below, INSTBWC 24110 validity flags for IBW0
and IBWI are generated by INSTBWC 24110 control inputs comprising Bits 26 to 28 (CPC 26-28) from CPC 20270 and by current syllable size or value, flag (K) input from CSSR 24112. Secondly, INSTBWC 24110 will detect when INSTB 20262 is empty, that is when
both IBW0 and IBWI are invalid, as just described, or when only a half of a sixteen bit Name syllable is present in INSTB 20262. In response to either condition, INSTBWC 24110 will generate control signal IBWAIT to STATE 20294. As will be described
further below, IBWAIT will result in suspension of execution of microinstructions referencing INSTB 20262. PREF 20260 requests to MEM 10112 will already have been initiated, as described above unless certain other conditions, described momentarily,
occur. Thirdly, INSTBWC 24110 will detect when INSTB 20262 is empty and PREF 20262 is hung, that is unable to submit requests to MEM 10112, and a current microinstruction is attempting to parse a syllable from INSTB 20262. In this case, INSTBWC 24110
will generate control signal Instruction Buffer Hung (IBHUNG) to EVENT 20284. As will be described further below, IBHUNG will result in initiation of a microinstruction sequence to restore flow of words to INSTB 20262. Fourthly, INSTBWC 24110 will
detect, through microinstruction control signals provided from FUSITT 11012, when a branch in a microinstruction sequence provided by FUSITT 11012 in response to an SOP occurs. In this case, both IBW0 and IBW1 will be flaged as invalid. INSTBWC 24110
will then ignore SIN words being read from MEM 10112 in response to a previously submitted PREF 20260 request, but not yet received at the time the branch occurs. This prevents INSTB 20260 from receiving invalid SIN words; PREF 20260 and INSTB 20262
will then proceed to request and receive valid SIN words of the branch.

As described above, PARSER 20264, operating under control of CPC 20270 and CPC 20270 associated circuitry, reads Name syllables and SOPs from INSTB 20262 to, respectively, NAME Bus 20224 and OPCODEREG 20268. PARSER 20264 operates as a
multiplexer with associated control logic.

As previously described, INSTB 20262 is internally structured as eight, eight bit words, BS0 to BS7. IBW0 comprises BS0 to B3 while IBW1 comprises BS4 to BS7. Each SOP is comprised of eight bits of data and thus comprises one Basic Syllable
while each Name syllable comprises 8, 12, or 16 bits of data and thus comprises either one or two Basic Syllables. Name syllable size, as previously stated, is indicated by Current Syllable Size Value K stored in CSSR 24112.

BS0 and BS4 are loaded into INSTB 20262 from MOD Bus 10144 bits zero to seven while BS2 and BS6 are loaded from MOD Bus 10144 bits sixteen to twenty-three. BS1 and BS5 are loaded from MOD Bus 10144 bits eight to fifteen while BS3 and BS7 are
loaded from MOD Bus 10144 bits twenty-four to thirty-one. Odd numbered Basic Syllable outputs BS1, BS3, BS5, and BS7 are ORed to comprise eight bit Basic Syllable, Odd output BS0 of INSTB 20262. Even numbered Basic Syllable outputs BSo, BS2, BS4 and
BS6 of INSTB 20262 are similarly ORed to comprise eight bit Basic Syllable, Even output BSE. At any time, one odd numbered Basic Syllable output and one even numbered Basic Syllable output of INSTB 20262 are selected as inputs to PARSER 20264 by
Instruction Buffer Read Enable (IBORE) enable and selection signals provided to INSTB 20262 by IBSDECR 24114. IBSDECR 24114 includes decoding circuitry. Input to IBSDECR 24114's decoding logic is comprised of three bits (RCPC(26-28)) provided from
CPCMUX 24118. As indicated in FIG. 241, CPC (26-28) may be provided from JPD Bus 10142 bits 25 to 28 or from output of CPCALU 24120. One input CPCALU 24120 is CPC (26-28) from CPC 20270. Operation of CPC 20270 and CPC 20270's associated circuitry will
be described further below. RCPC (26-28) is decoded by IBSDECR 24114 to generate IBORE (0-7) to INSTB 20262. RCPC 26 and RCPC 27 are decoded to select one of the four odd numbered Basic Syllable outputs (that is BS1, BS3, BS5 or BS7) of INSTB 20262 as
the odd numbered basic syllable input to PARSER 20264. RCPC 28 selects either the preceding or the following even numbered Basic Syllable output of INSTB 20262 as the even numbered Basic Syllable input to PARSER 20264. The eight decoded bits of IBORE
(0-7) generated by IBDECR 24114 decoding logic are loaded into IBSDECR 24114 eight bit register and subsequently provided to INSTB 20262 as IBORE (0-7).

PARSER 20264 selects BS0, or BSE, or both BSO and BSE, as PARSER 20264s output to NAME Bus 20224 or to OPCODEREG 20268. In the case of an SOP or an eight bit Name syllable, either BSO or BSE will be selected as PARSER 20264's output. In the
case of a twelve or sixteen bit Name syllable, both BS0 and BSE may be selected as PARSER 20264's output. PARSER 20264 operation is controlled by microinstruction control outputs from FUSITT 11012.

Program counters IPC 20272, EPC 20274, and CPC 20270 are associated with control of fetching and parsing of SINs. In general, IPC 20272, EPC 20274, and CPC 20270 operate under microinstruction control from FUSITT 11012.

CPC 20270 is Current Program Counter and contains 28 bits pointing to the current syllable in INSTB 20272. Bits 29 to 31 of CPC 20270 are not provided, so the bits 29 to 31 of CPC 20270's output are zero, which guarantees byte boundaries for
SOPs. Contents of CPC 20270 are thereby also a pointer which is a byte align offset into a current procedure object. Initial Program Counter (IPC) 20272 is a buffer register connected from output of CPC 20270 and provided for timing overlap. IPC 20272
may be loaded only from CPC 20270 which, as previously described, is 29 bits wide, that does not contain bits 29, 30, and 31 which are forced to zero in IPC 20272. IPC 20272 may be read onto JPD Bus 10142 as a start value in an unconditional branch.

EPC 20274 is a thirty-two bit register usually containing a pointer to the current SOP being executed. Upon occurrence of an SOP branch, the pointer in EPC 20274 will point to the SOP from which the branch was executed. The pointer residing in
EPC 20274 is an offset into a current procedure object. EPC 20274 may be loaded only from IPC 20272, and may be read onto JPD Bus 10142.

Referring again to CPC 20270, as described above CPC 20270 is a current syllable counter. CPC 20270 contains a pointer to the next SOP syllable, or Base Syllable, to be parsed by PARSER 20264. As SOPs are always on byte boundaries, CPC 20270
pointer is 29 bits wide, CPC (0-28). The three low order bits of CPC 20270's pointer, that is CPC (29-31), do not physically exist and are assumed to be always zero. CPC 20270's pointer to next instruction syllable to be parsed thereby always points to
byte boundaries

CPC 20270 bits 26 to 28, CPC (26-28), indicate, as described above, a particular Base Syllable in INSTB 20262. Bits 0-25 (CPC(0-25)) of CPC 20270 indicate 32 bit words, read into INSTB 20262 as IBW0 and IBW1, of a sequence of SINs. CPC 20270
pointer is updated each time a parse operation reading a Base Syllable from INSTB 20262 is executed. As previously described, these parsing operations are performed under microinstruction control from FUSITT 11012.

Conceptually, CPC 20270 is organized as a twenty-six bit counter, containing CPC (0-25), with a three bit register appended on the low order side, as CPC (26-28). This organization is used because CPC (26-28) counts INSTB 20262 Base Syllables
parsed and must be incremented dependant upon current Name Syllable Size K stored CSSR 24112. CPC (0-25), however, counts successive thirty-two bit words of a sequence of SINs and may thereby be implemented as a binary counter. As shown in FIG. 241,
CPC (26-28) is loaded from output of CPCMUX 24118. A first input of CPCMUX 24118 is connected from bits 29 to 31 of JPD Bus 10142. This input to CPC (26-28) from JPD Bus 10142 is provided to allow CPC 20270 to be loaded from JPD Bus 10142, for example
when loading CPC 20270 with an initial ponter value. Second input of CPCMUX 24118 is from output of CPCALU 24120 and is the path by which CPC (26-28) is incremented as successive Base Syllables are parsed from INSTB 20262. A first input of CPCALU 24120
is CPC (26-28) from CPC 20270. Second input of CPALU 24120 is a dual input from CSSR 24112. First input from CSSR 24112 is logic 1 in the least significant bit position, that is in position corresponding to CPC (28). This input is used when single
Base Syllables are parsed from INSTB 20262, for example in an eight bit SOP or an eight bit Name syllable CSSR 24112's first input to CPCALU 24120 increments CPC (0- 32) by eight, that is one to CPC (26-28), each time a single Base Syllable is parsed
from INSTB 20262. Second input to CPCALU 24120 from CSSR 24112 is K, that is current Name Syllable size. As previously described, K may be eight, twelve, or sixteen. CPC (26-28) is thereby incremented by one when K equals eight and is incremented by
two when K equals twelve or sixteen. As shown in FIG. 241, K is loaded into CSSR 24112 from JPD Bus 10142.

CPC (0-25), as described above, operates as a twenty-six bit counter which is incremented each time CPC (26-28) overflows. CPC (0-25) is incremented by carry output of CPCALU 24120. In actual implementation, CPC 20270 is organized to reduce the
number of integrated circuits required. CPC (1-25) is constructed as a counter and inputs of CPC (1-25) counter are connected from bits 1 to 24 of JPD Bus 10142 to allow loading of an initial value of CPC 20270 pointer. CPC (0) and CPC (26-28) are
implemented as a four bit register. Operation of CPC (26-28) portions of this register have been described above. Input of CPC (0) portion of this register is connected from output of CPCOS 24116. CPCOS 24116 is a multiplexer having a first input
connected from bit 0 of JPD Bus 10142. This input from JPD Bus 10142 is used, for example, when loading CPC 20272 with an initial pointer value. Second input of CPCOS 24116 is overflow output of CPC (1-25) counter and allows CPC (0) portion of the four
bit register and CPC (1-25) counter to operate as a twenty-six bit counter.

Finally, as shown in FIG. 241, output of CPC 20270 may be loaded into IPC 20272. An initial CPC 20270 pointer value may therefore be written into CPC 20270 from JPD Bus 10142 and subsequently copied into IPC 20272.

Referring again to PARSER 20264, as described above PARSER 20264 reads, or parses, basic syllables from INSTB 20262 to NAME Bus 20224. Input of PARSER 20264 is a sixteen bit word comprised of an eight bit odd numbered Base Syllable, BS0, and an
eight bit even numbered Base Syllable, BSE. Depending upon whether PARSER 20264 is parsing an eight bit SOP, an eight bit Name syllable, a twelve bit Name syllable, or sixteen bit Name syllable, PARSER 20264 may select BSO, BSE, or both BSO and BSE, as
output onto NAME Bus 20224.

If PARSER 20264 is parsing Name syllables and K is not equal to eight, that is equal to twelve or sixteen, PARSER 20264 transfers both BSO and BSE onto NAME Bus 20224 and determines which of BSO or BSE is most significant. The decision as to
whether BSO or BSE is most significant is determined by CPC (28). If CPC (28) indicates BS0 is most significant, BSO is transferred onto NAME Bus 20224 bits 0 to 7 (NAME(0-7)) and BSE onto NAME Bus 20224 bits eight to fifteen (NAME(8-15)). If CPC (28)
indicates BSE is most significant, BSE is transferred onto NAME (0-7) and BSO onto NAME (8-15). This operation insures that Name syllables are parsed onto NAME Bus 20224 in the order in which occur in the SIN stream.

If PARSER 20264 is parsing Name syllables of Syllable Size K=8, PARSER 20264 will select either BSO or BSE, as indicated by CPC (28), as output to NAME (0-7). PARSER 20264 will place 0's on NAME (8-15).

If PARSER 20264 is parsing SOPs of eight bits, PARSER 20264 will select BSO or BSE as output to NAME (0-7) as selected by CPC (28). PARSER 20264 will place 0's onto NAME (8-15). Concurrently, PARSER 20264 will generate OPREGE to OPCODEREG 20268
to enable transfer of NAME (0-7) into OPCODEREG 20268. OPCODEREG 20268 is not loaded when PARSER 20264 is parsing Name syllables. The microinstruction input from FUSITT 11012 which controls PARSER 20264 operation also determines whether PARSER 20264 is
parsing an SOP or a Name syllable and controls generation of OPREGE.

Operation of NC 10226, which receives Name syllables as address inputs from NAME Bus 20224, has been discussed previously with reference to MEMINT 20212. Name Trap (NT) 20254 is connected from NAME Bus 20224 to receive and capture Name syllables
parsed onto NAME Bus 20224 by PARSER 20264. Operation of NT 20254 has been also previously discussed with reference to MEMINT.

As previously described, CS 10110 is a multiple language machine. Each program written in a high level user language is compiled into a corresponding S-Language program containing S-Language Instructions referred to as SOPs. CS 10110 provides a
set or dialect, of microcode instructions, referred to as S-Interpreters (SINTs) for each S-Language. SINTs interpret SOPs to provide corresponding sequences of microinstructions for detailed control of CS 10110 operations. CS 10110's SINTs for FU
10120 and EU 10122 operations are stored, respectively, in FUSITT 11012 and in a corresponding control store memory in EU 10122, described in a following description of EU 10122. Each SINT comprises one or more sequences of microinstructions, each
sequence of microinstructions corresponding to a particular SOP in a particular S-Language dialect. Fetch Unit S-Interpreter Dispatch Table (FUSDT) 11010 and Execute Unit S-Interpreter Dispatch Table (EUSDT) 20266 contain an S-Interpreter Dispatcher
(SD) for each S-Language dialect. Each SD is comprised of a set of SD Pointers (SDPs) wherein each SDP in a particular SD corresponds to a particular SOP of that SD dialect. Each SDP is an address pointing to a location, in FUSITT 11012 or EUSITT, of
the start of the corresponding sequence of microinstructions for interpreting the SOP corresponding to that SDP. As will be described further below, SOPs received and stored in OPCODEREG 20268 are used to generate addresses into FUSDT 11010 and EUSDT
20266 to select corresponding SDPs. Those SDPs are then provided to FUSITT 11012 through ADR 20202, or to EUSITT through EUDIS Bus 20206, to select corresponding sequences of microinstructions from FUSITT 11012 and EUSITT.

As previously described, OPCODEREG 20268 provides addresses, generated from SOPs loaded into OPCODEREG 20268, to FUSDT 11010 and EUSDT 20266 to select SDPs to be provided as address inputs to FUSITT 11012 and EUSITT. LOPCODE 24210 receives and
stores eight bit SOPs parsed from INSTB 20262 as described above. OPCODEREG 20268 also provides addresses to FUSDT 11010 and EUSDT 20266 to load FUSDT 11010 and EUSDT 20266 with SDs for S-Language dialects currently being utilized by CS 10110. LOPCODE
24210 and RDIAL 24212, as described below, provide addresses to FUSDT 11010 and EUSDT 20266 when translating SOPs to SDPs and ADDR 24214 provides addresses when FUSDT 11010 and EUSDT 20266 are being loaded with SDs.

Referring first to LADDR 24214, LADDR 24214 has an eight bit counter. Addresses are provided to FUSDT 11010 and EUSDT 20266 from LADDR 24214 only when FUSDT 11010 and EUSDT 20266 are being loaded with SDs, that is groups of SDPs for S-Language
dialects currently being utilized by CS 10110. During this operation, output of LADDR 24214 is enabled to FUSDT 11010 and EUSDT 20266 by microcode control signals (not shown for clarity of presentation) from FUSITT 11012. Selection between FUDISF
24218, AF 24220, and EUDISF 24222 to receive addresses is similarly provided by microinstruction enable signals (also not shown for clarity of presentation) provided from FUSITT 11012. These FUSDT 11010 and EUSDT 20266 address enable inputs may select,
at any time, any or all of FUDISF 24218, AF 24220, or EUDSF 24222 to receive address inputs SDPs to be loaded into FUDISF 24218, AF 24220, and EUDISF 24222 are provided, respectively, from Bits 10 to 15 (JPD(10-15)), Bits 16 to 31 (JPD(16-31)), and Bits
20 to 31 (JPD(20-31)) of JPD Bus 10142. Address contents of LADDR 24214 are successively incremented by one as successive SDPs are loaded into FUSDT 11010 and EUSDT 20266. Incrementing of LADDR 24214 is, again, controlled by microinstruction control
inputs from FUSITT 11012.

Address inputs to FUSDT 11010 and EUSDT 20266 durng interpretation of SOPs are provided from LOPCODE 24210 and RDIAL 24212. LOPCODE 24210 is a register counter having, as described above, data inputs connected from NAME Bus 20224 to receive SOPs
from PARSER 20264. In a first mode, LOPCODE 24210 may operate as a latch, loaded with one SOP at a time from output of PARSER 20264. In a second mode, LOPCODE 24210 operates as a clock register to receive successive eight bit inputs from low order
eight bits of NAME Bus 20224 (NAME(8-15)). Loading of LOPCODE 24210 is contolled by microinstruction control outputs (not shown for clarity of presentation) from FUSITT 11012.

As will be described further below, eight bit SOPs stored in LOPCODE 24210 are concatenated with the output of RDIAL 24212 to provide addresses to FUSDT 11010 and EUSDT 20266 to select SDPs corresponding to particular SOPs. That portion of these
addresses provided from LOPCODE 24210, that is the eight bit SOPs, selects particular SDPs within a particular SD. Particular SDs are selected by that portion of these addresses which is provided from the contents of RDIAL 24212.

RDIAL 24212 receives and stores four bit Dialect Codes indicating the particular S-Language dialect currently being used by CS 10110 and executing the SOPs of a user's program. These four bit Dialect Codes are provided from JPD Bus 10142, as JPD
(28-31). Loading of RDIAL 24212 with four bit Dialect Codes is controlled by microinstruction control signals provided form FUSITT 11012 (not shown for clarity of presentation).

Four bit Dialect Codes in RDIAL 24212 define partitions in FUDISF 24218, AF 24220 and EUDISF 24222. Each partition contains SDPs for a different S-Language dialect, that is contains a different SD. FUDISF 24218, AF 24220 and EUDISF 24222 may
contain, for example, eight 128 word partitions or four 256 word partitions. A single bit of Dialect Code, for example Bit 3, defines whether FUDISF 24218, AF 24220, and EUDISF 24222 contain our or eight partitions If FUSDT 11010 and EUSDT 20266 contain
four partitions, the two most significant bits of address into FUSDT 11010 and EUSDT 20266 are provided from Dilect Code Bits 1 and 2 and determine which partition is addressed. The lower order eight bits of address are provided from LOPCODE 24210 and
determine which word in a selected partition is addressed. If FUSDT 11010 and EUSDT 20266 contain eight partitions, the three most significant bits of address into FUSDT 11010 and EUSDT 20266 are provided from Bits 0 to 2 of Dialect Code, to select a
particular partition, and the lower seven bits of address are provided from LOPCODE 24210 to select a particular word in the selected partition.

As described above, LOPCODE 24210 eight bit output and RDIAL 24212's four bit output are concatenated together, through FUDISENC 24216, to provide a ten bit address input to FUSDT 11010 and EUSDT 20266. FUDISENC 24216 is an encoding circuit and
will be described further below with reference to FUDISF 24218. As previously described, selection of FUDISF 24218, AF 24220, and EUDISF 24222 to receive address inputs from RDIAL 24212 and LOPCODE 24210 is controlled by microinstruction control enable
inputs provided from FUSITT 11012 (not shown for clarity of presentation).

Referring to FUSDT 11010, both FUDISF 24218 and AF 24220 provide SDPs to FUSITT 11012, but do so for differing purposes. In general, microinstruction control operations may be regarded as falling into two classes. First, there are those
microinstruction operations which are generic, that is general in nature and used by or applying to a broad variety of SOPs of a particular dialect or even of many dialects. An example of this class of microinstruction operation is fetches of operand
values. FUDISF 24218 provides SDPs for this class of microinstruction operations. As described below, FUDISF 24218 is a fast access memory allowing a single microinstruction control output of FUSITT 11012 to parse an SOP from INSTB 20262 into LOPCODE
24210, and a corresponding SDP to be provided from FUDISF 24218. That is, an SOP of this generic class may be parsed from INSTB 20262 and a corresponding SDP provided from FUDISF 24218 during a single system clock cycle. Operation of FUDISF 24218
thereby enhances speed of operation of JP 10114, in particular at the beginning of execution of new SOPs.

The second class of microinstruction operations are those specific to particular SINTs or to particular groups of SINTs. These groups of SINTs may reside entirely within a particular dialect, for example FORTRAN, or may exist within one or more
dialects. SDPs for this class of microinstruction operation are provided by AF 24220. As described further below, AF 24220 is slower than FUDISF 24218, but is larger. In general, AF 24220 contains SDPs of microinstruction sequences specific to
particular SINTs. In general, generic microinstruction operations are performed before those operations specific to particular SINTs, so that SDPs are required from AF 24220 at a later time than those from FUDISF 24218. SDPs for specific SINT
operations may therefore be provided from lower speed AF 24220 without a penalty in speed of execution of SOPs.

Referring again to FUDISF 24218, FUDISF 24218 is a 1,024 word by 6 bit fast access by polar memory. Each word contained therein, as described above, is an SDP, or address to start of a corresponding sequence of microinstructions in FUSITT 11012. As will be described further below, FUSITT is an 8K (8192) word memory. SDPs provided by FUDISF 24218 are each, as described above, 6 bits wide and may thus address a limited, 32 word area of FUSITT 11012's address space. FUDISF 24218 is enabled to
provide SDPs to FUSITT 11012 by microinstruction control signals (not shown for clarity of presentation) from FUSITT 11012. FUDISF 24218 six bit SDPs are encoded by FUDISENC 24219 to address FUSITT 11012 address space in increments of 4
microinstructions, that is in increments of 4 address locations. FUDISF 24218 SDPs thereby address 4 microinstructions at a time from FUSITT 11012's microinstruction sequences. As will be described further below, mPC 20276 generates successive
microinstruction addresses to FUSITT 11012 to select successive microinstructions of a sequence following an initial microinstruction selected by an SDP from FUSDT 11010. An FUDISF 24218 SDP will thereby select the first microinstruction of a 4
microinstruction block, and mPC 20276 will select the following 3 microinstructions of that 4 microinstruction sequence. A 4 microinstruction sequence may therefore be executed in line, or sequentially, for each FUDISF 24218 SDP provided in response to
a generic SOP. FUDISENC 24219 encodes FUDISF 24218 six bit SDPs to select these 4 microinstruction sequences so that the least significant bit of these SDPs occupies the 24 bit of FUSITT 11012 address inputs, and so on. The two least significant bits
of an FUSITT 11012 address, or SDP, provided from FUDISF 24218 are forced to 0 while the ninth and higher bits may be hard-wired to define any particular block of 128 addresses in FUSITT 11012. This hard-wiring of the most significant bits of FUSITT
11012 addresses from FUDISF 24218 allows a set of generic microinstruction sequences selected by FUDISF 24218 to be located as desired within FUSITT 11012's address space. FUDISENC 24219 is comprised of a set of driver gates.

As previously described, SDPs for generic microinstructions currently being utilized by CS 10110 in executing user's programs are written into FUDISF 24218 from Bits 10 to 15 of JPD Bus 10142 (JPD(10-15)). Addresses for loading SDPs into FUDISF
24218 are provided, as previously described, from LADDR 24214. LADDR 24214 is enabled to provide load addresses, and FUDISF 24218 is enabled to be written into, by microinstruction control signals (not shown for clarity of presentation) provided from
FUSITT 11012.

Referring to AF 24220, as previously described AF 24220 is of larger capacity than FUDISF 24218, but has slower access time. AF 24220 is a 1,024 word by 15 bit memory. In general, 2 clock cycles are required to obtain a DSP from AF 24220.
During first clock cycle, an SOP is loaded into LOPCODE 24210 and, during second clock cycle, AF 24220 is addressed to provide a corresponding SDP. SDPs provided by AF 24220 are each 15 bits in width and thus capable of addressing a larger address space
than that of FUSITT 11012. As previously described, FUSITT 11012 is an 8K word memory. If FUSITT 11012 is addressed by an AF 24220 SDP referring to an address location outside of FUSITT 11012's address space, FUSITT 11012 will generate a
microinstruction Not In Control Store output to EVENT 20284 as described further below. An AF 24220 SDP resulting in this event will then be used to address certain microinstruction sequences stored in MEM 10112. These microinstructions will then be
executed from MEM 10112, rather than from FUSDT 11010. This operation allows certain microinstruction sequences, for example rarely used microinstruction sequences, to remain in MEM 10112, thus freeing AF 24220 and FUSITT 11012's address spaces from
more frequently used SOPs.

As previously described AF 24220 is loaded, with SDPs, for SINTs currently being used by CS 10110 in executing user's programs, from Bits 16-31 of JPD Bus 10142 (JPD(16-31)). Also as previously discussed, addresses to load SDPs into AF 24220 are
provided from LADDR 24214. LADDR 24214 is enabled to provide load addresses and AF 24220 to receive SDPs, by microinstruction control signals (not shown for clarity of presentation) provided from FUSITT 11012.

Referring finally to EUSDT 20266, SDPs may be provided to EU 10122 from 3 sources. EU 10122 SDPs may be provided from EUDISF 24222, from JPD Bus 10142 or from literal fields of microinstructions provided from FUSITT 11012. EUDISF 24222's SDPs
are each 12 bits in width and comprise 9 bits of address into EUSITT and 3 bits of operand format information.

EUDISF 24222 is 1,024 word by 12 bit memory. As previously described addresses to read SDPs from EUDISF 24222 are provided from OPCODEREG 20268 by concatenating a 4 bit Dialect Code from RDIAL 24212 and an 8 bit SOP from LOPCODE 24210. SDPs
provided by EUDISF 24222 are provided as a first input to EUDISS 24224.

EUDISS 24224 is a multiplexer. As just described, a first input of EUDISS 24224 are SDPs from EUDISF 24222. A second 12 bit input of EUDISS 24224 is provided from Bits 20 to 31 of JPD Bus 10142 (JPD(20-31)). A third input of EUDISS 24224 is a
12 bit input provided from a literal field of an FUSITT 11012 microinstruction output. EUDISS 20224 selects one of these 3 inputs to be transferred on EUDIS Bus 20206 to be provided as an execute unit SDP to EUSITT. Selection between EUDISS 20224's
inputs is provided by microinstruction control signals (not shown for clarity of presentation) provided from FUSITT 11012.

As previously described, EUDISF 24222 is loaded, with SDPs for S-Language dialects currently being used by CS 10110, from Bits 20 to 31 of JPD Bus 10142 (JPD(20-31)). Addresses to load SDPs into EUDISF 24222 are provided, as previously
described, from LADDR 20214. FUSITT 11012 provides enable signals (not shown for clarity of presentation) to LADDR 24214 and EUDISF 24222 to enable writing of SDPs into EUDISF 24222.

The structure and operation of FUCTL 20214 circuitry for fetching and parsing SINs from MEM 10112 to provide Name syllables and SOPs, and for interpreting SOP to provide SDPs to FUSITT 11012 and EUSITT from FUSDT 11010 and EUSDT 20266, have been
described above. As described above, SDPs provided by FUSDT 11010 and EUSDT 20266 are initial, or starting, addresses pointing to first microinstructions of sequences of microinstructions. Addresses for microinstructions following those initial
microinstructions are provided by FUCTL 20214's next address generator circuitry which may include mPC 20276, BRCASE 20278, REPCTR 20280 and PNREG 20282, EVENT 20284 and SITTNAG 20286. mPC 20276, BRCASE 20278, REPCTR 20280 and PNREG 20282, and SITTNAG
20286 are primarily concerned with generation of next addresses during execution of microinstruction sequences in response to SOPs and will be described next below. EVENT 20284 and other portions of FUCTL 20214's circuitry are more concerned with
generation of microinstruction sequences with regard to CS 10110's internal mechanisms operations and will be described in a later description. EU 10122 also includes next address generation circuitry and this circuitry will be described in a following
description of EU 10122.

c.c.c. Next Address Generator 24310 (FIG. 243)

As stated above, in FU 10120 first, or initial, microinstructions of microinstruction sequences for interpreting SOPs are provided by FUSDT 11010. Subsequent addresses of microinstructions within these sequences are, in general, provided by mPC
20276 and BRCASE 20278. mPC 20276, as described further below, provides sequential addresses for selecting sequential microinstructions of microinstruction sequences. BRCASE 20278 provides addresses for selecting microinstructions when a
microinstruction Branch or microinstruction Case operation is required. REPCTR 20280 and PNREG 20282 provide addresses for writing, or loading, of microinstruction sequences into FUSITT 11012. Other portions of FUCTL 20214 circuitry, for example EVENT
20284, provides microinstruction sequence selection addresses to select microinstruction sequences for controlling operation of CS 10110's internal mechanisms. SITTNAS 20286 selects between these microinstruction address sources to provide to FUSITT
11012 those addresses required to select microinstructions of the operation to be currently executed by CS 10110.

Referring to FIG. 243, a partial block diagram of FU 10120's Next Address Generator (NAG) 24310 is shown. In addition to FUSDT 11010, NAG 24310 includes mPC 20276, BRCASE 20278, EVENT 20284, REPCTR 20280 and PNREG 20282, a part of RCWS 10358,
and SITTNAS 20286. EVENT 20284 is, as described above, primarily concerned with execution of microinstruction sequences for controlling CS 10110 internal mechanisms. EVENT 20284 as shown herein only to illustrate its relationships to other portions of
NAG 24310. EVENT 20284 will be described further in a following description of FUCTL 20214's circuitry controlling CS 10110's internal mechanisms. Similarly, operation of RCWS 10358 will be described in part in the present description of NAG 24310, and
in part in a following description of control of CS 10110's internal mechanisms.

Referring to mPC 20276, mPC 20276 is comprised of Micro-Program Counter Counter (mPCC) 24340 and Micro-Program Counter Arithmetic and Logic Unit (mPCALU) 24342. Data input of mPCC 24340 is connected from CSADR Bus 20204. Output of mPCC 24340 is
connected to a first input of mPCALU 24342 and is mPC 20276's third output to BRCASE 20278. Second input of mPCALU 24342 is a fifteen binary number set, for example by hard-wiring, to be binary one. Output of mPCALU 24342 comprises mPC 20276's first
output, to RCWS 10358, and mPC 20276's second output, to inputs of NASMUXC 24318 and NASMUXD 24320.

BRCASE 20278 is shown in FIG. 243 as comprising Mask and Shift Multiplexer (MSMUX) 24344, Case Mask and Shift Logic (CASEMS) 24346, Branch and Case Multiplexer (BCMUX) 24348 and Branch and Case Arithmetic and Logic Unit (BCALU) 24350. A first
input of MSMUX 24344 (AONBC, not previously shown) is connected from output of AONGRF 20232. A second input of MSMUX 24344 (OFFMUXR, not previously shown) is connected from output of OFFMUXR 23812. Output of MSMUX 24344 is connected to input CASEMS
24346, and output of CASEMS 24346 is connected to a first input of BCMUX 24348. A second input of BCMUX 24348, BLIT is connected from a literal field output of FUSITT 11012's microinstruction output. Output of BCMUX 24348 and third output of mPC 20276,
from output of mPCC 24340, are connected, respectively, to first and second inputs of BCALU 24350. Output of BCALU 24350 comprises BRCASE 20278 outputs to NASMUXC 24318.

An address to select a next microinstruction may be provided to FUSITT 11012 by SITTNAS 20286 from any of eight sources. First source is output of mPC 20276. Output of mPC 20276 is referred to as Micro-Program Count Plus 1 (mPC+1) and is
fifteen bits of address. Second source is from EVENT 20284 and is comprised of five bits of address. Third source is output of FUDISP 24218 and FUDISENC 24219 and, as previously described, is comprised of six bits of address. Fourth source is output
of AF 24220 and, as previously described, is comprised of fifteen bits of address. Fifth source is output of BRCASE 20278. Output of BRCASE 20278 is referred to as Branch and Case Address (BRCASEADR) and comprises fifteen bits of address. Sixth source
is an output of RCWS 10358. Output of RCWS 10358 is referred to as RCWS Address (RCWSADR) and is comprised of fifteen bits of address. Seventh source is REPCTR 20280 and PNREG 20282 whose outputs (REPPN) together comprise fifteen bits of address.
Finally, eighth source is JAM input from NC 10226, which comprises five bits of address. These address sources differ in number of bits of address that they provide, but a microinstruction address gated onto CSADR Bus 20202 by SITTNAS 20286 always
comprises fifteen bits of address. If a particular source applies fewer than fifteen bits, that address is extended to fifteen bits by SITTNAS 20286. In general, extension of address bits may be performed by hard-wiring of additional address input bits
to SITTNAS 20286 from each of these sources and will be described further below.

Referring to mPC 20276, mPCC 24340 is a fifteen bit register and mPCALU 24342 is a fifteen bit ALU. mPCC 24340 is, as described above, connected from CSADR Bus 20204 and is sequentially loaded with a microinstruction address currently being
presented to FUSITT 11012. mPCC 24340 will thus contain the address of the currently executing microinstruction. mPCALU 24342 is dedicated to incrementing the address contained in mPCC 24340 by one. mPC+1 output of mPCALU 24342 will thereby always be
address of next sequential microinstruction. mPC+1 is, as described above, a fifteen bit address and is thus not extended in SITTNAS 20286.

Referring to BRCASE 20278, as described above BRCASE 20278 provides next microinstruction addresses for mPC 20276 Relative Branches and for Case Branches. Next microinstruction addresses for microprogram Relative Branches and for Case Branches
are both generated as addresses relative to address of currently executing microinstruction as stored in mPCC 24340, but differ in the manner in which these relative addresses are generated. Considering first Case Branches, Case Branch addresses
relative to a currently executing microinstruction address are generated, in part, by MSMUX 24344 and CASEMS 24346. As described above, MSMUX 24344 which is a multiplexer receives two inputs. First input is AONBC from output of AONGRF 20232 and second
input is OFFMUXR from output of OFFMUXR 23812. Each of these inputs is eight bits, or one byte, in width. Acting under control of microinstruction output from FUSITT 11012, MSMUX 24344 selects either input AONBC or input OFFMUXR as an eight bit output
to input of CASEMS 24346. CASEMS 24346 is a Mask and Shift circuit, similar in structure and operation to that of FIU 20116 but operating upon bytes rather than thirty-two bit words. CASEMS 24346, operating under microinstruction control from FUSITT
11012, manipulates eight bit input from MSMUX 24344 by masking and shifting to provide eight bit Case Value (CASEVAL) output to BCMUX 24348. CASEVAL represents a microinstruction address displacement relative to address of a currently executing
microinstruction and, being an eight bit number, may express a displacement of 0 to 255 address locations in FUSITT 11012.

BCMUX 24348 is an eight bit multiplexer, similar in structure and operation to MSMUX 24344, and is controlled by microinstruction inputs provided from FUSITT 11012. In executing a case operation, BCMUX 24348 selects CASEVAL input to MCMUX
24348's output to first input of BCALU 24350. BCALU 24350 is a sixteen bit arithmetic and logic unit. Second input of BCALU 24350 is fifteen bit address of currently executing microinstruction from mPCC 24340. BCALU 24350 operates under
microinstruction control provided from FUSITT 11012 and, in executing a Case operation, adds CASEVAL to the address of a currently executing microinstruction. During a Case operation, carry input of BSALU 24350 is forced, by microinstruction control
from FUSITT 11012, to one so that BCALU 24350's second input is effectively mPC+1, or address of currently executing microinstruction plus 1. Output BRCASEADR of BCALU 24350 will thereby be fifteen bit Case address which is between one and 256 FUSITT
11012 address locations higher than the address location of the currently executing microinstruction. The actual case value address displacement from the address of the currently executing microinstruction is determined by either input AONBC or input
OFFMUXR to MSMUX 24344, and these mask and shift operations are performed by CASEMS 24346.

Case operations as described above may be used, for example, in interpreting and manipulating CS 10110 table entries. For example, Name Table Entries of Name Tables 10350 contain flag fields carrying information regarding certain operations to
be peformed in resolving and evaluating those Name Table Entries. These operations may be implemented as Case Branches in microinstruction sequences for resolving and evaluating those Name Table Entries. In the present example, during resolve of a Name
Table Entry the microinstruction sequence for performing that resolve may direct a byte of that Name Table Entry's flag field to be read from AONGRF 20232, or OFFMUXR 23812, and through MSMUX 24344 to CASEMS 24346. That microinstruction sequence will
then direct CASEMS 24346 to shift and mask that flag field byte to provide a CASEVAL. That CASEVAL will have a value dependent upon the flags within that flag field byte and, when added to mPC+1, will provide a FUSITT 11012 microinstruction address for
a microinstruction sequence for handling that Name Table Entry in accordance with those flag bits.

As described above, BRCASE 20278 may also generate microinstruction addresses for Branches occurring within execution of a given microinstruction sequence. In this case, microinstruction control signals from FUSITT 11012 direct BCMUX 24348
second input as output to BCALU 24350. BCMUX 24348's second input is Branch Literal (BLIT). As described above, BLIT is provided from a literal field of a microinstruction word from FUSITT 11012's microinstruction output. BLIT output of BCMUX 24348 is
added to address of currently executing microinstruction from mPCC 24340, and BCALU 24350, to provide fifteen bit BRCASEADR of a microinstruction address branched to from the address of the currently executing microinstruction. BRCASEADR may represent,
for example, any of four Branch Operations. Possible Branch Operations are: first, a Conditional Short Branch; second, a Conditional Short Call; third, a Long Go To; and, fourth, a Long Call. In each of these possible Branch Operations, BLIT is treated
as the twos complement of the desired branch value, that is the microinstruction address offset relative to the address of the currently executing microinstruction BLIT field may therefore be, effectively, added to or subtracted from the address of the
currently executing microinstruction, to provide a microinstruction address having a positive or negative displacement from the address of the currently executing microinstruction. In a Conditional Short Branch or a Conditional Short Call, the fourteen
bit literal field is a sign extended eight bit number. Both Conditional Short Branch and Conditional Short Call microinstruction addresses may therefore point to an address within a range of +127 to -128 FUSITT 11012 address locations of the address of
the currently executing microinstruction. In the case of a Long Go To or Long Call, the BLIT field is a fourteen bit number representing displacement relative to the address of the currently executing microinstruction. BRCASEADR may, in these cases,
represent a FUSITT 11012 microinstruction address within a range of +8191 to -8192 FUSITT 11012 address locations of the address of the currently executing microinstruction. BRCASE 20278 thereby provides FU 10120 with capability of executing a full
range of microinstruction sequence Case and Branch operations.

Referring to RCWS 10358, as previously described RCWS 10358 stores information regarding microinstruction sequences whose execution has been halted. RCWS 10358 allows execution of those microinstruction sequences to be resumed at a later time.
A return control word (RCW) may be written onto RCWS 10358 during any microinstruction sequence that issues a Call to another microinstruction sequence. The calling microinstruction sequence may, for example, be aborted to service an event, as described
further in a following description, or may result in a Jam. A Jam is a call for a microinstruction sequence which is forced by operation of CS 10110 hardware, rather than by a microinstruction sequence. RCWS 10358 operation with regard to CS 10110's
internal mechanisms will be described in a following description of EVENT 20284, STATE 20294, and MCW1 20290 and MCW0 20292. For puposes of the present discussion, that portion of a RCW concerned with interpretation of SOPs contains, first, certain
state information FUSITT 11012 and, second, a return address into FUSITT 11012. State that FUSITT 11012 state is provided from STATE 20294, as described below, and that portion of a RCW containing FUSITT 11012 state information will be described in a
following description. Microinstruction address portions of RCWs are provided from output of mPCALU 24342. This microinstruction address is the address of the microinstruction to which FU 10120 is to return upon return from a Call, Event, or Jam. Upon
occurrence of a Call or Jam, the microinstruction return address is mPC+1, that is the address of the microinstruction after the microinstruction issuing the Call or Return. For aborted microinstruction sequences, the microinstruction return address is
mPC, that is the address of the microinstruction executing at the time abort occurs.

Upon return from a call, service of an event, or service of a jam, FU 10120 state flag portion of RCW is loaded into STATE 20294. Microinstruction return address is provided by RCWS 10358 as fifteen bit RCWSADR to SITTNAS 20286 and is gated onto
CSADR 20204. RCWSADR is provided to FUSITT 11012 to select the next microinstruction and is loaded into mPCC 24340 from CSADR 20204.

As previously described, RCWS 10358 is connected to JPD Bus 10142 by a bi-directional bus. RCWs may be written into RCWS 10358 from JPD Bus 10142, or read from RCWS 10358 to JPD Bus 10142. The fifteen bit next microinstruction address portion,
and the single bit FUSITT 11012 state portion of RCW is written from or read to Bits 16 to 31 of JPD Bus 10142. FU 10120 may write Present Bottom RCW or Previous RCW into RCWS 10358 from JPD Bus 10142 and may read Present Bottom RCW, or Previous RCW, or
another selected RCW, onto JPD Bus 10142. RCWS 10358 thereby provides a means for storing and returning microinstruction addresses of microinstruction sequences whose execution has been suspended, and a means for writing and reading microinstruction
address, and FUSITT 11012 state flags, from and to JPD Bus 10142.

As previously described, REPCTR 20280 and PNREG 20282 provide microinstruction addresses for writing of microinstructions into FUSITT 11012. REPCTR 20280 is an eight bit counter and PNREG 20282 is a seven bit register. Eight bit output of
REPCTR 20280 is left concatenated with seven bit output of PNREG 20282 to provide fifteen bit microinstruction addresses REPPN. That is, REPCTR 20280 provides the eight low order bits of microinstruction address while PNREG 20282 provides the seven most
significant bits of address.

REPCTR may be loaded from Bits 24-31 of JPD Bus 10142, and may be read to Bits 24-31 of JPD Bus 10142. In addition, the eight bits of microinstruction address in REPCTR 20280 may be incremented or decremented as microinstructions are written
into FUSITT 11012.

As described above, PNREG 20282 contains the seven most significant bits of microinstruction address. These address bits may be written into PNREG 20282 from Bits 17-23 of JPD Bus 10142. Contents of PNREG 20282 may not, in general, be read to
JPD Bus 10142 and may not be incremented or decremented.

Referring to JAM input to SITTNAS 20286 from NC 10226, certain Name evaluate or resolve operations may result in jams. A Jam functions as a call to microinstruction sequences for servicing Jams and are forced by FU 10120 hardware circuitry
involved in Name syllable evaluates and resolves.

JAM input to SITTNAS 20286 is comprised of six Jam address bits. Three bits are provided by NC 10226 and three bits are provided from FUSITT 11012's microinstruction output as part of microinstruction sequences for correcting Name syllable
evaluates and resolves. The three bits of address from NC 10226 form the most significant three bits of JAM address. One of these bits gates JAM address onto CSADR Bus 20204 and is thus not a true address bit. Output of FUSITT 11012 provides the three
least significant bits of JAM address and specifies the particular microinstruction sequence required to service the particular Jam which has occurred. Therefore, during Name evaluate or resolves, the microinstruction sequences provided by FUSITT 11012
to perform Name evaluates or resolves specifies what microinstruction sequences are to be initiated if a Jam occurs. The three bits of JAM address provided by NC 10226 determine, first, that a Jam has occurred and, second, provide two bits of address
which, in combination with the three bits of address from FUSITT 11012, specify the particular microinstruction sequence for handling that Jam. JAM address inputs from NC 10226 and from FUSITT 11012 thereby provide six of the fifteen bits of JAM
address. The remaining nine bits of JAM address are provided, for example, by hard-wired inputs to NASMUXD 24320. These hard-wired address bits force JAM address to address FUSITT 11012 in blocks of 4 microinstruction addresses, in a manner similar to
address inputs to FUDISF 24218 and FUDISENC 24219.

Address inputs provided to SITTNAS 20286 from FUSDT 11010 have been previously described with respect to description of FUCTL 20214 fetch, parse, and dispatch operations. Address inputs provided by EVENT 20284 will be described in a following
description of FUCTL 20214's operations with regard to CS 10110's internal mechanisms.

Referring finally to SITTNAS 20286, as previously described SITTNAS 20286 is comprised of EVNTGT 24310 and NASMUX 24312. Inputs are provided to NASMUX 24312, as described above, from FUSDT 11010, mPC 20276, BRCASE 20278, RCWS 10358, REPCTR 20280
and PNREG 20282, and by JAM input. These inputs are, in general, provided with regard to FUCTL 20214's operations in fetching, parsing, and interpreting SOPs and Name syllables. These operations are thereby primarily directly concerned with execution
of user's programs, that is the execution of sequences of SINs. NASMUX 24312 selects between these inputs and transfers selected address inputs onto CSADR 20204 as microinstruction addresses to FUSITT 11012 under microinstruction control from
microinstruction outputs of FUSITT 11012. Microinstruction address outputs are provided to SITTNAS 20286 from EVENT 20284 in response to Events, described further below, occuring in CS 10110's operations in executing user's programs. These
microinstruction addresses from EVENT 20284 are gated onto CSADR 20204, to select appropriate microinstruction sequences, by EVNTGT 24310. EVNTGT 24310 is separated from NASMUX 24312 to allow EVNTGT 24310 to over-ride NASMUX 24312 and provide
microinstruction address to EVENT 20284 while NASMUX 24312 is inhibited due to occurrence of certain Events. These Events are, in general, associated with operation of CS 10110's internal mechanisms and structure and operation of EVENT 20284, together
with STATE 20294, MCW1 20290, and MCW0 20292, and other portions of RCWS 10358, will be described next below.

Certain portions of FUCTL 20214's Control Circuitry are more directly concerned with operation of CS 10110's internal mechanisms, for example CS 10110 Stack Mechanisms. This circuitry may include STATE 20294, EVENT 20284, MCW1 20290 and MCW0
20292, portions of RCWS 10358, REG 20288, and Timers 20296. These FUCTL 20214 control elements will be described next below, beginning with STATE 20294.

a.a.a. State Logic 20294 (FIGS. 244A-244Z)

In general, all CS 10110 operations, including execution of microinstructions, are controlled by CS 10110's Operating State. CS 10110 has a number of Operating States, hereafter referred to as States, each State being defined by certain
operations which may be performed in that State. Each of these States will be described further below. Current State of CS 10110 is indicated by a set of State Flags stored in a set of registers in STATE 20294. Each State is entered from previous
State and is exited to a following State. Next State of CS 10110 is detected by random logic gating distributed throughout CS 10110 to detect certain conditions indicating which State CS 10110 will enter next. Outputs of these Next State Detection
gates are provided as inputs to STATE 20294's registers. A particular State register is set and provides a State Flag output when CS 10110 enters the State associated with that particular register. State Flag outputs of STATE 20294's state registers
are provided as enable signals throughout CS 10110 to enable initiaton of operations allowed within CS 10110's current State, and to inhibit initiation of operations which are not allowed within CS 10110's current State.

Certain of CS 10110's States, and associated STATE 20294 State Registers and State Flag outputs, are:

(1) MO: the initial State of any microinstruction. State MO is always entered as first data cycle of every microinstruction. During MO, CS 10110's State may not be changed, thus allowing a microinstruction to be arbitrarily aborted and
restarted from State MO. In normal execution of microinstructions, State MO is followed by State M1, described below, that is, State MO is exited to State M1. State M0 may be entered from State M0 and from State M1, State AB, State LR, State NR, or
State MS, each of which will be described below.

(2) EP: Enable Pause State. State EP is entered when State MO is entered for the first time in a microinstruction. If that microinstruction requests a pause, that microinstruction will force State MO to be re-entered for one clock cycle. If
State M0 lasts more than one clock cycle, State EP is entered on each extension of State M0 unless the extension is a result of a pause request.

(3) SR: Source GRF State. SR State is active for one clock cycle wherein SR State register enables loading of a GRF 10354 output register. State SR is re-entered on every State M0 cycle except a State M0 cycle generated by a microinstruction
requesting extension of State M0. When all STATE 20294 State Registers are cleared, DP 20218 may set state SR register alone, for purposes of reading from GRF 10354.

(4) M1: Final state of normal microinstruction execution. State M1 is the exit State of normal microinstruction execution. FUSITT 11012 microinstruction register, described below, is loaded with a next microinstruction upon exit from State M1.
In addition, State M1 Flag output of STATE 20294 enables all CS 10110 registers to receive data on their inputs, that is data on inputs of these registers are clocked to outputs of these registers. State M1 may be entered from State M1, or from State
M0, State MW, State MWA, or State WB.

(5) LA: Load Accumulator Enable State. State LA is entered, upon exit from State M1, by microinstructions which read data from MEM 10112 to OFFMUXR 23812. As previously described, OFFMUXR 23812 serves as a general purpose accumulator for DESP
20210. STATE LA overlaps into execution of next microinstruction, and persists until data is returned from MEM 10112 in response to a request to MEM 10112. When MEM 10112 signals data is available, by asserting DAVFA, LA State Flag enables loading of
data into OFFMUXR 23812. If the next microinstruction references OFFMUXR 23812, that microinstruction execution is deferred until a read to OFFMUXR 23812 is completed, as indicated by CS 10110 exiting from State LA.

(6) RW: Load GRF 10354 Wait State. State RW is entered from State M1 of microinstructions which read data from MEM 10112 to GRF 10354. RW Fag inhibits initiation of a next microinstruction, that is prevents entry to State M0, and persists
through the CS 10110 clock cycle during which data is returned from MEM 10112 in response to a request. State RW initiates Load GRF Enable State, described below.

(7) LR: Load GRF Enable State. State LR is entered in parallel with State RW, on last clock cycle of RW, and persists for one CS 10110 clock cycle. LR Flag enables writing of MEM 10112 output data into GRF 10354.

(8) MR: Memory Reference Trailer State. State MR is entered on transition to State MO whenever a previous microinstruction makes a logical or physical address reference to MEM 10112. MR Flag enables recognition of any MEM 10112 reference
Events, described below, which may occur. State MR persists for one clock cycle. If an MEM 10112 memory reference Event occurs, that Event forces exit from State MR to States AB and MA, otherwise State MR has no effect upon selection next state.

(9) SB: Store Back Enable State. State SB is entered during State M0 of a microinstruction following a microinstruction which generated a store back of a result of a EU 10122 operation. SB Flag gates that result to be written into MEM 10112
through JPD Bus 10142.

(10) AB: Microinstruction Abort State. State AB is entered from first MO State after an Event request is recognized, as described in a following description. State AB may be entered from State MO or from State AB and suppresses an entry into
State M1. If there has been an uncompleted reference to MEM 10112, that is, the reference has not been aborted and data has not returned from MEM 10112, JP 10114 remains in State AB until the MEM 10112 reference is completed. Should an abort have
occurred due to a MEM 10112 reference Event, State AB lasts two clock cycles only. As will be described in a following description of EVENT 20284, State MO of a first microinstruction of a Handler for an Event causing an abort is entered from State AB.
AB Flag gates the Handler address of the highest priority recognized Event onto CSADR Bus 20204 to select a corresponding Event Handler microinstruction sequence. EVENT 20284 is granted control of CSADR Bus 20204 during all State AB clock cycles.

(11) AR: Microinstruction Abort Reset State. State AR is entered in parallel with first clock cycle of State AB and persists for one clock cycle. AR Flag resets various STATE 20294 State Registers when an abort occurs. If there are no
uncompleted MEM 10112 references, next State AB clock cycle is the last. On uncompleted MEM 10112 references, State AR is entered, but State AB remains active until reference is complete. Should a higher priority Event request service and be recognized
while JP 10114 is in State AB, State AR is re-entered. State AB will thereby be active for two clock cycles during all honored Event requests.

(12) MA: MEM 10112 Reference Abort. State MA is entered in parallel with State AB if a MEM 10112 reference is aborted, as indicated by asserted ABORT control signal output from MEM 10112. State MA persists for one clock cycle and State AB flag
generates a MEM 10112 Reference Abort Flag which, as described below, results in a repeat of the MEM 10112 reference. AB Flag also resets MEM 10112 Trailer States, described below.

(13) NW: Nano-interrupt Wait State. State NW is entered from State M0 of a microinstruction which issues a Nano-interrupt Request to EU 10122 for an EU 10122 operation. FU 10120 remains in State NW until EU 10122 acknowledges that interrupt.
Various EU 10122 Events may make requests at this time. State NW is exited into State AB or State M1.

(14) FM: First Microinstruction of a SIN. State FM is entered in parallel with State M0 on first microinstruction of each SIN and persists for one clock cycle. FM Flag inhibits premature use of AF 24220 and enables recognition of SIN Entry
Events. State FM is re-entered upon return from all aborts taken during State M0 of the first microinstruction of an SIN.

(15) SOP: Original Entry to First SIN. State SOP is entered upon entry to State M0 of the first microinstruction of an SOP and is exited from upon any exit from that microinstruction. State SOP is entered only once for each SOP. SOP Flag may
be used, for example, for monitoring performance of JP 10114.

(16) EU: EU 10122 Operand Buffer Unavailable. State EU is entered from State M0 of a microinstruction which attempts to read data to EU 10122 Operand Buffer, described in a following description, wherein EU 10122 Operand Buffer is full. When a
new SOP is entered, three fetches of data from MEM 10112 may be performed before EU 10122 Operand Buffer is full; two fetches will fill EU 10122 Operand Buffer but EU 10122 may take one operand during a second fetch, thereby clearing EU 10122 Operand
Buffer space for a third operand.

(17) NR: Long Pipeline Read. Entry into State NR disables overlap of MEM 10112 reads and disables execution of the next microinstruction. A following microinstruction does not enter State M0 until requested data is returned from MEM 10112.
State NR is entered from State NR or from State M1.

(18) NS: Nonpipeline Store Back. State NS is entered in parallel with State SB whenever a microinstruction requesting a pipeline store back, or a write to MEM 10112, occurs. State NS flag generates entry into State M0 of a following
microinstruction upon exit from State SB.

(19) WA: Load Control Store State A. State WA is entered from State M0 of a microinstruction which directs loading of microinstruction into FUSITT 11012. WA State Flag controls selection of addresses to CSADR Bus 20204 for writing into FUSITT
11012, and generates a write enable pulse to FUSITT 11012 to write microinstructions into FUSITT 11012.

(20) WB: Load Control Store State B. State WB is entered from State WA and is used to generate an appropriate timing interval for writing into FUSITT 11012. State WB also extends State M1 to 2 clock cycles to ensure a valid address input to
FUSITT 11012 when a next microinstruction is to be read from FUSITT 11012.

Having described certain CS 10110 states, and operations which may be performed within those states, state sequences for certain CS 10110 operations will be described next below with aid of FIGS. 244A to 244Z. FIG. 244A to FIG. 244Z represent
those state timing sequences necessary to indicate major features of CS 10110 state timing. All state timing shown in FIGS. 244A to 244V assumes full pipelining of CS 10110 operations, for example pipelining of reads from and writes to MEM 10112 by JP
10114. Pipelining is not assumed in Figs. 244W to 244Z. Referring to FIGS. 244A to 244Z, these figures are drawn in the form of timing diagrams, with time increasing from left to right. Successive horizontally positioned "boxes" represents successive
CS 10110 states during successive CS 10110 110 nano-second clock cycles. Vertically aligned "boxes" represent alternate CS 10110 states which may occur during a particular clock cycle. Horizontally extended dotted lines connecting certain states
represented in FIG. 244A to 244Z represent an indeterminate time interval which is an integral multiple of 110 nano-second CS 10110 clock cycles.

(1) FIG. 244A; state timing for execution of a normal microinstruction with no Events occurring and no MEM 10112 references.

(2) FIG. 244B; execution of a normal microinstruction, with no Events occurring, no MEM 10112 references, and a hold in State M0 for one clock cycle.

(3) FIG. 244C; a microinstruction requests an extension of State M0 for one clock cycle, with no Events occurring and no MEM 10112 references.

(4) FIG. 244D; a write to MEM 10112 from DESP 20210, for example from GRF 10354 or from OFFALU 20242. MEM 10112 port is available and MEM 10112 reference is made during first sequential occurrence of States M0 and M1.

(5) FIG. 244E; a write to MEM 10112 from DESP 20210 as described above. MEM 10112 port is unavailable for an indeterminate number of clock cycles. A MEM 10112 reference is made during first sequential occurrence of States M0 and M1.

(6) FIG. 244F; writing of an EU 10122 result back into MEM 10112. MEM 10112 is available and a write operation is initiated during first sequential occurrence of States M0 and M1.

(7) FIG. 244G; writing back of an EU 10122 result to MEM 10112 as described above. MEM 10112 port is unavailable for an undetermined number of clock cycles, or EU 10122 does not have a result ready to be written into MEM 10112. Write operation
is initiated during first sequential occurrence of States M0 and M1.

(8) FIG. 244H; a read of an EU 10122 result into FU 10120. EU 10122 result is not available for an undetermined number of clock cycles.

(9) FIG. 244I; a read from MEM 10112 to OFFMUXR 23812, with no delays. The microinstruction following the microinstruction initiating a read from MEM 10112 does not reference OFFMUXR 23812.

(10) FIG. 244J; a read from MEM 10112 to OFFMUXR 23812 with data from MEM 10112 being delayed by an indeterminate number of clock cycles. The next following microinstruction from that initiating the read from MEM 10112 does not reference OFFMUXR
23812.

(11) FIG. 244K; a read from MEM 10112 to OFFMUXR 23812. The next microinstruction following the microinstruction initiating the read from MEM 10112 references OFFMUXR 23812.

(12) FIG. 244L; a read from MEM 10112 to GRF 10354. The read to GRF 10354 is initiated by the first sequentially occurring States M0 and M1.

(13) FIG. 244M; a read from MEM 10112 to GRF 10354 and to OFFMUXR 23812. In this case, read operations may not be overlapped.

(15) FIG. 244O; JP 10114 honors an Event request as stated above. MEM 10112 references are made during the first sequential occurrence of States M0 and M1 and a MEM 10112 reference Event occurs. In case of an MEM 10112 reference event, State MA
is entered from one clock cycle. This occurs only if a MEM 10112 reference is made and aborted.

(16) FIG. 244P; an Event occurs in a MEM 10112 reference made during the first sequential occurrence of States M0 and M1. The MEM 10112 reference does not result in a memory reference Event. CS 10110 remains in State AB until the MEM 10112
reference is completed by return of data from MEM 10112.

(18) FIG. 244R; a read of MEM 10112 or JPD Bus 10142 data to EU 10122 Operand Queue. EU 10122 Operand Queue is full when the microinstruction initiating the read is issued.

(19) FIG. 244S; a request for a "nano-interrupt" to EU 10122 by FU 10120 with no Events occurring.

(20) FIG. 244T; FU 10120 submits a "nano-interrupt" request to EU 10122 and an EU 10122 State Overflow, described further in a following description, occurs. No other Events are recognized, as described in a following description of EVENT 20284.

(21) FIG. 244U; FU 10120 submits a "nano-interrupt" request to EU 10122. Another Event is recognized during State M0 and an abort results. First abort state is entered for the non-EU 10122 event. All aborts recognized in State M0 are taken or
acknowledged, before entrance into State M0. Therefore, on retry at State M0 of the original microinstruction entered from State M0, next abort recognized is for EU 10122 Stack Overflow Event since EU 10122 Stack Overflow has higher priority.

(26) FIG. 244Z; a read of a 32 bit SIN word from MEM 10112 in response to a prefetch or conditional prefetch request.

Having described the general structure and operation of STATE 20294, and the operating states and operations of CS 10110, structure and operation of EVENT 20284 will be described next below.

b.b.b. Event Loqic 20284 (FIGS. 245, 246, 247, 248)

An Event is a request for a change in sequence of execution of microinstructions which is generated by CS 10110 circuitry, rather than by currently executing microinstructions. Occurrence of an Event will result in provision of a
microinstruction sequence, referred to as an Event Handler, by FUSITT 11012 which modifies CS 10110's operations in accordance with the needs of that Event. Event request signals may be generated by CS 10110 circuitry internal to JP 10114, that is from
FU 10120 or EU 10122 or CS 10110 circuitry external to JP 10114, for example from IOP 10116 or from MEM 10112. Event request signals are provided as inputs to EVENT 20284. As will be described further below, EVENT 20284 masks Event Requests to
determine which Events will be recognized during a particular CS 10110 Operating State, assigns priorities for servicing multiple Event Requests, and fabricates Handler addresses to FUSITT 11012 for microinstruction sequences for servicing requests.
EVENT 20284 then provides those Handler microinstruction addresses to FUSITT 11012 through EVNTGT 24310, to initiate execution of selected Event Handler microinstruction sequences.

Certain terms and expressions are used throughout the following description. The following paragraphs define these usages and provide examples illustrating these terms. An Event "makes a request" when a condition in CS 10110 hardware operation
results in a Event Request signal being provided to EVENT 20284. As will be described further below, these Event Request signals are provided to EVENT 20284 combinatorial logic which determines the validity of those "requests".

An Event Request "is reognized" if it is not masked, that is inhibited from being acted upon. Masking may be explicit, using masks generated by FUSITT 11012, or may be implicit, resulting from an improper CS 10110 State or invalid due to other
considerations. That is, certain Events are recognized only during certain CS 10110 States even though those requests may be recognized during certain other states. Any number of requests, for example up to 31, may be simultaneously recognized.

An Event Request is "honored" if it is the highest priority Event Request occurring. When a request is honored, a corresponding address, of a corresponding microinstruction sequence in FUSITT 11012, for its Handler microinstruction sequence is
gated onto CSADR Bus 20204 by EVENT 20284. A request is honored when CS 10110 enters State AB. State AB gates the selected Event Handler microinstruction address on CSADR Bus 20284.

To summarize, a number of Events may request service by JP 10114. Of these Events, all, some, or none, may be recognized. Only one Event Request, the highest priority Event Request, will be honored when JP 10114 enters State AB.
Microinstruction control of CS 10110 will then transfer to that Event's Handler microinstruction sequence. A necessary condition for entering State AB is that an Event Request has been made and recognized.

A microinstruction sequence "completes", "is completed", or reaches "completion" when CS 10110 exits State M1 while that microinstruction sequence is active. A microinstruction sequence may, as described above, be aborted in State M0 an
indefinite number of times before, if ever, reaching completion.

A MEM 10112 reference "completes", "is completed", or reaches "completion" when requested data is returned to the specified destination, that is read from MEM 10112 to the requestor, or MEM 10112 accepts data to be written into MEM 10112.

"Trace Traps" are an inherent feature of microinstructions being executed. Trace Traps occur on every microinstruction of a given type (if not masked), for example during a sequence of microinstructions to perform a Name evaluate or resolve, and
occur on each microinstruction of the sequence. In general, a Trace Trap Event must be serviced before execution of the next microinstruction. Trace Traps are distinct from Interrupts in that an Interrupt, described below, does not occur on execution
of each microinstruction of a microinstruction sequence, but only on those microinstructions where certain other conditions must be considered.

"Interrupts" are the largest class of events in JP 10114. Occurrence of an Interrupt may not, in general, be predicted for a particular execution of a particular microinstruction in a particular instance. Interrupts may require service before
execution of the next microinstruction, before execution of the current microinstruction can complete, or before beginning of the next SIN. An Interrupt may be unrelated to execution of any microinstruction, and is serviced before beginning of the next
microinstruction.

A "Machine Check" is an Event that JP 10114 may not handle alone, or whose occurrence makes further actions by JP 10114 suspect. These events are captured in EVENT 20284 Registers and result in a request to DP 10118 to stop operation of JP 10114
for subsequent handling.

In summary, three major classes of Events in CS 10110 are Trace Traps, Interrupts, and Machine Checks. Each of these class of events will be described in further detail below, beginning with Trace Traps.

The State of all possible Trace Trap Event Requests, whether requesting or not requesting, is loaded into EVENT 20284 Registers at completion of State M1 and at completion of State AB. That is, since Trap Requests are a function of the currently
executing microinstruction, the State of a Trap Request will be loaded into EVENT 20284 Trace Trap Registers at end of State M1 of each currently executing microinstruction. Similarly, if any Trap Requests are recognized, State AB will be entered at the
end of the first clock cycle of the next following State M0 and their State loaded at end of the State AB.

Recognized, or unmasked, Trap Requests may be pushed onto RCWS 10358 as Pending Requests. Unrecognized, or masked, Trace Trap Requests may be pushed onto RCWS 10358 as Not Pending Requests and are subsequently disregarded. Subsequently, when a
microinstruction sequence ends in a return to a calling microinstruction sequence, the Trace Trap Request bits in an RCWS 10358 may be used to generate Trace Trap Event Requests.

Upon exit from State AB, all Trace Trap Requests, except Micro-Break-Point and Microinstruction Trace Traps, described below, are loaded into corresponding EVENT 20284 Trace Trap Request Registers as not requesting. Micro-Break-Point and
Microinstruction Trace Traps, are, in general, always latched as requesting at completion of State AB. Trace Traps may be explicitly masked by a Trace Mode Mask, an Indivisibility Mode Mask, and by a Trace Enable input, all generated by FUSITT 11012 as
described below. Micro-Break-Point Trap may also be masked by clearing a Trace Enable bit in a Trace Enable field of certain microinstructions containing Trace Traps. In general, masking is effective from State M0 of the microinstruction which
generates the mask, through completion of a microinstruction which clears the mask Trace Traps generated by a microinstruction which clears a mask are taken so as to abort a following microinstruction during its M0 State.

Referring to FIG. 245, CS 10110 state timing for a typical Trap Request, and generation of a microinstruction address to a corresponding Trace Trap Handler microinstruction sequence by EVENT 20284 is shown. FIG. 245 is drawn using the same
conventions as described above with reference to FIGS. 244A to 244Z. In FIG. 245, a microinstruction executing in States M0 and M1 causes a Trace Trap Request but does not generate an MR (Memory Reference) Trailer State. Trace Trap Request to EVENT
20284 is signaled by Time A. This Trace Trap Request is latched into EVENT 20284 Trace Trap Event Registers, and an Abort Request is provided to STATE 20294. At Time B, FU 10120 enters States AB and AR. The microinstruction address for a Handler
microinstruction sequence of the highest priority Event present in EVENT 20284 is presented to FUSITT 11012 and execution of the addressed microinstruction sequence begins. At Time C, FU 10120 exits States AB and AR and enters State AB. State AB will
be exited at end of the next 110 nano-second clock cycle. Address of the selected Event Handler microinstruction sequence will remain on CSADR Bus 20204 for duration of State AB. At Time D, a pointer into RCWS 10358, described in a following
description, is incremented, thereby effectively pushing the first microinstruction's return control word, that is the microinstruction executing at first State M0, onto RCWS 10358. First microinstruction of the Trace Trap Event Handler microinstruction
sequence is provided by FUSITT 11012. Execution of Handler microinstruction sequence will begin at start of the third State M0 of the state timing sequence shown in FIG. 245. EVENT 20284's Trace Trap Register for this event is now latched in
non-requesting state and will remain so until transition out of second State M1 shown in FIG. 245. At this time, EVENT 20284 Registers will latch new Trap Requests. Finally, at Time E, Trace Trap Event Registers of EVENT 20284 are latched with new Trap
Requests arising from execution of the microinstruction being executed in States M0 and M1 occurring between Times D and E. Traps due to the microinstruction that was executed in States M0 and M1 before Time A, but were not serviced, are requested again
when the previously pushed RCW described above is returned from RCWS 10358 upon return from the Trace Trap Event Handler microinstruction sequence initiated at Time D. All Trace Trap Requests which have been serviced are explicitly cleared in RCWS 10358
RCWs by their Event Handler microinstruction sequences to prevent recurrence of those Trap Requests. Since Trace Trap Event Requests arising from reads or writes to MEM 10112 will recur if those requests are repeated, EVENT 20284 generates memory repeat
Interrupts after all aborted MEM 10112 read and write requests to insure that these Traps will eventually be serviced Event Handler microinstruction sequences for these read and write Trace Trap Events explicitly disable serviced Trace Trap Event
Requests by clearing bits in the logical descriptor of the aborted memory read and write requests.

A Name Trace Trap is requested upon every microinstruction sequence that contains an evaluate or resolve of a Name syllable. Name Trace Traps are provided by decoding certain microinstruction fields of those microinstruction sequences. Name
Trace Trap field is masked by either Trace Mask, Indivisibility Mask, or Trace Enable, as described above. All of these masks are set and cleared by microinstruction control signals provided during microinstruction sequences calling for resolves or
evaluates of Name syllables.

A SOP Trace Trap may be requested whenever FU 10120 enters State FM (First Microinstruction of an SOP). SOP Trace Traps may be masked by Trace Mask, Indivisibility Mask, or Trace Trap Enable, again provided by microinstruction control outputs of
FUSITT 11012. In general, the first microinstruction of such a microinstruction sequence interrupting such SOPs is not completed before a Trace Trap is taken.

Microinstruction Trace Traps may be requested upon completion of microinstructions which do not contain a Return Command, that is those microinstructions which do not return microinstruction control of CS 10110 to the calling microinstruction
sequence. For microinstruction sequences containing Return Commands, state of microinstruction Trace Trap Request in a corresponding RCW is used. Every microinstruction for which a Microinstruction Trace Trap is not masked is aborted during State M0 of
execution of that microinstruction. Microinstruction Trace Traps may be masked by Trace Mask, Indivisibility Mask, or Trace Enable from FUSITT 11012. A Micro-Break-Point Trap may be requested upon execution of microinstructions which do not contain
Return Commands, but in which a Trace Enable bit in a microinstruction is asserted. A Micro-Break Point Trap may be masked by Trace Mask, Indivisibility Mask, or Trace Enable. In addition, a Trace Enable bit of a microinstruction field in these
microinstruction sequences controls recognition of Micro-Break-Point Traps. Micro-Break-Point Traps are thereby requested whenever a microinstruction Trace Trap is requested, but have additional enabling conditions expressed in the microinstructions.
Since only recognized Traps are pushed onto RCWS 10358 in a RCW, a Microinstruction Trace Trap and a Micro-Break Point Trap having different request states may be present in RCWS 10358 concurrently

Logical Write Trace Traps may be requested when enabled by a bit set in a logical descriptor during a microinstruction sequence submitting a write request to MEM 10112 and using logical descriptors to do so. Logical Write Trace Traps are
recognized only if they occur during a state which will be immediately followed by State MR (Memory Reference Trailer). A Logical Write Trace Trap will result in the MEM 10112 write request being aborted. Logical Write Trace Traps may be masked by
Trace Masks, Indivisibility Mask, or Trace Trap Enable. A further condition for recognition of a Logical Write Trace Trap is determined by the state of certain bits in a logical descriptor of the memory write request. Logical Write Trace Traps are, in
general, not pushed onto RCWS 10358 as part of a RCW since aborted MEM 10112 requests are re-generated so that Logical Write Trace Traps may be repeated.

Logical Read Trace Traps are similar in all respects to the Logical Write Trace Traps, but occur during MEM 10112 read requests. Generation of Logical Read Trace Traps is controlled again in part by certain bits in logical descriptors of MEM
10112 read requests.

UID Write Trace Traps are similar to UID Read Trace Traps, and are controlled by bits in the logical descriptor in MEM 10112 write request based upon UID addresses or pointers.

Having described above structure and operation of Trace Trap Events, CS 10110 Interrupt Events will be described next below.

As previously described, Interrupts form the largest class of CS 10110 Events. Interrupts may be regarded as falling into one or more of several classes. First, Memory Reference Repeat Interrupts are those Interrupt Events associated, in
general, with read and write requests to MEM 10112 in which a read or write request is submitted to MEM 10112, and an Interrupt Event results. That Interrupt Event is handled, and the MEM 10112 request repeated. Second, Deferred Service Interrupts are
those Interrupts wherein CS 10110 defers service of an Interrupt until entry to a new SIN. Fourth, Microinstruction Service Interrupts occur when a currently executing microinstruction requires assistance of an Event Handler microinstruction sequence to
be completed. Finally, Asynchronous Interrupt Events may occur at any time and must be serviced before CS 10110 may exit State M0 of the next microinstruction. These Interrupt Events will be described next below in the order named.

A Memory Reference Repeat Interrupt is requested, for example, if a microinstruction executes a command, and a corresponding RCW read from RCWS 10358 indicates that a memory reference was aborted before entrance to the microinstruction sequence
from which return was executed. This type of Interrupt Event occurs for all aborted memory references. If an event is honored, that is abort state is entered, for any event and there is a memory reference outstanding, not aborted, the memory reference
completes before State AB is exited. No memory Repeat Interrupt Request will be written into the RCW written onto RCWS 10358. Conversely, if a memory reference is aborted, even if the event honored is not that event which aborted the memory reference,
a Memory Repeat Interrupt Request will be written into a RCW pushed onto a RCWS 10358.

There are two state timing sequences for execution of Memory Repeat Interrupts. In the first case, there are no MEM 10112 references in the mcroinstruction executing a Return Command. In the second case, a microinstruction executing a Return
Command executes a return and also makes a MEM 10112 reference. Referring to FIG. 246, a CS 10110 State Timing Diagram for the first case is shown. FIG. 246 is drawn using the same conventions as used in FIGS. 244 and 245. As described above, in the
first case a microinstruction executing a Return Command is executed in States M0 and M1 following Time D. An aborted MEM 10112 reference was made in States M0 and M1 preceding Time A. An MEM 10112 Reference Abort Request is made upon CS 10110's entry
into State MR following Time A. Since a Memory Repeat Interrupt is requested only from a RCW provided by RCWS 10358, a Memory Repeat Interrupt is indicated only if a microinstruction executes a Return Command resulting in RCWS 10358 providing such an
RCW. Therefore, a Memory Repeat Interrupt Request Register of EVENT 20284 is loaded with "not requesting" at this time. At Time B, CS 10110 enters State AB, State AR, and State MA. At this time, a Memory Reference Abort Request is asserted and written
into an RCW when State AB is exited just before Time D. At Time D, CS 10110 exits State AR and State MA. As just described, CS 10110 will remain in State B until Time D. At Time D, Memory Reference Abort Request is written into RCWS 10358 as part of an
RCW and, as described further below, various RCWS 10358 Stack Pointers are incremented to load that RCW into RCWS 10358. At this time, EVENT 20284's Interrupt Request Register receives "no request" as state of Memory Repeat Interrupt. First
microinstruction of Memory Repeat Interrupt Handler microinstruction sequence is provided by FUSITT 11012. At Time E, the last microinstruction of the Memory Repeat Interrupt Handler microinstruction sequence is provided by FUSITT 11012 and a Return
Command is decoded. RCWS 10358 Previous Stack Pointer, previously described, is selected to address RCWS 10358 to provide the previously written RCW as output to EVENT 20284's Memory Repeat Interrupt Event Register. At Time F, EVENT 20284's Memory
Repeat Interrupt Register is loaded from output of RCWS 10358 and RCWS 10358's Stack Register Pointers are decremented. At this time, Memory Repeat Interrupt Request is made and, as described below, is written into the current Return Control Word,
whether honored or not. JP 10114 then repeats the aborted MEM 10112 reference.

In the second case, a State Timing Sequence wherein the microinstruction executing a return also makes a MEM 10112 reference, CS 10110 State Timing is identical up to Time F. At Time F, MEM 10112 Repeat request is not recognized and the state of
Memory Repeat Interrupt written into the current Return Control Word is "not requesting" unless a current MEM 10112 reference is aborted. The previous MEM 10112 Repeat Interrupt Request is disregarded as it is assumed that it is no longer required.
Thus, there are two ways to avoid, or cancel a Memory Repeat Interrupt Request. First, that portion of a RCW receiving a MEM 10112 Repeat Interrupt Request may be rewritten as "not requesting". Second, an aborted MEM 10112 reference may be made in the
same microinstruction that returns from a Handler servicing the aborted MEM 10112 reference.

Certain CS 10110 Events result in aborting a MEM 10112 read or write references and may result in repeat of MEM 10112 references. These events may include:

Of these Events, Logical Read and Write Traps, UID Read and Write Traps, and Name Trace Traps have been previously described. Other Events listed above will be described next below in further detail.

A PC 10234 Miss Interrupt may be requested upon a logical MEM 10112 reference, that is when a logical descriptor is provided as input to ATU 10228 and a protection state is not encached in PC 10234. PC 10234 will, as previously described,
indicate that a corresponding PC 10234 entry is not present by providing a Event Protection Violation (EVENTPVIOL) output to EVENT 20284. PC 10234 will concurrently assert an Abort output (ABORT) to force CS 10110 into State AB and thus abort that MEM
10112 reference.

A Page Crossing MEM 10112 Reference Interrupt is requested if a logical MEM 10112 reference, that is a logical descriptor, specifies an operand residing on two logical pages of MEM 10112. An output of ATU 10228 will abort such MEM 10112
references by asserting an Abort output (ABORT).

A Protection Violation Interrupt is requested if a logical MEM 10112 reference does not possess proper access rights, a mode violation, or if that reference appears to refer to an illegal portion of that object, an extent violation. Again, PC
10234 will indicate occurrence of a Protection Violation Event, which may be disabled by a microinstruction control output of FUSITT 11012.

A Long Address Translation Event may be requested upon a logical MEM 10112 reference for which ATU 10228 does not have an encached entry. ATU 10228 will abort that MEM 10112 reference by asserting outputs ABORT and Long Address Translation Event
(EVENTLAT).

A Dirty Bit Reset Event Interrupt may be requested when JP 10114 attempts to write to an MEM 10112 page having an encached entry in ATU 10228 whose dirty bit is not set. ATU 10228 will abort that MEM 10112 write request by asserting outputs
ABORT and Write Long Address Translation Event (EVENTWLAT).

An FU 10120 User Stack Overflow Event may be requested if the distance between a Current Frame Pointer and a Bottom Frame Pointer, previously described with reference to CS 10110 Stack Mechanisms, is greater than a given value. As previously
described, in CS 10110 this value is eight A User Stack Overflow Event will continue to be requested until either Current Frame Pointer or Bottom Frame Pointer changes value so that the difference limit defined above is no longer violated. A User Stack
Overflow Event may be masked by a Trace Mask, an Indivisibility Mask, or by enable outputs of a microinstruction from FUSITT 11012. A Handler microinstruction sequence for User Stack Overflow Events must be executed with one or more of these masks set
to prevent recursion of these events. CS 10110 is defined to be running on Monitor Stack (MOS) 10370 when User Stack Overflow Events are masked. User Stack Overflow Events are not loaded into any of EVENT 20284's Event Registers, nor are these events
written into a RCW to be written onto RCWS 10358.

EU 10122 will indicate a Store Back Exception Event if any one of a number of exceptional conditions arise during arithmetic operations. These events are recognized when CS 10110 enters State SB and are ignored except during Store Back to MEM
10112 of EU 10122 results. These Events may be disabled by microinstruction output of FUSITT 11012 but are, in general, not masked. Store Back Exception Events may be written into RCWs, to be stored in RCWS 10358, and are cleared upon CS 10110's exit
from State AB. Again, a Store Back Exception Event Handler microinstruction sequence should reset Store Back Exception Events written into RCWs to prevent recursion of these events.

As described above, the next major class of Interrupt Events are Deferred Service Interrupts. CS 10110 defers service of Deferred Service Interrupts until entry of a new SOP Deferred Service Interrupts which have been recognized will be serviced
before completion of execution of the first microinstruction of that new SOP. Deferred Service Interrups include Nonfatal MEM 10112 Errors, Interval Timer Overflows, and Interrupts from IOS 10116. These Interrupts will be described below, in the order
named.

A Nonfatal MEM 10112 Interrupt is signaled by MEM 10112 upon occurrence of a correctable (single bit) MEM 10112 error. Nonfatal Memory Error Interrupts are recognized only during State M0 of the first microinstruction of an SOP. MEM 10112 will
continue to assert Nonfatal Memory Error Interrupt until JP 10114 issues an acknowledgement to read MEM 10112's Error Log.

An Interval Timer Overflow Interrupt is indicated by TIMERS 20296 when, as described below, an Interval Timer increments to zero, thus indicating lapse of an allowed time limit for execution of an operation. Interval Timer Overflow Interrupts
are recognized during State M0 of the first microinstruction of a SOP. TIMERS 20296 will continue to request such interrupts until cleared by a microinstruction output of FUSITT 11012.

IOS 10116 will indicate an IOS 10116 Interrupt to indicate that an inter-processor message from IOS 10116 to JP 10114 is pending. IOS 10116 will continue to assert an IOS 10116 Interrupt Request, which is stored in a register, until cleared by a
microinstruction control output of FUSITT 11012. IOS 10116 Interrupts are recognized during State MO of the first microinstruction of an SOP.

The next major class of CS 10110 events are Interrupts due to the requirement by microinstruction sequences to be serviced in order to complete execution. These Interrupts must be serviced before a microinstruction sequence may be completed.
Microinstruction Service Interrupts include Illegal SOP Events, Microinstructions Not Present in FUSITT 11012 Events, an attempted parse of a hung INSTB 20262, underflow of an FU 10120 Stack, an NC 10226 Cache Miss, or an EU 10122 Stack Overflow Each of
these events will be described below, in the order named.

An Illegal SOP Event is indicated by FUSDT 11010 to indicate that a current SOP Code is a Long Code, that is greater than eight bits, while the current dialect (S-Language) expects only Short Operation Codes, that is eight bit SOPs. An Illegal
SOP Interrupt is not detected for unimplemented SOPs within the proper code length range. Illegal SOP Events are, in general, not masked. FUSDT 11010 continues to indicate an Illegal SOP Event until a new SOP is loaded into OPCODEREG 20268. Illegal
SOP Events are recognized during the first microinstruction of an SOP, that is during State FM. Should a Handler microinstruction sequence for a higher priority event change contents of OPCODEREG 20268, a previous Illegal SOP Event will be indicated
again when the aborted SOP is retried.

Absence of a Microinstruction in FUSITT 11012 is indicated by FUSITT 11012 asserting a Control Store Address Invalid (CSADVALID). This FUSITT 11012 output indicates that that particular microinstruction address points outside of FUSITT 11012's
address space. Output of FUSITT 11012 in such event is not determined and parity checking, described below, of microinstruction output is inhibited. The Handler microinstruction sequence for these Events will load FUSITT 11012 address zero with the
required microinstruction from MEM 10112, as previously described, and return to the original microinstruction sequence.

An attempted parse of a hung INSTB 20262 is indicated by INSTBWC 24110 when a parse operation is attempted, INSTB 20262 is empty, and PREF 20260 is not currently requesting SINs from MEM 10112. In general, these Events are not masked. If a
higher priority Event is serviced, these Events are indicated again when the aborted microinstruction is retried if the original conditions still apply.

An FU 10120 Stack Underflow Event is requested when a current microinstruction references a Previous Stack Frame which is not in an accelerated stack, that is, the Current Stack Pointer equals Bottom Stack Pointer. FU 10120 Underflow Events are,
in general, not masked and are requested again on a retry if the microinstruction is aborted and this event has not been serviced.

An NC 10226 Miss Interrupt occurs on a MEM 10112 read or write operation when a load or read of NC 10226 is attempted and there is no valid NC 10226 block corresponding to that Name syllable. An NC 10226 Miss Event does not result in a request
for a Name evaluate or resolve. In general, these Events are not masked and result in a request being issued again if the microinstruction resulting in that Event is retried and has not been serviced.

An EU 10122 Stack Overflow Event is requested from EU 10122 to indicate that EU 10122 is currently already servicing at least one level of Interrupt an FU 10122 is requesting another. As will be described in a following description of EU 10122,
EU 10122 contains a one level deep stack for handling of Interrupts. EU 10122 Stack Overflow Events are enabled during State NW. All previously pending events will have been serviced before EU 10122 Stack Overflow Event requests are recognized. These
Events will be serviced immediately upon entry into a following State M0, being the highest priority interrupt event. EU 10122 Stack Overflow Events may, in general, not be masked and once recognized are the next honored event.

Finally, the third major class of CS 10110 Interrupt Events are Asychronous Events. Asynchronous Events must, in general, be serviced before exiting State M0 of a microinstruction after they are recognized. Asychronous Events include Fatal
Memory Error Events, AC Power Failure Events, Egg Timer Overflow Events, and EU 10122 Stack Underflow Events. CS 10110 Egg Timer is a part of TIMERS 20296 and will be discussed as part of TIMERS 20296. These events will be described below, in the order
referred to.

Fatal MEM 10112 Error Events are requested by MEM 10112 by assertion of control signal output PMODI, previously described, when last data read from MEM 10112 contains a noncorrectable error. Fatal MEM 10112 Error Events are recognized on first
State M0 after occurrence. Fatal MEM 10112 Error Events are stored in an EVENT 20284 Event Register and are cleared upon entry into its service microinstruction sequence. In general, Fatal MEM 10112 Error Events may not be masked.

AC Power Failure Events are indicated by DP 10118 by assertion of output signal ACFAAIL when DP 10118 detects a failure of power to CS 10110. Recognition of AC Power lailure Events is disabled upon entry to AC Power Failure Event Handler
microinstruction sequence. No further AC Power Failure Events will be recognized until DP 10118 reinitiates JP 10114 operation.

As will be described further below, FUCTL 20214's Egg Timer is a part of TIMERS 20296. Egg Timer Overflow Events are indicated by TIMERS 20296 whenever TIMERS 20296's Egg Timer indicates overflow of Egg Timer Counter. Egg Timer Overflow Events
may be masked as described in a following description.

Finally, EU 10122 Stack Underflow Events are signaled by EU 10122 when directed to read a word from EU 10122 Stack Mechanism and there is no accelerated stack frame present. EU 10122 will continue to assert this Event Interrupt until
acknowledged by JP 10114 by initiation of a Handler microinstruction sequence.

The above descriptions of CS 10110 events have stated that recognition of certain of those Events may be masked, that is inhibited to allow recognition of other Events having higher priority. Certain of these masking operations were briefly
described in the above descriptions and will be described in further detail next below. In general, recognition of Events may be masked in five ways, four of which are properly designated as masks. These four masks are generated by microinstruction
control from FUSITT 11012 and include Asychronous Masks for, in general, Asychronous Events. Monitor Masks are utilized for those CS 10110 operations being performed on Monitor Stack (MOS) 10370, as previously described with reference to CS 10110 Stack
Mechanisms. Trace Mask is utilized with reference to Trace Trap Events. Indivisible Mask is generated or provided by FUSITT 11012 as an integral or indivisible part of certain microinstructions and allow recognition of certain selected events during
certain single microinstructions. Certain other Events, for example Logical Read and Write Traps and UID Read and Write Traps, are recognized or masked by flag bits in logical descriptors associated with those operations. Finally, certain
microinstructions result in FUSITT 11012 providing microinstruction control outputs enabling or inhibiting recognition of certain events, but differ from Indivisible Masks in not being associated with single particular microinstructions.

Referring to FIG. 247, the relative priority level and applicable masks of certain CS 10110 Events are depicted therein in three vertical columns. Information regarding priority and masking of particular Events is shown in horizontal entries,
each comprising an entry in each of these three vertical columns. Left hand column, titled Priority Level, states relative priority of each Event entry. Second column, titled EVENT, specifies which Event is referred to in that table entry. A
particular Event will yield priority to all higher priority Events and will take presidence over all lower priority Events. FIG. 247's third column, titled Masked By, specifies for each entry which masks may be used to mask the corresponding Event. A
indicates use of Asychronous Masks, M use of Monitor Mask, T use of Trace Trap Mask, and I represents that Indivisible Mask may be used. DES indicates that an Event is enabled or masked by flag bits of logical descriptors, while MCWD indicates that a
particular Event may be masked by microinstruction control signal outputs provided by FUSITT 11012. NONE indicates that a particular Event may, in general, not be masked.

The final major class of CS 10110 event was described above as Machine Check Events. In general, if any of these Events are detected by logic gating in EVENT 20284, EVENT 20284 will provide a Check Machine signal to DP 10118. DP 10118 will then
stop operation of JP 10114 and Machine Check Event Handler microinstruction sequences will be initiated. Among these Machine Check Events are wherein FU 10120 is attemting to store back an EU 10122 result to MEM 10112 and EU 10122 signals a parity error
in EU 10122's Control Store. These events are stored in EVENT 20284 Event Registers and recogized when FU 10120 enters State AB. EU 10122 will have previously ceased operation until a corrective microinstruction sequence may be initiated. The same
Event will occur if FU 10120 attempts to use an EU 10122 arithmetic operation result or test operation result having a parity error in EU 10122's Control Store. Should MOS 10370 overflow or underflow, this event will be detected, FU 10120 operations
stopped, and corrective microinstruction sequences initiated. MOS 10370 overflow or underflow occurs whenever a previous MOS 10370 Stack Frame is referenced, whenever MOS 10370 Stack Pointer equals MOS 10370 Bottom Stack Pointer, or the difference
between MOS 10370 Current and Bottom Stack Pointers is greater than sixteen. Underflows result in a transfer of operation to MIS 10368, while overflows are handled by DP 10118 Finally, a Machine Check Event will be requested when a parity error is
detected in a microinstruction currently being provided by FUSITT 11012 during State M0 of that microinstruction.

Having described general operation of EVENT 20284, the structure and operation of EVENT 20284 will be described briefly next below.

EMR 24812 includes a set of registers, for example SN74S194s, comprising EVENT 20284's Event Registers. These registers are enabled by mask inputs, described momentarily, to enable masking of those Events which are latched in EVENT 20284's Event
Registers. Certain Events, as previously described, are not latched and logic gating having mask enable inputs is provided to enable masking of those events which are not latched. EMR 24812 mask inputs are Asychronous, Monitor, Trace Trap, and
Indivisible Masks, respectively AMSK, MMSK, TMSK, and ISMK, provided from FUSITT 11012. Mask inputs derived from FUSITT 11012 microinstruction outputs (mWRD) are provided from microinstruction control outputs of FUSITT 11012. EMR 24812 provides outputs
representing mask and unmask events which have been requested to EHS 24814.

EHS 24814 is comprised of loic gating detecting which of EHS 24814's unmasked Event Requests is of highest priority. EHS 24814 selects the highest priority unmasked Event Request input and provides a corresponding Event Handler microinstruction
address to EVNTGT 24310 through ADRA Bus 24322. These address outputs of EHS 24814 are five bit addresses selecting the initial microinstruction of the Event Handler microinstruction sequence of the current highest priority unmasked Event. As
previously described with reference to NASMUX 24312, certain inputs of ENTGT 24310 are hard-wired to provide a full fifteen bit address output from EVNTGT 24310. EVENT 20284 also provides, from EHS 24814, an Event Enable Select (EES) output to SITTNAS
20286 to enable EVNTGT 24310 to provide microinstruction addresses to CSADR Bus 20204 when EVENT 20284 must provide a microinstruction address for handling of a current Event.

Having described the structure and operation of FUCTL 20214's circuitry providing microinstruction addresses to FUSITT 11012, FUSITT 11012 will be described next below

c.c.c. Fetch Unit S-Interpreter Table 11012 (FIG. 249)

Referring to FIG. 249, a partial block diagram of FUSITT 11012 is shown. Address (ADR) and Data (DATA) inputs of Micro-Instruction Control Store (mCS) 24910 are connected, respectively, from CSADR Bus 20204 through Address Driver (ADRDRV) 24912
and from JPD Bus 10142 through Data Driver (DDRV) 24194. mCS 24910 comprises a memory for storing sequences of microinstructions currently being utilized by CS 10110. mCS 24910 is an 8K (8192) word by 80 bit wide memory. That is, mCS 24910 may
contain, for example, up to, 8192 80 bit wide microinstructions. Microinstructions to be written into mCS 24910 are provided, as previously described, to mCS 24910 DATA input from JPD Bus 10142 through DDRV 24914. Addresses of microinstructions to be
written into or read from mCS 24910 are provided to mCS 24910 ADR input from CSADR Bus 20204 through ADRDRV 24912. ADRDRV 24912 and DDRV 24914 are buffer drivers comprised, for example, of SN74S240s and SN74S244s.

Also connected from output of ADRDRV 24912 is input of Nonpresent Micro-Instruction Logic (NPmIS) 24916. NPmIS 24916 is comprised of logic gating monitoring read addresses provided to mCS 24910. When a microinstruction read address present on
CSADR Bus 20204 refers to an address location not within mCS 24910's address space, that is of a non-present microinstruction, NPmIS 24916 generates an Event Request output indicating this occurrence. As previously described FUCTL 20214 will then call,
and execute, microinstructions so addressed from MEM 10112.

As indicated in FIG. 249, mCS 24910 provides three sets of outputs. These outputs are Direct Output (DO), Direct Decoded Output (DDO), and Buffered Decode Output (BDO). In general, control information within a particular microstruction word is
used on next clock cycle after the address of that particular microinstruction word has been provided to mCS 24910 ADR input. That is, during a first clock cycle a microinstruction's address is provided to mCS 24910 ADR input. That selected
microinstruction appears upon mCS 24910's DO, DDO, BDO outputs during that clock cycle and are used, after decoding, during next clock cycle. Outputs DO, DDO, BDO differ in delay time before decoded microinstruction outputs are available for use.

mCS 24910 DO output provides certain bits of microinstruction words directly to particular destinations, or users, through Direct Output Buffer (DOB) 24918. These microinstructions bits are latched and decoded at their destinations as required.
DOB 24918 may be comprised, for example, of SN74S04s.

mCS 24910's DDO output provides decoded microinstruction control outputs for functions requiring the presence of fully decoded control signals at the start of the clock cycle in which those decoded control signals are utilized. As shown in FIG.
249, mCS 24910's DDO output is connected to input of Direct Decode Logic (DDL) 24920. DDL 24920 is comprised of logic gating for decoding certain microinstruction word bits during same clock cycle in which those bits are provided by mCS 24910's DDO.
These microinstruction bits are provided, as described above, during the same clock cycle in which a corresponding address is provided to mCS 24910's ADR input During this clock cycle, DDL 24920 decodes mCS 24910's DDO microinstruction bits to provide
fully decoded outputs by end of this clock cycle. Outputs of DDL 24920 are connected to inputs of Direct Decode Register (DDR) 24922. DDR 24922 is a register comprised, for example, of SN74S374s. DDL 24920's fully decoded outputs are loaded into DDR
24922 at the end of the clock cycle during which, as just described, an address is provided to mCS 24910's ADR input and mCS 24910's corresponding DDO output is decoded by DDL 24920. Fully decoded microinstruction control outputs corresponding to mCS
24910's DDO outputs are thereby available at start of the second clock cycle. Microinstruction control outputs of DDR 24922 are thereby available to FU 10120 at start of the second clock cycle for those FU 10120 operations requiring immediate, that is
undelayed, microinstruction control signal outputs from FUSITT 11012.

Finally, mCS 24910's BDO is provided for those FU 10120 operations not requiring microinstruction control signals immediately at the start of the second clock cycle. As shown in FIG. 249, mCS 24910's BDO is connected to inputs of Buffered Decode
Register (BDR) 24924. Microinstruction word output bits from mCS 24910's BDO are provided to inputs of BDR 24924 during the clock cycle in which a corresponding address is provided to mCS 24910's ADR input. mCS 24910's BDO outputs are loaded into BDR
24924 at end of this clock cycle. BDR 24924's outputs are connected to inputs of Buffered Decode Logic (BDL) 24926. BDL 24926 is comprised of logic gating for decoding outputs of BDR 24924. BDL 24926 thereby provides decoded microinstruction control
outputs to FU 10120 at some delayed time after start of the second clock cycle. Microinstruction control outputs from BDL 24926 are thereby delayed in time from the appearance of microinstruction control outputs of DDR 24922 but, as BDR 24924 stores
microinstruction word bits rather than decoded microinstruction word bits, BDR 24924 is required to store proportionately fewer bits than DDR 24922.

Finally, as shown in FIG. 249 outputs of DDR 24922 and BDR 24924, are connected to inputs of Microinstruction Word Parity Checker (mWPC) 24928. mWPC 24928 is comprised of logic gating for checking parity of outputs of DDR 24922 and BDR 24924. A
failure in parity of either output of DDR 24922 and BDR 24924 indicates a possible error in microinstruction output from mCS 24910. When such an error is detected by mWPC 24928, mWPC 24928 generates a corresponding Microinstruction Word Parity Error
(mWPE).

d.d.d. Microinstruction Word Formats (FIG. 250)

Referring to FIG. 250, diagramic representation of FUSITT 11012's microinstruction word formats is shown. Each microinstruction word is comprised of 81 bits of information, which may be arranged in any of seven different formats, referred to as
Formats A through G in FIG. 250. Bits 0 to 48 inclusive of each microinstruction word are referred to as Microinstruction Word Base Field and are arranged in the same manner in all seven microinstruction word formats Bits 49 to 80 comprise
Microinstruction Word Variable Field and, in general, are arranged differently in each of the seven microinstruction word formats Within Microinstruction Word Variable Field, bits 49 to 63 inclusive are arranged in the same manner in Formats A, B, C, D,
and E, and arranged differently in Formats F and G. Each of these seven formats is shown in FIG. 250 and will be described next below. As has been previously described, bits are numbered from the most significant bit, as bit 0, to the least significant
bit, being the highest numbered bit. In FIG. 250, any unused bits in a particular format are indicated by cross hatch shading.

Referring first to Microinstruction Word Base Field, base field is comprised of bits 0 to 48 of each microinstruction word and is comprised of a number of sub-fields. Bits 0 and 1 are referred to as Parity (P) and Timing (T) fields. P field is
a parity bit for the entire 81 bit microinstruction word. T field is utilized to indicate those microinstructions which require more than one system clock cycle for State M0. When T field is asserted, this bit is decoded to indicate that JP 10114
should remain in State M0. Bit 2 is a Spare (S) bit and is reserved for future use.

Bits 3 to 6 inclusive comprise JPD Bus 10142 control field and select a particular source, for example, output of OFFALU 20242, to be source for transferring data onto JPD Bus 10142. Bits 7 and 8 comprise NAME Bus 20224 control (NB) field and
select a particular source, for example, output of OFFALU 20242, to be source for writing data onto NAME Bus 20224. Bit 9 comprises a logical Descriptor Bus Source Selection Control (DB) field for selecting a source of data to be written onto LENGTH Bus
20226, OFFSET Bus 20228, and AON Bus 20230.

Bits 10 through 13 inclusive comprise Length Control (LENCTRL) field for controlling operation of LENP 20220. In particular, LENCTRL field controls operation of BIASLOGIC 20246. Bits 14 and 15 comprise Length Input Control (LIN) field for
controlling operation of LENSEL 20250.

Bits 16 to 31 inclusive comprise fields for addressing of GRF 10354. Bits 16 to 18 inclusive comprise a Source Register Select (RS) field for selecting a particular register within a given frame of SR's 10362 as a source of data. Bits 19 to 21
inclusive comprise a Destination Register Select (RD) field for selecting a particular register within a given frame of SR's 10362 as a destination register to receive data. Bits 22 to 25 inclusive comprise a Common Area address (CONEXT) field for
selecting a particular register in a given frame of GR's 10360, that is, the common area of GRF 10354, as a source or destination register for data. Bits 26 and 27 comprise a Source Frame (SRC) field for selecting a particular frame in GRs 10360 or SRs
10362 as a data source. Bits 28 and 29 comprise a Destination Frame Select (DST) field for selecting a particular frame in GRs 10360 or SRs 10362 as a data destination frame. Fields SRC and DST are used together with fields RS, RD, and CONEXT to
address particular data source and data destination registers within the frames of GRs 10360 and SRs 10362. Bit 30 comprises a Write Enable Control Bit (RW) field for GRF 10354, enabling GRF 10354 for writing of data into GRF 10354.

Bits 31 to 43 inclusive are used, in particular for control of DESP 20210. Bit 31 comprises a Write Enable Control (AW) field for OFFMUXR 23812, for writing of data of into OFFMUXR 23812. Bits 32 and 33 comprise an AONGRF Input Select (AIN)
field for controlling AONSEL 20248, that is, for selecting data inputs to AONGRF 20232. Bits 34 and 35 comprise an OFFGRF 20234 Input Select (OIN) field for controlling OFFSEL 20238, to select a data input to OFFGRF 20234. Bits 36 and 37 comprise an
OFFALU 20242 Input Select (ALUIN) field for controlling OFFALUSA 20244, for selecting data inputs to OFFALU 20242 through OFFALUSA 20244. Bits 38 to 40 inclusive comprise a Scale Factor Control (SF) field for controlling operation of OFFSCALE 23818,
previously described Bits 41 to 43 inclusive comprise an ALU Operation Control (ALUOP) field for controlling operation of OFFALU 20242.

Bits 44 to 47 inclusive comprise a Random Control (RAND) field which is used for general control of DESP 20210 operations. Bit 48 comprises a Literal Size (L) field which is used in conjunction with Microinstruction Word Variable fields of
Formats E and F to specify size of literal fields within the variable fields of Formats E and F. As will be described below, these literal fields may contain either 16 or 31 bits of information.

Referring now to Microinstruction Word Variable Fields, as described above any one of seven possible Microinstruction Variable Fields may be concatenated with the Microinstruction Word Base Field to comprise a complete 81 bit microinstruction
word. These variable fields each comprise bits 49 to 80, inclusive, of a microinstruction word and trailer particular microinstruction words for particular functions. As shown in FIG. 250, bits 49 to 63 inclusive of Microinstruction Word Variable Field
are comprised of sub-fields which are common to Formats A, B, C, D, and E while bits 64 to 66 inclusive comprise a sub-field common to Formats A, B, C, and D. Formats E and F are similar in that each contains a literal field, that is a field containing a
numeric value rather than a specific set of control bits. Format E contains a 16 bit literal field, bits 65 to 80 inclusive, while Format F contains a 32 bit literal field, bits 49 to 80 inclusive. Format G, as described below, is unique from Formats A
to F and is utilized in particular with respect to control of EU 10122.

Referring to bits 49 to 63 inclusive of Microinstruction Word Variable Field, as stated above these bits comprise sub-fields common to Formats A through E. Bits 49 to 51 inclusive comprise a Memory Control (MEM) field for commanding specific
operations by MEM 10112. Bits 52 to 55 inclusive comprise a Memory Destination (MD) field specifying JP 10114 destination for data read from MEM 10112. MD field is used in conjunction with MEM field in certain MEM 10112 operations, for example read
requests for reading data from MEM 10112 to JP 10114.

Bit 56 is a Break Point Branch request bit, as previously described.

Bits 57 to 63 inclusive comprise a Device Command (DEVCMD) field used, in general, for control of FU 10120 operation. For example, DEVCMD field is used to control PC 10234, MEM 10112, ATC 10228, NC 10226, and INSTB 20262 operations.

Having described sub-fields of Bits 49 to 63 inclusive of Microinstruction Word Variable Field, Bits 64 to 80 inclusive of Microinstruction Word Variable Field for Formats A, B, C, D, and E will be described next below.

Bits 64 to 66 inclusive of Microinstruction Word Variable Field comprise a sub-field, as stated above, to Formats A, B, C, and D. Bits 64 to 66 comprise a Next Microinstruction Word Address Control (NAC) field. NAC field selects next source of
microinstruction address to FUSITT 11012 by, in part, controlling operation of SITTNAS 20286. In particular, NAC field may select FUDISF 24218 and FUDISENC 24219, or AF 24220, or RCWS 10358, or mPC 20276, or BRCASE 20278, or EVENT 20284, or JAM input
from NC 10226.

Referring now solely to Format A, Bits 67 to 71 inclusive comprise a Test Condition (TEST) field. TEST field contains certain bits specifying what conditions of CS 10110 operation will result in setting of, as true or false, as previously
described and will be described in a following description of MCW1 20290, MCW0 20292, and RCWS 10358. Bit 72 is associated with TEST field and specifies whether a given test defined by Bits 67 to 71 is for a true or false condition of the condition
tested for.

Bits 73 to 80 inclusive of Format A Microinstruction Word Variable Field comprise an eight bit Literal Select Offset (SOFF) field utilized in microinstruction Branch Operations. SOFF field may be provided as BLIT input of BRCASE 20278. As
described above, BLIT specifies microinstruction Branch Operations by determining a microinstruction address offset relative to address of a currently executing microinstruction.

Referring to microinstruction word Format B, as described above Bits 64 to 66 inclusive comprise NAC subfield of Microinstruction Word Variable Field. Bits 67 to 71 inclusive comprise a Secondary Next Address Control (SNAC) subfield used in
conjunction with NAC subfield. NAC subfield may specify, as described above, AF 24220 or FUDISF 24218 as source of next microinstruction address. SNAC field may then specify an SDP, or Address of an initial microinstruction sequence, within AF 24220 or
FUDISF 24218. SNAC subfield thereby, in conjunction with NAC subfield, allows resolve and evaluate addressing of AF 24220 and FUDISF 24218.

As indicated in FIG. 250, Bit 72 is not utilized in Format B.

Bits 73 to 80 inclusive of Format B are utilized, as in Format A as an eight bit literal SOFF field for control of microinstruction Branch Operations.

Referring to Format B, again Bits 64 to 66 inclusive comprise an NAC subfield. Bits 67 to 80 inclusive comprise a 14 bit Literal Select Offset (14SOFF) field used, as in SOFF subfields of Formats A and B, to control microinstruction Branch
Operations. 14SOFF subfield is used in Format B to specify branch microinstruction addresses relative to microinstruction address of a currently executing microinstruction for Long Microinstruction Branches. 14SOFF subfield may be used as BLIT input to
BRCASE 20278.

Referring to Formats E & F, Formats E and F comprise microinstruction word formats providing literal fields. As previously described, Bits 49 to 63 inclusive of Format E include the same subfields as in Formats A, B, C, and D. Bit 64 of Format E
is not used and Bits 65 to 80 inclusive are utilized as a 16 bit Literal (LIT16) field. In Format F, Bits 49 to 63 do not contain subfields, and Bits 49 to 80 inclusive of Format F are utilized as a 32 bit Literal (LIT32) field.

Referring finally to Format G, as described above Format G is unique from Formats A through F and is used primarily in conjunction with EU 10122 operations. In particular, Format G, which utilizes the same Base Field as Formats A through F,
utilizes Variable Field to allow direct addressing of EUSITT in EU 10122. Bits 49 to 51 inclusive of Format G Variable Field is similar to Bits 49 to 51 inclusive of Formats A to E Variable Field and comprising an MEM subfield for control of MEM 10112
operations. Bits 52 to 55 inclusive and Bits 73 to 80 inclusive of Format G Variable Field together comprise a 12 bit EU 10122 EUSITT Address (EADR) subfield allowing direct addressing of EU 10122's EUSITT. Bits 52 to 55 contain the four most
significant address bits of EADR field while Bits 73 to 80 include the eight least significant bits of EADR subfield address. Bits 56 to 72 inclusive of Format G Variable Field are, as indicated in FIG. 250, not utilized in a present embodiment of CS
10110.

Formats A through F are recognized and distinguished from one another by interpretation of certain fields therein. For example, presence of an NAC sub-field is recognized by FUCTL 20214, as indicating that either Format A, B, C, or D is being
utilized. Certain bits within NAC sub-field of these formats are then interpreted to determine which of Formats A through D is currently present. Absence of an NAC sub-field indicates that Formats E, F, or G are present. Formats E and F are
distinguished by L subfield of Microinstruction Word Base Field, that is L subfield indicates whether a 16 or 32 bit literal field is present. Format G is distinguished by being utilized only in conjunction with certain other microinstructions
pertaining to EU 10122 and which indicate that a Format G microinstruction word will appear. In summary, microinstruction word Formats A through G, by concatenating a Base Field and a Variable Field, thereby provide a range of microinstruction word
formats for efficiently providing microinstruction control of CS 10110.

Having described structure and operation of FUCTL 20214 with regard to microinstruction control of CS 10110, both with regard to interpretation of SINs and Name syllables, and with regard to certain of CS 10110's internal mechanisms, such as
EVENT 20284, certain other FUCTL 20214 operations regarding CS 10110's internal mechanisms will be described next below. These other portions of FUCTL 20214 will include certain aspects of RCWS 10358, MCW1 20290 and MCW0 20292, REG 20288, TIMERS 20296,
and FUINT 20298.

d.d. CS 10110 Internal Mechanism Control

Associated with SR's 10362, the stack mechanism area of GRF 10354, are two CS 10110 control structures primarily associated with operation of CS 10110's internal mechanisms. A first of these referred to as Machine Control Block, describes
current execution environment of JP 10114 microprograms, that is, JP 10114 microinstruction sequences. Machine Control Block is comprised of two information words residing in MCW1 20290 and MCW0 20292. These Machine Control Words contain all control
state information necessary to execute JP 10114's current microprogram. Second control structure is a portion of RCWS 10358, which as previously described parallels the structure of SR's 10362. Each register frame on MIS 10368 or MOS 10370 has, with
exception of Top (Current) Register Frame, associated with it a Return Control Word (RCW) residing in RCWS 10358. RCWs are created when MIS 10362 or MOS 10370 register frames are pushed, that is moved onto MIS 10368 or MOS 10370 due to creation of a new
Current Register Frame. A current RCW does not exist in a present embodiment of CS 10110.

RCWS 10358 will be described first next below, followed by Machine Control Block.

a.a.a. Return Control Word Stack 10358 (FIG. 251)

Referring to FIG. 251, a diagramic representation of a RCWS 10358 RCW is shown. As previously described, RCWS 10358 RCWs contain information necessary to reinitiate or continue execution of a microinstruction sequence if execution of that
sequence has been discontinued. Execution of a microinstruction sequence may be discontinued due to a requirement to service a CS 10110 Event, as described above, or if that microinstruction sequence has called for execution of another microinstruction
sequence, as in a Branch or Case Operation.

As shown in FIG. 251, each RCW may contain, for example, 32 bits of information. RCW Bits 16 to 31 inclusive are primarily concerned with storing current microinstruction address of microinstruction sequences which have been discontinued, as
described above. Bits 17 to 31 inclusive contain microinstruction sequence return address. Return address is, as previously described, address of the microinstruction currently being executed of a microinstruction sequence whose execution has been
discontinued. When JP 10114 returns from servicing of an Event or execution of a called microinstruction sequence, return address is provided from RCWS 10358 to SITTNAS 20286 and through CSADR Bus 20204 to FUSITT 11012 as next microinstruction address
to resume execution of that microinstruction sequence. Bit 16 of an RCW contains a state bit indicating whether the particular microinstruction referred to by return address field is the first microistruction of a particular SOP. That is, Bit 16 of an
RCW stores CS 10110 State FM.

Bits 8 to 15 inclusive of an RCW contain information pertaining to current condition code of JP 10114 and to pending Interrupt Requests. In particular, Bit 8 contains a condition code bit which, as previously described indicates whether a
particular test condition has been met. RCW Bit 8 is thereby, as previously described, a means by which JP 10114 may pass results of a particular test from one microinstruction sequence to another Bits 9 to 15 inclusive of an RCW contain information
regarding currently pending Interrupts. These Interrupts have been previously discussed, in general, with reference to EVENT 20284. In particular, RCW Bit 9 contains pending state of Illegal EU 10122 Dispatch Interrupt Requests; RCW Bit 10 contains
pending state of Name Trace Trap Request; RCW Bit 11 contains pending state of Store Back Interrupt Request; RCW Bit 12 contains pending state of Memory Repeat Interrupt Request; RCW Bit 13 contains pending state of SOP Trace Trap Request; RCW Bit 14
contains pending state of Microtrace Trap Request; and, RCW Bit 15 contains pending state of Micro-Break Point Trap Request. Interrupt Handling microinstruction sequence which require use of CS 10110 mechanisms containing information regarding pending
Interrupts must, in general, save and store that information. This save and restore operation is accomplished by use of Bits 9 to 15 of RCWS 10358's RCWs. Upon entry to an Interrupt Handling microinstruction sequence, these bit flags are set to
indicate Interrupts which were outstanding at time of entry to that microinstruction sequence. Because these bits are used to initiate Interrupt Request upon returns, pending Interrupts may be cancelled by resetting appropriate bits of Bits 9 to 15 upon
return. This capability may be used to implement Microinstruction Trace Traps, previously described.

As indicated in FIG. 251, RCW Bits 0 to 7 are not utilized in a present embodiment of CS 10110. RCW bits 0 to 7 are not implemented in a present embodiment of CS 10110 but are reserved for future use.

As previously described, RCWs may be writtten into or read from RCWS 10358 from JPD Bus 10142. This allows contents of RCWS 10358 to be initially written as desired, or read from RCWS 10358 to MEM 10112 and subsequently restored as required for
swapping of processes in CS 10110.

b.b.b. Machine Control Block (FIG. 252)

As described above, FUCTL 20214's Machine Control Block is comprised of a Machine Control Word 1 (MCW1) and a Machine Control Word 0 (MCW0). MCW1 and MCW0 reside, respectively, in Registers MCW1 20290 and MCW0 20292. MCW1 and MCW0 described the
current execution environment of FUCTL 20214's current microprogram, that is the microinstruction sequence currently being executed by JP 10114.

Referring to FIG. 252, diagramic representations of MCW0 and MCW1 are shown. As indicated therein, MCW0 and MCW1 may each contain, for example, 32 bits of information regarding current microprogram execution environment.

Referring to MCW0, MCW0 includes 6 execution environment subfields. Bits 0 to 3 inclusive contain a Top Of Stack Counter (TOSCNT) subfield which is a pointer to Current Frame of accelerated Microstack (MIS) 10368. TOSCNT field is initially set
to point to Frame 1 of MIS 10368. Bits 4 to 7 inclusive comprise a Top of Stack -1 Counter (TOS-1CT) subfield which is a pointer to Previous Frame of accelerated MIS 10368, that is to the MIS 10368 frame proceeding that pointed by TOSCNT subfield.
TOS-1CNT subfield is initially set to Frame 0 of MIS 10368. Bits 8 to 11 inclusive comprise a Bottom of Stack Counter (BOSCNT) subfield which is a pointer to Bottom Frame of accelerated MIS 10368. BOSCNT subfield is initially set to point to Frame 1 of
MIS 10368. TOSCNT, TOS-1CNT, and BOSCNT subfields of MCW0 may be read, written, incremented and decremented under microprogram control as frames are transferred between MIS 10368 and a SS 10336.

Bits 17 to 23 inclusive and Bits 24 to 31 inclusive of MCW0 comprise, respectively, Page Number Register (PNREG) and Repeat Counter (REPCTR) subfields which, together, comprise a microinstruction address pointing to a microinstruction currently
being written into FUSITT 11012.

Bits 12 to 15 inclusive of MCW0 comprise an Egg Timer (EGGT) subfield which will be described further below with respect to TIMERS 20296. Bit 16 of MCW0 is not utilized in a present embodiment of CS 10110.

Referring to MCW1, MCW1 is comprised of four subfields. Of the 32 bits comprising MCW1, Bits 0 to 15 inclusive and Bits 24 and 25 are not utilized in a present embodiment of CS 10110. Bit 16 is comprised of a Condition Code (CC) subfield
indicating results of certain test conditions in JP 10114. As previously described CC subfield is automatically saved and restored in RCWS 10358 RCW's.

MCW0 and MCW1 has been described above as if residing in registers having individual, discrete existence, that is MCW1 20290 and MCW0 20292. In a present embodiment of CS 10110, MCW1 20290 and MCW0 20292 do not exist as a unified, discrete
register structure but are instead comprised of individual registers having physicl existence in other portions of FUCTL 20214. MCW1 20290 and MCW0 20292, and MCW1 and MCW0, have been so described to more distinctly represent the structure of
information contained therein. In addition, this approach has been utilized to illustrate the manner by which current JP 10114 execution state may be controlled and monitored through JPD Bus 10142. As indicated in FIG. 202, MCW1 20290 and MCW0 20292
have outputs connected to JPD Bus 10142, thus allowing current execution state of JP 10114 to be read out of FUCTL 20214. Individual bits or subfields of MCW0 and MCW1 may, as previously descibed, be written by microinstruction control provided by
FUSITT 11012. In a present physical embodiment of CS 10110, those registers of MCW0 20292 containing subfields TOSCNT, TOS-1CNT, and BOSCNT reside in RAG 20288. Those portions of MCW0 20292 containing subfield EGGT reside in TIMERS 20296. MCW0 20292
registers contain PNREG and REPCTR subfields are physically comprised of REPCTR 20280 and PNREG 20282. In MCW1 20290, CC subfield exists as output of FUCTL 20214 test circuits. Those MCW1 20290 registers containing IM, IR, and TTE subfields reside
within EVENT 20284.

Having described FUCTL 20214 structure and operation as regards RCWS 10358, MCW1 20290 and MCW0 20292, FUCTL 20214, RAG 20288 will be described next below.

c.c.c. Register Address Generator 20228 (FIG. 253)

Referring to FIG. 253, a partial block diagram of RAG 20228, together with diagramic representation of GRF 10354, BIAS 20246 and RCWS 10358, is shown. As previously described, JP 10114 register and stack mechanisms include General Register File
(GRF) 10354. BIAS 20246, and RCWS 10358. GRF 10354 is, in a present embodiment of CS 10110, a 256 word by 92 bit wide array of registers. GRF 10354 is divided horizontally to provide Global Registers (GRs) 10360 and Stack Registers (SRs) 10362, each
of which contains 128 of GRF 10354's 256 registers. GRF 10354, that is both GRs 10360 and SRs 10362, is divided vertically into three vertical sections designated as AONGRF 20232, OFFGRF 20234, and LENGRF 20236. AONGRF 20232, OFFGRF 20234, and LENGRF
20236 are, respectively, 28 bits, 32 bits, and 32 bits wide. GRs 10360 is utilized as an array of 128 individual registers, each register containing one 92 bit word. SRs 10362 is structured and utilized as an array of 16 register frames wherein each
frame contains eight registers and each register contains one 92 bit wide word. Eight of SR 10362's frames are utilized as Microstack (MIS) 10362 and the remaining eight of SR 10362's frames are utilized as Monitor Stack (MOS) 10370. For addressing
purposes only, as described further below, GRs 10360 is regarded as being structured in the same manner as SRs 10362, that is as 16 frames of eight registers each.

BIAS 20246, as previously describe, is a register array within BIAS 20246. BIAS 20246 contains 128 six bit wide registers, or words, and operates in parallel with and is addressed in parallel with SR 10362 portion of GRF 10354. RCWS 10358 is,
as previously described, an array of 16 registers, or words, wherein each register contains one 32 bit RCW. RCWS 10358 is structured and operates in parallel with SRs 10362 with each RCWS 10358 register corresponding to a SR 10362 frame of eight
registers. As described below, RCWS 10358 is addressed in parallel with SR 10362's frames.

Source and Destination Register Addresses (SDAR) for selecting a GRF 10354 register to be, respectively, read from or written to are provided by RAG 20288. As described above BIAS 20246 operates and is addressed in parallel with SR 10362 portion
of GRF 10354, that is parallel with SRs 10362. BIAS 20246 registers are thereby connected to and in parallel with address inputs of SRs 10362 and are addressed concurrently with GRs 10360. Registers RCWS 10358 also operate and are addressed in parallel
with SRs 10362. Address inputs of RCWS 10358's registers are thereby connected in parallel with address inputs of SR 10362's registers.

RAG 20288's address inputs to GRF 10354, and to BIAS 20246 and RCWS 10358, may select registers therein to be either source registers, that is registers providing data, or destination registers, that is registers receiving data. RAG 20288's
address outputs are designated as output Source and Destination Register Address (SDADR) of RAG 20288. RAG 20288's SDADR output is connected to address input of register comprising GRF 10354, BIAS 20246, and RCWS 10358. As described above, SRs 10362
are structured as 16 frames of 8 registers per frame and RCWS 10358 is structured as a corresponding 16 frames of one register per frame. GRF 10354 and BIAS 20246 are structured and utilized as single registers but, for addressing purposes, are regarded
as being comprised of 16 frames of 8 registers per frame. Each SDADR output of RAG 20288 is an 8 bit word wherein the most significant bit indicates whether the addressed register, either a Source or a Destination Register, reside in GRs 10360 or within
SRs 10362, BIAS 20246, and RCWS 10358. The four next most significant bits comprise a frame select field for selecting one of 16 frames within GRs 10360 or within SRs 10362, BIAS 20246, and RCWS 10358. The three least significant bits comprise a
register select field selecting a particular register within the frame selected by frame select field.

Within a single system clock cycle, SDADR output of RAG 20288 may select a source register and data may be read from that source register, or SDADR output may select a destination register and data may be written into that destination register.
As previously described, each JP 10114 microinstruction requires a minimum of two-system clock cycles for execution, that is at first clock cycle in State M0 and a second clock cycle in State M1. During a single microinstruction therefore, a source
register may be selected and data read from that source register, and a destination register selected and data written into that destination register. Certain operations, however, may require more than one microinstruction for execution. For example, a
read-modify-write operation wherein data is read from a particular register, modified, and written back into that register may require two or more microinstructions for execution.

Referring first to RAG 20288 structure, RAG 20288 includes MISPR 10356. MISPR 10356 includes Top Of Stack Counter (TOSCNT) 25310, Top Of Stack-1 Counter (TOS-1CNT) 25312, and Bottom Of Stack Counter (BOSCNT) 25314. Contents of TOSCNT 25310,
TOS-1CNT 25312 and BOSCNT 25314 are respectively, pointers to Current, Previous, and Bottom frames of SRs 10362, that is, to MIS 10368. As will be described below, these pointers are also utilized to address MOS 10370. TOSCNT 25310, TOS-1CNT 25312, and
BOSCNT 25314 are each four bit binary counters comprised, for example, of SN74S163s.

In addition to SRCFADR and DSTFADR outputs of ADRSRC 25316 and DSTADR 25318, SDADRMUX 25322 receives microinstruction word SRC and DST subfield inputs from microinstruction outputs of FUSITT 11012. As previously described, SRC subfield is a 3
bit number designating a source register, that is, a source register within a frame selected by SRCFADR DST is similarly a 3 bit number selecting a destination register within a frame indicated by DSTFADR. SRC subfield input to SDADRMUX 25322 is
concatenated with SRCADR 25316 to respectively comprise, as described above, register and frame fields of a source register SDADR output of SDADRMUX 25322. Similarly, DST subfield is concatenated with DSTFDADR output of DSTADR 25318 to comprise,
respectively, register and frame subfields of a destination register SDADR output of SDADRMUX 25322. Selection between source and destination register address inputs to SDADRMUX 25322, to generate a corresponding source of destination register SDADR
output of SDADRMUX 25322 is controlled by microinstruction control inputs (not shown for clarity of presentation) connected to control inputs of SDADRMUX 25322. RDWS 25324 is a PROM decoding MD field from microinstruction words during reads from MEM
10112 and provides register select field of destination register address and selects one of the pointers as frame select field.

An Event output of SEM 25320 is connected to an input of EVENT 20284, previously described. SRCADR 25316, DSTADR 25318, and SDADRMUX 25322, as will be described further below, operate as multiplexers and may be comprised, for example, of
SN74S153s.

Having described structure and organization of GRF 10354, BIAS 20246, and RCWS 10358, and structure of RAG 20288, operation of RAG 20288 to generate Source of Destination Register Address outputs SDADR will be described next below Addressing of
JP 10114's stack mechanism, comprising SRs 10362 and RCWS 10358, will be described first, followed by addressing of GRs 10360 and BIAS 20246.

SR 10362 portion of GRF 10354, RCWS 10358, and BIAS 20246 are addressed by Current, Previous, and Bottom Frame Pointers contained, respectively, in TOSCNT 25310, TOS-1CNT 25312, and BOSCNT 25314. Current, Previous, and Bottom Pointers comprise
frame select fields of SDADRMUX 25322. As previously described, Current, Previous and Bottom Pointer outputs of TOSCNT 25310 to BOSCNT 25314 are provided as inputs of SRCADR 25316 and DSTADR 25318. Microinstruction word RS subfield to control input of
SRCADR 25316 selects either Current, Previous or Bottom Pointer input of SRCADR 25316 to comprise SRCFADR output of SRCADR 25316, that is to be frame select field of source register address. Similarly, microinstruction word RD subfield to control input
of DSTADR 25318 concurrently selects either Current, Previous, or Bottom Pointer inputs of DSTADR 25318 to comprise DSTADR 25318's concurrently selects either Current, Previous, or Bottom Pointer inputs of DSTADR 25318 to comprise DSTADR 25318s DSTFADR
output, that is frame select field of destination register address. As described above, SRCFADR and DSTFADR are provided as inputs to SDADRMUX 25322. Microinstruction word SRC and DST subfield inputs to SDADRMUX 25322 concurrently determine,
respectively, source and destination registers within source and destination frames specified by SRCFADR and DSTFADR. SDADRMUX 25322 then, operating under microinstruction control, selects either SRCFADR and SRC to comprise SDADR output to SR 10362 as a
source register address or selects DSTFADR and DST as SDADR output specifying a destination register address. By microinstruction control of SRCADR 25316, DSTADR 25318, and SDADRMUX 25322, a CS 10110 microprogram may select a source frame and register
within SR 10362 and simultaneously specify a possible different destination frame and register within SR 10362. All possible combinations of source frame and register and destination frame and register in GRs 10360, SRs 10362, BIAS 20246, and RCWS 10358
are valid.

Control of SRCADR 25316, DSTADR 25318, and SDADRMUX 25322 in addressing SR 10362 portion of GRF 10354, and RCWS 10358, is controlled, in part, by current CS 10110 state. Pertinent CS 10110 operating states, previously described, are State M1 and
State RW. When CS 10110 is in neither State RW nor State M1, SR 10362 is addressed through SRCADR 25316 and microinstruction word SRC subfield, that is SR 10362 and RCWS 10358 are provided with source register addresses when CS 10110 is in neither RW
nor M1 States. When CS 10110 enters State M1, SR 10362 and RCWS 10358 is addressed through DSTADR 25318 and by microinstruction word DST subfield. That is, SR 10362 and RCWS 10358 are provided with destination register addresses during State M1.
Similarly, SR 10362 and RCWS 10358 are provided with destination register addresses when CS 10110 is operating in State RW, that is when data is being read from MEM 10112 and written into SR 10362 or RCWS 10358. In this case, however, low order 3 bits
of destination register address, that is register select field, are provided by RDS 25324, which decodes microinstruction word subfield MD (Memory Destination). RDS 25324 also provides a control input that DSTADR 25318 to select one of Current,
Previous, or Bottom Pointers from MISPR 10356 to comprise frame select field of destination register address.

As stated above, frame select field of source and destination register addresses are provided from TOSCNT 25310, TOS-1CNT 25312, and BOSCNT 25314. As described above, the most significant bit of source and destination register address are forced
to logic 1 or logic 0, depending upon whether GR 10360 or SR 10362, BIAS 20246, and RCWS 10358 are being addressed. Contents of TOSCNT 25310 to BOSCNT 25314, that is Current, Previous, and Bottom Pointers, are controlled by microinstruction control
outputs of FUSITT 11012. Current and Previous Pointers change as stacks are "pushed" or "popped" to and from MIS 10368 as JP 10114 performs, respectively, calls and returns. Similarly, Current, Previous and Bottom Pointers will be incremented or
decremented as MIS 10368 frames are transferred between MIS 10368 and MEM 10112, as previously described with respect to CS 10110's Stack Mechanisms.

Referring first to Current and Previous Pointer operation, Current and Previous Pointers in TOSCNT 25310 and TOS-1CNT 25312 are initially set, respectively, to point to Frames 1 and 0 of MIS 10368 by being loaded from JPD Bus 10142. TOSCNT 25310
and TOS-1CNT 25312 are enabled to count when two conditions are met. First condition is dependent upon current operating state of CS 10110. TOSCNT 25310 and TOS-1CNT 25312 will be enabled to count during last system clock cycle of CS 10110 operating
States M1 or AB. Second condition is dependant upon whether JP 10114 is to execute a call or return. TOSCNT 25310 and TOS-1CNT 25312 may be enabled to count if a current microinstruction indicates JP 10114 is to execute a call or return, or if CS 10110
is exiting State AB as exit from State AB is an implied call operation. Both a call and an implied call, that is exit from State AB, will cause TOSCNT 25310 and TOS-1CNT 25312 to be incremented. A return will cause TOSCNT 25310 and TOS-1CNT 25312 to be
decremented.

Referring to BOSCNT 25314, Bottom Frame Pointer is initially loaded from JPD Bus 10142 to point to MIS 10368 Frame 1. Again, incrementing or decrementing of BOSCNT 25314 is dependant upon CS 10110 operating state and operation to be performed.
BOSCNT 25314 is enabled to count upon exiting from State M1. In addition, DEVCMD subfield of a current microinstruction word must indicate that BOSCNT 25314 is to be incremented or decremented. BOSCNT 25314 will be incremented or decremented upon exit
from State M1 as indicated by microinstruction word DEVCMD subfield.

SEM 25320 monitors relative values of Current and Bottom Pointers residing in TOSCNT 25310 and BOSCNT 25314 and provides outputs to EVENT 20284 for purposes of controlling operation of MI 10368 and MOS 10370. SEM 25320 is comprised of a Read
Only Memory, for example 93S427s, receiving Current and Bottom Pointers as inputs. SEM 25320 detects 3 Events occurring in operation of TOSCNT 25310 and BOSCNT 25314, and thus in operation of MIS 10368 and MOS 10370. First, SEM 25320 detects an MIS
10368 Stack Overflow. This Event is indicated if the present value of Current Frame Pointer is greater than 8 larger than the present value of Bottom Frame Pointer. Second, SEM 25320 detects when MIS 10368 contains only one frame of information. This
event is indicated if the value of Current Frame Pointer is equal to the value of Bottom Frame Pointer. In this case, the previous frame of MIS 10368 resides in MEM 10112 and must be fetched from MEM 10112 before a reference to the previous stack frame
may be made. Third, SEM 25320 detects when MIS 10368 and MOS 10370 are full. This Event is indicated if the present value of Current Frame Pointer is 16 larger than the present value of Bottom Frame Pointer. When this Event occurs, any further attempt
to write a frame onto MIS 10368 or MOS 10370 will result in a MOS 10370 Stack Overflow. EVENT 20284 responds to these Events indicated by SEM 25320 by initiating execution of an appropriate Event Handling microinstruction sequence, as previously
described. It should be noted that MIS 10368 and MOS 10370 are addressed in the same manner, that is through use of Current, Previous and Bottom Frame Pointers and certain microinstruction word subfields. Primary difference between operation of MIS
10368 and MOS 10370 is in the manner in which stack overflows are handled. In the case of MIS 10368, stack frames are transferred between MIS 10368 and MEM 10112 so that MIS 10368 is effectively a bottomless stack. MOS 10370, however, contains a
maximum of 8 stack frames, in a present embodiment of CS 10110, so that no more than eight Events may be pushed onto MOS 10370 at a given time.

GR 10360 is addressed in a manner similar to SR 10362, BIAS 20246, and RCWS 10358, that is through ADRSRC 25316, DSTADR 25318, and SDADRMUX 25322. Again, register select fields of source and destination register addresses are provided by
microinstruction word SRC and DST subfields. Frame select field of source and destination register addresses is, however, specified by microinstruction word CONEXT subfield. In this case, microinstruction word RS and RD subfields specify that frame
select fields of source and destination register addresses are to be provided by CONEXT subfield. Accordingly, ADRSRC 25316 and DSTADR 25318 provide CONEXT subfield as SRCFADR and DSTFADR inputs to SDADRMUX 25322.

Having described structure and operation of RAG 20288, TIMERS 20296 will be described next below.

Referring first to INTTMR 25410, a primary function of INTTMR 25410 is to maintain CS 10110 architectural time as previously described with reference to FIG. 106A and previous descriptions of CS 10110 UID addressing. As described therein, a
portion of all UID addresses generated by all CS 10110 systems is an Object Serial Number (OSN) field. OSN field uniquely defines each object created by operation of or for use in a particular CS 10110. OSN field of an object's UID is, in a particular
CS 10110, generated by determining time of creation of that object relative to an arbitrary historic starting time common to all CS 10110 systems. That time is maintained within a MEM 10112 storage space, or address location, but is measured by
operation of INTTMR 25410.

INTTMR 25410 is a 28 bit counter clocked by a 110 Nano-Second Clock (11ONSCLK) input and is enabled to count by a one MHZ Clock Enable input (CLK1MHZENB). INTTMR 25410 may thereby be clocked at a one MHZ rate to measure one microsecond
intervals. Maximum time interval which may be measured by INTTMR 25410 is thereby 268.435 seconds.

As indicated in FIG. 254, INTTMR 25410 may be loaded from and read to JPD Bus 10142. In normal operation, the MEM 10112 location containing architectural time for a particular CS 10110 will be loaded with current architectural time at time of
start up of that particular CS 10110. INTTMR 25410 will concurrently be loaded with all zeros. Thereafter, INTTMR 25410 will be clocked at one microsecond intervals. Periodically, when INTTMR 25410 overflows, architectural time stored in MEM 10112
will be accordingly updated. At any time, therefore, current architectural time may be determined, down to a one microsecond increment, by reading architectural time from the previous updated architectural time stored in MEM 10112 and elapsed interval
since last update of architectural time from INTTMR 25410. In the event of a failure of CS 10110, architectural time in MEM 10112 and INTTMR 25410 may be saved in MEM 10112 by reading elapsed intervals since last architectural time update. When normal
CS 10110 operation resumes, INTTMR 25410 may be reloaded with a count reflecting current architectural time. As indicated in FIG. 254, INTTMR 25410 is loaded from JPD Bus 10142 when INTTMR 25410 is enabled by a Load Enable input (LDE) provided from DP
10118.

Referring to EGGTMR 25412, certain CS 10110 Events, in particular Asychronous Events previously described with reference to EVENT 20284, are received or acknowledged by EVENT 20284 only at conclusion of State M1 of first microinstruction of an
SOP. As certain CS 10110 microinstructions have long execution times, these Asynchronous Events may be subjected to an extended latency, or waiting, interval before being serviced EGGTMR 25412, in effect, measures latency time of pending Asychronous
Events and provides an output to EVENT 20284 if a predetermined maximum latency time is exceeded.

As indicated in FIG. 254, EGGTMR 25412 is clocked by a 110 Nano-Second Clock input (11ONSCLK). EGGTMR 25412 is initially set to zero by load input (LDZRO) at end of State M1 of the first microinstruction of each SOP executed by CS 10110, or when
specifically instructed so by DEVCMD subfield of a microinstruction word. EGGTMR 25412 is incremented when enabled by Clock Enable (CLKENB) input from EGGENB 25416. There are two conditions necessary for EGGTMR 25412 to be incremented. First condition
is occurrence of an Asychronous Event, which is indicated by input ASYEVNT to EGGENB 25416 from EVENT 20284 Second condition is that 16 or more microseconds have elapsed since last increment of EGGTMR 25412. This interval is measured by an output from
fourth bit of INTTMR 25410 which, as shown in FIG. 254, is connected to an input of EGGENB 25416. EGGTMR 25412 is a four bit counter and will thereby overflow and generate output OVRFLW to EVENT 20284 256 microseconds after beginning of an SOP if an
Asychronous Event has occurred and if at least 16 microseconds have elapsed since start of that SOP EGGTMR 25412 thereby insures a maximum service latency of 256 microseconds for Asychronous Events.

e.e.e. Fetch Unit 10120 Interface to Execute Unit 10122

Finally, as previously described FU 10120's interface to EU 10122 is primarily comprised of EUDIS Bus 20206, for providing EUDPs to EU 10122's EUSITT, and FUINT 20298. Operation of EUSDT 20266 and EUDIS Bus 20206 has been previously described
and will be described further in a following description of EU 10122. FUINT 20298 is primarily concerned with generating Event Requests for conditions signalled from EU 10122 so that these Events may be serviced. In this regard, FUINT 20298 is
primarily comprised of gates receiving Event Requests from EU 10122 and providing corresponding outputs to EVENT 20284. Another interface function performed by FUINT 20298 is generation of a "transfer complete" signal generated by FU 10122 and provided
to EU 10122 to assert that a EU 10122 result read from EU 10122 to FU 10120 has been received. This transfer complete signal indicates to EU 10122 that EU 10122's result register, described in a following description of EU 10122, is available for
further use by EU 10122. This transfer complete signal is generated by an output of FUSITT 11012 as part of microinstruction sequences for transferring data from EU 10122 to FU 10120 or MEM 10112.

Having described structure and operation of FU 10120, including DESP 20210, MEMINT 20212, and FUCTL 20214, the structure and operation of EU 10122 will be described next below.

C. Execute Unit 10122 (FIGS. 203, 255-268)

As previously described, EU 10122 is an arithmetic processor capable of executing integer, packed and unpacked decimal, and single and double precision floating point arithmetic operations. A primary function of EU 10122 is to relieve FU 10120
of certain arithmetic operations, thus enhancing efficiency of CS 10110.

Transfer of operands from MEM 10112 to EU 10122 is controlled by FU 10120, as is transfer of results of arithmetic operations from EU 10122 to FU 10120 or MEM 10112. In addition, EU 10122 operations are initiated by FU 10120 by EU 10122 Dispatch
Pointers invited to EU 10122 by EUSDT 20266. EU 10122 Dispatch Pointers may initiate both arithmetic operations required for execution of SINs and certain EU 10122 operations assisting in handling of CS 10110 events. As previously described, EU 10122
Dispatch Pointers are translated into sequences of microinstructions for controlling EU 10122 by EU 10122's EUSITT which is similar in structure and operation to FUSITT 11012. As will be described further below, EU 10122 includes a command queue for
receiving and storing sequences of EU 10122 Dispatch Pointers from FU 10120. In addition, EU 10122 includes a general register file, or scratch pad memory, similar to GRF 10354. EU 10122's general register file is utilized, in part, in EU 10122 Stack
Mechanisms similar to FU 10120's SR's 10362.

Referring to FIG. 203, a partial block diagram of EU 10122 is shown. EU 10122's general structure and operation will be described first with referene to FIG. 203. Then EU 10122's structure and operation will be described in further detail with
aid of subsequent figures which will be presented as required.

EUIO 20312 receives operands, or data, from MEM 10112, translates those operands into certain formats most efficiently used by EU 10122. EUIO 20312 receives results of EU 10122's operations and translates those results into formats to be
returned to MEM 10112 or FU 10120, and presents those results to MEM 10112 and FU 10120.

MULT 20314 and EXP 20316 are arithmetic units for performing arithmetic manipulations of EU 10122 operations. In particular, EXP 20316 performs operations with respect to exponent fields of single and double precision floating point operations.
MULT 20314 performs arithmetic manipulations with respect to mantissa fields of single and double precision floating point operations, and arithmetic operations with regard to integer and packed decimal Operations. MULTCNTL 20318 controls and
coordinates operation of MULT 20314 and EXP 20316 and prealignment and normalization of mantissa and exponent fields in floating point operations. Finally, TSTINT 20320 performs certain test operations with regard to EU 10122's operations, and is the
interface between EU 10122 and FU 10120.

a. General Structure of EU 10122

1. Execute Unit I/O 20312

Referring first to EUIO 20312, EUIO 20312 includes Operand Buffer (OPB) 20322, Final Result Output Multiplexer (FROM) 20324, and Exponent Output Multiplexer (EXOM) 20326. OPB 20322 has first and second inputs connected, respectively, from MOD
Bus 10144 and JPD Bus 10142. OPB 20322 has a first output connected to a first input of Multiplier Input Multiplexer (MULTIM) 20328 and MULT 20314. A second output of OPB 20322 is connected to first inputs of Inputs Selector A (INSELA) 20330 and
Exponent Execute Unit General Register File Input Multiplexer (EXRM) 20332 in EXP 20316.

FROM 20324 has an output connected to JPD Bus 10142. A first input of FROM 20324 is connected from output of Multiplier Execute in General Register File Input Multiplexer (MULTRM) 20334 and MULT 20314. A second input of FROM 20324 is connected
from output of Final Result Register (RFR) 20336 of MULT 20314. EXOM 20326 has an output connected to JPD Bus 10142. EXOM 20326 is a first input connected from output of Scale Register (SCALER) 20338 of EXP 20316. EXOM 20326 has second and third
inputs connected from outputs of, respectively, Next Address Generator (NAG) 20340 and Command Queue (COMQ) 20342 of EUCL 20310.

2. Execute Unit Control Logic 20310

Referring to EUCL 20310, EUCL 20310 includes NAG 20340, COMQ 20342, Execute Unit S Interpreter Table (EUSITT) 20344, and Microinstruction Control Register and Decode Logic (mCRD) 20346. COMQ 20342 has an input connected from EUDIS Bus 20206 for
receiving SDPs from EUSDT 20266. COMQ 20342 has, as described above, a first output connected to a third input of EXOM 20326, and has a second output connected to an input of NAG 20340. NAG 20340 has, as described above, a first output connected to
second input of EXOM 20326. NAG 20340 has a second output connected to a first input of EUSITT 20344. As previously described, EUSITT 20344 corresponds to FUSITT 11012 and stores sequences of microinstructions for controlling operation of EU 10122 in
response to EU 10122 Dispatch Pointers from FU 10120. EUSITT 20344 has a second input connected from JPD Bus 10142 and has an output connected to input of mCRD 20346. mCRD 20346 includes a register and logic for receiving and decoding microinstructions
provided by EUSITT 20344. In addition to an input from EUSITT 20344, mCRD 20346 has first outputs providing decoded microinstruction control signals to all parts of EU 10122. mCRD 20346 also has a second output connected to a first input of Input
Selecter B (INSELB) 20348 and EXP 20316.

3. Multiplexer Logic 20314

Referring to MULT 20314, MULT 20314 includes two parallel arithmetic operation paths for performing addition, subtraction, multiplication, and division operations on packed decimal numbers, integer numbers, and mantissa portions of single and
double precision floating point numbers. MULT 20314 also includes a related portion of EU 10122's general register file, a memory for storing constants used in arithmetic operations, and certain input data selection circuits. That portion of EU 10122's
GRF residing in MULT 20314 is comprised of Multiplier Register File (MULTRF) 20350. Output of MULTRF 20350 is connected to a second input of MULTIM 20328. A first input of MULTRF 20350 is connected from output of RFR 20336 and a second input of MULTRF
20350 is connected from output of MULTRM 20334. First and second inputs of MULTRM 20334 are in turn connected, respectively, from output of RFR 20336 and from output of Container Size Logic (CONSIZE) 20352 of TSTINT 20320.

MULTIM 20328 selects the data inputs to MULT 20314's arithmetic circuits and has, as previously described, first and second inputs connected respectively from first output of OPB 20322 and from output of MULTRF 20350. Output of MULTIM 20328 is
connected through Multiplier (MULT) Bus 20354 to input of Multiplier Quotient Register (MQR) 20356 and to input of Nibble Shifter (NIBSHF) 20358. Another input to MQR 20356 and NIBSHF 20358 is provided by Constant Store (CONST) 20360. CONST 20360 is a
memory for storing constant values used n MULT 20314 operations. Output of CONST 20360 is connected to MULT Bus 20354. MULT 20314's arithmetic circuits may thereby be provided with inputs from OPB 20322, MULTRF 20350, and CONST 20360.

MULT 20314's arithmetic circuitry is comprised of two, parallel arithmetic operation paths having, as common inputs, outputs of MULTIM 20328 and CONST 20360. Common termination of these parallel arithmetic operation paths is Final Register
Shifter (FRS) 20362. A first arithmetic operation path is provided through NIBSHF 20358, whose input is connected from MULT Bus 20354. NIBSHF 20358's output is connected to a first input of FRS 20362 and a control input of NRBSHF 20358 is connected
from an output of Multiplier Control Logic (MULTCNT) 20364 and MULTCNTL 20318.

MULT 20314's second arithmetic operation path is provided through MQR 20356. As described above, MQR 20356's input is connected from MULT Bus 20354. MQR 29356's output is connected to first and second inputs of Times 1 And Times 2 Multiply
Shifter (MULTSHFT12) 20366 and Times 4 And Times 8 Multiply Shifter (MULTSHFT48) 20368. Outputs of MULTSHFT12 and MULTSHFT8 are connected, respectively, to first and second inputs of First Multiplier Arithmetic and Logic Unit (MULTALU1) 20370. MULTALU1
20370's output is connected to input of Multiplier Working Register (MWR) 20372. Output of MWR 20372 is connected to a first input of Second Multiplier Arithmetic and Logic Unit (MULTALU2) 20374. A second input of MULTALU2 20374 is connected from
output of RFR 20336. Output of MULTALU2 is connected to a second input of FRS 20362. As described above, first input of FRS 20362 is connected from output of NIBSHF 20368. Output of FRS 20362 is connected to input of RFR 20336.

As described above, output of RFR 20336 is connected to second input of MULTALU2 20374, to first input of MULTRF 20350, to first input of MULTRM 20334, and to second input of FROM 20324. Output of RFR 20336 is also connected to input of Leading
Zero Detector (LZD) 20376 of MULTCNTL 20318, and to inputs of Exception Logic (ECPT) 20378, CONSIZE 20352, and TSTINT 20320.

4. Exponent Logic 20316

Referring to EXP 20316, as previously described EXP 20316 performs certain operations with respect to exponent fields of single and double precision floating point number in EU 10122 floating point operations. EXP 20316 includes a second portion
of EU 10122's general register file, shown herein as Exponent Register File (EXPRF) 20380. Although indicated as individual register files, MULTRF 20350 and EXPRF 20380 comprise, as in GRF 10354, a unitary register file structure with common, parallel
addressing of corresponding registers therein.

Output of EXPRF 20380 is connected to a second input of INSELA 20330. A first input of EXPRF 20380 is connected from output of EXRM 20332. As previously described, a first input of EXRM 20332 is connected from second output of OPB 20322 through
EXPQ Bus 20325. A second input of EXRM 20332 is connected from output Scale Register (SCALER) 20338. A second input of EXPRF 20380 is connected from output of Sign Logic (SIGN) 20382. Input of SIGN 20382 is connected from second output of SCALER
20338.

INSELA 20330, INSELB 20348, Exponent ALU (EXPALU) 20384 and SCALER 20338 comprise EXP 20316's arithmetic circuitry for manipulating exponent fields of floating point numbers. INSELA 20330 and INSELB 20348 select, respectively, first and second
inputs to EXPALU 20384. As previously described, a first input of INSELA 20330 is connected from second output of OPB 20322 through EXPQ Bus 20325. Second input of INSELA 20330 is connected from output of EXPRF 20380. Output of INSELA 20330 is
connected to first input of EXPALU 20384. First input of INSELB 20348 is, as previously described, connected from a second output of mCRD 20346. Second input of INSELB 20348 is connected from output of OPB 20322 through EXPQ Bus 20325. Third input of
INSELB 20348 is connected from output of SCALER 20338 and fourth input of INSELB 20348 is connected from output of LZD 20376. Output of INSELB 20348 is connected to second input of EXPALU 20348. Output of EXPALU 20348 is connected to input of SCALER
20338.

As previously described, second output of SCALER 20338 is connected with input of SIGN 20382 and first output is connected to second input of EXRM 20332 and to third input of INSELB 20348. First output of SCALER 20338 is also connected to EXPQ
Bus 20325, to first input of EXOM 20326, and to a second input of MULTCNT 20364.

5. Multiplier Control 20318

As previously described, MULTCNTL 20318 provides certain control signals and information for controlling and coordinating operation of EXP 20316 and MULT 20314 in performing arithmetic operations on floating point numbers. MULTCNTL 20318
includes LZD 20376 and MULTCNT 20364. Input of LZD 20376 is connected from output of RFR 20336 through FR Bus 20337. Output of LZD 20376 are connected to a second input of MULTCNT 20364 and to fourth input of INSELB 20348. A second input of MULTCNT
20364 is connected from output of SCALER 20338. As previously described, control output of MULTCNT 20364 is connected to control inputs of NIBSHF 20358.

6. Test and Interface Logic 20320

Finally, TSTINT 20320 includes ECPT 20378, CONSIZE 20352, and Testing Condition Logic (TSTCON) 20386. Input of ECPT 20378 and first input of CONSIZE 20352 are connected from output of RFR 20336 through FR Bus 20337. A second input of CONSIZE
20352 is connected from LENGTH Bus 20226. An output of CONSIZE 20352 is connected, together with other inputs from EU 10122 (not shown for clarity of presentation) to TSTCON 20386. Output of TSTCON 20386 (not shown for clarity of presentation) are
connected to NAG 20340. TSTCON 20386 and ECPT 20378 have outputs to and inputs from FU 10120's FUINT 20298.

Having described the overall structure of EU 10122 above, operation of EU 10122 will be described next below with aid of further diagrams which will be introduced as required. In general, the following discussion will follow the flow of
instructions, that is EU 10122 Dispatch Pointers, and operands from FU 10120 and MEM 10112, execution of arithmetic operations with regard to those operands under microinstruction control provided by EUCL 20310, and return of final result of arithmetic
operations to MEM 10112 and FU 10120. In this regard, EUCL 20310 and OPB 20322 will be described first. As previously described, EUCL 20310 provides microinstruction control of EU 10122 in response to EU 10122 Dispatch Pointers provided by FU 10120.
OPB 20322 receives operands from MEM 10112 and FU 10120 and translate those operands into formats most suitable for efficient use by EU 10122. Operation of MULT 20314 and EXP 20316 will then be described to disclose operation of EU 10122 in executing
integer, packed and unpacked decimal, and single and double precision floating point operations. During these discussions, operation of MULTCNTL 20318, FROM 20324, and EXOM 20326 will be disclosed. Finally, operation of TSTINT 20320 will be described,
including a description of the detailed control signal interface between EU 10122 and FU 10120 through TSTINT 20320 and FUINT 20298. In addition to defining the interface between EU 10122 and FU 10120, certain features of EU 10122 operation will be
described wherein those operations are executed in cooperation with MEM 10112 and FU 10120. For example, EU 10122's Stack Mechanisms, comprising in part portions of MULTRF 20350 and EXPRF 20380, resides partly in MEM 10112 so that operation of EU
10122's Stack Mechanisms requires cooperative operations by EU 10122, MEM 10112 and FU 10120.

Inputs of COMQ 20342 are connected from EUDIS Bus 20206 to receive and store EU 10122 Dispatch Pointers provided from EUSDT 20266. Each such EU 10122 Dispatch Pointer is comprised of two information fields. A first information field contains a
10 bit starting address of a corresponding sequence of microistructions residing in EUSITT 20344. Second field of each EU 10122 Dispatch Pointer is a 6 bit field containing certain control information, such as information identifying data format of
corresponding operands to be operated upon. In this case unit dispatch pointer control field bits specify whether operands to be operated upon comprise signed or unsigned integer, packed or unpacked decimal, or single or double precision floating point
numbers.

COMQ 20342 is comprised of two one word wide by two word deep register files. A first of these register fields is comprised of SOP Command Queue Control Store (CQCS) 25510 and SOP Command Queue Address Store (CQAS) 25512. Together, CQCS 25510
and CQAS 25512 comprise a one word wide by two word deep register file for receiving and storing EU 10122 Dispatch Pointers corresponding to SOPs, that is Dispatch Pointers for initiating EU 10122 operations directly concerned with executing a user's
program. Address fields of these SOPs are received in CQAS 25512, while control fields are received and stored in CQCS 25510. COMQ 20342 is thereby capable of receiving and storing up to two sequential EU 10122 Dispatch Pointers corresponding to user
program SOPs. These SOP derived Dispatch Pointers are executed in the order received from FU 10120. EU 10122 is thereby capable of receiving and storing one currently executing SOP Dispatch Pointer and one pending SOP Dispatch Pointer. Further SOP
Dispatch Pointers may be read into COMQ 20342 as previous SOPs are executed.

As indicated in FIG. 255, outputs of CQAS 25512 and CQAE 25516, that is address fields of EU 10122 Dispatch Pointers are provided as inputs to Select Case Multiplexer (SCASE) 25518 and Starting Address Select Multiplexer (SAS) 25520 and NAG
20340, which will be described further below. Control field outputs of CQCS 25510 and CQCE 25514 are provided as inputs to OPB 20322, described further below.

c.c. Execute Unit S-Interpreter Table 20344

Referring to EUSITT 20344, as described above EUSITT 20344 is a memory for storing sequences of microinstructions for controlling operation of EU 10122 in response to EU 10122 Dispatch Pointers received from FU 10120. These microinstruction
sequences may, in general, direct operation of EU 10122 to execute arithmetic operations in response to SOPs of user's programs, or aid direct execution of EU 10122 operations required to service JP 10114 Events. EUSITT 20344 may be, for example, a 60
bit wide by 1,280 word long memory structured as pages of 128 words per page. A portion of EUSITT 20344's pages may be contained in Read Only Memory, for example for storing sequence of microinstructions for handling JP 10114 Events. Remaining portions
of EUSITT 20344 may be constructed of Random Access Memory, for example for storing sequences of microinstructions for executing EU 10122 operations in response to user program SOPs. This structure allows EU 10122 microinstruction sequences concerned
with operation of JP 10114's internal mechanisms, for example handling of JP 10114 Events, to be effectively permanently stored in EUSITT 20344. That portion of EUSITT 20344 constructed of Random Access Memory may be used to store sequences of
microinstructions for executing SOPs. These Random Access Memories may be used as writable control store to allow sequences of microinstructions for executing SOPs of one or more S-Languages currently being utilized by CS 10110 to be written into EUSITT
20344 from MEM 10112 as required.

As previously described, EUSITT 20344's second input is a Data (DATA) input connected from JPD Bus 10142. EUSITT 20344's data input is utilized to write sequences of microinstructions into EUSITT 20344 from MEM 10112 through JPD Bus 10142.
EUSITT 20344's first input is an address (ADR) input connected from output of Address Driver (ADRD) 25522 and NAG 20340. Address inputs provided by ADRD 25522 select word locations within EUSITT 20344 for writing of microinstructions into EUSITT 20344,
or for reading of microinstructions from EUSITT 20344 to mCRD 20346 to control operation of EU 10122. Generation of these address inputs to EUSITT 20344 by NAG 20340 will be described further below.

d.d. Microcode Control Decode Register 20346

Output of EUSITT 20344 is connected to input of mCRD 20346. As previously described, mCRD 20346 is a register for receiving microinstructions from EUSITT 20344, and decoding logic for decoding those microinstructions and providing corresponding
control signals to EU 10122. As indicated in FIG. 255, Diagnostic Processor Micro-Program Register (DPmR) 25524 is a 60 bit register connected in parallel with output of EUSITT 20344 to input of mCRD 20346. DPmR 25524 may be loaded with 60 bit
microinstructions by DP 10118. Diagnostic microinstructions may thereby be provided directly to input of mCRD 20346 to provide direct microinstruction by microinstruction control of EU 10122.

Outputs of mCRD 20346 are provided, in general, to all portions of EU 10122 to control detailed operations of EU 10122. Certain outputs of mCRD 20346 are connected to inputs of Next Address Source Select Multiplexer (NASS) 25526 and Long Branch
Page Address Gate (LBPAG) 25528 and NAG 20340. As will be described further below, these outputs of mCRD 23046 are used in generating address inputs to EUSITT 20344 when particular microinstructions sequences call for Jumps or Long Branches to other
microinstruction sequences. Outputs of mCRD 20346 are also connected in parallel to inputs of Execution Unit Micro-Instruction Parity Check Logic (EUmIPC) 25530. EUmIPC 25530 checks parity of all microinstruction outputs of mCRD 20346 to detected
errors in mCRD 20346's outputs.

e.e. Next Address Generator 20340

As described above, read and write addresses to EUSITT 20344 provided by NAG 20340 through ADRD 25522. Address inputs to ADRD 25522 are provided from either NASS 25526 or Diagnostic Processor Address Register (DPAR) 25532. In normal operation,
address inputs to EUSITT 20344 are provided from NASS 25526 as will be described momentarily. DP 10118, however, may load EUSITT 20344 addresses into DPAR 25532. These addresses may then be read from DPAR 25532 through ADRD 25522 to individually select
address locations within EUSITT 20344. DPAR 25532 may be utilized, in particular, to provide addresses to allow stepping through of EU 10122 microinstruction sequences microinstruction by microinstruction.

As described above, NASS 25526 is a multiplexer having inputs from three NAG 20340 address sources. NASS 25526's first address input is from Jump (JMP) output of mCRD 20346 and LBPAG 25528. These address inputs are utilized, in part, when a
current microinstruction calls for a Jump or Long Branch to another microinstruction or microinstruction sequence. Second address source is provided from SAS 25520 and, in general, is comprised of starting addresses of microinstruction sequences. SAS
25520 is a muliplexer having a first input from CQAS 25512 and CQAE 25516, that is starting addresses of microinstruction sequences corresponding to SOPs or for servicing JP 10114 Events. A second SAS 25520 input is provided from Sub-routine Return
Address Stack (SUBRA) 25534. In general, and as will be described further below, SUBRA 25534 operates as a stack mechanism for storing current microinstruction addresses of interrupted microinstruction sequences. These stored addresses may subsequently
be utilized to resume execution of those interrupted microinstruction sequences. Third address source to NASS 25526 is provided from Sequential and Case Address Generator (SCAG) 25536. In general, SCAG 25536 generates address to select sequential
microinstructions within particular microinstruction sequences SCAG 25536 also generates microinstruction address for microinstruction Case operations. As indicated in FIG. 255, outputs of SCAG 25536 and of SAS 25520 are bused together to comprise a
single NASS 25526 input. Selection between outputs of SCAG 25536 and SAS 25520 are provided by control inputs (not shown for clarity of presentation) to SCAG 25536 and SAS 25520. Selection between NASS 25526's address inputs is controlled by Next
Address Source Select Control Logic (NASSC) 25538, which provides control inputs to NASS 25526. NASSC 25538 is effectively a multiplexer receiving control inputs from TSTCON 20386 and TSTINT 20320. As will be described further below, TSTCON 20386
monitors certain operating conditions or states within EU 10122 and provides corresponding inputs to NASSC 25538. NASSC 25538 effectively decodes these control inputs from TSTCON 20386 to provide selection control input to NASS 25526.

Having described overall structure and operation of NAG 20340, operation of NAG 20340 will be described in further detail next below.

Referring first to NASS 25526's address inputs provided from JMP output of mCRD 20346 and LBPAG 25528, this address source is provided to allow selection of a next microinstruction by a current microinstruction. JMP output of mCRD 20346 allows a
current microinstruction to direct a Jump to another microinstruction within the same page of EUSITT 20344. NASS 25526's input through LBPAG 25528 is provided from another portion of mCRD 20346's output specifying pages within EUSITT 20344. This input
through LBPAG 25528 allows execution of Long Branch operations, that is jumps from a microinstruction in one page of EUSITT 20344 to a microinstruction in another page. In addition, NASS 25526's input from JMP output of mCRD 20346 and through LBPAG
25528 is utilized to execute an Idle, or Standby, routine when EU 10122 is not currently executing a microinstruction sequence requested by FU 10120. In this case, Idle routine directs TSTCON 20386 to monitor EU 10122 Dispatch Pointer inputs to EU 10122
from FU 10120. If no EU 10122 Dispatch Pointers are present in COMQ 20342, or none are pending, TSTCON 20386 will direct NASSC 25538 to provide control inputs to NASS 25526 to select NASS 25526's input from mCRD 20346 and LBPAG 25528. Idle routine will
continually test for EU 10122 Dispatch Pointer inputs until such a Dispatch Pointer is received into COMQ 20342. At this time, TSTCON 20386 will detect the pending Dispatch Pointer and direct NASS 25538 to provide control outputs to NASS 25526 to select
NASS 25526's input from, in general, SAS 25520. TSTCON 20386 and NASSC 25538 will also direct NASS 25526 to select inputs from SAS 25520 upon return from a called microinstruction to a previously interrupted microinstruction sequence.

As described above, SAS 25520 receives starting addresses from COMQ 20342 and from SUBRA 25534. SAS 25520 will select the output of CQAS 25512 or of CQAE 25516 as the input to NASS 25526 when a new microinstruction sequence is to be initiated to
execute a user's program SOP or to service a JP 10114 Event. SAS 25520 will select an address output of SUBRA 25534 upon return from a called sub-routine to a previously executing but interrupted sub-routine. SUBRA 25534, as described above, is
effectively a stack mechanism for storing addresses of currently executing microinstructions when those microinstruction sequences are interrupted. SUBRA 25534 is an 11 bit wide by 8 word deep register with certain registers dedicated for use in
stacking Event Handling microinstruction sequences. Other portions of SUBRA 25534 are utilized for stacking of microinstruction sequences for executing SOPs, that is for stacking microinstruction sequences wherein a first microinstruction sequence calls
for a second microinstruction sequence. SUBRA 25534 is not operated as a first-in-first out stack, but as a random access memory wherein address inputs selecting registers and SUBRA 25534 are provided by microinstruction control outputs of mCRD 20346.
Operations of SUBRA 25534 as a stack mechanism is thereby controlled by the microinstruction sequences stored in EUSITT 20344. As indicated in FIG. 255, addresses of current microinstructions of interrupted microinstruction sequences are provided to
data input of SUBRA 25534 from output of SCAG 25536, which will be described next below.

As described above, SCAG 25536 generates sequential addresses to select sequential microinstructions within microinstruction sequences and to generate microinstruction addresses for Case operations. SCAG 25536 includes Next Address Register
(NXTR) 25540, Next Address Arithmetic and Logic Unit (NAALU) 25542, and SCASE 25518. NAALU 25542 is a 12 bit arithmetic and logic unit. A first eleven bit input of NAALU 25542 is connected from output of ADRD 25522 and is thereby current address
provided to EUSITT 20344. A second four bit input to NAALU 25542 is provided from output of SCASE 25518. During sequential execution of a microinstruction sequence, output of SCASE 25518 is binary zeros and carry input of NAALU is forced to 1. Output
of NAALU 25542 will thereby be and address one greater than the current microinstruction address provided to EUSIT 20344 and will thereby be the address of the next sequential microinstruction. As indicated in FIG. 255, SCASE 25518 receives an input
from output of SCALER 20338. This input is utilized during Case operations and allows a data sensitive number to be selected as SCASE 25518's output into second input of NAALU 25542. SCASE 25518's input from SCALER 20338 thereby allows NAG 20340 to
perform microinstruction Case operations wherein Case Values are determined by the contents of SCALER 20338.

Next address outputs of NAALU 25542 are loaded into NXTR 25540, which is comprised of tri-state output registers. Next address outputs of NXTR 25540 are connected, in common with outputs of SAS 25520, to second input of NASS 25526 as described
above. During normal execution of microinstruction sequences, therefore, SCAG 25536 will, through NASS 25526 and ADRD 25522, select sequential microinstructions from EUSITT 20344. SCAG 25536 may also, as just described, provide next microinstruction
addresses in microinstruction Case operations.

In summary, NAG 20340 is capable of performing all usual microinstruction sequence addressing operations. For example, NAG 20340 allows selection of next microinstructions by current microinstructions, either for Jump operations or Long Branch
operations, through NASS 25526's input from mCRD 20346's JMP or through LBPAG 25528. NAG 20340 may provide microinstruction sequence starting addresses through COMQ 20342 and SAS 25520, or may provide return addresses to interrupted and stacked
microinstruction sequences through SUBRA 25534 and SAS 25520. NAG 20340 may sequentially address microinstructions of a particular microinstruction sequence through operation of SCAG 25536, or may perform microinstruction Case operations through SCAG
25536.

2. Operand Buffer 20322 (FIG. 256)

Having described structure and operation of EUCL 20310, structure and operation of OPB 20322 will be described next below. As previously described, OPB 20322 receives operands, that is data, from MEM 10112 and FU 10120 through MOD Bus 10144 and
JPD Bus 10142. OPB 20322 may then perform certain operand format translations to provide data to MULT 20314 and EXP 20316 in the formats most efficiently utilized by MULT 20314 and EXP 20316. As previously described, EU 10122 may perform arithmetic
operations on integer, packed and unpacked decimal, and single or double precision floating point numbers.

Single precision floating point operands are comprised of single 32 bit words wherein each 32 bit word is comprised of an eight bit exponent field and a 24 bit mantissa field. Double precision floating point operands are comprised of an 8 bit
exponent field and a 56 bit mantissa field. Double precision floating point operands are read into OPB 20322 as two 32 bit words wherein first word is comprised of 8 bit exponent field and the 24 most significant bits of mantissa field. Second word of
a double precision floating point operand is comprised of the 32 least significant bits of mantissa field. Integer operands are comprised of single 32 bit words containing information in binary code. Packed decimal operands are comprised of single 32
bit words which are in turn comprised of 8 four bit Binary Coded Decimal (BCD) fields. Unpacked decimal operands are comprised of two 32 bit words wherein each word is comprised of four 8 bit fields containing numeric ASCI characters. Each ASCI
character is comprised of a four bit field containing a decimal number in BCD code and a four bit zone field. As in the case of double precision floating point operands, the two 32 bit words of unpacked decimal operands are read into OPB 20322
sequentially. In alternate embodiments of CS 10110 and EU 10122, integer and packed decimal operands may be expanded to 64 bit (2 word) operands wherein the two 32 bit words are operated upon sequentially. As described above and will be described
further below, OPB 20322 accepts operands in these formats from MEM 10112 and FU 10120 and converts these operands into formats most efficiently utilized by EU 10122 or arithmetic operations.

First and second 32 bit inputs of OPBIM 25610 are connected from, respectively, MOD Bus 10144 and JPD Bus 10142. Thirty-two bit output of OPBIM 25610 is connected to data input of OPBR1 25612 and a 32 bit output from MULTRF 20350 is connected in
parallel with output of OPBIM 25610 to data input of OPBR1 25612. Thirty-two bit output of OPBR1 25612 is connected, in part, to data input of OPBR2 25614. Thirty-two bit words appearing upon either MOD Bus 10144 or JPD Bus 10142 may thereby be
transferred through OPBIM 25610 and written into OPBR1 25612. Similarly, 32 bit outputs of MULTRF 20350 may be written into OPBR1 25612. Thirty-two bit words may then be read from OPBR1 25612 and written into OPBR2 25614.

As described above, integer, single precision floating point, and packed decimal operands are each comprised of single 32 bit words. In these cases, the single 32 bit words of these operands are read into OPBR1 25612 and, as described further
below, read from OPBR1 25612 to EXPQ Bus 20325 and OPQ Bus 20323. Unpacked decimal and double precision floating point operands, however, are comprised of two 32 bit words. In these cases, first 32 bit word of these operands is transferred throuh OPBR1
25612 and written into OPBR2 25614 while second 32 bit word of these operands is written into OPBR1 25612.

At conclusion of transfer of single word operands, such as integer, packed decimal or single precision floating point operands, into OPB 20322 those operands will be present in OPBR1 25612. At conclusion of transfer of two word operands into OPB
20322, such as unpacked decimal or double precision floating point operands, first word of those operands will be present in OPBR2 25614 and second word of this operand will be present in OPBR1 25612.

As stated above, certain gates are connected between outputs of OPBR1 25612 and OPBR2 25614 to transfer operands therein onto EXPQ Bus 20325 and OPQ Bus 20323. Referring first to EXPQ Bus 20325, as previously described exponent fields of single
and double precision floating point operands are transferred onto EXPQ Bus 20325 to be provided to EXP 20316 for subsequent use and arithmetic operations. As described above, single precision floating point operands are single word operands, and eight
bit exponent field of single precision operands will be present in OPBR1 25612. A double precision floating point number is a two word operand wherein eight bit exponent field is contained within first word and thereby is present in OPBR2 25614.
Accordingly, Single Precision Exponent Drivers (SPEXP) 25616 is connected from those outputs of OPBR1 25612 upon which eight bit field of single precision floating point operands appears. Double Precision Exponent Drivers (DPEXP) 25618 is connected from
those outputs of OPBR2 25614 upon which appear exponent field of double precision loading operands Outputs of SPEXP 25616 and DPEXP 25618 are connected to EXPQ Bus 20325 to transfer exponent fields of single and double precision floating point operands
from, respectively, OPBR1 25612 and OPBR2 25614 onto EXPQ Bus 20325.

Referring to OPQ Bus 20323, as previously described OPQ Bus 20323 transfers mantissa fields of single and double precision floating point operands, integer operands, packed decimal operands, and BCD fields of unpacked operands from OPB Bus 20322
to MULT 20314 for subsequent use in arithmetic operations. Considering first integer and packed decimal operands, as described above these operands are single, 32 bit word operands and appear in OPBR1 25612. Integer and packed decimal operands are read
from OPBR1 25612 to OPQ Bus 20323 through 32 bit Integer and Packed Decimal driver (IPD) 25618 whose inputs are connected from outputs of OPBR1 25612 and whose outputs are connected onto OPQ Bus 20323. Signed integer operands are sign extended on the 24
most significant bits of OPQ Bus 20323. Unsigned integer operands and decimal operands, described below, are zero extended.

Single precision floating point operands are single, 32 bit word operands appearing in OPBR1 25612. As described above, 8 bit exponent fields of single precision floating point operands are read from OPBR1 25612 to EXPQ Bus 20325 through SPEXP
25616. Twenty-four bit mantissa fields of single precision floating point operands are read from OPBR1 25612 to OPQ Bus 20323 through 24 bit Single Precision Mantissa drivers (SPM) 25620. As indicated in FIG. 256, inputs of SPM 25620 are connected from
outputs of OPBR1 25612 and outputs of SPM 25620 are connected onto OPQ Bus 20323. In the case of single precision floating point operands, o's are forced onto the 32 least significant bits of OPQ Bus 20323.

Double precision floating point operands are, as described above, comprised of two 32 bit words with 8 bit exponent field and 24 least significant bits of mantissa field appearing in OPBR2 25614 and 32 least significant bits of mantissa field
appearing in OPBR1 25612. The 32 least significant bits of a double precision floating point operand appearing in OPBR1 25612 are read onto OPQ Bus 20323 through IPD 25618. The 24 most significant bits of a double precision floating point operand are
read from OPBR2 25614 to OPQ Bus 20323 through 24 bit Double Precision Word One drivers (DPW1) 25622. As indicated in FIG. 256, inputs of DPW1 25622 are connected from outputs of OPBR2 25614 and outputs of DPW1 25622 are connected onto OPQ Bus 20323.

Unpacked decimal operands are, as described above, comprised of two 32 bit words wherein each word is comprised of four 8 bit ASCI characters. Each ASCI character is comprised of a four bit BCD code expressing numeric value of that character,
and a four bit zone field. Word one of an unpacked decimal operand will appear in OPBR2 25614 while word two will appear in OPBR1 25612. As will be described further below, MULT 20314 is designed to operate efficiently with packed decimal operands,
that is with decimal numbers expressed in four bit BCD code. As indicated in FIG. 256, inputs of 16 bit Unpacked Decimal Word One Drivers (UPDW1) 25624 and of 16 bit Unpacked Decimal Word Two Drivers (UPDW2) 25626 are connected to certain outputs of,
respectively, OPBR2 25614 and OPBR1 25612. Sixteen bit outputs of UPDW1 25624 and UPDW2 25626 are connected onto OPQ Bus 20323. Inputs of UPDW1 25624 and UPDW2 25626 are connected to those 16 output bits of OPBR2 25614 and OPBR1 25612 upon which the
binary coded decimal fields of ASCI contained therein appear. That is, UPDW1 25624 and UPDW2 25626 read only the four bit BCD code fields of the ASCI characters of unpacked decimal operands from OPBR2 25614 and OPBR1 25612 onto OPQ Bus 20323. UPDW1
25624 and UPDW2 25626 thereby transform a 64 bit unpacked decimal operand present in OPBR2 25614 and OPBR1 25612 into a 32 bit packed decimal operand appearing upon OPQ Bus 20323.

In summary, therefore, OPB 20322 is capable of accepting integer, single and double precision floating point, and packed and unpacked decimal operands from MEM 10112 and FU 10120 and providing appropriate fields of those operands to MULT 20314
and EXP 20316 in the formats most efficiently utilized by MULT 20314 and EXP 20316. In doing so, OPB 20322 extracts exponent and mantissa fields from single and double precision floating point operands to provide exponent and mantissa fields of these
operands to, respectively, EXP 20316 and MULT 20314, and also unpacks, or converts, unpacked decimal operands to packed decimal operands most efficiently utilized by MULT 20314.

Having described structure and operation of OPB 20322, structure and operation of MULT 20314 will be described next below.

3. Multiplier 20314 (FIGS. 257, 258)

MULT 20314, as previously described, performs addition, subtraction, multiplication, and division operations on mantissa fields of single and double precision floating point operands, integer operands, and decimal operands. As described above
with reference to OPB 20322, OPB 20322 converts unpacked decimal operands to packed decimal operands to be operated upon by MULT 20314. MULT 20314 is thereby effectively capable of performing all arithmetic operations on unpacked decimal operands.

a.a. Multiplier 20314 Data Paths and Memory (FIG. 257)

Referring to FIG. 257, a more detailed block diagram of MULT 20314's data paths and memory is shown. As previously described, major elements of MULT 20314 include memory elements comprised of MULTRF 20350 and CONST 20360, operand input and
result output multiplexing logic including MULTIM 20328 and MULTRM 20334, and arithmetic operation logic. MULT 20314's operand input and result output multiplexing logic and memory elements will be described first, followed by description of MULT
20314's arithmetic operation logic.

As previously described, input data, including operands, is provided to MULT 20314's arithmetic operation logic through MULTIN Bus 20354. MULTIN Bus 20354 may be provided with data from three sources. A first source is CONST 20360 which is a
512 word by 32 bit wide Read Only Memory. CONST 20360 is utilized to store constants used in arithmetic operations. In particular, CONST 20360 stores zone fields for unpacked decimal, that is ASCI character, operands. As previously described, unpacked
decimal operands are received by OPB 20322 and converted to packed decimal operands for more efficient utilization by MULT 20314. As such, final result outputs generated by MULT 20314 from such operands are in packed decimal format. As will be
described below, MULT 20314 may be utilized to convert these packed decimal results into unpacked decimal results by insertion of zone fields. As indicated in FIG. 257, address inputs are provided to CONST 20360 from EXPQ Bus 20325 and from output of
mCRD 20346. Selection between these address inputs is provided through CONST Address Multiplexer (CONSTAM) 25710. CONST 20360 addresses will, in general, be provided from EUCL 20310 but alternately may be provided from EXPQ Bus 20325 for special
operations.

Operand data is provided to MULTIN Bus 20354 through MULTIM 20328, which is a dual input, 64 bit multiplexer. A first input of MULTIM 20328 is provided from OPQ Bus 20323 and is comprised of operand information provided from OPB 20322. OPQ Bus
20323 is a 56 bit wide bus and operand data appearing thereon may be comprised of 32 bit integer operands; 32 bit packed decimal operands, either provided directly from OPB 20322 or as a result of OPB 20322's conversion of an unpacked decimal to a packed
decimal operand; 24 bit single precision operand mantissa fields; or 56 bit double precision floating point operand mantissa fields. As previously described, certain OPQ Bus 20323 may be zero or sign extension filled, depending upon the particular
operand.

Second input of MULTIM 20328 is provided from MULTRF 20350. MULTRF 20350 is a 16 word by 64 bit wide random access memory. As indicated in FIGS. 203 and 257, MULTRF 20350 is connected between output of RFR 20336, through FR Bus 20337, and to
input of MULT 20314's arithmetic operation logic through MULTIM 20328 and MULTIN Bus 20354. MULTRF 20350 may therefore be utilized as a scratch pad memory for storing intermediate results of arithemetic operations, including reiterative arithmetic
operations. In addition, a portion of MULTRF 20350 is utilized, as in GRF 10354, as an EU 10122 Stack Mechanism similar to MIS 10368 and MOS 10370 in FU 10120. Operation of EU 10122 Stack Mechanism will be described in a following descripion of EU
10122's interfaces to MEM 10112 and FU 10120. Address Inputs (ADR) of MULTRF 20350 are provided from Multiplier Register File Address Multiplexer (MULTRFAM) 25712.

MULTRFAM 25712 is a dual four bit multiplexer comprised, for example, of SN74S258s. In addition to address inputs to MULTRF 20350, MULTRFAM 25712 provides address inputs to EXPRF 20380. As previously described, MULTRF 20350 and EXPRF 20380
together comprise an EU 10122 general register file similar to GRF 10354 and FU 10120. As such, MULTRF 20350 and EXPRF 20380 are addressed in parallel to read and write parallel entries from and to MULTRF 20350 and EXPRF 20380. Address inputs to
MULTRFAM 25712 are provided, first, from outputs of mCRD 20346, thus providing microinstruction control of addressing of MULTRF 20350 and EXPRF 20380. Second address input to MULTRFAM 25712 is provided from output of Multiplier Register File Address
Counter (MULTRFAC) 25714.

MULTRFAC 25714 is a four bit counter and is used to generate sequential addresses to MULTRF 20350 and EXPRF 20380. Initial addresses are loaded into MULTRFAC 25714 from Multiplier Register File Address Counter Multiplexer (MULTRFACM) 25716.
MULTRFACM 25716 is a dual four bit multiplexer. Inputs to MULTRFACM 25716 are provided, first, from outputs of mCRD 20346. This input allows microinstruction selection of an initial address to be loaded into MULTRFAC 25714 to be subsequently used and
generating sequential MULTRF 20350 and EXPRF 20380 addresses. Second address input to MULTRFACM 25716 is provided from OPQ Bus 20323. MULTRFACM 25716's input from OPQ Bus 20323 allows a single address, or a starting address of a sequence of addresses,
to be selected through JPD Bus 10142 or MOD Bus 10144, for example from MEM 10112 or FU 10120.

Intermediate and final result outputs of MULT 20314 arithmetic logic are provided to data inputs of MULTRF 20350 directly from FR Bus 20337 and from MULTRM 20334. Inputs to MULTRM 20334, in turn, are provided from FR Bus 20337 and from output of
CONSIZE 20352 and TSTINT 20320.

FR Bus 20337 is a 64 bit bus connected from 64 bit output of RFR 20336 and carries final and intermediate results of MULT 20314 arithmetic operations. As will become apparent in a following description of MULT 20314 arithmetic operation logic,
RFR 20336 output, and thus FR Bus 20337, are 64 bits wide. Sixty-four bits are provided to insure retention of all significant data bits of certain MULT 20314 arithmetic operation intermediate results, in particular operations involving double precision
floating point 64 bit mantissa fields. In addition, as will be described momentarily and has been previously stated, MULT 20314 may convert a final result in packed decimal format into a final result in unpacked decimal format. In this operation, a
single 32 bit, or one word, packed decimal result is converted into a 64 bit, or two word, unpacked decimal format by insertion of zone fields.

As described above, two parallel data paths are provided to transfer information from FR Bus 20337 into MULTRF 20350. First path is directly from FR Bus 20337 and second path is through Unpacked Decimal Multiplexer (UPDM) 25718 of MULTRM 20334.
Direct path is utilized for thirty-two bits of information comprising bits 0 to 23 and bits 56 to 63 of FR Bus 20337. Data path through UPDM 25718 may comprise either bits 24 to 55 of FR Bus 20337, which are connected into a first input of UPDM 25718,
or bits 40 through 55 which are connected to a second input of UPDM 25718. Single precision floating point numbers are 32 bit numbers plus two or more guard bits and are thus written into MULTRF 20350 through bits 0 to 23 of the direct path into MULTRF
20350 and through first input (bits 24 to 55) of UPDM 25718. Double precision floating point numbers are 5 bits wide, plus guard bits, and thus utilize the direct path into MULTRF 20350 and the path through first input of UPDM 25718. Bits 56 to 63 of
direct path are utilized for guard bits of double precision floating point numbers. Both integer and packed decimal numbers utilize bits 24 through 55 of FR Bus 20337, and are thus written into MULTRF 20350 through first input of UPDM 25718. As
previously described, bits 0 to 23 of these operands are filled by sign extension.

a.a.a. Packed Decimal to Unpacked Decimal Conversion

In addition to being utilized for direct writing of data into MULTRF 20350, UPDM 25718 is used in unpacking of packed decimal final results to generate unpacked decimal final results. In this operation, a packed decimal result comprising 32 bits
of information are separated into two 16 bit words. The two 16 bit words are then transformed into two 32 bit unpacked decimal words by writing the four bit BCD fields of those 16 bit words into appropriate locations in the 32 bit words and inserting
zone fields. When this operation is to be performed, the unpacked decimal number will appear as described above on bits 24 to 55 of FR Bus 20337. First input of UPDM 25718 is used to generate first 32 bit word of an unpacked number by extracting the 16
most significant bits, or 4 most significant BCD fields, of packed decimal number from FR Bus 20337. UPDM 25718 transfers these four BCD fields onto appropriate locations of UPDM 25718's 32 bit output and forces zeros into those portions of that 32 bit
output which are to contain zone fields. This first 32 bit word is then written into MULTRF 20350. UPDM 25718 then generates a second 32 bit word by extracting the 16 least significant bits, or 4 least significant BCD fields, of packed decimal number
from FR Bus 20337 through UPDM 25718's second input. Again, these BCD fields are transferred onto appropriate locations in UPDM 25718's 32 bit output and zeros forced into those output locations which will be occupied by zone fields. This second 32 bit
word is then also written into MULTRF 20350. The two 32 words stored in MULTRF 20350 are then transferred, one at a time, into MULT 20314's arithmetic operation logic. Zone fields read from CONST 20360 are added to those two words, in a logical
operation, to provide as a final result two 32 bit numbers comprising a single unpacked decimal number. The unpacked decimal final result may then be returned to MULTRF 20350 to be stored or, as described momentarily, transferred onto JPD Bus 10142 to
be transferred to FU 10120 or MEM 10112.

b.b.b. Container Size Check

As stated above, MULTRM 20334 has an input from CONSIZE 20352. As will be described below with reference to TSTINT 20320, CONSIZE 20352 performs a "container size" check upon each store back of results from EU 10122 to MEM 10112. CONSIZE 20352
compares the number of significant bits in a result to be stored back to the logical descriptor describing the MEM 10112 address space that result is to be written into. Where reiterative write operations to MEM 10112 are required to transfer a result
into MEM 10112, that is a string transfer, container size information may read from CONSIZE 20352 through Container Size Driver (CONSIZED) 25720 and MULTRM 20334 and written into MULTRF 20350. This allows EU 10122, using container size information
stored in MULTRM 20350, to perform continuous container size checking during a string transfer of result from EU 10122 to MEM 10112. In addition, as will be described momentarily, container size information may be read from CONSIZE 20352 to JPD Bus
10144.

c.c.c. Final Result Output Multiplexer 20324

Referring finally to PROM 20324, as previously described FROM 20324 is utilized to transfer, in general, results of EU 10122 arithmetic operations onto JPD Bus 10142 for transfer to MEM 10112 or FU 10120. As indicated in FIG. 257, FROM 20324 is
comprised of 24 bit Final Result Bus Driver (FRBD) 25722 and Result Bus Driver (RBR) 25724. Input of FRBD 25722 is connected from FR Bus 20337 and allows data appearing thereon to be transferred onto JPD Bus 10142. In particular, FRBD 25722 is utilized
to transfer 24 bit mantissa fields of single precision floating point results onto JPD Bus 10142 in parallel with a corresponding exponent field from EXP 20316. RBR 25724 input is connected from RSLT Bus 20388 to allow output of UPDM 25718 to be
transferred onto JPD Bus 10142. RBR 25724, RSLT Bus 20388, and UPDM 25718 are used, in general, to transfer final results of EU 10122 operations from output of MULT 20314 onto JPD Bus 10142 Final results transferred by this data path include integer,
packed and unpacked decimal results, and mantissa fields of double precision floating point results. Both unpacked decimal numbers and mantissa fields of double precision floating point numbers are comprised of two 32 bit words and are thus transferred
onto JPD Bus 10142 in two sequential transfer operations.

Having described structure and operation of MULT 20314's memory elements and input and output circuitry, MULT 20314's arithmetic operation logic will be described next below.

b.b. Multiplier 20314 Arithmetic Operation Logic (FIG. 258)

As previously described, MULT 20314's arithmetic operation logic is capable of performing addition, subtraction, multiplication, and division operations on signed and unsigned integer, packed decimal, and single and double precision floating
point number mantissa fields. As will be described further below with reference to EXP 20316, arithmetic operations upon single and double precision floating point operands are executed by MULT 20314 and EXP 20316 operating together.

Referring to FIG. 258, a more detailed block diagram of MULT 20314's arithmetic operation logic is shown. As described above, MULT 20314's arithmetic operation and logic includes two data paths which operate cooperatively to perform all MULT
20314 arithmetic operations.

A first data path is provided through 64 bit NIBSHF 20358 which may be comprised, for example, AMD 25S10s. Data inputs of NIBSHF 20358 are connected from MULTIN Bus 20354. NIBSHF 20358 64 bit output is connected to inputs of FRS 20362 and four
bits, or one nibble, of NIBSHF 20358's outputs are connected to input of Partial Product Select logic (PPS) 25810. NIBSHF 20358 may be utilized as a 64 bit data path for receiving and storing operands. In particular, NIBSHF 20358 may receive the
multiplier operand when a multiplication operation is to be performed, or the denominator (divisor) when a division operation is to be performed. In addition, NIBSHF 20358 may operate as a wrap-around shift register, shifting an operand therein in
increments of four bits, or one nibble. In floating point number addition and subtraction operations, it is necessary to equalize the exponent powers, or fields, of floating point operands to be added or subtracted. Effectively, exponent field of one
operand is selected to be exponent field of both operands and mantissa field of one operand is right or left shifted by an amount determined by the difference between the exponent fields of the two operands. This operation is referred to as prealignment
of operands. Amount by which one operand mantissa field must be shifted to accomplish this prealignment is determined by EXP 20316 as will be described in following description of EXP 20316. In general, prealignment is accomplished by right shifting of
mantissa field of the smaller operand. Mantissa field of larger operand is loaded into MQR 20356 and, as described further below, provided to first input of MULTALU 20374 to be added to mantissa field of smaller operand. Mantissa field of smaller
operand is then presented to NIBSHF 20358 and right shifted by an amount determined by EXP 20316. Prealigned smaller operand mantissa field may then be transferred from NIBSHF 20358, through FRS 20362, and into RFR 20336. Prealigned smaller operand may
then be held in RFR 20336 to be provided to second input of MULTALU 20374.

As will be described further below, multiplication and division operations are generally accomplished by successive generation and, respectively, addition or subtraction of partial products generated from the multiplicand or numerator operand.
In multiplication, determination of which partial products are generated is determined by PPS 25810 which examines successive nibbles of the multiplier operand which is shifted by NIBSHF 20358. As described above, PPS 25810 inputs are comprised of four
bits, or one nibble, of NIBSHF 20358's 64 bit output. Multiplicand operand is presented to NIBSHF 20358 and right shifted in one nibble increments to allow PPS 25810 to examine successive nibbles of that multiplier operand PPS 25810 is comprised, for
example, of a Read Only Memory and, as will be described further below, provides control outputs to MULTSHF48 20368 and to MULTSHFT12 20366 to control generation of partial products.

Second data path of MULT 20314 is provided through MQR 20356. MQR 20356 is a 56 bit register whose data inputs are connected from MULTIN Bus 20354. MQR 20356's 56 bit outputs are connected to inputs of MULTSHFT48 20368 and MULTSHFT12 20366.
During addition and subtraction operations, MQR 20356 receives and stores operands which are to be added to or substracted from operands passed through NIBSHF 20358 and stored in RFR 20367. In addition, during multiplication and division operations MQR
20356 receives and stores multiplicand and numerator operands. MQR 20356 may also be utilized as a wrap-around shift register capable of shifting an operand contained therein in increments of one bit. This function is utilized during division
operations when MULT 20314 executes a one bit at a time nonrestoring divide algorithm. In this divide algorithm, divisor operand resides in RFR 20336 and is successively subtracted from numerator operands. Partial remainders are stored in RFR 20367
with the remainder being left shifted by one bit upon each successive subtraction. MQR 20356 may be comprised, for example, of SN74S194s.

b.b.b. Multiplication, Partial Products

As previously described, MULTSHFT48 20368 and MULTSHFT12 20366, together with MULTALU1 20370, are utilized to generate partial products during multiplication operations. Multiplication operations are accomplished by successive summation of
partial products generated from a multiplicand operand. The particular partial products generated and summed are determined by multiplier nibbles presented at output of NIBSHF 20358. As described above multiplier operand in NIBSHF 20358 is successively
right shifted in one nibble increments. Successive nibbles are examined by PPS 25810 to determine which successive multiplicand operand partial products are to be generated and summed. MULTSHFT48 20368 and MULTSHFT12 20366 are each 56 bit two to one
multiplexers comprised, for example, of SN74S157s.

An operand appearing at first input of MULTSHFT12 20366 from output of MQR 20356 is passed directly through to output of MULTSHFT12 20366 and is thus effectively multiplied by one. An operand appearing at second input of MULTSHFT12 20366 from
MQR 20356 appears at output of MULTSHFT12 20366 shifted one bit to the left and is thus effectively multiplied by two. An operand appearing at first input of MULTSHFT48 20368 from output of MQR 20356 appears at output of MULTSHFT48 20368 shifted two
bits to the left and is thus effectively multiplied by four. An input appearing at second input of MULTSHFT48 20368 appears at output of MULTSHFT48 20368 shifted three bits to the left and is thus effectively multiplied by eight. In addition, PPS 25810
may selectively force each output of MULTSHFT12 20366 and MULTSHFT48 20368 to zero. This may be used, for example, to pass data directly through MULTSHF12 20366 to MULTALU1 20370.

Output of MULTSHFT12 20366 and MULTSHFT48 20368 are connected, respectively, to inputs of MULTALU1 20370. MULTALU1 20370 is a 56 bit arithmetic and logic unit comprised, for example, of SN74S381s, and operates under control of outputs from PPS
25810. MULTALU1 20370 is capable of adding and subtracting outputs of MULTSHFT12 20366 and MULTSHFT48 20368 to generate selected partial products which are multiples of operands stored in MQR 20356. For example, when multiplying two operands, a
particular nibble of multiplier operand in NIBSHF 20358 may determine that a partial product equal to three times the value of multiplicand M stored in MQR 20356 is required. If so, MULTSHFT12 20366, under control of PPS 25810, will provide an output
equal to one times M while MULTSHFT48 20368 will provide an output equal to four times M. MULTALU1 20370, again operating under control PPS 25810, will then subtract output of MULTSHFT12 20366 from output of MULTSHFT48 20368 to provide a final output
equal to 3.times.M. MULTSHFT12 20366, MULTSHFT48 20368, and MULTALU1 20370 operate in this manner to generate partial products to generate any desired value of partial product between 1Mand 14M where, as stated above, M is the value of operand stored in
MQR 20356. If a partial product value of 15.times.M is required, this operation is executed as two partial products. A first partial product equal to -1.times.M is generated during a first arithmetic operation and a partial product value of 16.times.M
generated during a second arithmetic operation. When partial products are subsequently summed by MULTALU2 20374, as described further below, final result of summation of these two partial products is effectively a partial product of 15.times.M. When
such a two stage partial product generation is required, PPS 25810 recognizes this condition and, utilizing an internal register, carries forward the 16.times.M operation as an input to the partial product operation of the next nibble of the multiplier
operand stored in NIBSHF 20358.

In summary, MULTSHFT12 20366, MULTSHFT48 20368 and MULTALU1 20370 operate under control of PPS 25810 as required by the nibbles of a multiplier operand present at output of NIBSHF 20358 to generate successive partial products of multiplicand
operands stored in MQR 20356. When MULT 20314 is not executing a multiplication operation, MULTSHFT12 20366, MULTSHFT48 20368 and MULTALU1 20370 operate as a direct feed-through path, through first input of MULTSHFT12 20366 and first input of MULTALU1
20370, thereby allowing an operand stored in MQR 20356 to be loaded directly into MWR 20372.

c.c.c. Main Working Register 20372

WR 20372 is a 60 bit register having data inputs connected from output of MULTALU1 20370 and providing data outputs to first input of MULTALU2 20374. MWR 20372 may be comprised, for example, of SN74S374s and is a main working register of MULT
20314. MWR 20372 receives and holds successive partial products generated during multiplication operations, divisor operands during division operations, and operands for addition and subtraction operations. Generation of partial products to be loaded
into MWR 20370 has been described above. In addition and subtraction operations, one of the operands to be added or subtracted is loaded into MWR 20370 through the path comprising MULTIN Bus 20354, MQR 20356, first input of MULTSHFT12 20366, and first
input of MULTALU1 20370. Second operand of an addition or subtraction operation is read from MULTIN Bus 20354 to NIBSHF 20358 and from NIBSHF 20358 through FRS 20362 and RFR 20336. Second operand of an addition or subtraction operation may then be
provided to second input of MULTALU2 20374 from output of RFR 20336 while first operand is, as described above, provided to first input MULTALU2 20374 from MWR 20372. During multiplication operations, a current partial product is held in MWR 20372 and
provided to first input of MULTALU2 20374 while the summed value of previously generated and added partial products is held in RFR 20336 and thus provided to second input of MULTALU2 20374. During division operations, MWR 20372 contains the divisor
operand, while the division result resides in MQR 20356.

d.d.d. Multiplier ALU2 20374

MULTALU2 20374 is a 65 bit arithmetic and logic unit comprised, for example, of SN74S381s, and is MULT 20314's primary arithmetic and logic element. As just described, first input of MULTALU2 20374 is provided from MWR 20372 while a second input
is provided from output of RFR 20336. MULTALU2 20374 may add or subtract MULTALU2 20374's first and second inputs, from MWR 20372 and RFR 20336, as required to perform all MULT 20314 addition, subtraction, multiplication, and division operations.
Output of MULTALU2 20374 is provided to inputs of FRS 20362.

e.e.e. Final Result Shifter 20362

FRS 20362 is a 66 bit multiplexer comprised, for example, of SN74S153s. FRS 20362 is provided with four input sources. A first source is provided from output of NIBSHF 20358 to allow operands to be loaded from MULTIN Bus 20354 through NIBSHF
20358 and FRS 20362 to RFR 20336 as described above. A second input is provided directly from output of MULTALU2 20374 and allows output of MULTALU2 20374 to be passed directly through FRS 20362 and loaded into RFR 20336. Third and fourth inputs of FRS
20362 are also provided from output of MULTALU2 20374 but are shifted relative to FRS 20362's second input from MULTALU2 20374 so that FRS 20362's output is similarly shifted.

A third input is utilized during multiply operations and is shifted four bits, or one nibble, to the right. As will be described further below, a multiplication operation, for example floating point numbers, is executed by generating and adding
partial products of hexadecimal characters of increasing values. That is, successive hexadecimal characters of a multiplier operand in NIBSHF 20358 are examined from right to left, that is in direction of increasing value, and corresponding partial
products generated from multiplicand operand in MQR 20356. The successive partial products must correspondingly be left shifted by one hexadecimal character, or one nibble, when added to the sum of previous partial products. In MULT 20314, this left
shift is accomplished by right shifting of the sum of previous partial products. As previously described, at each stage of a multiplication operation a current partial product provided from MWR 20372 is added, in MULTALU2 20374, to the sum of previous
partial products stored in RFR 20336 to generate, as output of MULTALU2 20374, a current sum of partial products. This current sum of partial products is provided to FRS 20362's multiply input and is accordingly right shifted by one nibble, or one
hexadecimal character. Right shifted current sum of partial products then appears as output of FRS 20362 and is loaded into RFR 20336 to become previous sum of partial products for next partial product operation of the multiplication.

Fourth input of FRS 20362 is used during division operations. As previously described, MULT 20314 executes a one bit at a time nonrestoring divide algorithm. In a divide operation, numerator operand is transferred through MULTIN Bus 20354, and
NIBSHF 20358, and FRS 20362 to be loaded into RFR 20336. Divisor operand is loaded into MWR 20372. The number in RFR 20336 is initially numerator operand and is thereafter remainder term of division operation. Subtraction of successive divisors from
numerator, or remainder, value in RFR 20336 is performed by MULTALU2 20374. The successive subtraction operations are executed one bit at a time with both divisor and remainder being right shifted by one bit upon successive subtraction operation.
During division operation, current remainder value, that is result of subtraction of a current divisor value from previous remainder value by MULTALU2 20374, is provided to divide input of FRS 20362. Divide input of FRS 20362 is left shifted by one bit
relative to direct through-put path so that successive remainder outputs of FRS 20362 to RFR 20336 are successively left shifted by one bit as required for division operation. Quotient operand bits are shifted, one bit at a time, into MQR 20356 to form
the operation result.

f.f.f. Final Result Register 20336

Finally, RFR 20336 is MULT 20314's final result register and may be comprised, for example, of SN74S194s. RFR 20336 may operate as a direct through-put register, or may operate as shift register. RFR 20336's shift capability is utilized during
diagnostic operations. As will be described further below, results of floating point arithmetic operations are normalized, that is mantissa field is left shifted and exponent field right shifted, so that there are no zeros in leading, or most
significant, hexadecimal characters of mantissa fields. This convention is utilized to insure retention of all significant bits of results of floating point number arithmetic operations. As will be described further below, LZD 20376 examines final
results of floating point number arithmetic operations in RFR 20336 to detect whether one or more leading hexadecimal characters thereof contain zeros. If such zeros are detected, LZD 20376 provides control outputs to EXP 20316 and to RFR 20336 to shift
floating point number result mantissa and exponent fields to normalize the results of floating point number arithmetic operations. Right shifts of mantissa field are performed by RFR 20336, while left shifts of mantissa fields are performed by NIBSHF
20358. In left shifting a mantissa field, that field is transferred to NIBSHF 20358 from RFR 20336 through MULTRF 20350 and LZD 20376 generators a shift amount control output to NIBSHF 20358.

As indicated in FIG. 258, RFR 20336 includes a 65th bit providing an output designated as Overflow (OVRFLW). Certain MULT 20314 arithmetic may result in an overflow, that is a numeric result greater than 64 bits in length. Such an overflow may
result from, for example, an arithmetic operation performed by MULTALU2 20374 or from a left shift operation executed by FRS 20362. RFR 20336's 65th bit register is provided to capture such overflow bits and to provide OVRFLW to MULTCNT 20364. MULTCNT
20364 may then provide control output to NIBSHF 20358 to right shift the number contained therein and thus preserve the most significant overflow bit. In addition to detecting overflow events, MULTALU2 20374, FRS 20362, and RFR 20336 each contain two
bits of information which are utilized as guard bits to prevent loss of information arising from right shift operations, for example during summation of partial products in a multiplication operation

As described above, output of RFR 20336 is, in addition to being provided to second input of MULTALU2 20374, transferred onto FR Bus 20337 and those results provided to inputs of MULTRF 20350, LZD 20376, ECPT 20328, and CONSIZE 20352, and to
input of FROM 20324 for transfer onto JPD Bus 10142.

As indicated in FIG. 258, MULT 20314 further includes a Carry Register (CRRYR) having data inputs connected from output of MULTALU2 20374 and having control outputs to MULTSHFT12 20366. Operation of CRRYR 25812 will be described further below in
a following description of MULT 20314 arithmetic operations with decimal operands.

c.c. Multiplier 20314 Arithmetic Operations

Having described structure and operation of MULT 20314, operation of MULT 20314 will be further illustrated below with further descriptions of certain arithmetic operations which may be performed by MULT 20314. Arithmetic operations which will
be described further below, and the order in which they will be described, include multiplication of floating point numbers and addition and subtraction of decimal numbers. Other features of MULT 20314 operation with respect to integer, decimal, and
floating point operands have been described previously, and will be further illustrated by the following specific examples

a.a.a. Floating Point Operations

In considering first multiplication of two floating point operands, for example single precision floating point operands, one operand is referred to as multiplier operand and the other is multiplicand operand. Each of these operands is comprised
of a 24 bit mantissa field and an 8 bit exponent field wherein one bit of exponent field is a sign bit. Each 24 bit mantissa field is structured as six 4 bit, or one nibble, subfields wherein each subfield contains a hexadecimal character, that is a 4
bit binary number having value between zero and 15. As described above and will be described further below, exponent fields of multiplier and multiplicand operands are read from OPB 20322 to EXP 20316 through EXPQ Bus 20325. Concurrently, mantissa
fields of multiplier and multiplicand operands are read from OPB 20322 to MULT 20314 through OPQ Bus 20323 and MULTIM 20328. Multiplier mantissa field is written through MULTIN Bus 20354, into NIBSHF 20358. Multiplicand mantissa field is written,
through MULTIN Bus 20354 into MQR 20356. At this time, contents of RFR 20336 and of MWR 20372 are set to zero.

Input of PPS 25810, at this time, is the least significant character of multiplier mantissa field from NIBSHF 20358. From this input, PPS 25810 generates control signals to MULTSHFT12 20366, MULTSHFT48 20368, and MULTALU1 20370 to generate
first, or least significant, partial product of the multiplication operation. First partial product represents, the product of the least significant character of multiplier mantissa field times the multiplicand mantissa field stored in MQR 20356. If,
for example, the numeric value of least significant multiplier mantissa field character is equal to three, PPS 25810 will provide control outputs selecting first input of MULTSHFT12 20366, and first input of MULTSHFT48 20368. First and second inputs of
MULTALU1 20370 will thereby respectively represent values equal to one times and four times multiplier mantissa field stored in MQR 20356. Control outputs of PPS 25810 will direct MULTALU1 20370 to subtract MULTALU1 20370's first input from MULTALU1
20370's second output so that output of MULTALU1 20370 will be a hexadecimal character number representing three times the value of multiplicand mantissa field. This first output of MULTALU1 20370 is thereby first partial product of the multiplication
operation. In generating partial products, it should be noted that certain partial products may be generated directly by selecting a single input of MULTSHFT12 20366 or MULTSHFT48 20368; for example, partial products equal to one, two, four, and eight
times multiplicand mantissa field may be so generated directly. Certain other partial products require addition and subtraction of outputs of both MULTSHFT12 20366 and MULTSHFT48 20368. For example, as described above a partial product of three times
multiplicand mantissa field is generated, effectively, as four times multiplicand mantissa field minus one times multiplicand mantissa field. This is accomplished by selecting first inputs of both MULTSHFT12 20366 and MULTSHFT48 20368 and subtracting
output of MULTSHFT12 20366 from output of MULTSHFT48 20368. As a further example, a partial product of five times multiplicand mantissa field is generated as four times plus one times that field. Certain partial products, however, are generated during
two, successive partial product operations. These partial products lie in the range of between 11 and 15 times value of multiplicand mantissa field. For example, a partial product of 13 times multiplicand mantissa field is generated as 16 times
mantissa field minus 3 times mantissa field. During first partial product operation, a partial product of minus three times mantissa field is generated and treated, as described further below, as the partial product for that operation. A carry
representing 16 times multiplicand mantissa field is generated and carried forward to next partial product operation. For example, if next partial product originally called for three times multiplicand mantissa field, that next partial product would now
call for four times multiplicand mantissa field. As previously described, PPS 25810, as part of normal operation, detects multiplier hexadecimal character values of 11 and greater to automatically provide appropriate control signals to MULTSHFT12 20366,
MULTSHFT48 20368, and MULTALU1 20370 to execute such two stage partial product generation operations, including generating and carrying forward of carries. Continuing the discussion, first partial product output of MULTALU1 20370 is loaded into MWR
20372 and provided by MWR 20372 to first input of MULTALU2 20374. MULTALU2 20374 then adds first partial product from MWR 20372 to output of RFR 20336. Output of MULTALU2 20374 is then transferred through FRS 20362, right shifting by 4 bits, and stored
in RFR 20336.

MULT 20314 then repeats the above operation to generate a second partial product for next most significant hexadecimal character of multiplier mantissa field by right shifting the contents of NIBSHF 20358 by one nibble and repeating the above
operations. In this manner, contents of RFR 20336 represents summation of all partial products generated during the multiplication operation. At conclusion of multiplication operation, which may require an additional partial product step if most
significant character of multiplier mantissa field required a two step partial product operation, contents of RFR 20336 represent the multiplied value of multiplier and multiplicand mantissa fields. Multiplication mantissa field results contained in RFR
20336 may then be transferred, as described above, into MULTRF 20350, or transferred onto JPD Bus 10142 in conjunction with results of corresponding exponent field multiplication operations provided from EXP 20316. Double precision floating point
multiplication operations are executed in the same manner as described above for single precision operations. Double precision operations require 14 or 15 partial product operations rather than 6 or 7, due to increased length of double precision
floating point operand mantissa fields.

b.b.b. Decimal Operations

Having described multiplication of floating point operands, which basic operation may be utilized in multiplication of integer and decimal operands, addition of decimal operands will be described next. As previously described, decimal operands
are comprised of binary coded decimal characters of four bits each wherein each character may represent a numeric value between zero and nine. As will be described below, decimal operand addition and subtraction operations are performed utilizing binary
arithmetic logic by converting the decimal operands into a format suitable for use in binary arithmetic logic circuits.

Assuming two 32 bit decimal operands are to be added, or subtracted, a first operand is read from OPB 20322 and loaded into MQR 20356. First operand is then transferred through MULTSHFT12 20366 first input and through MULTALU1 20370 and loaded
into MWR 20372. At this time, a 32 bit constant word comprised of 8 BCD characters, wherein each character is a BCD 6, is read from CONST 20360 and loaded into MQR 20356. Susequently, first operand is read from MWR 20372 through MULTALU2 20374 and FRS
20362 and loaded into RFR 20336. Concurrently, the constant word is transferred from MQR 20356 through MULTSHFT12 20366 and MULTALU1 20370 and loaded into MWR 20372. First operand, then residing in RFR 20336, is then added to constant word residing in
MWR 20372 by MULTALU2 20374 and the result transferred through FRS 20362 and loaded into RFR 20336. During this operation, second decimal operand may be read from OPB 20322 and loaded into MQR 20356, and then transferred into MWR 20372. Second operand
is then added, by MULTALU2 20374 to the contents of RFR 20336 which, as stated above, is the sum of first operand and constant word. Output of MULTALU2 20374 is thereby sum of first and second operands and constant word. This output, hereafter referred
to intermediate decimal result, is comprised of four bit BCD characters, as were first and second operands and constant word.

As previously described, inputs of CRRYR 25812 are connected from carry outputs of MULTALU2 20374's four bit adders. CRRYR 25812 is utilized during addition or subtraction of decimal characters to capture and store the carry outputs of the
individual BCD characters when second operand is added to sum of first operand and constant word to yield intermediate decimal result. Intermediate decimal result is then loaded into RFR 20336 while a second copy of constant is read from CONST 20360 and
loaded into MQR 20356. The carry outputs resulting from the MULTALU2 20374 addition operation yielding intermediate decimal result and stored in CRRYR 25812. The carry outputs are then utilized as control inputs to MULTSHFT 12 20366 to select certain
characters of second copy of constant word stored in MQR 20356. These selected characters from second copy of constant word are loaded into MWR 20372. In a final addition operation, selected characters of second copy of constant word stored in MWR
20372 are subtracted from intermediate decimal result stored in RFR 20336 by MULTALU2 20374. This final addition operation transforms intermediate decimal result into a final decimal result in BCD format and this final decimal result is loaded into RPR
20336. Final decimal result may then read from RFR 20336 and transferred into MULTRF 20350 or read onto JPD Bus 10142 as previously described.

Decimal operands of more than 8 BCD characters may be added or subtracted as described above by executing successive additions or subtractions of eight decimal characters at a time. MULTRF 20350 is utilized to store the intermediate results of
these operations until a final result is achieved Multiplication and division of decimal operands may be similarly performed by performing repetitive addition or subtraction operations of decimal operands as has been described above.

Finally, LZD 20376, previously described and described further below, is utilized in part to enhance speed of execution of multiplication, division, addition, and subtraction operations. LZD 20376 examines successive nibbles of each operand in
an arithmetic operation, starting with the most significant, to determine which, if any, leading nibbles contain zeros. In certain cases, for example the most significant nibbles of multiplicands, the arithmetic operation need not be executed for these
nibbles as, containing zeros, they will yield zeros in the result. LZD 20376 will provide corresponding control outputs which will cause the arithmetic operation to be correspondingly truncated, thus enhancing speed of execution of the operation by
eliminating unnecessary stops of the operation.

MULT 20314 is thereby capable of performing a range of arithmetic operations, including conversion of decimal operands to formats suitable for utilization with binary arithmetic elements and reconversion of results to decimal formats. These
operations may be combined or performed in any sequence or combination under control of microinstruction sequences provided by EUCL 20310 to perform any desired or necessary arithmetic operation. A present embodiment of EU 10122 provides
microinstruction sequences for performing addition, subtraction, multiplication, and division operations with respect to integer, packed and unpacked decimal, and single and double precision floating point operands. Other embodiments of EU 10122 may
provide microinstruction sequences to perform any other selected arithmetic operations involving any other selected operand formats.

Having described structure and operations of MULT 20314, structure and operation of EXP 20316 will be described next below.

Referring to FIG. 259, EXP 20316 and MULTCNTL 20318 are shown. Referring first to EXP 20316, EXP 20316 is a general purpose unit for executing arithmetic operations and is used, in particular, for arithmetic operations regarding exponent fields
of single and double precision floating point operands. Data inputs to EXP 20316 are provided to EXPQ Bus 20325 from OPB 20322. Results of EXP 20316 operations may be transferred from SCALER 20338 to JPD Bus 10142 through EXOM 20326. Alternately,
results of EXP 20316 operations from SCALER 20338 may be transferred onto EXPQ Bus 20325 and from EXPQ Bus 20325 onto RSLT Bus 20388 through Exponent Bus to Result Bus Driver (EXPRSLT) 25910.

EXP 20316's arithmetic operations, for example addition and subtraction of floating point operand exponent fields when multiplying or dividing floating point operands, are executed by EXPALU 20384. EXPALU 20384 is a 8 bit general purpose
arithmetic and logic unit comprised, for example, of SN74S181s. EXPALU 20384's first and second data inputs are provided, respectively, from INSELA 20330 and from INSELB 20348. INSELA 20330 and INSELB 20348 are multipexer circuits respectively
comprised, for example, of SN74S157s and SN74S153s.

Results of EXPALU 20384 operations are provided as inputs to SCALER 20338, which operates both as a data storage register and as a shift register for diagnostic purposes. These results may be transferred from SCALER 20338 to SCLR Bus 20339.
SCALER 20338 may be comprised, for example, of SN74S194s.

As just described, data inputs to EXPALU 20384 are provided from INSELA 20330 and from INSELB 20348. Referring first to INSELA 20330, INSELA 20330 is provided with a first data input from EXPQ Bus 20325 and a second data input from EXPRF 20380.
INSELA 20330's first data input from EXPQ Bus 20325 may be utilized to provide operand information directly to INSELA 20330 from OPB 20322. Alternately, outputs of SCALER 20338 may be provided to INSELA 20330's first input through a feed back path
comprised of SCLR 20339, SCLR to EXPQ Bus Driver (SCEXPQ) 25912, and EXPQ Bus 20325. INSELA 20330's second input is provided with data from output of EXPRF 20380, whose inputs are in turn provided from output of EXRM 20332.

A first input of EXRM 20332 is connected from EXPQ Bus 20325 and may be utilized to transfer operand information directly into EXPRF 20380 directly from OPB 20322. This data path may be utilized, for example, in operations regarding exponent
fields of floating point operands. Exponent field of a first floating point operand may be transferred from OPB 20322 to EXPRF 20380 through EXRM 20332 and held therein until mantissa field of second operand has been read from OPB 20322 and into second
input of INSELB 20348. Exponent field of second operand may then be provided to second input of EXPALU 20384 by INSELB 20348 while exponent field of first operand is read from EXPRF 20380 and through second input of INSELA 20330 to first input of EXPALU
20384. EXPALU 20384 may then perform addition or subtraction operations upon the two exponent fields as required.

Second input of EXRM 20332 is connected from output of SCALER 20338. This data path from output of SCALER 20338 may be utilized to transfer results of EXPALU 20384 and SCALER 20338 operations into EXPRF 20380 to be stored for subsequent use. As
indicated in FIGS. 203 and 259, a second input of EXPRF 20380 is provided from output of SIGN 20382. This connection, and operation of SIGN 20382, will be described in following description.

Referring to INSELB 20348, INSELB 20348 is provided with 4 data inputs. INSELB 20348's second data input is connected from EXPQ Bus 20325 and, as described above, may be utilized to read, for example, floating point operand exponent fields into
INSELB 20348 from OPB 20322. INSELB 20348's third data input is connected from output of SCALER 20338 through SCLR Bus 20339. ISELB 20348's third input may be utilized as part of a feed back path to transfer results of EXPALU 20384 and SCALER 20338
operations from SCALER 20338 to second input of EXPALU 20384.

INSELB 20348's first input is connected from an output of mCRD 20346 and EUCL 20310. INSELB 20348's first input allows a predetermined literal field from a microinstruction word in EUSITT 20344 to be provided as second input to EXPALU 20384.
This input may be utilized, for example, in executing case operations as previously described above with reference to NAG 20340.

INSELB 20348's fourth input is from output of Leading Zero Detecting Register (LZDR) 25914 which, in turn, is connected from output of Leading Zero Detect Logic (LZDL) 25916 and LZD 20376. Operation of LZDL 25916, LZDR 25914 and INSELB 20348's
fourth input will be described further below.

b.b. Exponent Logic 20316 and Multiplier Control 20318 Operation

As previously described, a primary function of EXP 20316 is execution of arithmetic operations of exponent fields during EU 10122 operations concerning single and double precision floating point operands. Operation of MULT 20314 and EXP 20316
with regard to floating point operands is coordinated and controlled, as described momentarily, through operation of LZD 20376 and SHFTCNTL 20364 of MULTCNTL 20318.

As previously described, a first function of EXP 20316 with respect to floating point operand operations is addition and subtraction of exponent fields during, respectively, multiplication and division of floating point operands. A second
function is prealignment, that is equalization, of exponent fields in addition and subtraction of floating point operands. As previously described, prealignment is accomplished by right or left shifting of one operand mantissa field so that,
effectively, exponent fields of both operands are equal.

Prealignment of operands is accomplished, in part, through SHFTCNTL 20364. Exponent fields of two floating point operands to be prealigned are subtracted by EXPALU 20384 and the result, representing difference between the two operand exponent
fields, loaded into SCALER 20338. Difference between exponent fields is then provided as an input to SHFTCNTL 20364 through SCLR Bus 20339. SHFTCNTL 20364 is primarily comprised of a Read Only Memory. SHFTCNT 20364 generates output control signals to
NIBSHF 20358, selecting direction and amount of shift required of one operand's mantissa field stored therein to accomplish equalization, or prealignment, of the two operands exponent fields. The two operand mantissa fields may then be added or
subtracted as required.

A third floating point operand function, also previously described, is normalization of a floating point operand operation result, that is left shifting of result mantissa field to eliminate leading zeros therein. As previously described,
floating point operand intermediate result appears in RFR 20336 and is transferred onto FR Bus 20337. Floating point operand intermediate result is then provided from FR Bus 20337 to input of LZDL 25916 in LZD 20376. LZDL 25916 detects which if any
leading, or most significant, hexadecimal characters of floating point operand intermediate result contain all zeros. LZDL 25916 generates output signals indicating the number of leading zero nibbles in floating point operand intermediate result and
these control signals are loaded into and stored in LZDR 25914. LZDR 25914 is a storage register and provides four inputs to INSELB 20348. Number of leading zero nibbles stored in LZDR 25914 is then provided as fourth input to INSELB 20348 and as an
input to SHFTCNTL 20364. Again, SHFTCNTL 20364 generates control signal outputs to NIBSHF 20358, which has been presented with floating point operand intermediate result. Floating point operand intermediate result is then left shifted in NIBSHF 20358
by an amount sufficient to eliminate all leading zeros. Concurrently, number of leading zero nibbles is read from LZDR 25914 and into second input of EXPALU 20384 while floating point operand intermediate result exponent field is read from EXPRF 20380
and into first input of EXPALU 20384. Number of leading zero nibbles from LZDR 25914 is then subtracted from floating point operand intermediate result exponent field to provide final result exponent field. Final result exponent field is then read from
SCALER 20338 while final result mantissa field is read from RFR 20336. Finally, result of floating point operand arithmetic operation may then be transferred onto JPD Bus 10142 as previously described.

SHFTCNTL 20364 also provides shift control signals to NIBSHF 20358 during MULT 20314 multiplication operations. A third input to SHFTCNTL 20364 is provided from Shift Increment Counter (SHFTIC) 25918, which is a six bit counter. Data inputs of
SHFTIC 25918 are connected from outputs of mCRD 20346, to load initial count values, and SHFTIC 25918 counting operations are controlled by microinstruction outputs of mCRD 20346. SHFTCNTL 20364, operating under control of input from SHFTIC 25918, will
then cause right shifts, nibble by nibble, of multiplier operands stored in NIBSHF 20358 during multiplication operations.

In addition to the above described function, MULTCNTL 20318 also controls conversion of packed decimal results into unpacked decimal results when required. As previously described, MULT 20314's performs all arithmetic operations upon unpacked
decimal operands in packed decimal form after those unpacked decimal operands have been transformed into packed decimal operands in OPB 20322. MULT 20314 may then transform those packed decimal results back into unpacked decimal results for transmission
to FU 10120 or MEM 10112.

As previously described, results of packed decimal operations appear in RFR 20336, and may be transferred onto FR Bus 20337. As indicated in FIG. 259, inputs of Unpacked Decimal Logic (UPDL) 25920 are connected from FR Bus 20337. Control
outputs of UPDL 25920 are connected to inputs of CONSTAM 25710 and may thus be provided as address inputs to CONST 20360. UPDL 25920 is primarily comprised of logic gating for examining the results of unpacked decimal operations appearing on FR Bus
20337. UPDL 25920 then ascertains the locations zone fields are to occupy in corresponding unpacked decimal results and generates corresponding control signals to UPDL 25920. UPDL 25920 control outputs are then utilized as address inputs to CONST 20360
which, in turn, provides zone fields in appropriate locations on MULTIN Bus 20354.

Finally, referring again to EXP 20316, EXP 20316 performs certain sign logic operations to determine arithmetic sign of the results of EU 10122 operations. These sign operations are performed, in particular, by SIGN 20382. SIGN 20382 has single
bit first and second inputs connected from, respectively, second input to INSELB 20348 and an output of EXPRF 20380. These inputs comprise sign bits of operands provided to EU 10122 through OPB 20322. For example, first and second inputs of SIGN 20382
may be sign bits of the exponent fields of two floating point operands to be added, subtracted, multiplied, or divided by EU 10122. SIGN 20382 also receives an input (not shown for clarity of presentation) from EUCL 203l0 indicating the arithmetic
operation to be performed. Utilizing these inputs, SIGN 20382 generates a single bit output indicating sign of result of the arithmetic operation to be performed. Output of SIGN 20382 is provided as second input to EXPRF 20380 where sign of result is
stored for further use in subsequent arithmetic operations, or until final result is read onto JPD Bus 10142.

Having described structure and operation of EXP 20316 and MULTCNTL 20318, and previously of EUCL 20310, EUIO 20312, and MULT 20314, structure and operation of TSTINT 20320 will be described next below. The following description of TSTINT 20320
will include description of certain EU 10122 operations, for example EU 10122's Stack Mechanisms, and will include description of EU 10122's interfaces with FU 10120 and MEM 10112.

5. Test and Interface Logic 20320 (FIGS. 260-268)

As previously described, TSTINT 20320 includes CONSIZE 20352, ECPT 20328, TSTCOND 20384, and INTRPT 20388. CONSIZE 20352, as previously described, performs "container size" check operations when results of EU 10122 operations are to be written
into MEM 10112. That is, CONSIZE 20352 compares size or number of significant bits, of an EU 10122 result to the capacity, or container size, of the MEM 10112 location that EU 10122 result is to be written into. As indicated, in FIG. 203, CONSIZE 20352
receives a first input, that is the results of EU 10122 operations, from FR Bus 20337. A second input of CONSIZE 20352 is connected to LENGTH Bus 20226 to receive length field of logical descriptors identifying MEM 10112 address space into which those
EU 10122 results are to be written. CONSIZE 20352 includes logic circuitry, for example a combination of Read Only Memory and Field Programmable Logic Arrays, for examining EU 10122 operation results appearing on FR Bus 20337 and determining the number
of bits of data in those results. CONSIZE 20352 compares EU 10122 result size to logical descriptor length field and, in particular, if result size exceeds logical descriptor length, provides an alarm output to ECPT 20328, described below.

TSTCOND 20384, previously described and which will be described further below, is an interface circuit between FU 10120 and EU 10122. TSTCOND 20384 allows FU 10120 to specify and examine results of certain test operations performed by EU 10122
with respect to EU 10122 operations.

Operation of CONSIZE 20352, ECPT 20328, TSTCOND 20384, INTRPT 20388, and other features of EU 10122's interface with FU 10120 will be described further below in the following description of operation of that interface and of operation of certain
EU 10122 internal mechanisms, such as FU 10120 Stack Mechanisms.

a.a. FU 10120/EU 10122 Interface

As previously described, EU 10122 and FU 10120 are asychronous processors, each operating under its own microcode control. EU 10122 and FU 10120 operate simultaneously and independently of each other but are coupled, and their operations
coordinated, by interface signals described below. Should EU 10122 not be able to respond immediately to a request from FU 10120, FU 10120 will idle until EU 10122 becomes available; conversely, should EU 10122 not receive, or have present, operands or
a request for operations from FU 10120, EU 10122 will remain in idle state until operands and requests for operations are received from FU 10120.

In normal operation, EU 10122 manipulates operands under control of FU 10120, which in turn is under control of SOPs of a user's program. When FU 10120 requires arithmetic or logical manipulation of an operand, FU 10120 dispatches a command,
that is an Execute Unit Dispatch Pointer (EUDP) to EU 10122. As previously described, an EUDP is basically an initial address into EUSITT 20344. An EUDP identifies starting location of a EU 10122 microinstruction sequence performing the required
operation upon operands. Operands are fetched from MEM 10112 under FU 10120 control, as previously described, and are transferred into OPB 20322. Those operands are then called from OPB 20322 by EU 10122 and transferred into MULT 20314 and EXP 20316 as
previously described. After the required operation is completed, FU 10120 is notified that a result is ready. At this point, FU 10120 may check certain test conditions, for example through TSTCOND 20384, such as whether an integer or decimal carry bit
is set or whether a mantissa sign bit is set or reset. This test operation is utilized by FU 10120 for conditional branching and synchronization of FU 10120 and EU 10122 operations. Exception checking, by ECPT 20328, is also performed at this time.
Exception checking determines, for example, whether division by zero was attempted or if a container size fault has occurred. In general, FU 10120 is not informed of exception errors until FU 10120 requests exception checking. After results are
transferred into FU 10120 or MEM 10112 by EU 10122, EU 10122 goes to idle operation until a next operation is requested by FU 10120.

Having briefly described overall interface operation between FU 10120 and EU 10122, operation of that interface, referred to as handshaking, will be described in greater detail next below. In general, handshaking operation between EU 10122 and
FU 10120 during normal operation may be regarded as following into six operations. These operations may include, for example, loading of COMQ 20342, loading of OPB 20322, storeback or transfer of results from EU 10122 to FU 10120 or MEM 10112, check of
test conditions, exception checking, and EU 10122 idle operation. Handshaking between FU 10120 and EU 10122 will be described below for each of these classes of operation, in the order just referred to.

Dialect information specifies the S-Language currently being executed and, consequently, the group of microinstruction sequences available in EUSITT 20344 for that S-Language. As previously described, FU 10120 may specify four S-Language
dialects with up to 256 EU 10122 microinstruction sequences per dialect, or 8 dialects with up to 128 microinstruction sequences per dialect.

EUDPs provided by EUSDT 20266 are comprised of a 9 bit address field, a 2 bit operand information field, and a 1 bit flag field, as previously described. Address field is starting address of a microinstruction sequence in EUSITT 20344 and EU
10122 will perform the operation directed by that microinstruction sequence. EUSITT 20344 requires 11 bits of address field and the 9 bit address field of EUDPs are mapped into an 11 bit address field by left justification and zero filling.

FU 10120 may also dispatch, or select, any EU 10122 microinstruction controlled operation from JPD Bus 10142. Such EUDPs are provided from JPD Bus 10142 to data input of EUSITT 20344 and passed directly through to mCRD 20346. Before a EUDP may
be provided from JPD Bus 10142, however, FU 10120 provides a check operation comparing that EUDP to a list of legal, or allowed, EUSITT 20344 addresses stored in MEM 10112. A fault will be indicated if an EUDP provided through JPD Bus 10142 is not a
legal EUSITT 20344 address. Alternately, FU 10120 may effectively provide an EUDP, or EUSITT 20344 addresses, from a literal field in a FU 10120 microinstruction word. Such a FU 10120 microinstruction word literal field may be effectively utilized as
an SOP into EUSDT 20266.

Handshaking between EU 10122 and FU 10120 during load COMQ 20342 operations may proceed as illustrated in FIG. 260. A twelve bit EUDP may be placed on EUDIS Bus 20206 and Control Signal Load Command Queue (LDCMQ) asserted. If COMQ 20342 is
full, EU 10122 raises control signal Command Hold (CMDHOLD) which causes FU 10120 to remain in State M0 until there is room in COMQ 20342. As previously described, COMQ 20342 is comprised of two, two word buffers wherein one buffer is utilized for
normal SOP operation and the other utilized for control of FU 10120 and EU 10122 internal mechanism operation.

EUDPs are loaded into COMQ 20342 when state timing signals MlCPT and Ml are asserted. If a EUDP being transferred into COMQ 20342 concerns a double precision floating point operation, control signal Set Double Precision (SETDP) is asserted.
SETDP is utilized to control OPB 20322, and because single precision and precision floating point operations otherwise utilize the same SOP and thus would otherwise refer to same EUSITT 20344 microinstruction sequence.

At this point, a EUDP has been loaded into COMQ 20342 and will be decoded to control FU 10120 operation by EUCL 20310 as previously described. Each particular EUDP will be cleared by that EUDPs EUSITT 20344 microinstruction sequence after the
requested microinstruction sequence has been executed.

b.b.b. Loading of Operand Buffer 20320 (FIG. 261)

Referring to FIG. 261, a diagramic representation of the interface and handshaking between EU 10122, FU 10120 and MEM 10112 for loading OPB 20322 is shown. Control signal Clear Queue Full (CLQF) from EU 10122 must be asserted by EU 10122 before
FU 10120 initiates a request to MEM 10112 for an operand to be transferred to EU 10122. CLQF clears and "EU 10122's OPB 20322 Full" condition in FU 10120. CLQF indicates, thereby, that there is room in OPB 20322 to receive operands. If FU 10120 is in
a "EU 10122's OPB 20322 Full" condition and further operand is required to be transferred to EU 10122, FU 10120 will remain in State Ml until CLQF is asserted.

At the beginning of execution of a particular SOP, FU 10120 may transfer two operands to OPB 20322 without "EU 10122's OPB 20322 Full" condition occurring. This is because EU 10122 is idle at the beginning of an SOP execution and generally
immediately unloads a first operand from OPB 20322 before a second operand arrives.

Control signal Job Processor Operand (JPOP) provided from FU 10120 must be non-asserted for operands to be transferred from MEM 10112 to OPB 20322 through MOD Bus 10144. This is the normal condition of JPOP. If JPOP is asserted, OPB 20322 is
loaded with data from JPD Bus 10142. Data is strobed into OPB 20322 from JPD Bus 10142 by control signals MlCPT and JPOP. Operands read from MEM 10112, however, are transferred into OPB 20322 through MOD Bus 10144 when MEM 10112 asserts DAVEB to
indicate that valid data from MEM 10112 is available on MOD Bus 10144. DAVEB is also utilized to strobe data on MOD Bus 10144 into OPB 20322. If control signal ZFILL from MEM 10112 is asserted at this point, ZFILL is interpreted during integer operand
operations to indicate that those operands are unsigned and should be left zero filled, rather than sign extended. If data is being provided from JPD Bus 10142 rather than from MEM 10112, that is if JPOP is asserted, bit 11 of current EUDP may be
utilized to perform the same function as ZFILL during loading of OPB 20322 from MOD Bus 10144.

Loading of OPB 20322 is controlled, in part, by bits 9 and 10 of EUDPs provided from FU 10120 through EUDIS Bus 20206. Bit 9 indicates length of a first operand while bit 10 indicates length of a second operand. Operand length, together with
operand type specified in address portion of a EUDP, determines how a particular operand is unloaded from OPB 20322 and transferred into MULT 20314 and EXP 20316.

At this point, both COMQ 20342 and OPB 20322 have been loaded with, respectively, EUDPs and operands. It should be noted that operands are generally not transferred into OPB 20322 before a corresponding EUDP is loaded into COMQ 20342. Operands
and EUDPs may, however, be simultaneously transferred into EU 10122. If other operands are required for a particular operation, those operands are loaded into OPB 20322 as described above.

c.c.c. Storeback (FIG. 262)

Referring to FIG. 262, a diagramic representation of a storeback, or transfer, of results to MEM 10112 from EU 10122 and handshaking performed therein is shown. When a final result of a EU 10122 operation is available, EU 10122 asserts control
signal Data Ready (DRDY). FU 10120 thereupon responds with control signal Transfer to JPD Bus 10142 (XJPD), which gates EU 10122's result onto JPD Bus 10142. In normal operation, that is execution of SOPs, FU 10120 causes EU 10122's result to be stored
back into a destination in MEM 10112, as selected by a physical descriptor provided from FU 10120. Alternately, a result may be transferred into FU 10120, 32 bits, or one word, at a time.

FU 10120 may, as described above and described further below, check EU 10122 test conditions during storeback of results. FU 10120 generates control signal Transfer Complete (XFRC) once the storeback operation is completed. XFRC also indicates
to EU 10122 that EU 10122's results and test conditions have been accepted by FU 10120, so that EU 10122 need no longer assert these results and test conditions.

d.d.d. Test Conditions (FIG. 263)

Referring to FIG. 263, a diagramic representation of checking of EU 10122 test conditions by FU 10120, and handshaking therein, is shown. As previously described, test results indicating certain conditions and operations of EU 10122 are sampled
and stored in TSTCOND 20384 and may be examined by FU 10120. When DRDY is asserted by EU 10122, FU 10120 may select, for example, one of 8 EU 10122 conditions to test, as well as transferring results as described above. EU 10122 conditions which may be
tested by FU 10120 are listed and described below. Such conditions, as whether a final result is positive, negative, or zero, may be checked in order to facilitate conditional branching of FU 10120 operations as previously described. FU 10120 specifies
a condition to be tested through Test Condition Select signals (TEST(2-4)). FU 10120 asserts control signal EU Test Enable (EUTESTEN) to EU 10122 to gate the selected test condition. That selected test condition then appears as Data Signal Test
Condition (TC) from EU 10122 to FU 10120. A TC of logic 1 may, for example, indicate that the selected condition is false while a TC of logic 0 may indicate that the selected condition is true. FU 10120 indicates that FU 10120 has sensed the requested
test condition, and that the test condition need no longer be asserted by EU 10122, by asserting control signal XFRC.

e.e.e Exception Checking (FIG. 264)

Referring to FIG. 264, a diagramic representation of exception checking of EU 10122 exceptions by FU 10120, and handshaking therein, is shown. As previously described, any EU 10122 exception conditions may be checked by FU 10120 as FU 10120 is
initiating storeback of EU 10122 results. Exception checking may detect, for example, attempted division by zero, floating point exponent underflow or overflow, or a container size fault. An attempted division by zero or floating point underflow or
overflow may be checked before storeback, that is without specific request by FU 10120.

As previously described, a container size fault is detected by CONSIZ 20352 by comparing length of result with size of destination container in MEM 10112. Container size exception checking occurs during store back of EU 10122 results, that is
while FU 10120 is in State SB. Container size is automatically performed by EU 10122 hardware, that is by CONSIZE 20352, only on results of less than 33 bits length. Size checking of larger results, that is larger integers and BCD results, is performed
by a microcode routine, using CONSIZE 20352's output, as transfer of such larger results is executed as string transfer. It is unnecessary to perform container size check for either single or double precision floating point results as these data types
always occupy either 32 or 64 bits. Destination container size is provided to CONSIZE 20352 through LENGTH Bus 20226.

Control signal Length to Memory AON or Random Signals (LMAONRS) is generated by FU 10120 from Type field of the logical descriptor corresponding to a particular EU 10122 result. LMAONRS indicates that the results data type is an unsigned
integer. LMAONRS determines the manner in which a required container size of the EU 10122 result is determined. After receiving this information from LMAONRS, EU 10122 determines whether destination container size in MEM 10112 is sufficiently large to
contain the EU 10122 result. If that destination container size is not sufficiently large, a container size fault is detected by CONSIZE 20352, or through an EU 10122 microinstruction sequence.

Container size faults, as well as division by zero and exponent underflow and overflow faults, are signaled to FU 10120 when FU 10120 asserts control signal Check Size (CKSIZE). At this time, EU 10122 asserts control signal Exception (EXCPT) if
any of the above faults has occurred. If a fault has occurred, an Event request to FU 10120 results. When an Event request is honored by FU 10120, FU 10120 may interrupt EU 10122 and dispatch EU 10122 to a microinstruction routine that transfers those
exception conditions onto JPD Bus 10142. If a container size fault has caused that exception condition, EU 10122 may transfer to FU 10120 the required container size through JPD Bus 10142.

f.f.f. Idle Routine

Finally, when a current EU 10122 operation is completed, EU 10122 goes into an Idle loop microinstruction routine. If necessary, FU 10120 may assert control signal Excute Unit Abort (EUABORT) to force EU 10122 into Idle loop microinstruction
routine until EU 10122 is required for further operations.

g.g.g. Eu 10122 Stack Mechanisms (FIGS. 265, 266, 267)

As previously described, EU 10122 may perform either of two classes of operations. First, EU 10122 may perform arithmetic operations in execution of SOPs of user's programs. Second, EU 10122 may operate as an arithmetic calculator assisting
operation of FU 10120's internal mechanisms and operations, referred to as kernel operations.

In kernel operation, EU 10122 acts as an arithmetic calculator for FU 10120 during address generation, address translation, and other kernel functions. In kernel mode, EU 10122 is executing microinstruction sequences at request of FU 10120
kernel microinstruction sequences, rather than at request of an SOP. In general, these kernel operations are vital to operation of JP 10114. FU 10120 may interrupt EU 10122 operations with regard to SOPs and initiate EU 10122 microinstruction sequences
to perform kernel operations.

When interrupted, EU 10122 saves EU 10122's current operating state in a one level deep stack. EU 10122 may then accept an EUDP from that portion of COMQ 20342 utilized to receive and store EUDPs regarding FU 10120's and EU 10122's internal, or
kernel, operations. When requesting kernel operations by EU 10122, FU 10120 generally transfers operands to OPB 20322 through JPD Bus 10142, and receives EU 10122 final results through JPD Bus 10142. Operands may also be provided to EU 10122 through
MOD Bus 10144. After EU 10122 has completed a requested kernel operation, EU 10122 reloads operating state from its internal stack and continues normal operation from the point normal operation was interrupted.

Should another interrupt from FU 10120 occur while a prior interrupt is being executed, EU 10122 moves current state and data, that is of first interrupt, to MEM 10112. EU 10122 requests FU 10120 store state and date of first interrupt in MEM
10112 by requesting an "EU 10122 Stack Overflow" Event. EU 10122's "normal" state, that is state and data pertaining to the operation EU 10122 is executing at time of occurrence of first interrupt, is stored in an EU 10122 internal stack and remains
there. EU 10122 then begins executing second interrupt. When EU 10122 has completed operations for second interrupt, state from first interrupt is reloaded from MEM 10112 by EU 10122 requesting a "EU 10122 Stack Underflow" Event to FU 10120. EU 10122
then completes execution of first interrupt and reloads state and resumes execution of normal operation, that is the operation being executed before the first interrupt.

EU 10122 is therefore capable of handling interrupts from FU 10120 during two circumstances. First interrupt circumstance is comprised of interrupts occurring during normal operation, that is while executing SOPs of user's programs. Second
circumstance arises when interrupts occur during kernel operations, that is during execution of microinstruction sequences for handling interrupts. EU 10122 operation will be described next below for each of these circumstances, and in the order
referred to.

Referring to FIG. 265, a diagramic representation of EU 10122's stack mechanisms, previously described, is shown. Those portions of EU 10122's stack mechanisms residing within EU 10122 are comprised of EU 10122's Current State Registers (EUCSRs)
26510 and EU 10122's Internal Stack (EUIS) 26512. EUCSR 26510 is comprised of EU 10122's internal registers which contain data and state of current EU 10122 operation. EUCSR 26510 may be comprised, for example, of mCRD 20346, registers of TSTINT 20320,
and the previously described registers within MULT 20314 and EXP 20316.

State and data contained in EUCSR 26510 is that of the operation currently being executed by EU 10122. This current state may, for example, be that of a SOP currently being executed by EU 10122, or that of an interrupt, for example a fourth
interrupt of a nested sequence of interrupts, requested by FU 10120.

EUIS 26512 is comprised of certain registers of MULTRF 20350 and EXPRF 20380. EUIS 26512 is utilized to store and save current state of an SOP operation currently being executed by EU 10122 and which has been interrupted. State and data of that
SOP operation will remain stored in EUIS 26512 regardless of the number of interrupts which may occur on a nested sequence of interrupts requested by FU 10120. State and data of the interrupted SOP operation will be returned from EUIS 26512 to EUCSR
26510 when all interrupts have been completed.

Final portion of EU 10122's stack mechanism is that portion of EU 10122's internal stack (EUES) 26514 residing in MEM 10112. EUES 26514 is comprised of certain MEM 10112 address locations used to store state and data of successive interrupt
operations of sequences of nested interrupts. That is, if a sequence of four interrupts is requested by FU 10120, state and data of fourth interrupt will reside in EUCSR 26510 while state and data of first, second, and third interrupts have been
transferred, in sequence, into EUES 26514. In this respect, and as previously described operation of EU 10122's stack mechanisms is similar to that of, for example, MIS 10368 and SS 10336 previously described with reference to FIG. 103.

As described above, an interrupt may be requested of EU 10122 by FU 10120 either during EU 10122 normal operation, that is during execution of SOPs by EU 10122, or while EU 10122 is executing a previous interrupt requested by FU 10120. Operation
of EU 10122 and FU 10120 upon occurrence of an interrupt during EU 10122 normal operation will be described next below.

Referring to FIG. 266, a diagramic representation of handshaking between EU 10122 and FU 10120 during an interrupt of EU 10122 while EU 10122 is operating in normal mode is shown and should be referred to in conjunction with FIG. 265. For
purposes of the following discussions, interrupts of EU 10122 operations by FU 10120 are referred to as nanointerrupts to distinguish from interrupts internal to FU 10120.

FU 10120 interrupts normal operation of EU 10122 by assertion of control signal Nano-Interrupt (NINTP) during State M0 of FU 10120 operation. NINTP may be masked by EU 10122 during certain critical EU 10122 operations, such as arithmetic
operations. If NINTP is masked by EU 10122, FU 10120 will remain in State NW until EU 10122 acknowledges the interrupt.

Upon receiving NINTP from FU 10120, EU 10122s transfers state and data of current SOP operation from EUCSR 26510 to EUIS 26512. EU 10122 then asserts control signal Nano-Interrupt Acknowledge (NIACK) to FU 10120 to acknowledge availability of EU
10122 to accept a nanointerrupt. FU 10120 will then enter State Ml and place an EUDP on EUDIS Bus 20206. Loading of COMQ 20342 then proceeds as previously described, with EU 10122 loading nanointerrupt EUDPs into the appropriate registers of COMQ
20342. COMQ 20342 is loaded as previously described and, if JPOP is asserted, data transferred into OPB 20322 from JPD Bus 10142. If JPOP is not asserted, data is taken into OPB 20322 from MOD Bus 10144. EU 10122 then proceeds to execute the required
nanointerrupt operation and storing back of results and checking of test conditions proceeds as previously described for EU 10122 normal operation. In general, exception checking is not performed. When EU 10122 has completed execution of the
nanointerrupt operation, EU 10122 transfers state and data of the interrupted SOP operation from EUIS 26512 to EUCSR 26510 and resumes execution of that SOP. At this point, EU 10122 asserts control signal Nano-Interrupt Trap Enable (NITE). NITE is
received and tested by FU 10120 to indicate end of nanointerrupt processing.

Referring to FIG. 267, a diagramic representation of interfaces between EU 10122, FU 10120, and MEM 10112 during nested, or sequential, EU 10122 interrupts for kernel operations, and handshaking therein, is shown. During the following
discussion, it is assumed that EU 10122 is already processing a nanointerrupt for a kernel operation submitted to EU 10122 by FU 10120. FU 10120 may then submit a second, third, or fourth, nanointerrupt to EU 10122 for a further kernel operation. FU
10120 will assert NINTP to request a nanointerrupt of EU 10122. EU 10122's normal mode state and data from a previously executing SOP operation has been stored in, and remains in, EUIS 26512. Current state and data of currently executing nanointerrupt
operation in EUCSR 26510 will be transferred to EUES 26514 in MEM 10112 to allow initiation of pending nanointerrupt. EU 10122 will at this time assert NIACK and control signal Execute Unit Event (EXEVT). EXEVT to FU 10120 informs FU 10120 that an EU
10122 Event has occurred, specifically, and in this case, EXEVT requests FU 10120 service of an EU 10122 Stack Overflow. FU 10120 is thereby trapped to an "EU 10122 Stack Overflow" Event Handler microinstruction sequence. This handler transfers current
state and data of interrupted nanointerrupt previously executing in EU 10122 into EUES 26514. State and data of interrupted nanointerrupt is transferred to EUES 26514, one 32 bit word at a time. FU 10120 asserts control signals XJPD to gate each of
these state and data words onto JPD Bus 10142 and controls transfer of these words into EUES 26514.

Processing of new nanointerrupt proceeds as described above with reference to interrupts occurring during normal operation. If any subsequent nanointerrupts occur, they are handled in the same manner as just described; FU 10120 signals a
nanointerrupt to FU 10120, current EU 10122 state and data is saved by FU 10120 in EUES 26514, and new nanointerrupt is processed. After a nested nanointerrupt, that is a nanointerrupt of a sequence of nanointerrupts, has been serviced, EU 10122 asserts
control signal EU 10122 Trap (ETRAP) to FU 10120 to request a transfer of a previous nanointerrupt's state and data from EUES 26514 to EUCSR 26510. FU 10120 will retrieve that next previous nanointerrupt state and data from EUES 26514 through MOD Bus
10144 and will transfer that data and state onto JPD Bus 10142. This state and data is returned, one 32 bit word at a time, and is strobed into EU 10122 by JPOP from FU 10120. Processing of that prior nanointerrupt will then resume. The servicing of
successively prior nanointerrupts will continue until all previous nanointerrupts have been serviced. Original state and data of EU 10122, that is that of SOP operation which was initially interrupted, is then returned to EUCSR 26510 from EUIS 26512 and
execution of that SOP resumed. At this time, EU 10122 asserts NITE to indicate end of EU 10122 kernel operations in regard to nanointerrupts.

Having described structure and operation of EU 10122, FU 10120 and MEM 10112, with respect to servicing of kernel operation nanointerrupts by EU 10122, loading of EU 10122's EUSITT 20344 with microinstruction sequences will be described next
below.

h.h.h. Loading of Execute Unit S-Interpreter Table 20344 (FIG. 268)

Referring to FIG. 268, a diagramic representation of interface and handshaking between EU 10122, FU 10120, MEM 10112, and DP 10118 during loading of microinstructions into EUSITT 20344 is shown. As previously described, EUSITT 20344 contains all
microinstructions required for control of EU 10122 in executing kernel nanointerrupt operations and in executing arithmetic operations in response to SOPs of user's programs. EUSITT 20344 may store microinstruction sequences for interpreting arithmetic
SOPs of user's programs for, for example, up to 4 different S-Language Dialects. In general, a capacity of storing microinstruction sequences for arithmetic operations in up to 4 S-Language Dialects is sufficient for most requirements, so that EUSITT
20344 need be loaded with microinstruction sequences only at initialization of CS 10110 operation. Should microinstruction sequences for arithmetic operations of more than 4 S-Language Dialects be required, those microinstruction sequences may be loaded
into EUSITT 20344 in the manner as will be described below.

As previously described, a portion of the microinstructions stored in EUSITT 20344 is contained in Read Only Memories and is thus permanently stored in EUSITT 20344. Microinstruction sequences permanently stored in EUSITT 20344 are, in general,
those required for execution of kernel operations. Microinstruction sequences permanently stored in EUSITT 20344 include those used to assist in writing other EU 10122 microinstruction sequences into EUSITT 20344 as required. Certain microinstruction
sequences are stored in a Random Access Memory, referred to as the Writeable Control Store (WCS) portion of EUSITT 20344, and include these for interpreting arithmetic operation SOPs of various S-Language Dialects.

Writing of microinstruction sequences into EU 10122 is initialized by forcing EU 10122 into an Idle state. Initialization of EU 10122 is accomplished by FU 10120 asserting EUABORT or by DP 10118 asserting control signal clear (CLEAR). Either
EUABORT or CLEAR will clear a current operation of EU 10122 and force EU 10122 into Idle state, wherein EU 10122 waits for further EUDPs provided from FU 10120. FU 10120 then dispatches a EUDP initiating loading of EUSITT 20344 to EU 10122 through EUDIS
Bus 20206. Load EUSITT 20344 EUDP specifies starting address of a two step microinstruction sequence in the PROM portion of EUSITT 20344. This two step microinstruction sequence first loads zeros into SCAG 25536, which as previously described provides
read and write addresses to EUSITT 20344. EUSITT 20344 load microinstruction sequence then reads a microinstruction from EUSITT 20344 to mCRD 20346. This microinstruction specifies conditions for handshaking operations with FU 10120 so that loading of
EUSITT 20344 may begin. At this time, and from this microinstruction word, EU 10122 asserts control signal DRDY to FU 10120 to indicate that EU 10122 is ready to accept EUDPs from FU 10120 for directing loading of EUSITT 20344. This initial
microinstruction also generates a write enable control signal for the WCS portion of EUSITT 20344, inhibits loading of mCRD 20346 from EUSITT 20344, and inhibits normal loading operations of NXTR 25540 and SCAG 25536. This first microinstruction also
directs NASS 25526 to accept address inputs from SCAG 25536 and, finally, causes NITE to FU 10120 to be asserted to unmask nanointerrupts from FU 10120.

FU 10120 then generates a read request to MEM 10112, and MEM 10112 transfers a first 32 bit word of a EU 10122 microinstruction word onto JPD Bus 10142. Each such 32 bit word from MEM 10112 comprises one half of a 64 bit microinstruction word of
EU 10122. When FU 10120 receives DRDY from EU 10122, FU 10120 generates control signal Load Writeable Control Store (LDWCS). LDWCS in turn transfers a 32 bit word on JPD Bus 10142 into a first address of the WCS portion of EUSITT 20344. A next 32 bit
half word of a EU 10122 microinstruction word is then read from MEM 10112 through JPD Bus 10142 and transferred into the second half of that first address within the WCS portion of EUSITT 20344. The address in SCAG 25536 is then incremented to select a
next address within EUSITT 20344 and the process just described repeated automatically, including generation of DRDY and LDWCS, until loading of EUSITT 20344 is completed.

After loading of EUSITT 20344 is completed, the loading process is terminated when FU 10120 asserts NINTP, or DP 10118 asserts Control Signal Load Complete (LOADCR). Either NINTP or LOADCR releases control of operation of NAG 20340 to allow EU
10122 to resume normal operation.

The above descriptions have described structure and operation of EU 10122, including: execution of various arithmetic operations utilizing various operand formats; operation of EU 10122, FU 10120, and MEM 10112 with regard to handshaking; loading
of EUDPs and operands; storeback of results; checking of test conditions and exceptions; EU 10122 Stack Mechanisms during normal and kernel operations; and loading of EU 10122 microinstruction sequences into EUSITT 20344. IOS 10116 and DP 10118 will be
described next below, in that order.

D. I/O System 10116 (FIGS. 204, 206, 269)

Referring to FIG. 204, a partial block diagram of IOS 10116 is shown. As previously described, IOS 10116 operates as an interface between CS 10110 and the external world, for example, ED 10124. A primary function of IOS 10116 is the transfer of
data between CS 10110, that is MEM 10112, and the external world. In addition to performing transfers of data, IOS 10116 controls access between various data sources and sinks of ED 10124 and MEM 10112. As previously described, IOS 10116 directly
addresses MEM 10112's physical address space to write data into or read data from MEM 10112. As such, IOS 10116 also performs address translation, a mapping operation required in transferring data between MEM 10112's physical address space and address
spaces of data sources and sinks in ED 10124.

As shown in FIG. 204, IOS 10116 includes Data Mover (DMOVR) 20410, Input/Output Control Processor (IOCP) 20412, and one or more data channel devices. IOS 10116's data channel devices may include ECLIPSE.RTM. Burst Multiplexer Channel (EBMC)
20414, NOVA Data Channel (NDC) 20416, and other data channel devices as required for a particular configuration of a CS 10110 system. IOCP 20412 controls and directs transfer of data between MEM 10112 and ED 10124, and controls and directs mapping of
addresses between ED 10124 and MEM 10112's physical address space. IOCP 20412 may be comprised, for example, of a general purpose computer, such as an ECLIPSE.RTM. M600 computer available from Data General Corporation of Westboro, Mass.

EBMC 20414 and NDC 20416 comprise data channels through which data is transferred between ED 10124 and IOS 10116. EBMC 20414 and NDC 20416 perform actual transfers of data to and from ED 10124, under control of IOCP 20412, and perform mapping of
ED 10124 addresses to MEM 10112 physical addresses, also under control of IOCP 20412. EBMC 20414 and NDC 20416 may respectively be comprised, for example, of an ECLIPSE.RTM. Burst Multiplexer Data Channel and a NOVA.RTM. Data Channel, also available
from Data General Corporation of Westboro, Mass.

ED 10124, as indicated in FIG. 204, may be comprised of one or more data sinks and sources. ED 10124 data sinks and sources may include commercially available disc drive units, line printers, communication lengths, tape units, and other computer
systems, including other CS 10110 systems. In general, ED 10124 may include all such data devices as are generally interfaced with a computer system.

a. I/O System 10116 Structure (FIG. 204)

Referring first to the overall structure of IOS 10116, data input/output of ECLIPSE.RTM. Burst Multiplexer Channel Adapter and Control Circuitry (BMCAC) 20418 of EBMC 20414 is connected to bi-directional BMC Address and Data (BMCAD) Bus 20420.
BMCAD Bus 20420 in turn is connected to data and address inputs and outputs of data sinks and sources of ED 10124.

Similarly, data and address inputs and outputs of NOVA.RTM. Data Channel Adapter Control Circuits (NDCAC) 20422 in NDC 20416 is connected to bi-directional NOVA.RTM. Data Channel Address and Data (NDCAD) Bus 20424. NDCAD Bus 20424 in turn is
connected to address and data inputs and outputs of data sources and sinks of ED 10124. BMCAD Bus 20420 and NDCAD Bus 20424 are paths for transfer of data and addresses between data sinks and sources of ED 10124 and IOS 10116's data channels and may be
expanded as required to include other IOS 10116 data channel devices and other data sink and source devices of ED 10124.

Referring to IOCP 20412, a bi-directional control input and output of IOCP 20412 is connected from IOCPC Bus 20434. Address and data output of IOCP 20412 is connected to NDCAD Bus 20424. An address output of IOCP Address Translation Map
(IOCPATM) 20438 within IOCP 20412 is connected onto DMID Bus 20430. Data inputs and outputs of IOCP 20412 are connected, respectively, to DMOD Bus 20428 and DMID Bus 20430. A bi-directional control input and output of IOCP 20412 is connected to a
bi-directional control input and output of DMOVR 20410.

Referring finally to DMOVR 20410, DMOVR 20410 includes Input Data Buffer (IDB) 20440, Output Data Buffer (ODB) 20442, and Priority Resolution and Control (PRC) 20444. A data and address input of IDB 20440 is connected from DMID Bus 20430. A
data and address output of IDB 20440 is connected to IOM Bus 10130 to MEM 10112. A data output of ODB 20442 is connected from MIO Bus 10129 from MEM 10112, and a data output of ODB 20442 is connected to DMOD Bus 20428. Bi-directional control inputs and
outputs of IDB 20440 and ODB 20442 are connected from bi-directional control inputs and outputs of PRC 20444. A bi-directional control input and output of PRC 20444 is connected from a bi-directional control input and output of IOCP 20412 as described
above. Another bi-directional control input and output of PRC 20444 is connected to and from IOMC Bus 10131 and thus from a control input and output of MEM 10112. Having described overall structure of IOS 10116, operation of IOS 10116 will be described
next below.

When, as will be described further below, EBMC 20414 is granted access to MEM 10112 to write data into MEM 10112, data stored in BMCDB 20426 and corresponding addresses from BMCATM 20432 are transferred onto DMID Bus 20430 to DMOVR 20410. As
will be described below, DMOVR 20410 then writes that data into those MEM 10112 physical address locations. When data is to be read from MEM 10112 to ED 10124, data is provided by DMOVR 20410 on DMOD Bus 20428 and is transferred into BMCDB 20426 BMCAC
20418 then reads that data from BMCDB 20426 and transfers that data onto BMCAD Bus 20420 to ED 10124. During transfers of data from MEM 10112 to ED 10124, MEM 10112 does not provide addresses to be translated into ED 10124 addresses to accompany that
data. Instead, those addresses are generated and provided by BMCAC 20418.

NDC 20416 operates in a manner similar to that of EBMC 20414 except that data inputs and outputs of NDCAC 20422 are not buffered through a BMCDB 20426.

As previously described, MEM 10112 has capacity to perform block transfers, that is sequential transfers of four 32 bit words at a time. In general, such transfers are performed through EBMC 20414 and are buffered through BMCDB 20426. That is,
BMCDB 20426 allows single 32 bit words to be received from ED 10124 by EBMC 20414 and stored therein until a four word block has been received. That block may then be transferred to MEM 10112. Similarly, a block may be received from MEM 10112, stored
in BMCDB 20426, and transferred one word at a time to ED 10124. In contrast, NDC 20416 may generally be utilized for single word transfers.

As indicated in FIG. 204, EBMC 20414, NDC 20416, and each data channel device of IOS 10116 each contain an individual address translation map, for example BMCATM 20432 in EBMC 20414 and NDCATM 20436 in NDC 20416. Address translation maps stored
therein are effectively constructed and controlled by IOCP 20412 for each data channel device. IOS 10116 may thereby provide an individual and separate address translation map for each IOS 10116 data channel device. This allows IOS 10116 to insure that
no two data channel devices, nor two groups of data sinks and sources in ED 10124, will mutually interfere by writing into and destroying data in a common area of MEM 10112 physical address space. Alternately, IOS 10116 may generate address translation
maps for two or more data channel devices wherein those maps share a common, or overlapping, area of MEM 10112's physical address space. This allows data stored in MEM 10112 to be transferred between IOS 10116 data channel devices through MEM 10112, and
thus to be transferred between various data sink and source devices of ED 10124. For example, a first ED 10124 data source and a first IOS 10116 data channel may write data to be operated upon into a particular area of MEM 10112 address space. The
results of CS 10110 operations upon that data may then be written into a common area shared by that first data device and a second data device and read out of MEM 10112 to a second ED 10124 data sink by that second data channel device. Individual
mapping of IOS 10116's data channel devices thereby provides total flexibility in partitioning or sharing of MEM 10112's address space through IOS 10116.

2. I/O Control Processor 20412

As described above, IOCP 20412 is a general purpose computer whose primary function is overall direction and control or data transfer between MEM 10112 and ED 10124. IOCP 20412 controls mapping of addresses between IOS 10116's data channel
devices and MEM 10112 address space. In this regard IOCP 20412 generates address translation maps for IOS 10116's data channel devices, such EBMC 20414 and NDC 20416 IOCP 20412 loads these address translation maps into and controls, for example, BMCATM
20432 of EBMC 20414 and NDCATM 20436 and NDC 20416 through IOCPC Bus 20434. IOCP 20412 also provides certain control functions to DMOVR 20410, as indicated in FIG. 204. In addition to these functions, IOCP 20412 is also provided with data and
addressing inputs and outputs. These data addressing inputs and outputs may be utilized, for example, to obtain information utilized by IOCP 20412 in generating and controlling mapping of addresses between IOS 10116's data channel devices and MEM 10112. Also, these data and address inputs and outputs allow IOCP 20412 to operate, in part, as a data channel device. As previously described, IOCP 20412 has data and address inputs and outputs connected from and to DMID Bus 20430 and DMOD Bus 20428. IOCP
20412 thus has access to data being transferred between ED 10124 and MEM 10112, providing IOCP 20412 with direct access to MEM 10112 address space. In addition, IOCP 20412 is provided with control and address outputs to NDCAD Bus 20424, thus allowing
IOCP 20412 partial control of certain data source and sink devices in ED 10124.

3. Data Mover 20410 (FIG. 269)

a.a. Input Data Buffer 20440 and Output Data Buffer 20442

As described above, DMOVR 20410 comprises an interface between IOS 10116's data channels and MEM 10112. DMOVR 20410 performs actual transfer of data between IOS 10116's data channel devices and MEM 10112, and controls access between IOS 10116's
data channel devices and MEM 10112. IDB 20440 and ODB 20442 are data and address buffers allowing asynchronous transfer of data between IOS 10116 and MEM 10112. That is, ODB 20442 may accept data from MEM 10112 as that data becomes available and then
hold that data until an IOS 10116 data channel device, for example EBMC 20414, is ready to accept that data. IDB 20440 accepts data and MEM 10112 physical addresses from IOS 10116's data channel devices. IDB 20440 holds that data and addresses for
subsequent transmission to MEM 10112 when MEM 10112 is ready to accept data and addresses. IDB 20440 may, for example, accept a burst, or sequence, of data from EBMC 20414 or single data words from NDC 20416 and subsequently provide that data to MEM
10112 in block, or four word, transfers as previously described. Similarly, ODB 20442 may accept one or more block transfers or data from ODB 20442 and subsequently provide that data to NDC 20416 as single words, or to DMID 20430 as a data burst. In
addition, as previously described, a block transfer from MEM 10112 may not appear as four sequential words. In such cases, ODB 20442 accepts the four words of a block transfer as they appear on MIO Bus 10129 and assembles those words into a block
comprising four sequential words for subsequent transfer to ED 10124.

Transfer of data through IDB 20440 and ODB 20442 is controlled by PRC 20444, which exchanges control signals with IOCP 20412 and has an interface, previously described, to MEM 10112 through IOMC Bus 10131.

b.b. Priority Resolution and Control 20444 (FIG. 269)

As previously described, PRC 20444 controls access between IOS 10116 data channel devices and MEM 10112. This operation is performed by means of a Ring Grant Access Generator (RGAG) within PRC 20444.

As indicated in FIG. 269, Request Grant Code (RGC) outputs of RGCG 26910 are connected in parallel to first inputs of EBMCRC 26912, NDCRC 26914, DCDXRC 26916, and DCDZRC 26918. Second inputs of EBMCRC 26912, NDCRC 26914, DCDXRC 26916, and DCDZRC
26918 are connected from other portions of PRC 20444 and receive indications that, respectively, EBMC 20414, NDC 20416, DCDX, or DCDZ has submitted a request for a read or write access to MEM 10112.

Request Grant Outputs (GRANT) of EBMCRC 26912, NDCRC 26914, DCDXRC 26916, and DCDZRC 26918 are in turn connected to other portions of PRC 20444 circuitry to indicate when read or write access to MEM 10112 has been granted in response to a request
by a particular IOS 10116 data channel device. When indication of such a grant is provided to those other portions of PRC 20444, PRC 20444 proceeds to generate appropriate control signals to MEM 10112, through IOMC Bus 10131 as previously described, to
IDB 20440 and ODB 20442, and to IOCP 20412. PRC 20444's control signals initiate that read or write request to that IOS 10116 data channel device. Grant outputs of EBMCRC 26912, NDCRC 26914, DCDXRC 26916, and DCDZRC 26918 are also provided as inputs to
RGCG 269l0 to indicate, as described further below, when a particular IOS 10116 has requested and been granted access to MEM 10112.

As indicated in FIG. 269, a diagramic figure above RGCG 26910, RGCG generates a repeated sequence of unique RGCs. Herein indicated as numeric digits 0 to 15. Each RGC identifies, or defines, a particular time slot during which a IOS 10116 data
channel device may be granted access to MEM 10112. Certain RGCs are, effectively, assigned to particular IOS 10116 data channel devices. Each such data channel device may request access to MEM 10112 during its assigned RGC identified access slots. For
example, EBMC 20414 is shown as being allowed access to MEM 10112 during those access slots identified by RGCs 0, 2, 4, 6, 8, 10, 12, and 14. NDC 20416 is indicated as being allowed access to MEM 10112 during RGC slots 3, 7, 11, and 15. DCDX is allowed
access during slots 1 and 9, and DCDZ is allowed access during RGC slots 5 and 13.

As described above, RGCG generates RGCs 0 to 15 in a repetitive sequence. During occurrence of a particular RGC, each request comparator of PRC 20444's RGAG examines that RGC to determine whether its associated data channel device is allowed
access during that RGC slot, and whether that associated data channel device has requested access to MEM 10112. If that associated data channel device is allowed access during that RGC slot, and has requested access, that data channel device is granted
access as indicated by that request comparator's GRANT output. The request comparators GRANT output is also provided as an input to RGCG 26910 to indicate to RGCG 26910 that access has been granted during that RGC slot.

If a particular data channel device has not claimed and has not been granted access to MEM 10112 during that RGC slot, RGCG 26910 will go directly to next RGC slot. In next RGC slot, PRC 20444's RGAG again determines whether the particular data
channel device allowed access during that slot has submitted a request, and will grant access if such a request has been made. If not, RGCG 26910 will again proceed directly to next RGC slot, and so on. In this manner, PRC 20444's RGAG insures that
each data channel device of IOS 10116 is allowed access to MEM 10112 without undue delay. In addition, PRC 20444's RGAG prevents a single, or more than one, data channel device from monopolizing access to MEM 10112. As described above, each data
channel device is allowed access to MEM 10112 at least once during a particular sequence of RGCs. At the same time, by not pausing within a particular RGC in which no request for access to MEM 10112 has occurred, PRC 20444's RGAG effectively
automatically skips over those data channel devices which have not requested access to MEM 10112. PRC 20444's RGAG thereby effectively provides, within a given time interval, more frequent access to those data channel devices which are most busy. In
addition, the RGCs assigned to particular IOS 10116 data channel devices may be reassigned as required to adapt a particular CS 10110 to the data input and output requirements of a particular CS 10110 configuration. That is, if EBMC 20414 is shown to
require less access to MEM 10112 then NDC 20416, certain RGCs may be reassigned from EBMC 20414 to NDC 20416. Access to MEM 10112 by IOS 10116's data channel devices may thereby be optimized as required.

Having described structure and operation of IOS 10116, structure and operation of DP 10118 will be described next below.

E. Diagnostic Processor 10118 (FIGS. 101, 205)

Referring to FIG. 101, as previously described, DP 10118 is interconnected with IOS 10116, MEM 10112, FU 10120, and EU 10122 through DP Bus 10138. DP 10118 is also interconnected, through DPIO Bus 10136, with the external world and in particular
with DU 10134. In addition to performing diagnostic and fault monitoring and correction operations, DP 10118 operates, in part, to provide control and display functions allowing an operator to interface with CS 10110. DU 10134 may be comprised, for
example, of a CRT and keyboard unit, or a teletype, and provides operators of CS 10110 with all control and display functions which are conventionally provided by a hard console, that is a console containing switches and lights. For example, DU 10134,
through DP 10118, allows an operator to exercise control of CS 10110 for such purposes as system initialization and startup, execution of diagnostic processes, fault monitoring and identification, and control of execution of programs. As will be
described further below, these functions are accomplished through DP 10118's interfaces with IOS 10116, MEM 10112, FU 10120, and EU 10122.

DP 10118 is a general purpose computer system, for example a NOVA.RTM. 4 computer of Data General Corporation of Westboro, Mass. Interface of DP 10118 and DU 10134, and mutual operation of DP 10118 and DU 10134, will be readily apparent to one
of ordinary skill in the art. DP 10118's interface and operation, with IOS 10116, MEM 10112, FU 10120, and EU 10122 will be described further next below.

DP 10118, operating as a general purpose computer programmed specificially to perform the functions described above, has, as will be described below, read and write access to registers of IOS 10116, MEM 10112, FU 10120 and EU 10122 through DP Bus
10138. DP 10118 may read data directly from and write data directly into those registers. As will be described below, these registers are data and instruction registers and are integral parts of CS 10110's circuitry during normal operation of CS 10110. Access to these registers thereby allows DP 10118 to directly control or effect operation of CS 10110. In addition, and as also will be described below, DP 10118 provides, in general, all clock signals to all portions of CS 10110 circuitry and may
control operation of that circuitry through control of these clock signals.

For purposes of DP 10118 functions, CS 10110 may be regarded as subdivided into groups of functionally related elements, for example DESP 20210 in FU 10120. DP 10118 obtains access to the registers of these groups, and control of clocks therein,
through scan chain circuits, as will be described next below. In general, DP 10118 is provided with one or more scan chain circuits for each major functional sub-element of CS 10110.

Referring to FIG. 205, a diagramic representation of DP 10118 and a typical DP 10118 scan chain is shown. As indicated therein, DP 10118 includes a general purpose Central Processor Unit, or computer, (DPCPU) 27010. A first interface of DPCPU
27010 is with DU 10134 through DPIO Bus 10136. DPCPU 27010 and DU 10134 exchange data and control signals through DPIO Bus 10136 in the manner to direct operations of DPCPU 27010, and to display the results of those operations through DU 10134.

DPCPU 27010 and CLKG 27012 are interfaced with the various scan chain circuits of CS 10110 through DP Bus 10138. As described above, CS 10110 may include one or more scan chains for each major sub-element of CS 10110. One such scan chain, for
example DESP 20210 Scan Chain (DESPSC) 27014 is illustrated in FIG. 205.

Interface between DPCPU 27010 and CLKG 27012 and, for example, DESPSC 27014 is provided through DP Bus 10138. As indicated in FIG. 205, DESPSC 27014 includes Scan Chain Clock Gates (SCCG) 27016 and one or more Scan Chain Registers (SCRs) 27018
to 27024.

SCCG 27016 receives clock signals from CLKG 27012 and control signals from DPCPU 27010 through DP Bus 10138. SCCG 27016 in turn provides appropriate clock signals to the various registers and circuits of, for example, DESP 20210. Clock control
signals provided by DPCPU 27010 to SCCG 27016 control, or gate, the various clock signals to these registers and circuits of DESP 20210, thereby effectively allowing DPCPU 27010 to control of DESP 20210.

SCRs 27018 to 27024 are comprised of various registers within DESP 20210. For example, SCRs 27018 to 27024 may include the output buffer registers of AONGRF 20232, OFFGRF 20234, LENGRF 20236, output registers of OFFALU 20242 and LENALU 20252,
and registers within OFFMUX 20240 and BIAS 20246. Such registers are indicated in the present description, as previously described, by arrows appended to ends of those registers, with a first arrow indicating an input and a second an output. In normal
CS 10110 operations, as previously described, SCRs 27018 to 27024 operate as parallel in, parallel out buffer registers through which data and instructions are transferred. SCRs 27018 to 27024 are also capable of operating as shift registers and, as
indicated in FIG. 205, are connected together to comprise a single shift register circuit having an input from DPCPU 27010 and an output to DPCPU 27010. Control inputs to SCRs 27018 to 27024 from DPCPU 27010 control operation of SCRs 27018 to 27024,
that is whether these registers shall operate as parallel in, parallel out registers, or as shift registers of DESPSC 27014's scan chain. The shift register scan chain comprising SCRs 27018 to 27024 allows DPCPU 27010 to read the contents of SCRs 27018
to 27024 by shifting the content of these registers into DPCPU 27010. Conversely, DPCPU 27010 may write into SCRs 27018 to 27024 by shifting information generated by DPCPU 27010 from DPCPU 27010 and through the shift register scan chain to selected
locations within SCRs 27018 to 27024.

Scan chain clock generator circuits and scan chain registers of each scan chain circuit within CS 10110 thereby allow DP 10118 to control operation of each major sub-element of CS 10110. For example, to read information from the scan chain
registers therein, and to write information into those scan chain registers as required for diagnostic, monitoring, and control functions.

Having described structure and operation of each major element of CS 10110, including MEM 10112, FU 10120, EU 10122, IOS 10116, and DP 10118, certain operations of, in particular, FU 10120 will be described further next below. The following
descriptions will further disclose operational features of JP 10114, and in particular FU 10120, by describing in greater detail certain operations therein by further describing microcode control of JP 10114.

F. CS 10110 Micromachine Structure and Operation (FIGS. 270-274)

a. Introduction

The preceding descriptions have presented the hardware structures and operation of FU 10120 and EU 10122. The following description will describe how devices in FU 10120, and certain EU 10122 devices, function together as a microprogrammable
computer, henceforth termed the FU micromachine. The FU micromachine performs two tasks: it interprets SINs, and it responds to certain signals generated by devices in FU 10120, EU 10122, MEM 10112, and IOS 10116. The signals to which the FU
micromachine responds are termed Event signals. In terms of structure and operation, the FU micromachine is characterized by the following:

Registers and ALUs specialized for the handling of logical descriptors.

Registers organized as stacks for invocations of microroutines (microinstruction sequences).

Mechanisms which allow an invoked microroutine to return either to the microinstruction following the one which resulted in the invocation or to the microinstruction which resulted in the invocation.

Mechanisms which allow the contents of stack registers to be transferred to MEM 10112, thereby creating a virtual microstack of limitless size.

Mechanisms which guarantee response to an event signal within a predictable length of time.

The division of the devices comprising the micromachine into two groups: those devices which may be used by all microcode and those which may be used only by KOS (Kernel Operating System, previously described) microcode.

These devices and mechanisms allow the FU micromachine to be used in two ways: as a virtual micromachine and as a monitor micromachine. Both kinds of micromachine use the same devices in FU 10120, but perform different functions and have
different logical properties. In the following discussion, when the FU micromachine is being used as a virtual micromachine, it is said to be in virtual mode, and when it is being used as a monitor micromachine, it is said to be in monitor mode. Both
modes are introduced here and explained in detail later.

When the FU micromachine is being used in virtual mode, it has the following properties:

It runs on an essentially infinite micromachine stack belonging to a Process 610.

It can respond to any number of event signals in the M0 cycle (state) of a single microinstruction.

A page fault may occur on the invocation of any microroutine or on return from any microroutine.

When the FU micromachine is in virtual mode, any microroutine may not run to completion, i.e., complete its execution in a predictable length of time, or complete it at all.

It is executing a Process 610.

The last four properties are consequences of the first: Event signals result in invocations, and since the micromachine stack is infinite, there is no limit to the number of invocations. The infinite micromachine stack is realized by placing
micromachine stack frames on Secure Stack 10336 belonging to a Process 610, and the virtual micromachine therefore always runs on a micromachine stack belonging to some Process 610. Furthermore, if the invocation of a microroutine or a return from a
microroutine requires micromachine frames to be transferred from Secure Stack 10336 to the FU micromachine, a page fault may result, and Process 610 which is executing the microroutine may be removed from JP 10114, thereby making the time required to
execute the microroutine unpredictable. Indeed, if Process 610 is stopped or killed, the execution of the microroutine may never finish. As will be seen in descriptions below, the Virtual Processor 612 is the means by which the virtual micromachine
gains access to a Process 610's micromachine stack.

When in monitor mode, the FU micromachine has the following properties:

It has a micromachine stack of fixed size, the stack is always available to the FU micromachine, and it is not associated with a Process 610.

It can respond to only a fixed number of events during the M0 cycle of a single microinstruction.

In monitor mode, invocation of a microroutine or return from a microroutine will not cause a page fault.

Microroutines executing on the FU micromachine when the micromachine is in monitor mode are guaranteed to run to completion unless they themselves perform an action which causes them to give up JP 10114.

Microroutines executing in monitor mode need not be performing functions for a Process 610.

Again, the remaining properties are consequences of the first: because the monitor micromachine's stack is of fixed size, the number of events to which the monitor micromachine can respond is limited; furthermore, since the stack is always
directly accessible to the micromachine, microroutine invocations and returns will not cause page faults, and microroutines running in monitor mode will run to completion unless they themselves perform an action which causes them to give up JP 10114.
Finally, the monitor micromachine's stack is not associated with a Process 610's Secure Stack 10336, and therefore, the monitor micromachine can both execute functions for Processes 610 and execute functions (which are related to no Process 610, for
example,) the binding and removal of Virtual Processors 612 from JP 10114.

The description which follows first gives an overview of the devices which make up the micromachine, continues with descriptions of invocations on the micromachine and micromachine programming, and concludes with detailed discussions of the
virtual and monitor modes and an overview of the relationship between the micromachine and CS 10110 subsystems. The manner in which the micromachine performs specific operations such as SIN parsing, Name resolution, or address translation may be found
in previous descriptions of CS 10110 components which the micromachine uses to perform the operations.

b. Overview of Devices Comprising FU Micromachine (FIG. 270)

FIG. 270 presents an overview of the devices comprising the micromachine. FIG. 270 is based on FIG. 201, but has been simplified to improve the clarity of the discussion. Devices and subdivisions of the micromachine which appear in FIG. 201
have the numbers given them in that figure. When a device in FIG. 270 appears in two subdivisions, it is shared by those subdivisions.

FIG. 270 has four main subdivisions. Three of them are from FIG. 201: FUCTL 20214, which contains the devices used to select the next microinstruction to be executed by the micromachine, DESP 20210, which contains stack and global registers and
ALUs for descriptor processing; and MEMINT 20212, which contains the devices which translate Names into logical descriptors and logical descriptors into physical descriptors. The fourth subdivision, EU Interface 27007, represents those portions of EU
10122 which may be manipulated by FU 10120 microcode.