HP 3000, APL\3000, the HP 2641A APL Display Station, and stuff.
Gavin Scott
gavin at learn.bio
Sun Sep 27 16:21:49 CDT 2020
As some people here are aware, I have spent probably too much time this summer
hacking on J. David Bryan's excellent Classic HP 3000 simulator and trying to
build up the ultimate classic 1980s HP 3000 system (virtually speaking).
I started with the MPE V/R KIT that's widely available and expanded that into a
5x120MB HP 7925 disc system and configured things like the system directory
size and all the system tables to make a fully functional multi-user server.
I then set about collecting as much old MPE software as I could find, which
included Keven Miller's collection of the old Contributed Software Library tapes
which were conveniently available in SIMH format. This is a huge trove of cool
stuff including most of the classic mini/mainframe games (Dungeon, Warp,
Advent, etc., etc.) and even a little game called DRAGONS that was written in
1980 by a guy named Bruce Nesmith when he was in college and he used it
to get a job at TSR and went on to write parts of many classic D&D products
and eventually landed at Bethesda where among other things he was the
lead designer for another little game called The Elder Scrolls V: Skyrim. I was
able to track Bruce down and give him a copy of the system with his 40 year
old game running on it. The CSL tapes also include other amazing goodies
that people developed and gave away over the years, including a FORTH and
LISP, as well as most of the system and utility programs that people used to
run their 3000 shops. It's quite fun to explore.
I was curious how far we could push the 3000 simulator, so I hacked all
the memory bank registers to be six bits instead of four bits, and we
now have a simulated HP 3000 Series III that supports 8MB of memory, 4x
more than any physical system ever did. I started trying to do the same thing
for giant disc drives, but MPE turned out to have too much knowledge of
what the supported disc models look like to make it practical. Bummer.
Since I met my first HP 3000 in 1980 (40 years ago this month), people would
talk about what was probably the most rare and exotic HP software subsystem
ever produced, APL\3000. APL on the 3000 was a project started at HP Labs
in Palo Alto in the early 1970s. They were likely motivated by the success IBM
was having with mainframe APL timesharing services. This would be the first
full APL implementation on a "small" (non-mainframe) computer. It would be the
first APL with a compiler (and a byte-code virtual machine to execute the
compiled code), it would include an additional new language APLGOL (APL
with ALGOL like structured control statements), and it managed to support
APL workspaces of unlimited size through a clever set of system CPU
microcode extensions that provided a flat 32-bit addressing capability (on
a 16-bit machine where every other language was limited to a 64KB data
segment).
Because APL required these extra special CPU instructions that you got as
a set of ROM chips when you bought the $15,000 APL\3000, and because
APL ultimately failed as a product (another story in itself) and thus HP never
implemented these instructions on their later HP 3000 models, I never saw
it run on a real HP 3000, but over the years we talked about wouldn't it be
cool to find a way to get APL running again.
With assistance and moral support from Stan Sieler and Frank McConnell
and others, I was ultimately able to reverse-engineer the behavior of the
undocumented ten magic APL CPU instructions needed to get it to run and
implement them as part of the MPE unimplemented instruction trap and now
APL\3000 runs again for the first time in ~35 years. Somewhat ironically, this
implementation method could have been used back in 1980 as I didn't
actually end up changing the hardware simulation code at all, and it should
also run (if a bit slowly) on any physical classic architecture 3000.
So that was cool and all, but what is APL without all the weird overstruck
characters and whatnot? APL\3000 supports the use of plain ASCII terminals
through blecherous trigraphs like "QD for the APL quad character, but this
is hardly satisfying. So the quest was on to find a solution. Back in 1976 when
APL\3000 was released, there was a companion HP terminal in the 264x line,
the HP 2641A APL Display Station, which was basically an HP 2645A with
special firmware and APL character set ROMs that supported all the APL
special characters as well as overstrikes (the terminal would take X<backspace>Y
and lookup to see if it had a character to represent Y overstriking X and if
so it would show that on the display, and if that got transmitted to the host it
would convert it back into the original three character overstriking sequence).
I briefly looked into the idea of hacking QCTerm or Putty or something, but
then I found out from Curious Chris that an HP 2645A emulator already existed
in the MAME emulator system! Since the '41 is basically just a '45 with modified
firmware, and Bitsavers had both the character set ROMs as well as the
firmware ROMs from a '41, this sounded like it might be easy! There was a snag
however in that the firmware ROM images that were allegedly from a '41 turned
out to actually be from an ordinary '45. But we did have the character sets and
one of the ROMs from the second CTL PCA. I put out a call on the Vintage HP
list to see if anyone might possibly have a lead on an actual HP 2641A, and
Kyle Owen responded that not only did he have one he could also dump the
ROMs for us. So a few days and a few hacks to F. Ulivi's MAME hp2645 driver
later we now have a functioning MAME HP 2641A terminal emulation, so you
can experience APL\3000 in all its original glory. I bundled up a somewhat
stripped down MAME along with my turnkey 3000 setup so both emulated HP
terminals are just a couple clicks away.
So that's how I spent my summer vacation (who am I kidding, it's pretty much all
vacation these days). It has been a lot of fun revisiting all this old
3000 stuff as
well as the numerous people I talked to along the way including some of those
who were around at APL\3000's birth (before my time). It was rather a lot of
work so I'd like to feel it might be useful to someone in the future
who is digging
into this part of history. Because of all the usual reasons, I don't
plan on hosting
it permanently until and unless we maybe someday get the licensing worked out
(the 50th anniversary of the HP 3000 will be in a couple years so maybe people
will get interested again then) but I will offer it up here to my
fellow computer
history nuts if you want to help ensure that it doesn't vanish if I
get run over by a
bus or something :)
This is a simulated HP 3000 Series III (circa 1980) running MPE V/R (circa 1986)
with 8MB of memory, all the language subsystems (APL, BASIC, BASICOMP, RPG,
FORTRAN (66), SPL, PASCAL, COBOL (68), COBOL II (74)), 20 years of users group
contributed software, many classic historical computer games, etc. Software
archaeologists can get lost in here for years. Oh, and thanks to Dave
Elward, the
HP 2000 Timesharing BASIC contributed library is even included (kinda sorta
converted to MPE BASIC) for good measure. This is a streamlined turnkey edition
that's ready to run out of the box with no assembly required (all
batteries are included).
Currently, I only provide executables for Windows (sorry) but am in
the process of
getting the 3000 simulator changes (for large memory support) and the new MAME
hp2641 driver back upstream. Instructions and further details can be
found in the
README.txt hint book for this adventure. 94MB Google Drive link:
https://drive.google.com/file/d/1bmXvHkBLbUeLAid73EJ4H1yQ2uwXQuRu
Gavin
P.S. I'm giving a talk on the history of APL\3000 and its resurrection
to the ACM APLBUG
group in a couple weeks. If anyone is interested I can provide more
details when I have
them.
More information about the cctech
mailing list