📄 good_rk.c
字号:
/* * RK disk driver */#include <sys/param.h>#include <sys/inode.h>#include "saio.h"#define RKADDR ((struct device *)0177400)#define NRK 4#define NRKBLK 4872#define RESET 0#define WCOM 2#define RCOM 4#define GO 01#define DRESET 014#define IENABLE 0100#define DRY 0200#define ARDY 0100#define WLO 020000#define CTLRDY 0200struct device{ int rkds; int rker; int rkcs; int rkwc; caddr_t rkba; int rkda;};rkstrategy(io, func)register struct iob *io;{ register com; daddr_t bn; int dn, cn, sn; bn = io->i_bn; dn = io->i_unit; cn = bn/12; sn = bn%12; RKADDR->rkda = (dn<<13) | (cn<<4) | sn; RKADDR->rkba = io->i_ma; RKADDR->rkwc = -(io->i_cc>>1); com = (segflag<<4)|GO; if (func == READ) com |= RCOM; else com |= WCOM; RKADDR->rkcs = com; while ((RKADDR->rkcs&CTLRDY) == 0) ; if (RKADDR->rkcs<0) { /* error bit */ printf("disk error: cyl=%d, sector=%d, er=%o, ds=%o\n", cn, sn, RKADDR->rker, RKADDR->rkds); return(-1); } return(io->i_cc);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -