Notes: Boot Board

The M9301 Bootstrap and Terminator only has boot code for a limited number of PDP-11 options. The M9312 Bootstrap and Terminator has additional boot code available.

PDP-11 Boot Code

There are two blocks of addresses in the I/O range that have been used for boot code: 165000-165777 and 173000-173777.

The M9301 Bootstrap and Terminator places this 1kW space in 4 4bit proms. Each prom contains 4 bits of each word. The M9312 Bootstrap and Terminator places this in 5 proms, each prom containing the entire range of words. 165000-165777 is placed in a single rom and 173000-173777 is divided between 4 roms. The advantage is that a single device can be replaced on the M9312 and an entire bootstrap can be added.

Both the M9301 and M9312 use small 4 bit PROMs. EPROMs are more readily available, easier to program and cheaper since they can be programmed more than once. My goal at this point is to build an adapter board that allows the use of small EPROMS in place of the fused  PROMs.

M9301

The M9301 has one word spread across 4 PROMs. It is simple, then to replace those 4 PROMs with 2 EPROMs. The PROMs were fast, and a note on the M9301 schematics indicates 70ns access time. EPROMs are typically slower, but a simple capacitor replacement on the M9301 will allow the SSYN signal to be slowed to allow for a slower memory chip.

The contents of the PROM images are modified to create the correct results when installed. Because of the boot address generation hardware it is necessary that bits D8 through D1 be complemented in the PROM image. This has implications for the value stored in the boot vector address at 173024.

The boot vector address stored in 173024 is ANDed with the 8 DIP switches to create the boot address. For this to allow the address to be anywhere in the 256 word (512 byte) range, the base address must be ORed with 0776. The AND then sets the value for these 8 bits.

Example: To get the boot vector to jump to any location in 165000 area, set the boot vector 173024 to 165776. Every address in the word image must be XORed with 000776 to complement the the bits required by the M9301 data path. The switches can then be set such that any address in the 165000 area can be a start address for a boot. The M9312 images available have the console boot without diagnostics at 0165144.

M9312

The M9312 places all the bits for a word in one 4 bit PROM. This is an advantage for distribution and maintenance, but makes PROM emulation more difficult, since a single device must be multiplexed into the 4 data bits. This would require two EPROMs with 4 4to1 multiplexers. Note that the timing (120ns access time) is controlled by a delay line on the M9312 and would be difficult to change.

The M9312 roms place the console and diagnostics in the 165000 area and the boot code in the 173000 area.

Adapter

The adapter that I built maps the 4 proms of the M9301 into 2 2732 EPROMs. I modified the M9301 by changing a single capacitor (270pf to 1000pf) to lengthen the delay from MSYN to SSYN by about 400ns. The adapter has 8k bytes off address space and the original proms only contain 1k bytes. This means that the EPROMs can be programmed to contain 8 different versions of the M9301 contents. The versions are selectable via 3 switches.

Memory Map

The following map shows the first bank of an 8 bank EPROM. The upper 3 bits of the EPROM address are controlled by a DIP switch. These select one of the 8 banks. The banks are addressed at multiples of 0x0400.
165000 165777 0x0000 0x01FF diagnostics and console
173000 173177 0x0200 0x027F boot rom 1
173200 173377 0x0280 0x02FF boot rom 2
173400 173577 0x0300 0x037F boot rom 3
173600 173777 0x0380 0x03FF boot rom 4

Console Boot Troubles

The console code is contained within the 165000 area of the boot code. The M9301 is only capable of booting to the 173000 area of the boot code. The question is how to allow an automatic boot to the console emulator.

The solution is to change the value in the Power Fail Trap Vector so that it points to the 165000 portion of the boot code. The switches can still be used to generate an offset. It just has to stay in the 165000 area.