Annotation of 42BSD/etc/config/mkubglue.c, revision 1.1

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

unix.superglobalmegacorp.com

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