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(a)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(a)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(a)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