On Sat, Oct 26, 2024, 1:35 PM Rick Bensene via cctalk <cctalk(a)classiccmp.org>
wrote:
...
If anyone out there had experience with
GE timeshared systems, or may know of existence of any distribution
media or source listings of the systems, or perhaps has memories of using them, I'd
love to read about it.
...
Bill D. wrote:
I believe they used straight-up Dartmouth BASIC, but
maybe that's obvious and does not need to be
stated.
From all I've been able to determine by reading documentation for the systems on
Bitsavers (thanks, Al!), the early versions may well have been Dartmouth BASIC as it was
run there, but GE kept refining and adding features to BASIC, and by the time the Mark II
systems came along, it was substantially different code.
I have a paper tape exercise saved by someone who took
intro training in use of the system,
with the intro brochure materials, etc. When I printed the paper tape it contained BASIC
code and
the output. The first time I printed the tape it was upside down, with confusing
results!
I can believe it probably looked like it was some kind of binary executable with the tape
upside-down. I'm sure that the introductory materials presented examples of code
that were very vanilla Dartmouth BASIC...LET, FOR/NEXT, INPUT, PRINT, READ, DATA, etc.
Sorry I don't have the actual BASIC but it very
well may be a simH GE mini tape file(s) out there GE > 225 or 235. I seem to remember
seeing this but did not find after a quick google search just now.
As far as I know, there's no simulation for any of the General Electric CPUs available
under SimH or other commonly known vintage computer simulators. There may be tape image
files floating around somewhere, but so far I haven't been able to find anything that
appears to be relevant.
The early versions of the GE Timesharing environment provided three different language
processors that were able to be run simultaneously on the system. Of course, there was
BASIC. But, there was also a FORTRAN compiler, as well as ALGOL. Indications are that
all of these were compiler-based, such that actual machine code was generated when a
program was run. I have found reference to the ability to be able to save the compiled
code as an executable that could run (mostly) standalone, although there was a runtime
library that the executable would link to that provided common math processing and I/O
routines. This made the GE systems more flexible than the HP Timeshared system, as the
HP TSB systems only supported BASIC. DEC's more advanced timeshared operating
systems were capable of supporting multiple languages by design.
The more I'm learning about the GE timeshared systems, it seems that it'd be a bit
of an endeavor to simulate them, as both the main computer (executive) and the
communications processor have shared connections to the disk controller, as well as a
two-way channel for communication between the executive and front-end CPUs.
The front-end machine does considerably more in the GE environment than it does in the HP
Timeshared BASIC environment. The front-end processor parses completed lines of user
input, and if there is a command such as generating a disk catalog (directory listing), it
would use its access to disk to pull the catalog and generate the output to the user
without bothering the executive processor.
The dual-port access to the disk controller did not allow simultaneous access from both
the executive and communications processor. Priority was placed on disk access requests
from the communications processor, with the executive processor having to wait for access
to the disk if the communications processor was busy accessing it.
One of the "spare time" tasks the communications processor took care of was to
maintain terminal status data on the disk that was read the executive processor so the
exec would know if a user's session dropped unexpectedly so it could perform the
necessary cleanup operations for the user's process running on the executive. I also
believe that the communications processor performed user login and credential validation
locally by accessing the user catalog area on disk.
The GE communications front-end CPU ran a multi-tasking monitor that had high-priority
tasks that watched the communications lines for activity (ring, carrier detect, carrier
loss, etc.) and serial data bit transitions (yes, it used bit-banging for the terminal
I/O) and accumulating input/output bytes. Lower-priority "spare time" tasks
were used for doing things like sending a completed command line or program statement that
couldn't be handled locally off to the executive CPU for processing, as well as
sending output generated by either the executive processor or itself to the user's
terminal.
It made more sense back in the mid-1960's when the architecture was designed to use a
software-based UART rather than using hardware to handle the serial data streams, because
hardware to do the job for each terminal would have been prohibitively expensive, as
MOS/LSI UARTs didn't yet exist. Implementing a UART with small or even medium-scale
DTL/TTL requires quite a few devices, and given that the Mark I systems could support
upwards of 40 simultaneous users, using hardware to accumulate the bits (including start
and stop bits) from each communication line would have amounted to a lot of hardware. I
am not aware if the later Mark II systems kept with using bit-banging, or if hardware
became available to handle the serial I/O.
The communications processor in the HP Timeshared BASIC systems just managed the
communications, and had no access to the disk/drum store. Nor did it have any
understanding of the data coming in from the user...it just accumulated it in local
buffers and passed completed lines of input to the main processor for it to handle, as
well as sending output generated by the main processor to the user terminals. I am not
aware if the HP communications multiplexors interrupted the communications processor on
each serial data signal transition, or if they had hardware to accumulate bytes to/from
terminals.
All of DECs timeshared operating systems ran on one processor, putting both the I/O and
language processing/compute on the same machine. However, DEC used hardware UARTs for
serial I/O, removing the burden of bit-banging, which is likely why they were able to put
everyone on one CPU. Even early TSS/8 that ran on the PDP 8 mini with a high-speed fixed
head disk ran entirely on one CPU. RSTS/E and RSX ran on single CPU PDP 11s and could
handle a substantial number of simultaneous users.
Simulating the shared disk drive along with the inter-processor link of the GE timeshared
environment, and getting the timing right could be a challenge. The communications
processor had an interrupt that would trigger every 9.09mS to scan all of the terminal
lines at every bit-time (110 baud) to read the logic level of each, and accumulate bytes
in a local buffer for each terminal. When a line of input had been accumulated(e.g.,
terminated with a carriage-return), the communications processor would parse it to
determine whether it was a command that it could process locally (like a disk catalog
command) or if it needed to send it off to the executive processor for handling.
If the input required attention from the executive processor, the communications processor
would schedule a "spare time" task to send a message to the executive processor
over the inter-processor communications interface, letting the executive know that there
was a line of input ready for it to receive.
I know that there were some tricky aspects of getting the timing and interlocks right on
the HP 21xx simulation when the inter-processor communication interface was used to
connect two CPUs together. Given the added complexity of the GE environment, with both
shared access to the disk, as well as an inter-processor communications interface, could
be significantly more difficult, but that's just assumption on my part. A lot would
depend on just exactly how much brains were in the dual-port disk controller, as well as
in the inter-processor interface.
Simulating all of this may not be possible at the CPU timing level. It may require that
I/O processor be emulated rather than simulated down to the CPU level, as it may be too
intensive to try to simulate and get all of the timing right given that the simulation
would need to run on a large variety of processors and operating systems. AFAIK
simulating bit-banging isn't really possible in any case given the comparatively smart
serial interfaces of modern computers.
All in all, I truly believe that the historical significance of the GE Timesharing Systems
is such that if any of the code survives anywhere to this day, it needs to be captured and
archived in a form that perhaps someone with much more programming skill and time than I
would embark on a project to bring the systems back to life through a
simulation/emulation.
The GE 200-series and 400-series computers were historically significant in their own
right, with the machines being involved in developing the ERMA system that created the way
that bank drafts (checks) are encoded with magnetic ink characters that are readable by
machine to allow full automation of check processing at bank clearing houses. Of course,
the development of BASIC at Dartmouth was a huge historical point, seeded by GE providing
a 225 and a Datanet 30 communications processor to the institution.
I found
DTSS.org/DTSS, a website that has an emulation of an early version of
Dartmouth's DTSS timesharing system. It appears to be broken (I tried to register as
a new user, and it threw a ASP error), but the introduction page says that the Datanet-30
is emulated, but the executive processor actually runs a simulation of the 225 down to the
instruction level(in Java), and the BASIC Language Processor, as well as the kernel that
runs on the 225 were extracted from listings that the authors of the emulator have or had
access to that were scanned/OCRd. It is stated that they had listings of the Dartmouth
ALGOL language processor, but had not yet implemented it.
So, at least something is out there that could potentially serve as the basis for
simulation of the executive processor, and potentially some original source listings for
the DTSS versions of BASIC and ALGOL
This code could potentially serve as the basis for running some of the later GE production
timesharing systems, however, that would be fully dependent on whether any of the GE
production timeshare system code is still out there anywhere, as well as whether the
authors of the simulation/emulation were willing to share. There did not appear to be
any links on the pages I looked through to contact the authors.
Maybe someone on the list knows of some of the GE code that may still exist somewhere so
it can at least be archived somewhere like Bitsavers.