# Patent

## Title
Data processing system having tunable operating system means

## Abstract

A microprogram-coupled multiple-microprocessor module receives a system command system status and associated data. The system command and the system status can be directly used as an address or mapped into a microprogram memory address to initiate micro-subroutines. The module can serve as a basic processor and its microprogrammability gives it a high degree of flexibility and modularity. A five-microprocessor module is employed in one example. Basic microprogramming techniques used in the module include a multiple-way microprogram branch technique. The organization of the module is systematic and structured and the microprogramming for the module is a comparatively simple procedure. The module achieves an improved rate of instruction execution at a relatively small cost in the number of clock cycles required.

## Background
This invention relates to data processing and is more particularly directed to a multiple microprocessor module in which a plurality of microprocesors act in parallel and at the same time.

The invention is more particularly directed to a multiple-microprocessor module in which the several microprocessors are coupled by microprogramming.

Previous suggestions for interconnection of multiple microprocessors proposed a number of microprocessors (with or without local memory) connected to the same bus which also contains a shared memory, or microprocessors connected via a multiport memory. In other words, a microprocessor-memory pair was considered as the basic functional unit, sometimes called a processing element. The way that microprocessor-memory pairs are formed, including their interconnections, is called a multimicroprocessor configuration.

It is an object of this invention to provide a multiple-microprocessor module that has improved data handling speed and flexibility characteristics.

It is another object of the invention to provide a multiple microprocessor module which is easily constructed of reliable, low cost, and readily available integrated circuits.

It is a further object of this invention to provide a multiple-microprocessor module in which the microprocessors are flexibly coupled by microsubroutines.

In accordance with an aspect of this invention, a microprogram-coupled multiple-microprocessor module is formed of four basic sections: a data processing unit (DPU); an address processing unit (APU); a stack pointer processing unit (SPPU); and a microprogram control and signalling unit (MCU). The DPU has several microprocessors (e.g., four eight-bit microprocessors for a thirty-two bit module) each with an internal data bus, a like number of main data busses and control circuitry coupling the microprocessors to the main data busses. The APU has at least one additional microprocessor that is used to keep track of memory addresses that correspond to the data processed in the microprocessors of the DPU. In the APU, data transfer circuitry couples the microprocessor to a stack pointer bus and to at least one of the internal data busses of the microprocessors of the DPU, and a logic circuit is coupled to a data bus of the DPU and to the microprocessor of the APU to carry out OP code mapping of the APU.

The SPPU is preferably constructed external to the microprocessor of the APU, because it would be too time consuming for the APU microprocessor to keep track of the stack pointers for all the microprocessors. It should be observed in this regard that the SPPU may have to execute a push or pull of four bytes (i.e., 32 bits) in a four-microprocessor-DPU module. The SPPU includes address register circuits and data transfer circuitry to couple the address register circuit to the stack pointer bus of the APU and to the internal data bus of at least one of the microprocessors of the DPU.

The MCU includes one or more microprogram memory devices storing microinstructions for the microprocessors of the DPU; microinstruction sequencing logic circuitry providing addressing data to the microprogramming memory to determine the next successive address of the microprogram sequence, and flag and signal generating circuitry coupled to the DPU microprocessors and also providing status flags and signals to the multiple microprocessors of the DPU and to the microprocessor of the APU.

The MCU includes circuitry for synchronizing the operation of the microprocessors of the DPU and APU so that memory fetch and memory write operations are all synchronized, notwithstanding that any given operation carried out by one microprocessor might require more clock cycles than the operation carried out by another such microprocessor at the same time.

It has been found that the multiple microprocessor module of this invention processes four times the data at a cost of an increase of only 84.5% in required clock cycles. This means that for a given algorithm and a given quantum of unprocessed data, the multiple-microprocessor module operates more than twice as fast as a comparable single microprocessor. Also, because the control circuitry is microprogrammed, the circuit design is extremely flexible and can be readily adapted for a given function.

In the specification and drawings there is shown and described a preferred embodiment of the microprogram-coupled multiple-microprocessor module of this invention, and there are suggested various alternatives and modifications thereof; but it is to be understood that these are not intended to be exhaustive and that many other changes and modifications can be made within the scope of the invention. The embodiment and suggested alternatives are included for purposes of illustration in order that other skilled in the art may understand the invention more fully and appreciate the principles thereof, and that they will be able to modify it in a variety of forms, each as may best be suited to the conditions of a particular application or environment.

The following description should be considered in connection with the accompanying drawings, in which

FIG. 1 is an overall schematic view of the multiple microprocessor module according to one preferred embodiment of this invention;

FIG. 2 is an input/output/signalling schematic of the overall module of the preferred embodiment;

FIG. 3 is a block diagram of the various groups making up the module of the preferred embodiment;

FIG. 4 is a schematic diagram of a data processing unit of the preferred embodiment;

FIG. 5 is a schematic diagram of an address processing unit of the preferred embodiment;

FIG. 6 is a schematic diagram of a stack pointer processing unit of the preferred embodiment;

FIG. 7 is a block diagram of one of the element types employed in the stack pointer processing unit;

FIGS. 8 and 9 are stack pointer schemes of the stack pointer processing unit;

FIG. 10 is a schematic diagram of a microinstruction sequencing logic circuit of a microprogrammed control and signalling unit of the preferred embodiment;

FIG. 11 is a block diagram of one of the elements of the unit of FIG. 10;

FIG. 12 is a schematic diagram of data bus sources of of a microprogram memory of the microprogrammed control and sequencing logic unit;

FIG. 13 is a schematic diagram of data bus path control circuitry of the microprogram memory;

FIG. 14 is a schematic diagram of control signal generating circuitry for controlling operations of the stack pointer processing unit;

FIG. 15 is a schematic diagram of the microprogram addressing circuit of the microprogram memory for generating next addresses for active microinstructions;

FIG. 16 is a schematic diagram of miscellaneous signalling circuitry of the microprogram memory for generating flag registers and signals;

FIG. 17 is a schematic chart showing the general organization of the microsubroutines of the microprogram employed with the preferred embodiment; and

FIG. 18 is a block diagram of a second-order multiple-microprocessor module based on the multiple microprocessor module of the preferred embodiment.

An Appendix listing the microcode subroutines of the 6502-32 follows the text of the ensuing description.

The general scheme of organization for the multiple-microprocessor module of this invention is shown in FIG. 1. Data bus lines numbered B1 through B19 couple various portions of the module. The module can be considered to be formed of three parts: a multiple microprocessor unit 10, a microprogrammed control circuit unit including a status select unit 12, a microprogram memory 14, and a microprogram sequencer 16; and an associated combination logic circuit 18. Generally, four busses are used: a bidirectional data bus B1; an address bus B2; an input control signal bus B3; and an output control signal bus B4. The data bus B1 and the address bus B2 communicate with outside systems through the combination logic circuit and registers 18. The data bus B1 can receive information from the microprogram memory 14 through bus B13. This information could be either the data or the instructions for the multiple-microprocessor 10. The microprogram memory 14 provides the signals to the input control signal bus B3, and thus the multiple-microprocessor could be controlled by the microprograms in the microprogram memory 14. Moreover, the combination logic circuit and registers 18 are also controlled by the microprograms over the bus B13. Status and output control signals of this module are issued by the microprogram memory 14 over bus B10.

The microprogram sequencer 16 provides the address of the microprogram memory location of the next word which is being fetched. The address is determined by the following factors: the systems command over bus B6; the address control portion of the previously fetched microinstruction over busses B7 and B8; the output of the status select circuit 12 over bus B14. The output control signals of the multiple-microprocessor 10 over bus B4, the status of the data bus B5 of the multiple-microprocessor, and the status of outside system over bus B19 all are collected as the inputs of the status select circuit 12. The select signals over bus B18 from the microprogram memory 14 will determine which input is to be selected as the output. It should be pointed out that circuit designers have considerable freedom to determine the scheme for the microprogram sequence control. The microprogram sequencer 16 operations will to a great extent depend on the status of the multiple-microprocessor unit 10. The performance of the multiple-microprocessor module is enhanced significantly by the capability to perform multi-way branching. One example of this is a 16-way microprogram branch scheme described in some detail hereafter.

The microprogram forms the interface (the intermediate layer), between the outside system and the multiple-microprocessor unit 10. The microprogram interprets the system command and causes the multiple-microprocessor unit 10 to execute the command. The type and number of microprocessors used in this module are transparent to the outside system. This feature gives the module a rather high degree of modularity.

The microprogram can be regarded as an extension of system software, in the sense that it becomes an efficient means for organizing a set of subroutines and controlling their execution. In a few words, this structure including the microprogram interface has a high degree of modularity, flexibility, efficiency, and simplicity; and thus this structure can be used in a wide variety of designs and applications.

A preferred embodiment of the module, herein referred to as 6502-32, will be described shortly hereafter. The module is a 32-bit central processing unit, or CPU. It is designed such that the whole instruction set of the 6502 type microprocessor could be executed on it employing a word size of 32 bits rather than 8 bits. The 6502-32 module has a 32-bit data processing unit, a 16-bit address processing unit, a stack pointer processing unit, and a microprogrammed control unit which is employed for control of all the processing units. Four type 6502 microprocessors are used in the data processing unit, and one additional 6502 microprocessor is used in the addressing processing unit. Thus, the whole module could be regarded as a five-microprocessor module.

The principal consideration for the module in this embodiment is that it is simple while at the same time employing all the primary features of the new structure. In general the module is not limited to executing the 6502 microprocessor machine level instructions. Many functions, including higher level system commands could be performed by a suitably designed module.

In order to implement a 32-bit CPU there are several possible choices. One possibility is to use an 8-bit microprocessor, say type 6502, as the CPU, accompanied by the subroutines for multiple precision computation. The computation would be slow in this implementation, because time would be spent not only on a serial computation byte by byte, but also on making back and forth moves of the intermediate results between the CPU and memory. In general, it would be too slow to be of much advantage.

Another possibility is to use bit-sliced components, such as the AMD 2900 family of IC chips, made and sold by Advanced Micro Devices, Inc., as building blocks. Fairly fast computation and more flexible design could be obtained in this implementation. Nevertheless, in contrast with the structure presented herein, the bit-sliced system will result in a long and a complicated design procedure and employ many times more integrated circuit chips.

The structure described here is a compromise with the pure-software approach and the implementation of bit-sliced components.

A general trend in computers today is to increase the complexity of architecture commensurate with the increasing potential of implementation technologies. At the same time, the Reduced Instruction Set Computer (RISC) Project has been proposed. The purpose of the RISC project is to explore alternatives to the general trend toward architectural complexity. Although the research about RISC is not closed, the outline of the RISC has been presented such as to execute one instruction per cycle, to make all instructions the same size, to support multiple registers, and so on. It is easily understood that the RISC seems to be an ideal component for the microprogram-coupled multiple-microprocessor module, but it imposes limitations that make it impractical for the time being.

Any one of the popular microprocessors, e.g., 8-bit microprocessor 6502's, could be used as building blocks of the example module. In the preferred embodiment there is a 32-bit CPU (called a data processing unit or DPU) using the 8-bit microprocessor 6502's as building blocks. For simplicity, it is specified that the 32-bit CPU has the same instruction set as 6502, except that the processed data words are 32-bit superbytes rather than 8-bit bytes. It should be pointed out that the CPU module which employs the microprocessor 6502's as building block does not have to execute exactly the same instruction set as the 6502.

The nomenclature for the 32-bit CPU module of this embodiment is "6502-32". The terms and the mnemonic notations used in the 6502 microprocessor are all well known, so these terms and notations will be quoted in the context without detailed explantation. However, there are some features in the 6502-32 module which are not common with the the 6502 microprocessors, and these are as follows:

(1) 16-bit addresses are specified in the 6502-32 module; thus, the index registers X, Y and the stack pointer register S should remain 8-bits wide. On the other hand, the accumulator A in the 6502-32 module has to be 32-bits wide to coincide with the data bus.

The primary use of index registers X and Y is as offsets and counters. In order to operate as both an offset and counter, index register may be incremented or decremented by one (INX, INY, DEX, DEY) or compared to values in memory (CPX, CPY). Because of the ability of the index registers to be loaded, changed and stored, they are also useful as general purpose registers. They can be used as interim storage for moves between memory locations or for moves between memory and the accumulator. Therefor, it is specified in the 6502-32 module that the index registers X, Y should be 32-bit registers, and the stack pointer register S should be an 8-bit register. When the registers X, Y are used either as offsets or as counters, the high-order 24 bits must be all zeros. The data which are fetched from memory to compare with X or Y during the execution of the instructions CPX or CPY should be of 8-bits width.

It should be noticed that when the instruction TXS or TSX is executed, data are transferred between the lower 8 bits of X and the stack pointer register S.

(2) It is taken into account that the instructions involve either 8-bit or 32-bit data. Thus, data words should be either 8-bits or 32-bits wide for each memory access depending on the control signal access width control, AWC, which is generated by the 6502-32 module (FIG. 2). The memory access will be 32 bits when AWC=1, and 8 bits otherwise.

As depicted in FIG. 2, the 6502-32 module can be considered as a 32-bit microprocessor module, from the point of view of its input and outputs. The signals employed are those of a usual type 6502 8-bit processor, such as synchronization SYNC, read/write enable R/W, clock signals .phi.0, .phi.1, and .phi.2, and other signals common to the 6502 processor. The address bus AB is of 16 bits width, and the data bus DB is of 32 bits width, however, to match the memory access width employed.

(3) It has been mentioned that in this embodiment four 6502's are used for the arithmetical and logical operations on data. Thus, there are four processor status registers P in the 6502-32 module. Any of the these registers P can be chosen as the register P of the 6502-32 module; but if the processor status register of some 6502 microprocessor, e.g., MP0 in FIG. 4, is assigned as the register P of the 6502-32 module, then the status of the register P will set up according to the data in microprocessor MP0 and according to the instruction executed in the microprocessor MP0. Thus, a flag adjust (status adjust) has to be made after each execution of most instructions, i.e., the flags should be set up according to the entire 32-bit data word. In order to reduce the time required for the time-consuming operations of the flag adjust, a combination of the four P registers is used to indicate the flags of the 6502-32 module. Correspondingly, the P register of the 6502-32 module should be assumed to be 32 bits wide, and each push or pull operation of the P register will involve 4 eight-bit bytes. The following symbols represent the flags of the 6502-32 module;

An in the microprocessors MP0, MP1, MP2, and MP3, respectively there are the flags NO, VO, BO, DO, IO, ZO and CO for MP0, N1, V1, . . . for MP1, . . . , and etc. It i established in the 6502-32 module that

Finally, it should be pointed out that the microprocessor MP4 has a P register, and this microprocessor MP4 is used as an Address Processing Unit. It does not matter what the flag status is of the P register in microprocessor MP4 except that

should always be maintained.

As shown in FIG. 3, the 6502-32, the module includes the Data Processing Unit (DPU) 20, the Address Processing Unit (APU) 30, the Stack Pointer Processing Unit (SSPU) 40 and the Microprogrammed Control Unit (MCU) 50.

Each of the units of FIG. 3 is separately described as follows:

The schematic of the Data Processing Unit 20 is given in FIG. 4. Four 6502 microprocessors, MP0, MP1, MP2 and MP3, form the heart of the Data Processing Unit 20, each accomplishing the arithmetic and logic operations for one 8-bit byte of data. The data busses of the microprocessors MP0, MP1, MP2, and MP3 (each 8 bits) are internal data busses IDB0, IDB1, IDB2, and IDB3, respectively. The transfer between the input/output data bus DB of the overall 6502-32 module and the internal data busses can be made through any of three paths.

First, four latch circuits L0, L1, L2, and L3, here type 74LS373 octal transparent latches with 3-state outputs, can transfer the data from main data busses DB0, DB1, DB2, and DB3 to the internal busses IDB0, IDB1, IDB2 and IDB3 respectively when an output enable signal DLTOIDB is low. If a controlled clock signal KPDB is equal to clock .phi.2, the data at the bus DB will transfer to the internal data busses during clock .phi.2, namely, the latches remain transparent to the data inputs as long as .phi.2 is high, and will store the data present one setup time before the high-to-low transition of .phi.2. When the control signal KPDB  becomes low, the latches will hold the stored data.

Second, a PROM chip PR1, here a PROM type Am27S29A with 512*8 bits, forms the second path. The highest address bit of PROM PR1 is always zero; and the PROM PR1 receives an op code at the bus DBO, carries out certain OP code mapping, then fans-out to all the internal busses IDB0, IDB1, IDB2, and IDB3 with the same code. This PROM PR1 is enabled by an output enable signal OCM.

The mapping of PROM PR1 is shown in Table 1. Each row or column of Table 1 is numbered by hexadecimal digits. The row number corresponds to the higher 4 bits of inputs of the PROM PR1, while the column number corresponds to the lower 4 bits of inputs of the PROM PR1. Given 8-bit inputs of the PROM PR1, the corresponding row number and column number will be determined. The entry of the intersection determined by the row and the column is the outputs of the PROM PR1. For example, if the inputs are "3D", then the outputs are "2D". In Table 1, "XX" represents "don't care", i.e., the corresponding op code is unused. The purpose of op code mapping will be explained later.

Third, four respective PROMs, PR4, PR5, PR6, and PR7, of type AM27S191A with 2048*8 bits, form the third path. This path accomplishes some supplementary arithmetical and logical operations for the data at internal data busses. The lower 8 address bits among the 11 address bits of PROMs PR4 through PR7 are assumed as the processed data. The data are output at the bus DB after processing, the processing to be accomplished being determined by the higher three address bits, as is shown in Table 3, where

IN1: incremented by 1;

Finally, another PROM PR3, which is a type Am27S29A, builds a path from bus DB3 to bus IDB3. The PROM PR3 is programmed such that the output data equals the input data plus 1. This path is only used in the execution of an instruction CMP.

A fifth 6502 microprocessor MP4 is employed in the Address Processing Unit (APU) 30, as shown in FIG. 5. The program counter or PC, the index registers X and Y, the address bus AB4 and associated address calculating circuits built into the microprocessor MP4 are used to accomplish address processing.

It should be mentioned that it is quite inconvenient to use the stack pointer register S of the microprocessor MP4 because some push or pull operations may involve four bytes rather than only one byte. Therefore the Stack Pointer Processing Unit (SPPU) 40 should always be employed. The SPPU 40 is built external to the APU 30, and its operations will be explained in the next section. The address bus AB4 of the microprocessor MP4 is split into the higher 8 bits HAB and the lower 8 bits. The higher bits HAB become the higher half of the address bus AB of the 6502-32 modules. The lower 8 bits are sent to SPPU 40 for further processing, and thereafter placed on an lower-eight-bit address bus LAB.

Some transfer paths between the data bus of the microprocessor MP4, i.e. the stack pointer data bus SDB, and other units must be created to load and store the index registers X, Y and accomplish data transfers between registers X and S, etc.

A bus transfer transceiver BT1, shown in FIG. 5 as an octal 3-state bidirectional bus transceiver Am2949 can accomplish the transfers between the busses SDB and IDBO. These data transfers are controlled by the signal IDBTOSDB and SDBTOIDB. If IDBTOSDB is low and SDBTOIDB is high, then the transfer from IDBO to SDB proceeds. If SDBTOIDB is low and IDBTOSDB is high, then the opposite transfer proceeds. If both the signals are high, then no transfer occurs and both low is meaningless.

Another transceiver BT2 creates the transfer path between the bus SDB and the SPPU 40, and only unidirectional transfer is allowed here.

A PROM PR2 functions in a way similar to the PROM PR1 and the both are enabled by the same signal OCM. The mapping of PR2 is shown in Table 2.

A stack may be implemented in two ways:

1. A fixed number of registers may be provided within the microprocessor itself. This is a "hardware stack". These are rather inflexible.

2. Most general-purpose microprocessors employ another approach, i.e., a software stack, in order not to restrict the stack to a very small number of registers.

The software stack is used in the 6502 microprocessors, where the stack is always stored on Page 1 (Hex 0100-01FF).

In order to keep track of top of the stack within the memory, the 8-bit address register S is used in 6502 microprocessors and is called the stack pointer SP. The operation of the stack in the 6502 microprocessor is such that the stack pointer SP is always pointing at the next memory location into which data can be stored. For example, the stack pointer is assumed to be 01FF in the beginning. When the microprocessor writes one byte contents into the memory location indicated by the stack pointer, namely pushes one byte into the stack, the microprocessor puts the pointer SP onto the address lines. During the time that a write cycle is going on, the stack pointer SP is automatically decremented by 1 to 01FE. Every time one byte contents are pulled out from the stack, the stack pointer SP is automatically incremented by 1.

In the 6502-32 module, some operations of pushes or pulls might involve 4-byte data. Thus, it is inefficient to make use of the register S of the 6502 processor, and instead the module includes the Stack Pointer Processing Unit (SPPU) 40.

The SPPU 40 of this embodiment is shown in FIG. 6. Two programs control unit chips S1 and S2 (here type Am2930) form the major part of SPPU 40. The Am2930 is a four-bit wide program control unit intended to perform an addressing function. Two Am2930's, each of which processes a 4-bit nibble, may be interconnected to generate an 8-bit address. The Am2930 contains a program counter, a subroutine stack, an auxiliary register and a full adder for computing addresses (see FIG. 7). The program counter registers of the program control units S1 and S2 are used as the stack pointer register S of the 6502-32 module. A bus transceiver BT3 (FIG. 6) forms the path from the APU 30 to the bus LAB. This path is controlled by the signal SPUTOLAB: if SPUTOLAB is low, then the LAB contents are determined by the outputs of the units S1 and S2, otherwise the LAB will equal the lower 8 bits of bus AB4 (FIG. 5). A bus transceiver BT4 constructs the path from the bus LAB to the bus IDBO, and is useful for execution of instruction TSX. This path is controlled by the signal LABTOIDB.

The Am2930 program control unit is a very powerful chip. There are four sources of data for its adder (FIG. 7) which generates the address output. These are the program counters, the subroutine stack, the auxiliary register and the direct input. Under the control of the instruction inputs I (I4-I0), the multiplexers at the address inputs allow various combinations of these terms to be generated at the three-state address outputs. The AM2930 unit can perform 32 instructions altogether. Here in SPPU 40 only two of these 32 instructions are used, i.e.,

where DI is the direct input of units S1 and S2.

The corresponding instruction codes are

respectively.

The signal CISPU controls the incrementers of the units S1, S2.

The operation

is performed when CISPU=1, otherwise

When high, the instruction enable input (IEN) forces the SPPU into the hold mode. This situation will occur when the operation of memory read is not completed by lowering the signal RDY.

It should be noted that in the 6502 microprocessor the stack pointer S is always pointing at the next memory location into which data can be stored. However, here in the 6502-32 module the S register is pointing at the memory location into which data has been stored most recently. The reason for this arrangement can be explained with reference to FIG. 8 and FIG. 9. FIG. 8 represents the case that S is pointing at the memory location stored most recently (scheme 1), while FIG. 9 represents the case that S is pointing at the next memory location to be stored (scheme 2). FIGS. 8 and 9 give the changes of S during the operations of various pushes or pulls, such as push of 4 bytes (PH4), push of 1 byte (PH1), pull of 4 bytes (PL4), or pull of 1 byte (PL1).

The operations to be performed by SPPU 40 both cases are listed in Table 4 and Table 5, respectively. The meanings of "Old S" and "New S" are self-evident in both cases; the value of intermediate S (Int. S) in FIG. 9 corresponds to the value of LAB in Table 5.

In contrast with Table 5, it is easier to implement the operation listed in Table 4 because there only exists an incrementer rather than a decrementer in the program control unit AM2930.

In summary, there are 9 commands for the SPPU 40 to perform and they are listed below:

The corresponding operations are given in Table 6. It should be pointed out that the operation PL4 is the only operation which cannot be completed in one cycle. Thus, the operation of S adjust AD4 should follow the operation PL4.

The DPU 20, APU 30, and SPPU 40 of the 6502-32 module are controlled by the microprogrammed control and signaling unit (MCU) 50, and all the control signals and flags are generated by the MCU 50 as well (see FIG. 3).

The MCU 50 is formed of three major subsections:

The microinstruction sequencing logic MSL should be discussed first. The purpose of this logic is to change the state of the control unit by determining the address of the active microinstruction for the next cycle. Thus, a microprogram sequencer MPS, several microprogram memory address sources, and a number of status conditions form the microinstruction sequencing logic MSL, shown in FIG. 10.

The function of the microprogram sequencer MPS, here an Am2910 chip, is to receive one of these several address sources and status, and, from these, to send the address of the next microinstruction over a next-address channel NA to the microprogram memory (FIGS. 12-14). The microprogram sequencer Am2910 processes data 12-bits wide (FIG. 11). During each microinstruction, the sequencer MPS provides a 12-bit address from one of four sources: a microprogram address register PC, which usually contains an address one greater than the previous address; an external (direct) input D; a register/counter R retaining data loaded during a previous microinstruction; or a five-deep last-in, first-out stack F. The selection is determined by input IMPS, i.e., I in FIG. 11, and by the condition code input CC.

For the MCU 50 of the 6502-32 module there are only 2048 locations in the microprogram memory, thus the highest bit of address for the microprogram sequencing logic MSL is grounded.

The direct inputs of the sequencer MPS are provided with the outputs of 4 chips, PROM PL9, a logic circuit L4, PROM PR9, and PROM PR10. The PROM PL9, itself a part of the microprogram memory, is a 2048*8 bit PROM Am27S47A with output register. Its outputs are enabled by the signal PL from the sequencer MPS. The logic circuit L4 is an 8-bit register 74LS374. The OP code at the bus DBO is registered in the logic circuit L4. The outputs of the latter are enabled by a signal VECT from the sequencer MPS. The PROM PR9 is a 1024*4 bit PROM Am27S33A, its 10-bit address consists of the 0th output of PROM PL9, PL9(0), the 3rd through 7th output bits of a PROM PL8 (in the microprogram memory), PL8(3) through PL8(7), and the flag registers N0, N1, N2, and N3. The PROM PR10 is an 2048*4 bit PROM Am27S185A, whose 11-bit address consists of the zeroth output bit of logic circuit L4, L4(0), the output bits PL9(0), PL8(3), PL8(4), PL8(5), the input signals NMI, IRQ, and the flag registers C0, C1, C2, and C3. The outputs of the PROMs PR9 and PR10 are enabled by the signals PL8(2) and PL8(2) respectively.

The PROMs PR9 and PR10 are programmed to implement the microprogram branch on the flags N0, N1, N2, N3 or C0, C1, C2, C3 up to 16 ways, as shown in Table 7. For example, if PL=0 and PL8(2), PL8(3), PL8(4)=101, then

The value of D is determined by the PROM PL9 and flags C0, C1, C2 and C3, i.e., D can be one of 16 different values which correspond to the status of the flags, C0, C1, C2 and C3. When the sequencer MPS (Am2910) executes the instruction "conditional jump to PL" and CC=0, the microprogram can jump to one of 16 addresses depending on the conditions of C0, C1, C2, and C3. The function of this 16-way branch is to speed up the execution of instructions in the 6502-32 module.

The input CC of the sequencer MPS is provided from the output of a multiplexer MUP. The multiplexer MUP is an eight-input multiplexer Am2923 that switches one of eight inputs onto the output under the control of a 3-bit select code. In the MCU 50, the 3-bit select code comes from the control storage, the eight inputs come from flag and signal registers.

The microprogram memory consists of a number of PROM's with or without output registers. The PROMs without output registers are identified by a reference symbol PR, the PROMs with output registers by a reference symbol PL. According to its use the microprogram memory is divided into five fields:

These PROM's are shown in FIG. 12 through FIG. 15. These figures are self-evident.

FIG. 12 shows the data bus sources DBS with five PROMs PL0 to PL4 with inputs receiving the next address data NA and outputs coupled to the respective data busses IDB0 to IDB3 and SDB.

FIG. 13 shows the data bus path control DBC with PROMs PL5 and PL6 generating the various control signals OLM, DLTOIDB, MTOIDB, PL5(3), MTOSDB, CPA, IDBTOSDB, SDBTOIDB, LABTOIDB and IDBTODB, and operation selection codes OS2 to OS7.

FIG. 14 shows the SPPU operation memory SPU, formed of PROMs PR8 and PR11, generating the signals MTOSPU, PR11(1), SPUTOLAB, CISPU, ISPU, R/W, AWC, SYNC, and DSSPU.

FIG. 15 shows the memory circuitry for generating next-address selection of the active microinstruction, and includes PROMs PL7, PL8, and PL9 generating address bits PL7(0) to PL9(7).

The miscellaneous circuits include the flag register circuits and signalling circuits; these being shown in FIG. 16.

It has been mentioned in the section MSL that the microinstruction sequences are highly related to the status of flags of the 6502-32 module, and the status of the flags are represented by the combination of the four P registers which are contained in microprocessors MP0, MP1, MP2, and MP3 of the DPU 20. In order to make the status of flags visible for the MCU 50, the instruction PHP has to be executed by the microprocessors MP0, MP1, MP2, and MP3. The execution of the instruction PHP will put the P registers onto the data bus IDB at certain cycle. Thus, the status of the flags can be examined at that time or it can be stored for examination afterwards.

In these circuit designs, the five 6502 microprocessors work simultaneously. The instructions executed in this five microprocessors might be different at any given moment, and the numbers of clock cycles needed might be different too. But when the operation involves memory access these five microprocessors have to cooperate with each other, i.e., the microprocessor MP4 has to provide the accessed memory address, and the microprocessors MP0, MP1, MP2, and MP3 have to fetch the data from the memory or deposit the data into the memory simultaneously. To do so, the microprogram control unit MCU synchronizes these five microprocessors. A most convenient means of synchronization is to lower some of the ready line signals RDYi during the read cycle. Lowering the signal RDYi could suspend the operation of the ith microprocessor, thus delaying it one or more cycles. The symbols NRDY4, NRDY3, and NRDY2 . . . NRDY0 represent lowering the signals RDY4, RDY3, and RDY2 . . . RDY0, respectively.

Most signals are directly issued by the control storage. Thus only a few miscellaneous circuits are needed. There are only the three logic chips L5, PAL1, and PAL2 in this unit (FIG. 16).

The basic idea of this design is to divide the processed data into several bytes, e.g., four bytes, and process these bytes of the data concurrently; thus a higher working speed can be obtained. Obviously, some adjusts are unavoidable because for certain bytes the result of operation might relate to not only the byte itself but the other bytes of the data. For example, when the instruction ADC is executed the result of addition operation of the higher type should be related to the lower bytes of the data. Therefore adjusts are needed. Generally, the adjusts include:

It should be pointed out that not all the adjustments are necessary for the execution of every instruction. Only a part of the adjustments is needed for the execution of most instructions. Each of the adjust techniques will be separately described in the following.

The operation of any computer begins with the operation of fetching an instructon. In the microprocessors the first byte of an instruction is called OP code. There are five 6502 microprocessors in the 6502-32 module. It is not always the case to fetch an OP code from main memory and directly send it to all of the five microprocessors for execution. In order to execute the fetched instruction, the operation accomplished by the five microprocessors are not necessarily the same, as can be explained through examples.

It is assumed that the fetched OP code is "30" (BMI). This instruction takes the conditional branch if N is 1. The relative mode of addressing is for this instruction. When N=1 the value in the memory location following the OP code should be added to the program counter to form the new value of the program counter. It is known from the equation (1) that the flag N of the 6502-32 module is N3. On the other hand, the program counter of the 6502-32 module is in the APU 30 (The PC and Address Processing Unit), i.e., in microprocessor MP4. Whether taking the branch in microprocessor MP4 or not depends on the flag N3 in microprocessor MP3. It is established that C4=0, and flag N4 is not used in the 6502-32 module. Therefore, the OP code mapping

should be made.

The purpose of the execution of the instruction PHP in MP3 is to put the flags onto the bus IDB for test. It does not matter in this case which instruction is executed in microprocessors MP0, MP1, and MP2 so long as any of the registers in these microprocessors is not changed. For simplicity the PROM PR1 in FIG. 4 is the only chip employed to accomplish OP code mapping for all four microprocessors MP0, MP1, MP2, and MP3, i.e., the same OP code mapping applies to all four microprocessors. Thus, the microprocessors MP0, MP1, and MP2 execute the same instruction PHP as the microprocessor MP3.

In fact the microprocessor MP4 will always take the branch because the carry flag C4 of MP4 is always 0. It is microprogrammed that the offset which is to be added to the program counter will depend on the flag N3: following the OP code;

The PROM PR2 in FIG. 5 is used for OP code mapping of the microprocessor MP4. The mappings of PROMs PR1 and PR2 are given in Table 1 and Table 2, respectively.

It is supposed that the fetched OP code is "3D" (AND-Absolute, X). It is required to perform a bit-by-bit logical AND operation on the accumulator A and the data which is fetched from memory with absolute indexed addressing. It is known that the sequences for absolute indexed addressing are variable depending upon the addressing with or without page crossing. Thus it is impossible to keep the same sequence for all the four microprocessors MP0, MP1, MP2, and MP3 because, generally, the values of registers X or Y in these four microprocessors are not the same. In order to simplify the control it is desirable to maintain the same addressing sequence for them. Therefore OP code mapping has to be made. It can be found from Table 1 that the OP code "3D"0 is mapped to "2D", performing the logical AND operation on the accumulator A and the data which is fetched from memory with absolute addressing. In fact, it does not matter for the microprocessors MP0, MP1, MP2, and MP3 which addressing is taken, so long as the APU 30 proceeds with the address calculation and is under the control of MCU 50, as the memory provides them with the desirable data to perform the AND operation anyway.

It can be seem from the above examples that OP code mapping is necessary for the execution of the branch instructions, some instructions with indexed addressing, and a few other instructions.

The PC adjust is needed in the execution of the instruction with immediate addressing. In the 6502 microprocessor the instructions which use immediate addressing are two-byte instructions. The first byte contains the OP code specifying the operation and address mode. The second byte contains the operated data. But the operated data should be 32-bits wide in the 6502-32 module. Thus, in 6502-32 the instructions with immediate addressing are five-byte instructions, one byte is for OP code, other four bytes are for operated data. In the APU 30 of the 6502-32 module, the program counter (PC) in the microprocessor MP4 will be incremented automatically by 2 rather than 5 after each execution of the instructions with immediate addressing. That is why the PC adjust operation is needed.

The purpose of the PC adjust is to force the program counter in the microprocessor MP4 to be incremented by 5. This can be done by making a branch instruction execute in the microprocessor MP4. If the procedures of OP code mapping and PC adjust are joined together, then the module will operate still more efficiently. This can be explained by the following example.

Suppose that the fetched OP code is "09" (ORA-Immediate). The instruction performs the logical OR operation on the accumulator A and on the immediate data. From Tables 1 and 2 it could be seen that the mapped code "09" is sent to the microprocessors MP0, MP1, MP2, and MP3, "90" is sent to the microprocessor MP4.

"90" is the OP code of the instruction "branch on carry flag". Here, C4=0. Thus, the microprocessor MP4 is certain to take the branch. In the following cycle, if the MCU 50 provides microprocessor MP4 of the APU 30 with the one byte data "3" then the PC adjust can be accomplished. The data "3" is stored in the location "048" of the microprogram memory (see Appendix).

It is apparent that the number of cycles taken for the execution of the instruction "90" in microprocessor MP4 is greater than the number of cycles taken for the execution of the instruction "09" in microprocessors MP0, MP1, MP2, and MP3. After the completion of the execution of instruction "09" in microprocessors MPO, MP1, MP2, and MP3, the MCU 50 has to keep the microprocessors MP0, MP1, MP2, and MP3 waiting until the execution of instruction "90" in the microprocessor MP4 is completed. There are two methods to keep the microprocessors waiting:

1. lowering the ready line RDY i (i=0,1,2,3) of the microprocessors by the MCU50 if the microprocessor in question is in a read cycle;

2. inserting one or more executions of the instruction "EA" (NOP) in the microprocessors.

The method 2 can make the microprocessor wait only for even cycles, but no such limitation exists for method 1.

Both the methods 1 and 2 are adopted in this example (see the location 049 and 04A in Appendix).

The result adjust can be explained by examples.

Suppose that the instruction ADC, say "65"--adding memory to accumulator with zero page addressing, is to be executed. That is, the 32-bit data word M is fetched from the memory location specified by the byte immediately following the OP code "65", and is added to accumulator A,

In fact, the accumulator A of the 6502-32 module consists of four accumulators A0, A1, A2, and A3 which are contained in the microprocessors MP0, MP1, MP2, and MP3, respectively. Each is 8-bits in width. The 32-bit data M are divided into 4 bytes, M0, M1, M2, and M3. These are loaded into the four microprocessors MP0 to MP3 separately. The operations of addition are accomplished in the four microprocessors simultaneously:

It is known that C=C0, and C1=C2=C3=0 before the execution of this instruction. Thus, the operation of addition "A+M+C" is equivalent to the combination of the operations "A3+M3+C3", "A2+M2+C3", "A1+M1+C1", and "A0+M0+C0". But in order to obtain the correct sum of addition in A and the correct carry flag, the resultant carry flag C0 of MP0 after the above operation of addition should be added to A1 of MP1 once more, the resultant C1 should be added to A2 of MP2 once more, and so forth. It should be noticed that the above adjust procedure could be performed more times. This operation is called result adjust.

Lastly, the final resultant carry flag C3 has to be applied to the microprocessor MPO as the carry flag C of the 6502-32 module after the execution of the instruction, and the carry flags C1, C2, and C3 then are cleared. This operation is called flag adjust, which will be discussed in the following section. In some cases the result adjust and the flag adjust are combined to reduce the number of executing cycles.

We now continue to discuss the result adjust for the instruction ADC. The first step of the result adjust is to inspect the carry flags C0, C1, C2, and C3 through the execution of the instruction PHP in the microprocessors MP0, MP1, MP2, and MP3. It should be pointed out that the execution of the instruction PHP in the microprocessors MP0, MP1, MP2, and MP3 does not result in pushing the P register into the stack so long as the signal "write" is not issued by the 6502-32 module and the S register of the 6502-32 module is not changed. The only action of this execution of PHP is to put the flags onto the bus IDB for examination. After the execution of "PHP" the result adjust microprogram can have 16 branches depending on the carry flags C0, C1, C2, and C3 (as shown in location 34B of the Appendix). For instance, it is supposed that

Then the following adjust sequence should be performed:

This is disclosed at location 313 of the Appendix.

The result adjust sequences for various combinations of the carry flags C0, C1, C2, and C3 are given in Table 8.

This adjust is called the first adjust. Depending on the result of the first adjust, further adjusts might be needed. In order to reduce the microprogram sequence for such an adjust, the scheme of this embodiment adds 1 into microprocessor MP2 in advance during the first adjust when

This adjust measure "adding 1 in advance" could reduce the length of the result adjust sequence for the execution of the instruction ADC.

Now let us look at another example.

An instruction "06", shifting left one bit with zero page addressing, is to be executed.

At first, the 32-bit data word to be shifted is fetched from memory, then it is divided into four bytes, each of which is set to the corresponding microprocessor 6502 to be shifted, and after shifting the result is deposited into memory again.

When each of the four 6502 microprocessors executes the instruction "06", the least significant bits of the bytes are always filled by zeroes. This result should be adjusted according to the old values of the most significant bits of the next lower bytes. Here the "old value" means the value before shifting. Under the control of the signal OS2 through OS7 (in FIG. 4) this adjust could be accomplished by PROMs PR4, PR5, PR6, and PR7 of FIG. 4.

The most significant bits of these four bytes are represented by N0, N1, N2, and N3, respectively. The same names as the negation flags are used here because the bit representing negation flag is the most significant bit of the P register as well. When the contents on the bus IDB are examined by the MCU 50, the most significant bit of the byte i is always called Ni, no matter whether the examined contents are really flags or not.

Thus, it is not difficult to understand the microprogram for the result adjust shown in 038-03F and 0B8-0BF of the Appendix.

The best example to explain the flag adjust is the execution of the instruction CMP. This instruction subtracts the memory contents M from the contents A of the accumulator, giving a difference result A-M. The use of the CMP affects the following flags: a flag Z is set on an equal comparison, reset otherwise; the flag N is set or reset by the result bit 31; the carry flag is set when the value in memory is less than or equal to the accumulator, reset when it is greater than the accumulator. The accumulator itself is not affected.

The execution of the instruction CMP in the 6502-32 module begins by sending the fetched 32-bit data M into the four 6502 microprocessors MP0, MP1, MP2, and MP3 which perform the comparisons A0-M0, A1-M1, A2-M2, and A3-M3 simultaneously. The status of the flags Ci, Ni, Zi will be set up after the comparison in each microprocessor MPi. Now the question is how to set up the status of the flags C, N, Z of the 6502-32 module according to the microprocessor flags Ci, Ni, and Zi, where i=0 through 3.

The adjust for zero flag Z is not needed.

It is known that the M<=A if and only if

i.e., the carry flag C should be set up according to the Boolean function BF1,

A programmable array logic, of the type AmPAL16R8A, is favorably used to implement this logic function (PAL1 in FIG. 16).

We will now discuss the flag N. The flag N coincides with the result bit 31 of the subtraction A-M. In order to determine this bit we define the Boolean function BF2,

the BF2=1 if and only if

that means that if BF2=0 then the result bit 31 of A-M coincides with the bit 7 of (A3-M3) in MP3, in this case the flag N adjust is not needed, otherwise the result bit 31 of A-M should coincide with the bit 7 of A3-(M3+1) in microprocessor MP3. The Boolean function BF2 is implemented by the same PAL chip as the above. The operation of adding 1 to memory contents M3 is accomplished by the PROM PR3 of FIG. 4.

The microprogram segments for the flag N adjust and the flag C adjust during the execution of the instruction CMP being at the locations 62C and 62D in the Appendix, respectively.

In summary, the basic techniques used in this design include:

the techniques to synchronize the several microprocessors;

the techniques to inspect the status of the microprocessors;

the techniques to transfer data between the microprocessors;

the techniques to accomplish microprogram multiple-way branches; and so forth.

Using these basic techniques various adjusts can be implemented.

General organization of the microsubroutines employed in this embodiment is shown in FIG. 17. It can be seen that a fetch operation retrieves an op code, which identifies the microsubroutine next to be executed. Here, three representative subroutines are illustrated: 000:BRK, 008:ORA, and 7FO:INC. Following each execution, the next op code is retrieved.

The integrated circuit chips used in the 6502-32 module are listed in Table 9. There are forty-two chips needed altogether. In comparison with SSI/MSI implementation or bit-slice implementation, fewer chips are employed in this design. In addition, the design procedure according to this invention is greatly simplified.

The clock cycle requirements for the 6502-32 module are listed in Table 10. It can be seen from this table that in comparsion with the unitary 6502 microprocessor more clock cycles are needed for the execution of 55.6 percent of the 6502-32 module's instructions. The percentage of the instructions vs. the number of additional clock cycles over the 6502 microprocessor are listed as follows: Percentage of Inst. No. clock cycles more than 6502 ______________________________________ 11.3          1 to 2 17.2          3 to 5 24.4           6 to 10 2.7          over 10 ______________________________________

The average number of clock cycles per instruction execution is increased by 84.5%. That means that in contrast with single micropocessor less than twofold increase of time is needed to process four times as much data.

The module presented in this description could be considered a hybrid of bit-slice implementation and single microprocessor approach, to some extent. This approach takes advantage of the well-designed microprocessors, making the best use of the data paths and control circuits in the microprocessors. Thus, the design and the design procedure could be fairly simple. On the other hand, as the multiple microprocessors work simultaneously, this design has a fairly high working speed. The control unit is microprogrammed, making the design structured and expansible. The microprograms for every instruction are given in the Appendix. It can be seen that an augmented instruction set can be easily implemented with unchanged hardware organization in this design.

From the description given above, the following conclusions about the design and applications of the module of this invention can be made.

Let us take a glance at the example 6502-32 module again. In this example the number of memory address bits is the same as in the 6502 processor, and the address calculation is almost the same as in the 6502 processor; thus in this particular case only one 6502 microprocessor is needed in the Address Processing Unit. In general, either one or more than one microprocessor might be employed to construct the address processing unit. For example, if the designer would like to change the number of memory address bits of 6502-32 to 32, then a four-microprocessor address processing unit could replace the Address Processing Unit and the Stack Pointer Processing Unit of the 6502-32 module. The registers X, Y in these four microprocessors are assigned as the program counter and the S register of the module, respectively. In this case the Address Processing Unit becomes highly similar to the Data Processing Unit, and will have similar data paths, thus the design procedures will be similar.

It can be concluded that the microprogram-coupled multiple-microprocessor module could be used to expand the computational power of the general purpose microprocessors, e.g., the word size, the addressable memory location and the executed instruction set.

The module of this invention employs new structure to implement a processor. This implementation is more efficient than previous endeavors because of its multiple-microprocessor construction, and is more flexible because it is microprogrammable. The module has higher degree of modularity. For example, one kind of microprocessor could be employed in one module, and another kind of microprocessor might be used in another module, and both the modules could be used in the same system so long as timing restrictions are not violated. It is not difficult to do the microprogramming. The microprocessors employed in the module are very powerful chips, with quite complex control circuits built in. Designers of the module could make the most use of the various functions of the microprocessors and keep the microprogrammed control circuitry simple.

From the above description, it can be seen that this multiple-microprocessor module structure, could be used in many applications.

Some computation-intensive tasks, such as circuit simulation or device modeling, demand high-speed, high-precision floating-point processing. Those persons familiar with this art are becoming increasingly aware of the advantages of working with floating-point processors. In order to obtain high speed, the processing can be partitioned over a number of concurrently operating units. Often a process may be divided into two ways: synchro-parallelism and pipelining.

In synchro-parallelism the processing is symmetrically partitioned into identical subprocessing, each preceeded by one processor. In pipelining, the processing is distributed to pipeline stages. One processor could be employed by a pipeline stage. The processor could be either a general purpose microprocessor or a special purpose processor. High speed multipliers and adders are two examples of special purpose processors. For instance, the multiplication of two 64-bit data words could be implemented by four 32-bit multipliers and several adders. These multipliers and adders could be coupled by microprogram in either the synchro-parallelism or pipelining mode, depending on the requirement as to speed.

It can be seen that a wide data path can be obtained with the module because the application of multiple-microprocessor. Furthermore, the module can be easily microprogrammed according to the task assignment. Thus, the module is applicable to floating-point processors, so it could be used as subprocessor or a pipeline stage.

By way of analogy, the module is applicable to many systems with uniprocessor or multiple processor architecture. The module can be applied to systems with long data words, special instruction sets, and high-speed requirements.

It can be seen from the discussion of the 6502-32 module that it takes much time to accomplish several adjusts. If the registers or flags of the microprocessors used in the module are easier to access, then less time will be consumed for the adjusts, thus it will make the module more attractive. On the other hand, if a particular microprocessor executes one instruction per cycle and has a rich-register architecture, it would be highly suitable for use in the module.

Portions of the module or the entire module could be fabricated on a single microprogrammable chip.

It is also possible to employ the multiple-microprocessor module as a building block of a second level system module, an illustrative example of which is depicted in FIG. 18. Here, the module, like that of FIG. 3, has a DPU 120, an APU 130, an SPPU 140 and an MCU 150. The DPU 120 employs four parallel 6502-32 modules, and the APU 130 another 6502-32 module. The data bus DB' of this second level module has a path width of 128 bits, and the address bus AB' has a path width of 64 bits. Third, fourth, and nth level systems could be constructed.

Of course, the presentation above of a preferred embodiment with some discussion of modification and variations does not limit the scope of the invention, for many further modifications and variations would present themselves to those of skill in the art without departure from the scope and spirit of the invention, as defined in the ensuing claims. __________________________________________________________________________ OP Code Mapping (PR1) 0    1 2  3  4  5 6 7  8 9  A  B  C  D  E  F __________________________________________________________________________ 0 EA 01 XX XX XX 05 06 XX 08 09 0A XX XX 0D 0E XX 1 08 01 XX XX XX 15 16 XX 18 0D XX XX XX 0D 1E XX 2 EA 21 XX XX 24 25 26 XX 28 29 2A XX 2C 2D 2E XX 3 08 21 XX XX XX 35 36 XX EA 2D XX XX XX 2D 3E XX 4 40 41 XX XX XX 45 46 XX 48 49 4A XX 4C 4D 4E XX 5 08 41 XX XX XX 55 56 XX 58 4D XX XX XX 4D 5E XX 6 60 61 XX XX XX 65 08 XX 68 69 08 XX 6C 6D 08 XX 7 08 61 XX XX XX 75 08 XX 78 6D XX XX XX 6D 08 XX 8 XX 81 XX XX 84 85 86 XX 88 XX 8A XX 8C 8D 8E XX 9 08 91 XX XX 94 95 96 XX 98 99 86 XX XX 9D XX XX A A0 A1 A2 XX A4 A5 A6 XX 85 A9 85 XX AC AD AE XX B 08 A1 XX XX B4 B5 B6 XX B8 AD A2 XX AC AD AE XX C C0 C1 XX XX C4 C5 C6 XX C8 C9 CA XX CC CD CE XX D 08 C1 XX XX XX D5 D6 XX D8 CD XX XX XX CD DE XX E E0 E1 XX XX E4 E5 E6 XX E8 E9 EA XX EC ED EE XX F 08 E1 XX XX XX F5 F6 XX F8 ED XX XX XX ED FE XX __________________________________________________________________________ XX = Don't care __________________________________________________________________________ OP Code Mapping (PR2) 0    1 2  3  4  5 6 7  8 9  A  B  C  D  E  F __________________________________________________________________________ 0 00 01 XX XX XX 05 06 XX 08 90 EA XX XX 0D 0E XX 1 90 11 XX XX XX 15 16 XX 18 19 XX XX XX 1D 1E XX 2 20 21 XX XX 24 25 26 XX 28 90 EA XX 2C 2D 2E XX 3 90 31 XX XX XX 35 36 XX EA 39 XX XX XX 3D 3E XX 4 40 41 XX XX XX 45 46 XX 48 90 EA XX 4C 4D 4E XX 5 90 51 XX XX XX 55 56 XX 58 59 XX XX XX 5D 5E XX 6 60 61 XX XX XX 65 66 XX 68 90 6A XX 6C 6D 6E XX 7 90 71 XX XX XX 75 76 XX 78 79 XX XX XX 7D 7E XX 8 XX 81 XX XX 84 85 86 XX 88 XX EA XX 8C 8D 8E XX 9 90 91 XX XX 94 95 96 XX EA 99 9A XX XX 9D XX XX A A0 A1 A2 XX A4 A5 A6 XX A4 90 A6 XX AC AD AE XX B 90 B1 XX XX B4 B5 B6 XX B8 B9 A2 XX BC BD BE XX C C0 C1 XX XX C4 C5 C6 XX C8 90 CA XX CC CD CE XX D 90 D1 XX XX XX D5 D6 XX D8 D9 XX XX XX DD DE XX E E0 E1 XX XX E4 E5 E6 XX E8 90 EA XX EC ED EE XX F 90 F1 XX XX XX F5 F6 XX F8 F9 XX XX XX FD FE XX __________________________________________________________________________ XX = Don't care ______________________________________ Operation Selection 0S2      0S3   0S4, 0S5, 0S6, 0S7 Operation ______________________________________ 0        0     0                NOP 0        0     1                DE1 0        1     0                NOP 0        1     1                IN1 1        0     0                NOP 1        0     1                SEL 1        1     0                NOP 1        1     1                SEM ______________________________________ ______________________________________ Operations for FIG. 8 PH4       PH1        PL4         PL1 ______________________________________ LAB = S - 4; LAB =      LAB = S;    LAB = S; S - 1; Write;    Write;     Read;       Read; S   LAB   S   LAB    S   LAB + 4 S   LAB + 1 ______________________________________ ______________________________________ Operations for FIG. 9 PH4       PH1        PL4         PL1 ______________________________________ LAB = S - 3; LAB = S;   LAB = S + 1; LAB = S + 1; Write;    Write;     Read;       Read; S   LAB - 1 S          S   LAB + 3 S   LAB LAB - 1 ______________________________________ ______________________________________ SPPU Operations Com- mand   Operations ______________________________________ LSP    LAB = DI;   no stack operation; S   LAB + 1 SSP    LAB = S - 1; no stack operation; S   LAB + 1 PH4    LAB = S - 4; write;        S   LAB PH1    LAB = S - 1; write;        S   LAB PL4    LAB = S;    read;         S   LAB + 4 PL1    LAB = S;    read;         S   LAB + 1 PL*    LAB = S + 3; read;         S   LAB + 1 AD4    LAB = S + 3; no stack operation; S   LAB NOP    LAB = S;    no stack operation; S   LAB ______________________________________ __________________________________________________________________________ Multiple Way Branch ##STR1## ##STR2## PL8(2) PL8(3) PL8(4) D(10-4) D(3) D(2)  D(1) D(0) __________________________________________________________________________ 1  0    1   0   0      L4(7-1) L4(0) 0     0   0 0  1    0   0   0   PL9(7-1) PL9(0) N2    N1  N0 0  1    0   0   1   PL9(7-1) PL9(0) PL8(7) PL8(6) N3 0  1    0   1   0   PL9(7-1) PL9(0) PL8(7) PL8(6) N0 0  1    0   1   1   PL9(7-1) PL9(0) PL8(7) PL8(6) PL8(5) 0  1    1   0   0            UNUSED 0  1    1   0   1   PL9(7-1) C3  C2    C1  C0 0  1    1   1   0   PL9(7-1) PL9(0) C3    C2  C1 0  1    1   1   1   PL9(7-1) PL9(0) PL8(5) ##STR3## ##STR4## __________________________________________________________________________ ______________________________________ The Adjust Sequence for ADC C3  C2    C1    C0  MP 3   MP 2      MP 1   MP 0 ______________________________________ 0   0     0     0   --     --        --     -- 0   0     0     1   EA(NOP) 69(ADC) +1* 69(ADC) 18(CLC) +1 0   0     1     0   EA(NOP) 69(ADC) +1 18(CLC) EA (NOP) 0   0     1     1   EA(NOP) 69(ADC) +1 69(ADC) 18(CLC) +0 0   1     0     0   69(ADC) 18(CLC)   EA(NOP) EA +1                      (NOP) 0   1     0     1   69(ADC) 18(CLC)   69(ADC) 18(CLC) +1               +1 0   1     1     0   69(ADC) 69(ADC) +0 18(CLC) EA +1                      (NOP) 0   1     1     1   69(ADC) 69(ADC) +0 69(ADC) 18(CLC) +1               +0 1   0     0     0   18(CLC) EA(NOP)   EA(NOP) 38(SEC) 1   0     0     1   18(CLC) 69(ADC) +1* 69(ADC) EA +1     (NOP) 1   0     1     0   18(CLC) 69(ADC) +1 18(CLC) 38(SEC) 1   0     1     1   18(CLC) 69(ADC) +1 69(ADC) EA +0     (NOP) 1   1     0     0   69(ADC) 18(CLC)   EA(NOP) 38(SEC) +0 1   1     0     1   69(ADC) 18(CLC)   69(ADC) EA +0               +1     (NOP) 1   1     1     0   69(ADC) 69(ADC) +0 18(CLC) 38(SEC) +0 1   1     1     1   69(ADC) 69(ADC0 +0 69(ADC) EA +0               +0     (NOP) ______________________________________ *add 1 in advance ______________________________________ List of IC Chips Device       Description       Qty. ______________________________________ 6502         8-bit microprocessor 5 Am27S29A     PROM 512 .times. 8 3 Am27S33A     PROM 1024 .times. 4 1 Am27S185A    PROM 2048 .times. 4 1 Am27S191A    PROM 2048 .times. 8 6 Am27S47A     PROM 2048 .times. 8 10 Am2930       Program Control Unit 2 Am2910       Microprogram Controller 1 Am2923       Eight-Input Multiplexer 1 Am2949       Bus Transceiver   4 AmPAL16R8A   Programmable Array Logic 1 AmPAL16H8A   Programmable Array Logic 1 74LS373      Transparent Latch 4 74LS374      D Flip-Flop       2 ______________________________________ ______________________________________ Clock Cycle Requirement OP                  Number of bytes Clock Cycles Code Mnemonic       6502    6502-32 6502  6502-32 ______________________________________ 00   BRK            1       1      7     8 01   ORA-(Indirect, X) 2       2      6     6 05   ORA-Zero Page  2       2      3     3 06   ASL-Zero Page  2       2      5     11.5 08   PHP            1       1      3     3 09   ORA-Immediate  2       5      2     4 0A   ASL-Accumulator 1       1      2     7 0D   ORA-Absolute   3       3      4     4 0E   ASL-Absolute   3       3      6     12.5 10   BPL            2       2       3**  5.5 11   ORA-(Indirect), Y 2       2       5*   6 15   ORA-Zero Page, X 2       2      4     4 16   ASL-Zero Page, X 2       2      6     12.5 18   CLC            1       1      2     2 19   ORA-Absolute, Y 3       3       4*   5 1D   ORA-Absolute, X 3       3       4*   5 1E   ASL-Absolute, X 3       3      7     13.5 20   JSR            3       3      6     6 21   AND-(Indirect, X) 2       2      6     6 24   BIT-Zero Page  2       2      3     3 25   AND-Zero Page  2       2      3     3 26   ROL-Zero Page  2       2      5     11.5 28   PLP            1       1      4     5 29   AND-Immediate  2       5      2     4 2A   ROL-Accumulator 1       1      2     7 2C   BIT-Absolute   3       3      4     4 2D   AND-Absolute   3       3      4     4 2E   ROL-Absolute   3       3      6     12.5 30   BMI            2       2       3**  5.5 31   AND-(Indirect), Y 2       2       5*   6 35   AND-Zero Page, X 2       2      4     4 36   ROL-Zero Page, X 2       2      6     12.5 38   SEC            1       1      2     4 39   AND-Absolute, Y 3       3       4*   5 3D   AND-Absolute, X 3       3       4*   5 3E   ROL-Absolute, X 3       3      7     13.5 40   RTI            1       1      6     6 41   EOR-(Indirect, X) 2       2      6     6 45   EOR-Zero Page  2       2      3     3 46   LSR-Zero Page  2       2      5     13 48   PHA            1       1      3     3 49   EOR-Immediate  2       5      2     4 4A   LSR-Accumulator 1       1      2     7 4C   JMP-Absolute   3       3      3     3 4D   EOR-Absolute   3       3      4     4 4E   LSR-Absolute   3       3      6     14 50   BVC            2       2       3**  5.5 51   EOR-(Indirect), Y 2       2       5*   6 55   EOR-Zero Page, X 2       2      4     4 56   LSR-Zero Page, X 2       2      6     14 58   CLI            1       1      2     2 59   EOR-Absolute, Y 3       3       4*   5 5D   EOR-Absolute, X 3       3       4*   5 5E   LSR-Absolute, X 3       3      7     15 60   RTS            1       1      6     6 61   ADC-(Indirect, X) 2       2      6     15 65   ADC-Zero Page  2       2      3     12 66   ROR-Zero Page  2       2      5     16 68   PLA            1       1      4     5 69   ADC-Immediate  2       5      2     11 6A   ROR-Accumulator 1       1      2     10 6C   JMP-Indirect   3       3      5     5 6D   ADC-Absolute   3       3      4     13 6E   ROR-Absolute   3       3      6     17 70   BVS            2       2       3**  5.5 71   ADC-(Indirect), Y 2       2       5*   15 75   ADC-Zero Page, X 2       2      4     13 76   ROR-Zero Page, X 2       2      6     17 78   SEI            1       1      2     2 79   ADC-Absolute, Y 3       3       4*   14 7D   ADC-Absolute, X 3       3       4*   14 7E   ROR-Absolute, X 3       3      7     18 81   STA-(Indirect, X) 2       2      6     6 84   STY-Zero Page  2       2      3     3 85   STA-Zero Page  2       2      3     3 86   STX-Zero Page  2       2      3     3 88   DEY            1       1      2     7 8A   TXA            1       1      2     2 8C   STY-Absolute   3       3      4     4 8D   STA-Absolute   3       3      4     4 8E   STX-Absolute   3       3      4     4 90   BCC            2       2        3** 5.5 91   STA-(Indirect), Y 2       2      6     6 94   STY-Zero Page, X 2       2      4     4 95   STA-Zero Page, X 2       2      4     4 96   STX-Zero Page, Y 2       2      4     4 98   TYA            1       1      2     2 99   STA-Absolute, Y 3       3      5     5 9A   TXS            1       1      2     3 9D   STA-Absolute, X 3       3      5     5 A0   LDY-Immediate  2       5      2     6 A1   LDA-(Indirect, X) 2       2      6     6 A2   LDX-Immediate  2       5      2     6 A4   LDY-Zero Page  2       2      3     3 A5   LDA-Zero Page  2       2      3     3 A6   LDX-Zero Page  2       2      3     3 A8   TAY            1       1      2     7 A9   LDA-Immediate  2       5      2     4 AA   TAX            1       1      2     7 AC   LDY-Absolute   3       3      4     4 AD   LDA-Absolute   3       3      4     4 AE   LDX-Absolute   3       3      4     4 B0   BCS            2       2       3**  5.5 B1   LDA-(Indirect), Y 2       2       5*   6 B4   LDY-Zero Page, X 2       2      4     4 B5   LDA-Zero Page, X 2       2      4     4 B6   LDX-Zero Page, Y 2       2      4     4 B8   CLV            1       1      2     2 B9   LDA-Absolute, Y 3       3       4*   5 BA   TSX            1       1      2     6 BC   LDY-Absolute, X 3       3        4*  5 BD   LDA-Absolute, X 3       3       4*   5 BE   LDX-Absolute, Y 3       3       4*   5 C0   CPY-Immediate  2       2      2     7 C1   CMP-(Indirect, X) 2       2      6     12.5 C4   CPY-Zero Page  2       2      3     8 C5   CMP-Zero Page  2       2      3     9.5 C6   DEC-Zero Page  2       2      5     10 C8   INY            1       1      2     7 C9   CMP-Immediate  2       5      2     8.5 CA   DEX            1       1      2     7 CC   CPY-Absolute   3       3      4     9 CD   CMP-Absolute   3       3      4     10.5 CE   DEC-Absolute   3       3      6     11 D0   BNE            2       2       3**  5.5 D1   CMP-(Indirect), Y 2       2       5*   12.5 D5   CMP-Zero Page, X 2       2      4     10.5 D6   DEC-Zero Page, X 2       2      6     11 D8   CLD            1       1      2     2 D9   CMP-Absolute, Y 3       3       4*   11.5 DD   CMP-Absolute, X 3       3       4*   11.5 DE   DEC-Absolute, X 3       3      7     12 E0   CPX-Immediate  2       2      2     7 E1   SBC-(Indirect, X) 2       2      6     15 E4   CPX-Zero Page  2       2      3     8 E5   SBC-Zero Page  2       2      3     12 E6   INC-Zero Page  2       2      5     10 E8   INX            1       1      2     7 E9   SBC-Immediate  2       5      2     11 EA   NOP            L       1      2     2 EC   CPX-Absolute   3       3      4     9 ED   SBC-Absolute   3       3      4     13 EE   INC-Absolute   3       3      6     11 F0   BEQ            2       2       3**  5.5 F1   SBC-(Indirect), Y 2       2       5*   15 F5   SBC-Zero Page, X 2       2      4     13 F6   INC-Zero Page, X 2       2      6     11 F8   SED            1       1      2     2 F9   SBC-Absolute, Y 3       3       4*   14 FD   SBC-Absolute, X 3       3       4*   14 FE   INC-Absolute, X 3       3      7     12 ______________________________________ *Add 1 if page boundary is crossed. **Add 1 if branch occurs to different page. ##SPC1## pp. 7-18, John Wiley & Sons, 1978. Development at Intel" IEEE Micro Vol. 1 No 1, February 1981. Architecture for Large Digital Modules", Symposium on Computer Architecture, 1973. Technology and the Architecture of Large Digital Modules", IEEE Computer, Vol. 6, No. 10, October 1973. Microcomputer Systems", Computer Design, March 1978. and Alternatives", COMPCON, Spring 1979. 1983. Multiple-Microprocessor Systems", pp. 252-258, Prentice-Hall, Inc. 1980. Scientists", pp. 159-164, Prentice-Hall, Inc, 1980. Logic", John Wiley & Sons. Garland STPM Press. 15, No. 9, September 1982. Single-Chip computers of the Future", IEEE. Trans. Computers, Joint Special Issue on Microprocessors and Microcomputers, Vol. C-29, No. 2, pp. 108-116. Book Company, 1977. Floating-Point Work", Electronics, July 12, 1984. pp. 136-140, pp. 442-461, SRA Inc. Annual Symposium on Computer Architecture, March 1977. 141-146, Petrcell Books Inc. Academic Press, 1976. Prentice-Hall. Sons. Microprogram Sequencer", EDN, 23(11), 137-143 (1978). Microprogrammed Processor", IEEE Trans. on Computers, C-20(7), pp. 743-540, 1970. Hewlett-Pachard Journal Vol. 84, No. 8, pp. 7-11, August 1983. Design, Vol 23, No 6, pp. 125-136, June 1984. Devices, 1983. Wiley & Sons, 1974.

## Claims

1. A microprogram-coupled multiple-microprocessor module comprising: an internal data bus and a program counter, a plurality of corresponding main data busses, the main data busses combining in parallel to form a module data bus, and a control circuit coupling said microprocessors to said main data busses; correspond to the data processed in the microprocessors of the data processing unit, including at least one microprocessor having a microprocessor address bus and a microprocessor data bus; means coupling the microprocessor address bus to a module address bus; data transfer means coupling the microprocessor data bus of said at least one microprocessor to a stack pointer bus and to the internal data bus of at least one of the microprocessors of the data processing unit; and APU logic mapping means coupled to one of said main data busses of the data processing unit and to said at least one microprocessor of the address processing unit for op code mapping of said at least one microprocessor of the address processing unit according to a predetermined op code mapping scheme stored in said APU logic mapping means; microprocessor of said address processing unit for keeping track of stack pointers for all microprocessors, including address processor control means and data transfer means coupling the address processor control means to the stack pointer bus of the address processing unit and to the internal data bus of said one of the microprocessors of said data processing unit; and means storing microinstructions to be applied to said microprocessors of said data processing unit; microinstruction sequencing logic means providing address data to said microprogram memory means to determine the next successive address of a microprogram sequence, and flag and signal generating circuit means having inputs coupled to the internal data busses of the microprocessors of the data processing unit and outputs providing status flags and signals to said microinstruction sequencing logic means to control the synchronization of the microinstructions executed in the multiple microprocessors of said data processing unit and the at least one microprocessor of said address processing unit so that memory fetch and memory write operations are all synchronized; such that the microprogram control and signalling unit controls the data processing unit, the address processing unit, and the stack pointer processing unit by delaying the incrementation of one or more of the program counters of the microprocessors of the data processing unit as need be so that the several microprocessors of the data processing unit and the address processing unit complete corresponding operations at the same time, and so that carries are accounted for from one of the microprocessors of the data processing unit to another thereof.

2. A microprogram-coupled multiple-microprocessor module as in claim 1, wherein said data processing unit includes said plurality of microprocessors, a plurality of transparent latch circuit each coupled between an associated internal data bus and its respective main data bus, and a plurality of PROMs each having an input coupled to a respective one of the internal data busses, an output coupled to the associated main data bus, and PROM control inputs receiving operation selection signals from the microprogram memory means.

3. A microprogram-coupled multiple-microprocessor module as in claim 2, wherein said data processing unit further includes logic means for receiving an op code from one said main data bus and providing an op code mapped output to each of said internal data busses.

4. A microprogram-coupled multiple-microprocessor mode as in claim 2, wherein said data processing unit further includes logic means having an input and output respectively coupled to one said main data bus and the associated internal data bus, and arranged such that the output data equal the input data plus "1".

5. A microprogram-coupled multiple-microprocessor module as in claim 1, wherein the logic mapping means of said address processing unit includes a bidirectional bus transceiver coupled to a microprocessor data port of the at least one microprocessor of the address processing unit and to the internal data bus of at least one of the microprocessors of said data processing unit, a bus transceiver having an input coupled to said microprocessor data port and an output coupled to said stack pointer processing unit, and a programed logic device containing a stored op code mapping scheme and having an input coupled to one said main data bus and an output coupled to said microprocessor data port for providing an op code mapped output to said microprocessor data port.

6. A microprogram-coupled multiple-microprocessor module as in claim 1, wherein said address processor control means of said stack pointer processing unit includes program control unit means generating an address output to said microprocessor address bus, and said data transfer means includes bus transceiver means coupling the stack pointer bus of said address processing unit to an input of said address processor control means when an actuating signal applied to said bus transceiver means has one sense, and coupling an address bus of said address processing unit to said address processor control means when said actuating signal has another complementary sense.

7. A microprogram-coupled multiple-microprocessor module as in claim 1, wherein said address processor unit has output address bus means providing higher address bits over a first path to an upper portion of a module address bus, and providing lower address bits to the address processor control means of said stack pointer processing unit, said address processor control means including address generating means having data bus inputs coupled to receive said lower bits and an instruction input port coupled to receive multi-bit instruction codes from said microprogram control unit, and outputs coupled to supply processed lower address bits to said module address bus.

8. A microprocessor-coupled multi-microprocessor module as in claim 7, wherein the data transfer means of said stack pointer processing unit includes bus transfer means coupling said module address bus to the internal data bus of at least one of the microprocessors of said data processing unit.

9. A microprogram-coupled multiple-microprocessor module as in claim 1, wherein the microprogram memory means of said microprogram control and signalling unit includes means storing microprogram address data, and said sequencing logic means includes microprogram sequencing means having inputs coupled to said microprogram memory means and an output providing microprogram address data, and a plurality of data port sources having inputs coupled to the microprogram memory means output and outputs coupled respectively to the internal data busses of the microprocessors of said data processing unit.

10. A microprogram-coupled multiple-microprocessor module as in claim 1, wherein said microprogram control and signalling unit includes synchronizing means for synchronizing the operation of the microprocessors of the data processing unit and of the address processing unit such that said microprocessors of the data processing unit all perform a fetch from memory operation at one time while said at least one microprocessor of said address processing unit provides an associated memory address word, and said microprocessors of said data processing unit all performs a memory deposit operation at one time while said at least one microprocessor of said address processing unit provides an associated memory address word, notwithstanding that said microprocessors perform different respective processing operations requiring differing numbers of clock cycles.