NTP client for RSTS/E
This is a simple NTP (Internet Network Time Protocol) client for RSTS/E. Since RSTS does not have IP support, this client handles NTP broadcast time announcements but it does not implement the more common request/response handshake. The broadcast scheme, because it doesn't allow for measurement of the network delays, does not produce as high an accuracy as the request/response version does. But given that RSTS/E has rather coarse clock resolution -- 10 ms best case -- the broadcast is easily adequate.
To use this you will need an NTP client on the LAN to which the RSTS
system is connected, with periodic time broadcasts enabled.
The "chronyd" NTP implementation can easily be configured to do this
using the broadcast statement in the chrony.conf file. I believe
"ntpd" can also do this but I have not tested that.
Please note:
Both RSTS Ethernet drivers have bugs that require patches. Be sure to install
the patch in patches/xedvr.cmd and/or patches/xhdvr.cmd.
Contents:
- ntp.c -- the main program.
- tzutil.c -- a set of functions for manipulating time encodings.
- tzutil.h -- a header file for the above.
- ntoh.mac -- functions for converting from "network byte order".
- start.com -- a sample RSTS/E startup command file for NTP.
- build.com -- a sample command file to build NTP from source.
- ntp.tsk -- a pre-built binary for NTP.
Building
You can use the prebuilt ntp.tsk but it's easy to build from source if you
prefer. You need DEC C for this. To build, do @build.com. Note that the
code defaults to 60 Hz clock frequency. To use a different value, supply the
definition when compiling tzutil.c, for example:
cc /define="HERTZ 50" tzutil
Installing
NTP expects some files in directory [0,123]. Create that on the system disk and copy into it:
- ntp.tsk
- start.com
- tz.dat
tz.dat is the timezone data file for the timezone in which your RSTS system
lives. You can get this from the Internet time zone data repository, but
on a typical Unix system you will have a full set of timezone files, typically
in /usr/share/zoneinfo. For example, if you are in the USA Eastern time zone,
the likely correct timezone file is in Americas/New_York. Copy that file,
in binary mode, to your RSTS system and name it [0,123]tz.dat.
You will probably need to edit [0,123]start.com. It defines logical name
NTP$IF to be the RSTS device designator of the Ethernet interface to use.
Edit that as needed.
Starting NTP
To run NTP, execute @[0,123]start.com. You can add that line to the
standard system startup file [0,1]start.com to start NTP at system startup.
NTP reports the current time at startup. It then detaches and runs until killed or until system shutdown. At this point it listens for NTP broadcast messages and will update the system time (to the resolution available with RSTS) accordingly. If the current zone offset changes (start of end of "daylight savings time" or "summer time") that is reflected in the RSTS time.
To minimize latency issues, NTP runs with slightly elevated priority and locked in memory.
Messages
If NTP adjusts the RSTS time by more than one second it generates a message using the OMS subsystem. If OMS is not running, nothing is reported. The message looks like this:
>>>>>>>>>>>>>>> OMS V10.1-A 20-Nov-23 05:00 PM <<<<<<<<<<<<<<<
Message 1558 from NTP, user [1,2], Detached, job 2
Time updated to 20-Nov-2023 5:00:44.83 pm EST (-5:00), stratum 1, source GPS