# What early home computers have more than one CPU, where both could be used by the programmer? [closed]

I am interested to know if any computers that are on-topic for this site had more than one CPU, where this plurality could be leveraged by a programmer.

Some cases I don't so much care about:

• The Amigas could add a faster processor, but doing so disabled the onboard CPU so that we couldn't multitask on an Amiga.
• The C128 had both a 6510 and a Z80, but these could not be run at the the same time, so a programmer had to pick one to use and leave the other.

Did any early home computers have several CPUs so that a programmer could use both?

## closed as too broad by JAL, Mark, Nick Westgate, user12, wizzwizz4♦Jan 27 '17 at 19:25

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

• Not exactly home computers, but e.g. the CBM 4040 disk drives had both a 6502 and a 6504 which ran at the same time. They were both free programable by the host computer. – Janka Jan 21 '17 at 13:47
• Similarly, the Apple LaserWriter had could be programmed in PostScript, and have the results returned over the serial connection. It was of comparable power to the computers it was attached to. – scruss Jan 21 '17 at 16:55
• @scruss If you want to include "intelligent peripherals" even the Commodore C64 in combination with its disk drive 1541 (that could execute custom code) would qualify. – tofro Jan 21 '17 at 17:23
• If you want to restrict the question to early home computers (which would exclude e.g. a PDP-11), it might be better to use that term instead of "retro computers" in the title. Also, a lot of the more beefier early computers/mainframes/supercomputers have several CPUs (often used to control peripherie), so it might be a good idea to make the scope of the question clearer. – dirkt Jan 21 '17 at 19:47
• Just what counts as a "CPU" for you? For example, I'd personally hesitate to apply the term to the Amiga Copper, but it is a programmable processor that runs synchronously with the main CPU. More to the point, if one ignored the topicality requirement, would the programmable GPUs found in modern PCs count? – Ilmari Karonen Jan 22 '17 at 7:42

The BBC micro family (6502 processor) had a tube interface which permitted Z80, 6502, or 80186 coprocessors (possibly others). See e.g. here.

Each of these consists of a 'cheese wedge' with a board in with its own CPU and RAM. Both processors thus can run simultaneously (though that wasn't the normal intention which is why some of the links describe the coprocessor as 'running the user's program'), and indeed do when e.g. accessing disks etc.

• Key quote from one of your links, though: “The BBC's processor no longer controls the user programme …” so the second processor relegated the main processor to IO duties only. – scruss Jan 21 '17 at 22:30
• From personal experience, that isn't really correct. You can run both processors at once (they have their own separate RAM for instance), but the OS doesn't really help you do so. – abligh Jan 21 '17 at 22:35
• The idea was also continued onto Acorn's later designs - eg en.wikipedia.org/wiki/RiscPC which featured a slot for an 80486 processor to allow you to run Windows alongside RiscOS, apparently multitasked together. – Periata Breatta Jan 23 '17 at 11:23
• The BBC was probably the earliest "Home" computer to offer two processors to the user. I beleive the enhanced version of Elite used both processors to split its workload. – Ben Hillier Jan 25 '17 at 9:50
• @BenHillier indeed it did, to achieve a higher frame rate. Thanks for the reminder. – abligh Jan 25 '17 at 10:21

## User-programmable computers

The Commodore 64 has two 6502-family CPUs. There's a 6510 on the main logic board, and there's another CPU in the 1541 disk drive. The KERNAL on the host treated the 1541 as what is now called network attached storage (NAS), sending file access commands to CBM DOS in the 1541's ROM. Because the transfer protocol in CBM DOS was so slow, many C64 users sent a "fast loader" patch to the 1541's RAM in order to make data transfer faster. The demoscene eventually figured out how to run an interrupt-driven custom DOS in the background to stream data off the disk while animation continued on the host.

## Fourth-generation game consoles

The Super Nintendo Entertainment System (called Super Famicom in East Asia) has two 6502-family CPUs. One is a second-source 3.6 MHz 65816 core licensed from WDC, combined with a DMA controller in the 5A22. The other is a 1 MHz Sony SPC700, which behaves as a 65C02 with reshuffled opcode numbers. Games run game logic on the 65816 and the sound engine on the SPC700. Some Game Paks include a third processor: either an NEC uPD77C25 DSP, a Capcom CX4 (Hitachi HG51B169) DSP, an Argonaut Super FX Graphics Support Unit (GSU), an SA1 (a 10.5 MHz 65816-based coprocessor), or even the entire Game Boy system-on-chip. (Source: "SNES Cartridges" in Fullsnes)

The Sega Mega Drive (called Genesis in North America) and Neo Geo AES have a similar setup, with a 68000 to run the game and a Z80 to run audio. The Sega CD and 32X peripherals add additional CPUs, and the game Virtua Racing contains an additional "SVP" CPU, analogous to the GSU.

• The SNES apparently had co-processors and DSPs in the carts on a fairly regular basis, custom addon hardware like that is one of the benefits of a cart based system over a disc one. The Mega Drive didn't have it utilised nearly as much, Virtua Racing being about the best example of it. – Kaithar Jan 22 '17 at 5:53
• @Kaithar Do you have a link to any articles about the snes cart co-processors. I'd be interested to read more! :) – Colin Jan 23 '17 at 14:36
• Since you could run multiple 1541 drives to one C64, how many possible 6502 CPUs could you run in parallel? Interesting. – PhasedOut Jan 23 '17 at 15:44
• Not every C64 had a 1541, particularly in countries where disk drives had high import duties like the UK. – scruss Jan 23 '17 at 16:30
• While interesting that you could treat a C64 and its connected 1541s as a primitive cluster, I don't think it counts a a single computer with several CPUs. – chepner Jan 23 '17 at 17:53

The spectacularly rare Atari Transputer Workstation from 1989 supported up to 13 parallel processing Transputer CPUs. Multiple processors communicated with one another, and allowed sharing of suitable processing tasks. Other computer manufacturers considered Transputers at the time; I know of one card developed for Macintosh.

Around the same time, linear processing array cards such as the NEC IMAP-VISION used multiple DSP-like cores to speed up tasks like edge detection in video streams. While this was not a general-purpose CPU, it did offload a large amount of computation that the CPUs of the time couldn't handle. Going too far down this route would allow maths coprocessors and DMA IO controllers to be considered as second processors, though.

I'm not sure I'd consider the BBC Micro's expansion unit as a true second processor, even if there were then-powerful CPUs such as NS 320xx and ARM 1 that used it. A little like the C128 and the CP/M card for Apple II, the expansion unit relegated the main processor to simple IO tasks.

• The original Atari 400 & 800 had a simple, programmable graphics chip, separate from the 6502, whose name escapes me at the moment. I remember you could create new graphics modes by reprogramming it. – kbelder Jan 23 '17 at 20:04
• @kbelder - AlphaNumeric Television Interface Controller (ANTIC). – Hannover Fist Jan 23 '17 at 21:27
• As discussed elsewhere, Acorn's OS decided to relegate the main processor to simple IO tasks by default but the hardware enforced no such restriction. A developer was free to do whatever they wanted with each. – Tommy Nov 17 '17 at 19:52

The Soviet PDP-11-compatible educational desktop computer UKNC, released in 1987, for example.

One unique part of the design is the usage of a peripheral processing unit (PPU). PPU unloaded the CPU, taking responsibility for the management of peripheral devices (display, audio and so on), but could run any user programs, as well as CPU.

The Commodore Super-PET had both a 6809 and a 6502.

The 6809 was used to access the Waterloo programming environment with an editor and compilers for several languages.

The 6502 accessed a non-standard variant of the PET.

Both sides had access to 64K of additional RAM. A toggle switch on the side of the unit selected which processor was active.

• Does that mean only one CPU can be active at the same time? Doesn't the question specifically mention CPUs that could be active at the same time, and so be used by the programmer? – dirkt Jan 21 '17 at 19:48
• I'm pretty sure that the 6809 used the 6502 as a sort of I/O processor handling the keyboard, screen, IEEE-488 bus etc. I don't recall if you could add custom code to the 6502 workload though. – Peter Camilleri Jan 21 '17 at 19:52

The DEC Rainbow had two processors, one for 8 bit programs and the other for 16 bit programs. I have one of these in my basement, and I think it still works!

https://en.m.wikipedia.org/wiki/Rainbow_100

• I never used more than one at a time. But the documentation says that when you were running MS-DOS or CP/M-86 in the 8086, the Z80 was used as a floppy controller. So the system software was making use of both processors. – Walter Mitty Jan 23 '17 at 12:20
• One might want to investigate the Olivetti M20 too ... but then, is it not more of a business computer, just as the DEC Rainbow? – rackandboneman Apr 14 '18 at 21:13

One more for the Amiga. If you had a bridgeboard installed (a PC-on-a-card), you could theoretically leverage an x86 processor to work alongside the 680x0. Out of the box, you more-or-less saw this straight from Commodore:

• Janus's AREAD and AWRITE commands were normally used to copy files across the PC/Amiga divide. Though fixed function, it did run code on both sides to achieve this.
• If you didn't have a VGA card installed in one of the ISA slots, the Amiga would emulate a MDA/CGA display adapter in the 680x0 environment.
• If you didn't have a hard drive installed in an ISA slot, you could have a hardfile or partition daemon running in 680x0-land to provide a hard drive to the PC.

How it did this is that there was 64KB of dual-ported RAM available to both the PC and Amiga. Documentation for how this worked was available at the time and thus I can recall at least one example where someone took advantage of this; drive a cheap ISA PC NE2000 network interface for use by the Amiga. At the time, network adapters for the Amiga were expensive so this was a cheap way of getting Ethernet on the Amiga.

So theoretically one could write a daemon of some sort on the PC side and control it from the Amiga; send a rendering file, do some automated activity, do some processing in the background, whatever. There was a mention on the newsgroups back in the day that someone was looking to build something like this but I don't recall ever seeing the result. I personally did a few experiments back in the day but never went anywhere with it.

The Atari Falcon had both a 68030 CPU and a 56001 DSP that could work and be programmed independently of each other.

If you count FPUs as some sort of "CPU": you could add an optional 68882, so it even had 3 powerful chips.

• though the DSP wasn't exactly a general purpose processor: it couldn't handle all OS tasks. – scruss Jan 21 '17 at 17:44
• The FPU doesn't count as an extra CPU; it relies entirely on instructions delegated to it by the main CPU (specifically, all those in the 0xFxxx range of opcodes, known as "F-Line"). The DSP is valid though. – Chromatix Apr 12 '18 at 20:21

Some not so vintage, but still 90's computers:

1. Apple PowerMac 6100/66 with a DOS card. It was either a 486 or Pentium CPU with 8 MB of RAM. You could switch between Macintosh & Windows by hitting Cmd+Return.
2. Apple Macintosh LC III with an Apple IIe card. The IIe expansion card provided a 65C02 CPU and 256KB of RAM, just like a real Apple IIe. You could open a program to boot into ProDOS and even hook up 5.25" floppy drives
3. Lots of add on cards to Macs (Sonnet, Newer Tech) that plugged into a slot. You would load an extension at boot and offload the heavy lifting to that CPU instead of on the mainboard.
4. The Apple Power Macintosh 9500/180MP, based on the Tsunami architecture, featured dual 180 MHz PowerPC 604e processors, 16 MB or 32 MB of RAM, a 2.0 GB hard drive, an 8X CD-ROM drive, and a 2 MB ATI video card in a very expandable tower case design with twelve RAM slots and six PCI slots.
• I wouldn't really count #3 as "more than one CPU". The presence of the expansion card disabled the CPU on the main board; they didn't work in parallel. Unless maybe you're thinking of the Radius Rocket? – Cody Gray Jan 22 '17 at 7:55

The NeXT computer (1988) had a second CPU, a Motorola 56001.

There were a number of Macintosh models with the 'AV' suffix that sported a Motorola 56000 digital signal processing second processor. Some that I recall were Quadra 660AV, Power Macintosh 6100/60AV, 7100/66AV, 8100/100AV.

These may have been used for sound processing, but aside from minor applications (software 56k modem, using the Geoport as phoneline interface) they didn't get a lot of interest.

• I wouldn't really call the NeXT a "home computer", given that it cost a third of an average person's annual salary... definitely in the realms of "professional workstation", I fear. – Periata Breatta Jan 23 '17 at 11:13
• I had a Quadra 660AV that had the DSP Chip - one feature that the DSP added was allowing windows to become transparent when you moved them. – PhasedOut Jan 23 '17 at 15:46
• Really, @phasedout? Where do you configure that "transparent windows" feature? I have a Quadra 840AV (which has a similar AT&T DSP chip), but have never seen this before nor any mention of it online, including 68k Mac enthusiast forums. – Cody Gray Jan 23 '17 at 18:20
• @CodyGray - I distinctly remember this from somewhere when i researched the 660AV I acquired at a garage sale before selling it - I will try to dig out the source, even if it means digging out my old G4 the research was done on. – PhasedOut Jan 24 '17 at 14:06
• @Cody Cray - I think this is where I learned of that concept, and after seeing that, I found something explaining that it was a function the DSP chip enabled. ( lowendmac.com/2001/treasure-your-quadra-840av ) and that led to finding some DSP 3210 chip tools here (toddp.com/classic/Software%20Install/Apple%20Source%20Code/… ) – PhasedOut Jan 24 '17 at 14:29

Ohio Scientific offered a switchable 3 CPU system in 1978, the Challenger-3 (6502, 6800, and Z80). I remember reading the description, or perhaps an advert, in a back issue of Byte(?) magazine and wondering if any of them was ever put into useful service.

On some versions, the CPU could be switched under software control, though it seems like the CPUs could not be enabled simultaneously, since the busses were shared.

I don't know if it's "vintage" enough, but

8087, 80287, 80387, 80386, and of course the 80486 had a math co-processor that you could "directly" access. You could use it for for math operations of course, but you could also access a "stack" that could be pushed, popped, and indexed of a sort.

Most applications that even used the co-processor would do so using the x87 instructions (do math on the co-processor), but you could access it directly by assembly.

Other then an academic excersize I don't know any program that would use the co-processor other then for math operations, but it could do it.

Some info can be found here http://wiretap.area.com/Gopher/Library/Techdoc/Cpu/coproc.txt

• I don't believe the x87 coprocessor exactly qualifies as a CPU. From what I recall, the x86 would stall while the x87 does its work, so not exactly parallel. While that sounds bad, keep in mind that the x87 was much faster at doing the math operations than the x86 would resulting in a net speed increase. Today, the x87 is integrated standard with the x86 CPU and has been since the original Pentium. – bjb Jan 24 '17 at 20:35
• I consider it kind of a gray area. And the x87 didn't stall the main CPU, you would send instructions starting with 11011 and the co-processor would execute them, otherwise the main processor would execute. They could actually run two instructions at the same time. Again, the x87 could do full CPU tasks, it had a stack, and could do logical operations, you could in theory send one instruction to the main cpu and one to the co-processor. But, it was rarely ever used that way. Computers and programmers just didn't think that way back then. So instead it was mainly used to process math while... – coteyr Jan 24 '17 at 20:48
• the main CPU WAITed it out. – coteyr Jan 24 '17 at 20:48
• Actually, @bjb, the original 8087 was a true co-processor, executing in parallel with the main CPU. The 8088 and 8086 did not stall while the 8087 coprocessor was doing floating-point arithmetic. But this created a serious problem if there was bus contention, and since there were no real synchronization mechanisms, programmers as a matter of habit (and indeed assemblers themselves!) inserted WAIT instructions after each FPU instruction, which is what stalled the main CPU. This design flaw/feature was removed with the 80286 and later, meaning the FPU could no longer run concurrently. – Cody Gray Jan 25 '17 at 12:15
• The relevant optimization advice from Zen of Assembly Language is here in an online copy of the book—see the last paragraph in the linked section. Scattered throughout the book is information on "cycle eaters" (Abrash's term) that make precise, predictive cycle counting essentially impossible. – Cody Gray Jan 25 '17 at 17:54