Annotation of 40BSD/sys/newsys/tdump.c, revision 1.1.1.1

1.1       root        1: /*     tdump.c  3.4    10/5/80 */
                      2: 
                      3: #include "../ch/param.h"
                      4: #include "../ch/vm.h"
                      5: #include "../ch/pte.h"
                      6: #include "../ch/map.h"
                      7: #include "../ch/uba.h"
                      8: #include "../ch/systm.h"
                      9: #include "../ch/cmap.h"
                     10: #include "../ch/mba.h"
                     11: 
                     12: #ifdef HTDUMP
                     13: /*
                     14:  * Dump core to magtape.
                     15:  * Assumes memory mapping has been disabled
                     16:  * and IPL has been set high ( > 0x15 )
                     17:  */
                     18: 
                     19: #define        UBA     0x20006000
                     20: #define        mba0    0x20010000
                     21: #define        mba1    0x20012000
                     22: 
                     23: struct mba_regs {
                     24:        int     mba_csr;
                     25:        int     mba_cr;
                     26:        int     mba_sr;
                     27:        int     mba_var;
                     28:        int     mba_bcr;
                     29: };
                     30: 
                     31: struct device
                     32: {
                     33:        int     htcs1;
                     34:        int     htds;
                     35:        int     hter;
                     36:        int     htmr;
                     37:        int     htas;
                     38:        int     htfc;
                     39:        int     htdt;
                     40:        int     htck;
                     41:        int     htsn;
                     42:        int     httc;
                     43: };
                     44: 
                     45: #define        HTADDR  ((struct device *)(mba1 + 0x400))
                     46: #define        HTMAP ((struct pte *) (mba1 + 0x800))
                     47: 
                     48: #define        GO      01
                     49: #define        WCOM    060
                     50: #define        RCOM    070
                     51: #define        NOP     0
                     52: #define        WEOF    026
                     53: #define        SFORW   030
                     54: #define        SREV    032
                     55: #define        ERASE   024
                     56: #define        REW     06
                     57: #define        DCLR    010
                     58: #define        P800    01300           /* 800 + pdp11 mode */
                     59: #define        P1600   02300           /* 1600 + pdp11 mode */
                     60: #define        IENABLE 0100
                     61: #define        RDY     0200
                     62: #define        TM      04
                     63: #define        DRY     0200
                     64: #define        EOT     02000
                     65: #define        CS      02000
                     66: #define        COR     0100000
                     67: #define        PES     040
                     68: #define        WRL     04000
                     69: #define        MOL     010000
                     70: #define        ERR     040000
                     71: #define        FCE     01000
                     72: #define        TRE     040000
                     73: #define        HARD    064023  /* UNS|OPI|NEF|FMT|RMR|ILR|ILF */
                     74: 
                     75: #define        SIO     1
                     76: #define        SSFOR   2
                     77: #define        SSREV   3
                     78: #define        SRETRY  4
                     79: #define        SCOM    5
                     80: #define        SOK     6
                     81: 
                     82: #define        DBSIZE  20
                     83: 
                     84: dump()
                     85: {
                     86: 
                     87:        HTADDR->httc = P800;    /* set 800 bpi mode */
                     88: 
                     89:        htwall((char *)0, maxfree);     /* write out memory */
                     90: 
                     91:        hteof();
                     92:        hteof();
                     93:        htrewind();
                     94:        htwait();
                     95: }
                     96: 
                     97: htwall(start, num)
                     98:        char *start;
                     99:        int num;
                    100: {
                    101:        int blk;
                    102: 
                    103:        HTADDR->htcs1 = DCLR | GO;
                    104:        while (num > 0) {
                    105:                blk = num > DBSIZE ? DBSIZE : num;
                    106:                htwrite(start, blk);
                    107:                start += blk*NBPG;
                    108:                num -= blk;
                    109:        }
                    110: }
                    111: 
                    112: htwrite(buf, num)
                    113: char *buf;
                    114: {
                    115:        register struct pte *hpte = HTMAP;
                    116:        register int i;
                    117: 
                    118:        htwait();
                    119:        HTADDR->htfc = -(num*NBPG);
                    120:        for (i = 0; i < num; i++)
                    121:                *(int *)hpte++ = (btop(buf)+i) | PG_V;
                    122:        ((struct mba_regs *)mba1)->mba_sr = -1;
                    123:        ((struct mba_regs *)mba1)->mba_bcr = -(num*NBPG);
                    124:        ((struct mba_regs *)mba1)->mba_var = 0;
                    125:        HTADDR->htcs1 = WCOM | GO;
                    126: }
                    127: 
                    128: htwait()
                    129: {
                    130:        register s;
                    131: 
                    132:        do
                    133:                s = HTADDR->htds;
                    134:        while ((s & RDY) == 0);
                    135: }
                    136: 
                    137: htrewind()
                    138: {
                    139: 
                    140:        htwait();
                    141:        HTADDR->htcs1 = REW | GO;
                    142: }
                    143: 
                    144: hteof()
                    145: {
                    146: 
                    147:        htwait();
                    148:        HTADDR->htcs1 = WEOF | GO;
                    149: }
                    150: 
                    151: #endif
                    152: #ifdef TMDUMP
                    153: 
                    154: /*
                    155:  * Dump core to magtape.
                    156:  * Assumes memory mapping has been disabled
                    157:  * and IPL has been set high ( > 0x15 )
                    158:  */
                    159: 
                    160: #define        UBA     0x20006000
                    161: #define        UBA_DEV (UBA+0x130000-0160000)
                    162: struct device
                    163: {
                    164:        short   tmer;
                    165:        short   tmcs;
                    166:        short   tmbc;
                    167:        unsigned short tmba;
                    168:        short   tmdb;
                    169:        short   tmrd;
                    170: };
                    171: 
                    172: #define        TMADDR  ((struct device*)(0x2013F550))
                    173: 
                    174: #define        GO      01
                    175: #define        RCOM    02
                    176: #define        WCOM    04
                    177: #define        WEOF    06
                    178: #define        NOP     0100
                    179: #define        SFORW   010
                    180: #define        SREV    012
                    181: #define        WIRG    014
                    182: #define        REW     016
                    183: #define        DCLR    010000
                    184: #define        D800    060000
                    185: #define D1600   0117777        
                    186: #define        IENABLE 0100
                    187: 
                    188: #define GAPSD  010
                    189: #define        CRDY    0200
                    190: #define        TUR     1
                    191: #define        HARD    0102200 
                    192: #define RLE    0100
                    193: #define        EOF     0040000 
                    194: #define        WL      04
                    195: #define RWS    02
                    196: 
                    197: #define        SSEEK   1
                    198: #define        SIO     2
                    199: #define        SCOM    3
                    200: 
                    201: #define        DBSIZE  20
                    202: 
                    203: dump()
                    204: {
                    205: 
                    206:        tubainit();
                    207:        tmwall(0, maxfree);             /* write out memory */
                    208: 
                    209:        tmeof();
                    210:        tmeof();
                    211:        tmrewind();
                    212:        tmwait();
                    213: }
                    214: 
                    215: tmwall(start, num)
                    216:        int start, num;
                    217: {
                    218:        int blk;
                    219: 
                    220:        TMADDR->tmcs = DCLR | GO;
                    221:        while (num > 0) {
                    222:                blk = num > DBSIZE ? DBSIZE : num;
                    223:                tmdwrite(start, blk);
                    224:                start += blk;
                    225:                num -= blk;
                    226:        }
                    227: }
                    228: 
                    229: tmdwrite(buf, num)
                    230: register buf, num;
                    231: {
                    232:        register int *io, npf;
                    233:        tmwait();
                    234:        /* Flush buffered data path 0 */
                    235:        ((struct uba_regs *)UBA)->uba_dpr[1] = 0;
                    236:        ((struct uba_regs *)UBA)->uba_dpr[1] = BNE;
                    237:        /* Map unibus address 0 to section of interest */
                    238:        io = (int *)((struct uba_regs *)UBA)->uba_map;
                    239:        npf = num+1;
                    240: 
                    241:        while(--npf != 0)
                    242:                 *io++ = (int)(buf++ | (1<<21) | MRV);
                    243:        *io = 0;
                    244: 
                    245:        TMADDR->tmbc = -(num*NBPG);
                    246:        TMADDR->tmba = 0;
                    247:        TMADDR->tmcs = WCOM | GO | D800;
                    248: }
                    249: 
                    250: tmwait()
                    251: {
                    252:        register short s;
                    253: 
                    254:        do
                    255:                s = TMADDR->tmcs;
                    256:        while ((s & CRDY) == 0);
                    257: }
                    258: 
                    259: tmrewind()
                    260: {
                    261: 
                    262:        tmwait();
                    263:        TMADDR->tmcs = REW | GO;
                    264: }
                    265: 
                    266: tmeof()
                    267: {
                    268: 
                    269:        tmwait();
                    270:        TMADDR->tmcs = WEOF | GO | D800;
                    271: }
                    272: 
                    273: tubainit()
                    274: {
                    275:        register struct uba_regs *up = (struct uba_regs *)UBA;
                    276: 
                    277:        up->uba_cr = ADINIT;
                    278:        up->uba_cr = IFS|BRIE|USEFIE|SUEFIE;
                    279:        while ((up->uba_cnfgr & UBIC) == 0) ;
                    280: }
                    281: #endif

unix.superglobalmegacorp.com

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