PiDP-8/I Software

Changes To PDP-8 Memory Addressing
Log In

Changes to "PDP-8 Memory Addressing" between 2017-05-11 11:12:35 and 2019-02-17 03:22:35

15
16
17
18
19
20
21
22

23
24






25
26
27
28
29
30
31
32
33
34
35

36
37


38
39
40
41
42
43
44
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

44
45
46
47
48
49
50
51
52







-
+


+
+
+
+
+
+











+

-
+
+







Another bit of notation unique to this article, but which I hope will spread, is the unit **kiW**, meaning 1024 words of PDP-8 memory. The unit is named by analogy to [kibibytes](https://en.wikipedia.org/wiki/Kibibyte), abbreviated **kiB**. This new unit does two things for us:

1.  It distinguishes between the proper [SI](https://en.wikipedia.org/wiki/International_System_of_Units) definition of **k** and the "computer memory" meaning of **k**: 1000 vs 1024. DEC manuals will often just use **k**, and you're expected to understand that it means 1024 words, not kibibytes or kilobytes.

2.  It avoids ambiguity with **kW** meaning a [kilowatt](https://en.wikipedia.org/wiki/Watt#Kilowatt). That is not an unlikely confusion, since a fairly small PDP-8/I setup dissipates about one kilowatt of power, and a large PDP-8 setup could dissipate multiple kilowatts.


# Bytes
# <a id="bytes"></a>Bytes

The PDP-8 predates the modern notion of an 8-bit byte. Back in the PDP-8's day, a "byte" was a more slippery concept. You could speak of 6-bit bytes, 7-bit bytes, 9-bit bytes... It all depended on what your particular task needed.²

Don't believe me? Consider this sentence found in the FORTRAN IV chapter in the [OS/8 Language Reference Manual][lrm]:

> A real constant occupies three words (i.e., six bytes) of storage.

Since [words are 12 bits in the PDP-8](#words), that can only be interpreted as referring to 6-bit "bytes."

Since the PDP-8 uses a 12-bit native word size, 6-bit bytes are quite common in the PDP-8 world, often used for some kind of "packed [ASCII](https://en.wikipedia.org/wiki/ASCII)" representation. [One common scheme](http://homepage.cs.uiowa.edu/~jones/pdp8/faqs/#charsets) gets rid of most of the 32 control characters defined in 7-bit ASCII, all of the lowercase letters, and a whole bunch of the punctuation in order to pack two characters into a 12-bit PDP-8 word. There are actually a few different 6-bit packed ASCII representations for the PDP-8, so you have to know which scheme you're looking at before you can turn the data back into 7-bit ASCII.

The PDP-8 was being designed at about the same time as the first versions of ASCII,³ as well as around the same time as the first wildly popular ASCII terminal, the [Teletype Model 33](https://en.wikipedia.org/wiki/Teletype_Model_33).⁴

When dealing with such terminals and the included paper tape reader, PDP-8s generally deal in either 7-bit or 8-bit bytes. When we're talking about 8-bit bytes, we aren't talking about the "[high-ASCII](https://en.wikipedia.org/wiki/Extended_ASCII)" stuff that infested the PC world in the late 1970s and 1980s before [Unicode](https://en.wikipedia.org/wiki/Unicode) was invented.

Much existing PDP-8 software that reads in plain ASCII text from a terminal as 8-bit bytes treats the eighth bit on standard DEC format paper tapes as a [mark parity bit](https://en.wikipedia.org/wiki/Parity_bit), rather than as an error-detecting parity bit or as a data bit.

Full 8-bit reads from the terminal did still commonly occur on PDP-8s though. The most common schemes are the [RIM loader](https://www.pdp8online.com/pdp8cgi/query_docs/tifftopdf.pl/pdp8docs/dec-08-lraa-d.pdf) and [BIN loader](http://www.pdp8online.com/pdp8cgi/query_docs/tifftopdf.pl/pdp8docs/dec-08-lbaa-d.pdf) binary paper tape formats. See those PDFs for details, but for our purposes here, it's only important to note that both schemes expressed two 12-bit PDP-8 words as three 8-bit bytes, one per row on the paper tape when punching it, and thus read back into the machine one 8-bit byte at a time. A large part of the machine code in the RIM and BIN loaders is concerned with rearranging these 8-bit bytes into 12-bit PDP-8 words.

[lrm]: https://archive.org/details/bitsavers_decpdp8os8eReferenceManualMar79_21762891

# Words

# <a id="words"></a>Words

We speak of PDP-8 memory in terms of words, rather than bytes, because the smallest addressable unit of memory is the word, and the modern 8-bit byte doesn't divide evenly into the PDP-8 word size. That is, you can't retrieve just one byte of memory, so it is more useful to think about it in words.

The PDP-8 has a 12-bit native word size. That is the smallest chunk of data you can address in a single instruction, and it is also the size of PDP-8 machine instructions.

Every PDP-8 instruction is a single 12-bit word, and data are stored in 12-bit core memory locations. All of the PDP-8 registers are 12 bits or smaller.