Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Christian Gauger-Cosgrove
On 17 March 2015 at 23:01, Mark Pizzolato - Info Comm m...@infocomm.com wrote:
 Well, the intention of my suggestion was not to actually execute PIREX code 
 in a PDP11 simulator, but to merely have the DR15 device implement the 
 protocol (and the resulting behaviors) that the slave PDP11 system executed 
 while running PIREX (that is what the RQDX3 simulator does when it implements 
 MSCP).

I'll say it's a good idea in theory, and great for just getting some
semblance of the UC15 subsystem off the ground. But it creates
software compatibility issues at best; and could cause
complacency/stagnation of a correct implementation at worst.


 As Christian points out, the discussion in github issue 
 (https://github.com/simh/simh/issues/96) covers this concept as mentioned by 
 both Christian and Bob.  I never read the detail of that issue since PDP-15 
 was way beyond/before my time and experience and the discussion seemed to 
 have a good flow of its own (by most of the same folks involved in this one 
 now).

Just for those who don't want to read through the whole, rather long,
discussion on GitHub, I'll summarize a few points regarding different
ways of implementing just the UNICHANNEL-15:

There's three ways, I see, of implementing it:
1. The Emulated solution Mark suggested: Emulating the functions of
PIREX, and SPOL11 (we can't forget the spooler).
-- Most user friendly of the ways of doing things, as the simulator
would be pretty much the same as before and operate as it did
normally; would probably resemble the current setup of the MASSBUS
disk/tape and MASSBUS controllers on the PDP-11 simulator (device UC
is the DR15 that is the Magical Device of PIREX and SPOL11Ⓡ; devices
RK and LP11 are the RK05s and LP11 lineprinter).
-- Probably going to be absolute hell to program. I mean, worse than
trying to fit a stripped '11 simulator into the '15 simulator; you'll
have to emulate the functions of both PIREX and SPOL11, and track
their states during runtime.
-- Not fully compatible with the software (can't load and run custom
MACRO-11 programs from the PDP-15 end of things).

2. The Direct solution that Sergey suggested (and Bob discussed in
the first e-mail): Cramming both emulators into one package.
-- See what Bob said, regarding having to get the code to work.
-- Still relatively user friendly; would probably need to add some
fun extra boot routines: A cold start boot that brings up PIREX on
the '11 and then boots the '15, a '15 only warm start, and an '11 only
reload (for when PIREX/SPOL11/your-custom-application crashes it).
-- Making the changes to the pdp11_cpu file to make it work will
probably cause Much Fun™ with the standalone PDP-11 simulator; though
you could also just for the CPU file, and strip it down to just being
an 11/05 in function while making the needed variable name changes.
-- Actually running this configuration will either mean making SIMH
multithreaded (please do, I'd like to see SIMH get the ability to dink
around the sim console as long as one pleases, without stopping the
emulated CPU processing; just as the Hercules emulator does), or
timeslicing/timesharing the execution (like the FPPs on the '8 and '15
work, if I presume correctly).
3. The Indirect solution that Johnny brought up (and which I
personally think is the best one).
-- Not as simple for the user to setup; then again the setup probably
wouldn't be more complex than needed for HP2000 ACCESS on the HP21xx
simulator.
-- Greatest benefit to the SIMH project as a whole.
-- Could be fun in terms of implementation in a way that keeps the
cross-platform compatibility.


Before, I used to be a proponent of the Direct approach, but I've
been swayed to seeing the Indirect approach as the better option.

I'm thinking that, to do the Indirect approach in the way that best
allows for future interesting simulator escapades, that the memory
sharing server be implemented on the PDP-11 and be made relatively
generic. That is, it can share memory between another '11 simulator, a
'15 simulator, and a theoretical future KL10 simulator. Meanwhile,
there is a non-generic UC15 device, that connects to a similar UC15
device on the PDP-15, which operates as the UNICHANNEL configuration
of DR11s and DR15. In the future a KL10 device, and IIST devices
could be implemented, which would be the equivalent of the PDP-11 half
of the KL10 front end interface, and the IIST of the PDP-11/74 (the
IIST would also probably have to be implemented so that one server
setup could connect up to three client IIST devices).

I only foresee major problems with the above plan in both implementing
the shared memory service in a generic manner, and the possibility
of users doing insane things. Like hanging a PDP-15 off of a quad-CPU
11/74. (For SCIENCE! that must be done at one point. And equally,
abusing PIREX and RSX-11/M+ to make that setup actually usable...)
Also, the 11/74 and KL10 FE do some other interesting things that
need be addressed as well.



Just 

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Christian Gauger-Cosgrove
On 18 March 2015 at 00:03, Sergey Oboguev obog...@yahoo.com wrote:
 To clarify: I certainly did not suggest nor advocate it.

True enough. Bob brought it up way back at the start of the thread.
And he brought up the Indirect approach as well. You certainly did
bring create an excellent posting on the pros and cons of the Direct
approach. (Far better than I could explain anything...)

Cheers,
Christian
-- 
Christian M. Gauger-Cosgrove
STCKON08DS0
Contact information available upon request.
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Sergey Oboguev
 From: E. Groenenberg qua...@xs4all.nl

 Any current  reasonably seasoned Unix or derivative has shmat()  shmdt()
 (or equivalent) calls for attaching  detaching a segment of a given size.

 Also MS$ has this
 [...]
 so a common API for SIMH would be fairly easy.

[ ...]

 With this feature, it would probably also easy to realize a PDP-11/74
 with 4 instances of SIMH.

Mapping shared memory segment into the address spaces of multiple SIMH
instances is the straightforward part.

More intricate parts are:

1) Mapping guest memory-consistency model to host memory-consistency model.

Does legacy software expect to observe updates to the shared memory executed
by simulated VCPU1 (or virtual IO processor) to become observable by VCPU2
in the same order they were executed by VCPU1? If yes, this would not work
(without special handling by the simulator) on modern machines with weaker
memory-consistency model.

What is the cache coherency protocol of the simulated system and how does it
map to the host system?

Does simulated system have any system events (such as inter-processor
interrupts or IO completion) that affect cache synchronization between VCPUs
or VCPUs/VIOPs, and if yes, how this is to be mapped to the simulator?

Ultimately it all depends on exact actual synchronization patterns utilized
by legacy software.

2) Mapping memory atomicity.

Does host machine provide the same memory access atomicity and separability
as the simulated machine? For instance, if a simulated machine provides a way
to update a byte at address A without interfering with concurrent updates to
bytes at A-1 and A+1 by other VCPUs, then this would take a special effort
to be implemented on a host machine that has let us say a 4-byte word as
the minimum separable unit. Ditto for atomic and separable 2-byte word
accesses (atomicity would mean that concurrent writes to the word do not
result in resultant bytes values coming from different writes,
separability would mean that concurrent writes to neighbor words do not
interfere with each other).

3) Does a simulated system have any synchronization facilities such as
interlocked instructions or machine-specific registers that affect cache
coherency?

4) Mapping execution model.

What happens if a host system thread simulating the execution of VCPU1 (or
virtual IO processor) gets preempted, while VCPU2 is waiting for a response
from VCPU1? Does the simulated system (specifically, its legacy software)
rely on finite timeouts?
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Kevin Monceaux

On Tue, Mar 17, 2015 at 07:24:48PM -, Paul Hardy 2 wrote:
 
 The human brains ability to parse language is amazing. Without thinking I
 read that as:

Your brain is a better language parser than mine is.  I didn't very far
attempting to decipher it.  




-- 

Kevin
http://www.RawFedDogs.net
http://www.Lassie.xyz
http://www.WacoAgilityGroup.org
Bruceville, TX

What's the definition of a legacy system? One that works!
Errare humanum est, ignoscere caninum.
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread E. Groenenberg

 From: E. Groenenberg qua...@xs4all.nl

 Any current  reasonably seasoned Unix or derivative has shmat() 
 shmdt()
 (or equivalent) calls for attaching  detaching a segment of a given
 size.

 Also MS$ has this
 [...]
 so a common API for SIMH would be fairly easy.

[ ...]

 With this feature, it would probably also easy to realize a PDP-11/74
 with 4 instances of SIMH.

 Mapping shared memory segment into the address spaces of multiple SIMH
 instances is the straightforward part.

 More intricate parts are:

 1) Mapping guest memory-consistency model to host memory-consistency
 model.

 Does legacy software expect to observe updates to the shared memory
 executed
 by simulated VCPU1 (or virtual IO processor) to become observable by VCPU2
 in the same order they were executed by VCPU1? If yes, this would not work
 (without special handling by the simulator) on modern machines with weaker
 memory-consistency model.

 What is the cache coherency protocol of the simulated system and how does
 it
 map to the host system?

 Does simulated system have any system events (such as inter-processor
 interrupts or IO completion) that affect cache synchronization between
 VCPUs
 or VCPUs/VIOPs, and if yes, how this is to be mapped to the simulator?

 Ultimately it all depends on exact actual synchronization patterns
 utilized
 by legacy software.

 2) Mapping memory atomicity.

 Does host machine provide the same memory access atomicity and
 separability
 as the simulated machine? For instance, if a simulated machine provides a
 way
 to update a byte at address A without interfering with concurrent updates
 to
 bytes at A-1 and A+1 by other VCPUs, then this would take a special effort
 to be implemented on a host machine that has let us say a 4-byte word as
 the minimum separable unit. Ditto for atomic and separable 2-byte word
 accesses (atomicity would mean that concurrent writes to the word do not
 result in resultant bytes values coming from different writes,
 separability would mean that concurrent writes to neighbor words do not
 interfere with each other).

 3) Does a simulated system have any synchronization facilities such as
 interlocked instructions or machine-specific registers that affect cache
 coherency?

 4) Mapping execution model.

 What happens if a host system thread simulating the execution of VCPU1 (or
 virtual IO processor) gets preempted, while VCPU2 is waiting for a
 response
 from VCPU1? Does the simulated system (specifically, its legacy software)
 rely on finite timeouts?


Sure, there are indeed other concerns.

Concerning the mapping, this depends on how SIMH looks at host memory
from a simulated system. If the memory is directly mapped, i.e.
1Mb of simulated system memory maps directly to 1Mb of host OS memory,
it would be easier. If not, it indeed makes it more complex.

Some form of messaging or synchronization would indeed be required,
this could be done f.e. using msg calls (or equivalents), or
use a dedicated small area in the shared memory segment for locking,
using atomic locking instruction (i.e. xchgb instruction for x86 based
processors or ldstub on sparc based processors)

Ed


-- 
Dit is een HTML vrije email / This is an HTML free email.
Zeg NEE tegen de 'slimme' meter.

___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Christian Gauger-Cosgrove
On 17 March 2015 at 12:49, Phil Budne p...@ultimate.com wrote:
 Johnny Billquist wrote:
 There is a problem in that different emulators might use a different
 layout for memory, that you somehow need to overlap when you come here.
 And that layout can become rather weird, and how do you actually figure
 this out.

 If all simulated memory access is wrapped in C macros, you can hide
 most of the ugliness, assuming you don't mind a special build of the
 simulators for each multi-processor system.  You might end up with
 four or more builds of the PDP-11 simulator: uniprocessor, 11-only
 multiprocessor, PDP-15 + PDP-11, PDP-10 + PDP-11.

 Since we have CPU cycles to throw away, a memory server process
 could solve the cache coherency problems...

What of putting the memory server process into the PDP-11 simulator,
and making it generic? That is, you could have the memory sharing
service on the '11 simulator; which you could either configure as a
the UC15, KL10 FE processor, or part of the 11/74. It's a more piece
of software to program, but much more rewarding than compiling four
different simulators, or writing four different new devices.


Also, of note, I brought some of this up back in January 2014:
https://github.com/simh/simh/issues/96 Also discussing implementing
the card readers on the '15.


Also, other multiprocessor systems that haven't been discussed that
might be interesting to talk about are the multiprocessor KL10 systems
namely the DECsystem-1088 and DECsystem-1099, the strange
PDP-11/45+PDP-11/45 setup involving fun with UNIBUS B (not good at
explaining things, E-11 does it as one of its unsupported
configurations), and the dual-processor PDP-15 setup (two PDP-15 CPUs
and optionally an FPP connected to one MX15-B).

And while we're on the topic of interprocessor/interemulator
communications, has anyone thought of perhaps implementing the DX11
with the co-operation of the Hercules team? It might be interesting to
see what strange things could be done having the SIMH PDP-11 as a
peripheral to a System/370, or System/390.


-- Christian
-- 
Christian M. Gauger-Cosgrove
STCKON08DS0
Contact information available upon request.
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Christian Gauger-Cosgrove
On 17 March 2015 at 21:41, Mark Pizzolato - Info Comm m...@infocomm.com wrote:
 Wasn't the RQDX3's processor a member of the PDP11 family?  We don't try to 
 execute the RQDX3 firmware, but we merely have a device simulator that 
 communicates across the bus just as the RQDX3 did.  Would an approach make 
 sense that implemented the PIREX behaviors in a DR15 simulation (possibly, 
 internally talking to the various UNIBUS device simulations)?

 Just a wild idea...

I mentioned that back on the GitHub discussion (just to plug it again:
https://github.com/simh/simh/issues/96). The PDP-11 side of things
does more than just run PIREX and respond to requests. The PDP-11 also
runs the SPOL11 spooler package, and you can run custom MACRO-11
programs on the '11 loaded and started by the '15.

Really the best way is to find some way of making the simulators talk
to each other. Plus, that framework can be expanded towards other
examples. (KL10 and PDP-11/74, being the ones off the top of my head.)


Regards,
Christian
-- 
Christian M. Gauger-Cosgrove
STCKON08DS0
Contact information available upon request.
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Sergey Oboguev
Unless I misread Mark's message about the RQDX3 analogy, he is suggesting to 
put PDP-15 and PDP-11 in the same SIMH thread and in the same address space. 
When PDP-11 side becomes non-idle, it can signal an event and become eligible 
for execution, in a way similar to RQDX3. The options for co-execution with 
PDP-15 side in this structure are:

1) Execute PDP-11 exclusively until it enters idle state, then resume PDP-15 
execution until PDP-11 becomes non-idle again.(This directly mirrors RQDX3 
analogy).

2) Probably a better option (albeit dissimilar with RQDX3): co-execute PDP-11 
and PDP-15 instruction streams on the same SIMH thread. I.e. execute of chunk 
of N instructions on PDP-15 side, then execute N (or M) instructions on PDP-11 
side, then come back to PDP-15 main loop etc., and repeat this alternating 
execution of per-CPU main loops until one of the sides becomes idle, at which 
point the other side receives 100% share unless it becomes idle too.

One disadvantage of this approach is namespace conflicts.
But perhaps this can be addressed by restructuring SIMH build into 
machine-independent part and machine-specific parts, with machine-specific 
parts going to respective machine-specific DLLs/DSOs, with names local to 
specific CPUs not exported from these DLLs/DSOs and thus not colliding.
A complication might be that while machine-independent part code may be shared, 
but some machine-independent data perhaps might be not (for instance the event 
queue may have the same logical structure for both sides, but either a separate 
instance of this structure is needed for each side, or resets etc. need to be 
handled in a more delicate and involved way taking into account which side is 
resetting -- so the required reorg may be deeper than at the first glance).

The other disadvantage is that it does not leverage host multi-CPU resources.
That's assuming computational performance matters at all.

Yet the other disadvantage is the issues with calibrating VCPU speed.
As the calibration now becomes significantly distorted by the co-executing 
CPU(s) going in and out of idle state in a rapidly varying pattern.

Yet another disadvantage is that by default the consoles of two systems get 
mapped to the same host window, rather than being split, as they probably were 
in real life.

Yet another disadvantage is a complication of the codebase to implement the 
mentioned reorgs or offset for them.

The advantage is that it takes inter-thread synchronization issues out, 
includingmemory coherence issues and timing issues.
But those may be not that great after all.


- Original Message -
From: Christian Gauger-Cosgrove captainkirk...@gmail.com
To: Mark Pizzolato - Info Comm m...@infocomm.com
Cc: simh@trailing-edge.com simh@trailing-edge.com
Sent: Tuesday, March 17, 2015 6:58 PM
Subject: Re: [Simh] Simulating the PDP-15/76 Unichannel

On 17 March 2015 at 21:41, Mark Pizzolato - Info Comm m...@infocomm.com wrote:
 Wasn't the RQDX3's processor a member of the PDP11 family?  We don't try to 
 execute the RQDX3 firmware, but we merely have a device simulator that 
 communicates across the bus just as the RQDX3 did.  Would an approach make 
 sense that implemented the PIREX behaviors in a DR15 simulation (possibly, 
 internally talking to the various UNIBUS device simulations)?

 Just a wild idea...

I mentioned that back on the GitHub discussion (just to plug it again:
https://github.com/simh/simh/issues/96). The PDP-11 side of things
does more than just run PIREX and respond to requests. The PDP-11 also
runs the SPOL11 spooler package, and you can run custom MACRO-11
programs on the '11 loaded and started by the '15.

Really the best way is to find some way of making the simulators talk
to each other. Plus, that framework can be expanded towards other
examples. (KL10 and PDP-11/74, being the ones off the top of my head.)


Regards,
Christian
-- 
Christian M. Gauger-Cosgrove
STCKON08DS0
Contact information available upon request.



___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Mark Pizzolato - Info Comm
On Tuesday, March 17, 2015 at 7:50 PM, Sergey Oboguev wrote:
 Unless I misread Mark's message about the RQDX3 analogy, he is suggesting
 to put PDP-15 and PDP-11 in the same SIMH thread and in the same address
 space. When PDP-11 side becomes non-idle, it can signal an event and
 become eligible for execution, in a way similar to RQDX3. The options for co-
 execution with PDP-15 side in this structure are:

Well, the intention of my suggestion was not to actually execute PIREX code in 
a PDP11 simulator, but to merely have the DR15 device implement the protocol 
(and the resulting behaviors) that the slave PDP11 system executed while 
running PIREX (that is what the RQDX3 simulator does when it implements MSCP).

As Christian points out, the discussion in github issue 
(https://github.com/simh/simh/issues/96) covers this concept as mentioned by 
both Christian and Bob.  I never read the detail of that issue since PDP-15 was 
way beyond/before my time and experience and the discussion seemed to have a 
good flow of its own (by most of the same folks involved in this one now).

 1) Execute PDP-11 exclusively until it enters idle state, then resume PDP-15
 execution until PDP-11 becomes non-idle again.(This directly mirrors RQDX3
 analogy).
 
 2) Probably a better option (albeit dissimilar with RQDX3): co-execute PDP-11
 and PDP-15 instruction streams on the same SIMH thread. I.e. execute of
 chunk of N instructions on PDP-15 side, then execute N (or M) instructions
 on PDP-11 side, then come back to PDP-15 main loop etc., and repeat this
 alternating execution of per-CPU main loops until one of the sides becomes
 idle, at which point the other side receives 100% share unless it becomes idle
 too.

Some aspect of this idea is also explored in that github issue...

- Mark

___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Mark Pizzolato - Info Comm
I was just going to ask questions which you answered below.

As long as you've got things running in separate processes, there are no name 
collisions since they are separate simulator instances.  You'll certainly need 
a memory reference paradigm which is more complicated than merely referencing 
the array M since there will be two blocks of memory (non-shared and shared).  
Other simulators already have separate address ranges which map to different 
things (VAX RAM, ROM, Qbus memory, etc...).

Given the High Level synchronization operations (through the DR15/DR11) it 
won't be hard to assure memory coherency.  Since your development platform is 
Windows, we can come up with a simple API to create a shared memory window and 
we'll worry about porting to other platforms later.

OR YOU CAN STEP BACK and look at the problem differently:

From the model you have describe it seems that the PDP-11 side is merely a 
slave to the activities on the PDP-15 side.  

Wasn't the RQDX3's processor a member of the PDP11 family?  We don't try to 
execute the RQDX3 firmware, but we merely have a device simulator that 
communicates across the bus just as the RQDX3 did.  Would an approach make 
sense that implemented the PIREX behaviors in a DR15 simulation (possibly, 
internally talking to the various UNIBUS device simulations)?

Just a wild idea...

- Mark

On Tuesday, March 17, 2015 at 1:33 PM, Bob Supnik wrote:
 Memory semantics on the 15/76 were very simple. Neither machine had
 cache; neither machine had overlapped instruction execution; and neither
 system had locking capabilities. Therefore, the only ordering constraint is
 this:
 
 - all memory writes in common memory must be visible (committed) before
 either system issues an IO instruction to the DR15 or DR11 (which pokes the
 other system).
 
 That's because the ordering is based on the following software model:
 
 PDP15:
 - set up Task Control Block, set up buffers, pointers, etc.
 - write TCB address to the PDP11 via the DR15.
 
 At the point the TCB address is written, everything written to common
 memory must be visible to the PDP11.
 
 PDP11:
 
 - process TCB, do IO (either DMA or programmed IO)
 - post an IO completion interrupt back to the PDP15 via the DR11.
 
 At the point the interrupt is posted, everything written to common (or
 PDP15 non-common) memory must be visible to the PDP15.
 
 For a mashed up implementation, I don't think the memory container size
 difference is insurmountable. The PDP11 already abstracts memory access to
 routines like Read/Write or Map_Read/Write. These can be conditionally
 compiled as needed. The RK11 likewise would require relatively little work,
 mostly in abstracting the data type used for rkxb, the transfer buffer.
 
 As I said, the real problem is the global name space conflict. I didn't write 
 the
 code with the expectation of mashups, so every simulator has a global M for
 memory, a global PC for the program counter. Because of code cloning,
 there tend to be lots of subroutines with the same names in every simulator.
 It's not insurmountable, because very little of the
 PDP11 is needed, but it's tedious and painstaking, and I don't want to end up
 having to retest the PDP-11 from scratch. That's why I ended up with five
 separate DECtape implementations rather than give skeletons and a
 common device library - it was easier at the time to clone and modify than to
 conditionalize.
 
 /Bob

___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Bob Supnik
No. All Unibus IO is initiated by PIREX, the 11 IO executive. It is 
transferred, byte-by-byte or word-by-word, to/from buffers in the common 
shared memory. So, for example, to print to the LP11:


1) PDP-15 sets up a properly formatted 8b byte-packed buffer in common 
memory.
2) PDP-15 sets up a task control block (TCB) to print the buffer. The 
TCB is also in common memory.
3) PDP-15 pokes the PDP-11 via the DR15-C, passing in the address of the 
TCB.
4) PDP-11 invokes the LP11 task in PIREX, which pulls data from the 
buffer and sends it to the printer.
5) At completion, the PDP-11 posts an API interrupt back to the PDP-15 
via one of the two DR11-C's.


/Bob

On 3/17/2015 11:42 AM, Mark Pizzolato - Info Comm wrote:

On Monday, March 16, 2015 at 2:19 PM, Bob Supnik wrote:

This has been on the wish list for a decade.

The 15/76 Unichannel was a big PDP-15 that used a PDP-11/05 as an IO
processor to get access to inexpensive Unibus peripherals, particularly
the RK11-E/RK05, which supported 18b data, the LP11, the CR11, and
various plotters (not supported in SimH). XVM/DOS and XVM/RSX supported
the Unichannel, and standard DOS probably did as well.

The 15 and the 11 are crosscoupled through shared memory. Except for
4K-12K(W) of local memory, all of Unibus address space is mapped into
the 15's main memory. DMA transfers from the RK11-E could transfer 18b
data (using the Unibus parity lines for extra data lines); programmed IO
transfers from the IO processor transferred 16b data, zeroing out bits
0-1 on the 15.

Control is done by a DR15-C parallel interface cross-connected to two
DR11-C's in the 11. The 15 created task blocks in shared memory and
transfers an 18b pointer to the 11 via the DR15/11 parallel connection.
The 11's IO program, called PIREX, executes the directive and sends an
API interrupt back when done.

Clearly the DR15/11 paradigm passing through PIREX is necessary for DMA 
devices, but how is programmed I/O handled.

With the whole Unibus space addressable from the 15 side, is there code on the 
15 which actually does programmed I/O directly to the Unibus devices?  If 
programmed I/O is done directly by the 15, then this whole problem is very 
different than one which relates to shared memory access.

- Mark


___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Clem Cole
On Tue, Mar 17, 2015 at 5:25 AM, E. Groenenberg qua...@xs4all.nl wrote:

 Some form of messaging or synchronization would indeed be required,
 this could be done f.e. using msg calls (or equivalents), or
 use a dedicated small area in the shared memory segment for locking,
 using atomic locking instruction (i.e. xchgb instruction for x86 based
 processors or ldstub on sparc based processors)


​Ed,

Exactly - its more than just the shared address space, you need messaging,
sequencing, sync etc. - this is why I was suggesting that instead of
reinventing an API for simh, using one  that has already been worked and
agree upon by the HPC community.  Since HPC is all about performance, I
would have a solid belief that not only will the primitives work, but they
will offer some of the highest efficiency for the code.

At the risk of sounds like a fan-boy for OpenSHMEM, it seems to me to be
the best of the PGAS family (particularly since it's a library not a new
language like Chapel or UPC).   I would be surprised if it did not have all
of the things that Bob desired/needs built-in.  In fact, one of the recent
additions to OpenSHMEM is the new counting puts API which is a
distributed (and scalable) locking and synchronization scheme similar to
the old eventcount scheme of Reed  Kanodia for UP systems [
http://dl.acm.org/citation.cfm?id=359076]. The implementations of these
primitives map well to the instructions level that you point out.

That said, if you stay with strict POSIX API instead, I suspect between
their shared memory and locking/semaphore primitives, you will be pretty
close and i think you should get a solid level of portability.  My two
concerns that that strategy are how many of the OSs have actually
implemented the POSIX primitives, and when they have, how good a job was
done implementing them.   Not that the HPC community is perfect, but they
tend to have an incentive to get the performance aspect right.

Clem
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Tom Morris
The Unichannel 15 Overview manual in the Bitsavers collection has a pretty
good description of everything for those wondering about the details.

https://archive.org/details/bitsavers_decpdp15Un974_2578882

There's an additional component, the MX15-B memory multiplexer, which
arbitrates memory access (15 wins for simultaneous requests, otherwise,
first come, first serve) and implements byte read/write for the 11.  The
manual also shows the memory layout and how it maps on each system, as well
as a lot of other details of operation.

Tom
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh

Re: [Simh] Simulating the PDP-15/76 Unichannel

2015-03-17 Thread Phil Budne
Johnny Billquist wrote:
 There is a problem in that different emulators might use a different 
 layout for memory, that you somehow need to overlap when you come here. 
 And that layout can become rather weird, and how do you actually figure 
 this out.

If all simulated memory access is wrapped in C macros, you can hide
most of the ugliness, assuming you don't mind a special build of the
simulators for each multi-processor system.  You might end up with
four or more builds of the PDP-11 simulator: uniprocessor, 11-only
multiprocessor, PDP-15 + PDP-11, PDP-10 + PDP-11.

Since we have CPU cycles to throw away, a memory server process
could solve the cache coherency problems...

phil
___
Simh mailing list
Simh@trailing-edge.com
http://mailman.trailing-edge.com/mailman/listinfo/simh