On 5/10/24 16:37, Fred Cisin via cctalk wrote:
I was told that some of the many locally applied
patches were done by
writes to array elements with negative subscripts.
CDC 6000 (the one with PPUs) OS (SCOPE, KRNONOS, MACE and NOS) used a
single PPU that, among other things, monitored the contents of location
1 in each control point's field length. Normally, it was zero; but if
it became nonzero, it took the format of a system request, very often to
be serviced by a certain PPU program.
In CDC FTN (and probably RUN), you could get the (60 bit word) address
of a variable using either the LOCF() function call or .LOC. unary
operator, depending on the dialect of FORTRAN.
So, to put something into that location 1 address word was pretty
straightforward.
INTEGER AX(1), IX;
IX = LOCF( AX)
AX ( -IX-1) = <system request.
You'd add a little loop waiting for the system request location to go
back to zero, but that was it. A lot of "quick and dirty" code was
written that way and cleaned up later for distribution.
We did the something similar with BASIC on the F-85 micro to write
directly to the CRT buffer--display something, search memory for it,
change the display to confirm and you have your video buffer address.
--Chuck