PDP-10 / its

Incompatible Timesharing System
Other
850 stars 80 forks source link

Zork fixes from various places #1965

Open larsbrinkhoff opened 3 years ago

larsbrinkhoff commented 3 years ago

Diffing our 1981 copy of Zork sources against http://www.russotto.net/~mrussotto/confusion/mdlzork.tgz, there are some updates.

larsbrinkhoff commented 3 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.

eswenson1 commented 3 years ago

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?

larsbrinkhoff commented 3 years ago

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.

eswenson1 commented 3 years ago

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.

atsampson commented 3 years ago

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.

eswenson1 commented 3 years ago

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?

larsbrinkhoff commented 3 years ago

There is a library called ASSEM. There is an FBIN, SAVE, and source UNDR88.

larsbrinkhoff commented 3 years ago

@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

larsbrinkhoff commented 3 years ago

Maybe @jclaar fixed some things in his C++ translation.

jclaar commented 3 years ago

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.

eswenson1 commented 3 years ago

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.

eswenson1 commented 3 years ago

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.

larsbrinkhoff commented 3 years ago

@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++?

larsbrinkhoff commented 3 years ago

@eswenson1, where did you find the fix? There are potentially four places to check: Supnik, Rusotto, Claar, and Åsman.

eswenson1 commented 3 years ago

I found the fix here: https://github.com/heasm66/mdlzork/blob/master/mdlzork_810722/patched_confusion/act1.mud

heasm66 commented 3 years ago

@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.

eswenson1 commented 3 years ago

Thanks. I admit I couldn't figure out who fixed what. Thanks for the explanation.

heasm66 commented 3 years ago

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?

larsbrinkhoff commented 3 years ago

@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.

larsbrinkhoff commented 3 years ago

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

eswenson1 commented 3 years ago

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.

heasm66 commented 3 years ago

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.

heasm66 commented 3 years ago

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.

larsbrinkhoff commented 3 years ago

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.

larsbrinkhoff commented 3 years ago

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.

eswenson1 commented 3 years ago

@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!

larsbrinkhoff commented 3 years ago

I'm at that stage now, except hacking ITS!

heasm66 commented 3 years ago

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?

taa01776 commented 3 years ago

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.

heasm66 commented 3 years ago

Thank you!

I had a nagging feeling it could be something like that.

eswenson1 commented 3 years ago

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".

taa01776 commented 3 years ago

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.

heasm66 commented 3 years ago

@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).

heasm66 commented 3 years ago

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...

eswenson1 commented 3 years ago

I could have told you that wouldn't work (I tried it too!)

eswenson1 commented 3 years ago

@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.

heasm66 commented 2 years ago

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

larsbrinkhoff commented 2 years ago

Thanks @heasm66, great writeup!

larsbrinkhoff commented 1 year ago

Now would be a good time to revisit the bug fixes mentioned here.

larsbrinkhoff commented 1 year ago

Adding this: https://github.com/heasm66/mdlzork/issues/33

eswenson1 commented 1 year ago

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.

heasm66 commented 1 year ago

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)?

eswenson1 commented 1 year ago

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 ()
larsbrinkhoff commented 1 year ago

I added the above reference because this issue is about collecting and evaluating Zork bug fixes from various places.

eswenson1 commented 1 year ago

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?

larsbrinkhoff commented 1 year ago

No, just the latest. I don't immediately check all bug fixes whether they apply, just collecting pointers.

heasm66 commented 1 year ago

@eswenson1 That explains it. Thank you!

heasm66 commented 1 year ago

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):
eswenson1 commented 1 year ago

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.

eswenson1 commented 1 year ago

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
*