#include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "ureg.h" void delay(int ms) { 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; if((ur->cause&INTR2) == 0) { if(ur->cause & INTR4) { i = *CLRTIM1; USED(i); } return; } i = *CLRTIM0; USED(i); m->ticks++; if(m->proc) m->proc->pc = ur->pc; accounttime(); duartslave(); if((active.machs&(1<machno)) == 0) return; if(active.exiting && active.machs&(1<machno)) { print("someone's exiting\n"); exit(0); } checkalarms(); kproftimer(ur->pc); if(up == 0 || (ur->status&IEP) == 0 || up->state != Running) return; if(anyready()) sched(); /* user profiling clock */ if(ur->status & KUP) (*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1); }