sbarr@hawk.ulowell.edu (bot man) (05/31/90)
#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 2 (of 2)." # Contents: Makefile Makefile.sun aoutput.c assem.c bomb.rc chang1.rc # commando.rc dwarf.rc dwarfgun.rc gemini.rc imp.rc impstomp.rc # interp.c interp.h mice.rc selfcpy.rc sit.rc test.c testspl.rc # Wrapped by billr@saab on Mon Feb 13 10:40:12 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile'\" else echo shar: Extracting \"'Makefile'\" \(1010 characters\) sed "s/^X//" >'Makefile' <<'END_OF_FILE' Xall: assem disassem interp X XASM_OBJ = amain.o tokenize.o parse.o lookup.o aoutput.o assem.o X X# Standard curses version of interpreter XINT_OBJ = main.o load.o output.o play.o inst.o XLIBS = -lcurses -ltermcap X X# Sun version using pixrect lib of interpreter XSINT_OBJ = main.o load.o output.o play.o inst.o interface2.o XSLIBS = -lcurses -ltermcap -lpixrect X X# Define one of DEBUG, SMALL, SUN or BIG (BIG is buggy) XCFLAGS = -O -DSMALL X Xassem: $(ASM_OBJ) X cc -o assem $(ASM_OBJ) X Xdisassem: disassem.c assem.h X cc -O disassem.c -o disassem X X# Standard version Xinterp: $(INT_OBJ) X cc -o interp $(INT_OBJ) $(LIBS) X X# Sun pixrect version X#interp: $(SINT_OBJ) X# cc -o interp $(SINT_OBJ) $(SLIBS) X Xamain.o: amain.c assem.h Xtokenize.o: tokenize.c assem.h Xparse.o: parse.c assem.h Xlookup.o: lookup.c assem.h Xoutput.o: aoutput.c assem.h Xassem.o: assem.c assem.h X Xmain.o: main.c interp.h Xload.o: load.c interp.h Xoutput.o: output.c interp.h Xplay.o: play.c interp.h Xinst.o: inst.c interp.h Xinterface2.o: interface2.c interp.h END_OF_FILE if test 1010 -ne `wc -c <'Makefile'`; then echo shar: \"'Makefile'\" unpacked with wrong size! fi # end of 'Makefile' fi if test -f 'Makefile.sun' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'Makefile.sun'\" else echo shar: Extracting \"'Makefile.sun'\" \(1008 characters\) sed "s/^X//" >'Makefile.sun' <<'END_OF_FILE' Xall: assem disassem interp X XASM_OBJ = amain.o tokenize.o parse.o lookup.o aoutput.o assem.o X X# Standard curses version of interpreter XINT_OBJ = main.o load.o output.o play.o inst.o XLIBS = -lcurses -ltermcap X X# Sun version using pixrect lib of interpreter XSINT_OBJ = main.o load.o output.o play.o inst.o interface2.o XSLIBS = -lcurses -ltermcap -lpixrect X X# Define one of DEBUG, SMALL, SUN or BIG (BIG is buggy) XCFLAGS = -O -DSUN X Xassem: $(ASM_OBJ) X cc -o assem $(ASM_OBJ) X Xdisassem: disassem.c assem.h X cc -O disassem.c -o disassem X X# Standard version X#interp: $(INT_OBJ) X# cc -o interp $(INT_OBJ) $(LIBS) X X# Sun pixrect version Xinterp: $(SINT_OBJ) X cc -o interp $(SINT_OBJ) $(SLIBS) X Xamain.o: amain.c assem.h Xtokenize.o: tokenize.c assem.h Xparse.o: parse.c assem.h Xlookup.o: lookup.c assem.h Xoutput.o: aoutput.c assem.h Xassem.o: assem.c assem.h X Xmain.o: main.c interp.h Xload.o: load.c interp.h Xoutput.o: output.c interp.h Xplay.o: play.c interp.h Xinst.o: inst.c interp.h Xinterface2.o: interface2.c interp.h END_OF_FILE if test 1008 -ne `wc -c <'Makefile.sun'`; then echo shar: \"'Makefile.sun'\" unpacked with wrong size! fi # end of 'Makefile.sun' fi if test -f 'aoutput.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'aoutput.c'\" else echo shar: Extracting \"'aoutput.c'\" \(1140 characters\) sed "s/^X//" >'aoutput.c' <<'END_OF_FILE' X/* Copyrighted (C) 1989 by Na Choon Piaw. All rights reserved */ X X X X/* This program and documentation is Public Domain, and may be */ X/* distributed and copied by everyone provided this header */ X/* remains intact */ X X/* output.c --- output routine for the asssembler. X 11/25/88 --- NCP */ X X/* algorithm: X 1. write number of instructions into file X 2. write code number of start instruction X 3. while there are still instructions do X 4. write instruction n X 5. end X*/ X#include "assem.h" X#include <stdio.h> X X#define IO(i,j) if ((i) < (j)) { printf("error in writing file --- output\n" \ X ); } X Xoutput(f, table, code, no) XFILE *f; /* file to output to */ Xtag1 table[]; /* table of symbols */ Xmemory code[]; /* code itself */ Xint no; /* number of instructions */ X{ X int check, /* check on how many bytes have been written */ X start; /* starting instruction */ X X check = fwrite(&no, sizeof(int), 1, f); X IO(check,1) X X start = getsym("START",table); X check = fwrite(&start, sizeof(int), 1, f); X IO(check,1); X X check = fwrite(code, sizeof(memory), no, f); X IO(check,no); X} END_OF_FILE if test 1140 -ne `wc -c <'aoutput.c'`; then echo shar: \"'aoutput.c'\" unpacked with wrong size! fi # end of 'aoutput.c' fi if test -f 'assem.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'assem.c'\" else echo shar: Extracting \"'assem.c'\" \(1394 characters\) sed "s/^X//" >'assem.c' <<'END_OF_FILE' X/* Copyrighted (C) 1989 by Na Choon Piaw. All rights reserved */ X X X X/* This program and documentation is Public Domain, and may be */ X/* distributed and copied by everyone provided this header */ X/* remains intact */ X X/* assembler portion of the program */ X/* 11/14 '88 X Implementing a one-pass "text in memory" assembler that handle tokens X as well. Symbol table is a linear table. X Algorithm: X 1) Tokenize the input file (i.e. produce a list of symbols in mem) X 2) Run through once, parsing instructions but not turning X into machine code yet. Insert all new symbols into symbol X table. X 3) Run through second time, turning it into machine code X and looking up symbols. -- the real error phase. X*/ X#include <stdio.h> X#include <malloc.h> X#include "assem.h" X X/* symbol table */ Xstatic tag1 table[SYMBOLS]; X X/* instructions list */ Xstatic memory elements[MAXINST]; X X/* declaring the functions */ Xtokenlist *tokenize(); X X/* top level connections for assembler hooks up tokenize, parse, lookup X and output so that they can be written independently (no global X variables in this program */ Xassemble(infile, outfile) XFILE *infile,*outfile; X{ X tokenlist *head; X int i; /* number of instructions */ X X head = tokenize(infile); X parse(head, table); X i = lookup(head, table, elements); X output(outfile, table, elements, i); X} X END_OF_FILE if test 1394 -ne `wc -c <'assem.c'`; then echo shar: \"'assem.c'\" unpacked with wrong size! fi # end of 'assem.c' fi if test -f 'bomb.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'bomb.rc'\" else echo shar: Extracting \"'bomb.rc'\" \(52 characters\) sed "s/^X//" >'bomb.rc' <<'END_OF_FILE' Xstart: Xmov #0 @ptr Xadd #1 ptr Xjmp start Xptr: dat #1 END_OF_FILE if test 52 -ne `wc -c <'bomb.rc'`; then echo shar: \"'bomb.rc'\" unpacked with wrong size! fi # end of 'bomb.rc' fi if test -f 'chang1.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'chang1.rc'\" else echo shar: Extracting \"'chang1.rc'\" \(201 characters\) sed "s/^X//" >'chang1.rc' <<'END_OF_FILE' X; chang 1 corewars program X mov #0 -1 X jmp -1 ;;nothing X dat +9 ;complete tester Xstart: spl -2 X spl 4 X add #-16 -3 ; nothing X mov #5 @-4 Xhelp: jmp -4 X spl 2 X jmp -1 Xfinish: next: odd: mov 0 1 Xfinito: END_OF_FILE if test 201 -ne `wc -c <'chang1.rc'`; then echo shar: \"'chang1.rc'\" unpacked with wrong size! fi # end of 'chang1.rc' fi if test -f 'commando.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'commando.rc'\" else echo shar: Extracting \"'commando.rc'\" \(279 characters\) sed "s/^X//" >'commando.rc' <<'END_OF_FILE' X;;; an implementation of a k dewdney's commando program X Xcount: dat #14 Xptr: dat #200 Ximps: mov #0 -1 ; imp stomper X jmp imps X mov #14 count X mov #100 ptr Xstart: mov imp 1000 X spl 999 Xloop: mov @count @ptr X sub #1 ptr X djn loop count X add #4 ptr X spl @ptr X jmp imps Ximp: mov 0 1 END_OF_FILE if test 279 -ne `wc -c <'commando.rc'`; then echo shar: \"'commando.rc'\" unpacked with wrong size! fi # end of 'commando.rc' fi if test -f 'dwarf.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dwarf.rc'\" else echo shar: Extracting \"'dwarf.rc'\" \(43 characters\) sed "s/^X//" >'dwarf.rc' <<'END_OF_FILE' X dat -1 Xstart: add #5 -1 Xmov #0 @-2 XJMP -2 END_OF_FILE if test 43 -ne `wc -c <'dwarf.rc'`; then echo shar: \"'dwarf.rc'\" unpacked with wrong size! fi # end of 'dwarf.rc' fi if test -f 'dwarfgun.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'dwarfgun.rc'\" else echo shar: Extracting \"'dwarfgun.rc'\" \(549 characters\) sed "s/^X//" >'dwarfgun.rc' <<'END_OF_FILE' X;;; dwarfgun program. X;;; Choon Piaw Xstomp: mov #0 -1 X jmp stomp Xstart: spl init X jmp stomp Xcount: dat #4 Xptr: dat #500 X X;;;; dwarf part X Xdwf: dat #5000 Xloop: mov #0 @dwf X djn loop dwf X;;; initialization Xinit: mov #-200 ptr2 X mov #0 count2 X mov #500 ptr X mov #4 count X;;; dwarf copy part Xdwfcp: mov @count @ptr X sub #1 ptr X djn dwfcp count X add #3 ptr X spl @ptr ; leave dwarf running. X;;;; copy self upstream Xselfcp: mov @count2 @ptr2 X sub #1 count2 X sub #1 ptr2 X cmp count2 #-27 X jmp selfcp X add #3 ptr2 X jmp @ptr2 Xptr2: dat #-200 Xcount2: dat #0 END_OF_FILE if test 549 -ne `wc -c <'dwarfgun.rc'`; then echo shar: \"'dwarfgun.rc'\" unpacked with wrong size! fi # end of 'dwarfgun.rc' fi if test -f 'gemini.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'gemini.rc'\" else echo shar: Extracting \"'gemini.rc'\" \(95 characters\) sed "s/^X//" >'gemini.rc' <<'END_OF_FILE' Xdat #0 Xdat #99 Xstart: mov @-2 @-1 Xcmp -3 #9 Xjmp 4 Xadd #1 -5 Xadd #1 -5 Xjmp -5 Xmov #99 93 Xjmp 93 END_OF_FILE if test 95 -ne `wc -c <'gemini.rc'`; then echo shar: \"'gemini.rc'\" unpacked with wrong size! fi # end of 'gemini.rc' fi if test -f 'imp.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'imp.rc'\" else echo shar: Extracting \"'imp.rc'\" \(15 characters\) sed "s/^X//" >'imp.rc' <<'END_OF_FILE' Xstart: mov 0 1 END_OF_FILE if test 15 -ne `wc -c <'imp.rc'`; then echo shar: \"'imp.rc'\" unpacked with wrong size! fi # end of 'imp.rc' fi if test -f 'impstomp.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'impstomp.rc'\" else echo shar: Extracting \"'impstomp.rc'\" \(28 characters\) sed "s/^X//" >'impstomp.rc' <<'END_OF_FILE' Xstart: mov #0 -1 X jmp start END_OF_FILE if test 28 -ne `wc -c <'impstomp.rc'`; then echo shar: \"'impstomp.rc'\" unpacked with wrong size! fi # end of 'impstomp.rc' fi if test -f 'interp.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'interp.c'\" else echo shar: Extracting \"'interp.c'\" \(0 characters\) sed "s/^X//" >'interp.c' <<'END_OF_FILE' END_OF_FILE if test 0 -ne `wc -c <'interp.c'`; then echo shar: \"'interp.c'\" unpacked with wrong size! fi # end of 'interp.c' fi if test -f 'interp.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'interp.h'\" else echo shar: Extracting \"'interp.h'\" \(961 characters\) sed "s/^X//" >'interp.h' <<'END_OF_FILE' X/* MARS redcode interpreter: X Header file X Started December '88 X Na Choon Piaw */ X X/* instruction set */ Xtypedef enum { dat, mov, add, sub, jmp, jmz, jmn, djn, cmp, spl } instr; X X/* addressing modes */ Xtypedef enum { immed, direct, indirect } mode; X X/* this is the new definition of a memory cell */ Xtypedef struct X{ X instr inst; /* instruction */ X int para1, para2; /* first parameter, second parameter */ X mode m1, m2; /* addressing modes */ X int lastmod; /* last modified by */ X} cell; X X/* old assembler definition of memory cell */ Xtypedef struct X{ X instr inst; X int para1, para2; X mode m1, m2; X} memory; X X/* doubly circularly linked list for streams of execution */ Xtypedef struct tag0 X{ X int pc; /* program counter */ X struct tag0 *next, *prev; X} stream; X X/* interpreter limits */ X#define MAXINST 200 /* maximum number of instructions */ X#define SIZE 8000 /* size of array */ X#define MAXPLAY 3 /* maximum number of players */ X#define RANDIVISOR 33 END_OF_FILE if test 961 -ne `wc -c <'interp.h'`; then echo shar: \"'interp.h'\" unpacked with wrong size! fi # end of 'interp.h' fi if test -f 'mice.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mice.rc'\" else echo shar: Extracting \"'mice.rc'\" \(232 characters\) sed "s/^X//" >'mice.rc' <<'END_OF_FILE' X; mouse program --- The First Core War tournament X Xptr: dat #0 ;hell Xstart: mov #9 ptr ;you Xloop: mov @ptr @7 ;know X sub #1 6 X djn loop ptr ;i hate testing X add #1 4 X spl @3 ;assemblers X add #653 2 ;like X jmz -7 -8 ;this X dat 833 END_OF_FILE if test 232 -ne `wc -c <'mice.rc'`; then echo shar: \"'mice.rc'\" unpacked with wrong size! fi # end of 'mice.rc' fi if test -f 'selfcpy.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'selfcpy.rc'\" else echo shar: Extracting \"'selfcpy.rc'\" \(164 characters\) sed "s/^X//" >'selfcpy.rc' <<'END_OF_FILE' Ximps: mov #0 -1 X jmp imps Xstart: spl imps X jmp loop Xcount: dat #7 Xptr: dat #57 X mov #7 count X mov #57 ptr Xloop: mov @count @ptr X sub #1 ptr X djn loop count X jmp 46 END_OF_FILE if test 164 -ne `wc -c <'selfcpy.rc'`; then echo shar: \"'selfcpy.rc'\" unpacked with wrong size! fi # end of 'selfcpy.rc' fi if test -f 'sit.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'sit.rc'\" else echo shar: Extracting \"'sit.rc'\" \(17 characters\) sed "s/^X//" >'sit.rc' <<'END_OF_FILE' Xstart: jmp start END_OF_FILE if test 17 -ne `wc -c <'sit.rc'`; then echo shar: \"'sit.rc'\" unpacked with wrong size! fi # end of 'sit.rc' fi if test -f 'test.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'test.c'\" else echo shar: Extracting \"'test.c'\" \(104 characters\) sed "s/^X//" >'test.c' <<'END_OF_FILE' Xmain() X{ X int i, j; X X for (i = 0; i <8000;) X { X for (j = 0; j < 10; j++, i++) X printf("%d", j); X } X} END_OF_FILE if test 104 -ne `wc -c <'test.c'`; then echo shar: \"'test.c'\" unpacked with wrong size! fi # end of 'test.c' fi if test -f 'testspl.rc' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'testspl.rc'\" else echo shar: Extracting \"'testspl.rc'\" \(51 characters\) sed "s/^X//" >'testspl.rc' <<'END_OF_FILE' Xstart: spl after X mov #0 -3 X jmp -1 Xafter: mov 0 1 END_OF_FILE if test 51 -ne `wc -c <'testspl.rc'`; then echo shar: \"'testspl.rc'\" unpacked with wrong size! fi # end of 'testspl.rc' fi echo shar: End of archive 2 \(of 2\). cp /dev/null ark2isdone MISSING="" for I in 1 2 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked both archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0