Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.1 6/24/83 (MC830713); site vu44.UUCP Path: utzoo!linus!philabs!cmcl2!seismo!mcvax!vu44!jack From: jack@vu44.UUCP (Jack Jansen) Newsgroups: net.sources Subject: Motorola 6809 cross-assembler (part 1 of 2) Message-ID: <598@vu44.UUCP> Date: Tue, 19-Feb-85 05:44:51 EST Article-I.D.: vu44.598 Posted: Tue Feb 19 05:44:51 1985 Date-Received: Thu, 21-Feb-85 05:34:01 EST Reply-To: a6809-list@htsa.UUCP Organization: VU Informatica, Amsterdam Lines: 490 : 'This is a shell archive. Run with the real shell,' : 'not the seashell. It should extract the following:' : ' Read_Me Makefile a6809 mkmnem.p mneminput ' echo x - Read_Me sed 's/^X//' <<'EndOfFile' >Read_Me XThis directory contains the source to the htsa 6809 assembler. XIt is written in ISO standard pascal, and has been tested on a XPDP 11/34 running unix v7m, using the VU pascal compiler. X XIt can also be used on a PRIME, if you have the Sheffield compiler, Xthat is, PASCAL-S. The Prime standard pascal compiler won't compile it. XIf a version for the prime is to be made, a "#define PRIME" statement Xshould be added near the beginning of a6809.p. X XIf your pascal compiler does not call the C preprocessor, you Xshould feed the 'a6809.p' source through cpp yourself. XIf you don't have cpp, you should either obtain one (there was Xa public domain cpp in net.sources and mod.sources recently), Xor massage the files by hand. The only thing that #defined identifiers Xare used for is for conditional compilation using #ifdef, so this Xshouldn't be too hard. XIf you are baffled by this, I can send you a tiny tiny cpp I wrote Xin pascal for the prime if you send me a mail. I didn't include it Xhere, however, since I'm not very proud of the code (this was an Xunderstatement). X XThe assembler accepts standard Motorola 6809 assembly language, with Xone known exception, nl. that the words PC and PCR can be used Xinterchangeably, where Motorola only accepts PCR for PC Relative, and XPC on PSH and PUL instructions. XThe object file is in 'S1 format', as accepted by the ExorMacs systems, Xand most other 680? based systems. X XThe assembler does not have any of the nifty features like Xmacros, conditional assembly, relocatable binaries, etc. XIf anyone feels like hacking it in, I would be *very* happy Xif you sent us a copy. Especially relocatable output is something Xthat would be very handy, and the only reason it isn't implemented Xyet is lack of time. X XI'm planning to setup a mailing list for bugs, extensions, etc. Xso I would be very happy if everyone who is planning to use the Xassembler would mail his electronic address to mcvax!vu44!htsa!a6809-list. XIf you find any bugs, also mail them there, and I'll try to fix them, Xor distribute any fixes that I have received. X XOne more apology is probably in place here: Most of the comment Xis in Dutch( :-) for me, :-( for you). Sorry, but I'm short on Xtime these days, so I didn't have time to wade through the Xsources (I already had to write a manual, so.....). X XThe following files are in this directory : X XMakefile make input file, if you have the VU pascal compiler. Xa6809 shell file to run the assembler. Xa6809.1 Manual page in -man format. Xa6809.man Manual page, ready for displaying. Xa6809.p Main program. Includes all the '.inc' files. Xaserr Shell file to get erronuous lines from a listing. Xexec.inc Code generator source file. Xinpt.inc Input routines source file. Xmkmnem.p Separate program to make a mnemonics file. Xmneminput Input file for mkmnem.p Xoutp.inc Output routines source file. Xpars.inc Parser source file. Xsymb.inc Symbol table handling source file. X X Jack Jansen Hans Pronk X Hogere Technische School "Amsterdam" X Europaboulevard 23 X Amsterdam X Holland X Tel: +31 20 429333 X uucp: {decvax|seismo|philabs}!mcvax!vu44!htsa!jack X ..!htsa!haper X arpa: "decvax!mcvax!vu44!htsa!jack"@Berkeley.ARPA X "decvax!mcvax!vu44!htsa!haper"@Berkeley.ARPA X XPS: Since Hans is still working full time at the HTS, and I'm only Xhere one day in the week, it is probably wiser to mail problems, Xetc to htsa!haper. EndOfFile echo x - Makefile sed 's/^X//' <<'EndOfFile' >Makefile X# X# Makefile for a6809 assembler. X# XASSRC = a6809.p symb.inc inpt.inc outp.inc pars.inc exec.inc XASOTHER = Read_Me Makefile a6809 mkmnem.p mneminput Xall: mnemtab a6809prg X Xinstall: all a6809 aserr X cp a6809 /usr/bin/a6809 X cp a6809prg /usr/lib/a6809prg X cp mnemtab /usr/etc/a6809:mnemtab X cp aserr /usr/bin/aserr X Xmnemtab: mneminput mkmnem X mkmnem mneminput mnemtab X Xmkmnem: mkmnem.p X pc -C mkmnem.p -o mkmnem X Xa6809prg: $(ASSRC) X pc -C -I a6809.p -o a6809prg X Xa6809int: $(ASSRC) X pc -I a6809.p -o a6809int X Xa6809lst: $(ASSRC) X pc -C -E -I a6809.p -o a6809prg >a6809lst X XDistr: Distr.1 Distr.2 X XDistr.1: $(ASOTHER) X shar $(ASOTHER) >Distr.1 X XDistr.2: $(ASSRC) X shar $(ASSRC) >Distr.2 EndOfFile echo x - a6809 sed 's/^X//' <<'EndOfFile' >a6809 X: a6809 interlude. Xcase $# in X0) echo "Usage * $0 [-nl] [-nh] source " X echo " Hex op 'source.hex', listing op 'source.list'." X echo " -nl: geen listing; -nh: geen hexfile." X exit X ;; Xesac X Xasm=/usr/lib/a6809prg Xtable=/usr/etc/a6809:mnemtab Xdodbg=0 Xdolst=1 Xdohex=1 Xdosmbl=0 X Xwhile expr "X$1" : "X-" != 0 >/dev/null; do X case $1 in X -s) dosmbl=1 ; shift ;; X -d) dodbg=1 ; shift ;; X -nl) dolst=0 ; shift ;; X -nh) dohex=0 ; shift ;; X -*) echo Onbekende optie $1 ; exit ;; X esac Xdone X Xcase $# in X0) echo Geen sourcefile gegeven. X exit Xesac X Xsource=$1.src Xif test ! -r $source Xthen X source=$1 X if test ! -r $source X then X echo "Non-existent sourcefile" X exit X fi Xfi X Xobj=`basename $source .src`.hex Xlst=`basename $source .src`.list X Xcase $dolst in X0) lst=/dev/tty ;; Xesac Xcase $dohex in X0) obj=/tmp/ast$$ ;; Xesac Xecho $dohex $dolst $dodbg $dosmbl >$obj X$asm $source $obj $table >$lst X Xcase $dolst in X1) aserr $lst Xesac EndOfFile echo x - mkmnem.p sed 's/^X//' <<'EndOfFile' >mkmnem.p X# XPROGRAM MKMNEM(INPUT,OUTPUT,INFILE,OUTFILE); X(* Make mnemonic file for A6809 *) X X(* #define PRIME (* For the PRIME, or *) X#define UNIX (* For UNIX *) X XCONST X MAXMNEM = 160; X STRSIZE = 6; X XTYPE X STRING = PACKED ARRAY [1..STRSIZE] OF CHAR; X OPTYPE = ( OPNAM, OPFCB, OPFCC, OPRMB, OPEQU, OPSDP, OPEND, X OPOPT, OP0, OP1B, OP1W, OPEMT, OPREL, OPREG, OPSTK ); X X MNEMRECORD = RECORD X NAME : STRING; X OPT : OPTYPE; X OPC : INTEGER; X END; X XVAR X CONV : ARRAY [ 0 .. 14 ] OF OPTYPE; X INFILE : TEXT; X OUTFILE : FILE OF MNEMRECORD; X TABLE : ARRAY[1..MAXMNEM] OF MNEMRECORD; X NROFELEM , I , J : INTEGER; X#ifdef PRIME X FNAME : PACKED ARRAY [1..32] OF CHAR; X#endif X X#ifdef PRIME XVALUE X CONV = ( OPNAM,OPFCB,OPFCC,OPRMB,OPEQU,OPSDP,OPEND, X OPOPT,OP0,OP1B,OP1W,OPEMT,OPREL,OPREG,OPSTK ); X XPROCEDURE GETFNAM; XVAR I : INTEGER; XBEGIN X WHILE INPUT^ = ' ' DO GET(INPUT); X FOR I := 1 TO 32 DO X IF EOLN(INPUT) THEN FNAME[I] := ' ' ELSE READ(FNAME[I]); XEND(*GETFNAM*); X#endif X XPROCEDURE INSTR( VAR S : STRING); XVAR I : INTEGER; XBEGIN X WHILE INFILE^ = ' ' DO GET(INFILE); X FOR I := 1 TO STRSIZE DO X IF INFILE^ = ' ' THEN S[I] := ' ' ELSE READ(INFILE,S[I]); XEND(* INSTR *); X XPROCEDURE INHEX(VAR N : INTEGER); XVAR D : INTEGER; XBEGIN X N := 0; X WHILE INFILE^ = ' ' DO GET(INFILE); X WHILE INFILE^ IN ['A'..'F','0'..'9'] DO BEGIN X IF INFILE^ IN ['A'..'F'] X THEN D := ORD(INFILE^)-ORD('A')+10 X ELSE D := ORD(INFILE^)-ORD('0'); X N := N*16+D; X GET(INFILE); X END; XEND (* INHEX *); X XPROCEDURE SORT; XVAR I,J : INTEGER; X DUMMY : MNEMRECORD; XBEGIN X FOR I := 1 TO NROFELEM DO X FOR J := 2 TO NROFELEM DO X IF TABLE[J].NAME < TABLE[J-1].NAME THEN BEGIN X DUMMY := TABLE[J]; X TABLE[J] := TABLE[J-1]; X TABLE[J-1] := DUMMY; X END; XEND (* SORT *); X XBEGIN X#ifdef PRIME X WRITE('Input filename - '); X GETFNAM; X RESET(INFILE,FNAME); X WRITE('Output filename - '); X GETFNAM; X REWRITE(OUTFILE,FNAME); X#else X RESET(INFILE); X REWRITE(OUTFILE); X X CONV[ 0] := OPNAM; X CONV[ 1] := OPFCB; X CONV[ 2] := OPFCC; X CONV[ 3] := OPRMB; X CONV[ 4] := OPEQU; X CONV[ 5] := OPSDP; X CONV[ 6] := OPEND; X CONV[ 7] := OPOPT; X CONV[ 8] := OP0 ; X CONV[ 9] := OP1B ; X CONV[10] := OP1W ; X CONV[11] := OPEMT; X CONV[12] := OPREL; X CONV[13] := OPREG; X CONV[14] := OPSTK; X#endif X WRITE('Reading...'); X I := 0; X WHILE NOT EOF(INFILE) DO BEGIN X I := I+1; X REPEAT X INSTR(TABLE[I].NAME); X IF TABLE[I].NAME[1] = '*' THEN X READLN(INFILE); X UNTIL TABLE[I].NAME[1] <> '*'; X READ(INFILE,J); X TABLE[I].OPT := CONV[J]; X INHEX(TABLE[I].OPC); X WRITE(OUTPUT,'.'); X WHILE (INFILE^ = ' ') AND NOT EOF(INFILE) DO GET(INFILE); X END; X NROFELEM := I; X WRITELN; X WRITE('Sorting...'); X SORT; X WRITELN; X WRITELN('Writing...'); X FOR I := 1 TO NROFELEM DO BEGIN X OUTFILE^ := TABLE[I]; X PUT(OUTFILE); X END; X WRITELN; XEND . EndOfFile echo x - mneminput sed 's/^X//' <<'EndOfFile' >mneminput XABX 8 3A XADCA 9 89 XADCB 9 C9 XADDA 9 8B XADDB 9 CB XADDD 10 C3 XANDA 9 84 XANDB 9 C4 XANDCC 9 1C X* !! ANDC is identiek aan ANDCC om compatibel te blijven met RT-11 a6809 XANDC 9 1C XASL 9 48 XASLA 8 48 XASLB 8 58 XASR 9 47 XASRA 8 47 XASRB 8 57 XBCC 12 24 XBCS 12 25 XBEQ 12 27 XBGE 12 2C XBGT 12 2E XBHI 12 22 XBHS 12 24 XBITA 9 85 XBITB 9 C5 XBLE 12 2F XBLO 12 25 XBLS 12 23 XBLT 12 2D XBMI 12 2B XBNE 12 26 XBPL 12 2A XBRA 12 20 XBRN 12 21 XBSR 12 8D XBVC 12 28 XBVS 12 29 XCLR 9 4F XCLRA 8 4F XCLRB 8 5F XCMPA 9 81 XCMPB 9 C1 XCMPD 10 1083 XCMPU 10 1183 XCMPX 10 8C XCMPS 10 118C XCMPY 10 108C XCOM 9 43 XCOMA 8 43 XCOMB 8 53 XCWAI 9 3C XDAA 8 19 XDEC 9 4A XDECA 8 4A XDECB 8 5A XEMT 11 3F XEORA 9 88 XEORB 9 C8 XEXG 13 1E XFCB 1 01 XFCC 2 00 XFDB 1 02 XINC 9 4C XINCA 8 4C XINCB 8 5C XJMP 10 4E XJSR 10 8D XLBCC 12 1024 XLBCS 12 1025 XLBEQ 12 1027 XLBGE 12 102C XLBGT 12 102E XLBHI 12 1022 XLBHS 12 1024 XLBLE 12 102F XLBLO 12 1025 XLBLS 12 1023 XLBLT 12 102D XLBMI 12 102B XLBNE 12 1026 XLBPL 12 102A XLBRA 12 16 XLBRN 12 1021 XLBSR 12 17 XLBVC 12 1028 XLBVS 12 1029 XLDA 9 86 XLDAA 9 86 XLDB 9 C6 XLDAB 9 C6 XLDD 10 CC XLDS 10 10CE XLDU 10 CE XLDX 10 8E XLDY 10 108E XLEAS 10 12 XLEAU 10 13 XLEAX 10 10 XLEAY 10 11 XLSL 9 48 XLSLA 8 48 XLSLB 8 58 XLSR 9 44 XLSRA 8 44 XLSRB 8 54 XMUL 8 3D XNAM 0 00 XNEG 9 40 XNEGA 8 40 XNEGB 8 50 XNOP 8 12 XOPT 7 00 XORA 9 8A XORAA 9 8A XORB 9 CA XORAB 9 CA XORCC 9 1A XORG 3 02 XPSHS 14 34 XPSHU 14 36 XPULS 14 35 XPULU 14 37 XRMB 3 01 XROL 9 49 XROLA 8 49 XROLB 8 59 XROR 9 46 XRORA 8 46 XRORB 8 56 XRTI 8 3B XRTS 8 39 XSBCA 9 82 XSBCB 9 C2 XSEX 8 1D XSTA 9 87 XSTAA 9 87 XSTB 9 C7 XSTAB 9 C7 XSTD 10 CD XSTS 10 10CF XSTU 10 CF XSTX 10 8F XSTY 10 108F XSUBA 9 80 XSUBB 9 C0 XSUBD 10 83 XSWI 8 3F XSWI2 8 103F XSWI3 8 113F XSYNC 8 13 XTFR 13 1F XTST 9 4D XTSTA 8 4D XTSTB 8 5D XZZZZZZ 8 FE XEND 6 00 XEQU 4 00 XSETDP 5 00 X* SETD == SETDP, FOR RT-11 COMPATABILITY XSETD 5 00 EndOfFile exit -- Jack Jansen, {seismo|philabs|decvax}!mcvax!jack Notice new, improved, shorter and faster address ^^^^^ -- Jack Jansen, {seismo|philabs|decvax}!mcvax!jack Notice new, improved, shorter and faster address ^^^^^