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