1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
|
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
# The Problem
# Introduction
There are many commonly-used PDP-8 assemblers, several of which we ship with the PiDP-8/I software distribution and more available elsewhere. How does a programmer discriminate among them, other than to carefully read their entire manual and then spend several months writing code in them? They cannot all be equal, else they'd be interchangeable and you'd pick one based on what was available. One cannot be clearly better for all things, else everyone would just use that.
There are many commonly-used PDP-8 assemblers, several of which we ship with the PiDP-8/I software distribution; there are more available elsewhere. How does a programmer discriminate among them, other than to carefully read their entire manual and then spend several months writing code in each one to develop a feel for what each one is like? They cannot all be equal, else they'd be interchangeable and you'd just pick one based on what was available. One cannot be clearly better for all things, else everyone would just use that.
This article is a **preliminary** survey of these assemblers with an eye toward listing the important distinctions among these assemblers. We will not be listing obscure assemblers or ones that you cannot readily find online. We will also not be listing thoroughly obsolescent assemblers unless it is important in establishing a lineage to one we *do* discuss.
This article is a **preliminary** survey of these assemblers with an eye toward listing the key distinctions among them.
When multiple versions are available, our commentary applies to the version currently in the PiDP-8/I software distribution, if present, or the latest available version of the assembler it is hosted externally.
## Disqualifying Criteria
This survey is not intended to list every PDP-8 assembler. Our purpose here is to make distinctions among options readily available to end users.
Here are the reasons I have chosen not to include some assemblers known to me:
* It is not readily available online.
* It is not required to build an important body of code which is readily available online.
* It does not fill a gap left by those we do discuss; thus we will not be listing every PAL style assembler.
* It was replaced by one of those we do discuss, and it is not important to discuss that particular predecessor here; this is not a genealogy project.
That list is not intended to be normative or complete, just informative: if an assembler is not listed here and it matches one of the criteria above, that is probably why it is not here.
## Disclaimer
The author is not an expert in this topic, though he has occasionally consulted with experts. The claims in this document are checked against manuals, published example code, and sometimes against running implementations. However, do not expect it to be complete or comprehensive.
## Contributing
If you have important information to add and you do not have an account on this wiki, post it to either the PiDP-8/I or SIMH mailing lists, or send me private email. Keep in mind that the purpose of this article is not to replace the documentation or advocate for any particular assembler. Think of it more as the PDP-8 assembly language version of a birder's field guide: having read through this document, a reader should be able to recognize which assembler(s) are likely to be able to process a given piece of assembly code. A broader goal is that a programmer beginning a project should be able to make a sensible selection based on the information in this document, though being incomplete, we are much less likely to meet this goal than the field identification one.
# The Assemblers
## PAL-III
| **Introduced** | 1965
| **Manual** | [PDF, 790 kB](http://www.telegraphics.com.au/doc/paliii.pdf)
| **Delivery** | paper tape
|
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
-
+
-
-
-
|
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:
First, if you're using OS/8 and have no better idea of which assembler to use, you should probably start with PAL8.
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.
### RALF
### 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)
### FLAP
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.
|
111
112
113
114
115
116
117
118
119
120
|
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
-
+
+
+
+
+
|
## pdpnasm
| **Introduced** | 2006
| **Manual** | refers to PAL-III documentation, then gives exceptions on its [home page][pdpnasm]
| **Delivery** | [Internet][pdpnasm]
This is a PDP-8 assembler accepting the PAL-III syntax for Unix type systems.
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/
|