It was a loop hole in the strong typing of Pascal, not the operating system 
itself.  You could set up a record structure that mirrored the communications 
area and then map this to location zero.  This was important for Pascal since 
it had no library mechanism, it was essentially a compile and go system.  The 
run time was tied to the particular version of the compiler, if the run time 
was updated you had to update the tables in the compiler.  This was somewhat 
similar to the run Fortran compiler, which also avoided using the loader.  The 
loader was a wonderful piece of software, but it was expensive, so for teaching 
programming it was avoided at all cost.  I wrote a relational database system 
in Pascal for the CDC 6000 using this approach for the low level I/O routines.  
There were some wonderful things that you could do through the PPU programs.
If you were using the FTN compiler for Fortran you could do all of this in 
COMPASS, but for Pascal that wasn't an option.  One of the fun things you could 
do is having multiple I/O operations occurring at the same time.  A fun game 
was to issue a read and write on the same memory location and see when they 
passed each other.
    On Thursday, May 16, 2024 at 04:04:05 a.m. EDT, Tom Hunter via cctalk 
<cctalk@classiccmp.org> wrote:  
 
 I assume you refer to the "case ... of" construct in PASCAL record types
which allowed you to arbitrarily "cast" - to use a C term - variables to
any type you wanted and could be (ab)used to assign integers to pointers.

The ability to call PP programs via RA+1 calls was not a loop hole, but a
design feature of the CYBER/6600 operating systems like COS, KRONOS and
NOS. It simply involved writing to the word in location 1 (RA+1) relative
to the start of the segment of memory assigned to your program by the OS.
The contents of the word were essentially the name of the PP program and
some parameters - typically the address of a parameter block somewhere in
your segment of memory. When the OS processed the request, it cleared
location 1 (RA+1). This was the standard mechanism used to request OS
functions like writing to a file etc. Higher level languages typically
wrapped this in library functions (or macros when programming in assembler
i.e. COMPASS), but if the language allowed negative array offsets and the
ability to determine the address of the array, then it was trivial to
explicitly call PPs via RA+1 calls (even more trivial using COMPASS).

The OS periodically scanned the RA+1 words of each of several programs
currently in memory (i.e. a program assigned to a "control point") and if
the RA+1 contents were non-zero, then the OS allocated a free PP to the
request and loaded and started the requested PP program into that PP and
finally cleared the word at RA+1. You typically would expedite this by
after writing the PP request to RA+1, execute an "exchange jump"
instruction which stopped the user program from running and re-entered the
OS to allow it to soon after process pending RA+1 requests.

I hope this all makes sense.

On Thu, May 16, 2024 at 3:28 PM Mark GREEN via cctalk <cctalk@classiccmp.org>
wrote:

>  I worked on the run time support for the early versions of Pascal on the
> CDC 6000 series.  Depending upon the character set determining the end of
> line was a major pain.  There was a loop hole in the Pascal type system
> that allowed you to call any PPU program directly from Pascal.  It was not
> widely known, but it came in handy at times.
>    On Thursday, May 16, 2024 at 01:52:12 a.m. EDT, Chuck Guzis via cctalk
> <cctalk@classiccmp.org> wrote:
>
>  On 5/15/24 22:07, Tom Hunter via cctalk wrote:
> > I thought the CDC CYBER and 6000 series mainframes were great systems
> which
> > performed admirably for what they were designed for. I liked COMPASS,
> SYMPL
> > and NOS 1 and 2. I didn't do much work in CYBIL, but it was basically an
> > enhanced version of PASCAL suitable for operating systems work. What is
> > there not to like? These mainframes and the CDC 7600 outperformed every
> > other machine until Seymour Cray released his own machines.
>
> SYMPL was pretty new when I left the 6000 series behind.  Much of the
> code, but for some utilities was still assembly.  FORTRAN (FTN) was used
> for some simple things.
> I worked on Zodiac, which was a multi-CPU COBOL  (!) multithreaded
> multitask OS written for USAF--very unlike anything CDC has ever had..
> Lots of ECS and oceans of 844 drives. Special Systems Division was a lot
> of fun back in the day.  Lots of variety before they started cycling
> down work at SVLOPS.  My final years at CDC Sunnyvale were with STAR,
> only to be resurrected in the 1980s with the ETA machines.
>
> I think the ROVER people were among the last people at SVLOPS, but I
> can't recall precisely.
>
> A little factoid is that the 6000 series was very good at running COBOL.
>
> --Chuck
>
>
>
>
  

Reply via email to