remove unused version of ncr53cxxx.c
authorjsg <jsg@openbsd.org>
Wed, 4 Jan 2023 13:08:23 +0000 (13:08 +0000)
committerjsg <jsg@openbsd.org>
Wed, 4 Jan 2023 13:08:23 +0000 (13:08 +0000)
ok deraadt@ miod@

sys/dev/microcode/ncr53cxxx/ncr53cxxx.c [deleted file]

diff --git a/sys/dev/microcode/ncr53cxxx/ncr53cxxx.c b/sys/dev/microcode/ncr53cxxx/ncr53cxxx.c
deleted file mode 100644 (file)
index 0926a84..0000000
+++ /dev/null
@@ -1,1165 +0,0 @@
-/*     $OpenBSD: ncr53cxxx.c,v 1.4 2003/04/06 18:54:20 ho Exp $        */
-
-/*
- * Copyright (c) 1995 Michael L. Hitch
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *      This product includes software developed by Michael L. Hitch.
- * 4. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*     scc.c   - SCSI SCRIPTS Compiler         */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef AMIGA
-#define strcmpi        strcasecmp
-#endif
-
-#define        MAXTOKENS       16
-#define        MAXINST         1024
-#define        MAXSYMBOLS      128
-
-struct {
-       long    type;
-       char    *name;
-} tokens[MAXTOKENS];
-int    ntokens;
-int    tokenix;
-
-void   f_proc (void);
-void   f_pass (void);
-void   f_list (void);          /* ENTRY, EXTERNAL label list */
-void   f_define (void);        /* ABSOLUTE, RELATIVE label list */
-void   f_move (void);
-void   f_jump (void);
-void   f_call (void);
-void   f_return (void);
-void   f_int (void);
-void   f_select (void);
-void   f_reselect (void);
-void   f_wait (void);
-void   f_disconnect (void);
-void   f_set (void);
-void   f_clear (void);
-void   f_arch (void);
-
-struct {
-       char    *name;
-       void    (*func)(void);
-} directives[] = {
-       "PROC",         f_proc,
-       "PASS",         f_pass,
-       "ENTRY",        f_list,
-       "ABSOLUTE",     f_define,
-       "EXTERN",       f_list,
-       "EXTERNAL",     f_list,
-       "RELATIVE",     f_define,
-       "MOVE",         f_move,
-       "JUMP",         f_jump,
-       "CALL",         f_call,
-       "RETURN",       f_return,
-       "INT",          f_int,
-       "SELECT",       f_select,
-       "RESELECT",     f_reselect,
-       "WAIT",         f_wait,
-       "DISCONNECT",   f_disconnect,
-       "SET",          f_set,
-       "CLEAR",        f_clear,
-       "ARCH",         f_arch,
-       NULL};
-
-unsigned long script[MAXINST];
-int    dsps;
-char   *script_name = "SCRIPT";
-unsigned long  inst0, inst1, inst2;
-unsigned long  ninsts;
-unsigned long  npatches;
-
-struct patchlist {
-       struct patchlist *next;
-       unsigned        offset;
-};
-
-#define        S_LABEL         0x0000
-#define        S_ABSOLUTE      0x0001
-#define        S_RELATIVE      0x0002
-#define        S_EXTERNAL      0x0003
-#define        F_DEFINED       0x0001
-#define        F_ENTRY         0x0002
-struct {
-       short   type;
-       short   flags;
-       unsigned long value;
-       struct patchlist *patchlist;
-       char    *name;
-} symbols[MAXSYMBOLS];
-int nsymbols;
-
-char   *stypes[] = {"Label", "Absolute", "Relative", "External"};
-
-char   *phases[] = {
-       "data_out", "data_in", "cmd", "status",
-       "res4", "res5", "msg_out", "msg_in"
-};
-
-char   *regs710[] = {
-       "scntl0",       "scntl1",       "sdid",         "sien",
-       "scid",         "sxfer",        "sodl",         "socl",
-       "sfbr",         "sidl",         "sbdl",         "sbcl",
-       "dstat",        "sstat0",       "sstat1",       "sstat2",
-       "dsa0",         "dsa1",         "dsa2",         "dsa3",
-       "ctest0",       "ctest1",       "ctest2",       "ctest3",
-       "ctest4",       "ctest5",       "ctest6",       "ctest7",
-       "temp0",        "temp1",        "temp2",        "temp3",
-       "dfifo",        "istat",        "ctest8",       "lcrc",
-       "dbc0",         "dbc1",         "dbc2",         "dcmd",
-       "dnad0",        "dnad1",        "dnad2",        "dnad3",
-       "dsp0",         "dsp1",         "dsp2",         "dsp3",
-       "dsps0",        "dsps1",        "dsps2",        "dsps3",
-       "scratch0",     "scratch1",     "scratch2",     "scratch3",
-       "dmode",        "dien",         "dwt",          "dcntl",
-       "addr0",        "addr1",        "addr2",        "addr3"
-};
-
-char   *regs720[] = {
-       "scntl0",       "scntl1",       "scntl2",       "scntl3",
-       "scid",         "sxfer",        "sdid",         "gpreg",
-       "sfbr",         "socl",         "ssid",         "sbcl",
-       "dstat",        "sstat0",       "sstat1",       "sstat2",
-       "dsa0",         "dsa1",         "dsa2",         "dsa3",
-       "istat",        "",             "",             "",
-       "ctest0",       "ctest1",       "ctest2",       "ctest3",
-       "temp0",        "temp1",        "temp2",        "temp3",
-       "dfifo",        "ctest4",       "ctest5",       "ctest6",
-       "dbc0",         "dbc1",         "dbc2",         "dcmd",
-       "dnad0",        "dnad1",        "dnad2",        "dnad3",
-       "dsp0",         "dsp1",         "dsp2",         "dsp3",
-       "dsps0",        "dsps1",        "dsps2",        "dsps3",
-       "scratcha0",    "scratcha1",    "scratcha2",    "scratcha3",
-       "dmode",        "dien",         "dwt",          "dcntl",
-       "addr0",        "addr1",        "addr2",        "addr3",
-       "sien0",        "sien1",        "sist0",        "sist1",
-       "slpar",        "swide",        "macntl",       "gpcntl",
-       "stime0",       "stime1",       "respid0",      "respid1",
-       "stest0",       "stest1",       "stest2",       "stest3",
-       "sidl0",        "sidl1",        "",             "",
-       "sodl0",        "sodl1",        "",             "",
-       "sbdl0",        "sbdl1",        "",             "",
-       "scratchb0",    "scratchb1",    "scratchb2",    "scratchb3",
-};
-
-int    lineno;
-int    err_listed;
-int    arch;
-
-char   inbuf[128];
-
-char   *sourcefile;
-char   *outputfile;
-char   *listfile;
-char   *errorfile;
-
-FILE   *infp;
-FILE   *outfp;
-FILE   *listfp;
-FILE   *errfp;
-
-void   parse (void);
-void   process (void);
-void   emit_symbols (void);
-void   list_symbols (void);
-void   errout (char *);
-void   define_symbol (char *, unsigned long, short, short);
-void   close_script (void);
-void   new_script (char *);
-void   store_inst (void);
-int    expression (int *);
-int    evaluate (int);
-int    number (char *);
-int    lookup (char *);
-int    reserved (char *, int);
-int    CheckPhase (int);
-int    CheckRegister (int);
-void   transfer (int, int);
-void   select_reselect (int);
-void   set_clear (unsigned long);
-void   block_move (void);
-void   register_write (void);
-void   memory_to_memory (void);
-void   error_line(void);
-char   *makefn(char *, char *);
-void   usage(void);
-
-main (int argc, char *argv[])
-{
-       int     i;
-
-       if (argc < 2 || argv[1][0] == '-')
-               usage();
-       sourcefile = argv[1];
-       infp = fopen (sourcefile, "r");
-       if (infp == NULL) {
-               perror ("open source");
-               fprintf (stderr, "scc: error opening source file %s\n", argv[1]);
-               exit (1);
-       }
-       /*
-        * process options
-        * -l [listfile]
-        * -o [outputfile]
-        * -z [debugfile]
-        * -e [errorfile]
-        * -a arch
-        * -v
-        * -u
-        */
-       for (i = 2; i < argc; ++i) {
-               if (argv[i][0] != '-')
-                       usage();
-               switch (argv[i][1]) {
-               case 'o':
-                       if (i + 1 >= argc || argv[i + 1][0] == '-')
-                               outputfile = makefn (sourcefile, "out");
-                       else {
-                               outputfile = argv[i + 1];
-                               ++i;
-                       }
-                       break;
-               case 'l':
-                       if (i + 1 >= argc || argv[i + 1][0] == '-')
-                               listfile = makefn (sourcefile, "lis");
-                       else {
-                               listfile = argv[i + 1];
-                               ++i;
-                       }
-                       break;
-               case 'e':
-                       if (i + 1 >= argc || argv[i + 1][0] == '-')
-                               errorfile = makefn (sourcefile, "err");
-                       else {
-                               errorfile = argv[i + 1];
-                               ++i;
-                       }
-                       break;
-               case 'a':
-                       if (i + 1 == argc)
-                               usage();
-                       arch = 0;
-                       arch = atoi(argv[i +1]);
-                       if(arch != 720 && arch != 710) {
-                               fprintf(stderr,"%s: bad arch '%s'\n",
-                                       argv[0], argv[i +1]);
-                               exit(1);
-                       }
-                       ++i;
-                       break;
-               default:
-                       fprintf (stderr, "scc: unrecognized option '%c'\n",
-                           argv[i][1]);
-                       usage();
-               }
-       }
-       if (outputfile)
-               outfp = fopen (outputfile, "w");
-       if (listfile)
-               listfp = fopen (listfile, "w");
-       if (errorfile)
-               errfp = fopen (errorfile, "w");
-       else
-               errfp = stderr;
-
-       while (fgets (inbuf, sizeof (inbuf), infp)) {
-               ++lineno;
-               if (listfp)
-                       fprintf (listfp, "%3d:  %s", lineno, inbuf);
-               err_listed = 0;
-               parse ();
-               if (ntokens) {
-#ifdef DUMP_TOKENS
-                       int     i;
-
-                       fprintf (listfp, "      %d tokens\n", ntokens);
-                       for (i = 0; i < ntokens; ++i) {
-                               fprintf (listfp, "      %d: ", i);
-                               if (tokens[i].type)
-                                       fprintf (listfp,"'%c'\n", tokens[i].type);
-                               else
-                                       fprintf (listfp, "%s\n", tokens[i].name);
-                       }
-#endif
-                       if (ntokens >= 2 && tokens[0].type == 0 &&
-                           tokens[1].type == ':') {
-                               define_symbol (tokens[0].name, dsps, S_LABEL, F_DEFINED);
-                               tokenix += 2;
-                       }
-                       if (tokenix < ntokens)
-                               process ();
-               }
-
-       }
-       close_script ();
-       emit_symbols ();
-       if (outfp) {
-               fprintf (outfp, "\nunsigned long INSTRUCTIONS = 0x%08x;\n", ninsts);
-               fprintf (outfp, "unsigned long PATCHES = 0x%08x;\n", npatches);
-       }
-       list_symbols ();
-}
-
-void emit_symbols ()
-{
-       int     i;
-       struct  patchlist *p;
-
-       if (nsymbols == 0 || outfp == NULL)
-               return;
-
-       for (i = 0; i < nsymbols; ++i) {
-               char    *code;
-               if (symbols[i].type == S_ABSOLUTE)
-                       code = "A_";
-               else if (symbols[i].type == S_RELATIVE)
-                       code = "R_";
-               else if (symbols[i].type == S_EXTERNAL)
-                       code = "E_";
-               else if (symbols[i].flags & F_ENTRY)
-                       code = "Ent_";
-               else
-                       continue;
-               fprintf (outfp, "#define\t%s%s\t0x%08x\n", code, symbols[i].name,
-                       symbols[i].value);
-               if (symbols[i].flags & F_ENTRY || symbols[i].patchlist == NULL)
-                       continue;
-               fprintf (outfp, "unsigned long %s%s_Used[] = {\n", code, symbols[i].name);
-#if 1
-               p = symbols[i].patchlist;
-               while (p) {
-                       fprintf (outfp, "\t%08x,\n", p->offset / 4);
-                       p = p->next;
-               }
-#endif
-               fprintf (outfp, "};\n\n");
-       }
-       /* patches ? */
-}
-
-void list_symbols ()
-{
-       int     i;
-
-       if (nsymbols == 0 || listfp == NULL)
-               return;
-       fprintf (listfp, "\n\nValue     Type     Symbol\n");
-       for (i = 0; i < nsymbols; ++i) {
-               fprintf (listfp, "%08x: %-8s %s\n", symbols[i].value,
-                       stypes[symbols[i].type], symbols[i].name);
-       }
-}
-
-void errout (char *text)
-{
-       error_line();
-       fprintf (errfp, "*** %s ***\n", text);
-}
-
-void parse ()
-{
-       char *p = inbuf;
-       char c;
-       char string[64];
-       char *s;
-       size_t len; 
-
-       ntokens = tokenix = 0;
-       while (1) {
-               while ((c = *p++) && c != '\n' && c <= ' ' || c == '\t')
-                       ;
-               if (c == '\n' || c == 0 || c == ';')
-                       break;
-               if (ntokens >= MAXTOKENS) {
-                       errout ("Token table full");
-                       break;
-               }
-               if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') ||
-                   (c >= 'A' && c <= 'Z') || c == '$' || c == '_') {
-                       s = string;
-                       *s++ = c;
-                       while (((c = *p) >= '0' && c <= '9') ||
-                           (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') ||
-                           c == '_' || c == '$') {
-                               *s++ = *p++;
-                       }
-                       *s = 0;
-                       len = strlen (string) + 1; 
-                       tokens[ntokens].name = malloc (len);
-                       strlcpy (tokens[ntokens].name, string, len);
-                       tokens[ntokens].type = 0;
-               }
-               else {
-                       tokens[ntokens].type = c;
-               }
-               ++ntokens;
-       }
-       return;
-}
-
-void   process ()
-{
-       int     i;
-
-       if (tokens[tokenix].type) {
-               error_line();
-               fprintf (errfp, "Error: expected directive, found '%c'\n",
-                       tokens[tokenix].type);
-               return;
-       }
-       for (i = 0; directives[i].name; ++i) {
-               if (strcmpi (directives[i].name, tokens[tokenix].name) == 0)
-                       break;
-       }
-       if (directives[i].name == NULL) {
-               error_line();
-               fprintf (errfp, "Error: expected directive, found \"%s\"\n",
-                       tokens[tokenix].name);
-               return;
-       }
-       if (directives[i].func == NULL) {
-               error_line();
-               fprintf (errfp, "No function for directive \"%s\"\n", tokens[tokenix].name);
-       } else {
-#if 0
-               fprintf (listfp, "Processing directive \"%s\"\n", directives[i].name);
-#endif
-               ++tokenix;
-               (*directives[i].func) ();
-       }
-}
-
-void define_symbol (char *name, unsigned long value, short type, short flags)
-{
-       int     i;
-       struct patchlist *p;
-       size_t  len;
-
-       for (i = 0; i < nsymbols; ++i) {
-               if (symbols[i].type == type && strcmp (symbols[i].name, name) == 0) {
-                       if (symbols[i].flags & F_DEFINED) {
-                               error_line();
-                               fprintf (errfp, "*** Symbol \"%s\" multiply defined\n",
-                                       name);
-                       } else {
-                               symbols[i].flags |= flags;
-                               symbols[i].value = value;
-                               p = symbols[i].patchlist;
-                               while (p) {
-                                       if (p->offset > dsps)
-                                               errout ("Whoops\007");
-                                       else
-                                               script[p->offset / 4] = dsps - p->offset - 4;
-                                       p = p->next;
-                               }
-                       }
-                       return;
-               }
-       }
-       if (nsymbols >= MAXSYMBOLS) {
-               errout ("Symbol table full");
-               return;
-       }
-       symbols[nsymbols].type = type;
-       symbols[nsymbols].flags = flags;
-       symbols[nsymbols].value = value;
-       symbols[nsymbols].patchlist = NULL;
-       len = strlen (name) + 1; 
-       symbols[nsymbols].name = malloc (len);
-       strlcpy (symbols[nsymbols].name, name, len);
-       ++nsymbols;
-}
-
-void close_script ()
-{
-       int     i;
-
-       if (dsps == 0)
-               return;
-       if (outfp) {
-               fprintf (outfp, "unsigned long %s[] = {\n", script_name);
-               for (i = 0; i < dsps / 4; i += 2) {
-                       fprintf (outfp, "\t0x%08x, 0x%08x", script[i],
-                               script[i + 1]);
-                       /* check for memory move instruction */
-                       if (script[i] >> 30 == 3)
-                               fprintf (outfp, ", 0x%08x,", script[i + 2]);
-                       else
-                               if ((i + 2) <= dsps / 4) fprintf (outfp, ",\t\t");
-                       fprintf (outfp, "\t/* %03x - %3d */\n", i * 4, i * 4);
-                       if (script[i] >> 30 == 3)
-                               ++i;
-               }
-               fprintf (outfp, "};\n\n");
-       }
-       dsps = 0;
-}
-
-void new_script (char *name)
-{
-       size_t len = strlen (name) + 1;
-
-       close_script ();
-       script_name = malloc (len);
-       strlcpy (script_name, name, len);
-}
-
-int    reserved (char *string, int t)
-{
-       if (tokens[t].type == 0 && strcmpi (tokens[t].name, string) == 0)
-               return (1);
-       return (0);
-}
-
-int    CheckPhase (int t)
-{
-       int     i;
-
-       for (i = 0; i < 8; ++i) {
-               if (reserved (phases[i], t)) {
-                       inst0 |= i << 24;
-                       return (1);
-               }
-       }
-       return (0);
-}
-
-int    CheckRegister (int t)
-{
-       int     i;
-
-       if(arch == 710) {
-               for (i = 0; i < 64; ++i)
-                       if (reserved (regs710[i], t))
-                               return i;
-       }
-       else if (arch == 720) {
-               for (i = 0; i < 96; ++i)
-                       if (reserved (regs720[i], t))
-                               return i;
-       }
-       else {
-               errout("'ARCH' statement missing");
-       }
-       return (-1);
-}
-
-int    expression (int *t)
-{
-       int     value;
-       int     i = *t;
-
-       value = evaluate (i++);
-       while (i < ntokens) {
-               if (tokens[i].type == '+')
-                       value += evaluate (i + 1);
-               else if (tokens[i].type == '-')
-                       value -= evaluate (i + 1);
-               else
-                       errout ("Unknown identifier");
-               i += 2;
-       }
-       *t = i;
-       return (value);
-}
-
-int    evaluate (t)
-{
-       int     value;
-       char    *name;
-
-       if (tokens[t].type) {
-               errout ("Expected an identifier");
-               return (0);
-       }
-       name = tokens[t].name;
-       if (*name >= '0' && *name <= '9')
-               value = number (name);
-       else
-               value = lookup (name);
-       return (value);
-}
-
-int    number (char *s)
-{
-       int     value;
-       int     n;
-       int     radix;
-
-       radix = 10;
-       if (*s == '0') {
-               ++s;
-               radix = 8;
-               switch (*s) {
-               case 'x':
-               case 'X':
-                       radix = 16;
-                       break;
-               case 'b':
-               case 'B':
-                       radix = 2;
-               }
-               if (radix != 8)
-                       ++s;
-       }
-       value = 0;
-       while (*s) {
-               n = *s++;
-               if (n >= '0' && n <= '9')
-                       n -= '0';
-               else if (n >= 'a' && n <= 'f')
-                       n -= 'a' - 10;
-               else if (n >= 'A' && n <= 'F')
-                       n -= 'A' - 10;
-               else {
-                       error_line();
-                       fprintf (errfp, "*** Expected digit\n", n = 0);
-               }
-               if (n >= radix)
-                       errout ("Expected digit");
-               else
-                       value = value * radix + n;
-       }
-       return (value);
-}
-
-int    lookup (char *name)
-{
-       int     i;
-       struct patchlist *p;
-       size_t  len;
-
-       for (i = 0; i < nsymbols; ++i) {
-               if (strcmp (name, symbols[i].name) == 0) {
-                       if ((symbols[i].flags & F_DEFINED) == 0) {
-                               p = (struct patchlist *) &symbols[i].patchlist;
-                               while (p->next)
-                                       p = p->next;
-                               p->next = (struct patchlist *) malloc (sizeof (struct patchlist));
-                               p = p->next;
-                               p->next = NULL;
-                               p->offset = dsps + 4;
-                       }
-                       return ((int) symbols[i].value);
-               }
-       }
-       if (nsymbols >= MAXSYMBOLS) {
-               errout ("Symbol table full");
-               return (0);
-       }
-       symbols[nsymbols].type = S_LABEL;       /* assume forward reference */
-       symbols[nsymbols].flags = 0;
-       symbols[nsymbols].value = 0;
-       p = (struct patchlist *) malloc (sizeof (struct patchlist));
-       symbols[nsymbols].patchlist = p;
-       p->next = NULL;
-       p->offset = dsps + 4;
-       len = strlen (name) + 1;
-       symbols[nsymbols].name = malloc (len);
-       strlcpy (symbols[nsymbols].name, name, len);
-       ++nsymbols;
-       return (0);
-}
-
-void   f_arch (void)
-{
-       int i, archsave;
-
-       i = tokenix;
-
-       archsave = arch;
-       arch = 0;
-       arch = atoi(tokens[i].name);
-       if( arch != 710 && arch != 720) {
-               errout("Unrecognized ARCH");
-               arch = archsave;
-       }
-}
-
-void   f_proc (void)
-{
-       if (tokens[tokenix].type != 0 || tokens[tokenix + 1].type != ':')
-               errout ("Invalid PROC statement");
-       else
-               new_script (tokens[tokenix].name);
-}
-
-void   f_pass (void)
-{
-       errout ("PASS option not implemented");
-}
-
-/*
- *     f_list:  process list of symbols for the ENTRY and EXTERNAL directive
- */
-
-void   f_list (void)
-{
-       int     i;
-       short   type;
-       short   flags;
-
-       type = strcmpi (tokens[tokenix-1].name, "ENTRY") ? S_EXTERNAL : S_LABEL;
-       flags = type == S_LABEL ? F_ENTRY : 0;
-       for (i = tokenix; i < ntokens; ++i) {
-               if (tokens[i].type != 0) {
-                       errout ("Expected an identifier");
-                       return;
-               }
-               define_symbol (tokens[i].name, 0, type, flags);
-               if (i + 1 < ntokens) {
-                       if (tokens[++i].type == ',')
-                               continue;
-                       errout ("Expected a separator");
-                       return;
-               }
-       }
-}
-
-/*
- *     f_define:       process list of definitions for ABSOLUTE and RELATIVE directive
- */
-
-void   f_define (void)
-{
-       int     i;
-       char    *name;
-       unsigned long value;
-       int     type;
-
-       type = strcmpi (tokens[tokenix-1].name, "ABSOLUTE") ? S_RELATIVE : S_ABSOLUTE;
-       i = tokenix;
-       while (i < ntokens) {
-               if (tokens[i].type) {
-                       errout ("Expected an identifier");
-                       return;
-               }
-               if (tokens[i + 1].type != '=') {
-                       errout ("Expected a separator");
-                       return;
-               }
-               name = tokens[i].name;
-               i += 2;
-               value = expression (&i);
-               define_symbol (name, value, type, F_DEFINED);
-       }
-}
-
-void   store_inst ()
-{
-       int     i = dsps / 4;
-       int     l = 8;
-
-       if ((inst0 & 0xc0000000) == 0xc0000000)
-               l = 12;                 /* Memory to memory move is 12 bytes */
-       if ((dsps + l) / 4 > MAXINST) {
-               errout ("Instruction table overflow");
-               return;
-       }
-       script[i++] = inst0;
-       script[i++] = inst1;
-       if (l == 12)
-               script[i] = inst2;
-       if (listfp) {
-               fprintf (listfp, "\t%04x: %08x %08x", dsps, inst0, inst1);
-               if (l == 12)
-                       fprintf (listfp, " %08x", inst2);
-               fprintf (listfp, "\n");
-       }
-       dsps += l;
-       inst0 = inst1 = inst2 = 0;
-       ++ninsts;
-}
-
-void   f_move (void)
-{
-       if (reserved ("memory", tokenix))
-               memory_to_memory ();
-       else if (reserved ("from", tokenix) || tokens[tokenix+1].type == ',')
-               block_move ();
-       else
-               register_write ();
-       store_inst ();
-}
-
-void   f_jump (void)
-{
-       transfer (0x80000000, 0);
-}
-
-void   f_call (void)
-{
-       transfer (0x88000000, 0);
-}
-
-void   f_return (void)
-{
-       transfer (0x90000000, 1);
-}
-
-void   f_int (void)
-{
-       transfer (0x98000000, 2);
-}
-
-void   f_select (void)
-{
-       int     t = tokenix;
-
-       if (reserved ("atn", t)) {
-               inst0 = 0x01000000;
-               ++t;
-       }
-       select_reselect (t);
-}
-
-void   f_reselect (void)
-{
-       select_reselect (tokenix);
-}
-
-void   f_wait (void)
-{
-       int     i = tokenix;
-
-       inst1 = 0;
-       if (reserved ("disconnect", i)) {
-               inst0 = 0x48000000;
-       }
-       else {
-               if (reserved ("reselect", i))
-                       inst0 = 0x50000000;
-               else if (reserved ("select", i))
-                       inst0 = 0x50000000;
-               else
-                       errout ("Expected SELECT or RESELECT");
-               ++i;
-               if (reserved ("rel", i)) {
-                       i += 2;
-                       inst1 = evaluate (i) - dsps - 8;
-                       inst0 |= 0x04000000;
-               }
-               else
-                       inst1 = evaluate (i);
-       }
-       store_inst ();
-}
-
-void   f_disconnect (void)
-{
-       inst0 = 0x48000000;
-       store_inst ();
-}
-
-void   f_set (void)
-{
-       set_clear (0x58000000);
-}
-
-void   f_clear (void)
-{
-       set_clear (0x60000000);
-}
-
-void   transfer (int word0, int type)
-{
-       int     i;
-
-       i = tokenix;
-       inst0 = word0;
-       if (type == 0 && reserved ("rel", i)) {
-               inst1 = evaluate (i + 2) - dsps - 8;
-               i += 3;
-               inst0 |= 0x00800000;
-       }
-       else if (type != 1) {
-               inst1 = evaluate (i);
-       }
-       ++i;
-       if (i >= ntokens) {
-               inst0 |= 0x00080000;
-               store_inst ();
-               return;
-       }
-       if (tokens[i].type != ',')
-               errout ("Expected a separator, ',' assumed");
-       else
-               ++i;
-       if (reserved("when", i))
-               inst0 |= 0x00010000;
-       else if (reserved ("if", i) == 0) {
-               errout ("Expected a reserved word");
-               store_inst ();
-               return;
-       }
-       if (reserved ("not", ++i))
-               ++i;
-       else
-               inst0 |= 0x00080000;
-       if (reserved ("atn", i)) {
-               inst0 |= 0x00020000;
-               ++i;
-       } else if (CheckPhase (i)) {
-               inst0 |= 0x00020000;
-               ++i;
-       }
-       if (i < ntokens && tokens[i].type != ',') {
-               if (inst0 & 0x00020000) {
-                       if (inst0 & 0x00080000 && reserved ("and", i)) {
-                               ++i;
-                       }
-                       else if ((inst0 & 0x00080000) == 0 && reserved ("or", i)) {
-                               ++i;
-                       }
-                       else
-                               errout ("Expected a reserved word");
-               }
-               inst0 |= 0x00040000 + (evaluate (i++) & 0xff);
-       }
-       if (i < ntokens) {
-               if (tokens[i].type == ',')
-                       ++i;
-               else
-                       errout ("Expected a separator, ',' assumed");
-               if (reserved ("and", i) && reserved ("mask", i + 1))
-                       inst0 |= ((evaluate (i + 2) & 0xff) << 8);
-               else
-                       errout ("Expected , AND MASK");
-       }
-       store_inst ();
-}
-
-void   select_reselect (int t)
-{
-       inst0 |= 0x40000000;            /* ATN may be set from SELECT */
-       if (reserved ("from", t)) {
-               ++t;
-               inst0 |= 0x02000000 | evaluate (t++);
-       }
-       else
-               inst0 |= (evaluate (t++) & 0xff) << 16;
-       if (tokens[t++].type == ',') {
-               if (reserved ("rel", t)) {
-                       inst0 |= 0x04000000;
-                       inst1 = evaluate (t + 2) - dsps - 8;
-               }
-               else
-                       inst1 = evaluate (t);
-       }
-       else
-               errout ("Expected separator");
-       store_inst ();
-}
-
-void   set_clear (unsigned long code)
-{
-       int     i = tokenix;
-       short   need_and = 0;
-
-       inst0 = code;
-       while (i < ntokens) {
-               if (need_and) {
-                       if (reserved ("and", i))
-                               ++i;
-                       else
-                               errout ("Expected AND");
-               }
-               if (reserved ("atn", i)) {
-                       inst0 |= 0x0008;
-                       ++i;
-               }
-               else if (reserved ("ack", i)) {
-                       inst0 |= 0x0040;
-                       ++i;
-               }
-               else if (reserved ("target", i)) {
-                       inst0 |= 0x0200;
-                       ++i;
-               }
-               else
-                       errout ("Expected ATN, ACK, or TARGET");
-               need_and = 1;
-       }
-       store_inst ();
-}
-
-void   block_move ()
-{
-       int     t;
-
-       if (reserved ("from", tokenix)) {
-               inst1 = evaluate (tokenix+1);
-               inst0 |= 0x10000000 | inst1;    /*** ??? to match Zeus script */
-               tokenix += 2;
-       }
-       else {
-               inst0 |= evaluate (tokenix++);  /* count */
-               tokenix++;                      /* skip ',' */
-               if (reserved ("ptr", tokenix)) {
-                       ++ tokenix;
-                       inst0 |= 0x20000000;
-               }
-               inst1 = evaluate (tokenix++);   /* address */
-       }
-       if (tokens[tokenix].type != ',')
-               errout ("Expected separator");
-       if (reserved ("when", tokenix + 1)) {
-               inst0 |= 0x08000000;
-               CheckPhase (tokenix + 2);
-       }
-       else if (reserved ("with", tokenix + 1)) {
-               CheckPhase (tokenix + 2);
-       }
-       else
-               errout ("Expected WITH or WHEN");
-}
-
-void   register_write ()
-{
-       /*
-        * MOVE reg/data8 TO reg                        register write
-        * MOVE reg <op> data8 TO reg                   register write
-        */
-       int     op;
-       int     reg;
-       int     data;
-
-       if (reserved ("to", tokenix+1))
-               op = 0;
-       else if (tokens[tokenix+1].type == '|')
-               op = 1;
-       else if (tokens[tokenix+1].type == '&')
-               op = 2;
-       else if (tokens[tokenix+1].type == '+')
-               op = 3;
-       else if (tokens[tokenix+1].type == '-')
-               op = 4;
-       else
-               errout ("Unknown register operator");
-       if (op && reserved ("to", tokenix+3) == 0)
-               errout ("Register command expected TO");
-       reg = CheckRegister (tokenix);
-       if (reg < 0) {                  /* Not register, must be data */
-               data = evaluate (tokenix);
-               if (op)
-                       errout ("Register operator not move");
-               reg = CheckRegister (tokenix+2);
-               if (reg < 0)
-                       errout ("Expected register");
-               inst0 = 0x78000000 | (data << 8) | reg;
-#if 0
-fprintf (listfp, "Move data to register: %02x %d\n", data, reg);
-#endif
-       }
-       else if (op) {                  /* A register read/write operator */
-               data = evaluate (tokenix+2);
-               if (op == 4) {
-                       data = -data;
-                       op = 3;
-               }
-               inst0 = (data & 0xff) << 8;
-               data = CheckRegister (tokenix+4);
-               if (data < 0)
-                       errout ("Expected register");
-               if (reg != data && reg != 8 && data != 8)
-                       errout ("One register MUST be SBFR");
-               if (reg == data) {      /* A register read/modify/write */
-#if 0
-fprintf (listfp, "Read/modify register: %02x %d %d\n", inst0 >> 8, op, reg);
-#endif
-                       inst0 |= 0x78000000 | (op << 25) | (reg << 16);
-               }
-               else {                  /* A move to/from SFBR */
-                       if (reg == 8) { /* MOVE SFBR <> TO reg */
-#if 0
-fprintf (listfp, "Move SFBR to register: %02x %d %d\n", inst0 >> 8, op, data);
-#endif
-                               inst0 |= 0x68000000 | (op << 25) | (data << 16);
-                       }
-                       else {
-#if 0
-fprintf (listfp, "Move register to SFBR: %02x %d %d\n", inst0 >> 8, op, reg);
-#endif
-                               inst0 |= 0x70000000 | (op << 25) | (reg << 16);
-                       }
-               }
-       }
-       else {                          /* register to register */
-               data = CheckRegister (tokenix+2);
-               if (reg == 8)           /* move SFBR to reg */
-                       inst0 = 0x6a000000 | (data << 16);
-               else if (data == 8)     /* move reg to SFBR */
-                       inst0 = 0x72000000 | (reg << 16);
-               else
-                       errout ("One register must be SFBR");
-       }
-}
-
-void   memory_to_memory ()
-{
-       inst0 = 0xc0000000 + evaluate (tokenix+1);
-       inst1 = evaluate (tokenix+3);
-       inst2 = evaluate (tokenix+5);
-}
-
-void   error_line()
-{
-       if (errfp != listfp && errfp && err_listed == 0) {
-               fprintf (errfp, "%3d:  %s", lineno, inbuf);
-               err_listed = 1;
-       }
-}
-
-char * makefn (base, sub)
-       char *base;
-       char *sub;
-{
-       char *fn;
-       size_t len = strlen (base) + strlen (sub) + 2; 
-
-       fn = malloc (len);
-       strlcpy (fn, base, len);
-       base = strrchr(fn, '.');
-       if (base)
-               *base = 0;
-       strlcat (fn, ".", len);
-       strlcat (fn, sub, len);
-       return (fn);
-}
-
-void   usage()
-{
-       fprintf (stderr, "usage: scc sourcfile [options]\n");
-       exit(1);
-}