Gavin,
A-W-E-S-O-M-E ! ! !
On Sun, Sep 27, 2020 at 2:22 PM Gavin Scott via cctalk <
cctalk at classiccmp.org> wrote:
  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.