• Please review our updated Terms and Rules here

Multiple microprocessors as a single CPU (not multiprocessing)

jplr

Experienced Member
Joined
Sep 3, 2022
Messages
153
Location
Brittany/France
Beware this is a weird idea!
I know that some Sun stations used two 68000 CPUs to implement virtual memory (one in advance of one instruction wrt the other).
There is also a smart contraption named KimKlone which adds registers to a regular 6502.
Are there other examples using microprocessors to implement maybe also:
- Extended range of memory addresses (one CPU provides the low addresses, the other provides the high addresses maybe to a rudimentary MMU)
- Extended words in CPU with only ADC/SBC/shifts/rotations by reducing the data path by two bits to generate carry out as carry in the next CPU.
Thanks!
 
I would add the Fujitsu FM-8/7/77 series, where two identical CPUs perform different tasks: one Motorola 6809 acts as the main system CPU, while the second (identical) one operates as a graphics coprocessor, with exclusive access to VRAM, executing its own separate code from ROM and a tiny RAM.
It is interesting because the second CPU can be coerced into executing tasks other than graphics too, but it was really meant to be a graphics coprocessor.
 
Some of the Pocket Computers used a pair of 4 bit CPUs. https://www.floodgap.com/retrobits/tpm/138.html has a description of how one worked.

Nitpick: Floodgap's description is pretty vague and not really accurate. The TL;DR is that one of the chips was the "CPU" running user programs and the other was an I/O processor handling the keyboard and display. This is not an unusual architecture in and of itself, plenty of computers have multiple "CPUs" once you count I/O handlers, and doesn't count as some kind of "merged" CPU. (For instance, most computers with detatched keyboards, and plenty that don't, have a microcontroller in there handling the matrix scanning.) It seems a *little* weird to us today, maybe, to have I/O processors are the same (or nearly the same) as the "main" CPU, but in the 8 bit era this was par for the course.

For more examples of this you don't have to look any further than your typical terminal; "hardwired" serial terminals without CPUs were pretty much extinct for new designs by 1977 or so because at this point it became cheaper (and a *lot* more flexible) to drop a CPU or microcontroller onto your circuit board than it was to implement anything but the most rudimentary text handling and cursor controls with hardware state machines. Therefore probably the majority of 8-bit S100 computers had a CPU handling the display and keyboard that was of comparable power to the one in the box. (Heck, some "video cards" for S100 machines were effectively just terminals on a card eliminating the serial connection, and had their own Z80 CPU on them. Machines like the Heath/Zenith H/Z-89 have dual Z80 CPUs for this very reason; the Z-89 is just a Z80-powered Z-19 terminal with a second PCB containing the "computer" stuffed into it.)

Possibly a better example of two CPUs working in extremely tight lockstep might be the how Commodore's old IEEE disk drives (2040/4040/8050/etc) worked. These drives contained not one but *two* 6502-family CPUs (a 6502 and a 6504, I believe?) clocked 180 degrees out of phase with each other, allowing them to share a common memory buffer with no contention. One CPU ran the "DOS" and communicated with the host computer, the other was a dedicated disk controller running code to handle the actual disk mechanics, etc. These CPUs ran at the same 1mhz as the 6502 in your Commodore PET, so technically buying one of these drives tripled the theoretical power of your computer. I think it may have even been technically possible to manipulate the memory of the "DOS" processor in the drive to run arbitrary code, like people do with the C64's 1541, so in a pinch you might even be able to use one of them as a "coprocessor" for user code, although whether anyone ever actually did that or not I have no idea.

That said, though, the two CPUs in a Commodore 4040 are still doing separate "things", they're not somehow merged into a "super-6502".

There is also a smart contraption named KimKlone which adds registers to a regular 6502.

FWIW, this is kind of reminiscent to how the 8087 math coprocessor for the 8086 works. (And also the fairly rarely used 8089 I/O coprocessor.) These chips run in lockstep with the main CPU snooping instruction fetch transactions. grabbing relevant opcodes directly off the bus and, when necessary, grabbing the bus by instigating a DMA request. Obviously it's not quite the same thing because Intel specifically assigned an "escape" bit sequence to be used to prefix coprocessor opcodes (thereby allowing a software handler to respond appropriately if these opcodes came up without the coprocessor installed, as opposed to whatever undefined behavior might happen when an "illegal" opcode is thrown at a CPU that doesn't know how to trap it), but it was once upon a time a "legit" technique. Intel moved away from this idea to a "private" coprocessor connection with the 286 and later because having to duplicate all this bus interface circuitry in every coprocessor is pretty stupidly inefficent.

A subset of this "trapping" technique was sometimes used to patch errors in system ROMs, back when memory was expensive enough to actually justifying slapping a PCB with several chips into a system to salvage the existing ROM vs. just replacing it.

Extended words in CPU with only ADC/SBC/shifts/rotations by reducing the data path by two bits to generate carry out as carry in the next CPU.

... so how is that supposed to work exactly? I mean, honestly curious if this is a thing you've seen.

I would definitely say that bit-slice "CPUs" do not count here. They are, by definition, not "complete" CPUs on their own, and are explicitly designed to be used in arbitrarily ganged configurations.
 
Last edited:
Multiple chip CPUs were common enough. The two I remember were the Intel 432 and the DEC LSI-11 but I don't recall if the supporting chips would ever be working on their own.
 
Multiple chip CPUs were common enough. The two I remember were the Intel 432 and the DEC LSI-11 but I don't recall if the supporting chips would ever be working on their own.
Early versions of the Motorola 88k as well, I think. They later merged the support chip into the main CPU. I was looking briefly at them to make a homebrew but prices are silly for both chips, as well as the later revision of the CPU.
 
Multiple chip CPUs were common enough. The two I remember were the Intel 432 and the DEC LSI-11 but I don't recall if the supporting chips would ever be working on their own.

The NatSemi IMP-16 was an early example (1973) of something kind of halfway between a ”generic” bitslice like the am2900 family and a multi-chip CPU. In a normal configuration it needed 4 “RALU” 4-bit register/ALU components, roughly equivalent to the AM2901 but a little bit more “complete” (but less flexible), and a single CROM control/microcode ROM to tie them together and implement an instruction set heavily reminiscent of a Data General NOVA. (An optional second CROM implemented 16 bit multiply/divide instructions.)

Because the “slices” were intended to be basically proprietary to the set they weren’t used as tinkertoys like the AM2900 series were, but there was *very briefly* a NatSemi application note and datasheet covering an alternate CROM to let you build an “IMP-8” with two RALUs. There might have been a month or two when that looked like a good idea but the 8080 and 6800 coming out firmly drove a fistful of nails into that coffin.
 
Beware this is a weird idea!
I know that some Sun stations used two 68000 CPUs to implement virtual memory (one in advance of one instruction wrt the other).
There is also a smart contraption named KimKlone which adds registers to a regular 6502.
Are there other examples using microprocessors to implement maybe also:
- Extended range of memory addresses (one CPU provides the low addresses, the other provides the high addresses maybe to a rudimentary MMU)
- Extended words in CPU with only ADC/SBC/shifts/rotations by reducing the data path by two bits to generate carry out as carry in the next CPU.
Thanks!
Ya, some would think that weird ideal.
But they likely never work with systems that had memory management before the development of memory management chips.
Both the original Motorola MMU for the MC68000 and Zilogs MMU's for the Z8000 both had some design bugs. Which I leave out, but some one else could always leave a comment on it, if they wish.
Being that I use to refurbished Sun Microsystems for resale, I am quite familiar with there older models that where manufactured before the development of the Motorola MMU chip.
Yes the would basically use custom coding running on a second microprocessor to implement virtual memory system. It is a lot easier to implement if both microprocessors support external microcode instruction sets, but this still can be done with the MC68000 family quite simply. All the none support microprocessor instructions should be routed to a memory location that has additional coding to handle it, thro.
..
In the case of the IBM PC370 there is a different use for the secondary modified Motorola processor. (Aka! mostly an I/O processor who extensions would fit into the microcode size limitations of the first chip). As far as the KimKlone, I sorry I don't remember any think about it , or what its function was.
 
Other differences with Sun microsystems internal chip used. (while I at it).
The Motorola serial communications chips where purity limited in more than one way, so Sun Microsystems used the Zilog SCC instead.
 
I would add the Fujitsu FM-8/7/77 series, where two identical CPUs perform different tasks: one Motorola 6809 acts as the main system CPU, while the second (identical) one operates as a graphics coprocessor, with exclusive access to VRAM, executing its own separate code from ROM and a tiny RAM.
It is interesting because the second CPU can be coerced into executing tasks other than graphics too, but it was really meant to be a graphics coprocessor.
Cool I remember them, I wonder if some reading has the OS9 disk for them yet. (Sorry its not Mac os9 in this case). But I don't have a Fujitsu 6809 based system for that anyways.
I just want to see if it generates any comments or not.
 
Beware this is a weird idea!
I know that some Sun stations used two 68000 CPUs to implement virtual memory (one in advance of one instruction wrt the other).
There is also a smart contraption named KimKlone which adds registers to a regular 6502.
Are there other examples using microprocessors to implement maybe also:
- Extended range of memory addresses (one CPU provides the low addresses, the other provides the high addresses maybe to a rudimentary MMU)
- Extended words in CPU with only ADC/SBC/shifts/rotations by reducing the data path by two bits to generate carry out as carry in the next CPU.
Thanks!
The Signetics TWIN development system is a minicomputer containing at least two CPUs: a main processor (the Signetics 2650) and a secondary processor which can be another 2650 or any other contemporary 8-bit microprocessor. The operating system and debug hardware allow for interaction between the two faces of the computer, for hardware debugging purposes. It is even possible to install multiple secondary CPUs.
 
Back
Top