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
| Source |
Filename |
Version |
Contents |
Notes |
| ToTS 2100085 |
MUDSAV; TS MUD54 |
54 |
Basics |
No GC, many binary patches |
| ToTS 9005143 |
MUDSAV; TS MUD54 |
54 |
Basics |
No GC, two more patches to above |
| This repo |
MUDSAV; TS MUD54 |
54 |
None |
Reconstructed source to match 9005143 |
| ToTS 2100085 |
MUDSAV; TS MUD |
54+dev |
? |
Have partial source |
| UChicago |
uns:mdl104.exe.1 |
104 |
? |
-Wascii, one corrupt page (won't affect Zork) |
| LCM+L |
uns:mdl105.exe.93 |
105 |
? |
No GC, -Wascii, good |
| ToTS ? |
<mdl>mdl105.exe.93 |
105 |
? |
No GC, -Wascii, identical to above |
| Panda |
<games>mdl105.exe |
105 |
? |
No GC, -Wascii, good |
| This repo |
MUDSAV; TS MUD56 |
56 |
None |
Built from 106 source + fixes |
| LCM+L |
uns:mdl106.exe.17 |
106 |
? |
No GC, -Wascii, good |
| ToTS ? |
<mdl>mdl106.exe.52 |
106 |
? |
No GC, -Wascii, ? |
| ? |
<mdl.int>mdl106.exe.{1-5} |
106 |
? |
Have source, -Wascii, corrupt |
| ? |
<mdl.int>mdlxxx.exe.{1-2} |
106+dev |
? |
Have source, -Wascii, corrupt |
"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
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...)
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...)