1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
a56 - a DSP5600X assembler - version 1.3
/*
* Copyright (C) 1990-1998 Quinn C. Jensen
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. The author makes no representations
* about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty.
*
*/
V1.3 CHANGES
- Added intrinsic transcendental functions for constant literal
expressions (pi, sin, cos, tan atan, asin, acos, exp, ln, log,
pow)
- Added warnings for control register load/use hazards
- More sophisticated constant expression evaluation including
implicit float/integer conversion. Results of expressions
are typed and so formatted in the listing and symbol table.
- Various fixes including stray pointers, etc. (Thanks to
Dirk Farin farindk@trick.informatik.uni-stuttgart.de)
Known bugs/deficiencies:
- MOVE to a control reg generates bogus code (always use MOVEC,
MOVEM, and MOVEP)
Wish list
- Add support for new instructions and modes
---------------------------------------------------------------------------
OVERVIEW
This program was written as a vehicle to learn the intricacies
of the DSP56001 instruction set, and to provide a tool for Unix-based
DSP code development (for those of us without a NeXT machine.)
The intent was to provide compatibility with Motorola assembler's syntax.
But since the author did not have Motorola's assembler or its documentation,
it is no doubt far from compatible. Only a few pseudo-ops are implemented--
probably only partially.
Macros are not supported, except through the use of an external macro
preprocessor, such as /lib/cpp. To facilitate cpp macro expansion, multiple
assembler statements on a single input line are delimited with an '@', e.g.:
#define JCHEQ(c,label) move #c,x0 @cmp x0,a @jeq label
#define JCHNE(c,label) move #c,x0 @cmp x0,a @jne label
SUPPORTED PSEUDO-OPS
The following is a list of the pseudo-ops that are recognized:
<symbol> = <expression> ;assign a symbol
<label> EQU <expression> ;ditto
ALIGN <number> ;set location pointer
;to next integral
;multiple of <number>
ORG <space:> <expression> ;new location pointer
ORG <space:> <expression>, <space:> <expression>
DC <dc_list> ;declare constants
DS <number> ;reserve <number>
;words of space
<label> DSM <number> ;reserve space for
;properly aligned
;modulo-addressed
;buffer of size
;<number>, assigning
;the aligned starting
;address to <label>
PAGE <number>, <number>, <number>, <number> ;ignored
INCLUDE <file> ;file inclusion
END ;end
In addition, a "PSECT" pseudo-op was implemented. It allows program sections
to be defined and bopped in and out of, each with its own location counter and
space. The Motorola assembler probably does not have this pseudo-op, but no
doubt supports the concept in some way.
PSECT <name> <space:><begin_addr>:<end_addr> ;define
PSECT <name> ;switch to psect <name>
FUTURE DIRECTION
The assembler probably generates bogus code here and there, and no doubt
does not handle all of the syntax. I welcome all comments, fixes and
enhancements.
TO MAKE AND USE
Type "make".
The resulting program, a56, is used as follows:
a56 [-b] [-l] [-o output-file] file [...]
An assembler listing is sent to the standard-output and an ascii-formatted
object file (a56.out) is produced. The "-b" option adds binary to the listing.
"-l" causes included files to be listed. "-o" directs the output to the
specified file rather than the default, a56.out.
A separate program, toomf, converts a56.out into "OMF" format suitable for
downloading to the 56001 via the sloader.a56 program.
toomf < a56.out > file.omf
AUTHOR
11/28/91
v1.1 8/6/92
v1.2 5/2/94
v1.3 3/18/98
Quinn C. Jensen
1374 N 40 E
Orem, UT 84057
http://www.zdomain.com/~jensenq/
home: jensenq@zdomain.com (preferred address for a56 correspondence)
work: jensenq@novell.com
|