Now that I have a working TOPS-10 environment, in order to truly start the journey to MUD the first step is to install the Essex university BCPL compiler from the 1970’s. This compiler was lost for many years, and even though the source of MUD was made available by Richard Bartle and Roy Trubshaw, it appeared that no-one had thought to keep a copy of the compiler that could produce an executable programme. Fortunately the Essex BCPL compiler surfaced about a year ago and has been posted to GitHub. So the first step in the journey to MUD is to install the compiler.
To get the BCPL compiler working, the first step was to download the BCPL.tap from GitHub and then restore it to my Tops-10 install. This was achieved by booting Tops-10 and as OPR undertaking the restore from tape using BACKUP, after which we have the compiler source and executable in the Operator PPN [1,2] . This puts the BCPL compiler on disk ready for installation, but before we can do that we must implement some pre-requisites.
PDP-10 simulator V4.0-0 Beta git commit id: ba447399
Listening on port 2020
Modem control activated
Auto disconnect activated
BOOT V4(76)
BOOT>
[Loading from DSKB:SYSTEM.EXE[1,4]]
KS10 07-Oct-88
Why reload: sched
Date:
Time:
Startup option: g
[Rebuilding the system search list from the HOM blocks]
[Rebuilding the active swapping list from the HOM blocks]
[Rebuilding the system dump list from the HOM blocks]
KS10 14:41:42 CTY system 4097
Connected to Node CENTRA(0) Line # 42
.LOGIN 1,2
.R OPR
[CCPWFD Waiting for file daemon to start]
%%TTY STOMPER - Starting
OPR>
14:41:53 -- Message from the Accounting System --
Account validation is not required
14:41:54 -- Begin auto take file --
File: SYS:SYSTEM.CMD[1,4]
14:41:54 -- End auto take file --
17 lines processed
OPR>push
.mount tape:/reelid:bcpl/nowait
[Mount request TAPE queued, request #4]
.pop
14:44:01 -- Magtape mount request #4 --
User: OPR [1,2] Job #2
Volume-set name: TAPE
Volume-ID Write Labels Track Density
--------- ------- ------ ----- -------
BCPL Locked No 9 1600
OPR>
Simulation stopped, PC: 000001 (SOJG 6,1)
sim> att tu0 tapes/BCPL.tap
sim> set tu0 lock
sim> c
14:44:16 Device MTA0 -- Unlabeled volume mounted --
Density 1600 BPI, write-Locked
OPR>sho que
OPR>
14:44:53 -- System Queues Listing --
Mount Queue:
Volume Status Type Write Req# Job# User
------- -------- -------- ------- ------ ---- -------------------
BCPL Waiting Magtape Locked 4 2 OPR [1,2]
Volume-set: TAPE
Label-Type: No, Tracks: 9, Density: 1600 BPI
There is 1 request in the queue
OPR>ide mta0: re 4
OPR>
14:45:04 Device MTA0 -- Volume BCPL reassigned --
User: OPR [1,2] Job #2
OPR>push
.r backup
/tape tape:
/rewind
/protection 155
/files
/restore dsk:=*.*
! BCPL EXE
BCPL MAS
BCPL00 EXE
BCPL01 EXE
BCPL02 EXE
BCPL03 EXE
360LIB MAS
ACS GET
ARRLIB GET
ARRLIB MAS
ARRLIB REL
ASSINT MAS
BCLDOC CTL
BCLEND RNM
BCLMAC MAC
BCLUSR RNM
BCPL CTL
BCPL HLP
BCPL RNM
BCPL TXT
BCPLDT HLP
BCPLDT MAS
BCPLDT REL
BCPLIB CTL
BCPLIB GET
BCPLIB RNM
BITS GET
BUILD CTL
CMDLIB GET
CMDLIB MAS
CMDLIB REL
COM22C SCM
COROUT GET
COROUT MAS
COROUT REL
DICLIB GET
DICLIB MAS
DICLIB REL
ERRORS GET
GLOBAL BCL
GLOBAL CTL
GLOBAL REL
ICLLIB MAS
IOLIB GET
IOPACK GET
IOUUO GET
JOBDAT GET
KERNEL GET
LOWLIB REL
QUEUER MAS
RFS GET
RFSLIB GET
RFSLIB MAS
RFSLIB REL
SCB GET
SCNLIB MAS
SIMULA MAS
SUBFIL BCL
SUBFIL CTL
SUBFIL EXE
SUBFIL HLP
SYNLIB REL
USEFUL GET
BCPLIB MAS
BCPL DIR
BCPLIB REL
"Done
/^Z
.dismount tape:
[MTA0:BCPL Read(C/H/S) = 2173280/0/0]
[MTA0 dismounted]
.
I did a bit of work on that compiler. I was an MSc student, and Pete Gardner was developing it. I used the code generator as a base for a portable version of the compiler. I discovered a fairly important bug in the register allocation!
I do have a copy of the compiler now…I used to have one back in the day, but lost it (in any case, my copy was a snapshot during development).