		       / in users buffer
	inc	u.nread / increment the number of bytes read
	dec	u.count / decrement the number of bytes to be read
	bne	1f / any more bytes to read?; yes, branch
	mov	(sp)+,r0 / no, do a non-local return to the caller of
		         / 'readi' by:
ret: / (1) pop the return address off the stack into r0
	mov	(sp)+,r1 / (2) pop the i-number off the stack into r1
1:
	clr	*$ps / clear processor status
	rts	r0 / return to address currently on top of stack

writei:
	clr	u.nread / clear the number of bytes transmitted during
		        / read or write calls
	tst	u.count / test the byte count specified by the user
	bgt	1f / any bytes to output; yes, branch
	rts	r0 / no, return - no writing to do
1:
	mov	r1 ,-(sp) / save the i-node number on the stack
	cmp	r1,$40. / does the i-node number indicate a special file?
	bgt	dskw / no, branch to standard file output
	asl	r1 / yes, calculate the index into the special file
	jmp	*1f-2(r1) / jump table and jump to the appropriate routine
1:
	wtty	/ tty
	wppt	/ ppt
	wmem	/ mem
	wrf0	/ rf0
	wrk0	/ rk0
	wtap	/ tap0
	wtap	/ tap1
	wtap	/ tap2
	wtap	/ tap3
	wtap	/ tap4
	wtap	/ tap5
	wtap	/ tap6
	wtap	/ tap7
	xmtt	/ tty0
	xmtt	/ tty1
	xmtt	/ tty2
	xmtt	/ tty3
	xmtt	/ tty4
	xmtt	/ tty5
	xmtt	/ tty6
	xmtt	/ tty7
/	w1pr / lpr

wtty:
	jsr	r0,cpass / get next character from user buffer area; if
		         / none go to return address in syswrite
	tst	r1 / is character = null
	beq	wtty / yes, get next character
1 :
	mov	$240,*$ps / no, set processor priority to five
