mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-01-11 23:53:34 +00:00
57 lines
2.4 KiB
Plaintext
57 lines
2.4 KiB
Plaintext
jsr r0,swap / swap out process that needs to sleep
|
|
mov (sp)+,cdev / restore device
|
|
jsr r0,isintr / check for interrupt of new process
|
|
br 2f / yes, return to new user
|
|
movb (sp)+,r1 / no, r1 = old process number that was originally
|
|
/ on the wait channel
|
|
beq 1f / if 0 branch
|
|
mov $runq+4,r2 / r2 points to lowest priority queue
|
|
mov $300,*$ps / processor priority = 6
|
|
jsr r0,putlu / create link to old process number
|
|
clr *$ps / clear the status; process priority = 0
|
|
1:
|
|
rts r0 / return
|
|
2:
|
|
jmp sysret / return to user
|
|
|
|
isintr:
|
|
mov r1,-(sp) / put number of wait channel on the stack
|
|
mov r2,-(sp) / save r2
|
|
mov u.ttyp,r1 / r1 = pointer to buffer of process control
|
|
/ typewriter
|
|
beq 1f / if 0, do nothing except skip return
|
|
movb 6(r1),r1 / put interrupt char in the tty buffer in r1
|
|
beq 1f / if its 0 do nothing except skip return
|
|
cmp r1,$177 / is interrupt char = delete?
|
|
bne 3f / no, so it must be a quit (fs)
|
|
tst u.intr / yes, value of u.intr determines handling
|
|
/ of interrupts
|
|
bne 2f / if not 0, 2f. If zero do nothing.
|
|
1:
|
|
tst (r0)+ / bump r0 past system return (skip)
|
|
4:
|
|
mov (sp)+,r2 / restore r1 and r2
|
|
mov (sp)+,r1
|
|
rts r0
|
|
3: / interrupt char = quit (fs)
|
|
tst u.quit / value of u.quit determines handling of quits
|
|
beq 1b / u.quit = 0 means do nothing
|
|
2: / get here because either u.intr <> 0 or u.qult <> O
|
|
mov $tty+6,r1 / move pointer to tty block into r1
|
|
1: / find process control tty entry in tty block
|
|
cmp (r1),u.ttyp / is this the process control tty buffer?
|
|
beq 1f / block found go to 1f
|
|
add $8,r1 / look at next tty block
|
|
cmp r1,$tty+[ntty*8]+6 / are we at end of tty blocks
|
|
blo 1b / no
|
|
br 4b / no process control tty found so go to 4b
|
|
1:
|
|
mov $240,*$ps / set processor priority to 5
|
|
movb -3(r1),0f / load getc call argument; character llst
|
|
/ identifier
|
|
inc 0f / increment
|
|
1:
|
|
jsr r0,getc; 0:.. / erase output char list for control
|
|
br 4b / process tty. This prevents a line of stuff
|
|
/ being typed out after you hit the interrupt
|