49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
-
+
+
+
-
+
-
+
|
## PAL-III
| **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 in the RIM loader, 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 in order to iterate his way toward a working program! The assembler itself required multiple passes through the reader: at least two in order to produce a computer-readable BIN format output tape, or more if the programmer also wanted a human-readable listing output on the terminal.
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.
If you look at pictures of PDP-8 computers, you can often see a blue 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 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).
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 for the PDP-8 share its basic syntax.
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
| **Introduced** | 1965
| **Manual** | [PDF, 1.7 MB](https://www.grc.com/pdp-8/docs/MACRO-8_Programming_Manual.pdf)
| **Delivery** | paper tape
|
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
|
PAL-D is basically PAL-III for the [PDP-8 Disk Monitor System](https://en.wikipedia.org/wiki/4K_Disk_Monitor_System), one of OS/8's predecessors.
## The OS/8 Assemblers
| **Introduced** | 1971
| **Manual** | most any OS/8 manual, such as [the 1974 edition](https://archive.org/details/bitsavers_decpdp8os8_39414792)
| **Manual** | most any OS/8 manual, such as [this 1974 edition][os8m]
| **Delivery** | part of OS/8
[OS/8](https://en.wikipedia.org/wiki/OS/8) was [the primary programming system from DEC][faq10] for the PDP-8 in its later years. It included several different assemblers, all documented in its manual, one edition of which is linked above.
The introduction date is that of OS/8, but OS/8 has a [complicated development history][faq10] that stretches back to 1966 or so. I do not mean by this grouping to imply that they were all created and introduced at the same time. As historical evidence arrives, I will make finer distinctions in the dates. Until then, we have a years-wide window for each of these OS/8 assemblers' creation dates: after PAL-III (1965) and before 1974, the publication date of the linked manual.
[faq10]: http://www.faqs.org/faqs/dec-faq/pdp8/section-10.html
[os8m]: https://archive.org/details/bitsavers_decpdp8os8_39414792
### PAL8
PAL8 is basically a direct replacement for PAL-III under OS/8. As such, I think it is fair to consider it the default assembler for the PDP-8, two ways:
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.
First, if you're using OS/8 and have no better idea of which assembler to use, you should probably start with PAL8.
PAL8 has several features not present in PAL-III:
* 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 AND
Second, 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 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.
### 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
* easy access to the optional [floating-point processor](http://dustyoldcomputers.com/pdp12/fpp12.html)
The RALF assembler has a mode switch that causes it to generate absolute-addressed code. In this mode, it is called FLAP.
### SABR
As RALF is to OS/8's FORTRAN IV compiler, so [SABR](http://homepage.cs.uiowa.edu/~jones/pdp8/faqs/#langs) is to OS/8's FORTRAN II compiler. SABR is closer in feature set to PAL8, since FORTRAN II does not assume that you have a floating point processor, and it is not capable of all the relocation and overlay tricks that OS/8's FORTRAN IV compiler is.
A programmer may use SABR one of three ways:
1. Implicitly as the back-end of the OS/8 FORTRAN II compiler
2. Via inline assembly code in a FORTRAN II program
3. Directly.
The third option indirectly still depends upon FORTRAN II because SABR writes its `*.RL` output files with the assumption that they will be linked to the FORTRAN II runtime and libraries by the OS/8 `LOADER` program, so the generated code makes use of those facilities.
[Ian Schofield's CC8 compiler][cc8] compiler also operates like the OS/8 FORTRAN II compiler, emitting SABR output and depending upon the FORTRAN II library and runtime. Inline assembly via `#asm` is sent as-is to SABR.
[cc8]: /doc/trunk/src/cc8/README.md
## MACREL
| Introduced | 1980
| Manual | [text, 384 kB](http://vandermark.ch/pdp8/uploads/PDP8/PDP8.Manuals/AA-J073A-TA.txt)
| Delivery | DECtape for OS/8
Although this is technically another OS/8 assembler, its late introduction, separate documentation, and separate distribution from OS/8 proper require that we consider it separately.
Aside from MACRO-8, none of the assemblers above support macros, a very helpful feature in assembly language programming. MACRELs was intended to be DEC's solution to that problem in the disk-based operating system era.
Aside from MACRO-8, none of the assemblers above support macros, a very helpful feature in assembly language programming. MACREL was intended to be DEC's offered solution to the want of a macro assembler for the PDP-8 in the disk-based operating system era.
Unfortunately, it never achieved widespread use outside of DEC.
## palbart
| **Introduced** | 1996
| **Manual** | [man page](http://manpages.ubuntu.com/manpages/artful/man1/palbart.1.html)
| **Delivery** | Internet, PiDP-8/I project
This assembler was written by Gary A. Messenbrink — and later enhanced by several others — to support the fleet of PDP-8/e computers in the [Bay Area Rapid Transit](https://en.wikipedia.org/wiki/Bay_Area_Rapid_Transit) system, thus the name.
This assembler was written by Gary A. Messenbrink — and later enhanced by several others — to support the fleet of PDP-8/e computers in the [Bay Area Rapid Transit](https://en.wikipedia.org/wiki/Bay_Area_Rapid_Transit) system; thus the name.
We ship a version calling itself "pal-2.13, 03 May 2015" as part of the PiDP-8/I project. If you place a `*.pal` file in either its `asm` or `examples` subdirectories, then type `make`, the project's build system will generate several output files:
We ship a version calling itself "pal-2.13, 03 May 2015" as part of the PiDP-8/I project. If you place a `*.pal` file in either its `asm` or `examples` subdirectories, then type `make`, the project's build system will generate several output files named after the input file:
* **<code>obj/*.lst</code>** — the assembler's text listing output, giving the assembled machine code alongside the source code, plus any error messages
* **<code>bin/*.pt</code>** — the machine code output in RIM paper tape format, suitable for loading into SIMH's PDP-8 simulator
* **<code>boot/*.script</code>** — a SIMH init script that deposits the machine code into the PDP-8 simulator's core memory and starts it running; pass the file name to `bin/pidp8i-sim`
## pdpnasm
| **Introduced** | 2006
| **Manual** | refers to PAL-III documentation, then gives exceptions on its [home page][pdpnasm]
| **Manual** | see its [home page][pdpnasm]
| **Delivery** | [Internet][pdpnasm]
This is a PDP-8 assembler accepting the PAL-III syntax for Unix type systems.
I am listing it here along with `palbart` because there are [known weaknesses in `palbart`](/rptview?rn=4). If you know of more, please [file them](/tktnew). `palbart` currently has no central development home, so it is possible that the PiDP-8/I project will end up hosting an improved version.
Meanwhile, it seems like a good idea to me to have a second option at hand when cross-compiling code on a POSIX type platform for a PDP-8.
[pdpnasm]: http://people.csail.mit.edu/ebakke/pdp8/
## License
Copyright © 2017 by Warren Young. This document is licensed under the terms of [the SIMH license][sl].
[sl]: https://tangentsoft.com/pidp8i/doc/trunk/SIMH-LICENSE.md
|