Open larsbrinkhoff opened 4 years ago
Among those is a Y2K bug fix:
- " 19" <UNPARSE <CHTYPE <GETBITS .N <BITS 7 27>> FIX>>
+;( " 19" <UNPARSE <CHTYPE <GETBITS .N <BITS 7 27>> FIX>> Y2K issues)
+ " " <UNPARSE <WINDOW-YEAR <CHTYPE <GETBITS .N <BITS 7 27>> FIX>>>
I guess WINDOW-YEAR is something specific to Confusion, but we could adapt the change.
From where did the above zork sources come? Are they official sources from MIT/Infocom? Or are they modified by some user? What were they intended to run on -- what version of Muddle and on what OSes?
They come from Matthew Russotto, but it looks like a lightly edited version of the Supnik files. I believe the changes are to run bettter on the Confusion MDL interpreter.
But there is something really interesting here. In tell-repl.mud, there is a definition of a a PSTRING function. In our sources, I couldn't find one. And attempts to compile zork are failing due to a missing PSTRING function. In other words, I find nothing in our sources that allows <PSTRING "FOO">, but there are plenty of references to <PSTRING ,XXX> in the code. These cause the compiler to fail. I don't understand how this could ever work without this definition. Since PSTRING is a type defined by zork, it shouldn't be a case of some missing external function definition. I may try to incorporate this definition into an updated version of our sources to see if I can then get things to compile.
Yes, that's the version that's modified for Confusion. I used some of its function definitions when I was first getting Zork to run interpreted on Muddle 56.
@eswenson1, the definitions of PSTRING
(both a NEWTYPE
and the assembly function to create them, which starts <TITLE PSTRING>
) are in TELL
- if you feed that file through the Muddle assembler then the output should include the NEWTYPE
and an assembled RSUBR
which is what's being called elsewhere in the code. The Confusion version does work in real Muddle but if you've got the assembler then you should be able to use the real one.
That's interesting. I saw the <NEWTYPE PSTRING WORD>
in DEFS, but no definition for the PSTRING function. I didn't notice the function definition in TELL (but see it now). So I guess you can't compile DEFS until you have loaded TELL, or at least you can't use any of the macros defined in DEFS (such as needed to compile ROOMS), until you've loaded TELL.
I don't (yet) know how to assemble TELL. Do you just use PCOMP and it knows how to invoke the assembler? I think I tried that and it failed. I don't know how how to invoke the assembler. Do you?
There is a library called ASSEM. There is an FBIN, SAVE, and source UNDR88.
@hesam66 says he also has some fixes:
I've fixed som 39 year old bugs in the MDL version of Zork! Now it's possible to play the original game and type things like "PLAY VIOLIN", "PLAY THIEF" and "HELLO, SAILOR" without crashing the parser. It's also possible to save/restore the game during the thief melee and during the balloon ride. Se details at: https://github.com/heasm66/mdlzork
Maybe @jclaar fixed some things in his C++ translation.
Maybe @jclaar fixed some things in his C++ translation.
@larsbrinkhoff Is this referring to a specific issue? I don't see what you might be referring to here.
I just ran into an issue where if you type "u" in the Loud Room (rather than what you need to do), you get a crash. The issue is that ECHO-ROOM (in ACT1 254) attempts to do a:
<NOT <EMPTY?
>>
But in this case <2 ,PRSVEC> is a DIRECTION (not a structured type, but a NEWTYPE) and therefore, you can't call EMPTY? on it. EMPTY? only works on structured types. I fixed this by changing this line to:
<OR <TYPE?
DIRECTION> <NOT <EMPTY? >>>
Note: I'm using the ZORK sources from this (pdp-10/its) repository -- not your updated ones.
Ah, I see you fixed this in your version too! But your fix is simpler (and more elegant than mine). You changed the line to simply:
<PRSO>
which should work fine because it will either return #FALSE() or something else.
@jclaar, sorry for the confusion (no pun intended). I didn't mean any specific issue.
So to clarify, have you found and fixed any bugs when translating Zork from MDL to C++?
@eswenson1, where did you find the fix? There are potentially four places to check: Supnik, Rusotto, Claar, and Åsman.
I found the fix here: https://github.com/heasm66/mdlzork/blob/master/mdlzork_810722/patched_confusion/act1.mud
@eswenson1 Just to be clear. The fix you found is done by Russotto. In my structure the "original_source" is in this case the files that Bob Supnik lifted way back and the "patched_confusion" for the 1981 files are mostly the patches that Russotto did to make it run under Confusion. Beyond that I did a couple of changes that I documented in the readme.md.
Thanks. I admit I couldn't figure out who fixed what. Thanks for the explanation.
I'm thinking of doing a data analysis of the development (evolution) of Zork and matching it with the articles "History of Zork" in New Zork Times (found here and here).
Currently I know of four batches of source-files with hopefully a fifth batch coming soon.
I wonder about the usernames and timestamps of these files. If you look at the tape.999-file in the lcf-directory it looks like this:
1 EJS ACT1 253 1 4/12/80 09:27:58.5
2 EJS ACT2 92 1 4/12/80 09:28:42
3 EJS ACT3 198 1 4/12/80 09:29:13.5
4 EJS ACT4 231 1 4/12/80 09:30:23
5 EJS B 176 1 4/12/80 09:52:30.5
6 EJS BUILD CMD 1 4/12/80 10:33:39
7 EJS DEFS 171 1 4/12/80 09:52:46
8 EJS DISP1 2 1 4/12/80 09:53:03
9 EJS DUNG 354 1 4/12/80 09:18:39
10 EJS IMPL 123 0 4/12/80 09:53:16.5
11 EJS MAKSTR 44 0 4/12/80 09:53:33.5
12 EJS MELEE 137 0 4/12/80 09:53:46.5
13 EJS PARSER 130 0 4/12/80 09:53:57.5
14 EJS POINTS TXT 0 4/12/80 10:33:47
15 EJS PPAPER TXT 0 4/12/80 10:33:55.5
16 EJS PRIM 9 0 4/12/80 09:54:09.5
17 EJS ROOMS 393 0 4/12/80 09:54:21.5
18 EJS SR 54 0 4/12/80 09:54:44
19 EJS SYNTAX 7 0 4/12/80 09:54:56.5
20 EJS TELL 152 0 4/12/80 10:01:06.5
21 EJS TYPHAK 16 0 4/12/80 10:01:20
22 EJS UTIL 16 0 4/12/80 10:01:29 E-O-T
Is the username here the name of the one doing the backup, the one creating the file or the one last writing the file?
Is the timestamp from the last write to the file or the time of the backup?
Bonus question: Is there files, in this project, with more metadata than in the lcf-directory (Ex. The files I have from 1979 & 1981 only have the extension .mud, not the version number)?
EDIT: Looking in the lcf-directory (dung.354: row 5149, 5153) it says: "7/22/81" but the timestamps above says: "4/12/80". How is this possible?
@heasm66, that's great! I very much like people to do this kind of deep analysis.
The user name in the listing is also the directory name, and is the person doing the backup: @eswenson1. His account of the events is here: #813. The timestamps are from the time of the copy. The original "last write" timestamps for this set of files are lost.
As you can see in @taa01776's "History", he says the directory name for the source code was CFS. That could have been true for some time period, but all evidence I can see from the backup tapes point to the directory being LCF. CFS was only used for binary files.
The "7/22/81" date should be from Bob Supnik's fileset. The EJS copy has dates from /79.
Commit 1b555896ebae8fa122210322e0b01490a9bc02a4 has the EJS files with original filenames.
I see these two dates in the EJS fileset. Note the slight inconsistency.
"There is an issue of US NEWS & DUNGEON REPORT dated 3/17/79 here."
and 12/11/79 Late G.U.E. Edition
I probably created a personal tape, and used the tape number 999. That is very much something I might do. I FTP'ed the files from DM to MIT-MULTICS, where I knew none of the DM implementors could find/delete my stolen files. This process destroyed the real file dates. At some future point (probably the next day or so, given that I was obsessed with the sources back then -- still am, I guess), I FTP'ed them back to ITS, encrypted them, and put them in an ITS archive. I think I renamed the archive to some non-standard name and made it look like a binary file so that no one could tell that it was an archive of Zork sources. At some time, I printed them all out on MC's XGP printer (I still have the printouts). I probably then created "tape 999" with the files and kept that tape for many, many years -- until my wife "encouraged me" to "throw out all that junk that you'll never look at again". I was a dutiful husband, alas, but I did manage to preserve my Zork maps and printouts. I have them in my home office and recently used them to play through the FORTRAN Dungeon on Multics and the ITS Zork I recently built on ITS.
Fantastic story!
This is probably the only time since chilldhood I wish I was a couple of years older to have "been there" during this exciting times but I was only 10 years old at the time.
I diff:ed the files that I have over at my "Confusion"-repo and the original files I had in the 1979 & 1981 folders are identical to the files here. I have now updaded them with the correct version-number instead of the generic ".mud"-extension they had.
As you may know, DUMP saves information about all backup tapes. TAPE 999 is no different, and the backup record is in .TAPE5; TAPE 999 dated 1979-05-16 on at least three ToTS tapes. My "tape-dir" tool doesn't handle it well, but enough to recognize some of the file names.
The only timestamp I have found for the 1979/1981 files is for SR 54 - 1978-11-29 19:34:04.
I have a theory that after January 1978 (or thereabouts) no Zork sources were backed up because of the file protection (see #850). The fact that very few DM tapes have been preserved is probably also a contributing factor.
@heasm66 Well, I acted with the maturity level of about a 10-year old with respect to mastering Zork and then stealing the sources. While I should have been working on my thesis, I was mostly playing Zork. When I should have been studying for exams, I was probably playing Zork. And when I should have been sleeping, I was probably playing Zork. And people wondered why I overslept and missed my early-morning classes!
I'm at that stage now, except hacking ITS!
In every version I've tried up until the 1979 one the content of the "sandwich bag" contains "a .lunch".
>invent You are carrying: A sandwich bag with a clove of garlic, and a .lunch A bottle with a water
This is, for example, defined in line 219 of the dung.129-file.
Because this "spelling mistake" was present from the first version from June 1977 up until at least Jan 1978 and never got corrected I wonder if it's some kind of internal joke that I just don't get. Anybody that knows?
In MIDAS (the assembler used on ITS), the mnemonics for the system calls (UUOs, actually) all started with “.”: .OPEN, etc. .LUNCH? might be taken as a combination of assembly language and Muddle, since Muddle’s predicates all ended with ? (vs. LISP, where they ended with “p”). It meant, “time to get lunch?” -ta
Ceterum autem censeo Microsoftem esse delendam.
From: heasm66 notifications@github.com Sent: Friday, January 22, 2021 8:49 AM To: PDP-10/its its@noreply.github.com Cc: Anderson, Timothy A. taa@stresearch.com; Mention mention@noreply.github.com Subject: Re: [PDP-10/its] Zork fixes from various places (#1965)
WARNING: This message originates from outside the STR organization. Please take appropriate care in opening any links or attachments.
In every version I've tried up until the 1979 one the content of the "sandwich bag" contains "a .lunch".
invent You are carrying: A sandwich bag with a clove of garlic, and a .lunch A bottle with a water
This is, for example, defined in line 219 of the dung.129-file.
Because this "spelling mistake" was present from the first version from June 1977 up until at least Jan 1978 and never got corrected I wonder if it's some kind of internal joke that I just don't get. Anybody that knows?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/PDP-10/its/issues/1965#issuecomment-765409335, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAM5GXPIS3LJH52J5RO6TELS3F65JANCNFSM4R67TE3A.
Thank you!
I had a nagging feeling it could be something like that.
Tim beat me to an explanation, regarding .lunch and .lunch?.
But as an aside from a LISPer, back at LCS, we used to ask our coworkers whether they were ready to have lunch by asking "LUNCHP?" The affirmative answer, of course, was "T".
On the second floor, you would’ve gotten puzzled looks, of course—we spoke a different language. -ta
Ceterum autem censeo Microsoftem esse delendam.
From: Eric Swenson notifications@github.com Sent: Friday, January 22, 2021 9:39 AM To: PDP-10/its its@noreply.github.com Cc: Anderson, Timothy A. taa@stresearch.com; Mention mention@noreply.github.com Subject: Re: [PDP-10/its] Zork fixes from various places (#1965)
WARNING: This message originates from outside the STR organization. Please take appropriate care in opening any links or attachments.
Tim beat me to an explanation, regarding .lunch and .lunch.
But as an aside from a LISPer, back at LCS, we used to ask our coworkers whether they were ready to have lunch by asking "LUNCHP?" The affirmative answer, of course, was "T".
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHubhttps://github.com/PDP-10/its/issues/1965#issuecomment-765446556, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAM5GXPBTKPUUMRDTOPWWYDS3GEZDANCNFSM4R67TE3A.
@eswenson1 Am I understanding it correctly that you have access to, not yet released publically, tools that successfully make it possible to compile/run a 616 version Zork + 100 points end-game? And that you have created a MADADV SAVE for Muddle v 55?
(I'm trying to piece together info from this thread and https://github.com/PDP-10/its/issues/832).
I tried changing the Muddle version info (the first two ASCII-chars) on a file, MADADV JAN28, from 54 to 56 to see if a SAVE-file could run in a later Muddle. It failed, of course. I didn't have much hope it would work, but you got to try...
I could have told you that wouldn't work (I tried it too!)
@eswenson1 Am I understanding it correctly that you have access to, not yet released publically, tools that successfully make it possible to compile/run a 616 version Zork + 100 points end-game? And that you have created a MADADV SAVE for Muddle v 55?
(I'm trying to piece together info from this thread and https://github.com/PDP-10/its/issues/832).
Yes. And I've played it all the way through to the end -- including endgame.
Maybe this is of interest to this project?
Published the first two parts in the series "Recreating Zork 285 in ZIL". here: https://intfiction.org/t/recreating-zork-285-in-zil/53841 and here: https://github.com/heasm66/mdlzork/tree/master/zork_285/doc
Thanks @heasm66, great writeup!
Now would be a good time to revisit the bug fixes mentioned here.
Adding this: https://github.com/heasm66/mdlzork/issues/33
Why did you add the above reference here, @larsbrinkhoff? The current 616+100-point Zork in DB doesn’t have this issue. I can issue the “noobj” command and have everything behave properly — no MDL errors either.
Interesting... This is a bit OT and not so important when the full Zork worksbut I did a little test-function:
<DEFINE TEST (A B) <OR <AND <NOT .A> <NOT .B>> <NOT <0? <CHTYPE <ANDB .A 1> FIX>>>>>
It produces an error when run interactivly (as Confusion does) if first parameter is <>
and second T
(MUD54 & 56).
<TEST <> <>>$
T
<TEST 1 <>>$
T
<TEST <> T>$
*ERROR*
ARG-WRONG-TYPE
ANDB
Could it behave differently when it's compiled (<>
compiles to 0
and ANDB
won't complain)?
I tried it in MDL 55 and got the same error:
ES>mud55↑K!
MUDDLE 55 IN OPERATION.
LISTENING-AT-LEVEL 1 PROCESS 1
<DEFINE TEST (A B) <OR <AND <NOT .A> <NOT .B>> <NOT <0? <CHTYPE <ANDB .A 1> FIX>>>>>◊
TEST
<TEST <> <>>◊
T
<TEST 1 <>>◊
T
<TEST <> T>>◊
*ERROR*
ARG-WRONG-TYPE
ANDB
LISTENING-AT-LEVEL 2 PROCESS 1
A stack trace shows:
<FRAMES>◊
0 ERROR [ARG-WRONG-TYPE!-ERRORS ANDB]
1 ANDB [#FALSE () 1]
2 EVAL [<ANDB .A 1>]
3 EVAL [<CHTYPE <ANDB .A 1> FIX>]
4 EVAL [<0? <CHTYPE <ANDB .A 1> FIX>>]
5 EVAL [<NOT <0? <CHTYPE <ANDB .A 1> FIX>>>]
6 OR [(<AND <NOT .A> <NOT .B>> <NOT <0? <CHTYPE <ANDB .A 1> FIX>>>)]
7 EVAL [<OR <AND <NOT .A> <NOT .B>> <NOT <0? <CHTYPE <ANDB .A 1> FIX>>>>]
8 EVAL [<TEST <> T>]
9 LISTEN []
TOPLEVEL
So ANDB is not expecting a #FALSE () parameter. However, when you compile TEST, you get different behavior:
ES>mud55↑K!
MUDDLE 55 IN OPERATION.
LISTENING-AT-LEVEL 1 PROCESS 1
<FLOAD "ejs4;mtest nbin">◊
"DONE"
<TEST <> <>>◊
T
<TEST 1 <>>◊
T
<TEST <> T>◊
#FALSE ()
I added the above reference because this issue is about collecting and evaluating Zork bug fixes from various places.
Yes, but it doesn't apply to the latest version of zork. Are you suggesting we try to back-port this to the old zorks?
No, just the latest. I don't immediately check all bug fixes whether they apply, just collecting pointers.
@eswenson1 That explains it. Thank you!
Trying the 616+100
*:zork
This Zork created March 3, 2023.
West of House
This is an open field west of a white house, with a boarded front door.
There is a small mailbox here.
A rubber mat saying 'Welcome to Zork!' lies by the door.
>help
File not found.
>info
File not found.
>
These commands get the text from the external files MADADV HELP
and MADADV INFO
. There are versions of these files in MADMAN;
and they seems to be contemporary with the 1981 files (I'm comparing the text with the text in Dungeon 3.2b (Bob Supnik's Fortran conversion). Are there any never versions of these files found on any newer tape that could be used?
EDIT: Copying the files to CFS;
fixes 'help' and 'info'.
And then there's this (when you quit or restart), anya ideas why that is?
>quit
Your score would be 0 [total of 616 points], in 3 moves.
This score gives you the rank of Beginner.
Do you wish to leave the game? (Y is affirmative):
y
I'm sorry, you seem to have encountered an error in the program.
Please describe what happened:
Bug (terminate with altmode):
We changed the directory from MADADV to CFS to keep the two versions of zork separate. It would appear that the new zork is looking in CFS and since we didn't place a copy or link to the files in that directory, it is failing. I'll fix. Thanks for finding that.
I'm not sure that we really have better/newer versions of the MADADV HELP and MADADV INFO files than we used for the old MDL 54 zork. I've compared the latest ones I can find and while they differ a bit, there is no substantive changes. In fact the ones we have in MADADV are probably the best versions.
Regarding your "I"m sorry, ..." error, I cannot reproduce this. When I quit, I get this:
zork^K!
This Zork created February 27, 2023.
West of House
This is an open field west of a white house, with a boarded front door.
There is a small mailbox here.
A rubber mat saying 'Welcome to Zork!' lies by the door.
>score
Your score would be 0 [total of 616 points], in 1 move.
This score gives you the rank of Beginner.
>quit
Your score would be 0 [total of 616 points], in 2 moves.
This score gives you the rank of Beginner.
Do you wish to leave the game? (Y is affirmative):
y
:KILL MUD55$J
*
Diffing our 1981 copy of Zork sources against http://www.russotto.net/~mrussotto/confusion/mdlzork.tgz, there are some updates.