53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
-
+
|
| **Introduced** | 1965
| **Manual** | [PDF, 790 kB](http://www.telegraphics.com.au/doc/paliii.pdf)
| **Delivery** | paper tape
The PAL-III assembler shipped on [punched paper tape](https://en.wikipedia.org/wiki/Punched_tape) as part of the grandiosely-named "PDP-8 Assembly System." This amounted to an assembler, an editor, a debugger, and a loader, each a separate paper tape. The programmer would first toggle the RIM loader into the PDP-8's front panel, then use that to load the BIN loader from yet a fifth paper tape, then run each of these tapes through the paper tape reader repeatedly — reusing the still-in-core BIN loader each time — in order to iterate his way toward a working program!
The assembler required at least two passes through the tape reader in order to produce a computer-readable BIN format output tape, and up to four depending on the additional output options the programmer wanted, such as a listing on the terminal.
The assembler tape required at least two passes through the tape reader in order to produce a computer-readable BIN format output tape, plus an optional third pass if you wanted a human-readable listing on the terminal.
If you look at pictures of PDP-8 computers, you can often see a tray with narrow slots in it, each meant to hold one of these key paper tapes, as they were needed near at hand when using the computer. There is a good picture of a blue one on [the cover of the 1974 edition of the OS/8 Handbook](https://archive.org/stream/bitsavers_decpdp8os8_39414792/OS8_Handbook_Apr1974?ui=embed#page/n0/mode/1up).
PAL-III can be considered the baseline assembler for a PDP-8, since almost every PDP-8 at least included some kind of paper tape reader, and most of the other assemblers surveyed here share its basic syntax.
## MACRO-8
|
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
|
### PAL8
PAL8 understands the same basic language as PAL-III and generally has more features, most especially related to running under OS/8, such as the ability to set options via OS/8's command interpreter (CCL) rather than via the PDP-8's front panel switches.
I consider it the default assembler for OS/8 users. If none of the information below guides you to one of the other assemblers, you should probably start with PAL8. If you have a piece of assembly code that is meant to be assembled under OS/8, and you have no evidence that is for any other assembler, it's probably meant to be assembled by PAL8.
PAL8 has several features not present in PAL-III:
PAL8 has many features not present in PAL-III:
* automatic link generation for off-page references
* it can output [CREF and DDT][os8m]-compatible output files
* in addition to `+` and `-` in expressions, it allows:
* `^` for 12-bit unsigned multiplication (`*` was already taken for setting the location counter)
* `%` for 12-bit unsigned division (`/` was already taken as the comment start character)
* `!` for Boolean OR (the ASR-33 terminal supported [a 64-character subset of printable ASCII](http://iclces.uk/articles/a_teletype_font.html), which did not include ¦)
* `!` for Boolean OR (the ASR-33 terminal character set [did not include the ¦ character](http://iclces.uk/articles/a_teletype_font.html))
* `&` for Boolean AND
* literals in the current page via `(NN` syntax (closing paren optional) or in page zero via `[NN`
* single-character ASCII constants: `"A`
* more pseudo-operations:
* `DEVICE`, `FILENAME`, and `TEXT`: insert 6-bit packed ASCII text strings in the output
* `DTORG`: set DECtape block number in typesetting output
* `EJECT`: emit a form feed in the listing output; optionally set a new header line
* `IFDEF`, `IFNDEF`, `IFZERO` and `IFNZRO` with angle brackets for conditional assembly
* `PAGE`: [re]set the page part of the location counter
* `NOPUNCH` and `ENPUNCH`: stop and restart binary output
* `RELOC`: assemble code for relocation after loading
* `XLIST`: suppress part of the listing output
* `ZBLOCK`: reserve memory, setting initial values to zero
PAL-III has a few features not implemented in PAL8:
* the ability to get a brief listing of the undefined symbols in a program
PAL8 is missing one feature present in PAL-III: the ability to get a brief listing of the undefined symbols in a program. The information is instead presented inline in the listing output, not grouped together into a single place, which can make refinement of an in-development program tedious as you need to comb it out of the other output.
The latter is the more important lack. The information is instead presented inline in the listing output, not grouped together into a single place, which can make refinement of an in-development program tedious as you need to comb information about undefined symbols out from among all the other output.
### RALF/FLAP
RALF is the back-end assembler for OS/8's FORTRAN IV compiler. As a result of that support role, it has several notable advantages over PAL8:
* relocatable output code
|