Stories
Slash Boxes
Comments

SoylentNews is people

posted by Fnord666 on Friday May 08 2020, @05:32PM   Printer-friendly
from the frobizz dept.

Source code for seminal adventure game Zork on dead mainframe exhumed onto GitHub:

Source code for seminal adventure game has been Zork[sic] recovered and published on GitHub.

While classic adventure games (aka interactive fiction) are well represented in the Internet Archive - there's plenty of playable Zork versions here - this new trove is source code that's been retrieved from the Massachusetts Institute of Technology, Tapes of Tech Square (ToTS) collection at the MIT Libraries Department of Distinctive Collections (DDC).

If you access the repo and its README you're told the source was written "in the MDL programming language written on a PDP-10 timeshare computer running the ITS operating system".

[...] The code in the repo comes from 1977, before the game was commercialised but at a time it was informally distributed.


Original Submission

 
This discussion has been archived. No new comments can be posted.
Display Options Threshold/Breakthrough Mark All as Read Mark All as Unread
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
  • (Score: 5, Informative) by martyb on Friday May 08 2020, @06:34PM (10 children)

    by martyb (76) Subscriber Badge on Friday May 08 2020, @06:34PM (#991756) Journal

    This brings back memories!

    First, the code is a variant of LISP, except "<" and ">" replaced "(" and ")", respectively. The first parameter is the operator; subsequent parameters were operands, each of which could, in turn, be nested. (foo (bar baz) (buz qux)) would invoke foo; the first operand to foo would be the result of what came from bar operating on baz and the second operand to foo would be the result of buz operating on qux.

    ITS [wikipedia.org] (on which this was developed) was in many respects a precursor to TENEX [wikipedia.org] and later TOPS-10 and TOPS-20. I recall my amazement when I first saw automatic command completion... including prompting of permitted operands.

    The operating system provided a kind of version control. Each time a file was updated, the new file would be provided an incremented suffix. So, if I edited a file "foo.3" and saved the changes, a file "foo.4" would automatically be created. The last-numbered version of a file would be used by default. So, in this case "foo" would default to reference "foo.4" One could, of course, refer to explicit versions of a file. There was a command to set the number of maximum "backups". During a burst of rapid code development, a value of 10 could be useful. Otherwise, 3 seemed to provide a compromise between verbosity of listing files, and access to prior versions.

    See, for example, a diff between the files "act1.37" and "act1.38" or between "np.92" and "np.93".

    The file "madadv.help" provides a synopsis of the syntax accepted by the game. The reference to only 5 characters being needed to distinguish commands and objects has an interesting backstory. The system was designed around 36-bit "words". One could conveniently pack 5 characters (7-bits each) per word. Basically ASCII with no high-order bit.

    Lastly, there were some low-level commands needed in these sources to save and restore games. Also there are hard-coded things like "" and "" which are for Carriage Return and Linefeed, respectively.

    Given the timeframe, 1977(!) and the fact that the Altair 8800 [wikipedia.org] did not yet exist, it is amazing what they were able to construct with the comparatively limited resources available at the time!

    --
    Wit is intellect, dancing.
    Starting Score:    1  point
    Moderation   +4  
       Informative=4, Total=4
    Extra 'Informative' Modifier   0  
    Karma-Bonus Modifier   +1  

    Total Score:   5  
  • (Score: 3, Funny) by Rosco P. Coltrane on Friday May 08 2020, @06:42PM (1 child)

    by Rosco P. Coltrane (4757) on Friday May 08 2020, @06:42PM (#991762)

    Just you wait until they rediscover the PDP-7 port of Castle Wolfenstein. Ah, the memories! Rendering 3D in realtime on punchcards was friggin' costly though...

    • (Score: 3, Insightful) by Ethanol-fueled on Friday May 08 2020, @07:31PM

      by Ethanol-fueled (2792) on Friday May 08 2020, @07:31PM (#991793) Homepage

      Ah, those were the good ol' days, back when Nazis were actually the bad guys and killin' 'em was fun, especially later between the 3D of Wolf 3D and the legendary exploding Hitler-head of Bionic Commando.

      Then every new game with Nazis started becoming a heavy-handed lesson about heroes being communist interracial lesbian love-triangles featuring at least one butch tranny, and bad guys being Christian White Males whether or not they were actual Nazis. And every straight White woman paired with a Black male of Western-African origin. I guess it's what happens when the game design industry gets taken over by people like these. [nocookie.net]

  • (Score: 3, Informative) by carguy on Friday May 08 2020, @06:56PM

    by carguy (568) on Friday May 08 2020, @06:56PM (#991771)

    From the User Environment section of the ITS wiki page:

    The environment seen by ITS users was philosophically significantly different from that provided by most operating systems at the time.[2]

            Initially there were no passwords, and a user could work on ITS without logging on.[4] Logging on was considered polite, though, so people knew when one was connected.
            To deal with a rash of incidents where users sought out flaws in the system in order to crash it, a novel approach was taken. A command that caused the system to crash was implemented and could be run by anyone, which took away all the fun and challenge of doing so. It did, however, broadcast a message to say who was doing it.
            All files were editable by all users, including online documentation and source code.
    ...

  • (Score: 2, Funny) by Anonymous Coward on Friday May 08 2020, @07:13PM (1 child)

    by Anonymous Coward on Friday May 08 2020, @07:13PM (#991787)

    Finally someone managed to solve the LISP problem of too many parentheses!

    • (Score: 2) by hendrikboom on Monday May 11 2020, @01:05PM

      by hendrikboom (1125) on Monday May 11 2020, @01:05PM (#992795) Homepage Journal

      There's a more effective way to do this. Pick *one* other character (I picked '/' decades ago. Some people may prefer ';' to '/')

      Then treat phrases like

            ( a b c / d e f / g / h j . k)

      as equivalent to

          ( a b c ( d e f (g ( h j . k ))))

      This eliminates a *lot* of parentheses.
      And it works well when you redesign a few other Lisp bits of Lisp syntax:

      (let a b c) instead of (let ((a b)) c)

      Then you can write
      ( let a b
      / if (eq a 'foo) e
      / let c d
      / let e f
      / onion soup c e
      )

      The syntactic counterpart of tail recursion.
      An order of magnitude reduction in parentheses.
      Intermingling 'if' and 'let' is easy without deep nesting.
      No significant change in Lisp philosophy.
      Code and data are still as equivalent as before.
      Leads to a coding style in which the (syntactically) largest operand of an operator tends to be the last one.

      There's a Racket #lang module that does this with '#/'. Not nearly as neat in my opinion, but here it is:
      https://docs.racket-lang.org/parendown/index.html [racket-lang.org]

  • (Score: 3, Interesting) by hubie on Friday May 08 2020, @07:33PM (3 children)

    by hubie (1068) on Friday May 08 2020, @07:33PM (#991795) Journal

    Ah yes, that is the same version control I remember from VAX/VMS. You'd go along for a while and then you could type "purge" to keep only the highest numbered file. Accidentally purging copies I wanted to save happened from time to time.

    If I may go off on a tangent, another thing I remember from VMS was that DECNET was all connected together. You could change directory from your account to someone else's just like you do on unix, but you could also do it across the world by typing (I think) OTHER_MACHINE::other_directory. You had the equivalent of the user permissions on unix, but you could easily mount a disk across the world as if it was mounted to your machine. I miss those days. I didn't need software that uses 50% of my computer resources to be constantly running in the background and scanning for "threats" and such.

    • (Score: 0) by Anonymous Coward on Friday May 08 2020, @10:00PM (1 child)

      by Anonymous Coward on Friday May 08 2020, @10:00PM (#991842)

      > I didn't need software that uses 50% of my computer resources to be constantly running in the background and scanning for "threats" and such.

      Yes because you spent 50% of *your* resources doing that. Someone automated it and now you're butthurt. Aw you're butthurt.

      • (Score: 3, Touché) by Runaway1956 on Saturday May 09 2020, @01:31AM

        by Runaway1956 (2926) Subscriber Badge on Saturday May 09 2020, @01:31AM (#991923) Homepage Journal

        You've seen the T-shirt that says "stupidity should hurt"? What they meant was, stupidity should hurt the stupid people. Specifically, stupidity should hurt the people who designed an insecure system, as well as those people who pay good money for the "privilege" of running those insecure systems.

        Upgrade to *nix.

        --
        The only reason for not believing in it (Marxism) is that it doesn't work. - Thomas Sowell
    • (Score: 2) by martyb on Saturday May 09 2020, @03:33AM

      by martyb (76) Subscriber Badge on Saturday May 09 2020, @03:33AM (#991946) Journal

      Back in the early 80s when I was at DEC, I remember printing on a line printer (with just 2 or 3 pages of 132-column, green-bar paper) the a map of the *entire* DECNET network. With plain old ASCII characters for *everything*.

      +-----------+    +-----------+
      | MAR-VAX-1 |----| MAY-T20-3 |--- ...
      +-----------+    +-----------+
            |                |
            |                +----
           ...

      (There was more but I had to chop it out to bypass the site lameness filter for "too much whitespace or repetition".)

      DECNET -- yes, local or remote -- from the user side of things they were equivalent (except for network delays, of course!).

      I've occasionally wondered how much DECNET path-names influenced Microsoft's UNC [wikipedia.org] names.

      --
      Wit is intellect, dancing.
  • (Score: 2) by krishnoid on Friday May 08 2020, @10:01PM

    by krishnoid (1156) on Friday May 08 2020, @10:01PM (#991844)

    First, the code is a variant of LISP, except "<" and ">" replaced "(" and ")", respectively.

    What profane manner of heathenry is this? Capture the blasphemer and bring him before us!