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 > > > >