Annotation of researchv10no/cmd/kasb/kas3.c, revision 1.1.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.