|
|
1.1 ! root 1: /* tdump.c 4.1 11/9/80 */ ! 2: ! 3: #include "../h/param.h" ! 4: #include "../h/vm.h" ! 5: #include "../h/pte.h" ! 6: #include "../h/systm.h" ! 7: #include "../h/cmap.h" ! 8: ! 9: /* ! 10: * Dump core to magtape. ! 11: * Assumes memory mapping has been disabled ! 12: * and IPL has been set high ( > 0x15 ) ! 13: */ ! 14: ! 15: #define UBA 0x20006000 ! 16: #define mba0 0x20010000 ! 17: #define mba1 0x20012000 ! 18: ! 19: struct mba_regs { ! 20: int mba_csr; ! 21: int mba_cr; ! 22: int mba_sr; ! 23: int mba_var; ! 24: int mba_bcr; ! 25: }; ! 26: ! 27: struct device ! 28: { ! 29: int htcs1; ! 30: int htds; ! 31: int hter; ! 32: int htmr; ! 33: int htas; ! 34: int htfc; ! 35: int htdt; ! 36: int htck; ! 37: int htsn; ! 38: int httc; ! 39: }; ! 40: ! 41: #define HTADDR ((struct device *)(mba1 + 0x400)) ! 42: #define HTMAP ((struct pte *) (mba1 + 0x800)) ! 43: ! 44: #define GO 01 ! 45: #define WCOM 060 ! 46: #define RCOM 070 ! 47: #define NOP 0 ! 48: #define WEOF 026 ! 49: #define SFORW 030 ! 50: #define SREV 032 ! 51: #define ERASE 024 ! 52: #define REW 06 ! 53: #define DCLR 010 ! 54: #define P800 01300 /* 800 + pdp11 mode */ ! 55: #define P1600 02300 /* 1600 + pdp11 mode */ ! 56: #define IENABLE 0100 ! 57: #define RDY 0200 ! 58: #define TM 04 ! 59: #define DRY 0200 ! 60: #define EOT 02000 ! 61: #define CS 02000 ! 62: #define COR 0100000 ! 63: #define PES 040 ! 64: #define WRL 04000 ! 65: #define MOL 010000 ! 66: #define ERR 040000 ! 67: #define FCE 01000 ! 68: #define TRE 040000 ! 69: #define HARD 064023 /* UNS|OPI|NEF|FMT|RMR|ILR|ILF */ ! 70: ! 71: #define SIO 1 ! 72: #define SSFOR 2 ! 73: #define SSREV 3 ! 74: #define SRETRY 4 ! 75: #define SCOM 5 ! 76: #define SOK 6 ! 77: ! 78: #define DBSIZE 20 ! 79: ! 80: dump() ! 81: { ! 82: ! 83: HTADDR->httc = P800; /* set 800 bpi mode */ ! 84: ! 85: twall((char *)0, maxfree); /* write out memory */ ! 86: ! 87: teof(); ! 88: teof(); ! 89: rewind(); ! 90: twait(); ! 91: } ! 92: ! 93: twall(start, num) ! 94: char *start; ! 95: int num; ! 96: { ! 97: int blk; ! 98: ! 99: HTADDR->htcs1 = DCLR | GO; ! 100: while (num > 0) { ! 101: blk = num > DBSIZE ? DBSIZE : num; ! 102: twrite(start, blk); ! 103: start += blk*NBPG; ! 104: num -= blk; ! 105: } ! 106: } ! 107: ! 108: twrite(buf, num) ! 109: char *buf; ! 110: { ! 111: register struct pte *hpte = HTMAP; ! 112: register int i; ! 113: ! 114: twait(); ! 115: HTADDR->htfc = -(num*NBPG); ! 116: for (i = 0; i < num; i++) ! 117: *(int *)hpte++ = (btop(buf)+i) | PG_V; ! 118: ((struct mba_regs *)mba1)->mba_sr = -1; ! 119: ((struct mba_regs *)mba1)->mba_bcr = -(num*NBPG); ! 120: ((struct mba_regs *)mba1)->mba_var = 0; ! 121: HTADDR->htcs1 = WCOM | GO; ! 122: } ! 123: ! 124: twait() ! 125: { ! 126: register s; ! 127: ! 128: do ! 129: s = HTADDR->htds; ! 130: while ((s & RDY) == 0); ! 131: } ! 132: ! 133: rewind() ! 134: { ! 135: ! 136: twait(); ! 137: HTADDR->htcs1 = REW | GO; ! 138: } ! 139: ! 140: teof() ! 141: { ! 142: ! 143: twait(); ! 144: HTADDR->htcs1 = WEOF | GO; ! 145: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.