plan 9 kernel history: overview | file list | diff list

1991/0801/pc/clock.c (diff list | history)

1991/0704/sys/src/9/pc/clock.c:4,111991/0705/sys/src/9/pc/clock.c:4,22 (short | long)
1991/0704    
#include	"dat.h" 
#include	"fns.h" 
#include	"io.h" 
#include	"ureg.h" 
 
1991/0705    
/* 
 *  8253 timer 
 */ 
enum 
{ 
	Timerctl=	0x43,		/* control port */ 
	Timercnt=	0x40,		/* timer count port (outb count-1) */ 
	Timericnt=	0x41,		/* timer count input port */ 
 
	Timerlatch=	0x40,		/* latch count into Timericnt */ 
}; 
 
1991/0704    
void 
clockinit(void) 
{ 
1991/0704/sys/src/9/pc/clock.c:12,141991/0705/sys/src/9/pc/clock.c:23,33
1991/0704    
	setvec(Clockvec, clock, SEGIG); 
} 
 
1991/0705    
void 
clock(void *arg) 
{ 
	m->ticks++; 
	if((m->ticks%185)==0) 
		print("%d secs\n", TK2SEC(m->ticks)); 
	INT0ENABLE; 
} 
1991/0705/sys/src/9/pc/clock.c:4,91991/0706/sys/src/9/pc/clock.c:4,10 (short | long)
1991/0704    
#include	"dat.h" 
#include	"fns.h" 
#include	"io.h" 
1991/0706    
#include	"ureg.h" 
1991/0704    
 
1991/0705    
/* 
 *  8253 timer 
1991/0705/sys/src/9/pc/clock.c:24,331991/0706/sys/src/9/pc/clock.c:25,44
1991/0704    
} 
 
1991/0705    
void 
clock(void *arg) 
1991/0706    
clock(Ureg *ur) 
1991/0705    
{ 
1991/0706    
	Proc *p; 
 
1991/0705    
	m->ticks++; 
	if((m->ticks%185)==0) 
		print("%d secs\n", TK2SEC(m->ticks)); 
	INT0ENABLE; 
1991/0706    
	p = m->proc; 
	if(p){ 
		p->pc = ur->eip; 
		if (p->state==Running) 
			p->time[p->insyscall]++; 
	} 
 
	if((m->ticks%185) == 92) 
		floppystart(); 
	else if((m->ticks%185) == 0) 
		floppystop(); 
1991/0705    
} 
1991/0706/sys/src/9/pc/clock.c:11,271991/0709/sys/src/9/pc/clock.c:11,42 (short | long)
1991/0705    
 */ 
enum 
{ 
	Timerctl=	0x43,		/* control port */ 
	Timercnt=	0x40,		/* timer count port (outb count-1) */ 
	Timericnt=	0x41,		/* timer count input port */ 
1991/0709    
	T0cntr=	0x40,		/* counter ports */ 
	T1cntr=	0x41,		/* ... */ 
	T2cntr=	0x42,		/* ... */ 
	Tmode=	0x43,		/* mode port */ 
1991/0705    
 
	Timerlatch=	0x40,		/* latch count into Timericnt */ 
1991/0709    
	Load0square=	0x36,		/*  load counter 0 with 2 bytes, 
					 *  output a square wave whose 
					 *  period is the counter period 
					 */ 
	Freq=		1193182,	/* Real clock frequency */ 
1991/0705    
}; 
 
1991/0704    
void 
clockinit(void) 
{ 
1991/0709    
	/* 
	 *  set vector for clock interrupts 
	 */ 
1991/0704    
	setvec(Clockvec, clock, SEGIG); 
1991/0709    
 
	/* 
	 *  make clock output a square wave with a 1/HZ period 
	 */ 
	outb(Tmode, Load0square); 
	outb(T0cntr, (Freq/HZ));	/* low byte */ 
	outb(T0cntr, (Freq/HZ)>>8);	/* high byte */ 
1991/0704    
} 
 
1991/0705    
void 
1991/0706/sys/src/9/pc/clock.c:28,331991/0709/sys/src/9/pc/clock.c:43,49
1991/0706    
clock(Ureg *ur) 
1991/0705    
{ 
1991/0706    
	Proc *p; 
1991/0709    
	static int last; 
1991/0706    
 
1991/0705    
	m->ticks++; 
1991/0706    
	p = m->proc; 
1991/0706/sys/src/9/pc/clock.c:36,441991/0709/sys/src/9/pc/clock.c:52,55
1991/0706    
		if (p->state==Running) 
			p->time[p->insyscall]++; 
	} 
                 
	if((m->ticks%185) == 92) 
		floppystart(); 
	else if((m->ticks%185) == 0) 
		floppystop(); 
1991/0705    
} 
1991/0709/sys/src/9/pc/clock.c:43,541991/0711/sys/src/9/pc/clock.c:43,56 (short | long)
1991/0706    
clock(Ureg *ur) 
1991/0705    
{ 
1991/0706    
	Proc *p; 
1991/0709    
	static int last; 
1991/0706    
 
1991/0705    
	m->ticks++; 
1991/0711    
 
	checkalarms(); 
 
1991/0706    
	p = m->proc; 
	if(p){ 
		p->pc = ur->eip; 
1991/0711    
		p->pc = ur->pc; 
1991/0706    
		if (p->state==Running) 
			p->time[p->insyscall]++; 
	} 
1991/0711/sys/src/9/pc/clock.c:29,351991/0716/sys/src/9/pc/clock.c:29,35 (short | long)
1991/0709    
	/* 
	 *  set vector for clock interrupts 
	 */ 
1991/0704    
	setvec(Clockvec, clock, SEGIG); 
1991/0716    
	setvec(Clockvec, clock); 
1991/0709    
 
	/* 
	 *  make clock output a square wave with a 1/HZ period 
1991/0716/sys/src/9/pc/clock.c:23,281991/0719/sys/src/9/pc/clock.c:23,42 (short | long)
1991/0709    
	Freq=		1193182,	/* Real clock frequency */ 
1991/0705    
}; 
 
1991/0719    
/* 
 *  delay for l milliseconds 
 */ 
void 
delay(int l) 
{ 
	int i; 
 
	while(--l){ 
		for(i=0; i < 404; i++) 
			; 
	} 
} 
 
1991/0704    
void 
clockinit(void) 
{ 
1991/0719/sys/src/9/pc/clock.c:61,661991/0730/sys/src/9/pc/clock.c:61,67 (short | long)
1991/0705    
	m->ticks++; 
1991/0711    
 
	checkalarms(); 
1991/0730    
	mouseclock(); 
1991/0711    
 
1991/0706    
	p = m->proc; 
	if(p){ 
1991/0719/sys/src/9/pc/clock.c:68,711991/0730/sys/src/9/pc/clock.c:69,82
1991/0706    
		if (p->state==Running) 
			p->time[p->insyscall]++; 
	} 
1991/0730    
/* 
	if(u && (ur->flags&IFLAG) && p && p->state==Running){ 
		if(anyready()){ 
			if(p->hasspin) 
				p->hasspin = 0; 
			else 
				sched(); 
		} 
	} 
/**/ 
1991/0705    
} 
1991/0730/sys/src/9/pc/clock.c:69,761991/0801/sys/src/9/pc/clock.c:69,76 (short | long)
1991/0706    
		if (p->state==Running) 
			p->time[p->insyscall]++; 
	} 
1991/0730    
/* 
	if(u && (ur->flags&IFLAG) && p && p->state==Running){ 
1991/0801    
 
/*	if(u && p && p->state==Running){ 
1991/0730    
		if(anyready()){ 
			if(p->hasspin) 
				p->hasspin = 0; 
1991/0730/sys/src/9/pc/clock.c:77,821991/0801/sys/src/9/pc/clock.c:77,81
1991/0730    
			else 
				sched(); 
		} 
	} 
/**/ 
1991/0801    
	}/**/ 
1991/0705    
} 
1991/0801/sys/src/9/pc/clock.c:70,761991/0802/sys/src/9/pc/clock.c:70,76 (short | long)
1991/0706    
			p->time[p->insyscall]++; 
	} 
1991/0801    
 
/*	if(u && p && p->state==Running){ 
1991/0802    
	if(u && p && p->state==Running){ 
1991/0730    
		if(anyready()){ 
			if(p->hasspin) 
				p->hasspin = 0; 
1991/0801/sys/src/9/pc/clock.c:77,811991/0802/sys/src/9/pc/clock.c:77,85
1991/0730    
			else 
				sched(); 
		} 
1991/0801    
	}/**/ 
1991/0802    
		if((ur->cs&0xffff) == UESEL){ /* if was in user mode */ 
			if(u->nnote) 
				notify(ur); 
		} 
	} 
1991/0705    
} 
1991/0802/sys/src/9/pc/clock.c:62,671991/0806/sys/src/9/pc/clock.c:62,68 (short | long)
1991/0711    
 
	checkalarms(); 
1991/0730    
	mouseclock(); 
1991/0806    
	uartintr0(ur); 
1991/0711    
 
1991/0706    
	p = m->proc; 
	if(p){ 
1991/0806/sys/src/9/pc/clock.c:60,681991/0807/sys/src/9/pc/clock.c:60,72 (short | long)
1991/0706    
 
1991/0705    
	m->ticks++; 
1991/0711    
 
1991/0807    
	uartintr0(ur); 
 
	if(m->ticks % 50) 
		return; 
 
1991/0711    
	checkalarms(); 
1991/0730    
	mouseclock(); 
1991/0806    
	uartintr0(ur); 
1991/0711    
 
1991/0706    
	p = m->proc; 
	if(p){ 
1991/0807/sys/src/9/pc/clock.c:21,261991/0808/sys/src/9/pc/clock.c:21,27 (short | long)
1991/0709    
					 *  period is the counter period 
					 */ 
	Freq=		1193182,	/* Real clock frequency */ 
1991/0808    
	FHZ=		1000,		/* hertz for fast clock */ 
1991/0705    
}; 
 
1991/0719    
/* 
1991/0807/sys/src/9/pc/clock.c:60,731991/0808/sys/src/9/pc/clock.c:61,72
1991/0706    
 
1991/0705    
	m->ticks++; 
1991/0711    
 
1991/0807    
	uartintr0(ur); 
                 
	if(m->ticks % 50) 
		return; 
                 
1991/0711    
	checkalarms(); 
1991/0730    
	mouseclock(); 
1991/0711    
 
1991/0808    
	/* 
	 *  process time accounting 
	 */ 
1991/0706    
	p = m->proc; 
	if(p){ 
1991/0711    
		p->pc = ur->pc; 
1991/0807/sys/src/9/pc/clock.c:76,811991/0808/sys/src/9/pc/clock.c:75,83
1991/0706    
	} 
1991/0801    
 
1991/0802    
	if(u && p && p->state==Running){ 
1991/0808    
		/* 
		 *  preemption 
		 */ 
1991/0730    
		if(anyready()){ 
			if(p->hasspin) 
				p->hasspin = 0; 
1991/0807/sys/src/9/pc/clock.c:82,901991/0808/sys/src/9/pc/clock.c:84,130
1991/0730    
			else 
				sched(); 
		} 
1991/0802    
		if((ur->cs&0xffff) == UESEL){ /* if was in user mode */ 
1991/0808    
		/* 
		 *  notes for processes that might be spinning 
		 *  in user mode. 
		 */ 
		if((ur->cs&0xffff) == UESEL){ 
1991/0802    
			if(u->nnote) 
				notify(ur); 
		} 
	} 
1991/0808    
} 
 
/* 
 *  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); 
1991/0705    
} 
1991/0808/sys/src/9/pc/clock.c:94,1301991/0822/sys/src/9/pc/clock.c:94,96 (short | long)
1991/0802    
		} 
	} 
1991/0808    
} 
                 
/* 
 *  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); 
1991/0705    
} 
1991/0822/sys/src/9/pc/clock.c:62,681991/0823/sys/src/9/pc/clock.c:62,67 (short | long)
1991/0705    
	m->ticks++; 
1991/0711    
 
	checkalarms(); 
1991/0730    
	mouseclock(); 
1991/0711    
 
1991/0808    
	/* 
	 *  process time accounting 
1991/0823/sys/src/9/pc/clock.c:87,951991/1112/sys/src/9/pc/clock.c:87,93 (short | long)
1991/0808    
		 *  notes for processes that might be spinning 
		 *  in user mode. 
		 */ 
		if((ur->cs&0xffff) == UESEL){ 
1991/0802    
			if(u->nnote) 
				notify(ur); 
		} 
1991/1112    
		if((ur->cs&0xffff) == UESEL) 
			notify(ur); 
1991/0802    
	} 
1991/0808    
} 
1991/1112/sys/src/9/pc/clock.c:21,271991/1113/sys/src/9/pc/clock.c:21,26 (short | long)
1991/0709    
					 *  period is the counter period 
					 */ 
	Freq=		1193182,	/* Real clock frequency */ 
1991/0808    
	FHZ=		1000,		/* hertz for fast clock */ 
1991/0705    
}; 
 
1991/0719    
/* 
1991/1112/sys/src/9/pc/clock.c:58,671991/1113/sys/src/9/pc/clock.c:57,68
1991/0706    
clock(Ureg *ur) 
1991/0705    
{ 
1991/0706    
	Proc *p; 
1991/1113    
	int nrun = 0; 
1991/0706    
 
1991/0705    
	m->ticks++; 
1991/0711    
 
	checkalarms(); 
1991/1113    
	uartclock(); 
1991/0711    
 
1991/0808    
	/* 
	 *  process time accounting 
1991/1112/sys/src/9/pc/clock.c:68,771991/1113/sys/src/9/pc/clock.c:69,81
1991/0808    
	 */ 
1991/0706    
	p = m->proc; 
	if(p){ 
1991/1113    
		nrun = 1; 
1991/0711    
		p->pc = ur->pc; 
1991/0706    
		if (p->state==Running) 
			p->time[p->insyscall]++; 
	} 
1991/1113    
	nrun = (nrdy+nrun)*1000; 
	MACHP(0)->load = (MACHP(0)->load*19+nrun)/20; 
1991/0801    
 
1991/0802    
	if(u && p && p->state==Running){ 
1991/0808    
		/* 
1991/1113/sys/src/9/pc/clock.c:87,971991/1115/sys/src/9/pc/clock.c:87,96 (short | long)
1991/0730    
			else 
				sched(); 
		} 
1991/0808    
		/* 
		 *  notes for processes that might be spinning 
		 *  in user mode. 
		 */ 
1991/1112    
		if((ur->cs&0xffff) == UESEL) 
			notify(ur); 
1991/1115    
		if((ur->cs&0xffff) == UESEL){ 
			spllo();		/* in case we fault */ 
			(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1);	/* profiling clock */ 
			splhi(); 
		} 
1991/0802    
	} 
1991/0808    
} 
1991/1115/sys/src/9/pc/clock.c:87,961991/1116/sys/src/9/pc/clock.c:87,98 (short | long)
1991/0730    
			else 
				sched(); 
		} 
1991/1116    
#ifdef asdf 
1991/1115    
		if((ur->cs&0xffff) == UESEL){ 
			spllo();		/* in case we fault */ 
			(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1);	/* profiling clock */ 
			splhi(); 
		} 
1991/1116    
#endif asdf 
1991/0802    
	} 
1991/0808    
} 
1991/1116/sys/src/9/pc/clock.c:1,51992/0321/sys/src/9/pc/clock.c:1,5 (short | long)
1991/0704    
#include	"u.h" 
#include	"lib.h" 
1992/0321    
#include	"../port/lib.h" 
1991/0704    
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
1992/0321/sys/src/9/pc/clock.c:87,981992/0820/sys/src/9/pc/clock.c:87,96 (short | long)
Uncomment profiling clock.
rsc Fri Mar 4 12:44:25 2005
1991/0730    
			else 
				sched(); 
		} 
1991/1116    
#ifdef asdf 
1991/1115    
		if((ur->cs&0xffff) == UESEL){ 
			spllo();		/* in case we fault */ 
			(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1);	/* profiling clock */ 
			splhi(); 
		} 
1991/1116    
#endif asdf 
1991/0802    
	} 
1991/0808    
} 
1992/0820/sys/src/9/pc/clock.c:20,251992/0922/sys/src/9/pc/clock.c:20,26 (short | long)
Measure cpu speed to make delay system-independent.
rsc Fri Mar 4 12:44:25 2005
1991/0709    
					 *  output a square wave whose 
					 *  period is the counter period 
					 */ 
1992/0922    
	Latch0=		0x06, 
1991/0709    
	Freq=		1193182,	/* Real clock frequency */ 
1991/0705    
}; 
 
1992/0820/sys/src/9/pc/clock.c:40,451992/0922/sys/src/9/pc/clock.c:41,48
1991/0704    
void 
clockinit(void) 
{ 
1992/0922    
	ulong dc;	/* change in counter */ 
 
1991/0709    
	/* 
	 *  set vector for clock interrupts 
	 */ 
1992/0820/sys/src/9/pc/clock.c:51,561992/0922/sys/src/9/pc/clock.c:54,68
1991/0709    
	outb(Tmode, Load0square); 
	outb(T0cntr, (Freq/HZ));	/* low byte */ 
	outb(T0cntr, (Freq/HZ)>>8);	/* high byte */ 
1992/0922    
 
	/* 
	 *  measure cpu speed to make delay() system 
	 *  independent 
	 */ 
	delay(100); 
	outb(Tmode, Latch0); 
	dc = inb(T0cntr); 
	dc |= inb(T0cntr)<<8; 
1991/0704    
} 
 
1991/0705    
void 
1992/0922/sys/src/9/pc/clock.c:16,471992/0923/sys/src/9/pc/clock.c:16,51 (short | long)
rename constants; commenting; rewrite delay to use delayloop, set during clockinit. BUG fix? handle negative delays properly.
rsc Fri Mar 4 12:44:25 2005
1991/0709    
	T2cntr=	0x42,		/* ... */ 
	Tmode=	0x43,		/* mode port */ 
1991/0705    
 
1991/0709    
	Load0square=	0x36,		/*  load counter 0 with 2 bytes, 
					 *  output a square wave whose 
					 *  period is the counter period 
					 */ 
1992/0922    
	Latch0=		0x06, 
1991/0709    
	Freq=		1193182,	/* Real clock frequency */ 
1992/0923    
	/* commands */ 
	Latch0=	0x00,		/* latch counter 0's value */ 
	Load0=	0x30,		/* load counter 0 with 2 bytes */ 
 
	/* modes */ 
	Square=	0x36,		/* perioic square wave */ 
 
	Freq=	1193182,	/* Real clock frequency */ 
1991/0705    
}; 
 
1992/0923    
static ulong delayloop = 1000; 
 
1991/0719    
/* 
 *  delay for l milliseconds 
1992/0923    
 *  delay for l milliseconds more or less.  delayloop is set by 
 *  clockinit() to match the actual CPU speed. 
1991/0719    
 */ 
void 
delay(int l) 
{ 
	int i; 
1992/0923    
	ulong i; 
1991/0719    
 
	while(--l){ 
		for(i=0; i < 404; i++) 
1992/0923    
	while(l-- > 0) 
		for(i=0; i < delayloop; i++) 
1991/0719    
			; 
	} 
} 
 
1991/0704    
void 
clockinit(void) 
{ 
1992/0922    
	ulong dc;	/* change in counter */ 
1992/0923    
	ulong x, y;	/* change in counter */ 
1992/0922    
 
1991/0709    
	/* 
	 *  set vector for clock interrupts 
1992/0922/sys/src/9/pc/clock.c:51,681992/0923/sys/src/9/pc/clock.c:55,82
1991/0709    
	/* 
	 *  make clock output a square wave with a 1/HZ period 
	 */ 
	outb(Tmode, Load0square); 
1992/0923    
	outb(Tmode, Load0|Square); 
1991/0709    
	outb(T0cntr, (Freq/HZ));	/* low byte */ 
	outb(T0cntr, (Freq/HZ)>>8);	/* high byte */ 
1992/0922    
 
	/* 
	 *  measure cpu speed to make delay() system 
	 *  independent 
1992/0923    
	 *  measure time for delay(10) with current delayloop count 
1992/0922    
	 */ 
	delay(100); 
	outb(Tmode, Latch0); 
	dc = inb(T0cntr); 
	dc |= inb(T0cntr)<<8; 
1992/0923    
	x = inb(T0cntr); 
	x |= inb(T0cntr)<<8; 
	delay(10); 
	outb(Tmode, Latch0); 
	y = inb(T0cntr); 
	y |= inb(T0cntr)<<8; 
	x -= y; 
 
	/* 
	 *  fix count, the factor of 2 is a hack 
	 */ 
	delayloop = (delayloop*1193*10)/x; 
	if(delayloop == 0) 
		delayloop = 1; 
1991/0704    
} 
 
1991/0705    
void 
1992/0923/sys/src/9/pc/clock.c:89,941993/0226/sys/src/9/pc/clock.c:89,95 (short | long)
call mouseclock during clock interrupt
rsc Fri Mar 4 12:44:25 2005
1991/0711    
 
	checkalarms(); 
1991/1113    
	uartclock(); 
1993/0226    
	mouseclock(); 
1991/0711    
 
1991/0808    
	/* 
	 *  process time accounting 
1993/0226/sys/src/9/pc/clock.c:72,781993/0915/sys/src/9/pc/clock.c:72,78 (short | long)
convert to Brazil. formatting edit; recomment. change preemption — no kernel preemption (XXX unintentional?)
rsc Fri Mar 4 12:44:25 2005
1992/0923    
	x -= y; 
 
	/* 
	 *  fix count, the factor of 2 is a hack 
1993/0915    
	 *  fix count 
1992/0923    
	 */ 
	delayloop = (delayloop*1193*10)/x; 
	if(delayloop == 0) 
1993/0226/sys/src/9/pc/clock.c:104,1231993/0915/sys/src/9/pc/clock.c:104,117
1991/1113    
	nrun = (nrdy+nrun)*1000; 
	MACHP(0)->load = (MACHP(0)->load*19+nrun)/20; 
1991/0801    
 
1991/0802    
	if(u && p && p->state==Running){ 
1991/0808    
		/* 
		 *  preemption 
		 */ 
1991/0730    
		if(anyready()){ 
			if(p->hasspin) 
				p->hasspin = 0; 
			else 
				sched(); 
		} 
1991/1115    
		if((ur->cs&0xffff) == UESEL){ 
			spllo();		/* in case we fault */ 
			(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1);	/* profiling clock */ 
			splhi(); 
		} 
1991/0802    
	} 
1993/0915    
	if(up == 0 || (ur->cs&0xffff) != UESEL || up->state != Running) 
		return; 
 
	if(anyready()) 
		sched(); 
 
	/* user profiling clock */ 
	spllo();		/* in case we fault */ 
	(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); 
	splhi(); 
1991/0808    
} 
1993/0915/sys/src/9/pc/clock.c:88,941993/1113/sys/src/9/pc/clock.c:88,93 (short | long)
remove uartclock.
rsc Fri Mar 4 12:44:25 2005
1991/0705    
	m->ticks++; 
1991/0711    
 
	checkalarms(); 
1991/1113    
	uartclock(); 
1993/0226    
	mouseclock(); 
1991/0711    
 
1991/0808    
	/* 
Too many diffs (26 > 25). Stopping.


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)