Rambling Memories of an HP 2000 Timeshare BASIC System

Oct 2009

I believe I was in Grade 6 when I first heard about there being a computer at a local junior high school. A couple of lucky kids even got to go there once; I think they were in an advanced study group, thus the perq. I loved computers, at least what I imagined of them at that age — being heavily influenced by cartoons — so I'd have loved to have gone along. It wasn't until two years later that I began attending that school when I entered Grade 8.

Eventually I joined the Computer Club as a way to get computer access. This may have been late in Grade 8. I don't know why I didn't join the Computer Club right away; it's possible that I didn't even know it existed. When I did get to use "the computer" I discovered that what we had was only a terminal that was used to dial-in to the computer, which was at another school in the district.

This terminal was a Texas Instruments Silent 700. That model name covers a number of different models: Comparing my memories to photos of these units suggests that it was a model 733 ASR with the cassette unit removed, as the mounting slots for it in the cover were open; although, it could have been an KSR if those slots were easy to open up by abusive students. It was connected to an external modem so it did not have the acoustic coupler option. We always called the computer a mainframe, although I later learned it was an HP 2000, which is a minicomputer. I've since learned that the HP 2000 brand also covers many different hardware configurations. I never saw the computer so I have no way of knowing what the configuration of the system was.

Dial-in was accomplished with a data-set rather than a telephone with an acoustic coupler. I remember a large box that was the modem, and a telephone unit with some extra buttons. What I don't remember is the procedure for establishing the dial-up connection. Did we have to dial (punch-in?) the number manually or push a button to auto-dial? I do know that when we heard an answering tone we pushed a button and put the receiver back on-hook.

I don't remember much of anything about the Computer Club. I have the feeling that I was disappointed with it but I don't know why as I don't have any well-formed memories of it; I may have attended only one meeting. I know I used my membership to access the computer a few times in the morning before first class, maybe a half-dozen times in total. However, circumstances change and it would turn out that I would have far more computer time through the Library Computer Club.

Library Computer Club

I had a few friends who I learned used the computer regularly as a result of being members of the Library Computer Club. Their main task was to take the overdue sign-out cards and enter them into the computer so that overdue slips could be printed which would be delivered to the offenders in their morning homeroom classes. I wanted to get in on the computer action so I joined the club too; one of the perqs of doing 15 minutes of library duty after school was spending the next two hours having fun learning programming and playing with the system. Once I was with the Library Computer Club I never looked back at the other Computer Club; it seems ridiculous but that's the way the world works. It's probable that the Library Computer Club had priority for computer time because the work it did benefitted the school and helped justify the expense of the computer. It must have been a good thing too that the dialup connection was a local call rather than long-distance!

The terminal lived in a small locked closet along with the modem and extra rolls of thermal paper. To use it we would lift it out onto a nearby table. When we did library data entry at lunch we'd have the room to ourselves; this room was reserved, with a schedule posted on the door, and normally locked. I developed a coded knock so that we'd know who was at the door. Sometimes we'd have to print long reports (deletions and overdue notices) so we'd put the terminal back in the closet, start it printing, and then lock the door. I never returned to pick up the output; it was probably collected by a library staff member. I do remember having some classes in this room where one could faintly hear the terminal printing away in the closet! Interestingly, the dot-matrix printers that would be popular in just a few years with micros were far louder than a thermal printer; the "Silent 700" name was justified.

I'm not sure if I got more out of the system than my friends did. I believe that I was the one who got the most out of learning BASIC programming on it since I went on to a programming and systems administration career. However, we all definitely had a great time socializing at lunch and with our use of the computer system.

The Library Computer Club and the associated Library Club (non-computer operations) were about more than just typing overdues into the computer, there were social aspects too. Being in the club with my closest friends was great because we were allowed to eat lunch in the library. At lunch the library was closed and the doors locked. One realizes the importance of this if one remembers what a zoo a junior high school can be: The contrast between lunch time in the general population versus lunch time with the library crew was incredible. It's like being in the eye after passing through the storm: It was a peaceful respite from the rest of the day; after eating lunch one could research whatever one wanted to in the stacks, peacefully do homework, or prepare for an afternoon class before the doors were opened to the public again after the lunch period.

Food was verboten at other times but with the library closed for lunch we were allowed the indulgence, and we were trusted to be responsible: not to leave a mess, not to damage the books, and not to make it generally known that we did eat lunch there. Interestingly, at my senior high school my friends and I — a different set of friends, that is — would often go to the public library across the street and have lunch inside on rainy days or outside in good weather. We were very discreet about eating inside and were never hassled; it's all about being responsible.

One of the really cool things about working with the computer in the Library Computer Club was that the librarian (Jim Bilesky) gave a friend and myself a shared account with lots of time and disk space: It had 2000 minutes of usage and 500 disk blocks of storage. For my usage patterns it was essentially an unlimited account. I don't know why he did this since I don't remember having to beg for computer time. Maybe he knew that my friend and I were actually getting something out of our use of the system and acted to encourage that. I'm grateful to him because with that account I never had to worry about time hassles nor cheat by using the library account for personal stuff. The amazing thing is that this account never did become a shared account; my friend didn't want it so I ended up with all that time and space to myself!

I suspect that the timeshare system didn't last too long after my last year in junior high. The school had a couple of new Apple II micros (with external floppy drives) and there was talk of getting the library system running on the Apple II. That could have been done as a summer project and so could have been running the next school year. However, that was after my time so I have no idea if there were any attempts made or how successful they might have been.

A Mystery and its Solution

My most memorable moment was one where I was hacking around with some code when I unexpectedly found the solution to a mystery that had been annoying my friends and myself for quite a while. The mystery was that the program we used for overdue library book management (named LOOP) had lowercase characters in many of its PRINT statements, yet the software had been written at the same school presumably with the same terminal, whose keyboard could only enter uppercase. Here's a scan of a part of the listing showing the mixed case. The lowercase characters look like stunted capitals but that was part of their charm — they were unusual because they weren't normally seen.

How had that been done? No one knew. The comments on the listing implied that it was written at the school by Geoffrey R. Tomlin and George Lu, respectively a teacher and student who were no longer there. We couldn't easily ask them how they had done it, so my friends and I wondered for the longest time how they had been able to enter those lines with mixed-case characters.

We had one clue from an oddity visible in the listing: Each of the PRINT statements with mixed text was very short, typically a third of the 80-character line length. So a sentence that would be expected to take up the width of the page was split into three PRINT statements. Further, a few words were awkwardly split between statements (such as lines 3780 to 3810), something which looked very suspicious but for which nobody had an explanation. These questions remained unanswered for months until I made an unexpected discovery.

I had had the privilege of borrowing the HP 2000 BASIC manual a couple of times. From that I learned the technique of entering characters using their ASCII numeric values, so one afternoon I was fooling around with some test code while my friends were hanging around. I typed in a PRINT statement such as

    10 PRINT "H"'101'108'108'111
to make it print "Hello" using lowercase characters. When I listed the program I expected to see exactly what I had typed but instead this statement had been converted to
    10 PRINT "Hello"
revealing that the BASIC subsystem was doing some optimization behind the scenes. I remember being stunned when the realization sunk in that this was how LOOP's programmers had been able to input lowercase text AND it also explained why those lines were so short! My friends and I had a great time around the terminal that day celebrating the solution to one of our great mysteries.

Those without experience with a Silent 700 may wonder why the input lines had to be so short; why they weren't simply continued on the following lines when input. The reason is simple: The Silent 700 would forcibly input the line if the print head reached the right margin — an act that almost always resulted in a syntax error because the line wasn't complete. Thus the hard limit on lines typed at this terminal was 80 characters (technically 80 printable characters, since it was possible to enter longer lines of non-printables such as ^G to beep the speaker); the BASIC manual specifies a 255 character limit, if one has a device that can enter such long lines.

Games

My favourite game was LANDER. It's the standard lunar lander program where you have a limited amount of fuel and need to land your spacecraft as gently as possible. I probably experienced lots of frustration until I found the slightly modified version, called CRASH, which would let one specify the operating parameters — such as amount of fuel and gravity — when landing on a mysterious planet called Persephone. That was how to get infinite fuel to learn the gameplay without crashing.

My biggest frustration with LANDER or CRASH was technical, not with the gameplay: They could not be listed because they had been set to the "protected" state. I couldn't get the source listing I wanted until I found the Program Library tape images on the bitsavers site in 2009.

I kept a few runs of CRASH for posterity. Here's one showing a landing on Persephone, starting with way more than enough fuel to land successfully.

The Star Trek game which the HP 2000 is known for, STTR1, was installed and, IIRC, we were able to play the game until some time when access to it was removed. The operators probably figured people were spending all their time playing it instead of doing real stuff. That's probably true, so I expect that after the removal people instead spent all their time playing other games such as LANDER.

Revisiting all this

It's fascinating to ponder how things turn out sometimes; how one simple thing leads to another, which in turn reveals something totally unexpected. In this case a memory led to a web search which led to a discovery that was important enough for me to set aside the project I was working on in order to do this one. Here's how the events happened.

This recent odyssey through my memories began one day when I was waxing nostalgic about the Good Ol' Days with the computer in junior high. I remembered that I had a folder-full of program listings and output that I had saved. What I couldn't remember was where I had stashed it. I tried searching for it in the likely places but failed to find it. Could I possibly have discarded it? The thought filled me with dread. That night I had a dream where I once again searched the likely places but I still couldn't find it. Later that same night I had a second dream where I immediately knew where the folder was: A little-used box in which it lay undisturbed for almost thirty years buried under a stack of magazines. This woke me up and I looked at the clock: It was two minutes before the alarm would have woken me up — that was close! I got out of bed and found the box. Sure enough, there was the folder full of program listings.

The label "HP BASIC Program Library" is on most of the system program listings. I didn't have any expectations when I typed that into Google but the very first hit was for a "Hewlett-Packard HP 2000 Time Shared Basic" page. That brought back some memories since it identified the computer. Another search result pointed me at Bitsavers which has a couple of tape images of this library; now that really got my attention. I then found that there was an emulator, and further searching turned up a Yahoo! group which has an OS image for download (see the members' only files section).

My thanks go to all the people involved with creating the emulator, preserving and imaging the HP 2000 tapes, and to HP for licensing the software under a permissive licence for enthusiasts. All of them made it possible for me to revisit this material.

The documentation that came with the OS image wasn't entirely thorough so I had to spend a few days figuring out how the emulator was supposed to run the OS and how I should access the emulated system. When those details were sorted out I was ecstatic at the possibility of really running my software again. I interrupted my current project to start a new one to see if the program listings I had would run in the emulator — restoring them to operational status of sorts. This succeeded beautifully!

It's one thing to have software preserved as a human-readable program listing printed on paper and stored in an archive somewhere but that software is in stasis, it can't do anything. It's something entirely different to have the software back in its native environment where it can run. It can then be archived to something other than paper. When one has an appropriate machine-readable archive one does not have to worry about transcription errors. That's important when one considers how much effort is needed to convert a program listing on thermal paper into a machine-readable format, and doing so without error. That proved to be the number one issue with restoring my listings.

I saved the labour of typing in the listings by using OCR but that doesn't guarantee correctness. Many errors could be caught as syntax errors but not everything will be; variable names, contents of strings, those won't be caught unless a human notices them. I settled on a Blink Comparison of the OCR output to spot errors. That worked very well but I found that one still has to be vigilant.

With a running emulator I realized that the experience would be more accurate if the output were in the Silent 700 font. It took a few weeks to get around to it but I replicated the font for X and now using the emulator takes me right back to those Good Ol' Days!

Here's a telling observation of how far we've come since the days of the HP 2000. That computer system uses two CPUs, one for the users' software and one for the I/O. The SIMH emulator emulates this by running two processes. These use two cores of the quad-core CPU I'm running, and I still have two more cores available!

Downloads

Here's the Silent 700 font for X. There are two sizes of two variants: One that strictly retains the hardware aspect ratio of ten chars horizontal by six rows vertical but is out of spec, and one that very slightly breaks the aspect ratio while being in spec with the hardware. It's tough trying to replicate a font exactly!

TI Silent 700 font

The following are program listings which aren't in any of the HP BASIC Program Library tape images that I've seen online.

HP 2000 Listings