Arbitrarily sized bytes from 1 to 36 bits, and sub-word byte pointers, and indirect pointers! (You can do a lot with those extra 18 bits above the address lines, it's not just for consing!)
https://github.com/PDP-10/documents/blob/master/mirror/www.i...
Byte instructions
In the PDP-10 a "byte" is some number of contiguous bits within one
word. A byte pointer is a quantity (which occupies a whole word)
which describes the location of a byte. There are three parts to the
description of a byte: the word (i.e., address) in which the byte
occurs, the position of the byte within the word, and the length of
the byte.
A byte pointer has the following format:
000000 000011 1 1 1111 112222222222333333
012345 678901 2 3 4567 890123456789012345
_________________________________________
| | | | | | |
| POS | SIZE |U|I| X | Y |
|______|______|_|_|____|__________________|
POS is the byte position: the number of bits from the right end of
the byte to the right end of the word.
SIZE is the byte size in bits.
The U field is ignored by the byte instructions.
The I, X and Y fields are used, just as in an instruction, to compute
an effective address which specifies the location of the word
containing the byte.
Here are the byte instructions.
[...] LDB DPB IBP ILDB IDPB [...]
Text strings are typically stored using seven-bit bytes, five per
word. ILDB and IDPB can then be used to step through a string. The
byte pointer should be initialized to 440700,,<address of string>.
Then the first ILDB will increment it to point at the first character
of the string.