[Simh] Multiple Processors
Bill Beech (NJ7P)
nj7p at nj7p.org
Tue Apr 5 11:40:08 EDT 2011
All,
Very good discussion. I will look at MESS.
I think Holger hit the nail on the head. I can emulate functionality at
the multibus interface and use the SIMH queue to do the work much as the
AltairZ80 did at the S-100 interface. Threads would possibly break the
portability of SIMH and I don't want to do that.
Back to think on this problem while I get the 8088/8086/8188/80186/80286
processor emulation completed and validated.
Bill
On 04/05/2011 05:00 AM, Holger Veit wrote:
> Am 04.04.2011 23:53, schrieb Rob Jarratt:
>> Threads in SIMH would be great for emulating many devices too. I
>> suspect the
>> reason they are not there and that it is polled is portability. I
>> have never
>> looked into seeing if there is a way to get threads on all the supported
>> platforms, but if anyone else has then it would be interesting to
>> hear about
>> it.
>>
>> Regards
>>
>> Rob
>>> On 04/04/11 5:10 PM, Bill Beech (NJ7P) wrote:
>>>> All,
>>>>
>>>> I am in the process of writing an emulator for the Intel 310 system.
>>>> I would like to know if anyone has figured a way to emulate multiple
>>>> processors in one emulation? The Intel 310 used the following
>>>> processors simultaneously:
>>>>
>>>> Master CPU 80286
>>>> Serial Board Slave 80188
>>>> Ethernet Slave 80188
>>>> Tape Drive Slave 8089
>>>> Hard Disk Slave 8089
>>>>
>>>> Any thoughts?
>
> You don't need threading in simh, because it already implements sort
> of threads by
> implementing an event queue to process I/O events. Threads are just a
> light-weight
> word for "scheduling in a single executable". Simh is thus very
> similar to an operating system
> (as any simulator is, in principle).
>
> What you need for multiprocessors is splitting the sim_instr()
> function into independent
> handlers for each CPU. When done correctly, it will also allow
> multiple instances of
> the same CPU in a single simulator.
>
> Admittedly, doing this is much simpler with real OO concepts, where
> you just instantiate
> one or more CPU classes and then, in a loop call their "sim_instr"
> methods sucessively
> for a single CPU instruction and increment simulator time accordingly.
>
> Besides, many simulators have "intelligent" I/O gear; you should
> carefully analyze whether
> the tape and disk slave subsystems actually need to be emulated
> precisely, or just at their
> I/O border to the main CPU. See the Altair simulator in simh, for
> instance: the built-in floppy disk
> controller, including a DMA controller, might have been simulated
> precisely as if it were an independent
> machine, but actually, it is sufficient to pass it certain
> read/write/format/seek commands in
> special registers, and then, after some time passed, it will magically
> transfer data from an emulated
> disk file directly to the emulated main memory of the Altair machine,
> and throws a "command done"
> interrupt.
>
More information about the Simh
mailing list