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

mov $touts-toutt-1,r0 / set up r0 as index to decrement thru
/ the table
1:
tstb toutt(r0) / is the time out for this entry
beq 2f / yes
decb toutt(r0) / no, decrement the time
bne 2f / is the time 0, now
asl r0 / yes, 2 x r0 to get word index for tout entry
jsr r0,*touts(r0) / go to appropriate routine specified in this
asr r0 / touts entry; set r0 back to toutt index
2:
dec r0 / set up r0 for next entry
bge 1b / finished? , no, go back
br retisp / yes, restore registers and do a rti
ttyi: / console tty input interrupt routine
jsr r0,setisp / save reg r1, r2, r3
mov *$tkb,r1 / r1 = char in tty reader buffer
inc *$tks / set the reader enable bit
bic $!177,r1 / clear upper 9 bits of the character (strip off
/ 8th bit of char)
cmp r1,$'a-40 / is character upper case A,..., upper case Z.
/ note that
blt 1f / lower case a is represented by 141, upper case by
cmp r1,$'z-40 / 101; and lower case z by 172, upper
/ case Z by 132.
bgt 1f / if not upper case, branch
add $40,r1 / if upper case, calculate the representation of its
/ lower case counter part
1:
cmp r1,$175 / char = "}"? Note: may be quit char (fs)
beq 2f / yes 2f
cmp r1,$177 / char = "del" ?
beq 2f / yes, 2f
jsr r0,putc; 0 / put char in r1 on clist entry
br 1f
movb r1,ttyoch / put char in ttyoch
jsr r0,startty / load char in tty output data buffer
cmp r1,$4 / r1 = "eot"
beq 1f / yes, 1f
cmp r1,$12 / r1 = "lf"
beq 1f / yes 1f
cmpb cc+0,$15. / are there less than 15 chars on the input list
blo retisp / yes, return
1:
jsr r0,wakeup; runq; 0 / no, wakeup the input process
br retisp / return
2: / r1 = "}" or "delete" to get here
mov tty+[ntty*8]-8+6,r2 / move console tty buffer address to r2
beq 2f / if 0, wakeall
movb r1,6(r2) / move "}" or del into "interrupt char"
/ byte of buffer
2:
jsr r0,wakeall / wakeup all sleeping processes
br retisp / return