Warner asks: "Why was microcode support required to make APL work? What did it enable that couldn't be done in other ways?" [On an HP 3000 Series III, for example]
Back in the mid-1970s, on the HP 3000 Series III, the team implementing APL\3000 apparently decided they would need to implement some form of virtual memory (beyond the multiple 64KB spaces the HP 3000 Classic architecture provided). They chose to add 11 new instructions: LDV, STV, MWFV, MWTV, MBFV, MBTV, LDVB, STVB, MVW, and EGOTO (unnamed by HP), LDWX (unnamed by HP) The first 9 are "virtual memory" related instructions. The last two are not. These instructions were added shortly after the original Series III instruction set had previously been expanded by the addition of the new extended COBOL instructions. (So, the Series III had two sets of firmware expansions.) Subsequent HP 3000 models had the COBOL instructions from day 1. I presume that the APL instructions weren't ready when the Series 30/33 design was locked down. I *think* they might have been available later as an add-on. I know that a few years later, the instructions were ported to the Series 40/44 microcode by Leon Leong, but they were never released for it (APL\3000 was in limbo, about to be cancelled at the time.) But, to answer your question, yes...there are other ways. Gavin Scott managed to patch the unimplemented instruction handler in MPE V/R (the release the SIMH HP3000 simulator is running), and got APL\3000 running. In the meantime, I'm slowing trying to add the instructions to the SIMH code. The nice thing about Gavin's approach is that if I get an instruction implemented, his code *for that instruction* simply never gets called ... so we can coexist peacefully. In theory, implementing the APL instructions in SIMH will lead to better performance (because calling one won't cause a missing instruction interrupt, followed by hundreds or thousands of simulated HP 3000 instructions to emulate the instruction). I believe Gavin is preparing a talk about APL\3000 for an APL Users Group. Another alternative would have been for the APL\3000 people to implement references to their virtual memory via "cover functions". However, I suspect that the grasp of SPL programming, the lack of "macros" with parameters in SPL, and concerns about the performance penalty of a procedure call per memory access all would have conspired to argue against this approach. (Having been reading thousands of lines of SPL written in the 1970s, I conclude that perhaps a handful of people at HP understood how to write readable, maintainable SPL code ... and that's probably the same percentage as SPL programmers outside HP :) Stan
