Commit | Line | Data |
---|---|---|
524aa063 SL |
1 | #ifndef lint |
2 | static char sccsid[] = "@(#)mkubglue.c 1.11 (Berkeley) %G%"; | |
3 | #endif | |
ba6a61e0 | 4 | |
e1f7f2fb MT |
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 | { | |
22d68ad0 BJ |
14 | register FILE *fp; |
15 | register struct device *dp, *mp; | |
e1f7f2fb | 16 | |
22d68ad0 BJ |
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 | } | |
08f9a943 | 38 | } |
e1f7f2fb | 39 | } |
22d68ad0 | 40 | (void) fclose(fp); |
e1f7f2fb MT |
41 | } |
42 | ||
43 | /* | |
22d68ad0 | 44 | * print an interrupt vector |
e1f7f2fb | 45 | */ |
e1f7f2fb | 46 | dump_vec(fp, vector, number) |
22d68ad0 BJ |
47 | register FILE *fp; |
48 | char *vector; | |
49 | int number; | |
e1f7f2fb | 50 | { |
22d68ad0 BJ |
51 | char nbuf[80]; |
52 | register char *v = nbuf; | |
e1f7f2fb | 53 | |
22d68ad0 BJ |
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) | |
a71ca461 | 58 | fprintf(fp, "\tmovl\t$%d,r0\n\tjmp\tdzdma\n\n", number); |
22d68ad0 | 59 | else { |
a71ca461 SL |
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 | } | |
dde2b2cb | 65 | fprintf(fp, "\tpushl\t$%d\n", number); |
c1531e50 SL |
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"); | |
22d68ad0 | 69 | } |
e1f7f2fb | 70 | } |