1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-01-11 23:53:34 +00:00
2008-05-02 17:50:21 +00:00

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