Add original unix v6
This commit is contained in:
+117
@@ -0,0 +1,117 @@
|
||||
#
|
||||
/*
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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 01
|
||||
|
||||
struct 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);
|
||||
}
|
||||
Reference in New Issue
Block a user