~kris/9p

9hist

31e6bc5be21461c321f8e07e452eaae4c89e802b — David du Colombier 35 years ago 2584909
Plan 9 from Bell Labs 1991-08-22
4 files changed, 24 insertions(+), 50 deletions(-)

M pc/clock.c
M pc/devuart.c
M pc/kbd.c
M pc/trap.c
M pc/clock.c => pc/clock.c +0 -34
@@ 94,37 94,3 @@ clock(Ureg *ur)
		}
	}
}

/*
 *  a faster (1 MS) clock tick for a non-interrupting serial port or
 *  kernel profiling.  m->ticks still increments as usual.
 */
void
fclock(Ureg *ur)
{
	static ulong ticks;

	uartintr0(ur);		/* poll the serial port */
	if((ticks++ % (FHZ/HZ)) == 0)
		clock(ur);
}

void
fclockinit(void)
{
	int x;

	/*
	 *  set vector for clock interrupts
	 */
	setvec(Clockvec, fclock);

	/*
	 *  make clock output a square wave with a 1/FHZ period
	 */
	x = splhi();
	outb(Tmode, Load0square);
	outb(T0cntr, (Freq/FHZ));	/* low byte */
	outb(T0cntr, (Freq/FHZ)>>8);	/* high byte */
	splx(x);
}

M pc/devuart.c => pc/devuart.c +7 -5
@@ 36,6 36,7 @@ enum
	 Loop=	(1<<4),		/*  loop bask */
	Lstat=	5,		/* line status */
	 Inready=(1<<0),	/*  receive buffer full */
	 Overrun=(1<<1),	/*  we lost an input char */
	 Outready=(1<<5),	/*  output buffer full */
	Mstat=	6,		/* modem status */
	Scratch=7,		/* scratchpad */


@@ 212,6 213,9 @@ uartintr(Uart *up)
	IOQ *cq;
	int s, l;

	/*
	 *  the for loop takes care of multiple events per interrupt
	 */
	for(;;){
		s = uartrdreg(up, Istat);
		switch(s){


@@ 229,6 233,9 @@ uartintr(Uart *up)
				if(up->delim[ch/8] & (1<<(ch&7)) )
					wakeup(&cq->r);
			}
			l = uartrdreg(up, Lstat);
			if(l & Overrun)
				screenputc('!');
			break;
	
		case 2:	/* transmitter empty */


@@ 283,11 290,6 @@ uartenable(Uart *up)
	}

	/*
	 *  speed up the clock to poll the uart
	fclockinit();
	 */

	/*
	 *  set up i/o routines
	 */
	if(up->oq){

M pc/kbd.c => pc/kbd.c +10 -9
@@ 398,14 398,6 @@ kbdintr0(void)
		return 0;
	}

	keyup = c&0x80;
	c &= 0x7f;
	if(c > sizeof kbtab){
		print("unknown key %ux\n", c|keyup);
		kbdputc(&kbdq, k1);
		return 0;
	}

	/*
	 *  e0's is the first of a 2 character sequence
	 */


@@ 417,10 409,19 @@ kbdintr0(void)
		return 0;
	}

	keyup = c&0x80;
	c &= 0x7f;
	if(c > sizeof kbtab){
		print("unknown key %ux\n", c|keyup);
		kbdputc(&kbdq, k1);
		return 0;
	}

	if(esc1){
print("\nescape1 %lux\n", c);
		c = kbtabesc1[c];
		esc1 = 0;
		kbdputc(&kbdq, c);
		return 0;
	} else if(esc2){
		esc2--;
		return 0;

M pc/trap.c => pc/trap.c +7 -2
@@ 191,6 191,12 @@ trap(Ureg *ur)
	}

	/*
	 *  check for a waiting character, the uart is at too low
	 *  a priority level to work correctly at 9600 baud.
	 */
	uartintr0(ur);

	/*
	 *  call the trap routine
	 */
	(*ivec[v])(ur);


@@ 264,7 270,7 @@ syscall(Ureg *ur)
	u->p->pc = ur->pc;
	if((ur->cs)&0xffff == KESEL)
		panic("recursive system call");
	u->p->insyscall = 0;
	spllo();

	/*
	 *  do something about floating point!!!


@@ 274,7 280,6 @@ syscall(Ureg *ur)
	sp = ur->usp;
	u->nerrlab = 0;
	ret = -1;
	spllo();
	if(!waserror()){
		if(ax >= sizeof systab/BY2WD){
			pprint("bad sys call number %d pc %lux\n", ax, ur->pc);