Compiling Dungeon on RT-11

From Computer History Wiki
Revision as of 20:04, 20 November 2023 by Flx (talk | contribs) (clean HTML markup)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Thanks to the countless comments on the SIMH list, and the final missing step from Peter Schorn, one of the source copies of Dungeon now builds.

Naturally you'll need SIMH's pdp11 emulator.

If you want to follow along, you’ll need the pdp11 emulator from SIMH, and the following disk images:

Then create an ini file like this:

set cpu 256k 
set rq0 rx50 
set rq1 rx50 
set rq2 rx50 
set rq3 rx50

att rk0 rtv4_rk.dsk 
att rk1 dunsrc.dsk

boot rk0

Then go ahead and run it:

PDP-11 simulator V3.8-1 
Disabling CR

RT-11SJ V04.00C

.D 56=5015

.TYPE V4USER.TXT 
Welcome to RT-11 Version 4. RT-11 V04 provides new hardware support 
and some major enhancements over Version 3B.

Please use the HELP command; it describes the new options in many 
of the utilities.

If you are using a terminal that requires fill characters, 
modify location 56 with a Deposit command before proceeding with 
system installation. LA36 DECwriter II and VT52 DECscope terminals 
do NOT require such modification.

.D 56=0

.

Hit Control+E and “insert” the first Fortran disk

Simulation stopped, PC: 156070 (MOV (SP)+,R2) 
sim> att rx0 fortran-iv-v021-compiler-files.img 
RX: buffering file in memory 
sim> c

Then we are going to do the following:

.ASSIGN RK0: OUP

.ASSIGN DX0 INP

.R PIP 
*SY:*.*=INP:FORTRA.HLP,DEMO.FOR 
*^C

.RUN INP:FORGEN 
Answer questions with: 
"?" or carriage return (<CR>) for information, 
YES(Y) for affirmation, anything else for NO.

A maximum of 56 lines are allowed per listing page. 
Is this acceptable? Y 
A maximum of 136 characters are allowed in a formatted 
(ASCII) record. Is this acceptable? Y 
A maximum of 6 channels may be open at a given time. 
Is this acceptable? Y 
The FORTRAN compiler can compile system-specific OPEN and CLOSE 
statement keywords for RT-11, RSX-11, and RSTS/E systems. These 
statements are currently compiled for the following system: RT-11 
Is this acceptable? Y 
FORTRAN can produce inline code for EAE, EIS or FIS hardware, 
or it can produce threaded (THR) code which is hardware independent. 
Should the compiler produce EAE code? N 
Should the compiler produce EIS code? N 
Should the compiler produce FIS code? N 
Should the compiler produce THR code? Y 
The inline compiler can optimize for SPEED or for SIZE. These 
optimizations are mutually exclusive. Do you want 
the optimization to be for SPEED? N 
Do you wish a threaded only compiler? Y 
Compiler options selection complete.

.@INP:F4LTHR

.R LINK 
*OUP:FORTRA=INP:FROOT///S 
*INP:F0,INLINE,OUP:DEFLTS/O:1 
*INP:F1/O:1 
*INP:F2/O:1 
*INP:F3/O:1 
*INP:F4/O:1 
*INP:F5/O:1 
*INP:F6/O:1 
*INP:F7/O:1 
*INP:F8/O:1 
*INP:F9/O:1 
*INP:F10/O:1 
*INP:LOOP/O:1 
*INP:F11/O:1 
*INP:F12/O:1 
*INP:F13/O:1 
*INP:F14/O:1 
*INP:F15/O:1 
*INP:F16/O:1 
*INP:F17/O:1 
*INP:CDUMP/O:1// 
*^C

.

Ok, now the compiler should be created. We next need to interrupt the emulator again (control+e) and insert the objecttime diskette. We will now build our Fortran library.

Simulation stopped, PC: 151412 (ASL R3) 
sim> att rx0 fortran-iv-v021-objecttime-system.img 
RX: writing buffer to file 
RX: buffering file in memory 
sim> c


.R LIBR 
*OUP:FORLIB=INP:NHD,OTSCOM,NOVIR,V2NS/G 
Global? $ERRS 
Global? $ERRTB 
Global? $VRINT 
Global? 
*^C

Now with that out of the way, we build a test program to make sure our compiler & library are working.

.COMPILE DEMO.FOR 
.MAIN.

.LINK DEMO,FORLIB

.RUN DEMO 
***** RT11 FORTRAN IV V2 DEMONSTRATION TEST *****

INSTALLATION SUCCESSFUL IF NO ERROR MESSAGES 
WERE PRINTED ABOVE.

**** FORTRAN DEMONSTRATION TEST COMPLETE *****

Ok everything looks fine! Now onward to Dungeon! First we copy everything to the RK0 disk…

.COPY RK1:*.* *.* 
Files copied: 
RK1:ACTORS.FTN to DK:ACTORS.FTN 
RK1:CLOCKR.FTN to DK:CLOCKR.FTN 
RK1:DEMONS.FTN to DK:DEMONS.FTN 
RK1:DGAME.FTN to DK:DGAME.FTN 
RK1:DINIT.FTN to DK:DINIT.FTN 
RK1:DMAIN.FTN to DK:DMAIN.FTN 
RK1:DSUB.FTN to DK:DSUB.FTN 
RK1:DUNGEO.DOC to DK:DUNGEO.DOC 
RK1:DVERB1.FTN to DK:DVERB1.FTN 
RK1:DVERB2.FTN to DK:DVERB2.FTN 
RK1:GDT.FTN to DK:GDT.FTN 
RK1:OBJCTS.FTN to DK:OBJCTS.FTN 
RK1:RRND.MAC to DK:RRND.MAC 
RK1:RSXTIM.MAC to DK:RSXTIM.MAC 
RK1:SVERBS.FTN to DK:SVERBS.FTN 
RK1:VERBS.FTN to DK:VERBS.FTN 
RK1:VMSRND.MAC to DK:VMSRND.MAC 
RK1:BALLOP.FOR to DK:BALLOP.FOR 
RK1:DINDX.DAT to DK:DINDX.DAT 
RK1:DSO1.FOR to DK:DSO1.FOR 
RK1:DSO2.FOR to DK:DSO2.FOR 
RK1:DSO3.FOR to DK:DSO3.FOR 
RK1:DSO4.FOR to DK:DSO4.FOR 
RK1:DSO5.FOR to DK:DSO5.FOR 
RK1:DSO6.FOR to DK:DSO6.FOR 
RK1:DSO7.FOR to DK:DSO7.FOR 
RK1:LIGHTP.FOR to DK:LIGHTP.FOR 
RK1:NOBJS.FOR to DK:NOBJS.FOR 
RK1:NP.FOR to DK:NP.FOR 
RK1:NP1.FOR to DK:NP1.FOR 
RK1:NP2.FOR to DK:NP2.FOR 
RK1:NP3.FOR to DK:NP3.FOR 
RK1:NROOMS.FOR to DK:NROOMS.FOR 
RK1:ROOMS.FOR to DK:ROOMS.FOR 
RK1:RTTIM.FOR to DK:RTTIM.FOR 
RK1:SOBJS.FOR to DK:SOBJS.FOR 
RK1:VILLNS.FOR to DK:VILLNS.FOR 
RK1:VMSTIM.FOR to DK:VMSTIM.FOR 
RK1:D.ODL to DK:D.ODL 
RK1:DTEXT.DAT to DK:DTEXT.DAT 
RK1:RSTSCB.CTL to DK:RSTSCB.CTL 
RK1:RSXBLD.CMD to DK:RSXBLD.CMD 
RK1:RSXCMP.CMD to DK:RSXCMP.CMD 
RK1:RTBLD.COM to DK:RTBLD.COM 
RK1:RTCMP.COM to DK:RTCMP.COM 
RK1:VMSBLD.COM to DK:VMSBLD.COM 
RK1:VMSCMP.COM to DK:VMSCMP.COM

Then we need to make some space…

.DELETE *.DAT 
Files deleted: 
DK:DINDX.DAT ? Y 
DK:DTEXT.DAT ? Y

Now we can compile the fortran

.@RTCMP

.COM/NOLINE DMAIN.FTN,DGAME.FTN,DSUB.FTN 
DUNGEO 
GAME 
XENDMV 
XVEHIC 
RSPEAK 
RSPSUB 
RSPSB2 
OBJACT 
BUG 
NEWSTA 
QHERE 
QEMPTY 
JIGSUP 
?FORTRAN-I-[JIGSUP] Errors: 0, Warnings: 4 
OACTOR 
PROB 
RMDESC 
RAPPLI

.COM/NOLINE DINIT.FTN 
INIT 
PROTCT

.COM/NOLINE NP,NP1,NP2,NP3 
RDLINE 
PARSE 
ORPHAN 
LEX 
SPARSE 
?FORTRAN-I-[SPARSE] Errors: 0, Warnings: 1 
GETOBJ 
?FORTRAN-I-[GETOBJ] Errors: 0, Warnings: 1 
SCHLST 
?FORTRAN-I-[SCHLST] Errors: 0, Warnings: 2 
THISIT 
SYNMCH 
UNPACK 
SYNEQL 
TAKEIT 
GWIM

.COM/NOLINE/NOVEC GDT.FTN 
GDT

.COM/NOLINE VERBS.FTN,OBJCTS.FTN 
VAPPLI 
?FORTRAN-I-[VAPPLI] Errors: 0, Warnings: 1 
CLOCKD 
OAPPLI

.COM/NOLINE SVERBS.FTN,DVERB1.FTN,DVERB2.FTN,ACTORS.FTN,DEMONS.FTN,CLOCKR.FTN 
SVERBS 
TAKE 
DROP 
PUT 
VALUAC 
SAVEGM 
RSTRGM 
WALK 
CXAPPL 
AAPPLI 
THIEFD 
?FORTRAN-I-[THIEFD] Errors: 0, Warnings: 3 
FIGHTD 
BLOW 
SWORDD 
?FORTRAN-I-[SWORDD] Errors: 0, Warnings: 1 
INFEST 
CEVAPP 
?FORTRAN-I-[CEVAPP] Errors: 0, Warnings: 4 
LITINT

.COM/NOLINE ROOMS.FOR,NROOMS.FOR 
RAPPL1 
?FORTRAN-I-[RAPPL1] Errors: 0, Warnings: 2 
RAPPL2 
?FORTRAN-I-[RAPPL2] Errors: 0, Warnings: 1 
LOOKTO 
EWTELL

.COM/NOLINE SOBJS.FOR,NOBJS.FOR,BALLOP.FOR,LIGHTP.FOR,VILLNS.FOR 
SOBJS 
?FORTRAN-I-[SOBJS ] Errors: 0, Warnings: 1 
NOBJS 
?FORTRAN-I-[NOBJS ] Errors: 0, Warnings: 2 
MIRPAN 
BALLOP 
LIGHTP 
TROLLP 
CYCLOP 
THIEFP 
?FORTRAN-I-[THIEFP] Errors: 0, Warnings: 2

.COM/NOLINE DSO1.FOR,DSO2.FOR,DSO3.FOR,DSO4.FOR,DSO5.FOR,DSO6.FOR,DSO7.FOR 
PRINCR 
?FORTRAN-I-[PRINCR] Errors: 0, Warnings: 2 
INVENT 
?FORTRAN-I-[INVENT] Errors: 0, Warnings: 1 
PRINCO 
MOVETO 
SCORE 
SCRUPD 
FINDXT 
FWIM 
YESNO 
ROBADV 
?FORTRAN-I-[ROBADV] Errors: 0, Warnings: 1 
ROBRM 
?FORTRAN-I-[ROBRM ] Errors: 0, Warnings: 1 
WINNIN 
FIGHTS 
VILSTR 
GTTIME 
OPNCLS 
LIT 
?FORTRAN-I-[LIT ] Errors: 0, Warnings: 1 
WEIGHT 
?FORTRAN-I-[WEIGHT] Errors: 0, Warnings: 1 
GHERE 
MRHERE 
ENCRYP 
CPGOTO 
?FORTRAN-I-[CPGOTO] Errors: 0, Warnings: 1 
CPINFO

.COM/NOLINE RTTIM.FOR 
ITIME

.COM RRND.MAC 
ERRORS DETECTED: 0

So far so good. Now we can delete the source from our primary disk, take note that we don’t delete the demo program:

.DELETE *.FOR 
Files deleted: 
DK:DEMO.FOR ? N 
DK:BALLOP.FOR ? Y 
DK:RTTIM.FOR ? Y 
DK:VMSTIM.FOR ? Y 
DK:DEMOF1.FOR ? Y 
DK:DSO3.FOR ? Y 
DK:TEST55.FOR ? Y 
DK:GETSTR.FOR ? Y 
DK:PUTSTR.FOR ? Y 
DK:DSO1.FOR ? Y 
DK:DSO2.FOR ? Y 
DK:DSO4.FOR ? Y 
DK:DSO5.FOR ? Y 
DK:DSO6.FOR ? Y 
DK:DSO7.FOR ? Y 
DK:LIGHTP.FOR ? Y 
DK:NOBJS.FOR ? Y 
DK:NP.FOR ? Y 
DK:NP1.FOR ? Y 
DK:NP2.FOR ? Y 
DK:NP3.FOR ? Y 
DK:NROOMS.FOR ? Y 
DK:ROOMS.FOR ? Y 
DK:SOBJS.FOR ? Y 
DK:VILLNS.FOR ? Y

Next we need to remove the ftn files:

.DEL *.FTN 
Files deleted: 
DK:ACTORS.FTN ? Y 
DK:CLOCKR.FTN ? Y 
DK:DEMONS.FTN ? Y 
DK:DGAME.FTN ? Y 
DK:DINIT.FTN ? Y 
DK:DMAIN.FTN ? Y 
DK:DSUB.FTN ? Y 
DK:DVERB1.FTN ? Y 
DK:DVERB2.FTN ? Y 
DK:GDT.FTN ? Y 
DK:OBJCTS.FTN ? Y 
DK:SVERBS.FTN ? Y 
DK:VERBS.FTN ? Y

Now we are going to link our executable dungeo.sav . However the default link procedures will not work for us, it’s just easier to paste this entire thing into the console.

.LINK/INCLU/PRO/MAP:NL:/BOT:1200/EXE:DUNGEO DMAIN,DGAME,DSUB,RRND,RTTIM 
*DINIT,GDT/O:1 
*NP,NP1,NP2,NP3/O:1 
*VERBS,OBJCTS/O:1 
*SVERBS/O:2 
*DVERB1/O:2 
*DVERB2/O:2 
*ACTORS/O:2 
*DEMONS/O:2 
*CLOCKR/O:2 
*ROOMS/O:3 
*NROOMS/O:3 
*SOBJS/O:3 
*NOBJS/O:3 
*BALLOP,LIGHTP,VILLNS/O:3 
*DSO1/O:4 
*DSO2/O:4 
*DSO3/O:4 
*DSO4/O:4 
*DSO5/O:4 
*DSO6/O:4 
*DSO7/O:4 
*SY:FORLIB// 
Library search? $SHORT 
Library search?

Now we don’t need the object files anymore they can be deleted. However we are NOT going to delete the system objects so this isn’t a wholesale deletion.

.DEL *.OBJ 
Files deleted: 
DK:SYSLIB.OBJ ? N 
DK:ODT.OBJ ? N 
DK:VDT.OBJ ? N 
DK:VTHDLR.OBJ ? N 
DK:PLOT55.OBJ ? N 
DK:DEFLTS.OBJ ? N 
DK:FORLIB.OBJ ? N 
DK:DEMO.OBJ ? Y 
DK:DMAIN.OBJ ? Y 
DK:DGAME.OBJ ? Y 
DK:DSUB.OBJ ? Y 
DK:DINIT.OBJ ? Y 
DK:NP.OBJ ? Y 
DK:NP1.OBJ ? Y 
DK:NP2.OBJ ? Y 
DK:NP3.OBJ ? Y 
DK:GDT.OBJ ? Y 
DK:VERBS.OBJ ? Y 
DK:OBJCTS.OBJ ? Y 
DK:SVERBS.OBJ ? Y 
DK:DVERB1.OBJ ? Y 
DK:DVERB2.OBJ ? Y 
DK:ACTORS.OBJ ? Y 
DK:DEMONS.OBJ ? Y 
DK:CLOCKR.OBJ ? Y 
DK:ROOMS.OBJ ? Y 
DK:NROOMS.OBJ ? Y 
DK:SOBJS.OBJ ? Y 
DK:NOBJS.OBJ ? Y 
DK:BALLOP.OBJ ? Y 
DK:LIGHTP.OBJ ? Y 
DK:VILLNS.OBJ ? Y 
DK:DSO1.OBJ ? Y 
DK:DSO2.OBJ ? Y 
DK:DSO3.OBJ ? Y 
DK:DSO4.OBJ ? Y 
DK:DSO5.OBJ ? Y 
DK:DSO6.OBJ ? Y 
DK:DSO7.OBJ ? Y 
DK:RTTIM.OBJ ? Y 
DK:RRND.OBJ ? Y

Now with enough disk space free’d we can copy back the database files needed

.COPY RK1:*.DAT *.* 
Files copied: 
RK1:DINDX.DAT to DK:DINDX.DAT 
RK1:DTEXT.DAT to DK:DTEXT.DAT

And now we can run dungeon!

.R DUNGEO 
Welcome to Dungeon. This version created 18-JUL-80. 
You are in an open field west of a big white house with a boarded 
front door. 
There is a small mailbox here. 
>HISTORY 
Revision history:

18-JUL-80 Transportable data base file (V2.5A). 
28-FEB-80 Compressed text file (V2.4A). 
15-NOV-79 Bug fixes (V2.3A). 
18-JAN-79 Revised DECUS version (V2.2A). 
10-OCT-78 Puzzle Room (V2.1A). 
10-SEP-78 Endgame (V2.0A). 
10-AUG-78 DECUS version (V1.1B). 
14-JUN-78 Public version with parser (V1.1A). 
4-MAR-78 Debugging version (V1.0A). 
>QUIT 
Your score would be 0 [total of 585 points], in 2 moves. 
This gives you the rank of Beginner. 
Do you wish to leave the game? 
Y

.

You can always hit control+e to exit SIMH.

Well there you have it, the Fortran installation, compilation, linking & execution of the oldest source version I can find at the moment of Dungeon/Zork. Who knows, maybe someday this may help someone revive other old programs.