mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-01-11 23:53:34 +00:00
56 lines
1.8 KiB
Plaintext
56 lines
1.8 KiB
Plaintext
/ u4 -- unix
|
|
|
|
setisp:
|
|
mov r1,-(sp)
|
|
mov r2,-(sp)
|
|
mov r3,-(sp)
|
|
mov clockp,-(sp)
|
|
mov $s.syst+2,clockp
|
|
jmp (r0)
|
|
|
|
clock: / interrupt from 60 cycle clock
|
|
mov r0,-(sp) / save r0
|
|
tst *$lks / restart clock?
|
|
mov $s.time+2,r0 / increment the time of day
|
|
inc (r0)
|
|
bne 1f
|
|
inc -(r0)
|
|
1:
|
|
mov clockp,r0 / increment appropriate time category
|
|
inc (r0)
|
|
bne 1f
|
|
inc -(r0)
|
|
1:
|
|
mov $uquant,r0 / decrement user time quantum
|
|
decb (r0)
|
|
bge 1f / if less than 0
|
|
clrb (r0) / make it 0
|
|
1: / decrement time out counts return now if priority was not 0
|
|
cmp 4(sp),$200 / ps greater than or equal to 200
|
|
bge 2f / yes, check time outs
|
|
tstb (r0) / no, user timed out?
|
|
bne 1f / no
|
|
cmpb sysflg,$-1 / yes, are we outside the system?
|
|
bne 1f / no, 1f
|
|
mov (sp)+,r0 / yes, put users r0 in r0
|
|
sys 0 / sysrele
|
|
rti
|
|
2: / priority is high so just decrement time out counts
|
|
mov $toutt,r0 / r0 points to beginning of time out table
|
|
2:
|
|
tstb (r0) / is the time out?
|
|
beq 3f / yes, 3f (get next entry)
|
|
decb (r0) / no, decrement the time
|
|
bne 3f / isit zero now?
|
|
incb (r0) / yes, increment the time
|
|
3:
|
|
inc r0 / next entry
|
|
cmp r0,$touts / end of toutt table?
|
|
blo 2b / no, check this entry
|
|
mov (sp)+,r0 / yes, restore r0
|
|
rti / return from interrupt
|
|
1: / decrement time out counts; if 0 call subroutine
|
|
mov (sp)+,r0 / restore r0
|
|
mov $240,*$ps / set processor priority to 5
|
|
jsr r0,setisp / save registers
|