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