1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-13 15:27:28 +00:00
PDP-10.its/doc/info/cross.doc
Eric Swenson d64ba80388 Added CROSS.
Resolves #141.
2016-12-18 22:27:25 -08:00

2541 lines
72 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CROSS
27 March 1979
The material used in this specification, including but not limited to
construction times and operating speeds, is for informational purposes only.
All such material is subject to change without notice. Consequently DEC makes
no claim and shall not be liable for its accuracy.
This document describes the operational procedures for CROSS, an assembler
which operates on the DECsystem-10/20 systems, translating source code for
6502, 6800, 8080, 8085, Z80, 1802, F8[future], and 8008 micro-processors into
binary files suitable for absolute load.
All of the appendices to this manual and the index were constructed by Joseph
M. Newcomer, Carnegie-Mellon University Computer Science Department.
CROSS-Microcomputer cross assembler 1
1. Introduction
CROSS is an assembler which operates on the DECsystem-10/20 and assembles
code for many currently available micro-processors. With the exception of the
variations listed in this manual, CROSS implements the features of the PDP-11
macro assembler for RSX-11D. No attempt was made to provide source
compatibility between CROSS and other micro- processor assemblers. Rather,
CROSS has been designed to provide consistent, powerful features for all of the
mnemonics associated with each micro-processor.
While CROSS is designed to be language compatible with the MACRO-11 language,
its PDP-10 operating environment necessitates a PDP-10 style operating
procedure.
Expression evaluation has been updated to provide the following features:
- Default radix is decimal.
- @<expr> indicates octal radix, same as to ^O<expr>
- %<expr> indicates binary (6502/6800 only), same as to ^B<expr>
- %nn indicates register value nn (all others)
- $<expr> indicates hexidecimal radix
- <expr>^ indicates that the evaluated expression is to be divided by
256. (high byte)
The assembler makes two passes over the source, outputting the binary and
listing files during pass two and appending a symbol or cross reference table
to the listing file. PDP-10 memory is dynamically allocated for large symbol
table storage and macro storage.
Introduction
CROSS-Microcomputer cross assembler 2
2. Syntax differences
The syntax of CROSS is more compatible with that of MACRO-11 than that of
most manufacturer's assemblers. This means that you will not be able to
compile straight 8080, Z80, 6502 or 6800 code with this assembler. However,
the transliterations are reasonably straightforward and are described for each
machine in the appendices. In general, you must specify registers with a
%-directive.
The machine which differs most from the manufacturer's specification of an
assembler syntax is the Zilog Z80. This is because CROSS implements the Z80
syntax as a superset of the 8080 syntax. Consequently, the syntax of most
operations follows that of the 8080. In addition, some Z80 mnemonics
conflicted with 8080 mnemonics; the Z80 has been assigned new mnemonics where
these conflicts existed. Any Z80 operation which has no 8080 counterpart has
also been assigned a mnemonic; some correspond to the Zilog specification
(wherever this was possible) and most do not. Consequently, a complete
cross-reference between the Zilog syntax and the CROSS transliteration has been
provided.
Syntax differences
CROSS-Microcomputer cross assembler 3
3. Operating procedures
3.1 Loading CROSS
CROSS is run by typing the monitor command:
@CROSS ;tops20
.R CROSS ;tops10
3.2 Initial dialogue
When the assembler is ready to accept the user's command string, it types an
asterisk. The user must now type the command string on the same line.
The general form of the command string is:
binary output, listing output _ source input(s)
In addition, the command(s) may be stored in a file (default extension .CCL)
and read in by specifying:
@filename
Each input/output specification consists of the group:
dev:filnam.Ext[proj.,prog.]/switch:arg
- dev is:
DSK for disk
PTR for paper tape reader
PTP for high speed punch
TTY for the user's teletype
LPT for a queued line printer
- If not specified, the device is assumed to be the disk. Other system
devices may also be used, depending upon the system configuation.
- filnam is the file name of the appropriate file.
- ext is the file name extension for that file. If is not specified,
the assumptions are:
Operation
CROSS-Microcomputer cross assembler 4
binary string: .BIN (absolute)
listing string: .LST
source string:
.M65 (MOS 6502)
.M68 (Motorola 6800)
.M80 (8080/Z80/8085)
.M88 (8008 , 8080 mnemonics)
.M08 (8008 , Intel mnemonics)
.M18 (CPD1802 , COSMAC)
.MF8 (Fairchild F8) [future]
- [proj.,prog.] is the project-programmer number assigned for the disk
area to be used. If not specified, the user's local area is assumed.
Once specified, the number pair becomes the new default assumption
for the following files. (Use translate command on TOPS20) At CMU,
the CMU PPN format is accepted.
- Switches are specified by preceding each with a slash character.
Switch arguments are preceded by colons. In addition to explicit
specifications of the switches, a default set of switches may be
specified with a SWITCH.INI file (chapter 6, page 11).
/M65 source is 6502 code
/M68 source is 6800 code
/M80 source is 8080, 8085 or Z80 code
/M88 source is 8008 using 8080 compatible mnemonics
/M08 source is 8008 original Intel mnemonics
/M18 source is 1802 code (RCA COSMAC)
/MF8 source is Fairchild F8 [future]
Operation
CROSS-Microcomputer cross assembler 5
/LI simulate .LIST directive (see chapter 4).
/NL simulate .NLIST directive (see chapter 4).
/EN simulate .ENABL directive (see chapter 5).
/DS simulate .DSABL directive (see chapter 5).
/CRF append cross reference table to the listing files
(see chapter 4).
/PTP binary output is ASCII coded hex
/N suppress error messages and expanded summary to the
teletype.
/OCT listing format in octal - hex is default
/I output binary in image mode (one byte per 36 bit
PDP-10 word). This switch must be used to copy
directly to paper tape.
/P pack binary output. This is the default case and the
switch is not needed.
/CDR simulate card reader input. This is actually
independent of the physical input device but causes
the assembler to ignore all characters on a column
after the 72nd.
/SOL sequence output lines (see chapter 4).
/GNS generate new source (see chapter 4).
/NSQ suppress listing of PDP-10 style seq. Numbers.
/EQ equate the following symbols to zero. This is a
method for introducing conditional arguments without
creating special parameter tapes. "/EQ:sym1:sym2" is
the equivalent of the source statements "sym1=0" and
"sym2=0".
Operation
CROSS-Microcomputer cross assembler 6
4. Listing control
CROSS has two categories of listing controls: MACRO-11 compatible, which may
be specified either in source statements or in the command string, and a
superset which is limited to the command string.
4.1 Source statement listing control
Listings are controlled at source statement level through the use of the
.LIST and .NLIST directives. These are complementary in that any function
which can be enabled by a .LIST can be disabled by a .NLIST. To reduce
redundancy, the following descriptions will emphasize the .LIST while implying
the .NLIST complement.
The following are the allowable arguments for the .LIST directive along with
the default settings (li for .LIST and nl for .NLIST):
The first group controls intra-line listing. Suppression of any of these
will cause the assembler to utilize the space by moving the remainder of the
line over.
SEQ list the sequence numbers. These numbers represent the source
line numbers and are replaced by the nesting level in
parentheses for generated lines (macros, etc.).
LOC list the value of the location counter.
BIN list the binary code generated by the assembler.
SRC list the source statement. This is included primarily for
completeness.
COM list the comment field.
BEX list binary code which requires more than one listing line.
suppression of this is particularly useful in reducing the
length of listing required for long .ASCII strings.
The following arguments pertain to entire statements:
MB list macro binary and call only - no source
MD list macro definitions.
MC list macro calls.
.LIST/.NLIST
CROSS-Microcomputer cross assembler 7
ME -nl
list macro expansions. The default causes the expansion to be
suppressed in the interest of supply economy. ME controls all
generated text (.MACRO's, .REPT's, and .IRP's).
Caution - due to their dual nature, .REPT's and .IRP's qualify
both as definitions and calls. CROSS treats MD and MC as a
pair in these cases, suppressing the listing if either is set.
CND list conditionals. Suppression causes unsatisfied conditionals
and all conditional directives (whether satisfied or not) to be
not listed.
SYM append a symbol table to the listing file.
TTM list in teletype format (one column of binary to a line,
truncation after 72 columns). Default setting is determined by
the output device specified: enabled if the physical device is
TTY: and disabled (line printer mode) in all other cases.
TOC-nl list a table of contents during pass one. This consists of the
.SBTTL directives being listed at the beginning of the listing
file. Each line consists of the line number and all text to
the right of the .SBTTL directive.
LD-nl list listing directives. Specifically, this causes all
.LIST/.NLIST directives which have no arguments to be listed.
its primary use is in debugging listing control.
.LIST and .NLIST directives with no arguments perform an over- ride function.
They control a listing "level" which is decremented for each .NLIST and
incremented for each .LIST. The level count is used as a three way switch:
1. Zero (initial condition): no special action.
2. Less than zero: unconditionally suppress the listing except for
lines containing errors.
3. Greater than zero: list unconditionally.
.LIST/.NLIST are normally paired to return the level count to zero. the
.NLIST/.LIST sequence is used to suppress a range which is normally listed,
while the .LIST/.NLIST sequence is used to over-ride a range which is normally
suppressed, such as in a macro expansion. The level count allows macro
.LIST/.NLIST
CROSS-Microcomputer cross assembler 8
expansions to use the listing control and return it to its previous state.
4.2 Command string equivalents
The command string contains the equivalent of all the above .LIST and .NLIST
functions as well as some that are not available at source level. Indeed, many
of the source level arguments are of primary interest at command string level
but can be used in the source to modify default settings.
The command string equivalents of .LIST and .NLIST are /LI and /NL,
respectively. Arguments are specified by preceding them with colons. Thus
/NL:bex:cnd is the equivalent of .NLIST CND,BEX.
In all cases, command string switches override their source level equivalents
(as well as previous occurrences in the command string). Effectively,
specification of a function in a command string will cause all its source level
equivalents (and their complements) to be ignored. i.e. /LI:me would enable
the listing of macro expansions and cause all ".LIST/.NLIST ME" directives to
be ignored.
/LI (no arguments) causes everything to be listed, while /NL suppresses the
listing of all but error lines, the symbol table, and the cross reference
tables.
4.3 Other listing controls
The following swithces are specified in output side of the command string by
preceding the mnemonic by a slash:
/OCT list in octal - default is hex
/N suppress error messages to the teletype (unless it is also the
listing device).
/CRF append a cross reference table to the listing file. Cross
accomplishes this in the following manner:
1. The listing file is generated in the normal way
during pass two, using the name specified by the
user.
2. Simultaneously, a temporary file (xxxCRF.TMP, where
xxx is the job number) is created. This contains
encoded cref information.
3. At the end of pass two, the temporary file is read
.LIST/.NLIST
CROSS-Microcomputer cross assembler 9
and the cref information is integrated into the
symbol table.
4. The references are appended to the listing file. if
insufficient core was available to build the table,
the process is repeated. When through, the temporary
file is deleted.
The cross reference table format is as follows:
1. The symbol itself.
2. Its symbol table value, unless .NLIST sym was
specified. Therefore the symbol table itself is
always pre-empted.
3. All references to the symbol, except that no more
than one reference to a given source line will be
listed. symbols in generated text always refer to
the previous source line.
4. Defining occurrences are flagged with a "#".
5. Destructive references are flagged with a "*". These
are defined to be all symbols encountered in op-code
fields which store into a memory location or a
register.
6. As many references per listing line as possible,
depending upon the "ttm" mode, are used. This can be
increased by suppressing "sym".
/SOL Sequence output lines. Listings are normally source oriented:
1. Sequence numbers reflect the source line number.
2. Macro expansion lines have their nesting level, in
parentheses, in the sequence number field.
3. Lines containing nothing but a form feed are not
listed but cause the sequence number to be
incremented.
4. Page numbers reflect physical input pages
.LIST/.NLIST
CROSS-Microcomputer cross assembler 10
(incremented only upon encountering a form feed).
Pages forced by the assembler have a -n to reflect an
extension page. i.e. If the assembler had
encountered 3 form feeds and was on its third listing
page since the last one, it would be "page 4-2".
when /SOL is specified, listings are output oriented:
1. Listed lines have consecutive numbers, except for
binary extensions.
2. Page numbers reflect the number of pages listed.
/GNS Generate a new source. This causes the listing file to take on
the appearance of a source file. specifically, it:
1. Suppresses the listing of headers, error flags,
summary blocks, and any other output over which the
user otherwise would have no control.
2. Simulates a /NL:seq:loc:bin:bex:me.
3. therefore, by itself, it recreates the source file.
Normal usage would have supplementary switches
following it. i.e. /gns/nl:md:mc /li:me would
replace macros, repeats, and irps by their generated
code, /gns/nl:cnd would purge conditionals, and
/gns/li:seq would be an expensive way of creating a
sequence numbered listing of the source file.
.LIST/.NLIST
CROSS-Microcomputer cross assembler 11
5. Enable/Disable control
As an alternative to the proliferation of directives, cross uses one
complementary pair, .ENABL/.DSABL, with arguments. Their command string
equivalents are /EN and /DS. The relationship between command string and
source statement specification, as well as their argument specification, is the
same as in .LIST/.NLIST.
M85 allow 8085 opcodes (RIM/SIM) in .M80 files
Z80 allow z80 opcodes in .M80 files
FPT floating point truncation. ".ENABL FPT" is equivalent to
".TRUNC" while ".DSABL FPT" is equivalent to ".ROUND".
ABS absolute assembly
AMA absolute memory addressing
NPP ".ENABL NPP" causes suppression of the output of the following
code, while ".DSABL NPP" causes its resumption.
ERF error flags can be selectively suppressed (or enabled) by
specifying ERF, directly followed by the selected error
characters. "/ds:erfzm" would cause "m" and "z" errors to be
ignored, "/ds:erf"would cause all errors to be ignored, and
"/en:erfa" would cause"a" flags (argument errors) to be
flagged.
LC lower case to upper case translation of input
** Actually, this is wrong, as REM noted. It should be:
** allow lower case in listing
** .ENABL LC will allow lowercase. -pgs
LSB local symbol block
TIM timing information - causes number of states to be output on
the listing.
REG default register names
.ENABL/.DSABL
CROSS-Microcomputer cross assembler 12
6. User-defined switch defaults
CROSS is capable of accepting user-defined switch defaults. Any switches
that are valid in a command string may be specified in a special file called
SWITCH.INI. When cross is run, it will look for this file in the user's
directory. If the file is not found, then standard defaults (as defined
elsewhere in this document) are assumed. if SWITCH.INI is found, but no cross
switches are found, default settings are assumed.
To specify defaults, use the editor of your choice to create a file called
SWITCH.INI. This file must contain a line of the following format:
CROSS/switch1/switch2...../switchn
continuation lines are permitted. Specifically, a line containing a terminal
hyphen is assumed to be followed by a continuation line.
Of course CROSS does not consider the hyphen to be a part of any switch.
Note that this feature is a subset of the facility offered normally by use of
SWITCH.INI files.
SWITCH.INI
CROSS-Microcomputer cross assembler 13
I. 8080 syntax
I.1 Machine State
The registers for the 8080 are defined as:
- %A - the accumulator
- %B - register B
- %C - register C
- %D - register D
- %H - register H, high-order memory reference register
- %L - register L, low-order memory reference register
- %SP - the stack pointer register
- %PSW - the processor status, or F register
Register pairs are written in the description of each instruction by
concatenating two names, e.g., %H%L is the 16-bit value in the HL register
pair. Parentheses are sometimes added for visual clarity, e.g., ".(%H%L)".
The flags in the status register are represented by:
- c - the carry bit
- p - the parity bit. True if the last operation had odd parity, false
if even parity.
- z - the zero bit. True if the last operation had a zero result.
- s - the sign bit. True if the last operation had a negative result.
- ie - the interrupt enable flag.
In each description of an instruction that alters the condition codes, either
an explicit assignment is written (e.g., "c_0") or the condition codes are
listed in curly brackets. In this case, it is implied that c is set to
indicate carry or borrow (arithmentic operations), z is set if the result is
zero, s is set if the result is negative, and p is set if the parity is even.
I.2 Notation
To reduce the size of the description, several notational conventions will be
established for desribing the operands:
- i - represents an immediate operand which is 8 bits wide.
- m - represents a memory operand which is 16 bits wide.
- M - represents an implied memory operand addressed by the register
pair %H%L.
- MEM - represents all of addressible memory.
8080
CROSS-Microcomputer cross assembler 14
- DEV - represents all addressible devices.
- v - a special 3-bit value used for the RST instruction
- opnd - a general operand, either register or implied memory. For
registers, it will be expressed as %r for one of the 8-bit registers,
and for memory it will be expressed as M in the instruction syntax
and MEM[.(%H%L)] in the description of the instruction.
- %rp - a register pair from the set {%B%C, %D%E, %H%L %SP}. These
would be written, in the assembler, as %B, %D, %H or %SP.
- %rpn - a register pair from the set {%PSW, %A, %B%C, %D%E, %H%L}.
Written as %PSW, %B, %D or %H.
I.3 Opcodes
The opcodes that are recognized for the 8080 are shown below. The function
is given in a BLISS-like notation (the dot operator means "contents of").
ACI i %A _ .%A + i + .c; {c,z,s,p}
ADC opnd %A _ .%A + opnd + .c
ADD opnd %A _ .%A + .opnd; {c,z,s,p}
ADI i %A _ .%A + i; {c,z,s,p}
ANA opnd %A _ .%A and .opnd; c _ 0; {z,s,p}
ANI i %A _ .%A + i; c _ 0; {z,s,p}
CALL m MEM[.%SP-1], MEM[.%SP-1] _ .pc; %SP _ .%SP - 2; pc _ m;
CC m if .c then CALL m
CM m if .s then CALL m
CMA %A _ not .%A; {note: c,z,s,p not changed}
CMC c _ not .c
CMP opnd .%A - .opnd; {c,z,s,p}
CNC m if not .c then CALL m
CNZ m if not .z then CALL m
CP m if not .s then CALL m
CPE m if .p then CALL m
CPI i .%A - i; {c,z,s,p}
CPO m if not .p then CALL m
CZ m if .z then CALL m
DAA %A _ DecimalAdjust(.%A); {c,z,s,p}
DAD %B %H%L _ .(%H%L) + .(%B%C); {c}
DAD %D %H%L _ .(%H%L) + .(%D%E); {c}
DAD %SP %H%L _ .(%H%L) + .%SP; {c}
DCR opnd opnd _ .opnd - 1; {z,s,p}
DCX %rp %rp _ .(%rp) - 1
8080
CROSS-Microcomputer cross assembler 15
DI ie _ 0
EI ie_ 1;
HLT
IN i %A _ .DEV[i];
INR opnd opnd _ .opnd + 1; {z,s,p}
INX %rp %rp _ .(%rp) + 1;
JC m if .c then pc _ m;
JM m if .s then pc _ m;
JMP m pc _ m;
JNC m if not .c then pc _ m;
JNZ m if not .z then pc _ m;
JP m if not .s then pc _ m;
JPE m if .p then pc _ m;
JPO m if not .p then pc _ m;
JZ m if .z then pc _ m;
LDA m %A _ .MEM[m];
LDAX %B %A _ .MEM[.(%B%C)];
LDAX %D %A _ .MEM[.(%D%E)];
LHLD m %H _ .MEM[m]; %L _ .MEM[m+1];
LXI %rp,m %rp _ m;
MOV %r1,%r2 %r1 _ .%r2;
MOV m,%r MEM[m] _ .%r;
MOV %r,m %r _ .MEM[m];
MVI opnd,i opnd _ i;
NOP ;
ORA opnd %A _ .%A or .opnd; c _ 0; {z,s,p}
ORI i {%A _ .%A or i;}; c _ 0; {z,s,p}
OUT i DEV[i] _ .%A;
PCHL pc _ .(%H%L);
POP %rpn %rpn _ .MEM[.%SP], .MEM[.%SP + 1]; %SP _ .%SP + 2;
PUSH %rpn %SP _ .%SP - 2; MEM[.%SP], MEM[.%SP + 1] _ .%rpn;
RAL c%A _ .(c%A) ^ 1;
RAR c%A _ .(c%A) ^ -1;
RC if .c then RET;
RET pc _ .MEM[.%SP], .MEM[.%SP+1]); %SP_.%SP + 2;
RLC c _ .%A<7,1>; %A _ .%A ^ 1
RM if .s then RET;
RNC if not .c then RET;
RNZ if not .z then RET;
RP if not .s then RET;
RPE if .p then RET;
RPO if not .p then RET;
RRC c _ .%A<0,1>; %A _ .%A ^ -1;
RST v CALL v ^ 8;
8080
CROSS-Microcomputer cross assembler 16
RZ if .z then RET;
SBB opnd %A _ .%A - .opnd - .c; {c,z,s,p}
SBI i %A _ .%A - i - .c; {c,z,s,p}
SHLD m MEM[m] _ .%H; MEM[m+1] _ .%L;
SPHL %sp _ .(%H%L);
STA m MEM[m] _ .%A;
STAX %B MEM[.(%B%C)] _ .%A;
STAX %D MEM[.(%D%E)] _ .%A;
STC c _ 1;
SUB opnd %A _ .%A - .opnd; {c,z,s,p}
SUI i %A _ .%A - i; {c,z,s,p}
XCHG %D <=> %H; %E <=> %L;
XRA opnd %A _ .%A xor .opnd; c _ 0; {z,s,p}
XTHL MEM[.%SP - 1] <=> %H; MEM[.%SP] <=> %L;
8080
CROSS-Microcomputer cross assembler 17
II. Z80 syntax
II.1 Introduction
The Z80 portion of CROSS is not intended to correspond to the Zilog syntax;
instead, it is treated as an extension of the 8080 operations described in
section I. This means that new opcode designators have been invented where
appropriate.
II.2 Machine State
The Z80 registers are designated exactly like the 8080 registers, with the
following additions:
- %X - index register X (16 bits)
- %Y - index register Y (16 bits)
- iv - the interrupt vector base address (8 bits)
- ra - the dynamic RAM refresh address (8 bits)
II.3 Notation
The following notational extensions are made to the 8080 description:
- b - A bit position, 0-7, for bit operations
- opnd - In addition to %r and M, indexed operands are permitted for
all instructions which use opnd; these are expressed to the assembler
as d(X) or d(Y), where d is an 8-bit displacement. In the
description, they are interpreted as ".%X+d" or ".%Y+d".
- %rpx - Register pair including %X, i.e., {%B%C, %D%E, %X, %SP}
- %rpy - Register pair including %Y, i.e., {%B%C, %D%E, %Y, %SP}
II.4 Opcodes
The extended opcodes for the Z80 are given below. Those which are underlined
are mnemonics which are neither 8080 instructions nor those defined by Zilog
for the Z80; they have been invented for CROSS. A complete transliteration
from Zilog assembler format to CROSS syntax is given in section II.5.
BIT b,opnd z _ not .opnd<b,1>
CCD .%A - .MEM[.(%H%L)]; %H%L _ .(%H%L) - 1; %BC _ .(%B%C) - 1;
{z,s,p}
CCDR until .%A = .MEM[.(%H%L)] or .(%B%C) = 0 do begin
Z80
CROSS-Microcomputer cross assembler 18
.%A - .MEM[.(%H%L)]; %H%L _ .(%H%L) - 1; %B%C _ .(%B%C) - 1
end; {c,z,p}
CCI .%A - .MEM[.(%H%L)]; %H%L _ .(%H%L) + 1; %BC _ .(%B%C) - 1;
{z,s,p}
CCIR until .%A = .MEM[.(%H%L)] or .(%B%C) = 0 do begin
.%A - .MEM[.(%H%L)]; %H%L _ .(%H%L) + 1; %B%C _ .(%B%C) - 1
end; {c,z,p}
CNO CPO;
CO CPE;
DADC %rp %HL _ .(%HL) + .%rp + .c; {c,z,n,p}
DADX %rpy %X _ .%X + .%rpy; {c,n}
DADY %rpx %Y _ .%Y + .%rpx; {c,n}
DJNZ i if .%B 0 then pc _ .pc + 2 + i
DSBC %rp %H%L _ .%H%L - .%rp - .c; n _ 1; p _ 0; {c,z}
EXAF %A%PSW <=> %A'%PSW';
EXX %B%C <=> %B'%C'; %D%E <=> %D'%E'; %H%L <=> %H'%L'
IM0 im _ 0;
IM1 im _ 1;
IM2 im _ 2;
IND
INDR
INI
INIR
INP
JMPR i pc _ .pc + 2 + i;
JNO m JPO m;
JO m JPE m;
JRC i if .c then JR i;
JRNC i if not .c then JR i;
JRNZ i if not .z then JR i;
JRZ i if .z then JR i;
LBCD m %B%C _ .MEM[m];
LDAI %A _ .iv;
LDAR %A _ .ra;
LDD MEM[.(%D%E)] _ .MEM[.(%H%L)]; %D%E _ .(%D%E) - 1;
%H%L _ .(%H%L) - 1; %B%C _ .(%B%C) - 1; n _ 0;
LDDR until .(%B%C) = 0 do begin MEM[.(%D%E)] _ .MEM[.(%H%L)];
%D%E _ .(%D%E) - 1; %H%L _ .(%H%L) - 1; %B%C _ .(%B%C) - 1;
end;
LDED m %D%E _ .MEM[m];
LDI .MEM[.(%D%E)] _ .MEM[.(%H%L)]; %D%E _ .(%D%E) + 1;
%H%L _ .(%H%L) + 1; %B%C _ .(%B%C) - 1; {p}
LDIR until .(%B%C) = 0 do begin MEM[.(%D%E)] _ .MEM[.(%H%L)];
%D%E _ .(%D%E) + 1; %H%L _ .(%H%L) + 1; %B%C _ .(%B%C) - 1;
Z80
CROSS-Microcomputer cross assembler 19
end;
LIXD m %X _ .MEM[m+1], .MEM[m];
LIYD m %Y _ .MEM[m+1], .MEM[m];
LSPD m %SP _ .MEM[m+1], .MEM[m];
NEG %A _ - .%A; p _ 0; {c,z,s}
OUTD
OUTDR
OUTI
OUTIR
OUTP
PCIX pc _ .%X;
PCIY pc _ .%Y;
RALR
RARR
RES b,opnd %opnd<b,1> _ 0;
RETI return from interrupt
RETN return from nonmaskable interrupt
RLCR
RLD decimal arithmetic
RNO RPO;
RO RPE;
RRCR
RRD decimal arithmetic
SBCD m MEM[m] _ .(%B%C);
SDED m MEM[m] _ .(%D%E);
SET b,opnd opnd<b,1> _ 1;
SIXD m MEM[m] _ .%X;
SIYD m MEM[m] _ .%Y;
SLAR
SPIX %SP _ .%X;
SPIY %SP _ .%Y;
SRAR
SRLR
SSPD m MEM[m] _ .%SP;
STAI iv _ .%A;
STAR ra _ .%A;
XTIX %X <=> MEM[.%SP];
XTIY %Y <=> MEM[.%SP];
II.5 Z80 Transliterations
The following transliterations are necessary because of the differences
between the Zilog definition of the instructions and the CROSS syntax. This is
indexed alphabetically by the Zilog operations in order to facilitate
translation of Zilog assembly programs to CROSS.
Z80 transliterations
CROSS-Microcomputer cross assembler 20
Zilog Cross
ADC i ACI i
ADC (HL) ADC M
ADC HL,rp DADC %rp
ADC (IX+d) ADC d(X)
ADC (IY+d) ADC d(Y)
ADC r ADC %r
ADD i ADI i
ADD (HL) ADD M
ADD HL,rp DAD %rp
ADD (IX+d) ADD d(X)
ADD (IY+d) ADD d(Y)
ADD r ADD %r
AND i ANI i
AND (HL) ANA M
AND (IX+d) ANA d(X)
AND (IY+d) ANA d(Y)
AND r ANA %r
BIT b,(HL) BIT b,M
BIT b,(IX+d) BIT b,d(X)
BIT b,(IY+d) BIT b,d(Y)
CALL m CALL m
CALL C,m CC m
CALL M,m CM m
CALL NC,m CNC m
CALL NZ,m CNZ m
CALL NZ,m CNZ m
CALL P,m CP m
CALL PE,m CPE m
CALL PO,m CPO m
CALL Z,m CZ m
CCF CMC
CP i CPI i
CP (HL) CMP M
CP (IX+d) CMP d(X)
CP (IY+d) CMP d(Y)
CP r CMP %r
CPD CCD
CPDR CCDR
CPI CCI
CPIR CCIR
CPL CMA
DAA DAA
DEC (HL) DCR M
Z80 transliterations
CROSS-Microcomputer cross assembler 21
DEC IX DCX %X
DEC IY DCX %Y
DEC (IX+d) DCR d(X)
DEC (IY+d) DCR d(Y)
DEC rp DCX %rp
DEC r DCR %r
DI DI
DJNZ d DJNZ d
EI EI
EX AF,AF' EXAF
EX DE,HL XCHG
EX (SP),HL XTHL
EX (SP),IX XTIX
EX (SP),IY XTIY
EXX EXX
HALT HLT
IM 0 IM0
IM 1 IM1
IM 2 IM2
IN A,i IN i
IN r,(c)
INC (HL) INR M
INC IX INX %X
INC IY INX %Y
INC (IX+d) INR d(X)
INC (IY+d) INR d(Y)
INC rp INX %rp
IND IND
INDR INDR
INI INI
INIR INIR
JP m JMP m
JP M,m JM m
JP NC,m JNC m
JP NZ,m JNZ m
JP NZ,m JNZ m
JP P,m JP m
JP PE,m JPE m
JP PO,m JPO m
JP Z,m JZ m
JR d JMPR d
JR M,m JRM m
JR NC,m JRNC m
JR NZ,m JRNZ m
Z80 transliterations
CROSS-Microcomputer cross assembler 22
JR NZ,m JRNZ m
JR P,m JRP m
JR PE,m JRPE m
JR PO,m JRPO m
JR Z,m JRZ m
LD A,(m) LDA m
LD A,(BC) LDAX %B
LD A,(DE) LDAX %D
LD A,i MVI %A,i
LD A,r MOV %A,%r
LD (m),A STA m
LD (m),BC SBCD m
LD (m),DE SDED m
LD (m),HL SHLD m
LD (m),IX SIXD m
LD (m),IY SIYD m
LD (m),SP SSPD m
LD (BC),A STAX %B
LD (DE),A STAX %D
LD HL,(m) LHLD m
LD (HL),i MVI i
LD (HL),r MOV %r,M
LD I,A STAI
LD IX,(m) LIXD m
LD IX,m LXI %X,m
LD (IX+d),i MVI i,d(X)
LD (IX+d),r MOV %r,d(X)
LD IY,(m) LIYD m
LD IY,m LXI %Y,m
LD (IY+d),i MVI i,d(Y)
LD (IY+d),r MOV %r,d(Y)
LD r,A MOV %r,%A
LD r,i MVI %r,i
LD r,(HL) MOV %r,M
LD r,(IX+d) MOV %r,d(X)
LD r,(IY+d) MOV %r,d(Y)
LD r,r MOV %r,%r
LD BC,(m) LBCD m
LD DE,(m) LDED m
LD HL,(m) LHLD m
LD SP,(m) LSPD m
LD IX,(m) LIXD m
LD IY,(m) LIYD m
LD rp,m LXI %rp,m
Z80 transliterations
CROSS-Microcomputer cross assembler 23
LD SP,HL SPHL
LD SP,IX SPIX
LD SP,IY SPIY
LDD LDD
LDDR LDDR
LDI LDI
LDIR LDIR
NEG NEG
NOP NOP
OR i ORI i
OR (HL) ORA M
OR (IX+d) ORA d(X)
OR (IY+d) ORA d(Y)
OR r ORA %r
OUT (i),r
OUT i,A OUT i
OUTD OUTD
OUTDR OUTDR
OUTI OUTI
OUTIR OUTIR
POP IX POP %X
POP IY POP %Y
POP rp POP %rp
PUSH IX PUSH %X
PUSH IY PUSH %Y
PUSH rp PUSH %rp
RES b,(HL) RES b,M
RES b,(IX+d) RES b,d(X)
RES b,(IY+d) RES b,d(Y)
RES b,r RES b,%r
RET RET
RET M RM
RET NC RNC
RET NZ RNZ
RET NZ RNZ
RET P RP
RET PE RPE
RET PO RPO
RET Z RZ
RETI RETI
RETN RETN
RL (HL) RALR M
RL (IX+d) RALR d(X)
RL (IY+d) RALR d(Y)
Z80 transliterations
CROSS-Microcomputer cross assembler 24
RL r RALR %r
RLA RAL
RLC (HL) RLC M
RLC (IX+d) RLC d(X)
RLC (IY+d) RLC i<d>(Y)
RLC r RLC %r
RLCA RLC
RLD RLD
RR (HL) RARR M
RR (IX+d) RARR d(X)
RR (IY+d) RARR d(Y)
RR r RARR %r
RRA RAR
RRC (HL) RRC M
RRC (IX+d) RRC d(X)
RRC (IY+d) RRC d(Y)
RRC r RRC %r
RRCA RRC
RRD RRD
RST v RST v
SBC i SBI i
SBC (HL) SBC M
SBC HL,rp DSBC %rp
SBC (IX+d) SBC d(X)
SBC (IY+d) SBC d(Y)
SBC r SBC %r
SCF STC
SET b,(HL) SET b,M
SET b,(IX+d) SET b,d(X)
SET b,(IY+d) SET b,d(Y)
SET b,r SET b,%r
SLA (HL) SLAR M
SLA (IX+d) SLAR d(X)
SLA (IY+d) SLAR d(Y)
SLA r SLAR %r
SRA (HL) SRAR M
SRA (IX+d) SRAR d(X)
SRA (IY+d) SRAR d(Y)
SRA r SRAR %r
SRL (HL) CB3E
SRL (IX+d) DDCBdd3E
SRL (IY+d) FDCBdd3E
SRL r CB??
SUB i SUI i
Z80 transliterations
CROSS-Microcomputer cross assembler 25
SUB (HL) SUB M
SUB (IX+d) SUB d(X)
SUB (IY+d) SUB d(Y)
SUB r SUB %r
XOR i XRI i
XOR (HL) XRA M
XOR (IX+d) XRA d(X)
XOR (IY+d) XRA d(Y)
XOR r XRA %r
Z80 transliterations
CROSS-Microcomputer cross assembler 26
III. 8008
The 8008 is described by two different sets of opcodes. The one set is based
upon the 8080 style of coding, and is a subset of the operations. The other
set is based upon the original set of 8008 mnemonics as described by Intel.
Rather than give complete descriptions of these operations, the user is
referred back to the 8080 descriptions. What this section will give is a
listing of the available operations and a cross reference to the original 8008
mnemonics.
Note that the 8008 is "software compatible" with the 8080; the same mnemonics
will produce different bit patterns for the 8008 and the 8080.
III.1 8080 subset
The instructions which are implemented for the 8008 are:
ACI ADC ADD ADI ANA ANI CALL CC CM
CNC CNZ CP CPE CPI CPO CZ DCR HLT
INR JC JM JMP JNC JNZ JP JPE JPO
MOV MVI NOP ORA ORI OUT RAL RAR RC
RET RLC RM RNC RNZ RP RPE RPO RRC
RZ SBB SBI SUB SUI XRA XRI
The set of original 8008 operations are defined as:
8080 Original 8008
ADC ACA, ACB, ACC, ACD, ACE, ACH, ACL
ACI ACI
ADD ADA, ADB, ADC, ADD, ADE, ADH, ADL
ADI ADI
CALL CAL
CNC CFC
CPO CFP
CM CFS
CNZ CFZ
CMP CPA, CPB, CPC, CPD, CPE, CPH, CPL
CPI CPI
CC CTC
CPE CTP
CP CTS
CZ CTZ
DCR DCB, DCC, DCD, DCE, DCH, DCL
HLT HLT
INR INB, INC, IND, INE, INH, INL
IN INP
8008
CROSS-Microcomputer cross assembler 27
JNC JFC
JNZ JFZ
JPO JFP
JM JFS
JMP JMP
JC JTC
JPE JTP
JP JTS
JZ JTZ
MOV LAA, LAB, LAC, LAD, LAE, LAH, LAL, LAM, LBA, LBB, LBC, LBD,
LBE, LBH, LBL, LBM, LCA, LCB, LCC, LCD, LCE, LCH, LCL, LCM,
LDA, LDB, LDC, LDD, LDE, LDH, LDL, LDM, LEA, LEB, LEC, LED,
LEE, LEH, LEL, LEM, LHA, LHB, LHC, LHD, LHE, LHH, LHL, LHM,
LLA, LLB, LLC, LLD, LLE, LLH, LLL, LLM
MVI LAI, LBI, LCI, LDI, LEI, LHI, LLI, LMI
ANA NDA, NDB, NDC, NDD, NDE, NDH, NDL, NDM
ANI NDI
NOP NOP
ORA ORA, ORB, ORC, ORD, ORE, ORH, ORL, ORM
ORI ORI
OUT OUT
RAL,RAR RAL, RAR
RET RET
RNC RFC
RPO RFP
RP RFS
RNZ RFZ
RLC,RRC RLC, RRC
SUB SBA, SBB, SBC, SBD, SBE, SBH, SBL, SBM
SBI SBI
SBC SUA, SUB, SUC, SUD, SUE, SUH, SUL, SUM
SUI SUI
XRA XRA, XRB, XRC, XRD, XRE, XRH, XRL, XRM
8008
CROSS-Microcomputer cross assembler 28
IV. 1802
IV.1 Machine State
D The data register
DF The "data flag" register, or carry
P 4-bit program counter pointer
X 4-bit data counter pointer
T 8-bit buffer for P and X
Q Q-status output register
IV.2 Opcodes
The operation codes recognized for the 1802 are:
ADC D _ .mem[.R[.X]] + .D + .DF
ADCI D _ data8 + .D + .DF
ADD D _ .mem[.R[.X]] + .D
ADI D _ data8 + .D
AND
ANI
BDF if .DF then R[P]<7,0> _ adr8
BGE
BL
BM
BNF
BNQ
BNZ
BN1
BN2
BN3
BN4
BPZ
BQ
BR
BZ
B1
B2
B3
B4
1802
CROSS-Microcomputer cross assembler 29
DEC n R[n] _ .R[n] - 1;
DIS
GHI
GLO
IDL
INC n R[n _ .R[n] + 1;
INP
IRX
LBDF
LBNF
LBNQ
LBNZ
LBQ
LBR
LBZ
LDA
LDI
LDN
LDX
LDXA
LSDF
LSIE
LSKP
LSNF
LSNQ
LSNZ
LSQ
LSZ
MARK
NBR
NLBR
NOP
OR
ORI
OUT
PHI
PLO
REQ
RET
RSHL
RSHR
SAV
SD
SDB
1802
CROSS-Microcomputer cross assembler 30
SDBI
SDI
SEP
SEQ
SEX
SHL
SHLC
SHR
SHRC
SKP
SM
SMB
SMBI
SMI
STR
STXD
XOR
XRI
1802
CROSS-Microcomputer cross assembler 31
V. 6502
V.1 Machine state
The machine state is represented by:
- c - The carry bit
- z - The zero bit, true if result was zero
- v - The overflow bit
- s - The sign bit, true if result was negative
- d - Decimal mode
- i - Interrupt disable bit; 0 => interrupts enabled
- b - Breakpoint flag; set by BRK instruction trap
The machine registers are:
- ac - The single accumulator, 8 bits wide
- x - 8 bit index register x, preindexes indirect addresses
- y - 8 bit index register y, postindexes indirect addresses.
- sp - 8 bit stack pointer.
- psw - 8 bit processor status word.
V.2 Notation
The operands are expressed as:
- opnd8 - 8 bit operand corresponding to one of the form:
- addr - Base page direct (8 bit address).
- addr,X - Base page indexed by x; MEM[addr + .x].
- (addr,X) - Indexed indirect by x; (.MEM[addr + .x]).
- (addr),Y - Indexed indirect by y; (.MEM[addr] + .y).
6502
CROSS-Microcomputer cross assembler 32
- opnd16 - Any of the following operands in the form:
- addr - Extended direct (16 bit address); MEM[addr].
- addr,X - Absolute indexed via x; MEM[addr + .x].
- addr,Y - Absolute indexed via y; MEM[addr + .y].
- opnd - Either opnd8 or opnd16.
- i - Immediate data, expressed as #expression.
V.3 Syntax
The syntax for operands is much like that specified by MOS Technology.
Immediate operands are indicated by preceding the operand with a hash mark, #.
V.4 Opcodes
The opcodes recognized for the Mos Technology 6502 are:
ADC opnd ac _ .ac + .opnd + .c; {s,z,c,v}
ADC i ac _ .ac + i + .c; {s,z,c,v}
AND opnd ac _ .ac and .opnd; {s,z}
AND i ac _ .ac and i; {s,z}
ASL opnd c,opnd _ opnd ^ 1; {s,z,c}
BCC d if not .c then pc _ .pc + 1 + d;
BCS d if .c then pc _ .pc + 1 + d;;
BEQ d if .z then pc _ .pc + 1 + d;;
BIT opnd .ac and .opnd; s _ (.ac and .opnd)<7,1>;
v _ (.ac and .opnd)<6,1>; {z}
BMI d if .s then pc _ .pc + 1 + d;;
BNE d if not .z then pc _ .pc + 1 + d;;
BPL d if not .s then pc _ .pc + 1 + d;;
BRK MEM[.sp] _ .pc<0,8>; MEM[.sp + 1] _ .pc<8,8>;
MEM[.sp + 2] _ .psw; sp _ .sp - 3; pc _ $FFFFFFFE; i _ 1;
b _ 1;
BVC d if not .v then pc _ .pc + 1 + d;;
BVS d if .v then pc _ .pc + 1 + d;;
CLC c _ 0;
CLD d _ 0;
CLI i _ 0;
CLV v _ 0;
CMP opnd .ac - .opnd; {s,z,c}
CPX opnd .x - .opnd; {s,z,c}
CPY opnd .y - opnd; {s,z,c}
6502
CROSS-Microcomputer cross assembler 33
DEC ac _ .ac - 1; {s,z}
DEX x _ .x - 1; {s,z}
DEY y _ .y - 1; {s,z}
EOR opnd ac _ .ac - .opnd
INC ac _ .ac + 1; {z,s}
INX x _ .x + 1;
INY y _ .y + 1;
JMP m pc _ m;
JSR m MEM[.sp] _ .pc<8,8>; MEM[.sp - 1] _ .pc<0,8>; sp _ .sp - 2;
pc _ m;
LDA opnd ac _ .opnd; {s,z}
LDX opnd x _ .opnd; {s,z}
LDY opnd y _ .opnd; {s,z}
LSR ac,c _ .ac,0 ^ -1;
NOP ;
ORA opnd ac _ .ac or opnd; {s,z}
PHA MEM[.sp] _ .ac; sp _ .sp - 1;
PHP MEM[.sp] _ .psw; sp _ .sp - 1;
PLA ac _ .MEM[.sp + 1]; sp _ .sp + 1;
PLP psw _ .MEM[.sp + 1]; sp _ .sp + 1;
ROL opnd c,.MEM[opnd] _ c,.MEM[opnd] rot 1; {s,z,c}
ROR opnd c,.MEM[opnd] _ c,.MEM[opnd] rot -1; {s,z,c}
RTI psw _ .MEM[.sp + 1]; pc<0,8> _ .MEM[.sp + 2];
pc<8,8> _ .MEM[.sp + 3]; sp _ .sp + 3; pc _ .pc + 1;
RTS pc<0,8> _ .MEM[.sp + 1]; pc<8,8> _ .MEM[.sp + 2]; sp _ .sp + 2;
pc _ .pc + 1;
SBC opnd ac _ .ac - .opnd - (not .c); {s,z,c,v}
SEC c _ 1;
SED d _ 1;
SEI i _ 1;
STA opnd MEM[opnd] _ .ac; {s,z}
STX opnd MEM[opnd] _ .x; {s,z}
STY opnd MEM[opnd] _ .y; {s,z}
TAX a _ .x;
TAY a _ .y;
TSX sp _ .x;
TXA x _ .a;
TXS x _ .sp;
TYA y _ .a;
6502
CROSS-Microcomputer cross assembler 34
VI. 6800
VI.1 Machine State
The registers are:
- %A - accumulator A
- %B - accumulator B
- %X - Index register (16 bits)
- sp - Stack pointer (16 bits)
- pc - The program counter (16 bits)
The flags are:
- c - Carry
- o - Overflow
- s - Sign
- z - Zero
- xc - Auxiliary carry
VI.2 Notation
- mem - A memory address which can be one of
- Base page direct (.MEM[mem], mem 8 bits)
- Extended direct (MEM[mem], mem 16 bits)
- Indexed (MEM[mem+.%X], mem 8 bits)
- memd - A memory address which can be one one of
- Extended direct (MEM[memd], memd 16 bits)
- Indexed (MEM[memd+.%X], memd 8 bits)
- i - An immediate operand, written as #i
6800
CROSS-Microcomputer cross assembler 35
- i16 - A 16-bit immediate operand, written as #i16
- d - A displacement, usually written as an address; CROSS will compute
the actual displacement between the current instruction and the
destination address.
- opnd - A general operand; may be either mem or i. When interpreted
as a value, ".opnd" may represent either .MEM[mem] or i. Please
excuse the somewhat sloppy notation; it makes the description more
compact.
- sr - The status register which holds c,z,s,o,xc.
VI.3 Syntax
Immediate operands are written with a # symbol, e.g.
ADDA #$F9 ; Adds hex F9 to A
Indexing is specified by writing ",X" after the operand. The operand must be
a value which will fit in 8 bits.
foo==$10
ADDA foo,X
VI.4 Opcodes
ABA %A _ .%A + .%B; {c,z,s,o,xc}
ADCA opnd %A _ .%A + .opnd + .c; {c,z,s,o,xc}
ADCB opnd %B _ .%B + .opnd + .c; {c,z,s,o,xc}
ADDA opnd %A _ .%A + .opnd; {c,z,s,o,xc}
ADDB opnd %B _ .%b + .opnd; {c,z,s,o,xc}
ANDA opnd %A _ .%A + .opnd; o_0; {z,s}
ANDB opnd %B _ .%B + .opnd; o_0; {z,s}
ASL memd c_.memd<7,1>; memd_.memd^1; o_.s xor .c; {z,s}
ASLA c_.%A<7,1>; %A_.%A^1; o_.s xor .c; {z,s}
ASLB c_.%B<7,1>; %B_.%B^1; o_.s xor .c; {z,s}
ASR memd c_.memd<0,1>; memd_.memd ash -1; o_.s xor .c; {z,s}
ASRA c_.%A<0,1>; %A_.%A ash -1; o_.s xor .c; {z,s}
ASRB c_.%B<0,1>; %B_.%B ash -1; o_.s xor .c; {z,s}
BCC d if not .c then BRA d;
BCS d if .c then BRA d;
BEQ d if .z then BRA d;
BGE d if not (.o xor .s) then BRA d;
BGT d if not (.z or (.s xor .o)) then BRA d;
6800
CROSS-Microcomputer cross assembler 36
BHI d if not (.c or .z) then BRA d;
BITA mem .%A and .mem; o _ 0; {z,s}
BITB mem .b and .mem; o _ 0; {z,s}
BLE d if .z or (.s xor .o) then BRA d;
BLS d if .c or .z then BRA d;
BLT if .s xor .o then BRA d;
BMI d if .s then BRA d;
BNE d if not .z then BRA d;
BPL d if not .s then BRA d;
BR d BRA d;
BRA d pc _ .pc + 2 + d;
BSR d MEM[.sp] _ .pc<0,8>; MEM[.sp - 1] _ .pc<8,8>; sp _ .sp - 2;
pc _ .pc + d + 2;
BVC d if not .o then BRA d;
BVS d if .o then BRA d;
CBA .%A - .%B; {c,z,s,o}
CLC c_0;
CLI ie _ 0;
CLR memd memd_0; c_0; z_1; s_0; o_0;
CLRA %A _ 0; c_0; z_1; s_0; o_0;
CLRB %B _ 0; c_0; z_1; s_0; o_0;
CLV o _ 0;
CMPA opnd .%A - .opnd; {c,z,s,o}
CMPB opnd .%B - .opnd; {c,z,s,o}
COM memd memd_~.memd; c_1; o_0; {s,z}
COMA %A_~.%A; c_1; o_0; {s,z}
COMB %B_~.%B; c_1; o_0; {s,z}
CPX memd %X<0,8>-.(memd+1); %X<8,8>-.memd; {s,z,o}
DAA decimal arithmetic
DEC memd memd_.memd-1; {s,z,o}
DECA %A _ .%A - 1; {s,z,o}
DECB %B _ .%B - 1; {s,z,o}
DES sp _ .sp - 1;
DEX %X _ .%X - 1; {z}
EORA opnd %A_%A xor .opnd; o_0; {s,z}
EORB opnd %B_%B xor .opnd; o_0; {s,z}
INC memd memd_.memd+1; {s,z,o}
INCA %A _ .%A + 1; {s,z,o}
INCB %B _ .%B + 1; {s,z,o}
INS sp _ .sp + 1;
INX %x _ .%X + 1; {z}
JMP mem pc _ mem;
JSR mem MEM[.sp]_.pc<0,8>; MEM[.sp-1]_.pc<8,8>; sp_.sp-2; pc_mem;
LDAA
6800
CROSS-Microcomputer cross assembler 37
LDAB
LDS mem sp<8,8> _ .mem; sp<0,8> _ .(mem + 1); o _ 0; {z,s}
LDS i16 sp _ i16; {s,z}
LDX opnd %X<8,8> _ .opnd; %X<0,8> _ .(opnd + 1); o _ 0; {z,s}
LSRA
LSRB
NEG memd memd _ 0 -.memd; {c,s,z,o}
NEGA %A _ 0 - .%A; {c,s,z,o}
NEGB %B _ 0 - .%B; {c,s,z,o}
NOP ;
ORAA
ORAB
PSHA
PSHB
PULA
PULB
ROL
ROLA
ROLB
ROR
RORA
RORB
RTI
RTS
SBA %A _ .%A - .%B; {c,z,s,o}
SBCA opnd %A _ %A - .opnd - .c; {c,z,s,o}
SBCB opnd %B _ .%B - .opnd - .c; {c,z,s,o}
SEC c _ 1;
SEI ie _ 1;
SEV o _ 1;
STAA
STAB
STS mem mem _ .sp<8,8>; (mem + 1) _ .sp<0,8>; o_0; {s,z}
STX mem mem _ .%X<8,8>; (mem + 1) _ .%X<0,8>; o_0; {s,z}
SUBA opnd %A _ .%A - .opnd; {c,s,z,o}
SUBB opnd %B _ .%B - .opnd; {c,s,z,o}
SWI software interrupt
TAB %B _ .%A; o_0; {s,z}
TAP sr _ .%A; {c,z,s,o,xc}
TBA %A _ .%B; o_0; {s,z}
TPA %A _ .sr
TST memd c _ 0; z _ .memd = 0; s _ .memd < 0; o _ 0;
TSTA c _ 0; z _ .%A = 0; s _ .%A < 0; o _ 0;
TSTB c _ 0; z _ .%B = 0; s _ .%B < 0; o _ 0;
6800
CROSS-Microcomputer cross assembler 38
TSX %X _ .sp + 1;
TXS sp _ .%X - 1;
WAI MEM[.sp]_.pc<0,8>; MEM[.sp-1]_.pc<8,8>; MEM[.sp-2]_.%X<0,8>;
MEM[.sp-3]_%X<8,8>; MEM[.sp-4]_.%A; MEM[.sp-5]_.%B;
MEM[.sp-6]_.sr; sp_.sp-7;
6800
CROSS-Microcomputer cross assembler 39
VII. Compiler directives
The following compiler directives and their presumed meanings are described
briefly here. This is only a refresher for those who have read the DEC
assembler description.
.ABS Compile non-relocatable (absolute) code.
.ADDR Generates a 16-bit address with the bytes in the proper order,
i.e., <low> <high>.
.ASCII ASCII string delimited by paired markers.
.ASCIZ ASCIZ string delimited by paired markers and supplied with
terminal null byte.
.ASECT Begin an absolute (non-relocatable) control section.
.BLKB Allocate space for a number of bytes as specified by the
operand.
.BLKW Allocate space for a number of words as specified by the
operand.
.BYTE Each expression supplied will be stored in a single byte.
.CSECT Enter a Csect.
.DEPHA Dephase; leave .PHASE control area.
.DSABL See chapter 5.
.ENABL See chapter 5.
.END End of program.
.ENDC End of conditional; paired with .IF.
.ENDM End of macro definition or repeat; paired with .MACRO, .IRP,
.IRPC, .REPT.
.ENDR End of repetition; paired with .REPT; equivalent to .ENDM in
this context.
.EOT End-of-tape; assembler will wait for next tape to be loaded
Compiler directives
CROSS-Microcomputer cross assembler 40
(paper tape hackers only).
.EQUIV ?
.ERROR x;text Causes an error message to be issued. The optional expression
x is evaluated and output if present.
.FLT2 ?
.FLT4 ?
.GLOBL ?
.IF Enter a conditional.
.IFDF .IFDF <symbol> true if symbol is defined. See also .IFNDF.
.IFEQ .IFEQ <expression> true if expression evaluates to zero.
.IFF Begins body of conditional if enclosing condition was false.
.IFG .IFG <expression> true if expression greater than zero.
.IFGE .IFG <expression> true if expression greater than or equal to
zero.
.IFGT Same as .IFG
.IFL .IFL <expression> true if expression is negative.
.IFLE .IFLE <expression> true if expression is negative or zero.
.IFLT Same as .IFL.
.IFNDF .IFNDF <symbol> true if symbol is undefined.
.IFNE .IFNE <expression> true if expression is non-zero.
.IFNZ Same as .IFNE
.IFT Begins body of conditional if enclosing condition was true.
.IFTF Text from here to the next .IFT, .IFF or .IFTF or the end of
the conditional will be included independent of the value of
Compiler directives
CROSS-Microcomputer cross assembler 41
the condition of the enclosing conditional.
.IFZ Same as .IFE
.IIF condition, arg, stmnt
Immediate if; if condition is met, stmnt is emitted.
.IRP sym,<arglist> Indefinite repeat of body based upon number of parameters in
<arglist>.
.IRPC sym,<str>Indefinite repeat of body based upon number of characters in
<str>.
.LIMIT Reserves two words into which are put the lower and upper
boundaries of the code.
.LIST Enable listing.
.LOCAL ?
.MACRO name <arglist>
Begin a macro definition
.MCALL Call macros from the system library.
.MEXIT Leave macro expansion
.NARG sym The symbol is equated to the number of arguments to the macro
.NCHR sym,<str> The symbol is equated to the number of characters in <str>
.NLIST Turn off listing
.NTYPE sym,arg The symbol is equated to the addressing mode of the argument.
.PAGE Force a page break
.PDP10 Irrelevant
.PHASE Assemble code as if it were located according to the argument
of this directive.
Compiler directives
CROSS-Microcomputer cross assembler 42
.PRINT Print the text which follows on the terminal.
.PSECT
.RADIX Change the radix to the value specified to this directive.
.RAD50 Each argument is converted to a radix50 representation,
whatever that means for a microcomputer.
.REM
.REPT (.REPT <n>) Repeat the body of this directive the indicated
number of times.
.ROUND Perform arithmetic operations with rounding to integer result
(see also .TRUNC).
.SBTTL Specify subtitle text.
.TITLE Specify title text.
.TRUNC Perform arithmetic operations with truncation to integer result
(see also .ROUND)
.WORD Allocate space for each value specified. Each expression
evaluates to a word (16 bits).
Compiler directives
CROSS-Microcomputer cross assembler 43
VIII. Macro quick summary
? When specified with a formal, will cause a compiler-generated
symbol to be provided if an actual is not given in that
position.
' Internal concatenation character
\<expr> When used as an argument, evaluates <expr> before performing
the actual-formal match.
Macro summary
CROSS-Microcomputer cross assembler 44
IX. Assembler syntax quick summary
<...> Encloses any expression (the assembler's equivalent of
parentheses). Expressions are evaluated left-to-right without
operator heirarchy.
+ Addition or unary plus
- Subtraction or unary minus
* Multiplication
/ Division
& Logical and
! Logical or
; Begins comment field
' Indicates single ASCII character as a term in expressions.
^O Indicates octal number
^B Indicates binary number
= Symbol assignment
. Current location counter
$ Indicates hexadecimal number
% Indicates binary number (6502/6800 mode only)
^ If a postfix operator, divides the expression by 256.
Assembler summary
CROSS-Microcomputer cross assembler 45
Index
! 44
#, in cref 9
$<expr> 1, 44
%<expr> 1, 44
%nn, register 1
& 44
', concatenation 43, 44
* 44
*, in cref 9
+ 44
- 44
., location counter 44
.ABS 39
.ADDR 39
.ASCII 39
.ASCIZ 39
.ASECT 39
.BLKB 39
.BLKW 39
.BYTE 39
.CSECT 39
.DEPHAse 39
.DSABL 5, 11, 39
.ENABL 5, 11, 39
.END 39
.ENDC 39
.ENDM 39
.ENDR 39
.EOT 39
.EQUIV 40
.ERROR 40
.FLT2 40
.FLT4 40
Index
CROSS-Microcomputer cross assembler 46
.GLOBL 40
.IF 40
.IFDF 40
.IFEQ 40
.IFF 40
.IFG 40
.IFGE 40
.IFGT 40
.IFL 40
.IFLE 40
.IFLT 40
.IFNDF 40
.IFNE 40
.IFNZ 40
.IFT 40
.IFTF 40
.IFZ 41
.IIF 41
.IRP 41
.IRPC 41
.LIMIT 41
.LIST 4, 6, 7, 41
.LOCAL 41
.MACRO 41
.MCALL 41
.MEXIT 41
.NARG 41
.NCHR 41
.NLIST 5, 6, 7, 41
.NTYPE 41
.PAGE 41
.PDP10 41
.PHASE 41
.PRINT 41
.PSECT 42
.RAD50 42
.RADIX 42
.REM 42
.REPT 42
.ROUND 11, 42
.SBTTL 42
.TITLE 42
.TRUNC 11, 42
.WORD 42
Index
CROSS-Microcomputer cross assembler 47
/ 44
/CDR 5
/CRF 5, 8
/DS 5, 11
/EN 5, 11
/EQ 5
/GNS 5, 10
/I 5
/LI 4, 8
/M08 4
/M18 4
/M65 4
/M68 4
/M80 4
/M88 4
/MF8 4
/N 5, 8
/NL 5, 8
/NSQ 5
/OCT 5, 8
/P 5
/PTP 5
/SOL 5, 9
1802 4, 28
6502 4, 31
6800 4, 34
72, column 5
8008 4, 26
8080 4, 13
8085 4
;, comment delimiter 44
<...> 44
= 44
?, macro argument modifier 43
Index
CROSS-Microcomputer cross assembler 48
@, in command 3
@<expr> 1
ABS 11
.ABS 39
Absolute memory addressing 11
.ADDR 39
AMA 11
And, assembler operator 44
.ASCII 39
.ASCIZ 39
.ASECT 39
BEX, listing option 6
BIN, extension 3
BIN, listing option 6
Binary listing option 6
Binary radix 1
.BLKB 39
.BLKW 39
.BYTE 39
Byte, high 1
Card reader simulation 5
CCL file 3
/CDR 5
CND, listing option 7
COM, listing option 6
Command line 3
Comment delimiter 44
Comment listing option 6
Concatenation operator 43, 44
Conditional compilation: .IF 40
Conditional listing option 7
Contents, listing option 7
COSMAC 1802 4, 28
/CRF 5, 8
CRF.TMP file 8
Cross-reference 5
.CSECT 39
Current location counter 44
Decimal radix 1
.DEPHAse 39
Index
CROSS-Microcomputer cross assembler 49
/DS 5, 11
.DSABL 5, 11, 39
DSK, device 3
/EN 5, 11
.ENABL 5, 11, 39
.END 39
.ENDC 39
.ENDM 39
.ENDR 39
.EOT 39
/EQ 5
.EQUIV 40
ERF 11
.ERROR 40
Error flags, suppression 11
Error message suppression 5
Extension .BIN 3
Extension .CCL 3
Extension .LST 4
Extension .M08 4
Extension .M18 4
Extension .M65 4
Extension .M68 4
Extension .M80 4
Extension .M88 4
Extension .MF8 4
F8 4
Fairchild F8 4
Floating point truncation 11
.FLT2 40
.FLT4 40
FPT 11
Generate new source 5, 10
.GLOBL 40
/GNS 5, 10
Hex output 5
Hexidecimal radix 1
High byte 1
/I 5
Index
CROSS-Microcomputer cross assembler 50
.IF 40
.IFDF 40
.IFEQ 40
.IFF 40
.IFG 40
.IFGE 40
.IFGT 40
.IFL 40
.IFLE 40
.IFLT 40
.IFNDF 40
.IFNE 40
.IFNZ 40
.IFT 40
.IFTF 40
.IFZ 41
.IIF 41
Image mode output 5
Intel 8008 4, 26
Intel 8080 4, 13
Intel 8085 4
.IRP 41
.IRPC 41
LC 11
LD, listing option 7
/LI 4, 8
.LIMIT 41
Line numbers 5
.LIST 4, 6, 7, 41
Listing option BEX 6
Listing option BIN 6
Listing option CND 7
Listing option COM 6
Listing option LD 7
Listing option LOC 6
Listing option MB 6
Listing option MC 6
Listing option MD 6
Listing option ME 6
Listing option SEQ 6
Listing option SRC 6
Listing option SYM 7
Listing option TOC 7
Index
CROSS-Microcomputer cross assembler 51
Listing option TTM 7
LOC, listing option 6
.LOCAL 41
Location counter 44
Lower case 11
LPT, device 3
LSB 11
LST, extension 4
/M08 4
M08, extension 4
/M18 4
M18, extension 4
/M65 4
M65, extension 4
/M68 4
M68, extension 4
/M80 4
M80, extension 4
M85 11
/M88 4
M88, extension 4
.MACRO 41
Macro call listing option 6
Macro definition 41
Macro, concatenation 43, 44
MB, listing option 6
MC, listing option 6
.MCALL 41
MD, listing option 6
ME, listing option 6
Memory addressing, absolute 11
.MEXIT 41
MF8 4
MF8, extension 4
MOS 6502 4, 31
Motorola 6800 4, 34
/N 5, 8
.NARG 41
.NCHR 41
New source, generation 5, 10
/NL 5, 8
.NLIST 5, 6, 7, 41
Index
CROSS-Microcomputer cross assembler 52
/NPP 11
/NSQ 5
.NTYPE 41
/OCT 5, 8
Octal radix 1, 5
Or, assembler operator 44
Output format 5
/P 5
Packed binary output 5
.PAGE 41
.PDP10 41
.PHASE 41
.PRINT 41
.PSECT 42
/PTP 5
PTP, device 3
PTR, device 3
.RAD50 42
.RADIX 42
Radix 16 1
Radix 2 1
Radix 8 1, 5
Radix, 10 1
Radix, binary 1
Radix, decimal 1
Radix, default 1
Radix, hexidecimal 1
Radix, octal 1
RCA 1802 4, 28
REG 11
Register %nn 1
.REM 42
.REPT 42
RIM, opcode 11
.ROUND 11, 42
.SBTTL 42
SEQ, listing option 6
SIM, opcode 11
/SOL 5, 9
Source listing option 6
Index
CROSS-Microcomputer cross assembler 53
Source, new, generation 5, 10
SRC, listing option 6
Suppression of error flags 11
Switch CDR 5
Switch CRF 5, 8
Switch DS 5, 11
Switch EN 5, 11
Switch EQ 5
Switch GNS 5, 10
Switch I 5
Switch LI 4, 8
Switch M08 4
Switch M18 4
Switch M65 4
Switch M68 4
Switch M80 4
Switch M88 4
Switch N 5, 8
Switch NL 5, 8
Switch NPP 11
Switch NSQ 5
Switch OCT 5, 8
Switch P 5
Switch PTP 5
Switch SOL 5, 9
SWITCH.INI 12
SYM, listing option 7
Symbol table listing option 7
Table of contents, listing option 7
Teletype format listing option 7
TIM 11
.TITLE 42
TOC, listing option 7
.TRUNC 11, 42
Truncation 11
TTM, listing option 7
TTY, device 3
.WORD 42
Z80 4, 11, 17
Z80 transliteration 19
Zilog Z80 4, 17
Index
CROSS-Microcomputer cross assembler 54
\, macro argument modifier 43
^, <expr>^ 1, 44
^B<expr> 1, 44
^O<expr> 1, 44
Index