Closed atsampson closed 3 years ago
The Toad systems at Living Computers: Museum + Labs (which are still available online) have working executables for MDL104.EXE and MADADV.SAV, which I installed myself from my personal magtape, whose contents originated at UChicago in the 1970s. I can arrange to put those files somewhere where you can pick them up for inclusion in the collection.
Rich Alderson github@alderson.users.panix.com its@alderson.users.panix.com
On Sep 1, 2020, at 4:23 PM, Adam Sampson notifications@github.com wrote:
Notes on the surviving Muddle interpreter executables and save files, for the purposes of reconstructing the Muddle environment and applications. (Even when we have the source code, it's not always obvious what the resulting artefact should look like!)
This covers both ITS and TOPS-20 Muddle, and ignores anything earlier than version 50. See #1911 https://github.com/PDP-10/its/issues/1911 for the full history.
A Muddle save file is a dump of the interpreter's memory space minus the interpreter code itself; it can contain both interpreted and compiled code. The interpreter executable can also include preloaded Muddle code. The memory layout in the executable is different between ITS and TOPS-20, and between different versions.
Compiled relocatable functions (RSUBRs) can be generated by the Muddle compiler or assembler (or by hand). RSUBRs need to refer to the interpreter's internal variables and functions, so they aren't inherently portable between Muddle versions or platforms, although there's a "fixups" mechanism that allows a list of patches to be applied when loading into a different version.
ITS files are usually in good shape. Unfortunately most of the TOPS-20 files we have are mangled, e.g. by newline conversion.
"Basics" = the PKG, EDIT, etc. packages described in The MDL Programming Environment https://github.com/PDP-10/muddle/blob/master/doc/MDL_Programming_Environment.pdf in compiled form.
Interpreters
Source Filename Version Contents Notes XX
mdl105.exe.93 https://github.com/PDP-10/muddle/blob/master/%3Cmdl%3E/mdl105.exe.93 105 ? -Wascii, ? Panda mdl105.exe https://github.com/PDP-10/panda/blob/master/files/games/mdl105.exe 105 ? -Wascii, good This repo MUDSYS; TS MDL56 56 None Built from the 106 source XX mdl106.exe.52 https://github.com/PDP-10/muddle/blob/master/%3Cmdl%3E/mdl106.exe.52 106 ? -Wascii, ? ? mdl106.exe https://github.com/PDP-10/muddle/blob/master/%3Cmdl.int%3E/mdl106.exe.5.{1-5} 106 ? -Wascii, corrupt ? mdlxxx.exe https://github.com/PDP-10/muddle/blob/master/%3Cmdl.int%3E/mdlxxx.exe.2.{1-2} After 106 ? -Wascii, corrupt, probably broken Save files Source Filename Version Contents Notes XX
m104uni.save.1 https://github.com/PDP-10/muddle/blob/master/%3Cmdl%3E/m104uni.save.1 104 Basics (?) -Wascii, corrupt (missing bytes) Panda zork.sav https://github.com/PDP-10/panda/blob/master/files/games/zork.sav 105 Compiled Zork 7/22/81 https://github.com/PDP-10/zork/ -Wascii, good — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/PDP-10/its/issues/1940, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADLCRX36BIFEJROA766HNWLSDV67PANCNFSM4QSLKZEQ.
Thanks @rmaldersoniii, please do!
I have updated @brouhaha's copy of "read20" with a -b option to write binary files preserving all bits: https://github.com/brouhaha/tapeutils FTP binary image mode would also be fine.
It looks like there are actually three versions of Muddle in UNS:
on the LCM TOAD-2, including an AGC file for 104 (which would be particularly useful since we're missing it for 54):
MADADV.HELP.1;P775252 5 2101(36) 7-Aug-1978 23:00:26 ALDERSON
.INFO.1;P775252 1 369(36) 10-Mar-1978 21:07:48 ALDERSON
.SAVE.1;P775252 274 140288(36) 3-Dec-1993 17:11:58 ALDERSON
AGC.MUD104.1;P775252 12 6144(36) 6-Sep-1977 07:51:11 ALDERSON
MDL104.EXE.1;P775252 132 67584(36) 3-Dec-1993 16:33:46 ALDERSON
.SYMBOLS.1;P775252 38 19374(36) 6-Sep-1977 08:05:09 ALDERSON
MDL105.EXE.93;P775252 104 53248(36) 6-May-1981 10:06:24 ALDERSON
MDL106.EXE.17;P775252 107 54784(36) 11-Jun-1981 11:33:25 ALDERSON
ZORK.EXE.1;P775252 4 2048(36) 19-Dec-2005 16:08:58 ALDERSON
.LOG.1;P775252 1 165(36) 10-May-2019 16:54:30 ALDERSON
I've been able to download those from TOAD-2 using Kermit - thanks, @rmaldersoniii!
I have make two files available on my personal web page (but not in the index.html) to solve all the issues which people are seeing with previous attempts to move thing from the LCM+L Toad-2.
The first is a copy of DUMPER, modified to allow the use of on-disk image files as input and output (as 36 bit files, not as tape images): https://www.panix.com/~alderson/dumper.exe
The second is a DUMPER image of all the relevant files, including the ZORK.MAC files used at UChicago and LCM+L: https://www.panix.com/~alderson/zork.dumper
These files were created with the image command to the BSD ftp program, to fetch them from the Toad-2. Once you have a copy, use the same command to write them to a running KLH10-based Tops-20 system such as Panda; this DUMPER will not run on a KS10 or SimH. Then use DUMPER (commands INFILE ZORK.DUMPER, then TRANSFER .) to put them into your connected directory.
I believe I've now listed all the executables and save files we know about above - if you find any more, please let me know.
I've added dates for all the Zork save files based on the newspaper in the white house's living room (search for "news" in the file, or climb through the window and go west). We've got more distinct versions than I thought - and none that corresponds to the final source.
@eswenson1's copy of the sources from 1979 shows only trivial changes were added for the final 1981 version.
Added Zork 1977-06-13 @ ToTS 9006255, and 1977-06-14 @ 9005183 & 2100085 to the table.
On the its.pdp10.se server the MADMAN; contains the following files:
:listf madman
TT MADMAN
FREE BLOCKS #2=5207 #3=7166 #0=6920 #1=4654 #4=793 #5=622 #6=5065 #7=1449
2 MADADV DEC12 119 ! 12/12/1977 22:48:06
5 MADADV HELP 3 9/14/2020 09:04:35
5 MADADV INFO 1 9/14/2020 09:04:35
2 MADADV JAN23 144 ! 1/23/1978 00:26:53
5 MADADV JAN7 121 ! 9/14/2020 09:04:35
2 MADADV JUL1 88 ! 7/1/1977 00:01:02
2 MADADV JUN12 65 ! 6/12/1977 22:46:51
2 MADADV JUN14 66 ! 6/14/1977 03:29:10
2 MADADV SAVE 66 ! 6/14/1977 03:29:10
2 MADMAN SAVE 144 ! 1/23/1978 00:26:53
6 OMADAD SAVE 115 12/4/1977 17:44:35
1 TRV SAVFIL 105 ! 6/27/1977 21:58:25
1 TV FILE 301 ! 6/24/1977 21:50:41
2 ZORK BUG 0 ! 9/28/2020 22:45:18
7 ZORK LOG 2 ! 1/23/2021 20:38:23
The one i wonder about is the "MADADV JAN7". If the JAN7 is correct, this file isn't in the above list.
When I start the file it says:
Welcome to Dungeon.
This version created January 28.
You are in an open field west of a big white house, with a boarded
front door.
There is a small mailbox here.
>
The issue of US NEWS & DUNGEON REPORT is dated 1/24/78 so maybe the file is one of the above dated 1978-01-24?
Would it be possible to expand the list above with a column that list the the correct filenames on its.pdp10.se?
Is it possible to start the "OMADAD SAVE" file or is it corrupted (it doesn't start on the its.pdp10.se in MUD54)?
Maybe I fumbled the JAN7 file. There is a single tape with several MADADV SAVE files on it, which can be confusing. They are the Zork 1978-01 files with suffix _0 etc in the table above. If you like, I can make a second pass and install them all with the proper date.
The OMADAD file can be started by copying it to MADMAN; MADADV SAVE and then start ZORK. This will affect other users, so it's best to be a little careful. It should look like this:
:copy madadv; omadad save, madman save
zork^K
There is no rush to fix the timestamp on the file for me. Maybe it could be done when MADMAN is updated with the new file from march/april of 1978 (nudge, nudge...).
Is there a reason that OMADAD-file don't start with:
:mud54
<RESTORE "MADMAN; OMADAD SAVE">$
But it would start if a rename/copy the file to "MADADV SAVE"?
I'm not gonna tinker with the server and potentionally mess it up for other users, even though I havn't seen that many (I even tried to promote the server a bit on IntFiction)...
The April files don't include an executable SAVE file, only sources.
I updated all the January files. The files are named from their timestamps. I haven't checked if that's consistent with the dates inside the game.
There must be a reason OMADAD can't be RESTORED, but I don't know what it is. It's ok to mess around a bit, but I understand if you are reluctant.
I got the April files mixed up with the 3/28/78 one above (for MUDDLE104).
I get these results from the files in MADMAN;
Date
Name Pts T-stamp Start Issue Comment
MADADV JUN12 285 6/12/77 --- ---
MADADV JUN14 285 6/14/77 --- ---
MADADV JUL1 387 7/1/77 7/1/77 --- There also the date 6/19/77 in the issue masthead
OMADAD SAVE 500 12/4/77 ? 12/3/77 Don't start. Corrupt?
MADADV DEC12 500 12/12/77 12/12/77 12/12/77
MADADV JAN7 500 1/7/78 ? ? Don't start. Corrupt?
MADADV JAN11 500 1/11/78 ? ? Don't start. Corrupt?
MADADV JAN23 500 1/23/78 1/23/78 1/17/78
MADADV JAN24 500 1/24/78 1/24/78 1/24/78
MADADV JAN26 500 1/26/78 1/26/78 1/24/78
MADADV JAN28 500 1/28/78 1/28/78 1/24/78
T-Stamp = The date on the files timestamp
Start = The compilation date that greets you on startup.
Issue = The date on the "US NEWS & DUNGEON REPORT" in the Living Room
I've not found that the file name or location of a Muddle save file bears on the ability or not to run it. In other words if you do <RESTORE "..."> and it won't run, moving it or renaming it isn't going to help.
What Lars meant by copying the file to MADMAN;MADADV SAVE was to allow the :ZORK
Are the "MADADV SAVE"-files from ToTS 9006255, 9005183, 2100085 & 9005143 (MADADV JUN12, JUN14 & JUL1) available anywhere, or do I have to wait until MITDDC releases them?
(I'm trying to compile my own little MADMAN-collection to import/export from/to my own offline emulation via DUMP.)
Are the timestamps, the time part, correct for the above files, or are they arbitrary?
(The tree.txt on MITDDC only report the date not the time.)
The SAVE files are not available until released by MITDDC.
The tapes carry standard ITS timestamps which have a 0.5 second resolution. Possibly there is some rounding when files are stored in a Unix file system, but the timestamps listed above should be accurate to the second. They are not arbitrary.
Currently at the its.pdp-10.se server all the zork-files from MADADV DEC12 and forward crashes on startup. I'm not sure of something has changed on the platform or the servre just is in a need of a reboot.
*:mud54
MUDDLE 54 IN OPERATION.
LISTENING-AT-LEVEL 1 PROCESS 1
<RESTORE "MADMAN;MADADV DEC12">$
I'm sorry, you seem to have encountered an error in the program.Send mail to DUNGEON@MIT-DMS describing what it was you tried to do.
This version created December 12.
PURE-LOAD-FAILURE!-ERRORS
FIELD
Your score is 23748389065 [total of 500 points], in -1 moves.
This score gives you the rank of Wizard.
The strange thing is that even the files like the one from 77-12-04 crashes in the same way. On my own installation of ITS this file refuses to start at all and just hangs without printing anything (the dec12-file works, though).
@heasm66, indeed I have made a change in the platform: I have updated the PDP-10 emulator to test a bug fix. However it's only related to one of the terminal I/O devices, so I'd be surprised if it affects Muddle or Zork.
I rebooted, but MADADV DEC12 still crashes like above. I changed back to the older emulator, still same thing.
Ah, I also changed MUDSAV; SAV FILE and FIXUP FILE for running Trivia. I changed back, and now MADADV DEC12 works fine again.
TT MUDSAV
FREE BLOCKS #2=5394 #3=4342 #0=5332 #1=4661 #4=793 #5=803 #6=5312 #7=790
4 AGC MUD54 6 9/14/2020 16:50:11
4 AGC MUD56 6 9/14/2020 16:52:10
2 FIXUP FILE 2 ! 9/14/2020 16:52:19
3 FIXUP FILE54 477 ! 12/9/1977 01:17:48
4 FIXUP FILE56 2 ! 9/14/2020 16:52:19
2 SAV FILE 4 ! 9/14/2020 16:52:19
3 SAV FILE54 2158 ! 12/9/1977 01:17:48
4 SAV FILE56 4 ! 9/14/2020 16:52:19
4 SGC MUD56 1 9/14/2020 16:52:10
4 SQUOZE TAB54 1 9/14/2020 16:50:11
4 SQUOZE TAB56 1 9/14/2020 16:52:10
4 TS MDL56 61 4/16/2020 10:33:58
4 TS MUD54 63 9/14/2020 16:50:16
4 TS MUD56 63 9/14/2020 16:52:14
Just so I understand this correctly: SAV FILE54 & FIXUP FILE54 is needed as SAV FILE & FIXUP FILE for TRIVIA. SAV FILE56 & FIXUP FILE56 is needed as SAV FILE & FIXUP FILE for ZORK.
The PURE-LOAD-FAILURE
has this explanation in "The MDL Programming Language":
Pure-code file disappeared.
Whatever that means...
I suspect it means that a file whose code/data lives in the SAV or FIXUP files in the MUDSAV directory at the time the Muddle image was saved is no longer present on the machine on which the SAVE file is being RESTORed.
Regarding your dependencies question regarding Zork and Trivia and corresponding files in MUDSAV, I believe you are correct. One issue I found is that when I built and ran the latest Zork under muddle 55, I had to replace the SAV FILE and FIXUP FILE files in MUDSAV. I couldn't just name them SAV 55FILE and FIXUP 55FILE. Not sure why the pattern of nnFILE didn't work for me, Zork, and MDL 55.
I meant FILEnn, above, I guess. I thought it was FILEnn, but must be mistaken.
The binaries, and source, from tape 9005143, 9005183 & 9006255 have been released at MITDDC and the links in the above table can be updated.
(I just noticed that I have edit rights in the above mentioned post. Should I update the links myself?)
Cool! The Trivia files can also be added (my explain-muddle script should be able to handle them too if you want to poke around in them).
Edit: Added. MARC; TV SAVE is a Muddle 53 image so explain-muddle doesn't understand it yet; I need to figure out the locations of the variables it uses. The later MADMAN; TRV SAVFIL is a 54 image and decodes fine.
Maybe this is old news but I found a way to stop execution without KILLing the Muddle interpreter.
<RESTORE "MADMAN;MADADV JUL1">
CTRL-G
stops the execution but you remain in the interpreter and can inspect variables. Unfortunately all the FUNCTIONs seems to be compiled so you don't see their definitions.This could be useful to recreate the ACT & DUNGON-files.
:mud54
MUDDLE 54 IN OPERATION.
LISTENING-AT-LEVEL 1 PROCESS 1
<RESTORE "MADMAN;MADADV JUL1">$
Welcome to adventure.
You are in an open field west of a big white house, with a closed, locked
front door.
There is a small mailbox here.
>
*ERROR*
CONTROL-G?
LISTENING-AT-LEVEL 2 PROCESS 1
,SAVE-IT$
%<RSUBR-ENTRY '[MSETG SAVE-IT #DECL ("VALUE" ANY "OPTIONAL" ANY)] 385>
,TROLL$
%<RSUBR-ENTRY '[MSETG TROLL #DECL ("VALUE" ANY)] 10337>
,HANDLE$
%<RSUBR-ENTRY '[MSETG HANDLE #DECL ("VALUE" ANY ANY "TUPLE" ANY)] 533>
,ROOM$
%<RSUBR-ENTRY '[MSETG ROOM #DECL ("VALUE" ANY <OR STRING ATOM> STRING STRING <OR ATOM FORM FALSE> EXIT "OPTIONAL" ANY <OR FORM FALSE ATOM> FIX)] 7845>
,ROOMS$
(#ROOM [CLMID "Rocky Ledge" UP CLIMB DOWN] #ROOM [CLBOT "Canyon Bottom" UP CLIMB NORTH] #ROOM [POG "Pot of Gold Room" UP NW WEST SE RAINB POT ]
#ROOM [RAINB "Rainbow Room" EAST WEST] #ROOM [BARRE "Barrel" EXIT] #ROOM [FCHMP "" NORTH] #ROOM [WCLF2 "White Cliffs Beach" NORTH LAUNC]
...
Great tip, thanks!
,ROOMS
lists all the room defintions.
,OBJECTS
lists all the object definitions.
<1 .OBLIST>
lists all the defined variables and functions (ATOMs).
<MOBLIST WORDS>
lists all the words in the dictionary.
You can change variables, texts and even replace existing functions with your own version (you need to <SET REDEFINE T>
first). If you then call <SAVE-IT>
the program saves a new MADMAN;MADADV SAVE
file that is a new game with your modifications.
I'm reading this, a little surprised that it is news. I've used this to debug Zork images many times. When I ran into errors with compiled/saved Zork in MDL55, were it not for this ability to debug, it would have been impossible.
I thought I'd mention, in case you didn't already know, that when you get to a Muddle listener, you can load in any functions, to help debugging and introspection -- most importantly the Zork bible code (IIRC this is LCF; B >.
You can make nice charts of all objects, rooms, points, etc. There are other debug helper functions scattered around the source trees that are also useful here.
When I have a chance, I'll provide more details. Not near a (real) computer now.
Unfortunately the earliest "BIBLE" code I could find was from your 1979 version and it doesn't work out-of-the-box with the earlier images. I guess at least some ATOMs changed names. But it always possible to rewrite the code. Shouldn't be to hard...
Oh right. I was working with the 616+100-point version when using the Bible.
Charts?!? I'd like to see this!
It would look like this (there is, of course, many pages of this but I cut it off after a couple of entries for each command),:
<GET-WORDS> ;"Prints info about words""
1ST? ACTION Top Level
200 ADJECTIVE
A BUZZ WORD
AN BUZZ WORD
ANCIE ADJECTIVE
AND BUZZ WORD
ANSWE ACTION Top Level
AT PREP
ATTAC ACTION Top Level
BACK ACTION Top Level
BARE ADJECTIVE
BARRE ADJECTIVE
BEAUT ADJECTIVE
BIRDS ADJECTIVE
BLACK ADJECTIVE
BLAST ACTION Top Level
<CATALOG> ;"Prints info about objects"
====== A rusty iron key {PKEY} ======
Synonyms: KEY.
Adjectives: IRON, RUSTY.
[No description]
In a keyhole {PKH2}, in the Dreary Room {PALAN}.
Weighs 5.
The rusty iron key {PKEY} is visible, takeable, indescribable, a tool, turnable.
Special action function: PKEY-FUNCTION
====== A beautiful brass bauble {BAUBL} ======
Adjectives: BRASS, BEAUT.
`There is a beautiful brass bauble here.'
No initial location.
Value: 1 if found, 1 more if in trophy case.
Weighs 5.
The beautiful brass bauble {BAUBL} is visible, takeable.
<ATLAS> ;"Prints info about rooms"
====== Prison Cell {PCELL} ======
Room is Lighted, part of the End Game.
Exit is closed: The door is securely fastened.
<GET-ACTIONS> ;"Prints info about actions (verbs)"
ATTAC (INJUR HURT HIT FIGHT)
Attack <any/a villain:room> with <any/a weapon:have,adv>
BACK ()
BLAST ()
BLOW ()
* Blow up <any:adv,room> with <any/a tool:adv,room>
Blow up <any:adv,room>
Blow in <any:adv,room>
BOARD ()
Board <any/a vehicle:room>
Yup. I have an XGP printout of all this in my circa 1980 Zork binder!
Cool, thanks!
These are now online:
https://github.com/MITDDC/zork-1978-04
https://github.com/MITDDC/zork-1989-01
As far as I can see, this completes the set of Zork source and binary files from ToTS.
The MADADV SAVE
from the 1989-01 is for MDL104 and have this dates internally:
There is an issue of US NEWS & DUNGEON REPORT dated 3/17/79 here.
and
US NEWS & DUNGEON REPORT
3/23/79 Late G.U.E. Edition
Send correspondence to ZORK@DM
!CHANGE OF ADDRESS!
Note the change in our preferred net address, above.
!NEW PARSER!
Several changes have been made in the Zork parser in an attempt
to disambiguate nouns and adjectives. This allows words in the Zork
vocabulary which are both adjectives and nouns. 'Take gold' has not
worked in the past, because 'gold' was defined as an adjective only.
Now, however, this should work.
!APOLOGY!
The implementers apologize for the length of time it has taken
for the recent problems with the parser to be fixed. This version
should have all or most of those bugs fixed. Please report any
new (or previous) problems with the parser.
This file seems to be from a couple of months before the source code from 1979 @eswenson1 "extracted".
How many points does this version have?
I can't start it, but I guess it's 616 points + 100 points endgame because the Donald Woods stamp is there (the last lousy point).
Notes on the surviving Muddle interpreter executables and save files, for the purposes of reconstructing the Muddle environment and applications. (Even when we have the source code, it's not always obvious what the resulting artefact should look like!)
This covers both ITS and TOPS-20 Muddle, and ignores anything earlier than version 50. See #1911 for the full history.
A Muddle save file is a dump of the interpreter's memory space minus the interpreter code itself; it can contain both interpreted and compiled code. The interpreter executable can also include preloaded Muddle code. The memory layout in the executable is different between ITS and TOPS-20, and between different versions. So you can't load a save file into a different version of Muddle from the one that produced it - all the references to interpreter variables and code locations would be wrong.
Compiled relocatable functions (RSUBRs) can be generated by the Muddle compiler or assembler (or by hand). RSUBRs need to refer to the interpreter's internal variables and functions, so they aren't inherently portable between Muddle versions or platforms, although there's a "fixups" mechanism that allows a list of patches to be applied when loading into a different version.
ITS files are usually in good shape. Unfortunately most of the TOPS-20 files we have are mangled, e.g. by newline conversion.
Interpreters
"Basics" = the PKG, EDIT, etc. packages described in The MDL Programming Environment in compiled form.
"No GC" = the garbage collector files are missing; TS MUDxx should come with AGC MUDxx and (from 55 onwards) SGC MUDxx.
"54+dev" = some stage of development between versions 54 and 55. These tend not to work.
Save files
MUDSAV; PC1 SAVE
Not all FOO SAVE files are from Muddle: save files from MIM and Confusion use different formats, although they use similar names, and some are just backups of other random files.
Zork dates are from the issue of US News & Dungeon Report.
GC notes
Muddle 56/106 has three GCs: AGC is a compacting GC that copies between two ITS processes; SECGC is a compacting GC that uses TOPS-20 sections; SGC is a fast mark-sweep GC. SGC was introduced in Muddle 55/105, so earlier versions only have AGC or SECGC depending on the platform.
The GCs are quite big and don't need access to most of the interpreter, so they're mapped in from a separate file when needed, overlaying the interpreter from AGCLD onwards. They're assembled along with the rest of the interpreter using some MIDAS LOC/OFFSET trickery - the code is actually stored at REALGC (200000) but it thinks LOC is AGCLD (which means the symbol table from AGCLD onwards contains two overlapping sets of symbols, for the GC code and whatever it's overlaying). AGCLD is set by the AGCMRK source file; everything after AGCMRK in the link order is overlayed by the GC.
For Muddle 54/104, we have an ITS interpreter and a TOPS-20 interpreter. We only have the AGC file for the TOPS-20 version, but we have the symbols for it in ITS. AGC only has a single ITS conditional, for the page size, so it should be possible to rebuild the ITS version using the TOPS-20 one as a reference. Unfortunately the two copies don't quite match, going by the symbols - LOCFL1-GLOFLS=11 for TOPS-20 and 10 for ITS. (It's also 11 for TS MUD, which suggests the TOPS-20 version is a bit later...)