Annotation of researchv10no/sys/mkconf/writlow.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.