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
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
|
|
|
|
|