From: Jason Self Date: Sun, 26 Nov 2017 05:34:10 +0000 (-0800) Subject: Importing a56 version 1.3 from http://www.zdomain.com/a56.html. Copyright of examples... X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=2d044bfe809be2fb02ae5aa8540cd57f7af407a1;p=a56.git Importing a56 version 1.3 from zdomain.com/a56.html. Copyright of examples is not clear so I removed them. --- 2d044bfe809be2fb02ae5aa8540cd57f7af407a1 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fc5b25d --- /dev/null +++ b/Makefile @@ -0,0 +1,116 @@ +####################################################### +# +# a56 - a DSP56001 assembler +# +# Written by Quinn C. Jensen +# July 1990 +# +####################################################### + +# environment definitions +# uncomment the ones you like + +# generic unix +CC = cc +HOSTCC = cc +YACC = yacc +CCDEFS = -DLDEBUG +MV = mv +YTABC = y.tab.c +YTABH = y.tab.h +POSTPROCESS = echo + +# gcc & bison +#CC = gcc +#HOSTCC = gcc +#YACC = bison -y +#CCDEFS = +#MV = mv +#YTABC = y.tab.c +#YTABH = y.tab.h +#POSTPROCESS = echo + +# Delorie's DOS gcc (from ftp://omnigate.clarkson.edu/pub/msdos/djgpp) +#CC = gcc +#HOSTCC = gcc +#YACC = bison -y +#CCDEFS = +#MV = ren +#YTABC = y_tab.c +#YTABH = y_tab.h +#POSTPROCESS = coff2exe + +# gcc cross-compile to go32 environment +#CC = i386-go32-gcc +#HOSTCC = cc +#YACC = yacc +#CCDEFS = +#MV = mv +#YTABC = y.tab.c +#YTABH = y.tab.h +#POSTPROCESS = echo + +####################################################### + +# -O or -g +#DEBUG = -O -Olimit 3000 +DEBUG = -O + +SRCS = main.c a56.y lex.c subs.c getopt.c kparse.key +OBJS = main.o gram.o lex.o toktab.o subs.o getopt.o kparse.o + +DEFINES = $(CCDEFS) +#DEFINES = -DYYDEBUG -DLDEBUG $(CCDEFS) + +CFLAGS = $(DEBUG) $(DEFINES) + +all: keybld a56 toomf + +a56: $(OBJS) + $(CC) $(CFLAGS) -o a56 $(OBJS) -lm + @$(POSTPROCESS) a56 + +keybld: keybld.o ksubs.o + $(HOSTCC) $(CFLAGS) -o keybld keybld.o ksubs.o + @$(POSTPROCESS) keybld + +keybld.o: keybld.c + $(HOSTCC) $(CFLAGS) -c keybld.c + +ksubs.o: subs.c + $(HOSTCC) $(CFLAGS) -c subs.c + $(MV) subs.o ksubs.o + +lex.o: lex.c gram.h + +kparse.c: a56.key keybld + keybld < a56.key > kparse.c + +gram.c gram.h: a56.y + @echo "[expect 2 shift/reduce conflicts here]" + $(YACC) -d a56.y + $(MV) $(YTABC) gram.c + $(MV) $(YTABH) gram.h + +toktab.c: gram.h + awk -f tok.awk < gram.h > toktab.c + +y.output: a56.y + $(YACC) -v a56.y + +toomf: toomf.o + $(CC) -o toomf $(CFLAGS) toomf.o + @$(POSTPROCESS) toomf + +torom: torom.o subs.o + $(CC) -o torom $(CFLAGS) torom.o subs.o + +tape: toktab.c + csh -c 'tar cvbf 1 - `cat files` | gzip > a56.tar.gz' + +main.o gram.o lex.o: a56.h + +clean: ; rm -f a56 toomf y.output *.o *.out tmp *.bak a56.tar.gz keybld + +spotless: clean + rm -f gram.c lexyy.c gram.h toktab.c kparse.c diff --git a/README-1.1 b/README-1.1 new file mode 100644 index 0000000..daf3194 --- /dev/null +++ b/README-1.1 @@ -0,0 +1,143 @@ + + 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: + + = ;assign a symbol + + ALIGN ;set location pointer + ;to next integral + ;multiple of + + ORG ;new location pointer + ORG , + + DC ;declare constants + + PAGE , , , ;ignored + + INCLUDE ;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 : ;define + + PSECT ;switch to psect + + +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@zdomain.com (preferred address for a56 correspondence) +work: jensenq@novell.com diff --git a/README-1.2 b/README-1.2 new file mode 100644 index 0000000..682e499 --- /dev/null +++ b/README-1.2 @@ -0,0 +1,169 @@ + + a56 - a DSP56001 assembler - version 1.2 + +/* + * Copyright (C) 1990-1994 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.2 CHANGES + +Contributors to V1.2 - + + Andreas Gustafsson + - Added DS and DSM directives + - Generalization of the use of "*" allowing current program counter + to be used in any expression (including "org l:*" which is useful + for changing spaces without changing the PC) + - Noted a bug with MOVEP to a non-symbolic I/O address. I believe + this is now fixed. + - Noted that mispelled argumentless operators will be treated as + labels. For example, N0P (N-zero-P) will be treated as a label. + Unfortunately, my own use of a56 (i.e. using cpp as the macro + pre-processor) complicates this. However, the grammar might + have been simpler if the lexical analyzer was able to distinguish + between label declarations and references instead of leaving that + up to the YACC parser. + + Tim Channon and Peter Breuer + + - Missing ";" in grammar! + + Rober Ganter + - Fixed bad comment on line 10 of a56.y + + Me + - Listing now includes psect usage summary + - Better checking of movec arguments + - Added int(value) function to convert floating point constant expression + to integer (by truncation) + - Correctly convert a floating -1.0 to 0x800000 + - Wrote a new lexical analyzer and lexical parser generator + - Many other minor enhancements and fixes. + - Ported to DOS using DJ Delories' GCC port. (Tools available at + ftp://omnigate.clarkson.edu/pub/msdos/djgpp) + +Known bugs/deficiencies: + + - MOVE to a control reg generates bogus code (always use MOVEC, + MOVEM, and MOVEP) + +The example code this time around includes a full six-comb stereo reverb +(based on Moorer). This one sounds a lot better than the four-comb algorithm. +Each comb uses a one-pole low-pass filter in the loop. It lacks the +early-reflection FIR (although Motorola's rvb2.asm has it) but has +true stereo decorrelation by using a twin allpass stage. My old reverb +just used inversion to simulate stereo (the whole reverb effect would +disappear if you mixed the outputs). I've included only actual reverb +code itself. It lacks the hardware-implementation-specific shell. + + +--------------------------------------------------------------------------- + +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: + + = ;assign a symbol +