tdump.c
来自「著名的AT&T UNIX v6 源码」· C语言 代码 · 共 130 行
C
130 行
/* * Dump core to magtape * Assumes memory mapping has been disabled * and IPL has be set high ( > 0x15 ) */#define PHYSPAGES 1024#define UBA 0x20006000#define mba0 0x20010000#define mba1 0x20012000struct mba_regs { int mba_csr, mba_cr, mba_sr, mba_var, mba_bcr;};struct device{ int htcs1; int htds; int hter; int htmr; int htas; int htfc; int htdt; int htck; int htsn; int httc;};#define HTADDR ((struct device *)(mba1 + 0x400))#define HTMAP ((int *) (mba1 + 0x800))#define GO 01#define WCOM 060#define RCOM 070#define NOP 0#define WEOF 026#define SFORW 030#define SREV 032#define ERASE 024#define REW 06#define DCLR 010#define P800 01300 /* 800 + pdp11 mode */#define P1600 02300 /* 1600 + pdp11 mode */#define IENABLE 0100#define RDY 0200#define TM 04#define DRY 0200#define EOT 02000#define CS 02000#define COR 0100000#define PES 040#define WRL 04000#define MOL 010000#define ERR 040000#define FCE 01000#define TRE 040000#define HARD 064023 /* UNS|OPI|NEF|FMT|RMR|ILR|ILF */#define SIO 1#define SSFOR 2#define SSREV 3#define SRETRY 4#define SCOM 5#define SOK 6dump(){ HTADDR->httc = P800; /* set 800 bpi mode */ twall((char *)0, PHYSPAGES); /* write out memory */ teof(); teof(); rewind(); twait();}twall(start, num) char *start; int num;{ HTADDR->htcs1 = DCLR | GO; while (num--) { twrite(start); start += 512; }}twrite(buf)char *buf;{ twait(); HTADDR->htfc = -512; *HTMAP = (((int)buf)>>9) | 0x80000000; /* map entry */ ((struct mba_regs *)mba1)->mba_sr = -1; ((struct mba_regs *)mba1)->mba_bcr = -512; ((struct mba_regs *)mba1)->mba_var = 0; HTADDR->htcs1 = WCOM | GO; return;}twait(){ register s; do s = HTADDR->htds; while ((s & RDY) == 0);}rewind(){ twait(); HTADDR->htcs1 = REW | GO;}teof(){ twait(); HTADDR->htcs1 = WEOF | GO;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?