🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Quinn Jensen Thu, 06 Aug 1992 18:57
a56 v1.1 - Mot DSP56001 freeware assembler
#93
Author: Quinn Jensen
Date: Thu, 06 Aug 1992 18:57
152 lines
5733 bytes
I am placing v1.1 of a56 on alt.sources in four parts.  Send e-mail 
to jensenq@qcj.icon.com if you don't get alt.sources and I'll e-mail 
the parts to you.  I might have an ftp site set up soon as well.

The README file is attached below.

Quinn Jensen
jensenq@qcj.icon.com
-----------------------------------------------------------------

  a56 - a DSP56001 assembler - version 1.1

/*
 * Copyright (C) 1990-1992 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.1 CHANGES

Many thanks to Tom Cunningham at Motorola who noted several bugs, fixing
most of them.  Thanks also to Stephen Edwards at CalTech for his fixes as well.
Both he and Tom fixed up the XY parallel move code;  I believe all the
fixes are integrated.

Summary of changes since v1.0:

	- Jcc, JScc, Tcc recognizes "CC" synonym for "HS" (Tom)
	- LUA syntax fixed (Tom, Stephen)
	- DIV syntax fixed (Tom)
	- XY move fixed (Tom, Stephen)
	- a56 now detects phase errors (changes in symbol values
	  between pass 1 and 2)
	- several causes of phase errors fixed
	- immediate value handling improved for both integer and
	  fixed-point values
	- symbols have type (INT or FLOAT)
	- cpp droppings are properly handled
	- ALIGN pseudo-op added

Known bugs/deficiencies:

	- MOVE to a control reg generates bogus code (always use MOVEC,
	  MOVEM, and MOVEP)

The example code has been cleaned up a bit and I've included my
56K board's envelope code - tdsg.basic.a56.  This code is specific to
my implimentation.

A note on the reverb code - I have since found since posting version 1.0
that the reverb code has a great-big almost-DC bumb in its impulse
response.  I found this after doing some simulations.  I suspected something
was wrong because I had to scale the output of the comb filters by .046
or something before going into the two all-pass stages.  Overall I think it
works better without the 1.7 ms all-pass.  There's another reverb example 
on Dr. Bubb that fits Moorer's 1979 model better.  I've included this in 
the examples but I have not yet assembled or tried it.

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
	
	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

	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".  gram.c and lex.yy.c are provided for those without yacc
(or bison) and/or lex.

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

Quinn C. Jensen
1374 N 40 E
Orem, UT  84057

home: jensenq@qcj.icon.com (preferred address for a56 correspondence)
work: jensenq@npd.novell.com 801-429-3170
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads