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.
- adapter schematic - Schematic diagram of the EPROM adapter for the M9301.
- makerom.sh - Converts M9301 ROM images to images suitable for the adapter.
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.