PiDP-8/I Software

Changes To A Field Guide to PDP-8 Assemblers
Log In

Changes to "A Field Guide to PDP-8 Assemblers" between 2017-12-10 14:32:52 and 2017-12-10 14:59:45

237
238
239
240
241
242
243
244
245


246
247
248
249

250




251
252
253
254
255
256
257

258
259
260
261
262

263
264
265

266
267
268
269
270
271
272
237
238
239
240
241
242
243


244
245
246
247
248
249
250

251
252
253
254
255
256
257
258
259
260

261
262
263
264
265

266

267

268
269
270
271
272
273
274
275







-
-
+
+




+
-
+
+
+
+






-
+




-
+
-

-
+







If you read through the SMAL32 manual and see differences relative to PAL syntax but don't see the difference documented below, chances are that Vincent Slyngstad fixed these differences in SMAL8. For example, like PAL8 but unlike SMAL32, SMAL8 uses `/` to introduce comments, defaults to octal, allows `*` to set the output origin, and uses the `EJECT` pseudo-op rather than `PAGE` to put a page break into the output listing.

SMAL8 has many feature additions relative to PAL8:

*   relocatable output
*   `MACRO` and `ENDM`: MACREL-like macro feature
*   `COMMON`, `EXTERNAL`, `GLOBAL`: module and linkage support
*   comparison operators in expressions `<` and `>`
*   bit shifting operators in expressions `<<`, `>>`, and `>>>`
*   `<` and `>` comparison operators in expressions
*   `<<`, `>>`, and `>>>` bit shifting operators in expressions
*   double and single quoted strings; PAL8 supports only double-quoted single-character constants
*   labels separated from the code by either comma (PAL8 style) or colon (SMAL32 style)
*   arbitrary radices in numeric constants using `r#n` syntax, which gives `n` base `r`
*   the &brvbar; operator is allowed as an alias for PAL8's `!` form of Boolean OR
*   end assembly with either `$`  (PAL8 style) or `END` ([SABR](#sabr) style)
*   `ABS`, `DEF`, `FWD`, `LEN`, `REL`, `TYP` assembly-time functions
*   `ABS`, `DEF`, `FWD`, `LEN`, `REL`, and `TYP` assembly-time functions
*   `TITLE` and `SUBTITLE` pseudo-ops for setting listing page titles
*   `ASCII` pseudo-op: like `TEXT` but stores real unpacked ASCII
*   many more pseudo-instructions defined: DF32, DECtape, etc.

Some things are simply different in SMAL8 as compared to PAL8:

*   powerful expressions in SMAL allow modern `IF`, `ELSE`, `ELSEIF` and `ENDIF` for conditional assembly
*   `PAGE` takes no argument, as in [SABR](#sabr)

There are also some features removed relative to PAL8:
There are a few features removed relative to PAL8:

*   multiplication not allowed in expressions; `*` was given PAL8 meaning and `^` not implemented as PAL8 multiply
*   division not allowed in expressions; `/` was given PAL8 meaning and `%` not implemented as PAL8 divide
*   no inline literals, either the `(N)` or `[N]` syntaxes; parens used for groups and lists instead

*   some IOT instructions PAL8 knows do not have predefined symbols: `KIE`, `RPE`, etc.
Some features of SMAL32 were removed in SMAL8, either to be compatible with PAL8 or simply because the PDP-8 is too different from the abstract 32-bit machine assumed by the original design of SMAL32:

*   the byte (`B`), halfword (`H`), threeword (`T`), and fullword (`W`) data storage specifiers do not work
The data storage specifier feature of SMAL32 was removed in SMAL8, since it doesn't make much sense in the 12-bit world of the PDP-8. (That is, the byte (`B`), halfword (`H`), threeword (`T`), and fullword (`W`) pseudo-ops.) Use `DATA` instead.

[dwj]: http://homepage.divms.uiowa.edu/~jones/
[smal8]: http://so-much-stuff.com/pdp8/C/Assembler.php
[smal32]: http://homepage.divms.uiowa.edu/~jones/cross/smal32/


## <a id="palbart"></a>palbart