|
|
1.1 ! root 1: /* ! 2: * write system control block ! 3: */ ! 4: ! 5: #include <libc.h> ! 6: #include "mkconf.h" ! 7: ! 8: #define SVSIZE 4 /* size of an scb vector */ ! 9: ! 10: writlow(f) ! 11: char *f; ! 12: { ! 13: int fd; ! 14: register Scb *sp; ! 15: register int ssize; ! 16: register int i; ! 17: register Dev *dp; ! 18: ! 19: if ((fd = creat(f, 0666)) < 0) { ! 20: perror(f); ! 21: exit(1); ! 22: } ! 23: /* ! 24: * system control block ! 25: */ ! 26: fprint(fd, "\t.text\n\t.align 9\n\t.set INTSTACK,1\n"); ! 27: fprint(fd, "\t.globl\tscb\nscb:\n"); ! 28: for (ssize = 0, sp = llist; sp; ssize = sp->offset+SVSIZE, sp = sp->next) { ! 29: for (; ssize < sp->offset; ssize += SVSIZE) ! 30: fprint(fd, "\t.long straycatch+0x%x+INTSTACK\n", ssize); ! 31: fprint(fd, "\t.long %s%s\n", sp->name, sp->type == SINTR ? "+INTSTACK" : ""); ! 32: } ! 33: while ((ssize & 0x1fc) != 0) { ! 34: fprint(fd, "\t.long straycatch+0x%x+INTSTACK\n", ssize); ! 35: ssize += SVSIZE; ! 36: } ! 37: /* ! 38: * stray catching stuff ! 39: */ ! 40: fprint(fd, "\t.globl\tstraycatch\nstraycatch:\n"); ! 41: for (i = 0; i < ssize; i += SVSIZE) ! 42: fprint(fd, "\t.align 2; bsbw stray\n"); ! 43: /* ! 44: * trampoline, because assembler can't cope with global bsbw ! 45: */ ! 46: fprint(fd, "stray:\tjmp Xstray\n"); ! 47: /* ! 48: * interface routines ! 49: */ ! 50: for (dp = dlist; dp; dp = dp->next) ! 51: (*acode[dp->mdev->atype].putvec)(fd, dp); ! 52: close(fd); ! 53: } ! 54: ! 55: stdputvec(fd, dp, name, ix) ! 56: int fd; ! 57: Dev *dp; ! 58: char *name; ! 59: int ix; ! 60: { ! 61: Mdev *mp; ! 62: ! 63: mp = dp->mdev; ! 64: if (mp->flags & FRAWVEC) ! 65: return; ! 66: fprint(fd, "\t.align 2\n.globl _%s%dint\n%s:\n", mp->tag, ix, name); ! 67: fprint(fd, "\tpushr\t$0x3f\n"); ! 68: if (dp->id == 0) ! 69: fprint(fd, "\tclrl\t-(sp)\n"); ! 70: else ! 71: fprint(fd, "\tpushl\t$%d\n", dp->id); ! 72: fprint(fd, "\tcalls\t$1,_%s%dint\n", mp->tag, ix); ! 73: fprint(fd, "\tpopr\t$0x3f\n\trei\n"); ! 74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.