#include "u.h" #include "lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "ureg.h" void delay(int ms) { ulong t, *p; int i; ms *= 7000; /* experimentally determined */ for(i=0; ictl = CTR(2)|SET16|MODE2; t->cnt2 = TIME2&0xFF; t->cnt2 = (TIME2>>8)&0xFF; t->ctl = CTR(1)|SET16|MODE2; t->cnt1 = TIME1&0xFF; t->cnt1 = (TIME1>>8)&0xFF; t->ctl = CTR(0)|SET16|MODE2; t->cnt0 = TIME0; t->cnt0 = (TIME0>>8)&0xFF; i = *CLRTIM0; USED(i); i = *CLRTIM1; USED(i); m->ticks = 0; } void clock(Ureg *ur) { int i; Proc *p; if(ur->cause & INTR2){ i = *CLRTIM0; USED(i); m->ticks++; if(m->machno == 0){ p = m->proc; if(p) p->time[p->insyscall]++; for(i=1; iproc; if(p) p->time[p->insyscall]++; } } printslave(); } if(active.exiting && active.machs&(1<machno)){ print("someone's exiting\n"); exit(); } checkalarms(); if(u && (ur->status&IEP) && u->p && u->p->state==Running){ if(anyready()) sched(); if(u->nnote && (ur->status&KUP)) notify(ur); } return; } if(ur->cause & INTR4){ extern ulong start; i = *CLRTIM1; USED(i); #ifdef PROFILING pc -= (ulong)&start; pc /= sizeof(ulong); if(pc < NPROF) profcnt[m->machno*NPROF+pc]++; #endif return; } }