⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kl.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
#/* *//* *   KL/DL-11 driver */#include "../param.h"#include "../conf.h"#include "../user.h"#include "../tty.h"#include "../proc.h"/* base address */#define	KLADDR	0177560	/* console */#define	KLBASE	0176500	/* kl and dl11-a */#define	DLBASE	0175610	/* dl-e */#define	NKL11	1#define	NDL11	0#define DSRDY	02#define	RDRENB	01struct	tty kl11[NKL11+NDL11];struct klregs {	int klrcsr;	int klrbuf;	int kltcsr;	int kltbuf;}klopen(dev, flag){	register char *addr;	register struct tty *tp;	if(dev.d_minor >= NKL11+NDL11) {		u.u_error = ENXIO;		return;	}	tp = &kl11[dev.d_minor];	if (u.u_procp->p_ttyp == 0) {		u.u_procp->p_ttyp = tp;		tp->t_dev = dev;	}	/*	 * set up minor 0 to address KLADDR	 * set up minor 1 thru NKL11-1 to address from KLBASE	 * set up minor NKL11 on to address from DLBASE	 */	addr = KLADDR + 8*dev.d_minor;	if(dev.d_minor)		addr =+ KLBASE-KLADDR-8;	if(dev.d_minor >= NKL11)		addr =+ DLBASE-KLBASE-8*NKL11+8;	tp->t_addr = addr;	if ((tp->t_state&ISOPEN) == 0) {		tp->t_state = ISOPEN|CARR_ON;		tp->t_flags = XTABS|LCASE|ECHO|CRMOD;		tp->t_erase = CERASE;		tp->t_kill = CKILL;	}	addr->klrcsr =| IENABLE|DSRDY|RDRENB;	addr->kltcsr =| IENABLE;}klclose(dev){	register struct tty *tp;	tp = &kl11[dev.d_minor];	wflushtty(tp);	tp->t_state = 0;}klread(dev){	ttread(&kl11[dev.d_minor]);}klwrite(dev){	ttwrite(&kl11[dev.d_minor]);}klxint(dev){	register struct tty *tp;	tp = &kl11[dev.d_minor];	ttstart(tp);	if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT)		wakeup(&tp->t_outq);}klrint(dev){	register int c, *addr;	register struct tty *tp;	tp = &kl11[dev.d_minor];	addr = tp->t_addr;	c = addr->klrbuf;	addr->klrcsr =| RDRENB;	if ((c&0177)==0)		addr->kltbuf = c;	/* hardware botch */	ttyinput(c, tp);}klsgtty(dev, v)int *v;{	register struct tty *tp;	tp = &kl11[dev.d_minor];	ttystty(tp, v);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -