Annotation of researchv10no/cmd/kasb/kas3.c, revision 1.1

1.1     ! root        1: /* @(#)kas3.c  1.2 */
        !             2: #undef vax
        !             3: #define        pdp11   1
        !             4: #include <stdio.h>
        !             5: #include "a.out.h"
        !             6: #include <sys/kmc.h>
        !             7: #include "kas.h"
        !             8: 
        !             9: debug(in, x)
        !            10: union {
        !            11:        int     val;
        !            12:        char *  ptr;
        !            13: } x;
        !            14: {
        !            15:        register i, j, cnt;
        !            16:        int     flag, fd;
        !            17:        char    s[8];
        !            18: #ifdef vax
        !            19:        struct filehdr fhdr;
        !            20:        struct aouthdr hdr;
        !            21:        extern struct scnhdr scn;
        !            22: #define        a_magic magic
        !            23: #define        a_text  tsize
        !            24: #define        a_data  dsize
        !            25: #endif
        !            26: #ifdef pdp11
        !            27:        extern struct exec hdr;
        !            28: #endif
        !            29: 
        !            30:        if (dbmode==0) {
        !            31:                yyerror("not in debug mode");
        !            32:                return;
        !            33:        }
        !            34:        switch(in) {
        !            35:        case DLOAD:
        !            36:                if (x.ptr == 0)
        !            37:                        x.ptr = "a.out";
        !            38:                if ((fd = open(x.ptr, 0))<0) {
        !            39:                        printf("can not open %s\n", x.ptr);
        !            40:                        return;
        !            41:                }
        !            42:                for (i=0; i<NKMCI; i++) ispace[i] = 0;
        !            43:                for (i=0; i<NKMCD; i++) dspace[i] = 0;
        !            44: #ifdef vax
        !            45:                read(fd, &fhdr, sizeof fhdr);
        !            46: #endif
        !            47:                read(fd, &hdr, sizeof hdr);
        !            48:                if (hdr.a_magic==0440) {
        !            49:                        hdr.a_magic = 0410;
        !            50: #ifdef vax
        !            51:                        lseek(fd, sizeof(struct ir), 1);
        !            52: #endif
        !            53: #ifdef pdp11
        !            54:                        lseek(fd, 64L, 0);
        !            55: #endif
        !            56:                }
        !            57:                if (hdr.a_magic!=0410) {
        !            58:                        printf("bad format %s\n",x.ptr);
        !            59:                        close(fd);
        !            60:                        return;
        !            61:                }
        !            62: #ifdef vax
        !            63:                lseek(fd, 2 * sizeof(struct scnhdr), 1);
        !            64: #endif
        !            65:                read(fd, ispace, hdr.a_text);
        !            66:                read(fd, dspace, hdr.a_data);
        !            67:                lseek(dbfd, 0L, 0);
        !            68:                write(dbfd, ispace, sizeof ispace);
        !            69:                write(dbfd, dspace, sizeof dspace);
        !            70:                close(fd);
        !            71:                break;
        !            72:        case DDUMP:
        !            73:                if (x.ptr == 0)
        !            74:                        x.ptr = "core";
        !            75:                if (getregs())
        !            76:                        return;
        !            77:                if ((fd = creat(x.ptr, 0664))<0) {
        !            78:                        printf("can not create %s\n", x.ptr);
        !            79:                        return;
        !            80:                }
        !            81:                lseek(dbfd, 0L, 0);
        !            82: #ifdef vax
        !            83:                fhdr.f_magic = VAXROMAGIC;
        !            84:                fhdr.f_nscns = 2;
        !            85:                fhdr.f_timdat = time(NULL);
        !            86:                fhdr.f_symptr = 0;
        !            87:                fhdr.f_nsyms = 0;
        !            88:                fhdr.f_opthdr = sizeof(struct aouthdr);
        !            89:                fhdr.f_flags = F_AR32WR|F_LNNO|F_RELFLG;
        !            90:                write(fd, &fhdr, sizeof fhdr);
        !            91: #endif
        !            92:                hdr.a_magic = 0440;
        !            93:                hdr.a_text = read(dbfd, ispace, sizeof ispace);
        !            94:                hdr.a_data = read(dbfd, dspace, sizeof dspace);
        !            95: #ifdef pdp11
        !            96:                hdr.a_syms = 0;
        !            97: #endif
        !            98:                write(fd, &hdr, sizeof hdr);
        !            99: #ifdef vax
        !           100:                strncpy(scn.s_name,_TEXT,sizeof(scn.s_name));
        !           101:                scn.s_size = hdr.tsize;
        !           102:                scn.s_scnptr = sizeof(struct filehdr) + sizeof(struct aouthdr)
        !           103:                        + 2 * sizeof(struct scnhdr) + sizeof(struct ir);
        !           104:                write(fd, &scn, sizeof scn);
        !           105:                strncpy(scn.s_name,_DATA,sizeof(scn.s_name));
        !           106:                scn.s_size = hdr.dsize;
        !           107:                scn.s_scnptr += hdr.tsize;
        !           108:                write(fd, &scn, sizeof scn);
        !           109: #endif
        !           110:                write(fd, &ir, sizeof ir);
        !           111:                write(fd, ispace, hdr.a_text);
        !           112:                write(fd, dspace, hdr.a_data);
        !           113:                close(fd);
        !           114:                break;
        !           115:        case DSTEP:
        !           116:                cnt = x.val?x.val:1;
        !           117:                s[1] = 0;
        !           118:                for (i=1; i<=cnt; i++) {
        !           119:                        if (ksty(KSTEP, ir.csr, 0))
        !           120:                                return;
        !           121:                        flag = 0;
        !           122:                        for (j=0; j<8; j++)
        !           123:                                if (s[j]!=ir.csr[j]) {
        !           124:                                        flag++;
        !           125:                                        s[j] = ir.csr[j];
        !           126:                                }
        !           127:                        if (flag || i==cnt)
        !           128:                                printf("%4d%4o%4o%4o%4o%4o%4o%4o%4o\n",i,
        !           129:                                s[0]&0377,s[1]&0377,s[2]&0377,s[3]&0377,
        !           130:                                s[4]&0377,s[5]&0377,s[6]&0377,s[7]&0377);
        !           131:                }
        !           132:                break;
        !           133:        case DRUN:
        !           134:        case DSTOP:
        !           135:        case DRESET:
        !           136:        case DWCSR:
        !           137:        case DCLEAR:
        !           138:                ksty(in, 0, x.val);
        !           139:                break;
        !           140:        case DREGS:
        !           141:                i = getregs();
        !           142:                printf("%4s:%4o%4o%4o%4o%4o%4o%4o%4o\n",
        !           143:                "csr",ir.csr[0]&0377,ir.csr[1]&0377,ir.csr[2]&0377,ir.csr[3]&0377,
        !           144:                ir.csr[4]&0377,ir.csr[5]&0377,ir.csr[6]&0377,ir.csr[7]&0377);
        !           145:                if (i)
        !           146:                        break;
        !           147:                printf("%4s:%4o%4o%4o%4o%4o%4o%4o%4o\n",
        !           148:                "lur",ir.lur[0]&0377,ir.lur[1]&0377,ir.lur[2]&0377,ir.lur[3]&0377,
        !           149:                ir.lur[4]&0377,ir.lur[5]&0377,ir.lur[6]&0377,ir.lur[7]&0377);
        !           150:                printf("%4s:%4o%4o%4o%4o%4o%4o%4o%4o\n",
        !           151:                "reg",ir.reg[0]&0377,ir.reg[1]&0377,ir.reg[2]&0377,ir.reg[3]&0377,
        !           152:                ir.reg[4]&0377,ir.reg[5]&0377,ir.reg[6]&0377,ir.reg[7]&0377);
        !           153:                printf("%4s:%4o%4o%4o%4o%4o%4o%4o%4o\n",
        !           154:                "reg",ir.reg[8+0]&0377,ir.reg[8+1]&0377,ir.reg[8+2]&0377,ir.reg[8+3]&0377,
        !           155:                ir.reg[8+4]&0377,ir.reg[8+5]&0377,ir.reg[8+6]&0377,ir.reg[8+7]&0377);
        !           156:                printf("%4s:%4o%4o%4o%4o%4o%4o%4o%4o\n",
        !           157:                "io",ir.io[0]&0377,ir.io[1]&0377,ir.io[2]&0377,ir.io[3]&0377,
        !           158:                ir.io[4]&0377,ir.io[5]&0377,ir.io[6]&0377,ir.io[7]&0377);
        !           159:                printf("%4s:%4o%4o%7s:%4o%7s:%4o\n",
        !           160:                "npr",ir.npr[0]&0377, ir.npr[1]&0377,"brg",ir.brg&0377,"mem",ir.mem&0377);
        !           161:                break;
        !           162:        }
        !           163: }
        !           164: 
        !           165: mstep(ins)
        !           166: {
        !           167:        char    csr[8];
        !           168: 
        !           169:        ksty(KMS, csr, ins);
        !           170:        return(csr[2]);
        !           171: }
        !           172: 
        !           173: getregs()
        !           174: {
        !           175:        register i;
        !           176: 
        !           177:        if (ksty(KCSR, ir.csr, 0))
        !           178:                return(1);
        !           179:        if (ir.csr[1]&0200)
        !           180:                return(1);
        !           181:        ir.brg = mstep(061222);
        !           182:        ir.mem = mstep(041222);
        !           183:        for (i=0; i<8; i++) {
        !           184:                ir.lur[i] = mstep(021202|(i<<4));
        !           185:                ir.io[i] = mstep(021002|(i<<4));
        !           186:        }
        !           187:        for (i=0; i<16; i++) {
        !           188:                mstep(060600|i);
        !           189:                ir.reg[i] = mstep(061222);
        !           190:        }
        !           191:        ir.npr[0] = mstep(0121202);
        !           192:        ir.npr[1] = mstep(0121222);
        !           193:        return(0);
        !           194: }
        !           195: 
        !           196: ksty(tab)
        !           197: {
        !           198:        if (ioctl(dbfd, KCSETA, &tab) < 0) {
        !           199:                printf("%s not stopped\n",dbfile);
        !           200:                return(1);
        !           201:        }
        !           202:        return(0);
        !           203: }

unix.superglobalmegacorp.com

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