Source code courtesy of Palevich, who comments:
"My guess is that the SUPDUP code is a fork and extension of my
original CHAMELEON terminal emulator.
My guess is that either Leigh Klotz or Patrick Sobolvaro extended
CHAMELEON to create SUPDUP. From looking over the source code, I
see these changes from what I remember writing in Chameleon:
+ Using the paddle to scroll left/right. (I only supported using
the yellow function keys to do this.)
+ Emulating SUPAI and IMLAC. (I had already added SUPDUP support to
CHAMELEON.)
+ Removing emulation for ADM-3A."
Klotz and Sobolvaro don't remember any details. They have given their
permission to release this, should that be necesssary.
LOGIN files suggest the ITS terminal settings should be:
:tctyp soft hei 24 wid 39 +%tosai +%tolid +%tocid full +%tprsc no overwrite
Courtesy of the author, Leigh Klotz.
Klotz wrote in https://news.ycombinator.com/item?id=23064346
> The assembler [for Apple II Logo] was already chosen, probably by
> Steve Hain or Gary Drescher. I believe it was CROSS. It annoyed me
> that I would get phase errors if I edited during the first pass
> which was like 10 or 15 minutes at night so I wrote a one-pass
> assembler in MacLisp, but it was slower to finish than the first
> pass of CROSS so I translated it to Logo and Hal said to put it on
> the utilities disk. I can't remember who added .output and .input
> but Logo had had them before the Apple II, I think 11Logo had it.
KA10 specific programs: DECtape tools, programs related to the Rubin
10-11 interface (including the Knight TV), programs using the 340
display, and programs using the PDP-6.
KL10 specific programs: microcode, frontend programs, and LSPEED.
KS10 specific programs: microcode, frontend programs, MTBOOT, and TENTH.
The 2500 bootstrap ROM expects to receive a block loader first, which
will run and recieve the actual payload which is the microcode and
font data divided into blocks.
The assembler will recieve a GC-OVERFLOW interrupt. Other TT2500
files set the GC-OVERFLOW variable to a dummy function, which seems to
appease the interrupt.
Since the TVDIS code was written before backquote was introduced to
Maclisp, it uses comma characters without quoting. To accomodate this
a call to SETSYNTAX overrides the new syntax for comma.
DUMP will scramble ACT and DUNG files written to the LCF directory.
This is no longer useful in protecting Zork files, so the code is
limited to the DM machine.
There were two problems here:
- The FOPEN code in 56 uses new C.DISK/C.TTY flags to keep track of the
channel type, so it knew what to do when closing the channel. The
TOPS-20 open code had been modified to set these, but the ITS code
hadn't, so CLOSE was assuming all channels were network channels.
Fix: set those flags in ODSK and OTTY, as TOPS-20 does.
- The BFCDSK flush routine had been modified to use byte pointer writes
to write the last incomplete word for both TOPS-20 (SOUT) and ITS
(SIOT). But on ITS, SIOT only works in unit mode, and Muddle opens
files in block mode.
Fix: restore the working code from Muddle 54 for writing the last
word. The only difference is that BFCDSK can now be invoked with the
leftover byte count (C) being zero, so it needs to check at the
start to avoid duplicating the last word in that case.
The format of the list passed to GC-DAEMON has changed. LLOGO expects
a list of "(space old-free . new-free)". The new format is "(space
old-free new-free old-size new-size)".
The Lisp Logo loader conditionalizes some things on the BIBOP feature.
Maclisp still uses BIBOP memory management but the feature symbol went
away in 1980. Since Lisp Logo has unconditionally been ported over to
NEWIO, the BIBOP checks are removed.
DMARCD is the source for DEVICE; OARCDV BIN which handles old format
archives. The file listing used to display the year field as is, so
would go past 99 to 100. Adding 1900 makes it display a four-digit
year instead.
Don't require players to have a home directory or not be playing in
business hours, etc.
The original code expects TS MUD54 to be in SYS1, but our SYS1 is
bursting at the seams already, so make it look at MUDSAV instead.
Both of these are from MIT's zork-1978-01 release. MADMAN; MADADV SAVE
is from 1978-01-28 (it's madadv.save_3 there), and TAA; ZORK 3 is from
an archive dated 1978-01-27. Unfortunately this isn't the final version
of Zork -- in particular, it doesn't have the endgame.
The launcher will also work with the other 1977/78 Zork images MIT have
released, provided you copy them to MADMAN; MADADV SAVE.
Note that we already have the non-DM fake Zork in SYS3; TS ZORK, but
the real Zork was in SYS2; on DM, so the recommended ZORK^K will find it
first.
These two databases contain pure code routines that Muddle images can
refer to. We don't currently have whatever tool was used to maintain
them, so this is a MIDAS program that creates and populates them.
SAV FILE includes some stubs for functions in the LSRTNS and MUDDLE
libraries -- these are the functions that the existing Muddle 54 Zork
images need.
For the FIELD function in LSRTNS, returning FALSE is equivalent to the
user not being found. I have no idea what C-FCN in MUDDLE is for, but
very early Zork calls it after a command is entered, and seems happy
enough with it doing nothing.
In the DEC Processor Reference Manual, this is documented as "result is
indeterminate", and there's a note in the ITS KL microcode implying that
the default KL behaviour was different from the KA.
Muddle 54 uses this to drop a temporary stack frame from TP in a few
places. If it doesn't work properly, one obvious result is that READing
bracketed expressions leaves garbage on the TP stack -- e.g. typing
<QUIT> at the interpreter will print a FIX instead.
Muddle 56 replaces this with MOVE TP,(TP), so do that as a new patch.
This source was reconstructed to match MUDSAV; TS MUD54 from 1977-07-02,
using a combination of all the surviving Muddle source files. The memory
layout and pure code is the same.
No AGC MUD54 has survived, so the AGC code was adjusted to match the
TOPS-20 agc.mud104 from Chicago that Rich Alderson provided (the only
ITS conditional is the page size). There's a one-instruction difference
in the symbol positions, which I've converted into a patch at the end of
the code to maintain the original layout on ITS.
The INITM code, which doesn't appear in the final executable, is
a best guess but it's probably fairly close, since it generates objects
in the right order and locations, and the symbol locations match the
original.
The 1977 executable has a very large number of patches, which I've
replicated in MUD54 INIT. The code that the patches were replacing --
marked with "XXX patched" in the source -- is also a best guess.
I haven't checked that the TOPS-20 code is correct; it could be adjusted
to match mdl104.exe in the future. It would need STENEX, which could be
linked from MUDSYS;.
Previously the first XFILE printed out some commands to run after STINK
had completed, which is awkward if you're building Muddle repeatedly.
This automates the second half of the build process.
Lars has found a couple of examples of TS MUD54 files, and they're the
initialised version (with references to internal functions filled in,
etc.). TAA's ZORK launcher also expects TS MUDxx to be the initialised
version. So it appears that the ITS version didn't generate TS MDLxx.
(Why does the initialisation process write out TS MUD56, then, if you're
only going to pdump the result over it? Because the last step in
initialisation is to invoke the GC, and getting back from the GC to the
interpreter requires mapping pages back in from the executable.)