PAL-III
From Wikipedia, the free encyclopedia
PAL-III was the assembly language processor for the PDP-8 computer family sold by Digital Equipment Corporation of Maynard, Massachusetts. It followed an earlier product known as PAL-8.
PAL-III allowed the efficient production of PDP-8 machine code from a human-readable source language. It also supported PDP-8-specific architectural features such as 128-word code pages, the special use of Page 0, IOTs, and automated addressing of "far" data objects.
Here is a typical program written in PAL-III:
/ Define two symbols for I/O Transfer (IOT) instructions
/
TSF = 6041 / Teleprinter Skip-on-Flag
TLS = 6046 / Teleprinter Load Sequence (Clear flag and print from AC)
/
/ (Many PDP-8 assemblers contained these very basic IOTs predefined)
*200 / Assemble the following code starting at location 0200
/ (the beginning of Page 1 in Field 0)
START, CLA CLL / Clear the AC and the Link bit
TAD (DATA-1) / Point AC just *BEFORE* the data (accounting for later pre-increment behavior)
DCA 10 / Put that into one of ten auto-pre-increment memory locations
LOOP, TSF / Test the printer "ready" flag, skip if ready
JMP .-1 / Jump back if not yet ready
TAD I 10 / Pre-increment mem location 10, fetch indirect to get the next character of our message
SNA / Skip on non-zero AC
HLT / Else halt at end of message
TLS / Clear the printer "ready" flag and output character contained in the AC
CLA CLL / Clear AC for the next loop
JMP LOOP / Jump back for the next character
DATA, "H / A well-known message
"e /
"l / NOTE:
"l /
"o / Strings in PAL-8 and PAL-III were "sixbit"
", / To use ASCII, we'll have to spell that out, character by character
" /
"w /
"o /
"r /
"l /
"d /
"! /
015 /
012 /
0 / Mark the end of our .ASCIZ string ('cause .ASCIZ hadn't been invented yet!)
This illustrates most of the salient features of the language:
- Symbols could be defined by the programmer.
- The usual simple arithmetic can be performed at assembly-time using symbols.
- Labels are delimited by a comma (rather than the more-usual colon).
- "/" begins a comment that runs to the end of the current line.
- Opcode mnemonics could be "or"ed together where appropriate (as in "CLA CLL").
- "I" used with a memory-access opcode indicates one level of "indirection" (which is all the PDP-8 could do!)
- Data literals could be created on the current page using "(litval)" or on Page 0 using "[litval]".
- "." meant "the current location counter".
Note, though, that PAL-III was not a macroassembler and no full macro language was provided. (A later product called MACREL-8 did provide macro-assembly features.)