|
|
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: if (machine == MACHINE_VAX) ! 29: vax_vec(fp, id->id, dp->d_unit); ! 30: else if (machine == MACHINE_SUN2 || ! 31: machine == MACHINE_SUN3) ! 32: sun_vec(fp, id->id, dp->d_unit); ! 33: break; ! 34: } ! 35: if (!strcmp(id->id, id2->id)) ! 36: break; ! 37: } ! 38: } ! 39: } ! 40: } ! 41: fclose(fp); ! 42: } ! 43: ! 44: /* ! 45: * vax_vec ! 46: * Print an interrupt vector for the vax ! 47: */ ! 48: vax_vec(fp, vector, number) ! 49: register FILE *fp; ! 50: char *vector; ! 51: int number; ! 52: { ! 53: char nbuf[80]; ! 54: register char *v = nbuf; ! 55: ! 56: sprintf(v, "%s%d", vector, number); ! 57: fprintf(fp, "\t.globl\t_X%s\n\t.align\t2\n_X%s:\n\tpushr\t$0x3f\n", v, v); ! 58: if (strncmp(vector, "dzx", 3) == 0) ! 59: fprintf(fp, "\tmovl\t$%d,r0\n\tjbr\t_dzdma\n\n", number); ! 60: else ! 61: { ! 62: fprintf(fp, "\tpushl\t$%d\n", number); ! 63: fprintf(fp, "\tcalls\t$1,_%s\n\tpopr\t$0x3f\n", vector); ! 64: /* meter unibus interrupts on 750 and 730 */ ! 65: fprintf(fp, "#if defined(VAX750) || defined(VAXZZ)\n"); ! 66: fprintf(fp, "\tincl\t_cnt+V_INTR\n"); ! 67: fprintf(fp, "#endif\n"); ! 68: fprintf(fp, "\trei\n\n"); ! 69: } ! 70: } ! 71: ! 72: /* ! 73: * sun_vec ! 74: * Print an interrupt vector for the sun ! 75: */ ! 76: sun_vec(fp, vector, number) ! 77: register FILE *fp; ! 78: char *vector; ! 79: int number; ! 80: { ! 81: static firsttime = 1; ! 82: ! 83: if (firsttime) { ! 84: fprintf(fp, "#include \"../machine/asm_linkage.h\"\n\n"); ! 85: firsttime = 0; ! 86: } ! 87: ! 88: fprintf(fp, "\tVECINTR(_X%s%d, _%s, _V%s%d)\n", ! 89: vector, number, vector, vector, number); ! 90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.