Thank you for posting those files at the repository. I was looking through the DOC file. I never realized the original Zork had the OOPS feature!
Lebling agreed to put his Zork logotype on a t-shirt.
White design for black tshirts would be nice.
Good point. White on black is now available: zork | techsquare
Ordered.
There appears to be something missing here. This builds an ITS emulator? How do you start ITS? How you get Zork running?
I remember from ITS, at the DDT, you do :zork or zork ctrl-K. But does this ITS come with zork pre installed? Or do you also need to suck down the other repo?
For the time being, I’m just interested in running zork, not my goal to recompile it or get a full ITS running unless i need to.
Maybe it’s available online somewhere? The mainframe version.
Even if you may not be interested in going for the full monty, others might want to try it: a way to do this is to built an emulated ITS environment within SIMH (which runs in Linux). Instructions are here, provided you know how to build SIMH. There are ready-install packages for SIMH in many distributions, such as Debian.
If you want to compile the emulator yourself, my recommendation is to go for Open-SIMH, which emulates dozens of old systems and environments, many of which have their own pages with software and repositories as well. ITS is just one of the many ones that can be emulated and run. No retrocomputing enthusiast should be without one!
This is my notes on how to compile ITS emulator under simh and commands inside ITS for starting/stopping/compiling zork + navigating in the OS. Hope it helps.
(Apologies if there’s some occasional swedish word in the notes that I missed to translate…)
Build ITS
=========
1. Install cygwin
+autoconf
+libusb 1.0-devel
+gcc-g++
+make
+git
+gcc-fortran (to compile dungeon)
+libsdl2-devel
2. Star cygwin and navigate to home directory
3. git clone https://github.com/PDP-10/its.git
4. cd its
5a. make EMULATOR=simh
needs to run 2 times
1st time ends in error 2 after about 30 min
2nd time installs and takes a fairly long time (2h)
2nd time also end in error 2 (curses.h tools/supdup)
5b. make EMULATOR=klh10 (recommended?)
Build ITS for Ubuntu 20.04
==========================
1. Packets (sudo apt-get install [packet]):
gcc
libsdl2-dev
libpcap-dev
libvdeplug-dev
libncurses-dev
expect
autoconf
2. sudo git clone https://github.com/PDP-10/its its
3. cd its
4a. sudo make EMULATOR=simh
(takes long time... 2 h, at least)
4b. sudo make EMULATOR=klh10 (recommended?)
(takes long time... 2 h, at least)
Start ITS
=========
1. In cygwin (/its): ./start
2. If you see the DSKDMP prompt, type its, press [Enter], and then [ESC] g
3. Eventually, you will see SYSTEM JOB USING THIS CONSOLE. You are now ready to log in, so type Control-Z.
4. When you see "Happy hacking!", log in with :login <user>
5. You're in!
Useful commands
===============
Start program : :prog
Ex : :muddle
End/change program : Mostly ^Z. This leaves the process running, terminate process with :kill
dired (:dired) : Remove files with wildcard
EX : :dired
@act ZILCH (choose "directory")
@d ZILCH *
@d * ZILCH
Create file in new directory and edit it with emacs
:print ZILCH;..new. (udir)
:emacs ZILCH;ZILCH
Paste text
^X^S (saves file)
DDT cheat sheet for Unix users
------------------------------
To get access to a terminal, first type ^Z (Control-Z). After that, you can log in.
The ◊ character represents typing ESC, or holding down the Meta key. On a text terminal, it will show up as $.
Unix command DDT command Colon command
login user user◊u :login user
logout ◊◊u :logout
TERM=vt52 :tctyp vt52
TERM=vt100 :tctyp aaa
TERM=ansi :crtsty ansi
clear ^L :clear
ls ^F :listf
ls -l ◊◊^F :lf
ls dir dir^F :listf dir
ls / ^R m.f.d. (file) :print m.f.d. (file)
ls *.foo ^R dir: second foo :print dir: second foo
more file ^R file :print file
mkdir dir ^R dir;..new. (udir):print dir;..new. (udir)
cd dir dir◊^S :cwd dir
/foo/bar :foo;bar
cp f1 f2 ◊^R f1,f2 :copy f1,f2
rm file ^O file :delete file
ln f1 f2 ◊^O f1,f2 :link f1,f2
mv f1 f2 ◊◊^O f1,f2 :rename f1,f2
mv file dir :move file,dir
emacs emacs^K :emacs
ps ◊◊v :listj
kill pid pid◊^X :job pid then :kill
kill -9 pid :lock then pid gun
sudo -u u cmd u◊◊^S cmd
top peek^H :peek
^U ^D
^C ^G
^Z ^Z
^D ^C
fg ◊P :continue
bg ^P :proceed
man 2 open :call open
dmesg :sysmsg
uptime :time
Terminate ITS
=============
:lock
5down
Y
Ctrl-C
Ctrl+Alt Gr-\
exit
Start MUDDLE (56)
=================
:muddle
Start MUDDLE (54)
=================
:cwd mudsav
:mud54
Start Zork inside MUD54
=======================
<RESTORE "MADMAN; MUDADV SAVE">$
Configure console with scroll and working backspace
===================================================
:tctyp aaa scroll no more width 100
ITSTAR & DUMP
=============
#To import into ITS:
# 1. ./start
# 2. Ctrl-\ to get the "sim>" prompt
# 3. attach tu0 madman/madman.tape
# 4. continue
# 5. its<CR>$G
# 6. Ctrl-z
# 7. :login <user>
# 8. :dump
# 9. load
# 10. madman;*<CR><CR>
# 11. quit
# 12. :logout
# 13. Ctrl-\
# 14. detach tu0
# 15. continue
230303
======
:LISTF LCF Source code to Zork 616+100
:LISTF CFS MADADV SAVE for Zork 616+100
:MDL Start interpreter MUD56
:MUD55 Start interpreter MUD55
:MUDSAV;MUD54 Start interpreter MUD54
"MADMAN; MADADV SAVE" Is game of 28th Januari 1978
Start Zork 616+100 (7/22/81) inside MUD55
=========================================
:mud55
<RESTORE "CFS; MADADV SAVE">$
Compiling MDL
=============
https://github.com/PDP-10/its/blob/master/doc/muddle.md
Compiling Zork
==============
Use predefined scripts.
:listf lcf;
:xxfile lcf;comp log_lcf;comp xxfile (~ 20 min, logfile = lcf;comp log)
:xxfile lcf;zork log_lcf;zork xxfile (~ 5 min, logfile = lcf;zork log)
LCF;COMP XXFILE
===============
:pcomp
<SNAME "LCF">
<FILE-COMPILE "prim >"> (ESC p)
<FILE-COMPILE "defs >"> (ESC p)
<FILE-COMPILE "util >"> (ESC p)
<FILE-COMPILE "makstr >"> (ESC p)
<FILE-COMPILE "typhak >"> (ESC p)
<QUIT>
:assem "lcf;tell >" "lcf;tell nbin"
:pcomp
<FLOAD "lcf;comp preamb">
<FILE-COMPILE "rooms >"> (ESC p)
<FILE-COMPILE "parser >"> (ESC p)
<QUIT>
<FLOAD "lcf;comp preamb">
<FILE-COMPILE "act1 >"> (ESC p)
<FILE-COMPILE "act2 >"> (ESC p)
<QUIT>
<FLOAD "lcf;comp preamb">
<FILE-COMPILE "act3 >"> (ESC p)
<FILE-COMPILE "act4 >"> (ESC p)
<QUIT>
<FLOAD "lcf;comp preamb">
<FILE-COMPILE "melee >"> (ESC p)
<FILE-COMPILE "sr >"> (ESC p)
<QUIT>
LCF;COMP PREAMB
===============
<SNAME "LCF">
<FLOAD "prim nbin">
<FLOAD "defs nbin">
<FLOAD "util nbin">
<FLOAD "tell nbin">
<FLOAD "makstr nbin">
<FLOAD "typhak nbin">
<OVERFLOW <>>
LCF;ZORK XXFILE
===============
:mudsav;mud55
<BLOAT 150000 1 3 2000 30 9>
<SNAME "LCF">
<FLOAD "prim nbin">
<FLOAD "defs nbin">
<FLOAD "util nbin">
<FLOAD "makstr nbin">
<FLOAD "typhak nbin">
<FLOAD "rooms nbin">
<FLOAD "parser nbin">
<FLOAD "act1 nbin">
<FLOAD "act2 nbin">
<FLOAD "act3 nbin">
<FLOAD "act4 nbin">
<FLOAD "tell nbin">
<FLOAD "melee nbin">
<FLOAD "sr nbin">
<FLOAD "dung">
<RSUBR-LINK <>>
%%<HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> ,ERRH>
<SETG MUD-HAND <OFF <3 <GET ,INCHAN INTERRUPT>>>>
%%<SETG ZORK-HAND <OFF <HANDLER <GET ,INCHAN INTERRUPT> ,CTRL-S>>>
<SETG END-GAME-EXISTS? T>
<GC-MON T>
<PSETG WINNERS '["EJS", "TAA"]>
<SAVE-IT "cfs;madadv save" <>>
<QUIT>
Error 2, SIMH, first run
========================
In file included from t10backup.c:28:
t10backup.c: In function ‘downcase’:
t10backup.c:361:17: warning: array subscript has type ‘char’ [-Wchar-subscripts]
361 | if (isupper(*s)) *s = tolower(*s);
| ^~
t10backup.c: In function ‘buildfilenames’:
t10backup.c:372:32: warning: ‘%s’ directive writing up to 99 bytes into a region of size between 0 and 99 [-Wformat-overflow=]
372 | sprintf (filespec [0], "%s:%s", filedev, filedir);
| ^~ ~~~~~~~
t10backup.c:372:5: note: ‘sprintf’ output between 2 and 200 bytes into a destination of size 100
372 | sprintf (filespec [0], "%s:%s", filedev, filedir);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
t10backup.c:376:30: warning: ‘%s’ directive writing up to 99 bytes into a region of size between 0 and 99 [-Wformat-overflow=]
376 | sprintf (filespec [6], "%s.%s", filename, fileext);
| ^~ ~~~~~~~
t10backup.c:376:3: note: ‘sprintf’ output between 2 and 200 bytes into a destination of size 100
376 | sprintf (filespec [6], "%s.%s", filename, fileext);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
t10backup.c:388:32: warning: ‘%s’ directive writing up to 99 bytes into a region of size 98 [-Wformat-overflow=]
388 | sprintf (endof (cname), "..%s", filespec [6]);
| ^~ ~~~~~~~~~~~~
t10backup.c:388:5: note: ‘sprintf’ output between 3 and 102 bytes into a destination of size 100
388 | sprintf (endof (cname), "..%s", filespec [6]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
t10backup.c:385:37: warning: ‘sprintf’ may write a terminating nul past the end of the destination [-Wformat-overflow=]
385 | sprintf (endof (cname), ".%s", filespec [i]);
| ^
t10backup.c:385:9: note: ‘sprintf’ output between 2 and 101 bytes into a destination of size 100
385 | sprintf (endof (cname), ".%s", filespec [i]);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc -g t10backup.o tapeio.o -o t10backup
cc -g -Wall -c -o read20.o read20.c
read20.c: In function ‘expmatch’:
read20.c:558:30: warning: implicit declaration of function ‘re_exec’; did you mean ‘regexec’? [-Wimplicit-function-declaration]
558 | if ((match = re_exec(topsname)) == -1)
| ^~~~~~~
| regexec
In file included from read20.c:22:
read20.c: In function ‘main’:
read20.c:868:43: warning: array subscript has type ‘char’ [-Wchar-subscripts]
868 | argc && isdigit(**argv);
| ^~~~~~
cc -g read20.o tapeio.o -o read20
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: read20.o: in function `expmatch':
/home/heasm/its/tools/tapeutils/read20.c:558:(.text+0xc29): undefined reference to `re_exec'
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: read20.o: in function `main':
/home/heasm/its/tools/tapeutils/read20.c:854:(.text+0x1abe): undefined reference to `re_comp'
collect2: error: ld returned 1 exit status
make[1]: *** [<builtin>: read20] Error 1
make[1]: Leaving directory '/home/heasm/its/tools/tapeutils'
make: *** [Makefile:349: tools/tapeutils/tapewrite] Error 2
Error #2
========
make[1]: Entering directory '/home/heasm/its/tools/supdup'
cc -g -Wall -c -o supdup.o supdup.c
supdup.c: In function ‘get_host’:
supdup.c:440:16: warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
440 | hostname = host->h_name;
| ^
cc -g -Wall -c -o charmap.o charmap.c
cc -g -o supdup supdup.o charmap.o -lncurses -lresolv
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: supdup.o: in function `dns_addrs_of_name':
/home/heasm/its/tools/supdup/supdup.c:290:(.text+0x2b6): undefined reference to `__ns_initparse'
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /home/heasm/its/tools/supdup/supdup.c:295:(.text+0x36b): undefined reference to `__ns_msg_getflag'
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /home/heasm/its/tools/supdup/supdup.c:297:(.text+0x3f2): undefined reference to `__ns_msg_getflag'
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /home/heasm/its/tools/supdup/supdup.c:306:(.text+0x486): undefined reference to `__ns_parserr'
/usr/lib/gcc/x86_64-pc-cygwin/11/../../../../x86_64-pc-cygwin/bin/ld: /home/heasm/its/tools/supdup/supdup.c:314:(.text+0x521): undefined reference to `__ns_get16'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:24: supdup] Error 1
make[1]: Leaving directory '/home/heasm/its/tools/supdup'
make: *** [Makefile:374: tools/supdup/supdup] Error 2
Yes it builds the ITS emulator. See previous post on how to start Zork.
No, Zork is pre-installed.
There was an emulator running online before, see 1978 Zork running on PDP-10 emulator
At the moment it seems to be down or unavailable. @larsbrinkhoff?