?? ht.c
字號:
/* * TJU16 tape driver */#include <sys/param.h>#include <sys/inode.h>#include "saio.h"struct device{ int htcs1; int htwc; caddr_t htba; int htfc; int htcs2; int htds; int hter; int htas; int htck; int htdb; int htmr; int htdt; int htsn; int httc; int htbae; /* 11/70 bus extension */ int htcs3;};#define HTADDR ((struct device *)0172440)#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 CLR 040#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 PIP 020000#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 6htopen(io)register struct iob *io;{ register skip;int i; htstrategy(io, REW); skip = io->i_boff; while (skip--) { io->i_cc = -1; while (htstrategy(io, SFORW)) ; i = 0; while (--i) ; htstrategy(io, NOP); }}htclose(io)register struct iob *io;{ htstrategy(io, REW);}htstrategy(io, func)register struct iob *io;{ register unit, den, errcnt; unit = io->i_unit; errcnt = 0;retry: HTADDR->htcs2 = unit&03; if(unit > 3) den = P1600; else den = P800; htquiet(); if((HTADDR->httc&03777) != den) HTADDR->httc = den; HTADDR->htba = io->i_ma; HTADDR->htfc = -io->i_cc; HTADDR->htwc = -(io->i_cc>>1); den = ((segflag) << 8) | GO; if (func == READ) den =| RCOM; else if (func == WRITE) den =| WCOM; else if (func == SREV) { HTADDR->htfc = -1; HTADDR->htcs1 = den | SREV; return(0); } else den |= func; HTADDR->htcs1 = den; while ((HTADDR->htcs1&RDY) == 0) ; if (HTADDR->htds&TM) { htinit(); return(0); } if (HTADDR->htcs1&TRE) { if (errcnt == 0) printf("tape error: cs2=%o, er=%o", HTADDR->htcs2, HTADDR->hter); htinit(); if (errcnt == 10) { printf("\n"); return(-1); } errcnt++; htstrategy(io, SREV); goto retry; } if (errcnt) printf(" recovered by retry\n"); return(io->i_cc+HTADDR->htfc);}htinit(){ int omt, ocs2; omt = HTADDR->httc & 03777; ocs2 = HTADDR->htcs2 & 07; HTADDR->htcs2 = CLR; HTADDR->htcs2 = ocs2; HTADDR->httc = omt; HTADDR->htcs1 = DCLR|GO;}htquiet(){ while ((HTADDR->htcs1&RDY) == 0) ; while (HTADDR->htds&PIP) ;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -