Frankenstein Cross Assemblers, Base source, Part 1 of 3
Mark Zenier
markz at ssc.UUCP
Tue Dec 4 18:46:53 AEST 1990
Here is a hobby grade cross assembler for Unix and Dos for
a number of microprocessors. The various flavors of assember
are determined by which Yacc input file is used.
13 sets of "Flavor" files will follow
1805, 2650, 6301, 6502, 6805, 6809, 6811, tms7000, 8048, 8051,
8096, z8 and z80
No macros, relocatable linkers, fancy print controls or
structured control statments. But its a start.
Mark Zenier
markz at ssc.uucp
---- Cut Here and feed the following to sh ----
#!/bin/sh
# This is Frankasm/Base, a shell archive (shar 3.43)
# made 12/04/1990 06:57 UTC by markz at ssc.uucp
# Source directory /usr/mark/frank.shar
#
# existing files will NOT be overwritten unless -c is specified
# This format requires very little intelligence at unshar time.
# "if test", "echo", "true", and "sed" may be needed.
#
# This shar contains:
# length mode name
# ------ ---------- ------------------------------------------
# 2536 -r--r----- Makefile
# 780 -r--r--r-- ascii.chd
# 34184 -r--r--r-- base.doc
# 30 -r--r--r-- cleanup.bat
# 4440 -r--r--r-- devnote
# 3545 -r--r--r-- filelist
# 1354 -r--r----- fraebin.h
# 571 -r--r----- fraeuni.h
# 1446 -r--r----- fragcon.h
# 14325 -r--r----- fraosub.c
# 21010 -r--r----- frapsub.c
# 7915 -r--r----- frasmain.c
# 3145 -r--r----- frasmdat.h
# 28586 -r--r----- fryylex.c
# 2542 -r--r----- getopt.h
# 2145 -r--r--r-- makefile.dos
# 58 -r--r--r-- makeone.bat
#
# ============= Makefile ==============
if test -f 'Makefile' -a X"$1" != X"-c"; then
echo 'x - skipping Makefile (File already exists)'
else
echo 'x - extracting Makefile (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
X# HEADER: ;
X# TITLE: Frankenstein Cross Assemblers;
X# VERSION: 2.0;
X# SYSTEM: Unix (microport system V/AT);
X# FILENAME: Makefile ;
X# DESCRIPTION: "Reconfigurable Cross-assembler producing Intel (TM)
X# Hex format object records. ";
X# KEYWORDS: cross-assemblers, 1805, 2650, 6301, 6502, 6805, 6809,
X# 6811, tms7000, 8048, 8051, 8096, z8, z80;
X# WARNINGS: "This software is in the public domain.
X# Any prior copyright claims are relinquished.
X#
X# This software is distributed with no warranty whatever.
X# The author takes no responsibility for the consequences
X# of its use.
X#
X# Yacc (or Bison) required to compile." ;
X# AUTHORS: Mark Zenier;
X# COMPILERS: Microport System V/AT;
X#
X# usage
X# make somename TARGET=somename
X# make newmachine clean out machine dependent *.o
X# make clean clean out for release disk
X#
X# Conditional Compilation Flags
X#
X# DOSTMP use the current directory for temporary intermediate
X# file
X# NOGETOPT use the getopt.h file
X# USEINDEX redefine the strchr() library function to use
X# the older equivalent name index()
X# NOSTRING use internal definitions if the <string.h> include
X# file does not exist
X#
X
X
XTARGET = frasm
XPRINTSPOOL = lpr
X
X# LEXERDEBUG = -DDEBUG=1
XLEXERDEBUG =
X
X# for microport and xenix
XCFLAGS = -Ml -g
XYACCLEXLIB = -ly
XMAINNEEDS =
XMAINDEPENDS =
X
X# for dos cross compiled on xenix
X# CFLAGS = -dos -Ml
X# YACCLEXLIB =
X# MAINNEEDS = -DNOGETOPT -DDOSTMP
X# MAINDEPENDS = getopt.h
X
X# for v7
X# CFLAGS = -DUSEINDEX -DNOSTRING
X# YACCLEXLIB = -ly
X# MAINNEEDS = -DNOGETOPT
X# MAINDEPENDS = getopt.h
X
Xclean :
X rm -f *.o fraytok.h
X rm -f y.tab.[ch]
X rm -f as*.c as*.h as*.o
X
Xnewmachine :
X rm -f fraytok.h
X rm -f fryylex.o
X rm -f $(TARGET).c $(TARGET).h $(TARGET).o
X
X$(TARGET) : frasmain.o frapsub.o fryylex.o $(TARGET).o fraosub.o
X cc $(CFLAGS) -o $(TARGET) frasmain.o frapsub.o \
X fraosub.o fryylex.o $(TARGET).o $(YACCLEXLIB)
X rm -f fraytok.h
X
Xfrasmain.o : frasmain.c frasmdat.h $(MAINDEPENDS)
X cc $(CFLAGS) $(MAINNEEDS) -c frasmain.c
X
X$(TARGET).c $(TARGET).h : $(TARGET).y
X yacc -d $(TARGET).y
X mv y.tab.c $(TARGET).c
X mv y.tab.h $(TARGET).h
X rm -f fraytok.h
X
Xfraytok.h : $(TARGET).h
X cp $(TARGET).h fraytok.h
X
X$(TARGET).o : $(TARGET).c frasmdat.h fragcon.h
X cc $(CFLAGS) -c $(TARGET).c
X
Xfrapsub.o : frapsub.c fragcon.h frasmdat.h fraeuni.h fraebin.h
X cc $(CFLAGS) -c frapsub.c
X
Xfraosub.o : fraosub.c frasmdat.h fragcon.h fraeuni.h fraebin.h
X cc $(CFLAGS) -c fraosub.c
X
Xfryylex.o : fryylex.c frasmdat.h fraytok.h
X cc $(CFLAGS) $(LEXERDEBUG) -c fryylex.c
X
SHAR_EOF
true || echo 'restore of Makefile failed'
fi
# ============= ascii.chd ==============
if test -f 'ascii.chd' -a X"$1" != X"-c"; then
echo 'x - skipping ascii.chd (File already exists)'
else
echo 'x - extracting ascii.chd (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'ascii.chd' &&
Xascii charset
X chardef " !\"#$%&\'",$20,$21,$22,$23,$24,$25,$26,$27
X chardef "()*+,-./",$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
X chardef "01234567",$30,$31,$32,$33,$34,$35,$36,$37
X chardef "89:;<=>?",$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
X chardef "@ABCDEFG",$40,$41,$42,$43,$44,$45,$46,$47
X chardef "HIJKLMNO",$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
X chardef "PQRSTUVW",$50,$51,$52,$53,$54,$55,$56,$57
X chardef "XYZ[\\]^_",$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
X chardef "`abcdefg",$60,$61,$62,$63,$64,$65,$66,$67
X chardef "hijklmno",$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
X chardef "pqrstuvw",$70,$71,$72,$73,$74,$75,$76,$77
X chardef "xyz{|}~",$78,$79,$7a,$7b,$7c,$7d,$7e
X chardef '"', $22 ; not the same table entry as '\"'
X chardef "'", $27 ;
X chardef "\n\t\v\b\r\f\a", $0a,$09,$0b,$08,$0d,$0c,$07
X charuse ascii
SHAR_EOF
true || echo 'restore of ascii.chd failed'
fi
# ============= base.doc ==============
if test -f 'base.doc' -a X"$1" != X"-c"; then
echo 'x - skipping base.doc (File already exists)'
else
echo 'x - extracting base.doc (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'base.doc' &&
X.TL
XFrankenstein Cross Assemblers Users Manual
X.AU "Mark Zenier"
X.AF
X.MT 4
X.H 1 "Disclaimer"
XThis software is in the public domain. Any prior copyright claims
Xare relinquished.
X.P
XThis software is distributed with no warranty whatever. The author
Xtakes no responsibility for the consequences of its use.
X.H 1 "Introduction"
X.H 2 "This Manual"
XThis manual covers the basic features for the Frankenstein cross assemblers.
XThe specific features for a given target architecture will be covered
Xin the appendix for that cross-assembler.
X.H 2 "Notation"
XItems enclosed in [] are optional. The "[]" are not entered in the
Xsource statement or command line, and are just a notation.
X.H 1 "Invocation"
Xname [-o binary] [-l listing] [-s symbols] [-d] input
X.P
XThe optional operands on the command line can be in any order.
X.H 2 "Input File"
XThe input file must appear after the optional entries on the command line.
XOnly one input file is used with this version.
XIf the file name is a single minus sign, the standard input is used.
X.H 2 "Listing File"
X.DS I N
X-l filename
X.DE
X.P
XAn annotated listing will only be produced if an optional list file is
Xprovided, otherwise the error messages and summary will be output to the
Xconsole.
XThere is no required suffix or default extension for the file name.
X.H 2 "Hex Output File"
X.DS I N
X-h filename or
X-o filename
X.DE
X.P
XThe binary output will only be produced if the optional file is provided.
XSee the section in the description of the output files for the format
Xof the data records.
XIf any errors occur, the hex output file is either not created
Xor is deleted depending on whether the error occurred in the
Xinput or output phases of processing.
XThere is no required suffix or default extension for the file name.
X.H 2 "Symbol Listing File"
X.DS I N
X-s filename
X.DE
X.P
XThe symbol table is dumped with one entry per line for whatever use is
Xdesired, normally with the sort utility to produce symbol listings in
Xa different order that the one provided.
XSee the section on the output files for a description of the format.
XThere is no required suffix or default extension for the file name.
X.H 2 "Debug"
X.SP
XThe -d debug option
X.DL
X.LI
XSaves the intermediate file in the /usr/tmp directory
X.LI
XCalls the abort() system call to produce a "core" file
X.LE
X.H 2 "Processor Selection"
X.DS I N
Xassembler name or
X-p string
X.DE
X.P
XSome of these assemblers support related families of processors, and
Xcan be limited to specific subsets of the total instructions by sending
Xthe processor number or name as an operand. The operand is scanned for
Xunique substrings which identify the target processor.
XThe operand can be either the name of the executable, or the operand
Xof the -p option, with the operand of the -p having precedence.
XThe name of the executable may not available in some operating systems.
XThe CPU pseudo-operation has precedence over both the name scan and
Xthe -p operand [see the appendix for the specific processor].
X.DS I N
XExample
X.SP
Xa6800 for the mc6800 instruction set
Xa6801 for the 6801/6803 instruction set
Xa6811 for the mc68hc11 instruction set
X.DE
X.H 1 "Source Input File"
XThe source input is a text file a with one statement per line.
XAdjacent symbols must be separated by spaces or tabs or special characters
Xsuch as operators or parenthesis.
X.H 2 "Input Lines"
X.SP
XSource lines consist of up to four parts
X.DS I N
X[Label] [Opcode [Operands] ] [; comments]
X.DE
X.VL +10
X.LI Labels
XA symbol that starts in the first column of the line is a
Xlabel.
XA label is used as the defining instance of a symbol, the place
Xwhere it is given a value, normally the address of the location
Xin memory where the data generated by the rest of the statement is placed.
XLabels are optional for target machine instructions statements.
XLabel are required on some pseudo-operations, and are not allowed on others.
X.LI Opcode
XThe first symbol in a line that doesn't start in
Xcolumn 1 is treated as an opcode, all symbols after that are
Xtreated as symbol references.
XOpcodes are treated as a separate set of symbols, so a label
Xcan have the same character string as an opcode.
XOpcodes are converted to uppercase for comparison, so case is not
Xsignificant.
X.LI Operands
XThe rest of the line is the operands associated with the opcode.
XThese are expressions, symbol references, or other syntactic elements
Xdetermined by the specific operation.
X.LI Comments
XComments start with a ';', anything on a line after a
Xsemicolon is ignored.
XLines that consist of only a comment are treated as empty lines.
X.LE
X.DS I N
XExample
X
X; just a little example
X org $700
Xlabel equ * ; set label to current location
X adda #$21 ; a 6800 example
X end
X.DE
X.H 3 "Limitations"
XInput lines should be shorter than 256 characters.
XAn error message is issued if lines are longer.
X.H 3 "Empty"
XEmpty lines are ignored as input, but are copied to the listing
Xfile.
X.H 2 "Syntactic Elements"
X.H 3 "Symbols"
XSymbols are strings of characters. The first of which is one of
Xthe following.
X.DS I N
XA-Z a-z ! & ^ _ ~
X.DE
X.P
XThe rest of the string consists of zero or more of the
Xfollowing.
X.DS I N
X0-9 A-Z a-z ! & ^ _ ~
X.DE
X.P
XThere is no length limit to symbols, all characters are
Xsignificant. Case is significant.
X.H 3 "Reserved Variables Names"
XMachine specific names, and operator names that can appear in
Xsymbolic expressions share the same symbol table with labels,
Xand cannot be used as labels. The list will vary from machine
Xto machine. Case is significant for these symbols.
X.DS I F
XExamples
X.SP
Xand defined eq ge gt high le low lt mod ne
Xnot or shl shr xor AND DEFINED EQ GE GT HIGH
XLE LOW LT MOD NE NOT OR SHL SHR XOR
X.DE
X.H 3 "Numeric Constants"
Xnumeric constants can be specified in decimal, hexadecimal,
Xoctal, and binary. Constants are maintained as long
Xvariables, but the instruction generation will cause an error
Xif the value is too big to fit in its destination field.
X.H 4 "Decimal Constants"
X.DL
X.LI
Xone or more decimal characters (0-9) followed by an
Xoptional "d" or "D" base designator.
X.LE
X.H 4 "Hexadecimal Constants"
X
X.P 1
XEither
X.DL
X.LI
Xone or more hexadecimal characters
X(0-9 a-f A-F) preceded by a "$" base designator.
X.LI
Xa decimal character (0-9) followed by zero or
Xmore hexadecimal characters (0-9 a-f A-F)
Xfollowed by a "h" or "H" base designator
X.LE
X.H 4 "Octal Constants"
X
X.P 1
XEither
X.DL
X.LI
Xone or more octal characters (0-7) preceded
Xby a "@" base designator
X.LI
Xone or more octal characters (0-7) followed
Xby a "o" or "O" or "q" or "Q" base designator.
XNote: this is the letter "O" not the number "0".
X.LE
X.H 4 "Binary Constants"
X
X.P 1
XEither
X.DL
X.LI
Xone or more binary characters (0 or 1) preceded
Xby a "%" base designator.
X.LI
Xone or more binary characters (0 or 1) followed
Xby a "b" or "B" base designator.
X.LE
X.H 4 "Examples"
X.VL +15 +5 1
X.LI 123
Xdecimal number
X.LI 123d
Xdecimal number
X.LI $faf
Xhexadecimal number
X.LI 0fafh
Xhexadecimal number, note leading zero used to differentiate this from symbol
X"fafh"
X.LI @1234
Xoctal number
X.LI 1234Q
Xoctal number
X.LI %010101
Xbinary number
X.LI 010101b
Xbinary number
X.LE
X.H 3 "String Constants"
XString constants are specified using either the quotation mark
X" or the apostrophe '. A string starting with one of these
Xcharacter is terminated by only that character and can contain
Xthe other string delimiter as data.
XA string with no characters is valid.
X.P
XThe values generated in the binary output can be different from
Xthe host computers character set (the default).
XSee the section on Defining Target Character Sets.
X.P
XWithin the character string, the backslash is an escape character.
X.VL +20 +5 1
X.LI " \ec Character escapes"
X.LI "\ "
XThe only characters defined for
Xthe default (no) translation are \e\e \e" \e\'.
XAny other translation, (the control characters '\en', '\er', etc.) require
Xa translation table be defined.
XValues can be set up for any character following the backslash escape
Xexcept x and 0 through 7.
X.SP
X.LI " \e777 Octal character escapes"
X.LI "\ "
XAn one, two or three character octal constant. The one byte value
Xis the binary representation of the number.
XThe value is masked off for a maximum value of 255.
X.SP
X.LI " \exFF Hexadecimal character escapes"
X.LI "\ "
XA one or two character hexadecimal constant, preceded by a lower
Xcase x. Upper and lower case characters A through F are valid.
XThe one byte value is the binary representation of the number.
X.SP
X.LE
X.DS I N
XExamples
X.SP
X "this isn't illegal"
X 'this is the other delimiter'
X '"'
X "\exfe\e0\en"
X.DE
X.H 2 "Expressions"
X.SP
XExpressions consist of
X.DL "" 1
X.LI
XSymbolic References
X.LI
XLocation Counter References
X.LI
XNumeric Constants
X.LI
XString Constants
X.LI
XOperators
X.LE
X.P
XExpressions are used as operands in statements where any numeric value or
Xmemory address is desired.
X.H 3 "Symbols"
XA symbol reference is the name of an item in the symbol table, which
Xhas a numeric value associated with it.
XThis value is either the memory address of the statement which has this
Xsymbol as a label, or the value of the expression defined in a SET or EQU
Xstatement which has this symbol as a label.
X.H 4 "Forward References"
XDuring the input phase of processing, a symbol value may not be known if the
Xdefinition of the symbol has not yet occurred.
XSome pseudo-operations require that their operand expressions have a value
Xat the input phase, so no references to as yet undefined symbols can occur
Xin this case.
XIn the output phase of processing, it will result in an error if any of the
Xsymbols used in expressions do not have values defined.
X.H 4 "Reserved Symbols for Operators"
XUsing reserved symbols as labels will result in a syntax error as they
Xare predefined as a different type of syntactic element than the rest
Xof the symbol table.
XOperators for which there is no special character representation, and items
Xlike machine register names and condition code types will be represented by
Xreserved symbols.
XThe set of the reserved symbols will vary for
Xeach target machine, and will be documented in the appendix for each target.
X.H 3 "Location Counter"
XThe special name '*' used in an expression represents the location of the
Xfirst byte of the binary output for the current statement.
XSome assemblers use some other character for source code compatiblity.
X.H 3 "Constants"
XThe form of numeric constants is defined in the previous section.
X.H 3 "Strings"
XString constants, as defined in the previous section, are valid in
Xexpressions.
XHowever, at most the first two characters are used.
XIf the string is the null string, i.e. "", the numeric value is zero.
XIf the string is one character long, the value is the value of
Xthe current character set translation, or the host computers character
Xset if no translation is active.
XIf the string is two or more characters long, the value is
X256*(the first character) + (the second character).
X.H 3 "Operators"
X.H 4 "Description"
X.VL +20 +5 1
X.LI " '+' expression "
X.LI "\ "
XUnary plus. No real effect.
X.SP
X.LI " '-' expression"
X.LI "\ "
XUnary minus, the result is the negative of the expression.
X.SP
X.LI " NOT expression"
X.LI "\ "
XLogical negation. The result is 0 if the expression is nonzero, 1 if the
Xexpression is 0.
X.SP
X.LI " HIGH expression"
X.LI "\ "
XResult is the High half of a two byte number, equivalent to
X(expression SHR 8) AND $FF.
X.SP
X.LI " LOW expression"
X.LI "\ "
XResult is the Low order byte of the expression, equivalent to
X(expression AND $FF)
X.SP
X.LI " expression '*' expression"
X.LI " expression '/' expression"
X.LI " expression '+' expression"
X.LI " expression '-' expression"
X.LI "\ "
XStandard arithmetic operations.
X.SP
X.LI " expression MOD expression"
X.LI "\ "
XResult is the remainder of the division of the value of the left expression
Xby the right.
X.SP
X.LI " expression SHL expression"
X.LI " expression SHR expression"
X.LI "\ "
XShift the value of the left expression left or right by the number of bit
Xpositions given by the right operation.
X.SP
X.LI " expression GT expression"
X.LI " expression GE expression"
X.LI " expression LT expression"
X.LI " expression LE expression"
X.LI " expression NE expression"
X.LI " expression EQ expression"
X.LI " expression '>' expression"
X.LI " expression '>=' expression"
X.LI " expression '<' expression"
X.LI " expression '<=' expression"
X.LI " expression '=' expression"
X.LI " expression '<>' expression"
X.LI "\ "
XRelational expressions.
XIf the relation is true, the value is 1.
XIf false, the value is 0.
XThe operators are nonassociative, the expression " 1 < 3 < 5 " is not legal.
X.SP
X.LI " expression AND expression"
X.LI " expression OR expression"
X.LI " expression XOR expression"
X.LI "\ "
XBitwise logical operations.
X.SP
X.LI " DEFINED symbol"
X.LI "\ "
XIf the symbol (not an expression) is defined, i.e. used as a label, before
Xthis point in the input the value is 1.
XIf not, the value is 0.
X.SP
X.LI " '(' expression ')'"
X.LI "\ "
XParenthesis are available to override the operator precedence.
X.LE
X.H 4 "Precedence"
XThe precedence of the operators from lowest to highest.
X.AL 1 "" 1
X.LI
X HIGH LOW
X.LI
X OR XOR
X.LI
X AND
X.LI
X NOT
X.LI
X GT GE LE LT NE EQ '>' '>=' '<' '<=' '=' '<>'
X.LI
X '+' '-'
X.LI
X '*' '/' MOD SHL SHR
X.LI
X unary '+' '-'
X.LI
X ( expression )
X.LE
X.H 1 "Statements"
XThe names for the operations and pseudo-operations for each assembler are
Xspecified in the adaptation files,
Xand can be different from the examples given here.
X.H 2 "Label Only Line"
XA line with only a label starting in column 1 will define that symbol
Xwith the current value of the location counter.
X.H 2 "End"
X.DS I N
X[Label] END
X.DE
X.P
XThe End statement terminates the processing of the current file.
XFor an include file, the file is closed and input resumes in the
Xfile that contained the include statement.
XFor the main file, processing shifts to the following passes of the
Xassembly.
XThe end statement is optional, as the end of file condition is treated in the
Xsame fashion.
XIf the optional label is present, The symbol specified is used as the
Xexecution start address that is output in the binary file.
XThe symbol must be used as a label somewhere else in the file.
XWhen more than one start address is specified, the last one in the file is
Xused.
X.H 2 "File Inclusion"
X.DS I N
XINCLUDE "filename"
XINCL "filename"
X.DE
X.P
XThe include statement shifts input from the current file to the file
Xspecified.
XInput resumes from the file containing the include statement when
Xthe end of file or the End statement is reached in the included file.
XIncludes can be nested up to the limits of the include file stack,
Xcurrently a limit of 20 deep, or the limits of the operating system,
Xwhichever comes first.
XIncludes can be recursive, i.e., a file can include itself.
XIf a file cannot be opened, either do to an bad filename or a lack of
Xsystem resources, an error is issued.
X.H 2 "Conditional Assembly"
X.H 3 "If"
X.DS I N
XIF expression
X.DE
X.P
XThe IF statement allows selective assembly.
XIf the expression evaluates to a nonzero value, all statements between the
XIF and the matching ELSE or ENDI are assembled.
XIf the expression evaluates to zero, or the expression in noncomputable due
Xto a forward reference, all statements between the IF and the matching
XELSE or ENDI are ignored.
X.P
XNote: it is safer to use the DEFINED operator when testing for the existence
Xof a symbol than to rely on the noncomputability of an expression.
X.P
XIF statements can be nested to a depth determined by a configuration
Xconstant, currently 32.
XNo label is allowed on an IF statement.
X.H 3 "Else"
X.DS I N
XELSE
X.DE
X.P
XThe ELSE statement causes all statements between it and its corresponding
XENDI statement to be treated the opposite of the statements between the
Xmatching IF and this statement.
XWhen the expression on the matching IF is nonzero, the statements between
Xthe ELSE and ENDI are ignored.
XIf the IF expression failed, the statements between the ELSE and the ENDI
Xare assembled.
XLabels are not allowed on ELSE statements.
X.H 3 "End If"
X.DS I N
XENDI
X.DE
X.P
XThe ENDI statement terminates processing of its matching IF statement.
XLabels are not allowed on ENDI statements.
X.H 2 "Symbolic Constants"
XSymbols can be assigned numeric values with the SET and EQU statements.
XThe expressions cannot have forward references to as yet undefined symbols.
X.H 3 "Equate"
X.DS I N
XLabel EQU expression
X.DE
X.P
XThe EQU statement takes the value of the expression and creates a symbol
Xwith that value.
XSymbols defined in EQU statements cannot already exist, or be redefined.
X.H 3 "Set"
X.DS I N
XLabel SET expr
X.DE
X.P
XThe SET statement sets the symbol specified in the label field with the
Xnumeric value of the expression.
XThe SET statement can change the value of a symbol, but only if the
Xsymbol is originally defined in a previous SET statement.
X.DS I N
XExample
X.SP
Xcounter set 1
Xcounter set counter+1
Xcounter set counter+1
X.DE
X.H 2 "Location Counter Value Setting"
XThe address of the generated binary data can be changed with the ORG and
Xreserve statements.
X.H 3 "Org"
X.DS I N
X[Label] ORG expression
X.DE
X.P
XThe location counter is set to the numeric value of expression.
XIt is an error if the expression contains references to symbols not
Xyet defined.
XThe optional label is set to the new value of the location counter.
X.H 3 "Reserve Memory"
X.DS I N
X[Label] RMB expression
X[Label] RESERVE expression
X.DE
X.P
XThe reserve memory statement moves the location counter forward by
Xthe number of bytes specified in the expression.
XThe label is set to the first location of this area.
X.H 2 "Data Definitions"
X.H 3 "Define Byte Data"
X.DS I N
X[Label] BYTE expression [, expression] ...
X[Label] FCB expression [, expression] ...
X[Label] DB expression [, expression] ...
X.DE
X.P
XThe define byte statement generates one character of data for each
Xexpression in the expression list.
XThere can be up to 128 expressions on a line, more than the line length will
Xallow.
XThe optional label is set to the first location of this area.
X.H 3 "Define Word Data"
X.DS I N
X[Label] WORD expression [, expression] ...
X[Label] FDB expression [, expression] ...
X[Label] DW expression [, expression] ...
X.DE
X.P
XThe define word statement generates a two byte integer for each expression
Xin the expression list.
XThere can be up to 128 expressions on a line, more than the line length will
Xallow.
XThe byte order of the data is determined by the adaptation files for
Xthe target processor.
XThe optional label is set to the first location of this area.
X.H 3 "Define String Data"
X.DS I N
X[Label] STRING string [, string] ...
X[Label] FCC string [, string] ...
X.DE
X.P
XThe define string statement generates data encoded in the current character
Xset translation,
Xone byte per character, excluding the delimiter characters.
XThe optional label is set to the first location of this area.
X.H 2 "Defining Target Character Sets"
XThe values generated for String Constants in both the Define String
XData and in expressions can be specified on a character by character
Xbasis. This is to support cross assembly where the target system
Xhas a different character set from the host computer.
X.H 3 "Define Character Set Translation"
X.DS I N
X.DE
XLabel CHARSET
X.P
XThe define character set translation statement defines a name and creates
Xan internal table for a character set.
XThe label symbol is treated like the label on an EQU statement.
XThe value is from an internal counter and has little or no meaning
Xoutside of using it on a CHARUSE statement to specify which translation
Xto use. There can be up to 5 [configurable] character
Xtranslation sets.
XA CHARSET statement must precede any CHARDEF statements.
X.H 3 "Define Character Value"
X.DS I N
XCHARDEF string, expression [, expression ] ...
XCHD string, expression [, expression ] ...
X.DE
X.P
XThe define character value statement set the translation for one
Xor more characters in the table defined by the preceding CHARSET
Xstatement.
XThere can be more than one character in the string, but the
Xnumber of expression in the value list must match the number
Xof characters.
XOctal and Hexadecimal escape sequences cannot occur in the string.
X.P
XThere are two sets in each translation table.
XThe first is for the characters, the second for characters escaped with
Xthe backslash.
X.P
XNote: the characters '"' and '\e"' (and "'" and "\e'") each have an entry in
Xdifferent halves of the translation tables.
X.H 3 "Use Character Translation"
X.DS I N
XCHARUSE
XCHARUSE expression
X.DE
X.P
XThe use character translation statement changes the translation for the
Xfollowing statements.
XThe statement without an expression turns off the translation, so
Xthe host character set is used.
XThe statement with an expression (the name given on the CHARSET statement)
Xsets the translation to the set defined in the respective CHARSET.
X.DS I N
XExample
X.SP
Xascii charset
X chardef " !\e"#$%&\e'",$20,$21,$22,$23,$24,$25,$26,$27
X chardef "()*+,-./",$28,$29,$2a,$2b,$2c,$2d,$2e,$2f
X chardef "01234567",$30,$31,$32,$33,$34,$35,$36,$37
X chardef "89:;<=>?",$38,$39,$3a,$3b,$3c,$3d,$3e,$3f
X chardef "@ABCDEFG",$40,$41,$42,$43,$44,$45,$46,$47
X chardef "HIJKLMNO",$48,$49,$4a,$4b,$4c,$4d,$4e,$4f
X chardef "PQRSTUVW",$50,$51,$52,$53,$54,$55,$56,$57
X chardef "XYZ[\e\e]^_",$58,$59,$5a,$5b,$5c,$5d,$5e,$5f
X chardef "`abcdefg",$60,$61,$62,$63,$64,$65,$66,$67
X chardef "hijklmno",$68,$69,$6a,$6b,$6c,$6d,$6e,$6f
X chardef "pqrstuvw",$70,$71,$72,$73,$74,$75,$76,$77
X chardef "xyz{|}~",$78,$79,$7a,$7b,$7c,$7d,$7e
X chardef '"', $22 ; not the same table entry as '\e"'
X chardef "'", $27 ;
X chardef "\en\et\ev\eb\er\ef\ea", $0a,$09,$0b,$08,$0d,$0c,$07
X charuse ascii
X.DE
X.H 2 "Machine Instructions"
X.DS I N
X[Label] opcode operands?
X.DE
X.P
XMachine instructions generate the binary output by evaluating the expressions
Xfor the operands, and matching the opcode with the entry in the instruction
Xgeneration tables.
X.P
XIf the instruction has more than one format which is selected by the
Xvalue of the operands, the selection criteria must able to be determined at
Xthe input phase of processing.
XFor example, in the mc6800 architecture direct address mode, any memory
Xvariables that are have an address between 0 and 255 must be defined before
Xany reference to these symbols.
X.P
XThe optional label is set to the first location of the generated instruction.
X.H 1 "Output"
X.H 2 "Program Generated Messages and Errors"
X.H 3 "Messages"
X.VL 10 5 1
X.LI "`` ERROR SUMMARY - ERRORS DETECTED {count}''"
X.LI "`` - WARNINGS {count}''"
X.LI "\ "
Xoutput at the end of the listing and on the console.
X.LE
X.H 3 "System Errors"
X.VL 10 5 1
X.LI "``cannot open hex output {filename}''"
X.LI "\ "
Xfile cannot be opened for output. The assembly continues
Xas if the -[oh] option was not specified.
X.SP
X.LI "``cannot open input file {filename}''"
X.LI "\ "
Xfile cannot be opened for reading. Fatal error.
X.SP
X.LI "``cannot open list file {filename}''"
X.LI "\ "
Xfile cannot be opened for output. The assembly continues
Xas if the -l option was not specified.
X.SP
X.LI "``cannot open symbol file {filename}''"
X.LI "\ "
Xfile cannot be opened for output. The assembly continues
Xas if the -s option was not specified.
X.SP
X.LI "``cannot open temp file {filename}''"
X.LI "\ "
Xfile cannot be opened for input or output. Fatal error.
X.SP
X.LI "``no input file''"
X.LI "\ "
Xno input operand specified. Fatal error.
X.SP
X.LI "``no match on CPU type {string}, default used''"
X.LI "\ "
Xoperand for a -p option can't be matched.
X.SP
X.LI "``cannot allocate string storage''"
X.LI "\ "
XRequest to operating system for more memory failed.
XFatal error. The string storage pool is where the
Xcharacter representation of symbols and names for
Xinclude files are stored.
X.SP
X.LI "``cannot allocate symbol space''"
X.LI "\ "
XRequest to operating system for more memory failed.
XFatal error. The symbol table is full. The symbol
Xspace is the set of arrays where the symbol values
Xand other numeric information is stored.
X.SP
X.LI "``cannot redefine reserved symbol''"
X.LI "\ "
XError in defining reserved symbols. Two calls to
X"reservedsym()" with the same character string value
Xexist in the setup. Fatal error. Should not occur
Xin a production executable.
X.SP
X.LI "``excessive number of subexpressions''"
X.LI "\ "
XThe first pass ran out of element storage for the expression
Xparse tree. The expression is too complex. Internal error
Xwhich should never occur. Fatal error.
X.SP
X.LI "``unable to allocate symbol index''"
X.LI "\ "
XRequest to operating system for more memory failed.
XFatal error. The symbol table is full. The symbol index
Xis used in the output pass to direct symbol references to
Xthe symbol table entry.
X.LE
X.H 3 "Error"
X.VL 10 5 1
X.LI "``ELSE with no matching if''"
X.LI "``ENDI with no matching if''"
X.LI "\ "
Xmismatched if/else/endi results in an else/endi left over
X.SP
X.LI "``IF stack overflow''"
X.LI "\ "
Xmore than IFSTKDEPTH (32) nested if statements
X.SP
X.LI "``Overlength/Unterminated Line''"
X.LI "\ "
Xline longer than input buffer, or not terminated with newline
Xcharacter.
X.SP
X.LI "``active IF at end of file''"
X.LI "\ "
Xmismatched if/else/endi results in an unclosed if
X.SP
X.LI "``cannot change symbol value with EQU''"
X.LI "\ "
Xsymbol is already defined.
X.SP
X.LI "``cannot change symbol value with SET''"
X.LI "\ "
Xsymbol is already defined, but not with a Set statement.
X.SP
X.LI "``cannot create character translation table''"
X.LI "\ "
Xthe internal table for a character translation set
Xcannot be allocated due to lack of space, or
Xmore translation sets than the assembler is
Xconfigured for.
X.SP
X.LI "``cannot open include file''"
X.LI "\ "
XThe include file cannot be opened for reading, or not enough
Xsystem resources are available to open the file.
X.SP
X.LI "``character already defined 'char' ''"
X.LI "\ "
Xthe character is already present in a previous CHARDEF
Xstatement for this translation set.
X.SP
X.LI "``expression exceeds available field width''"
X.LI "\ "
XThe value of an expression is too large to fit into
Xthe field of the instruction. Relative branch target
Xis too far away.
X.SP
X.LI "``expression fails validity test''"
X.LI "\ "
XAn explicit test programmed in the generation string for the instruction
Xfailed.
XThese conditions are documented in the appendix for the specific instruction
Xset.
X.SP
X.LI "``expression stack overflow''"
X.LI "\ "
XToo many level of parenthesis or complex expression
Xwith operator precedence that results in the expression
Xevaluation stack overflowing.
X.SP
X.LI "``include file nesting limit exceeded''"
X.LI "\ "
Xinclude files are nested to more than FILESTKDPTH (20)
Xlevels deep. "cannot open include file" usually occurs first.
X.SP
X.LI "``invalid char in instruction generation''"
X.LI "\ "
XInternal error, instruction generation string is not
Xdefined properly. Should not occur in a production executable.
X.SP
X.LI "``invalid character constant 'char' ''"
X.LI "\ "
XA character specification in a string constant isn't
Xproperly formed.
X.SP
X.LI "``invalid character to define 'char' ''"
X.LI "\ "
Xa constant in the string in a CHARDEF statement is of a form
X(octal, hex, or improperly formed) that does not have a
Xtranslation table entry.
X.SP
X.LI "``invalid opcode''"
X.LI "\ "
XNo such string occurs in the opcode symbol table. Opcode
Xstrings are converted to uppercase before comparison, and
Xtherefore are case insensitive.
X.SP
X.LI "``invalid operands''"
X.LI "``invalid operands/illegal instruction for cpu''"
X.LI "\ "
Xstatement has a valid opcode, with the correct syntax, but
Xno code generation can be found in the table for these operands
X.SP
X.LI "``invalid syntax for instruction''"
X.LI "\ "
Xopcode is valid, but not for this syntax form
X.SP
X.LI "``more characters than expressions''"
X.LI "``more expressions than characters''"
X.LI "\ "
XA mismatch between the string constant and the number of expressions
Xin a CHARDEF statement.
X.SP
X.LI "``multiple definition of label''"
X.LI "\ "
Xlabel symbol is already defined.
X.SP
X.LI "``no CHARSET statement active''"
X.LI "\ "
Xa CHARDEF statement occurs before any CHARSET statement.
X.SP
X.LI "``noncomputable expression for EQU''"
X.LI "``noncomputable expression for ORG''"
X.LI "``noncomputable expression for SET''"
X.LI "``noncomputable result for RMB expression''"
X.LI "\ "
Xexpression contains reference to symbols that have not
Xyet been defined, and thus has no numeric value.
X.SP
X.LI "``nonexistent character translation table''"
X.LI "\ "
Xexpression in a CHARUSE statement does not
Xcorrespond to any CHARSET statements label.
X.SP
X.LI "``overflow in instruction generation''"
X.LI "``overflow in polish expression conversion''"
X.LI "\ "
XThe intermediate file line being built exceeds the length
Xof the buffer. The expression is too complex.
X.SP
X.LI "``syntax error at/before character ^{character}''"
X.LI "``syntax error at/before character {character}''"
X.LI "``syntax error at/before token {symbol/constant}''"
X.LI "``syntax error at invalid token {constant/string} ''"
X.LI "``syntax error at/before string {string} ''"
X.LI "``syntax error at/before End of Line''"
X.LI "``syntax error at/before {relational op}''"
X.LI "``syntax error at/before Undeterminable Symbol''"
X.LI "``syntax error - undetermined yyerror type''"
X.LI "\ "
Xstatement is in a form that the first pass parser cannot
Xrecognize. The next syntactic element is inappropriate for
Xwhatever language element the parser is working on.
X.SP
X.LI "``error or premature end of intermediate file''"
X.LI "``syntax error - cannot backup''"
X.LI "``unimplemented width''"
X.LI "``unknown intermediate file command''"
X.LI "``yacc stack overflow''"
X.LI "\ "
XInternal errors, should not occur.
X.SP
X.LI "``undefined character value 'char' ''"
X.LI "\ "
XA string constant contains a character not defined in
Xa CHARDEF statement for the current character translation.
X.SP
X.LI "``undefined symbol {symbolname}''"
X.LI "\ "
Xsymbol has no definition anywhere in file.
X.LE
X.H 3 "Warnings"
X.VL 10 5 1
X.LI "``character translation value truncated''"
X.LI "\ "
XAn expression in a CHARDEF statment has a value less than zero
Xor greater then 255.
X.SP
X.LI "``forward reference to SET/EQU symbol''"
X.LI "\ "
XA symbol in an expression is defined in a set/equ statement
Xthat occurs after the line. For set statements, the value
Xof the symbol is that defined in the set statement closest
Xto the end of the file.
X.SP
X.LI "``string constant in expression more than 2 characters long''"
X.LI "\ "
XThe first two characters are used as the numeric value of
Xthe subexpression.
X.LE
X.H 2 "Listing"
XWhen the -l option is used, the detailed listing is output
Xto the given file.
XThis consists of the symbol listing followed by the annotated listing.
X.H 3 "Symbol Table"
XThe symbol listing is printed three symbols across, with the
Xvalue then name of the symbol.
XUndefined symbols will have "????????" in their value field.
XThe symbols are listed in order of first occurrence in the input.
XOnly the first fifteen characters of a symbol are printed.
X.H 3 "Instruction Lines"
XThe source statements are printed in the same form as they were input with
Xno reformatting.
XFollowing the source line, will be any error or warning messages associated
Xwith the line.
XStatements which generate data will be preceded with the address and
Xdata for them in hexadecimal format.
XIf more than six bytes of data are generated, the remainder will be
Xprinted on the following lines, with up to sixteen bytes per line.
XAll data generated is printed in the file.
XStatements that don't generate data but have some value oriented operation,
Xlike EQU, SET, ORG, or RESERVE, will print that value in the first 24
Xcolumns of the source line.
X.H 2 "Symbol File"
XWhen the -s option is used, the symbol table is printed to the given
Xfile. The format is one symbol per line, address then symbol name.
XIf the symbol is undefined, "????????" is printed for the address. The
Xsymbols are printed in the order of first occurrence, either definition
Xor reference, in the source file. This feature is provided so the
Xsystem sort utility can be used to produce symbol tables sorted by
Xeither address or name.
XThe entire symbol name is printed.
X.H 2 "Binary Output"
X.H 3 "Intel Hex Record Format"
XThe Intel hex record is a printable text string with an ASCII character
Xrepresenting 4 bits of a byte.
XThe characters used are "0" through "9" and "a" through "f", representing
Xbinary data 0000 to 01001, and 1010 through 1111.
XThere are always two ASCII characters used to represent 1 byte, the high
Xhalf, then the low half.
XThere is one record per line in a text file.
XThis format is accepted by most of prom programmers.
X.P
XRecord Layout
X.VL 15 5
X.LI :ccaaaattddddddddddkk
X.LI ':'
Xindicator character
X.LI cc
Xascii-hex representation of an 8 bit count of data characters
X.LI aaaa
Xascii-hex representation of 16 bit address
X.LI tt
Xascii-hex representation of an 8 bit type
X.VL +10
X.LI 00 is a data record
Xthe address is the first location to store the data
X.LI 01 is an end of file record
Xthe address is the location to start execution, the
Xcount is 00, no data is present.
X.LE
X.LI dd...
Xascii-hex representation of the data, two characters per byte.
XThe number of 8 bit bytes is given by the count field.
X.LI kk
Xascii-hex representation of an 8 bit checksum. The sum of the
Xbinary representation, modulo 256, of the count, the high half
Xof the address, the low half of the address, the type, all the
Xdata bytes, and the checksum must be zero.
X.LE
X.H 1 "Program Limits"
X.VL +30 ""
X.LI "Line Length"
X256 characters including end of line control characters
X.LI "Number of Symbols"
X.DL +2
X.LI
XThe maximum allocatable block size divided by the size of a pointer.
XFor a iAPX286, about 16000 entries.
X.LI
XThe amount of allocatable memory divided by the amount of space per symbol.
XFor an iAPX286, 22 + 1 + the length of the string bytes.
X.LE
X.LI "Symbol Length"
XSee line length
X.LI "Output"
XA 16 bit address in the output record format limits output to 65536
Xbinary bytes.
X.LI "Expressions per Line"
X128 (in BYTE and WORD statements)
X.LI "Strings per Line"
X128 (in STRING statements)
X.LI "Nested If Statements"
X32 levels
X.LI "Nested Include Files"
X20 or whatever the operating system allows
X.LI "Subexpressions per Line"
X258 symbols, constants, operators (total)
X.LI "Character Translation Sets"
X5 sets, plus the default (host) character set
X.LE
X.TC 1 1 7
SHAR_EOF
true || echo 'restore of base.doc failed'
fi
# ============= cleanup.bat ==============
if test -f 'cleanup.bat' -a X"$1" != X"-c"; then
echo 'x - skipping cleanup.bat (File already exists)'
else
echo 'x - extracting cleanup.bat (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'cleanup.bat' &&
Xdel *.obj
Xdel as*.c
Xdel as*.h
SHAR_EOF
true || echo 'restore of cleanup.bat failed'
fi
# ============= devnote ==============
if test -f 'devnote' -a X"$1" != X"-c"; then
echo 'x - skipping devnote (File already exists)'
else
echo 'x - extracting devnote (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'devnote' &&
X
X1. Disclaimer
X
X This software is in the public domain.
X Any prior copyright claims are relinquished.
X
X This software is distributed with no warranty whatever.
X The author takes no responsibility for the consequences
X of its use.
X
X2. Size
X
X You can compile the assemblers small model (64k + 64k).
X Getting them any smaller would be a real trick.
X
X3. Compilation
X
X The C source files that comprise a cross assembler are
X in 3 categories.
X
X Common code (doesn't need recompiling between different
X "flavors")
X frasmain.c
X fraosub.c
X frapsub.c
X
X "Flavor" specific files (generated by Yacc, compiled
X for every "flavor"))
X as*.c
X as*.h
X
X Common code that depends on the fraytok.h file (compiled
X for every "flavor")
X fryylex.c
X
X4. Fraytok.h
X
X The yacc program defines some data structures and assigns values
X to various #define Macros used in the lexical analyzer.
X The lexical analyzer (fryylex.c) file refers to these in the
X fraytok.h include file. The {assembler name}.h file generated
X by yacc (or renamed in the makefile) for the different .y files
X will be different. If you compile manually, insure that the correct
X {assembler name}.h file is copied to fraytok.h.
X
X5. Configuration Macros
X
X DOSTEMP
X
X If neither the current directory or /usr/tmp is an acceptable
X directory for the temporary intermediate data file, change the
X initialization in frasmain.c.
X
X NOGETOPT
X
X If you use the NOGETOPT to use the provided function, remember
X to change the MAINDEPENDS makefile macro.
X
X NOSTRING, USEINDEX
X
X The version 7 system I used to test these for version 1 got sold
X for scrap. Should still work ;-)
X
X6. Dos
X
X If you don't have a MS-DOS (or whatever) Yacc equivalent, but do have
X access to a another computer with Yacc, you can run that step there
X and take the resulting .c and .h files to the (whatever) system.
X (I have not inquired at AT&T as to the copyright status of the
X resulting code, although it is rumored that the output of Yacc
X is public domain. Do this at your own risk. [The Yacc program
X itself is definitly NOT public domain]).
X
X The combination used (Turbo C and Bison) will report a half
X a dozen (varies) shift-reduce conflicts from Bison, and 3 (usually)
X warnings from the C compiler for the parser. No big deal.
X
X The Bison (the Free Software Foundation's Yacc clone) I used
X was disk 285 from the C Users Group. The version dated
X January 1989. This is modified from the original, to
X adapt it to MS-DOS compilers, conventions, and libraries.
X
X (The following paragraph was copied out of this release)
X
X The C Users' Group (CUG) collects, maintains and distributes
X public domain C source code, publishes a magazine, The C Users' Journal
X and serves as a resource for C users. Several vendors have named
X CUG as the official users group for their implementation of C.
X For membership and subscription information contact
X
X The C Users' Group
X 2601 Iowa
X Lawrence, KS 66047
X (913) 841-1631
X
X7. Porting to non-ascii machines
X
X The fryylex.c file contains a translate table, chartrantab,
X which classifies the input character set for the scanner's
X state machine. The reference to this table masks off the
X input character with 0x7f limiting the table to 128 elements.
X So if you want a source file in EBCDIC or to have umlauts in
X your variable names, a new table, and a new mask are called for.
X
X Debug in the lexical analyzer is turned on with a nonzero
X value in the DEBUG macro.
X
X Host machines that don't use two-complement negative numbers
X will have to compensate in the fraosub.c outeval()
X switch statement for cases IFC_EMU8, IFC_EMS7, IFC_EM16,
X IFC_EMBR16.
X
X8. History
X
X These used to be called the Framework cross assemblers, but
X there's someone using the name for a database package or
X something like that. Why Frankenstein? Well, if you don't
X like the way it acts, chop off it's head and sew a new one on.
X (It was around Halloween).
X
X The .y files are generated from a more general machine
X description by an automated script. But this isn't
X portable enough and is too disgusting to distribute.
X
X9. Bug reports
X
X Report bugs to markz at ssc.uucp. Especially screwups in the
X instruction generation tables.
X
X There is no telephone that I can be reached at.
X Please don't phone/fax Specialized Systems Consultants in
X reference to this software. What I do for a hobby, and
X what they do to make money are not connected.
X
X Mark Zenier
X
X
SHAR_EOF
true || echo 'restore of devnote failed'
fi
# ============= filelist ==============
if test -f 'filelist' -a X"$1" != X"-c"; then
echo 'x - skipping filelist (File already exists)'
else
echo 'x - extracting filelist (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'filelist' &&
XMakefile Unix makefile
Xas1805.1 Man page, process with nroff -man
Xas1805.doc Appendix, process with tbl and nroff -mm
Xas1805.tst Test input file
Xas1805.tut Test output, listing file
Xas1805.y Yacc and instruction table source file
Xas2650.1 Man page, process with nroff -man
Xas2650.doc Appendix, process with tbl and nroff -mm
Xas2650.tst Test input file
Xas2650.tut Test output, listing file
Xas2650.y Yacc and instruction table source file
Xas6301.1 Man page, process with nroff -man
Xas6301.doc Appendix, process with tbl and nroff -mm
Xas6301.tst Test input file
Xas6301.tut Test output, listing file
Xas6301.y Yacc and instruction table source file
Xas6502.1 Man page, process with nroff -man
Xas6502.doc Appendix, process with tbl and nroff -mm
Xas6502.tst Test input file
Xas6502.tut Test output, listing file
Xas6502.y Yacc and instruction table source file
Xas6805.1 Man page, process with nroff -man
Xas6805.doc Appendix, process with tbl and nroff -mm
Xas6805.tst Test input file
Xas6805.tut Test output, listing file
Xas6805.y Yacc and instruction table source file
Xas6809.1 Man page, process with nroff -man
Xas6809.doc Appendix, process with tbl and nroff -mm
Xas6809.tst Test input file
Xas6809.tut Test output, listing file
Xas6809.y Yacc and instruction table source file
Xas6811.1 Man page, process with nroff -man
Xas6811.doc Appendix, process with tbl and nroff -mm
Xas6811.tst Test input file
Xas6811.tut Test output, listing file
Xas6811.y Yacc and instruction table source file
Xas7000.1 Man page, process with nroff -man
Xas7000.doc Appendix, process with tbl and nroff -mm
Xas7000.tst Test input file
Xas7000.tut Test output, listing file
Xas7000.y Yacc and instruction table source file
Xas8041.tst Test input file, for as8048
Xas8041.tut Test output, listing file
Xas8048.1 Man page, process with nroff -man
Xas8048.doc Appendix, process with tbl and nroff -mm
Xas8048.tst Test input file
Xas8048.tut Test output, listing file
Xas8048.y Yacc and instruction table source file
Xas8051.1 Man page, process with nroff -man
Xas8051.doc Appendix, process with tbl and nroff -mm
Xas8051.tst Test input file
Xas8051.tut Test output, listing file
Xas8051.y Yacc and instruction table source file
Xas8096.1 Man page, process with nroff -man
Xas8096.doc Appendix, process with tbl and nroff -mm
Xas8096.tst Test input file
Xas8096.tut Test output, listing file
Xas8096.y Yacc and instruction table source file
Xascii.chd assembler include file defining the Ascii character set
X with the Ansi C control characters
Xasz8.1 Man page, process with nroff -man
Xasz8.doc Appendix, process with tbl and nroff -mm
Xasz8.tst Test input file
Xasz8.tut Test output, listing file
Xasz8.y Yacc and instruction table source file
Xasz80.1 Man page, process with nroff -man
Xasz80.doc Appendix, process with tbl and nroff -mm
Xasz80.tst Test input file
Xasz80.tut Test output, listing file
Xasz80.y Yacc and instruction table source file
Xbase.doc Assembler manual, process with nroff -mm
Xcleanup.bat MS-DOS cleanup script
Xdevnote Notes for development and porting
Xfilelist This file
Xfraebin.h binary operator expression evaluation include source file
Xfraeuni.h unary operator expression evaluation include source file
Xfragcon.h generation constants include source file
Xfraosub.c output phase routines source file
Xfrapsub.c parse phase routines source file
Xfrasmain.c main() source file
Xfrasmdat.h global data include source file
Xfryylex.c lexical analyzer source file
Xgetopt.h getopt function (optional) source file
Xmakefile.dos Turbo C MS-Dos make file
Xmakeone.bat MS-Dos script to compile and test
SHAR_EOF
true || echo 'restore of filelist failed'
fi
# ============= fraebin.h ==============
if test -f 'fraebin.h' -a X"$1" != X"-c"; then
echo 'x - skipping fraebin.h (File already exists)'
else
echo 'x - extracting fraebin.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'fraebin.h' &&
X
X
X/*
XHEADER: ;
XTITLE: Frankenstein Cross Assemblers;
XVERSION: 2.0;
XDESCRIPTION: " Reconfigurable Cross-assembler producing Intel (TM)
X Hex format object records. ";
XFILENAME: fraebin.h;
XSEE-ALSO: frapsub.c, fraosub.c;
XAUTHORS: Mark Zenier;
X*/
X
X/*
X description switch case actions for binary operators for
X both the parse and output phase expression
X evaluators
X*/
X
X
X case IFC_MUL:
X etop *= (estkm1p--)->v;
X break;
X
X case IFC_DIV:
X etop = (estkm1p--)->v/etop;
X break;
X
X case IFC_ADD:
X etop += (estkm1p--)->v;
X break;
X
X case IFC_SUB:
X etop = (estkm1p--)->v - etop;
X break;
X
X case IFC_MOD:
X etop = (estkm1p--)->v % etop;
X break;
X
X case IFC_SHL:
X etop = (estkm1p--)->v << etop;
X break;
X
X case IFC_SHR:
X etop = (estkm1p--)->v >> etop;
X break;
X
X case IFC_AND:
X etop &= (estkm1p--)->v;
X break;
X
X case IFC_OR:
X etop |= (estkm1p--)->v;
X break;
X
X case IFC_XOR:
X etop ^= (estkm1p--)->v;
X break;
X
X case IFC_GT:
X etop = (estkm1p--)->v > etop ? 1 : 0;
X break;
X
X case IFC_GE:
X etop = (estkm1p--)->v >= etop ? 1 : 0;
X break;
X
X case IFC_LT:
X etop = (estkm1p--)->v < etop ? 1 : 0;
X break;
X
X case IFC_LE:
X etop = (estkm1p--)->v <= etop ? 1 : 0;
X break;
X
X case IFC_NE:
X etop = (estkm1p--)->v != etop ? 1 : 0;
X break;
X
X case IFC_EQ:
X etop = (estkm1p--)->v == etop ? 1 : 0;
X break;
X
SHAR_EOF
true || echo 'restore of fraebin.h failed'
fi
# ============= fraeuni.h ==============
if test -f 'fraeuni.h' -a X"$1" != X"-c"; then
echo 'x - skipping fraeuni.h (File already exists)'
else
echo 'x - extracting fraeuni.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'fraeuni.h' &&
X/*
XHEADER: ;
XTITLE: Frankenstein Cross Assemblers;
XVERSION: 2.0;
XDESCRIPTION: " Reconfigurable Cross-assembler producing Intel (TM)
X Hex format object records. ";
XFILENAME: fraeuni.h;
XSEE-ALSO: frapsub.c, fraosub.c;
XAUTHORS: Mark Zenier;
X*/
X/*
X description switch case actions for unary operators for
X both the parse and output phase expression
X evaluators
X*/
X
X case IFC_NEG:
X etop = -etop;
X break;
X
X case IFC_NOT:
X etop = ~ etop;
X break;
X
X case IFC_HIGH:
X etop = (etop >> 8) & 0xff;
X break;
X
X case IFC_LOW:
X etop = etop & 0xff;
X break;
X
SHAR_EOF
true || echo 'restore of fraeuni.h failed'
fi
# ============= fragcon.h ==============
if test -f 'fragcon.h' -a X"$1" != X"-c"; then
echo 'x - skipping fragcon.h (File already exists)'
else
echo 'x - extracting fragcon.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'fragcon.h' &&
X/*
XHEADER: ;
XTITLE: Frankenstein Cross Assemblers;
XVERSION: 2.0;
XDESCRIPTION: " Reconfigurable Cross-assembler producing Intel (TM)
X Hex format object records.
X
X constants used in intermediate file code generation
X as the expression node operation value and the polish
X expression operation ";
XFILENAME: fragcon.h;
XSEE-ALSO: frapsub.c, fraosub.c, as*.y;
XAUTHORS: Mark Zenier;
X*/
X
X#define IG_START '['
X#define IG_END ']'
X#define IG_CPCON '#'
X#define IG_CPEXPR '='
X#define IG_ERROR 'X'
X
X#define IGP_DEFINED 'U'
X#define IGP_CONSTANT 'V'
X
X#define IFC_NEG '_'
X#define IFC_NOT 'N'
X#define IFC_HIGH 'H'
X#define IFC_LOW 'Z'
X#define IFC_MUL '*'
X#define IFC_DIV '/'
X#define IFC_ADD '+'
X#define IFC_SUB '-'
X#define IFC_MOD '%'
X#define IFC_SHL '{'
X#define IFC_SHR '}'
X#define IFC_AND '&'
X#define IFC_OR '|'
X#define IFC_XOR '^'
X#define IFC_GT '>'
X#define IFC_GE 'G'
X#define IFC_LT '<'
X#define IFC_LE 'L'
X#define IFC_NE '?'
X#define IFC_EQ '='
X#define IFC_SYMB 'S'
X#define IFC_PROGCTR 'P'
X#define IFC_CURRLOC 'Q'
X#define IFC_LOAD '.'
X#define IFC_CLR '$'
X#define IFC_CLRALL 'X'
X#define IFC_POP '!'
X#define IFC_DUP '~'
X#define IFC_EMU8 ';'
X#define IFC_EMS7 'r'
X#define IFC_EM16 'x'
X#define IFC_EMBR16 'y'
X#define IFC_WIDTH 'W'
X#define IFC_SWIDTH 'R'
X#define IFC_IWIDTH 'I'
X#define IFC_TESTERR 'T'
X
X#define PCCASE_BIN 1
X#define PCCASE_UN 2
X#define PCCASE_DEF 3
X#define PCCASE_SYMB 4
X#define PCCASE_CONS 5
X#define PCCASE_PROGC 6
X
SHAR_EOF
true || echo 'restore of fragcon.h failed'
fi
true || echo 'restore of fraosub.c failed'
echo End of part 1, continue with part 2
exit 0
More information about the Alt.sources
mailing list