A Step-by-Step Guide to Installing NOS 2.8.7 on a CYBER-865 from “Scratch”
Item | Description |
---|---|
Author: | Nick Glazzard |
Date: | August/September 2019 |
Cataloged: | in CODEX: 20190911 |
Edited: | Steve Zoppi |
William Schaub for the direct contributions of a Y2K “patch” process (using Paul Koning's original work), discovering the X.MS “Manage System” procedures and for information on building Cyber Kermit (with an easy to install version too).
Many contributors to the Controlfreaks mailing list. Much vital information is in there. Particularly useful were posts from Tom Hunter, Paul Koning, Kevin Jordan, Digby Tarvin and Gerard van der Grinten.
Any errors in what follows are mine … …
I've always wanted to be able to install NOS “from scratch” on a fresh DtCyber system, but I have never managed to do it in the past. Last try was about 12 years ago, so it was time to try again.
Note that there is no really good reason to do this. There are “ready to run” systems on the Controlfreaks website for NOS 2.8.1 and NOS 2.8.7 with Plato, built by Tom Hunter and Paul Koning.
However, doing it yourself gives you the feeling you understand the system better. At least, that's my feeling … …
You can also modify things to have any (reasonable) hardware configuration: more disks, tapes, etc.
I think it will take most of a day to perform the steps below. Working out the steps took a great deal longer, so I'm not really sure how quickly it could be done by following “the recipe”.
In theory, everything is documented in:
(Below, this document is referred to as the N.I.H.).
However, there are “issues” in practice.
Steps 1 to 3 are fine (with some pretty obvious adjustments).
Step 4: Bring Up a Network Terminal – This is where the trouble starts.
DtCyber in principle follows the NAM/CCP path in there. But, because only enough of the NPU and CCP is emulated to support terminals, and the default network configuration files try to start RBF, FTP, PSU … etc. … typing:
NAM. IAF.
as specified there will definitely not work.
Tom Hunter and Paul Koning sorted out a network definition file and a network startup file which will provide 16 terminals and not try to start things that can't work. They did this when they first implemented an emulation with a working async TIP. These files must be installed. I have used a combination of batch jobs and DIS to do this.
The starting point for the installation is to use DECK 17 (2000K CM, 0 ESM, 885-12 disks on units 40 & 41) as a starting point. Almost everything in there is overridden, however, so maybe that wasn't a great place to start.
Another thing is what “from scratch” really means. At this point in time, we have a small number of “release tapes” that were prepared by CDC Arden Hills Operations (I think) long ago … The contents of the tape is what some customer ordered. The NOS 2.8.7 we have includes nice things like APL which don't appear to be available as separate products in any easily found form. “From scratch” means using a matched deadstart tape and set of “distribution” tapes as prepared for some customer at some point in the past.
The original deadstart tape has already been altered by Paul Koning for DtCyber because it specified a GE tape format which MT669s don't support, so it had to be changed to specify PE format. Also, it may have had double tape marks originally, which had to be removed. There may have been some other changes too (e.g. the name CYBER1 appears in several places).
What follows is pretty much a record of the successful steps I've made in this project. Many unsuccessful steps have been omitted!
Quite a lot of trial and error was involved, and much use was made of material found in the Controlfreaks mailing list. This answered most questions, actually, after some head scratching.
AFAICT, this has resulted in a correctly working NOS 2.8.7 on CYBER 865 system. Although I'm not 100% confident about that!
However, I really don't know how to configure UEM (and related matters) on the 865. The NOS 2 Analysis Handbook Revision D (1984) doesn't seem to mention UEMIN., for example … although my ignorance is deeper than that!
Step | File | Description |
---|---|---|
a. | cy871b.tap.bz2 | Initial deadstart tape for 2.8.7 (871), as modified by Paul Koning. |
b. | nos287-1.tap.gz | First NOS permanent files distribution tape. |
c. | nos287-2.tap.gz | Second NOS permanent files distribution tape. |
d. | nos287-3.tap.gz | Third NOS permanent files distribution tape. |
e. | y2k.tap.gz | Y2K patches tape. |
f. | network-batch.txt | * Batch job for network: Makes NCF and LCF from NDL configuration file. |
g. | network-start.txt | * Batch job for network: Changes NAMSTRT to start only viable components. |
h. | pli_compiler.tap | PL/I compiler installation tape. |
i. | modset-1tm-1tn-batch.txt | * Batch job to copy Kevin Jordan's 1TM/1TN patches to INSTALL catalog. |
j. | y2k-altfix-batch.txt | * Alternative Y2K patch batch job (NOS core components only). |
k. | jobtdu.txt | * Batch job to copy terminal definition for TeraTerm Pro to disk. |
l. | NOS_2_Installation_Handbook_60459320L_Dec88.pdf | NOS Installation Handbook (Rev L) |
m. | NOS_Version_2_Installation_Handbook.60459320B.1983.pdf | NOS Installation Handbook (Rev B) |
n. | 60459320-NOS2_Install-RevP.pdf | NOS Installation Handbook (Rev P) |
The items marked with a * are not easy to find (they came out of mailing list attachments, etc.) so I have put them in a zip file which can be found here: Rare Bits
The other items are all to be found in the usual places on the Controlfreaks Wiki.
<your_directory>
<your_directory>
/* ** Load three Cyber fonts. */ #if 0 hSmallFont = XLoadFont(disp, "-*-lucidatypewriter-medium-*-*-*-10-*-*-*-*-*-*-*\0"); hMediumFont = XLoadFont(disp, "-*-lucidatypewriter-medium-*-*-*-14-*-*-*-*-*-*-*\0"); hLargeFont = XLoadFont(disp, "-*-lucidatypewriter-medium-*-*-*-24-*-*-*-*-*-*-*\0"); #else hSmallFont = XLoadFont(disp, "-*-fixed-medium-*-*-*-10-*-*-*-*-*-*-*\0"); hMediumFont = XLoadFont(disp, "-*-fixed-medium-*-*-*-13-*-*-*-*-*-*-*\0"); hLargeFont = XLoadFont(disp, "-*-fixed-medium-*-*-*-20-*-*-*-*-*-*-*\0"); #endif
* Optionally and perhaps debatably …
I have found the following change to npu_async.c helps to get rid of (or reduce the frequency of) UNKNOWN CONTROL KEY, CHECK SCREEN in FSE. It may be that there is some set of telnet settings that makes this unnecessary, but I haven't found them with the client systems I use.
In function: npuAyncProcessUplineTransparent() add:
npuTipInputReset(tp); } #if 1 else if (ch == 0x0a ) { /* NG: Swallow line feeds here. */ continue; } #endif else if (ch == tp->params.fvUserBreak2 && tp->params.fvEnaXUserBreak) { *tp->inBufPtr++ = ch; (i.e. insert the conditionally compiled lines.)
make -f Makefile.linux32 cd ..
Step | Commands | Description |
---|---|---|
a. | cp <distdir>/cy871b.tap.bz2 dstapes | # Initial deadstart tape for 2.8.7 (871) |
b. | cd dstapes; bunzip2 cy871b.tap.bz2; cd .. | # … uncompress it … |
c. | cp <distdir>/nos287-1.tap.gz tapes | # First NOS distribution tape. |
d. | cd tapes; gunzip nos287-1.tap.gz; cd .. | |
e. | cp <distdir>/nos287-2.tap.gz tapes | # Second NOS distribution tape. |
f. | cd tapes; gunzip nos287-2.tap.gz; cd .. | |
g. | cp <distdir>/nos287-3.tap.gz tapes | # Third NOS distribution tape. |
h. | cd tapes; gunzip nos287-3.tap.gz; cd .. | |
i. | cp <distdir>/y2k.tap tapes | # Y2K patches tape. |
j. | cp <distdir>/pli_compiler.tap tapes | # PL/I compiler. |
k. | cp <distdir>/network-batch.txt cards | # Network: Make NCF and LCF from NDL configuration file. |
l. | cp <distdir>/network-start.txt cards | # Network: Change NAMSTRT to start only viable components. |
m. | cp <distdir>/modset-1tm-1tn-batch.txt cards | # Fixes for 1TM/1TN. |
n. | cp <distdir>/y2k-altfix-batch.txt cards | # Alternative Y2K fixes job. |
o. | cp <distdir>/jobtdu.txt cards | # TeraTerm Pro terminal definition file copy job. |
Configure your CYBER Initialization File
;--- ; New NOS287 CYBER865 machine, installation configuration. ;--- [cyber] model=CYBER865 deadstart=deadstart.N871 equipment=equipment.N871 clock=0 memory=4000000 ecsbanks=0 pps=12 persistDir=PersistStores/NNOS871 [equipment.N871] ; type, eq, un, ch, path DD885,0,0,01,disks/DM01 DD885,0,1,01,disks/DM02 CO6612,0,0,10 CP3446,6,0,11 CR3447,7,0,11 LP512,7,0,07,3555 MT679,0,0,13,dstapes/cy871b.tap MT679,0,1,13 MT679,0,2,13 MT679,0,3,13 TPM,0,0,15 NPU,7,0,05 [deadstart.N871] 0000 0000 0000 7553 DCN 13 7713 FAN 13, 0120 0120 7413 ACN 13 7113 IAM 13, 7301 7301 0000 0117 wxyy w=level, x=display on/off, yy=cmrdeck 0000 ;--- EOF ---
EQ005=DE,ET=EM,SZ=4000.
ASR=5. (delete) XM=AA,,200. (delete) MSAL,S=5. (delete) UEMIN. (delete) PF=5,F,,,CYBER,5. (delete)
EQ006=DM,UN=0,CH=1. EQ007=DM,UN=1,CH=1.
EQ020=LQ,EQ=7,CH=7.
EQ021=CR,EQ=7,CH=11. EQ022=CP,EQ=6,CH=11.
EQ050=NT-4,EQ=0,UN=0,CH=13,TF=ATS.
EQ060=NP,ST=OFF,EQ=7,CH=5,PI=1,SA=OFF,ND=1.
INITIALIZE,AL,6. INITIALIZE,AL,7.
GO. Accept default date and time. Wait for: USER DAYFILE PROCESSED in A display.
E,A.
AB. X.SYSGEN(FULL)
operator> lt 13,0,1,r,tapes/nos287-1.tap
operator> lc 11,7,cards/network-batch.txt
X.DIS USER,NETADMN,NETADMN. GET,NDLJOB. BEGIN,NDLJOB,NDLJOB.
Wait for job to complete
(REVERT. *** END OF NDLJOB ***) DROP.
(leave DIS)
operator> lc 11,7,cards/network-start.txt
Wait for batch job to complete.
NAM.
IAF.
It should now be possible to log in to the system from terminals.
That is, reproduce the changes we made in previous steps. Also change the name shown for the system if wanted.
COMMON,SYSTEM. GTR,SYSTEM,DSTDECK.CMRD17,EQPD17 XEDIT,DSTDECK.
E,DSTDECK
operator> lt 13,0,2,w,dstapes/newnos287.tap
SYSGEN,DST,SYSTEM,DSTDECK,NEW,0,PE.
VSN,52,NDT.
BYE.
UNLOCK. CHECK POINT SYSTEM.
STEP.
shutdown
MT679,0,0,13,dstapes/cy871b.tap
MT679,0,0,13,dstapes/newnos287.tap
GO.
ERROR | Remedy |
---|---|
CMS CLDT: No LID table created. Buffer too small. | FIX: Add LDT=20 to CMRD17. On deadstart or permanently. |
MSE SSF fails to load controlware for a 7990. (Or something like that. Falls into DIS.) | (See Below) |
00.01.23.MSE. 00.01.23.GET,MSE/NA. 00.01.24.MSE. 00.01.24.********************* 00.01.24.* SSEXEC. 00.01.24.* HOST=HOSTID/7990 00.01.24.* CONFIGURATION FILE 00.01.24.* IS MSECONF (UI=377760) 00.01.24.* USES CHANNELS 2 AND 7 00.01.24.********************* 00.01.24.LOADBC(C=2) 00.01.24. NO CONTROLWARE ON CHANNEL. 00.01.24. CONTROLWARE LOAD ABORT, C=02. 00.01.24.EXIT. 00.01.24.DIS. 00.02.00.DMP. 00.02.00.DMD,60000.
DROP.
IDLE,SSF.
DISABLE,MSE. DISABLE,MASTER MSE. DISABLE,CARTRIDGE PF STAGING. DISABLE,SSF. GO.
ON,EQ=60. NAM. IAF.
(wait for IAF NETWORK CONNECTED on control point).
By writing a new deadstart tape with the changes made. Note that you have to edit these changes in after the system is running. Adding entries in deadstart doesn't change what is on the deadstart tape in itself. Which is obvious … but … may be overlooked!
NOTE: We'll use FSE here, assuming a terminal emulator, working telnet and a terminal definition that matches what the terminal emulator emulates have all been sorted out. It could otherwise be done with XEDIT again. For a Unix client system, using xterm with a 80×43 display matches the NCDX terminal definition in NOS, so – with a properly working telnet – this can work. Details on setup below.
NOS FULL SCREEN EDITOR Upper Case File DSTDECK Lines 1 - 9 Size 9 (No Changes) CMRD17 * NON 810/830, 2000K CM, 885-12 DISKS NAME=HCCC NOS 2.8.7 VERSION=NOS 2.8.7 871/871. MID=AA. LIB=2. NCP=34. QFT=3000. EJT=2000.
Add:
LDT=20.
ENTER DIRECTIVES - ? *REPLACE CMRD17 ? ((return)) RECORDS WRITTEN ON FILE NEW RECORD TYPE FILE DATE COMMENT DELETED-(CMRD17) TEXT SYSTEM INSERTED CMRD17 TEXT DSTDECK ADDED SYSTEM OPLD ***** 97/11/05. EDITING COMPLETE.
– BEFORE –
ENABLE,MSE. ENABLE,MASTER MSE. ENABLE,CARTRIDGE PF STAGING. ENABLE,USER EXTENDED MEMORY. ENABLE,MAP. DISABLE,NAM. ENABLE,SSF. DISABLE,RHF. ENABLE,SUBCP. DISABLE,TAF. ENABLE,PROBE.
– AFTER –
DISABLE,MASTER MSE. DISABLE,CARTRIDGE PF STAGING. ENABLE,USER EXTENDED MEMORY. ENABLE,MAP. DISABLE,NAM. DISABLE,SSF. DISABLE,RHF. ENABLE,SUBCP. DISABLE,TAF. ENABLE,PROBE. {then type the following commands} REWIND,DSTDECK. LIBEDIT,P=STEP,B=DSTDECK. ENTER DIRECTIVES - ? *REPLACE IPRD00 ? RECORDS WRITTEN ON FILE NEW RECORD TYPE FILE DATE COMMENT DELETED-(IPRD00) TEXT STEP INSERTED IPRD00 TEXT DSTDECK ADDED SYSTEM OPLD ***** 97/11/05. EDITING COMPLETE.
UNLOCK. DEBUG.
lt 13,0,2,w,dstapes/newnos287edit.tap
CHECK POINT SYSTEM. (wait for CHECK POINT COMPLETE) STEP.
shutdown
ON,EQ=60. NAM. IAF.
It is good exercise for the fingers … …
Alternatively, EQ 60 can be set to be on in EQPD17 and NAM and IAF can be ENABLED in IPRD00 and a new deadstart tape written … now they all seem to work.
This cannot be installed using the procedures described in Chapter 4 of the NOS Installation Handbook because it isn't an official product distribution tape. We install it by adding it to the system and creating a new deadstart tape.
Instead:
UNLOCK. DEBUG.
lt 13,0,1,r,tapes/pli_compiler.tap
label,tape,vsn=pli,lb=kl. # Get access to the tape common,system. # Get the current system library libedit,p=system,b=tape. # Edit the current system library ENTER DIRECTIVES - ? ((just type return)) RECORDS WRITTEN ON FILE NEW RECORD TYPE FILE DATE COMMENT ADDED PLI ABS TAPE 84/11/28. ADDED PLI10 OVL TAPE 84/11/28. ADDED PLI11 OVL TAPE 84/11/28. ADDED PLI13 OVL TAPE 84/11/28. ADDED PLI14 OVL TAPE 84/11/28. ADDED PLI15 OVL TAPE 84/11/28. ADDED PLI16 OVL TAPE 84/11/28. ADDED PLILIB ULIB TAPE 84/11/28. ADDED SYSTEM OPLD ***** 97/11/05. EDITING COMPLETE.
lt 13,0,2,w,dstapes/newnos287pli.tap
resourc,pe=3. # Otherwise we would exceed default max of 2 tapes. assign,52,newtape,lb=ku,po=w. rewind,new. copyei,new,newtape. return,newtape. bye.
Maybe there is an option for this … Or stick to NORMAL character set.
Applying “corrective code” (patches) or “customizing” parts of the system requires rebuilding items from source. This means the source code for NOS needs to be available. At the end of the day, this should be in a file called OPL871 in the INSTALL user catalog. Actually getting OPL871 involves quite a few steps, though. These are (sort of) described in Chapter 6: Customizing Installations in the N.I.H. … but not all that clearly IMHO. The following seems to work.
SYSGEN,SOURCE. # This gets tools needed to get the source, such as the COMMOD and INSTALL files, AFAICT. GET,COMMOD. # COMMOD can be edited. It configures INSTALL, I think. ATTACH,INSTALL. BEGIN,SETUP,INSTALL,MOD=COMMOD,INSTALL. BEGIN,SEED,INSTALL,DST=SYSTEM. BEGIN,MODOPL,INSTALL,DISKINS=YES.
This last step will request tapes with VSN=BC004P and (eventually) VSN=BC004Q. These are nos287-1.tap and nos287-2.tap.
After some considerable time (when it isn't obvious that anything is happening), it will begin copying things from tape.
And when it completes, OPL871 is present on the INSTALL user catalog.
This enables 1TN to drive the 6676 mux and support multiple telnet connections to IAF on NOS 2.8.7. It also changes 1TM (2-port mux driver) so the 2-port mux can also be used for IAF logins. The configuration doesn't has a 6676 mux, but this is still an interesting exercise that validates source based changes.
modset-1tm-1tn-batch.txt
. This is Kevin's modset with a trivial job added to the top to copy INPUT to MOD1TM in INSTALL catalog.operator> lc 11,7,cards/modset-1tm-1tn-batch.txt
GET,MOD1TM. ATTACH,OPL=OPL871. MODIFY,I=MOD1TM. COMPASS,I,S=PPTEXT. (Note: this produces lots of output. Maybe L=0 a good idea?) COMMON,SYSTEM. REWIND,*.
operator> lt 13,0,1,w,dstapes/dst1tmfixed.tap
LABEL,NEWDS,VSN=***051,D=PE,LB=KU,F=I. LIBEDIT,P=SYSTEM,B=LGO,N=NEWDS,I=0. RECORDS WRITTEN ON FILE NEWDS RECORD TYPE FILE DATE COMMENT REPLACED 2TN PP LGO 97/11/05. REPLACED 9JN PP LGO 97/11/05. REPLACED 9JO PP LGO 97/11/05. REPLACED 9JP PP LGO 97/11/05. REPLACED 9JQ PP LGO 97/11/05. REPLACED 9JR PP LGO 97/11/05. REPLACED 1TN PP LGO 97/11/05. REPLACED 1TM PP LGO 97/11/05. REPLACED 2TM PP LGO 97/11/05. REPLACED 3TM PP LGO 97/11/05. REPLACED 4TM PP LGO 97/11/05. EDITING COMPLETE. RETURN,NEWDS.
No problems.
This presumably contains Y2K fixes for various parts of NOS. But what to do with it?
operator> lt 13,0,1,r,tapes/y2k.tap
1 PFDUMPR TEXT 101 4147 2 Y2KATF TEXT 170 3774 3 Y2KCDCS TEXT 221 2414 4 Y2KCHA TEXT 165 1227 5 Y2KHPA TEXT 373 0315 6 Y2KNORM TEXT 242 5030 7 Y2KQU TEXT 236 0737 8 Y2KNOS TEXT 1130 4336 9 HPABIN TEXT 427124 3125 10 NORMBIN TEXT 66105 6534 11 DATA 1 6017 12 * EOF * SUM = 520354
Turns out, this is a PFDUMP tape.
Probably that PFDUMPR record is a clue!
The file on it can be listed with:
And they can be copied to disk using:
Unfortunately, though … this puts them in UI=10, a.k.a. PRINT01 … Hmm …
To make them accessible from INSTALL:
X.DIS. # DSD console. SUI,10. PERMIT,Y2KNOS,INSTALL=W. ... etc ... DROP.
Then back in IAF logged in as INSTALL:
To update OPL871:
Then rebuild NOS from source. This took about 30 mins on the T60.
begin,nos,install. # All the COMPASS code, first PP then CPU ... begin,nos2b,install. # All FTN5 and SYMPL code ...
The result of all this building is a file called PRODUCT.
Write a new deadstart tape.
setjsl,*. # Best to do this earlier. Do now, otherwise there will be SRU limit warnings. settl,*. return,tape. common,system. begin,gendst,install,list=info. # Use list to put output to a file.
When MAG E,P appears:
In DtCyber console:
operator> 13,0,1,w,dstapes/dstfromsource.tap
In DSD:
VSN,52,NDT.
In IAF:
route,info,dc=lp. # Print the listing from gendst. bye.
Restart with this latest SS tape.
NOS Console:
CHECK POINT SYSTEM. STEP.
Edit cyber.ini to use dstapes/dstfromsource.tap
In DtCyber console:
operator> shutdown
Restart DtCyber:
../trunk/dtcyber
NOS Console:
(CR), GO. ... ON,EQ=60. NAM. IAF.
And it all seems to work …
A more targetted alternative to the above is due to Paul Koning and was passed on to me with practical details by William Schaub.
In DtCyber operator console:
operator> lc 11,7,cards/y2k-altfix-batch.txt
This will build a patched version of parts of NOS, leaving the result in the direct access file MTRBIN. This then needs to be edited into the system and a new deadstart tape written in the usual way:
Mount a new writeable tape on NT051.
In DtCyber operator console:
operator> lt 13,0,1,w,dstapes/dsty2kfixed.tap
Edit changes into system library and write new deadstart tape.
In IAF login:
ATTACH,MTRBIN. LABEL,NEWDS,VSN=***051,D=PE,LB=KU,F=I. LIBEDIT,P=SYSTEM,B=MTRBIN,N=NEWDS,I=0. RETURN,NEWDS.
Then:
This is very useful for interactive access from Windows machines … although I don't have any of those to try it with. TeraTerm should work under Wine on Linux.
operator> lc 11,7,cards/jobtdu.txt
This creates the indirect access file STTERM in INSTALL.
GET,STTERM. TDU,I=STTERM,L=LIST. REPLACE,TERMDEF.
The indirect file TERMDEF is now in the INSTALL users catalog.
SCREEN,TTERM.
to set up for a TeraTerm Pro terminal.
Note this is *user specific*.
This TERMDEF adds to the “master” TERMDEF in the LIBRARY catalog for the user INSTALL. It would need to go in other users catalogs for them to be able to SCREEN,TTERM.
The “master” TERMDEF can be recreated from TDUFILE in LIBRARY, but adding the contents of STTERM to TDUFILE in FSE then rebuilding the “master” TERMDEF may be best avoided.
Thanks to William Schaub for discovering this. In NOS 2.8.7 there is a very “user friendly” method of adding user accounts. This is part of the MS (Manage System) “package”, and seems to be described only in:
CYBER Supermini Operations Handbook 60459850A (October 1984).
AB. X.MS(VALUSER,NOLIMIT,usernam,passwor)
where usernam
is the user name (1 to 7 letters or numbers) and passwor
is the initial
password (4 to 7 letters or numbers, default UNSECUR).
ASSIGN,jsn,2.
where jsn
is the job sequence number for the VALUSER job shown in the B display.
And that's it! For a user with restricted privileges and resource usages, use:
LIMITED
instead of NOLIMIT
.
Also thanks to William Schaub for discovering this. Terminating dayfiles is needed periodically to keep the system healthy. A very straightforward way of doing this on NOS 2.8.7 is:
AB.
X.DFD. # Dump the system dayfile. X.AFD. # Dump the accounting file (optional). X.ELD. # Dump the error log (optional).
X.MS(ENDLOG)
Wait for the process to finish, and when prompted to:
ASSIGN,jsn,2.
where jsn is the job sequence number for the ENDLOG job shown in the B display.
X.MS(PURGLOG)
To confirm you really want to do this, when prompted to:
ASSIGN,jsn,2.
ASSIGN,jsn,2.
again to finish the process.
Thanks to Digby Tarvin for discovering this. This DSD message can be considered harmless and “normal”, but it seems a way of stopping it happening is to turn off reports from NPUs.
NAM. REQUEST *K* DISPLAY is shown at top right:
K,NAM.
The left display will show:
READY.. ALERT CS NAM
Enter:
K.AP K.RE,NPUS,OFF # NOTE: you do not type in the K. here. Already there. K.* K.END. AB.
Install further products, such as Algol 5, Algol 68, console games, LISP, …
Install Kermit for file transfer. See William Schaub's website: Building Kermit NOS2
And so on … …