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
|
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
|
-
+
-
-
-
-
-
+
|
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 many features not present in PAL-III:
* automatic link generation for off-page references
* it can output [CREF and DDT][os8m]-compatible output files
* output options for [CREF and DDT][os8m]
* 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 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
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.
PAL-III has one features not implemented in PAL8: 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 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
|