Page 2 of 5

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 1:33 pm
by plasmo
Aloha6502 wrote:
Hi. Has anyone ever designed a multiprocessor system using only the 6502 as the computing device for everything? That is, one 6502 dedicated to sound, one for video, one for running the main program, one for handling I/O, etc?
cluster of 6502 to handle disk, serial, I/O, keyboard, and video with serial or dual port memory as interprocessor communication should be quite do-able. The biggest challenge may be a decent performing (VGA or better) video. If you keep the video 6502 circuit simple, it is reasonable to overclock 65c02 to 25.175mhz to drive video output directly. Such video 6502 also has enough throughput left to receive serial data at 230400 baud. viewtopic.php?f=4&t=6517
Bill

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 3:37 pm
by Aloha6502
BigEd wrote:
A VIA is a ready made way to have a couple of byte-wide ports with handshaking. But two other approaches spring to mind: simple octal TTL devices for simple byte-wide ports on the one hand, and FIFOs on the other.

Coordinating the tasks of the various subsystems needs to be right - you could lose a lot of time debugging that. It's much easier if the flow of data is unidirectional. For example, if the keyboard CPU only produces keystrokes (and doesn't need to be told to light LEDs), and if the graphics CPU only produces video (and is not queried for what's in the buffer or where the cursor is.)
Ok great. Thanks for highlighting the importance of unidirectional flow. I had thought about something similar too, just delegate the task to the subsystem, but didn't realize asking for feedback (say, to confirm the command finished) would incur much more complexity.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 7:48 pm
by GARTHWILSON
BigDumbDinosaur wrote:
GARTHWILSON wrote:
I expect that the easier hardware solution would be to have the various computers connected only loosely through I/O, probably by synchronous-serial links, not trying to access the same bus and same memory. You would not need special clocking, or DMA, or dual-port RAM, or complicated bus management. Then you could have a mesh with each processor communicating with several around it.
Synchronous-serial would probably be too slow for I/O and video. A synchronous parallel bus arrangement using some VIAs might be more effective. Eight bits would be employed to pass data between MPUs, some bits would be used for clocking and some other bits could be used for selecting the slave MPU that is to respond and to indicate the transfer direction.
The VIA's SR allows shifting up to one bit every other phase-2 cycle, meaning 8Mb or 1MB per second at 16MHz; so although it's not as fast as a parallel interface running on DMA, it is approximately as fast as the processor can fetch it from an array in memory and feed it to the VIA in a loop, even without handshaking. The receiving end, if it is running at the same phase-2 speed, would need to be in a loop, not using an interrupt for each byte.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 8:20 pm
by Aloha6502
So I read in the other thread it's possible to run the 65C02 at 25.175MHz?

Is this pretty "de facto standard" or only a few lucky chips? Officially I was told WDC rates the 65c02 at 14 MHz max.

What about the supporting RAM and ROM chips? And glue logic?

I haven't come across any newbie instructions (category of this sub-forum :) ) that use that high of a clock speed to give examples, so my concern is whether these chips (usually are obsolete by today's standards and bought/used by vintage hobbyists like us) won't burn up at that speed?

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 8:49 pm
by GARTHWILSON
Aloha6502, 14MHz is a conservative guarantee that the processor can run and meet the timing margins across the whole temperature range at at least that speed.  Forum member Windfall has a 65816 running at 24MHz at 3.3V.  It's only guaranteed for 8MHz at 3.3V, so he's getting three times the guaranteed speed.  It makes me wonder what it could do at 5V!  [Edit, later:  Forum member "Plasmo" got one running at 40MHz @ 5.3V.]  WDC's data sheets have had tons of problems; but fortunately the reality is almost always a lot better than the data sheets let on, and the only way to find out what they can really do is test it ourselves.

In an online interview I saw, Bill Mensch said that even in the 1970's, to label a 6502 for a given speed, it had to work at twice that speed in their manual tester; so for example for a part to be labeled 1MHz, it had to run at 2MHz in the tester, and to be labeled 2MHz it had to run at 4MHz in the tester, etc.; so if one did fine up to 3.9MHz but started having problems at 4MHz, it could be labeled for 1MHz but not 2MHz.  He said they had ones running at 10MHz even in the 1970's.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 9:19 pm
by BigDumbDinosaur
Aloha6502 wrote:
So I read in the other thread it's possible to run the 65C02 at 25.175MHz?

Is this pretty "de facto standard" or only a few lucky chips? Officially I was told WDC rates the 65c02 at 14 MHz max.

As Garth noted, WDC microprocessors can be overclocked well beyond the official 14 MHz rating. In the WDC data sheet for the 65C02, there is a graph that relates clock speed and supply voltage for production devices. Extrapolating that graph to 5.5 volts, which is within the design limits of the 65C02, suggests 25 MHz performance is attainable. As an aside, production devices must pass testing at 20 MHz, which implies that 20 MHz performance can be relied upon.

Quote:
What about the supporting RAM and ROM chips? And glue logic?

74AC and 74AHC glue logic has, in most cases, single-digit nanosecond prop time on five volts. A well-designed circuit using those devices should have no trouble keeping up with a 65C02 running at 20+ MHz.

SRAM is available in 10ns, which is more than fast enough for 20 MHz operation without wait-states. ROM is another matter. At 20 MHz and using a typical 70ns EPROM (fastest currently available from most distributor stock), two wait-states per ROM access would be required to avoid timing violations.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 11:11 pm
by Aloha6502
As Spock would say, FASCINATING!

Thanks for all the undocumented tips guys!

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 11:13 pm
by Aloha6502
BigDumbDinosaur wrote:
SRAM is available in 10ns, which is more than fast enough for 20 MHz operation without wait-states. ROM is another matter. At 20 MHz and using a typical 70ns EPROM (fastest currently available from most distributor stock), two wait-states per ROM access would be required to avoid timing violations.
So, maybe there can be a startup routine to copy certain parts of ROM into RAM and then run only from RAM addresses from that point on.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Thu May 06, 2021 11:54 pm
by plasmo
Aloha6502 wrote:
So I read in the other thread it's possible to run the 65C02 at 25.175MHz?

Is this pretty "de facto standard" or only a few lucky chips? Officially I was told WDC rates the 65c02 at 14 MHz max.
My experience with overclocking W65C02 is based on one lot of 10 new W65C02 from Mouser. The same lot of parts are used across 4 SBC designs with different top speed depending on the designs. 24Mhz is the slowest for the more complex design to 29.5mhz for the simplest design. 65C02 may not be the limiting part in maximum clock; it could be other parts and even physical wiring. Different lot of parts and different designs will have different top speed. Video 6502 is closely related to CRC65 (viewtopic.php?f=6&t=6440) which is a simple design good to 29.5mhz, 7 out of 7 tries.
Bill

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Fri May 07, 2021 12:00 am
by plasmo
Aloha6502 wrote:
BigDumbDinosaur wrote:
SRAM is available in 10ns, which is more than fast enough for 20 MHz operation without wait-states. ROM is another matter. At 20 MHz and using a typical 70ns EPROM (fastest currently available from most distributor stock), two wait-states per ROM access would be required to avoid timing violations.
So, maybe there can be a startup routine to copy certain parts of ROM into RAM and then run only from RAM addresses from that point on.
My recent design approach uses a small (32-64 bytes) ROM in CPLD which has 10-15ns access time and copies a bootstrap program resided in the CF disk to RAM and executes in RAM.
Bill

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Fri May 07, 2021 5:07 am
by BigDumbDinosaur
Aloha6502 wrote:
So, maybe there can be a startup routine to copy certain parts of ROM into RAM and then run only from RAM addresses from that point on.

Yep! History repeating itself over and over. :D

What you are referring to is "ROM shadowing," a technique that goes back to the 1970s. In the old days, x86 machines could be configured to shadow not only the BIOS ROM, but the video ROM. Disabling shadowing would drastically slow down any software that accessed the BIOS API due to the wait-stating that occurred. Ditto for accesses to the video ROM. It especially became noticeable as clock speeds went into the double digits.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Fri May 07, 2021 6:50 am
by Aloha6502
BigDumbDinosaur wrote:
Aloha6502 wrote:
So, maybe there can be a startup routine to copy certain parts of ROM into RAM and then run only from RAM addresses from that point on.

Yep! History repeating itself over and over. :D

What you are referring to is "ROM shadowing," a technique that goes back to the 1970s. In the old days, x86 machines could be configured to shadow not only the BIOS ROM, but the video ROM. Disabling shadowing would drastically slow down any software that accessed the BIOS API due to the wait-stating that occurred. Ditto for accesses to the video ROM. It especially became noticeable as clock speeds went into the double digits.
Is this what all the "Zero Wait State" marketing was about in the 1980s?

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Fri May 07, 2021 1:19 pm
by Dr Jefyll
Aloha6502 wrote:
Hi. Has anyone ever designed a multiprocessor system using only the 6502 as the computing device for everything? That is, one 6502 dedicated to sound, one for video, one for running the main program, one for handling I/O, etc? [...] And by the way, just to clarify, when I mention sound and video, I don't mean anything fancy. Just for human interface needs. [...] That is to say, the multiprocessing is not for speed. It is for replacing ASIC dependency. It also has an educational value (at least to me) to do all the stuff using 6502 assembly language and pushing the experimentation of hardware signal timings down to individual cycles.
Aloha, on Anycpu.org I posted regarding a dual-processor 6809 system, and the same ideas could easily transfer to a 6502 multiprocessor system.

Inter-processor communication couldn't be easier, as the two CPU's share access to main memory. And, in support of video, one of the processor sometimes functions as a DMA controller (avoiding the need for a dedicated chip), which also seems in line with your goals. Good news! If you adopt this approach I guarantee you will get some experience dealing with "hardware signal timings down to individual cycles." :lol:

Nowadays it makes more sense to use SRAM (not DRAM). A single SRAM chip would be sufficient. Its address inputs could be fed by a multiplexer that accepts addresses from the two 6502's. (Or you could have more than two, but that might be rather challenging.)

Another option (instead of a multiplexer) is to tie the two CPU address buses directly to each other (and to memory), and to drive the CPU Bus Enable inputs so that only only one CPU will output at a time, with the other CPU's address bus high impedance or "floating" until it gets its turn.

Besides eliminating the multiplexer, this approach also offers a potential mechanical advantage. If you wanted, you could save time and space by soldering one CPU directly on top of the other! :shock: Almost all the pins will connect together anyway, and the few that don't can be managed fairly easily by bending those pins outward on the upper CPU and adding individual flying leads in those cases.

(I seem to recall this "piggyback CPU" idea being mentioned elsewhere on this forum.)

-- Jeff

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Fri May 07, 2021 1:59 pm
by BigEd
Hmm. I've just had a thought. Because the 6502 (and 6800 and 6809, perhaps) only needs active use of the bus for one half of the cycle, it's a common idea, often enough implemented, to have two CPUs sharing the same memory bus. So far so good.

So, if we had a chain of CPUs, each separated by a shared memory, the same odd/even timing could be used. The CPUs at the ends of the chain have only one memory, but it's still shared by the adjacent one. All the others have two memories, one to the left and the other to the right. Any mailboxes or semaphores or data buffers would of course be in the appropriate shared memory depending on which direction the relevant resource is to be found.

One might imagine the keyboard and disk drives at one end, and the video and sound at the other end, with application processing done in the middle, but it needn't be that way.

If the resource isn't directly attached, there would need to be store and forward. For sound, that might be too much latency (or jitter) but for keyboard or serial devices it might be fine.

And now I realise that a chequerboard has the same property: a 'white' CPU operating on one phase shares memory with 2, 3 or 4 neighbours all on the other phase.

We do need some isolation - bidirectional tristate buffers perhaps - but they are available in TTL. Previous sketches used dual port RAM, and we're able to avoid that.

I'd still guess that the major difficulty with this whole area of ideas lies not with the hardware, but with the software. Relatively sophisticated techniques and reasonably good discipline will be needed, or the thing will lock up, or drop or duplicate data.

Re: A multiprocessor system with mainly just the 6502 (?)

Posted: Fri May 07, 2021 5:33 pm
by Aloha6502
Dr Jefyll wrote:
Besides eliminating the multiplexer, this approach also offers a potential mechanical advantage. If you wanted, you could save time and space by soldering one CPU directly on top of the other! :shock: Almost all the pins will connect together anyway, and the few that don't can be managed fairly easily by bending those pins outward on the upper CPU and adding individual flying leads in those cases.

(I seem to recall this "piggyback CPU" idea being mentioned elsewhere on this forum.)

-- Jeff
This is very interesting, and I have come across it in some other places (for example, on one website discussing modifications to the HP-48 calculator by piggybacking RAM chips). However, in that case, the clock speed is trivial. In this case, I wonder if there will be heat problems?