PDP-8/A Repairs - M8317 boot ROMs


This Web page last updated date Apr 24 2018. I obtained some PDP-8/A chassis and power parts in May 2015, examined, cleaned, painted, tested and repaired them. Other Web pages linked from that page, discuss various repairs. On this Web page, I discuss working with the M8317 multifunction card's boot PROMS; and the work done by others on PDP-8 boot PROMs. My thanks to David Gesswein, who supported my 8/A repairs and who provided PROM dumps of his 8/A PROMs and discussed how to generate new PROMs. Also thanks to Anders Sandahl who discussed his 8/A PROM work and tools with me in 2018. - Herb

See my other DEC minicomputers as listed on my DEC Web page. To email me, see see my ordering Web page for my email addresses.

Index

Introduction
Background
Documents
Summary
Interpreting the 8/A boot PROMS: PROM configuration
Interpreting the 87A2 & 88A2 PROM descriptions in 8/A User's Manual
Interpreting 87A2 & 88A2 PROMs in 8/A Engineering Documents
158a2 & 159a2 PROM dumps by David Gesswein
INterpreting 158a2 & 159a2 PROM in the 8/A User's manual
Interpreting 158a2 & 159a2 PROM dumps from David Gesswein
Decoding the 8/A boot PROMS by Anders Sandahl

Introduction

The point of this Web page, is to display the work I did on understanding the bootstrap PROMS on the M8317 PDP-8/A option card. Why understand them? To make copies for my use! To know how to use them. And to confirm the copies are "correct" - these PROMS are not mere data-in-memory like program PROMS use in post-microprocessor era computers, they are little bits of logic. The PROMS themselves are obscure early 1970's technology as described in the introduction. In the 20th century digital logic manner, I show my work so I and others can confirm results and use them for further benefit.

PLease point out any errors, corrections or additions. If you find this page useful, contact me. Thank you. - Herb Johnson

Background

[m8317 PROMS]

The M8317 option board #2 for the PDP-8/A includes a pair of 256 by 4 bit PROMS. On my card, they are located at E82 and E87. (In the photo, the two chips centered on the bottom row.) These contain power-on jump and bootstrap code sequences for various PDP-8 devices. Also, pages 6-55 and furthre in the 8/A User's Manual. These are available from various online archives of PDP 8 documents.

The configuration of these 4-bit PROMs is not like PROMS used in later microcomputers, where ROM memory resides in processor instruction addressing. These PROMS are a kind of micro-code, instructions about loading their content into available memory - thus they require working RAM to operate. As these are 4-bits wide, and the PDP-8 instructions are 12 bit, for each four "nybbles" of ROM there's four bits for directing operations: load address, load page (extended address), deposit, and start. These patterns are encoded across both ROMS, they are read as pairs. So, to interpret the contents of these PROMS, from a perspective decades later, is challenging.

Another challenge is the PROMS by brand and model. These are TTL fusable or fuse link PROMS. To program, they require sufficient current pulses to blow internal fuse links. MOst UVPROM programmers don't know what to do with these devices. Reading them can be as simple as providing a TTL address and some LED's to look at outputs; writing to them involves simple circuits but thoughtful design. I discuss fuse-link PROMS on another Web page. They were common to 1970's minicomputers, microcomputers as logic elements - the 8/A uses a few others for that purpose.

The PDP-8/A I own, contains proprietry PROMS and not DEC PROMs. To use DEC PROMS, I'll have to copy them from another machine, and David Gesswein kindly provided a copy of his DEC PROMs. But making sense of them, confirming they are correct copies, and understanding how they work to use them, obliged me to do the work shown on this Web page.

Documents

ROMS part number 23-084A1, 23-086A2, 23-087A2, 23-088A2, are dump-listed in the 8/A Engineering Drawings as "ROM Pattern Spec." sheets. There's also descriptions "ROM Prog. Directions" for 8/a Option Board #2 M8317-YA. The 23-086A2, is a PROM used for decoding logic operations, it is not a boot PROM; the 087 and 088 are bootstrap PROMs.

The PDP 8/A User's Manual, section 6, describes the details of the PROM configuration and how they are loaded into memory based on selections made on a DIP switch on the M8317 board. It's like the instructions in the Engineering Drawings. That's followed by listings of sets of bootstrap PROMs for PROMS labled 87A2 and 88A2, and labled 158A2 and 159A2. DEC's part number 23-000A8 is a blank PROM.

Summary

After reviewing the PDP 8/A Engineering and Users Manual documents, I read their descriptions of how the pair of 256 X 4 PROMS were operated by the M8317 Option board. They are not literally read as software in memory; the ROMS have encoded commands to direct the M8317 to perform load address or load data instructions into writable memory and to execute those operations. The two 4-bit PROMS are read alternately, as directed by switch-settings on a DIP switch, to perform either auto-start or bootstrap-loading. I describe the scheme under "PROM configuration" on this Web page.

The documents provide descriptions of the contents of some DEC PROM-sets.The 87A2 and 88A2 is one set, and 158A2 and 159A2 is another set. Both the Engineering documents and the Users documents, describe the ROM encoding and command scheme, in similar ways. But they show the ROM contents in two different ways - neither are literal "dumps" of each ROM. As the 87A2 and 88A2 set are in both documents, I chose to "interpret" and "decode" each of those, to compare and verify my understanding of the ROM's encoding and operation. I hand-decoded these for the first 32 decimal (40 octal) PROM locations. IN these M8317 PROMS, the first 20 octal (16 decimal) locations are "autostart/reset vectors" which load an address and extended address and then jump there; the remaining PROM locations are sets of bootstrap instructions (which are selected by the M8317 DIP switch) to load and then execute at selected memory locations.

Results for the 87A2 and 88A2 from two document sets, are shown on this Web page, as Interpreting the 87A2 & 88A2 in the User's Manual and Interpreting 87A2 & 88A2 in the Engineering Documents. The results were similar but not identical - which simply means the two documents I obtained were of different releases or revisions.

The PROMs of interest to me, are from David Gesswein's PDP-8/A, labled 158A2 and 159A2. He generously pulled them from his board and read them on a PROM reader, described on this web page as 158a2 & 159a2 PROM dumps by David Gesswein. The Intel hex record format is described, and I show how to "merge" the two files - which I did by hand for 16 decimal bytes.

Then, I interpreted both the 158A2/159A2 PROM dump from David, and a similar description for them in the 8/A user's manual, in the same ways as demonstrated for the 87A2/88A2 sets. I describe INterpreting 158a2 & 159a2 PROM in the 8/A User's manual in one section on this page, and Interpreting 158a2 & 159a2 PROM dumps from David Gesswein in another section. The results for the first 40 octal (32 decimal) sets of instructions are similar but not identical - again as with the other PROM set, there's some variation.

I"ll wrap up this work, by producing a complete interpreted set of 158A2/159A2 operations from David's PROM dump. He also has a dump from other non-DEC PROMs. If i choose to automate the interpretation and decoding, then I'd have the tools to process those and other PROMS more conveniently.

Interpreting the 8/A boot PROMS

PROM configuration

On the M8317-YA, the boot PROMs are referred to in the DEC literature as ROM#1 in socket E82, ROM#2 in socket E87. (Other versions of the M8317 may place these elsewhere.) THere's a number of PROM sets that DEC provided, and OEM's produced other sets. My interests are in the DEC PROMS labled 158A2 (#1) and 159A2 (#2), which provide bootstraps for paper-tape devices and loading the RIM loader from the serial console port. DEC's documents also describe a set of ROMS labled 87A2 and 88A2. For me to verify I understood the PROM configuration, I decoded information for both sets of PROMS.

The PDP 8/A User's Manual, section 6, describes the details of the PROM configuration and how they are loaded into memory based on selections made on a DIP switch on the M8317 board. I'll not describe the switch settings. The pattern of ROMs #1 and #2 in memory are accessed as sketched below. ROM #1 is read as a high nybble, ROM #2 as a low nybble, in address sequence, for 8 bits; the next address in each ROM forms the lower 8 bits, of what amounts to a control and data "word" - 4 bits of control, 12 bits for a PDP 8 address or data.

addr 0  rom 1 X | rom 2 C
addr 1  rom 1 B | rom 2 A
addr 2  rom 1 X | rom 2 C
addr 3  rom 1 B | rom 2 A

So each four nybbles forms a 16 bit value XCBA; XCBA; etc.

where X is a control nybble load addr/load ex addr/dep/st in that order:
  load address operation
  load extended address operation
  deposit operation
  start address operation
and CBA is a 12 bit PDP8 instruction or data or address.
note: I think the extended address has a 3-bit offset, so
page 1 would be octal 0010, page 2 0020, etc.

There's an additional encoding. The first 17 octal sets of contents, are used for autostart or reset operations. They are in a simple pattern of load address, then loas extended address and start, as what amounts to eight "reset vectors". I believe one of these is selected by the DIP switch; or none if autostart is disabled, another DIP switch setting. So "bootstrap" instructions begin at octal 20 in the PROM-pairs.

Interpreting the 87A2 & 88A2 PROM descriptions in 8/A User's Manual

The PDP-8/A User's manual section 6, describes the programming pattern methods, and then lists the contents of the PROM pair 87A2 (ROM#1) and 88A2 (ROM#2). As described above, these are read alternately to form 16 bit words, with four leading bits for address or deposit or start operations; the 12 remaining bits are the data for an address or instruction or data to be deposited in the selected memory.

The table below, shows on the left side the ROM address, supposed octal memory address to deposit into, the contents (the lower 12 bits, in octal) to be deposited or addressed, and comments - as listed in the User's manual. The column on the right, "my guess", is what I believed would be the binary encoding across the two PROM pairs - which is split between the PROMS as described on this page.

Rom	mem	cont	comments				MY GUESS
adr	adr	octal						hex

0	0000	0000	auto/rst load adr 0		8000h		
1
2	0000	0000	auto/rst field adr 0/start	5000h	
3	
4	0200	0200	auto/rst load adr 0200		8080h
5
6	0000	0000	auto/rst field adr 0/start	5000h
7
10	2000	2000	auto/rst load adr 2000		8400h
11
12	0000	0000	auto/rst field adr 0/start	5000h
13
14	4200	4200	auto/rst load adr 4200		8880h
15
16	0000	0000	auto/rst field adr 0/start	5000h
17
20	7737	7737	load addr 7737			8FDFh  
21
22	0000	0000	load field 0			4000h
23
24	7737	6014	dep 6014	0010110000001100	2C0Ch  
25
26	7740	3376	dep 3376	0010011011111110	26FEh
27	
30	7741	7326	dep 7326	0010111011010110	2ED6h
31
32	7742	1337	dep 1337	0010001011011111	22DFh
33
34	7743	2376	dep 2376	0010010011111110	24FEh
35
36	7744	5341	dep 5341	0010101011100001	2AE1h	
37	
40	7745	6011	dep 6011	0010110000001001	2C09h

Interpreting 87A2 & 88A2 PROMs in 8/A Engineering Documents

The PDP-8/A Engineering docs provide a listing of three PROMs. One of them , 23-086A2, is used for logic operations and is not relevant at this point. The others are part number 23-087A2 ROM #1, and part number 23-088A2 ROM #2. Each PROM is "dumped" to show its contents in address order, as four binary bits and two octal values.

As described above, the 4-bit PROMS are read alternately by the M8317, to form 16 bit words, with four leading bits for address or deposit or start operations; the 12 remaining bits are the data for an address or instruction or data to be deposited in the selected memory.

In the table below, the first (leftmost) column is the PROM address. the next two columns show the binary 4-bit values from that address for the 87A2 and the 88A2. Read horizontaly, these form the first 8 bits of the operation read by the M8317 hardware. Likewise, the next row represents the next 8 bits. Together, they form the 16 bits of control and data for the first ROM instruction.

The next column is the "execution address" representing that 16 bit value; and the next column shows the hexadecimal value. Note these occur every other row, of course.

The column on the right, "octal result", is my interpretaton of that 16-bit binary encoding across the two PROM pairs. Compare these results, with the similar table and interpreted results as read from the 8/A User's Manual, also on this Web page.

Note that the first 17 octal ROM locations, are uses as what amount to "autorestart jump vectors" and have a consistent pattern of load address followed by load extended address and start. The M8317 has a DIP switch to direct autostart to one of these locations, or to choose none and instead choose one of the bootstrap loaders which follow at address 20 octal.

ROM #1 and ROM #2  form these binary instructions

	87A2	88A2
octal	binary bin	exec	hex 			octal result
addr	data	data	addr	instruction

0	1000	0000	0	8000	load adr 0000
1	0000	0000
2	0101	0000	1	5000	load ext 0000 / start
3	0000	0000
4	1000	0000	2	8080	load adr 0200		
5	1000	0000
6	0101	0000	3	5000	load ext 0000 / start
7	0000	0000
10	1000	0100	4	8400	load adr 2000
11	0000	0000
12	0101	0000	5	5000	load ext 0000 / start
13	0000	0000
14	1000	1000	6	8880	load adr 4200 
15	1000	0000
16	0101	0000	7	5000	load ext 0000 / start
17	0000	0000
20	1000	1111	10	8FDF	load adr 7737 (hi/lo paper)
21	1101	1111
22	0100	0000	11	4000	load ext 0000
23	0000	0000
24	0010	1100	12	2C0C	dep 6014
25	0000	1100
26	0010	0001	13	21FE	dep 0776 (different)
27	1111	1110
30	0010	1110	14	2ED6	dep 7326
31	1101	0110
32	0010	0010	15	22DF	dep 1337
33	1101	1111
34	0010	0100	16	24FE	dep 2376 
35	1111	1110 
36	0010	1010	17	2AE0	dep 5340 (different)
37	1110	0000
40	0010	1100	20	2C09	dep 6011
41	0000	1001
42	0010	1010	21	2AEE	dep 5356
43	1110	1110

158a2 & 159a2 PROM dumps by David Gesswein

David provided me with dumps of his two M8317 PROMS, labled 158A2 and 159A2. This section describes how to read off those hex dumps into the instruction format as interpreted by the 8/A.

Hex dump of 158A2 PROM
Hex dump of 159A2 PROM

As he described: "They were read with a Data-IO Unisite. Checksums are checksums reported by the Unisite. .bin is binary file and .hex is Intel hex32. These are the standard PDP-8/A boot proms. I found Intersil 5603A and Signetics 82S126 PROMS in the [M8317] boards." David had some difficulties with a clean read and binary of the PROMS, so I've corrected his Intel Hex files to remove irrelevant content.

Processing the Intel Hex record format of both PROMS

:1000000008000500080805000800050008080500AC
nccaaaattddddddddddddddddddddddddddddddddss

aaaa - data address
dddd... - 10 hex bytes of data, but the upper four bits are 00 (four bits PROMS)

Since the PROMS are read alternately, the nybbles must be combined alternately:

PROM 158a2.hex has first 10 data bytes:

08000500080805000800050008080500

PROM 159a2.hex has first 10 data bytes:

00000000000000000400000008000000

So mixing the two  becomes:

0800 - first two low order nybbles from 158a2, 159a2
0000 - next two, and so on
0500
0000
0800
0800
0500
0000
0804
0000
0500
0000
0808
0800
0500
0000

The above 16-bit words, represent the four control bits and 12 data/address bits which the M8317 bootstrap and auto-start hardware reads. This is described elsewhere on this page.

Interpreting 158a2 & 159a2 PROM in the 8/A User's manual

In the 8/A User's manual table 6-7, are descriptions of the 158a2 & 159a2 PROMs. Below is my representation of that table, plus what I call "my guess" as to the 16 bit hexadecimal representation of those operations, as read from those two PROMs. Other parts of this Web page, show how to split those hex values between the ROMS. Another part of this Web page, shows how to construct the 12-bit octal value of address or data, and the upper 4 bits which direct the M8317 to perform the load address, load field (extended address), deposit, and start operations.

Note that the first 17 octal ROM locations, are uses as what amount to "autorestart jump vectors" and have a consistent pattern of load address followed by load extended address and start. The M8317 has a DIP switch to direct autostart to one of these locations, or to choose none and instead choose one of the bootstrap loaders which follow at address 20 octal.

ROM #1 & #2, 158A2 and 159A2

Rom	mem	cont	comments				MY GUESS
adr	adr	octal						hex

0	0000	0000	auto/rst load adr 0		8000h		
1
2	0000	0000	auto/rst field adr 0/start	5000h	
3	
4	0200	0200	auto/rst load adr 0200		8080h
5
6	0000	0000	auto/rst field adr 0/start	5000h
7
10	2000	2000	auto/rst load adr 2000		8400h
11
12	0000	0000	auto/rst field adr 0/start	5000h
13
14	4200	4200	auto/rst load adr 4200		8880h
15
16	0000	0000	auto/rst field adr 0/start	5000h
17
20	7737	7737	load addr 7737			8FDFh  
21
22	0000	0000	load field 0			4000h
23
24	7737	6014	dep 6014	0010110000001100	2C0Ch  
25
26	7740	3376	dep 3376	0010011011111110	26FEh
27	
30	7741	7326	dep 7326	0010111011010110	2ED6h
31
32	7742	1337	dep 1337	0010001011011111	22DFh
33
34	7743	2376	dep 2376	0010010011111110	24FEh
35
36	7744	5341	dep 5341	0010101011100001	2AE1h	
37	
40	7745	6011	dep 6011	0010110000001001	2C09h

Interpreting 158a2 & 159a2 PROM dumps from David Gesswein

From David Gesswein's dump of his 158a2 & 159a2 PROMs, I've constructed the table below. Another section of this Web page, describes how the two 4-bit PROMS are read alternately, to form four 4-bit or one 16-bit "instruction" as I've listed below. That instruction becomes four upper bits of load address, load extended address, deposit and start bits; plus 12 bits which are the associated address or instruction loaded. ROM #1 and ROM #2 then become these binary instructions, very similar to the 87A2 and 88A2 listings in user's manual (and described on this Web page.)

Note that the first 17 octal ROM locations, are uses as what amount to "autorestart jump vectors" and have a consistent pattern of load address followed by load extended address and start. The M8317 has a DIP switch to direct autostart to one of these locations, or to choose none and instead choose one of the bootstrap loaders which follow at address 20 octal.

	158A2	159A2
octal	binary bin	exec	hex 			octal result
addr	data	data	addr	instruction

0	1000	0000	0	8000	load adr 0000
1	0000	0000
2	0101	0000	1	5000	load ext 0000 / start
3	0000	0000
4	1000	0000	2	8080	load adr 0200		
5	1000	0000
6	0101	0000	3	5000	load ext 0000 / start
7	0000	0000
10	1000	0100	4	8400	load adr 2000
11	0000	0000
12	0101	0000	5	5000	load ext 0000 / start
13	0000	0000
14	1000	1000	6	8880	load adr 4200 
15	1000	0000
16	0101	0000	7	5000	load ext 0000 / start
17	0000	0000
20	1000	1111	10	8FDF	load adr 7737 (hi/lo paper)
21	1101	1111
22	0100	0000	11	4000	load ext 0000
23	0000	0000
24	0010	1100	12	2C0C	dep 6014	
25	0000	1100
26	0010	0110	13	26FE	dep 3376
27	1111	1110
30	0010	1110	14	2ED6	dep 7326
31	1101	0110	
32	0010	0010	15	22DF	dep 1337
33	1101	1111
34	0010	0100	16	24FE	dep 2376
35	1111	1110
36	0010	1010	17	2AE1	dep 5341	
37	1110	0001

Decoding 8/A boot PROMS

Anders Sandahl contacted me in April 2018 about his work as follows:

I found your page about decoding PDP-8A boot PROM's while I was looking after some info about which PROM I could use as replacement for the ones that I got now. Good info!

Background; I restored a PDP-8A/420 a few years ago. That machine actually ended up as a PDP-8A/620 with a KK8E and extra everything (including [the extended arithmetic boards for] EAE).

Then I got some parts over and I was given a small 8A/100 chassis. So I decided to build another 8A from the pieces. I also intend to boot from the os8 diskserver that Kyle Owen made. For this I need to make bootroms (since I don't want to toggle in the bootstrap every time).

So, I'll create new PROM images with the bootstrap for the serialdisk server. To verify the images before I burn them to real ROM's, I wrote a small c-program that decodes the ROM-contents. I ran it on the 8/A boot PROM images at bitsavers.org and the results look as expected.

Later:[Here] is a little c-program and a makefile which compiles under Linux. Feel free to put it anywhere, I will put it on my page as well. I've created a restoration page about my 8A/100. I've [also] sent decoded dumps of the PROMs above. I also got some unknown PROM's with the M8317 board that I bought for this machine. I've dumped and decode them as well. - Anders

15xA2 bitsaver PROMs
46xA2 bitsaver PROMs
1287xx PROMS on the M8317 I bought. - Anders


Copyright © 2018 Herb Johnson

Herb Johnson
New Jersey, USA
to email @ me follow this link