Annotation of researchv10no/cmd/config/mkubglue.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Make the uba interrupt file ubglue.s
        !             3:  *     mkubglue.c      1.4     81/05/22
        !             4:  */
        !             5: #include <stdio.h>
        !             6: #include "config.h"
        !             7: #include "y.tab.h"
        !             8: 
        !             9: ubglue()
        !            10: {
        !            11:     register FILE *fp;
        !            12:     register struct device *dp, *mp;
        !            13: 
        !            14:     fp = fopen(LOCAL("ubglue.s"), "w");
        !            15:     if (fp == NULL) {
        !            16:        perror(LOCAL("ubglue.s"));
        !            17:        exit(1);
        !            18:     }
        !            19:     for (dp = dtab ; dp != NULL; dp = dp->d_next)
        !            20:     {
        !            21:        mp = dp->d_conn;
        !            22:        if (mp != NULL && mp != TO_NEXUS && !eq(mp->d_name, "mba"))
        !            23:        {
        !            24:            struct idlst *id, *id2;
        !            25:            for (id = dp->d_vec; id; id = id->id_next) {
        !            26:                for (id2 = dp->d_vec; id2; id2 = id2->id_next) {
        !            27:                    if (id2 == id) {
        !            28:                        dump_vec(fp, id->id, dp->d_unit);
        !            29:                        break;
        !            30:                    }
        !            31:                    if (!strcmp(id->id, id2->id))
        !            32:                        break;
        !            33:                }
        !            34:            }
        !            35:        }
        !            36:     }
        !            37:     fclose(fp);
        !            38: }
        !            39: 
        !            40: /*
        !            41:  * dump_vec
        !            42:  *     Print an interrupt vector
        !            43:  */
        !            44: 
        !            45: dump_vec(fp, vector, number)
        !            46: register FILE *fp;
        !            47: char *vector;
        !            48: int number;
        !            49: {
        !            50:     char nbuf[80];
        !            51:     register char *v = nbuf;
        !            52: 
        !            53:     sprintf(v, "%s%d", vector, number);
        !            54:     fprintf(fp, "\t.globl\t_X%s\n\t.align\t2\n_X%s:\n\tpushr\t$0x3f\n", v, v);
        !            55:     if (strncmp(vector, "dzx", 3) == 0)
        !            56:        fprintf(fp, "\tmovl\t$%d,r0\n\tjbr\t_dzdma\n\n", number);
        !            57:     else
        !            58:     {
        !            59:        fprintf(fp, "\tpushl\t$%d\n", number);
        !            60:        fprintf(fp, "\tcalls\t$1,_%s\n\tpopr\t$0x3f\n", vector);
        !            61:        /* meter unibus interrupts on 750 and 730 */
        !            62:        fprintf(fp, "#if defined(VAX750) || defined(VAXZZ)\n");
        !            63:        fprintf(fp, "\tincl\t_cnt+V_INTR\n");
        !            64:        fprintf(fp, "#endif\n");
        !            65:        fprintf(fp, "\trei\n\n");
        !            66:     }
        !            67: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.