?? kl.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 + -