The ACT09 Assembler
At Western Technologies, we used the Avocet 6809 cross-assembler.
A cross-assembler is a tool that takes source code written on a development
machine and translates it to some form of executable code (called hex or binary)
that will be run on a different machine.
When Mark Indictor and I moved to GCE, we chose to use the ACT09 6809 assembler.
In our case, we wrote our source code on a CP/M-based (a predecessor to MS-DOS) development system
and the cross-assembler translated it to 6809 executable code.
If the assembly was clean (no errors), the resulting hex code would be downloaded to either
the ROM emulator or to the EPROM programmer.
Why did we switch? That I can't recall. I imagine that there was probably some
esoteric ACT09 feature that we liked better than the Avocet ‑ but I can't remember what
made the decision. I would comment that looking between the code for the Avocet and the code
for ACT09, the ACT09 seems to have been the more modern assembler.
ACT09 Command Line Syntax
Parameter |
Description |
H=d: | Output .HEX file to the specified disk ('d:')
(Default: output to input file drive) |
H=d:file.ext | Output .HEX file to the specified disk ('d:'),
file name and extension |
H=0 | Suppress .HEX file output |
L | Output listing to printer |
L=d: | Output .PRN file to the specified disk ('d:') |
L=CON: | Output listing to user's console |
L=LP: | Output listing to printer |
L=0 | Suppress .PRN file output (Default) |
O=n | Preset values of 'Origin' and location
counters (Default value is $0000) |
PS | Set page size to 63 (Default is 61) |
PS=n | Set page size to <n> source lines per page. |
PS=0 | Do not print title line and page ejects to list file |
S | Select normal SYSTEXT file ('A:SYSTEXT.AST') |
S=d:file.ext | Select alternate SYSTEXT file. User may specify as
many SYSTEXT's as desired (so long as combined number of SYSTEXT's and LINK files
does not exceed LINK file limit). |
S=0 | No SYSTEXT for this assembly is required (Default). |
R=F | Include full reference map in listing file. |
R=S | Include short reference map in listing file. |
R=0 | Suppress reference map (Default). |
SL | Set listing line length to 80 characters (Default
value is 180 characters). |
SL=n | Set line length to <n> characters. |
All numeric argument values may be specified according to the general
syntax for numbers. An explicit post-radix (B, H, N, or Q) used.
All lower case letters on the command line are normalized (to upper case) before interpretation.
ACT09 execution may be prematurely terminated by the operator by typing a 'Control C' on the console.
If a disk write error happens, ACT09 displays a message on the console. The offending
file (.HEX or .PRN) is erased and further writes to it are suppressed. Assembly then continues
normally.
|
ACT09 Expression Operators
Operator |
Description |
+ | Sum |
- | Difference |
* | Multiply |
/ | Divide |
NOT | Unary = bit-by-bit complement |
AND | Logical products, conjunction |
OR | Logical sum, disjunction, inclusive OR |
XOR | Logical difference, inequivalence, exclusive OR |
lop | Where .lop. may be:
NE(<>) EQ(+) LT(<) LE(<=) GT(>) GE(>=) |
SHL | Left shift N bits |
SHR | Right shift N bits |
HIGH | Unary, high value to 8 bit field (x / 256) |
LOW | Unary, low value to 8 bit field (x MOD 256) |
MOD | Modulus function |
REV | Unary ((LOW x) SHL 8) + HIGH x) |
EF | Unary, logical = TRUE if symbol previously defined. |
ACT09 Operator Precedence
Operator |
Parenthesis |
HIGH LOW DEF REV |
* / MOD SHL SHR |
+ (monadic) |
+ (dyadic) |
= <> < <= > >= NE EQ
LT LE GT GE |
NOT |
AND |
OR XOR |
ACT09 Expression Operands
Operand |
Description |
* | Current location counter |
*L | Same as * (Refer to LOC psuedo-op) |
*O | Current value of Origin counter (Refer to ORG psuedo-op) |
*P | Current position counter (Refer to VFD psuedo-op) |
ACT09 Error Codes
Errors are flagged by a single letter code in column one of the output listing.
Lines containing errors are always written to the console, regardless of the listing
selection.
Error |
Description |
A | Addressing mode conflict. Instruction specified
does not support the addressing mode selected. |
C | CPU conflict. The instruction specified is not
available on the machine type selected (CPU psuedo-op). The generated hex will be correct for
the illegal machine. |
D | Duplicate label (last value assigned the given
label is used). |
E | Expression error, ill formed expression in address
field. |
F | Bad nesting of IF / ELSE / ENDIF statements. On the END line,
indicates that an IF was not terminated. |
I | Instruction field not recognized, a long no-op is generated.
On the END line, indicates a MACRO or ECHO was not terminated. |
L | Label field has either an illegal character in field,
is too long or is missing. |
M | MACRO statement error. |
N | Error in number: digit exceeds radix. |
O | Stack table overflow occurred in evaluating expression
(user should simplify expression), too many LINK files or too many PROCs (255 maximum). |
S | Syntax error. |
U | Reference to an undefined symbol. |
V | Expression overflow: truncated or
register conflict. |
W | Field width on VFD not (1 <= width <= 16). |
Y | Opcode misused: Extraneous ENDM. |