mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 17:34:06 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
as68 - assembler for the Motorola 68000 The REGULUS assembler
|
||||
'as' is designed to be used in conjunction with the other RE-
|
||||
GULUS standard language processing tools: c68 and lo68. The
|
||||
language implemented is primarily as is described in any of the
|
||||
standard 68000 assembler manuals, with a few enhancements to
|
||||
make it accept some of the more standard assembler mnemonics.
|
||||
It will attempt to optimize instructions to take advantage of
|
||||
certain 68000 instructions (for example the add quick instruc-
|
||||
tion).
|
||||
|
||||
The following instructions are recoginized to aid the assembly
|
||||
language programmer by making the assembly language more regu-
|
||||
lar: clr.x An (where x is l,b, or w) is allowed and will actual-
|
||||
ly generate a suba.x An,An instruction; add, sub, cmp with an A
|
||||
register source/destination are allowed and generate adda, suba,
|
||||
cmpa; add, and, cmp, eor, or, sub are allowed with immediate
|
||||
first operands and actually generate addi, andi, cmpi, eori,
|
||||
ori, subi instructions if the second operand is not register
|
||||
direct; any shift instruction with no shift count specified as-
|
||||
sumes a shift count of one (ie. "asl r1" is equivalent to "asl
|
||||
#1,r1"); the mnemonics 'inc' and 'dec' are also recognized and
|
||||
are functionally equivilent to "addq 1" or "subq 1". Several
|
||||
mnemonics have been added to the standard set of condition code
|
||||
instructions: 'bt' maps to 'bra', 'bhs' maps to 'bhis', 'bnz'
|
||||
maps to 'bne', 'bze' maps to 'beq', 'dbhs' maps to 'dbhi',
|
||||
'dblo' maps to 'dbcs', 'dbnz' maps to 'dbne', 'dbze' maps to
|
||||
'dbeq', 'shs' maps to 'scc', 'slo' maps to 'scc', 'snz' maps to
|
||||
'sne', and 'sze' maps to 'seq'.
|
||||
|
||||
Several optimizations take place. All branch instructions gen-
|
||||
erate short relative branches where possible, including forward
|
||||
references. 'jsr' instructions are changed to 'bsr' instruc-
|
||||
tions if the resulting 'bsr' is shorter than the 'jsr'. 'move',
|
||||
'add', 'sub' mnemonics will actually generate 'moveq', 'addq',
|
||||
and 'suba' instructions where possible. If a 'move' instruction
|
||||
rather than a 'moveq' instruction is desired (affecting only
|
||||
lower byte or word of D register), the size attribute must be
|
||||
explicitly coded ie. move.b or move.w. The assembler will
|
||||
change any move or move.l to moveq if possible.
|
||||
|
||||
All labels must terminate with a ':', unless they start in
|
||||
column 1. Registers may be referenced as r0 - r15, R0 - R15, D0
|
||||
- D7, d0 - d7, A0 - A7, or a0-a7. Registers R8 - R15 are the
|
||||
same as A0 - A7. Numbers are interpreted as decimal. Hexide-
|
||||
cimal may be specified by preceding the number by a dollar sign
|
||||
($) and numbers which begin with a preceeding zero (0) are as-
|
||||
sumed to be octal.
|
||||
|
||||
REGULUS assembler directives can be specified in upper and/or
|
||||
lower case characters and may be preceded by an optional dot
|
||||
(.). The following directives have been implemented:
|
||||
|
||||
text
|
||||
data
|
||||
bss
|
||||
These three directives instruct the assembler to
|
||||
change the assembler base segment to the text, data,
|
||||
or bss segment respectively. Each assembly starts in
|
||||
the text segment. It is illegal to assemble instruc-
|
||||
tions or data into the bss segment. Symbols may be
|
||||
defined and storage may be reserved using the .ds
|
||||
directive in the bss segment.
|
||||
|
||||
section #
|
||||
This directive is used to define a base segment like
|
||||
the .bss, .data and .text directives discussed above.
|
||||
The sections can be numbered 0 to 15 inclusive. Sec-
|
||||
tion 14 maps to data, section 15 is bss and all the
|
||||
others are text sections.
|
||||
|
||||
globl name[,name...]
|
||||
xdef name[,name...]
|
||||
xref name[,name...]
|
||||
These directives make the name(s) external. If they
|
||||
are defined in the current assembly, this statement
|
||||
makes these names available to other routines during a
|
||||
load by lo68. If these names are not defined in the
|
||||
current assembly, they become undefined external
|
||||
references and lo68 will link them to external values
|
||||
of the same name in other routines. Specifying the -u
|
||||
flag will force the assembler to make all undefined
|
||||
names external.
|
||||
|
||||
comm name,expression
|
||||
This directive defines a named block common area.
|
||||
When several routines are linked together with lo68,
|
||||
all block common areas with the same name are loaded
|
||||
at the same address. The size of this block common
|
||||
storage area is the largest value of the expression
|
||||
part of all 'comm' directives with the same name. No
|
||||
error message is produced if the areas are of dif-
|
||||
ferent sizes.
|
||||
|
||||
even
|
||||
If the location counter is odd, it is incremented by
|
||||
one so that the next instruction or data field will
|
||||
begin on an even memory boundary.
|
||||
|
||||
The relocation counter may be manipulated with a
|
||||
statement like:
|
||||
*=expr
|
||||
Care should be exercised when using this facility.
|
||||
The expression may only move the relocation counter
|
||||
forward. The unused space is filled with zeroes in
|
||||
the text or data segments and is simply not assigned
|
||||
in the bss segment. This facility requires the assem-
|
||||
bler to not allow comment lines which begin with "*=".
|
||||
Comments beginning with "* =" are allowed.
|
||||
|
||||
org expression
|
||||
This directive is used to change the program counter
|
||||
to the specified address. The expression must not
|
||||
contain any external references and must be computable
|
||||
at the time of assembly.
|
||||
|
||||
ds[.x] operand
|
||||
This is the directive used to define storage. Storage
|
||||
can be defined in bytes, words or long words depending
|
||||
upon the extension specified ('b', 'w', 'l' where word
|
||||
is the default). The memory is not initialized, just
|
||||
reserved. Word or long defined storage will be
|
||||
aligned on a word boundary.
|
||||
|
||||
comline expression
|
||||
This directive is identical to the 'ds.b' instruction.
|
||||
The specified argument must be a constant expression.
|
||||
|
||||
equ expression
|
||||
set expression
|
||||
Currently 'set' and 'equ' are implemented exactly the
|
||||
same. These directives are used to assign a value to
|
||||
the specified label. This non-optional label may not
|
||||
be redefined elsewhere in the program. It can then be
|
||||
used anywhere that a constant is required and will be
|
||||
evaluated to the specified value.
|
||||
|
||||
end
|
||||
The 'end' directive specifies the end of the assembler
|
||||
text. It is not required for appropriate assembly.
|
||||
If it is not at the end of the text an error will be
|
||||
reported.
|
||||
|
||||
offset expression
|
||||
This directive creates a dummy storage section using
|
||||
the 'ds' directive. No code generating instructions
|
||||
may occur. It is terminated by a 'section', 'data',
|
||||
'bss', 'text' or 'end'. The offset table begins at
|
||||
the address specified in the expression. The 'set',
|
||||
'equ', 'reg', 'xref', 'xdef', 'globl', 'offset', and
|
||||
any conditional directive may appear inside.
|
||||
|
||||
dcb[.x] size,value
|
||||
Just like the dc.b command. Defines a constant block
|
||||
of the specified size of bytes, words or longs.
|
||||
|
||||
reg reglist
|
||||
This directive builds a register mask which can be
|
||||
used by the movem instruction. One or more registers
|
||||
can be listed in increasing order of the form : 'R?[-
|
||||
R?[/R?[-R?...]...]]'. Where R? can be replaced by
|
||||
A0-A7, D0-D7 and R0-R15. The register list might look
|
||||
like : A2-A4/A7/D1/D3-D5. The registers may also be
|
||||
designated separated by commas (eg. A1,A2,D5,D7).
|
||||
|
||||
Conditional assembly directives can have any level of nesting.
|
||||
The following conditional assembler directives have been imple-
|
||||
mented:
|
||||
|
||||
ifeq expression
|
||||
ifne expression
|
||||
ifle expression
|
||||
iflt expression
|
||||
ifge expression
|
||||
ifgt expression
|
||||
The expression is tested against zero (with ifeq:
|
||||
equal, ifne: not equal, ifle: less or equal, iflt:
|
||||
less than, ifge: greater or equal, ifgt: greater) and
|
||||
if it is evaluated true then the code enclosed is as-
|
||||
sembled, otherwise the code is ignored until the
|
||||
matching endc is found.
|
||||
|
||||
ifc 'string1','string2'
|
||||
ifnc 'string1','string2'
|
||||
The two strings are compared. The 'c' condition is
|
||||
true if they are exactly the same, the 'nc' condition
|
||||
is true if they do not match.
|
||||
|
||||
endc
|
||||
Signifies the end of the code to be conditionally as-
|
||||
sembled.
|
||||
|
||||
ASCII string constants may be enclosed in single quotes (ie.
|
||||
'ABCD') or in double quotes (ie. "ac14").
|
||||
|
||||
Several directives are recognized, but ignored: 'mask2', 'idnt',
|
||||
'ttl', 'opt', and 'page'.
|
||||
|
||||
as68(cmnd)
|
||||
Reference in New Issue
Block a user