Annotation of researchv10no/cmd/config/mkubglue.c, revision 1.1.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.