Bootroms, new style

It’s been almost a year since my last post here – I’ve been busy with lots of other things, and there hasn’t been any major new breakthrough for PDP2011. I started on a new backend for the DEUNA/DELUA controller, based on wireless network and esp32, but I ran into issues that made me feel like it would be better to start from scratch again – so not really anything to report there, other than that I’m confident that what I want is actually possible. Also, I was working on some hardware modules for MINC, but the type of hardware that those modules need is especially hard hit by the ongoing IC shortages – and besides, I made several mistakes in the PCB’s I designed. Most embarrassing that I swapped the rows of the backplane connector on all the modules I designed… but also, on another level, I thought to save a few euros and not use one of those overpriced shipping options but rely on the regular post instead. That set back the project by some 12 weeks already…

Still, if I look back over the change log of the past year, a lot of things changed. And some of those really need telling about, because they make things a lot easier, for me and for all the PDP2011 users out there. And the first one I will post about is how PDP2011 now deals with boot roms.

The original PDPs had a console panel that you could use to toggle in a couple of instructions to boot a system. Or they would have a card with one or more tiny, tiny roms on it – compare to what we are used to today, and it’s beyond comprehension, how limited systems were back then. In fact the history of the PDP line nicely shows the evolution of booting – from only being able to toggle, to having complete hardware diagnostics built in.

The way PDP2011 boots isn’t very accurate, historically – a PDP11 cpu boots up through a trick with the power fail interrupt vector combined with a wired-or on the bus to start the cpu on an instruction in the bootrom. But I didn’t know that at the time, and wired-or is not a thing in FPGA logic either – so for quite a while, I would just start the cpu at the address that the code I wanted to run began at. Later on, when I was adding the disk controllers, each of those would come with a short segment of code to boot from that disk – and that slowly turned into what is now the default PDP2011 boot code.

The default PDP2011 boot roms
What the default boot code does is announce the model of the CPU, if the FPU is included, and then list the devices that are on the bus. And then it goes on to boot from the first configured controller in the order RK, RL, RH. It can only boot from the first disk, even when the controller can handle multiple disk images – there’s no possibility to interact, the only niceties about this boot code is that it will announce the type of disk it will try to boot from.

The DEC M9312 boot roms
The alternative way of booting is to setup PDP2011 for using the original DEC M9312 style boot roms. There were several roms you could use on that board, but the one I use is described in the K-SP-M9312-0-5_Aug78.pdf that can be found from Bitsavers – in other words, the ‘ascii console and diagnostic rom for use with 11/04/05/10/20/35/40/45/50/55’.

The MINC boot roms
The third set of bootroms deals with MINC – since MINC has a very different set of modules that vary, but a fairly static basic configuration, it made sense to make a specific variant of the default PDP2011 boot roms especially for MINC.

How you choose which roms you get
In the older versions, you would have to meddle with the project files to make sure that you’d include the correct rom images into the build. Things like removing m9312l46.vhd and adding m9312l47.vhd. Not really what you’d call intuitive – especially since to me the numbers 46 and 47 mean something, but I’d be amazed if anyone else could explain.

When I will release the current version – in a couple weeks, probably – that will be over. You can just configure which set of roms you want on the unibus component instantiation – just the same as you set the cpu model or how many serial lines there are.

The three variants will be

   bootrom => boot_pdp2011
   bootrom => boot_odt
   bootrom => boot_minc

and the default will, for now, still be boot_pdp2011, so if you didn’t change anything, and don’t change anything for the new version, everything should still work the same way. And if you did change bootroms, the only thing you need to do for the new version is include the bootrom line in your unibus instantiation.

Leave a Reply