Commit | Line | Data |
---|---|---|
e1f7f2fb MT |
1 | /* |
2 | * Make the uba interrupt file ubglue.s | |
991b6483 | 3 | * mkubglue.c 1.5 82/06/16 |
e1f7f2fb MT |
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 | ||
f44e7999 | 14 | fp = fopen(path("ubglue.s"), "w"); |
cc03da8f BJ |
15 | if (fp == NULL) { |
16 | perror(path("ubglue.s")); | |
17 | exit(1); | |
18 | } | |
e1f7f2fb MT |
19 | for (dp = dtab ; dp != NULL; dp = dp->d_next) |
20 | { | |
21 | mp = dp->d_conn; | |
22 | if (mp != NULL && mp != -1 && !eq(mp->d_name, "mba")) | |
23 | { | |
08f9a943 BJ |
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 | } | |
e1f7f2fb MT |
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) | |
991b6483 | 56 | fprintf(fp, "\tmovl\t$%d,r0\n\tjmp\t_dzdma\n\n", number); |
e1f7f2fb MT |
57 | else |
58 | { | |
59 | fprintf(fp, "\tpushl\t$%d\n", number); | |
60 | fprintf(fp, "\tcalls\t$1,_%s\n\tpopr\t$0x3f\n\trei\n\n", vector); | |
61 | } | |
62 | } |