Skip to content

Changes to ITS

David Bridgham edited this page Apr 3, 2024 · 3 revisions

The Future of ITS

Intro

Here are some thoughts about what changes and additions I might like to see to ITS and the KV10. These open up the larger, philosophical question about whether ITS should be kept as it was back in the day — that is, a museum piece — or modified and updated by its users. I’m on the side of both. I think the history should be kept but also people ought to be free to hack the code for their purposes.

So here are some ideas I’ve had for changes I might make, if and when I get there.

Port ITS to the KV10

Obviously, since this is the KV10 Wiki, step one is simply to get ITS running on the KV10. The KV10 is not an exact replica of any of the DEC PDP-10s; it is its own implementation of the PDP-10 architecture. It’s closest to Dave Conroy’s PDP-10/x but differs some from that as well. Thus there are changes to the processor that will need to be reflected in ITS to get it working. A big one will be I/O devices. Mass storage and network interfaces will make no attempt to replicate RP03s or the IMP, for example. So ITS will need custom device drivers.

More Memory

The ITS pager allowed for 222 words of physical memory. The Page Table Entries have three unused bits,tempting one to enlarge that. Unfortunately, the AGE bit is in the middle of the unused bits so they’re not contiguous with the Physical Address. So I’d like to move that AGE bit and expand the physical address space to 225 words. Since the FPGA boards I’m currently thinking to use come with 256 MB of SDRAM, that’s 32 MW which works out perfectly.

WAI Instruction

The PDP-11 has the WAI instruction, wait for interrupt. It seems this could be useful for the PDP-10. I’m thinking to add it as another variation on JRST, just like JRST 4 is HALT. On the KA10, the AC field of the instruction is a bit-field. In practice, all combinations weren’t useful so later models of the PDP-10 made the AC field be more of an index into possibilities. The KV10 uses that index implementation but less than have of the combinations are implemented so I propose to take one of the unused variants for WAI.

I have no idea if ITS has a place in its code where this new instruction could be put to good use. If not, then I’d probably not bother with it.

Time

I want to look into how ITS keeps track of time. I think the right way for an OS to keep time is TAI and then do any conversion to UTC (leap seconds) and local time in libraries. How hard would it be to convert ITS to this model? Off the top of my head, I suspect one of the more complicated parts of making this kind of change would be with timestamps in the filesystem.

Then implement NTP and put in code to support synchronizing to a GPS (or other) time source so it could even be a stratum 1 NTP server.

What I’m thinking is having two words, one for seconds and one for fractional seconds (pick an appropriate epoch). That’s ridiculously more precision that I’d ever be able to implement but 18 bits of fractional seconds isn’t enough. So that double word gets incremented by some amount for each time tick (60 or 100 Hz?) and that increment value is adjusted to keep the time sync’d. In addition, I’ve thought about having a counter just running off the system clock (50 MHz on the QMTech boards) which could be used for internal timestamps. I was thinking in particular for network packets on both sending and receiving such that NTP could use that information for calculating network round-trip times more accurately. Don’t know if that’s a useful idea or not.

IPv6

IPv6 is slowly spreading around the Internet. My understanding is that we ran out of IPv4 addresses quite a few years back and so I think ITS ought to be able to play in the current Internet. And if you want to be a server, IPv6 is about the only get to get a routable IP address these days. Of course that raises the issue of network security.

My thought for implementing IPv6 is to do it in a separate user job. That is, use ITS as a kind of microkernel (does MLDEV work this way?). That then raises the question of whether the IPv4 code ought to be similarly moved out of the ITS kernel. And also Chaosnet? I’d say to leave Chaosnet inside ITS just because of history but we probably want to be able to tunnel Chaosnet over IP so that might get a little complicated.

Clone this wiki locally