BBN-V6/conf/diff1

4,5d3
* / modified 1/9/78 (jfh) to add Rk0 swap area dump from NSA 11/45
* 
7a6
. 		/ jsq BBN 3-14-79
9,11d7
* RKCS    = 177404        / RK csr for dump
* rkstart = 4360.         / allow 512. blocks for dump (won't all fit)
* 
106d101
* / Character list get/put
108,109c103,117
* .globl	_getc, _putc
* .globl	_cfreelist
---
. / =========================== C L I S T ============================== /
. /
. / These routines manipulate character queues of the form declared in
. / tty.h. putc(char, queue) puts a char on the tail of the queue;
. / getc(queue) returns a char from the head of the queue. unputc(queue)
. / returns a char from the tail of the queue, that is, the last char
. / putc'ed.
. /
. / This implementation differs from the standard one in that
. / in addition to handling char values from 0 to 255, it can also
. / handle values from -2 to -256. They are represented internally
. / with a 255 byte as prefix. A plain 255 byte is represented as
. / 255 255. (Note that -1 comes out as 255.) These additional values ease the
. / task of providing a true 8-bit path in the driver.
. / putc, unputc, getc are NOT significantly less efficient in the normal case.
111,112c119,130
* _getc:
* 	mov	2(sp),r1
---
. .globl	_cfreelist
. 
. / --------------------------- P U T C ----------------------------- /
. /
. / putc(char, queue_ptr) puts the char (actually an int) on the specified
. / queue. It returns 0 if it was successful, a nonzero value if it was not.
. /
. .globl _putc
. _putc:
. 	mov	2(sp),r0    / r0 := char
. 	mov	4(sp),r1    / r1 := q_ptr
. / save environment
115,137c133,153
* 	bis	$340,PS
* 	bic	$100,PS		/ spl 5
* 	mov	2(r1),r2	/ first ptr
* 	beq	9f		/ empty
* 	movb	(r2)+,r0	/ character
* 	bic	$!377,r0
* 	mov	r2,2(r1)
* 	dec	(r1)+		/ count
* 	bne	1f
* 	clr	(r1)+
* 	clr	(r1)+		/ last block
* 	br	2f
* 1:
* 	bit	$7,r2
* 	bne	3f
* 	mov	-10(r2),(r1)	/ next block
* 	add	$2,(r1)
* 2:
* 	dec	r2
* 	bic	$7,r2
* 	mov	_cfreelist,(r2)
* 	mov	r2,_cfreelist
* 3:
---
. 	mov	r3,-(sp)
. 
.         bis     $340,PS
.         bic     $100,PS         / spl 5
. 	cmp	r0,$377     / is it >= 0377 (unsigned)?
. 	bhis	esc_put     / yes.
. 	jsr	pc, putc    / no, do it normally
. 	br	rest	    / done
. esc_put:
. 	mov	$377,r0     / yes. Load escape char
. 	jsr	pc, putc    / enter it
. 	mov	10(sp),r0   / get char again
. 	jsr	pc, putc    / enter it
. 	beq	rest	    / if it worked, done
. / Here \377 entered, but char did not. Remove \377 and report failure.
. 	jsr	pc, unputc
. / The \377 will serve as a nonzero return value.
. 
. / restore environment
. rest:
. 	mov	(sp)+,r3
141,146d156
* 9:
* 	clr	4(r1)
* 	mov	$-1,r0
* 	mov	(sp)+,r2
* 	mov	(sp)+,PS
* 	rts	pc
148,150c158,207
* _putc:
* 	mov	2(sp),r0
* 	mov	4(sp),r1
---
. putc:	 / char in r0, q_ptr in r1; clobbers r2, r3
. 	mov	4(r1),r2	/ r2 := c_cl
. 	bne	1f
. 
. / first time, get clist block
. 
. 	mov	_cfreelist,r2	    / r2 := &clist
. 	beq	9f		    / zero? moby loss
. 	mov	(r2),_cfreelist     / unchain clist
. 	clr	(r2)+		    / clear its ptr, r2++
. 	mov	r2,2(r1)	    / c_cf := r2 (incremented)
. 	br	2f
. 
. / not first time. Check if c_cl points just after last char position in block
. 
. 1:
. 	bit	$7,r2		    / need new block?
. 	bne	2f		    / if nonzero, no.
. 	mov	_cfreelist,r3	    / else r3 := &clist
. 	beq	9f		    / zero? moby loss
. 	mov	(r3),_cfreelist     / unchain clist block
. 	mov	r3,-10(r2)	    / make current clist chain ptr -> new block
. 	mov	r3,r2
. 	clr	(r2)+		    / and zero new block's chain ptr
. 2:
. 
. / here r2 finally points at a nice place to put a char
. 
. 	movb	r0,(r2)+	    / put in char
. 	mov	r2,4(r1)	    / update c_cl
. 	inc	(r1)		    / and c_cc
. 	clr	r0		    / return zero
. 	rts	pc
. 
. / moby loss, no free storage
. 
. 9:
. 	mov	pc,r0		    / return nonzero value
. 	rts	pc
. 
. / --------------------------- G E T C ----------------------------
. /
. / getc -- get a char from a clist
. /
. / use: c = getc(queue_ptr)
. / returns -1 if empty
. 
. .globl _getc
. 
. _getc:
153,178c210,219
* 	mov	r3,-(sp)
* 	bis	$340,PS
* 	bic	$100,PS		/ spl 5
* 	mov	4(r1),r2	/ last ptr
* 	bne	1f
* 	mov	_cfreelist,r2
* 	beq	9f
* 	mov	(r2),_cfreelist
* 	clr	(r2)+
* 	mov	r2,2(r1)	/ first ptr
* 	br	2f
* 1:
* 	bit	$7,r2
* 	bne	2f
* 	mov	_cfreelist,r3
* 	beq	9f
* 	mov	(r3),_cfreelist
* 	mov	r3,-10(r2)
* 	mov	r3,r2
* 	clr	(r2)+
* 2:
* 	movb	r0,(r2)+
* 	mov	r2,4(r1)
* 	inc	(r1)		/ count
* 	clr	r0
* 	mov	(sp)+,r3
---
.         bis     $340,PS
.         bic     $100,PS         / spl 5
. 	jsr	pc,getc 	/ get char
. 	cmp	r0,$377 	/ escape char?
. 	bne	done		/ no, all done
. 	jsr	pc,getc 	/ yes, get following char
. 	cmp	r0,$377 	/ also escape?
. 	beq	done		/ if so, all done
. 	bis	$!377,r0	/ if not, must be negative value
. done:
181,187c222
* 	rts	pc
* 9:
* 	mov	pc,r0
* 	mov	(sp)+,r3
* 	mov	(sp)+,r2
* 	mov	(sp)+,PS
* 	rts	pc
---
. 	rts	pc		/ and leave
188a224,338
. getc:	 / q_ptr at 10(sp); clobbers r2
. 	mov	10(sp),r1	/ r1 := q_ptr
. 	mov	2(r1),r2	/ r2 := c_cf
. 	beq	9f		/ empty
. 	movb	(r2)+,r0	/ r0 := char
. 	bic	$!377,r0	/ undo sign-extension
. 	mov	r2,2(r1)	/ update c_cf
. 	dec	(r1)+		/ update c_cc
. 	bne	1f
. / here was last block
. 	clr	(r1)+		/ zero c_cf
. 	clr	(r1)+		/ zero c_cl
. 	br	2f		/ go put block on cfreelist
. 
. 1:
. 	bit	$7,r2		/ end of block?
. 	bne	3f		/ nope
. 	mov	-10(r2),(r1)	/ yes, update c_cf to point to next block
. 	add	$2,(r1) 	/ actually to first char of that block
. / here free block
. 2:
. 	dec	r2		/ get back into current block
. 	bic	$7,r2		/ make pointer to base of block
. 	mov	_cfreelist,(r2) / chain it onto free list
. 	mov	r2,_cfreelist
. / here leave, all OK
. 3:
. 	rts	pc
. 
. / no char to give!
. 
. 9:
. 	clr	4(r1)		/ zero c_cl???
. 	mov	$-1,r0		/ return -1
. 	rts	pc
. 
. / --------------------------- U N P U T C --------------------------- /
. /
. / char = unputc(queue_ptr) is like getc, but gets char from tail of
. / queue instead of head, thus undoing last putc.
. / Modified by BBN:Dan Franklin for escape byte processing.
. 
. .globl _unputc
. 
. _unputc:
. 	mov PS, -(sp)	    / up priority
.         bis     $340,PS
.         bic     $100,PS         / spl 5
. 	mov r2, -(sp)	    / save r2
. 	mov 6(sp), r1	    / r1 := q_ptr
. 	jsr pc, unputc	    / get last char
. 	mov r0, r2
. 	blt finish	    / if neg, must be empty
. / here we got a char. Peek at previous to see if it's escape.
. 	mov 6(sp), r1	    / r1 := q_ptr
. 	mov 4(r1), r1	    / r1 := c_cl
. 	beq finish	    / if zero, there is no previous char
. 	cmpb -(r1),$377     / is previous char escape byte?
. 	bne finish	    / nope, go away
. / here previous was escape byte. Remove it and set high byte of char.
. 	mov 6(sp), r1	    / r1 := q_ptr
. 	jsr pc, unputc	    / else get it for real
. 	mov r2, r0
. 	cmp $377, r0
. 	beq finish	/ \377 \377 maps into \377, not -1
. 	bis $!377, r0
. finish:
. 	mov (sp)+, r2
. 	mov (sp)+, PS
. 	rts pc
. 
. / unputc: qp in R1, char left in R0; clobbers r1
. unputc: 			/ Mike Patrick, June 76
. 	mov	r2,-(sp)	/ save regs
. 	mov	r3,-(sp)
. 
. 	mov	4(r1),r2	/ c_cl into r2
. 	beq	5f		/ if 0, empty queue
. 	dec	r2		/ Last char put in
. 	movb	(r2),r0 	/ char into r0
. 	bic	$!377,r0	/ undo DEC braindamage
. 	dec	(r1)+		/ decrement count, advance r1
. 	beq	4f		/ if zilch, empty queue now
. 	bit	$5,r2		/ check if emptied block
. 	bne	3f		/ if not 010b, return. (can't be 000b)
. 	bic	$7,r2		/ point to c_next
. 	mov	_cfreelist,(r2) / put empty block on freelist
. 	mov	r2,_cfreelist
. 	mov	(r1),r3 	/ c_cf into r3
. 	bic	$7,r3		/ ptr to next block down the line
. 1:	cmp	(r3),r2 	/ block preceding c_cl's ?
. 	beq	2f
. 	mov	(r3),r3 	/ nope, move down the line
. 	br	1b
. 2:				/ yep
. 	clr	(r3)		/ end of list
. 	mov	r3,r2
. 	add	$10,r2		/ r2 now points past last char put in
. 3:
. 	mov	r2,2(r1)	/ New c_cl
. 	br	9f		/ return
. 
. 4:	clr	(r1)+		/ c_cf zeroed
. 	clr	(r1)+		/ c_cl	 "
. 	bic	$7,r2
. 	mov	_cfreelist,(r2) / put block on freelist
. 	mov	r2,_cfreelist
. 	br	9f		/ return
. 
. 5:	mov	$-1,r0		/ error condition
. 
. 9:
. 	mov	(sp)+,r3	/ restore state
. 	mov	(sp)+,r2
. 	rts	pc		/ bye!
583d732
* _spl5:
584a734
. _spl5:
684d833
* / Dump entries
720a870
. 
807a958,962
. .globl	_itol
. _itol:	mov	2(sp),r0
. 	mov	4(sp),r1
. 	rts	pc
. 
819,822c974,977
* 	mov	r5,r1
* 	mov	-(r1),r4
* 	mov	-(r1),r3
* 	mov	-(r1),r2
---
. 	mov     r5,r2
. 	mov	-(r2),r4
. 	mov	-(r2),r3
. 	mov	-(r2),r2
832a988,990
. .globl	_u
. _u	= 140000
. usize	= 16.
833a992,1003
. PS	= 177776
. SSR0	= 177572
. SSR2	= 177576
. KISA0	= 172340
. KISA6	= 172354
. KISD0	= 172300
. MTC	= 172522
. UISA0	= 177640
. UISA1	= 177642
. UISD0	= 177600
. UISD1	= 177602
. IO	= 7600
835d1004
* 
851a1021,1026
. / machine language part of reboot system call.
. / reads block 0 off of disk into the low 512 bytes of memory,
. / then executes it.  This is the usual bootstrap (the one
. / with the @ prompt to which you type /unix or whatever).
. / if r4 contains a special code, r4 contains an inumber
. / No need to enter a name on tty8.
853,855c1028,1029
* 
* 
* .globl  _rkboot
---
. .if .rkboot
. .globl _rkboot
857,864c1031,1038
* /Modified to work for RK05 driver (BBN: jfh 4/78)
* 	reset                           / disable interrupts and mem mgmt
* 	mov     $177412,r1              / RKDA
* 	clr     (r1)                    / set disk address to zero
* 	clr     -(r1)                   / read 512 bytes into low memory
* 	mov     $-256.,-(r1)
* 	mov     $05,-(r1)
* 1:      tstb    (r1)                    / wait until done
---
. 	reset                   / resets memory mapping, etc.
. 	mov     $177412,r1      / clear disk sector address
. 	clr     (r1)            / set track and block address
. 	clr     -(r1)           / unibus address
. 	mov     $-256.,-(r1)    / word count
. 	mov     $05,-(r1)       / read and go in controller
. 1:
. 	tstb    (r1)            / wait until done
866c1040,1041
* 	clr     pc                      / execute it
---
. 	clr     pc              / execute it
. .endif
868,884c1043,1060
* .globl	_u
* _u	= 140000
* usize	= 16.
* 
* PS	= 177776
* SSR0	= 177572
* SSR2	= 177576
* KISA0   = 172340
* KISA6	= 172354
* KISD0	= 172300
* MTC	= 172522
* UISA0	= 177640
* UISA1	= 177642
* UISD0	= 177600
* UISD1	= 177602
* IO	= 7600
* 
---
. .if .hpboot
. .globl  _hpboot
. _hpboot:
. hpda	= 176706
. hpca	= 176734
. 	reset   /clears HPCS2, HPBAE, drive and unit select,disables interrupts
. 	clr	*$hpca
. 	mov	$hpda,r1
. 	clr     (r1)            / set track and block address to zero
. 	clr     -(r1)           / read 512 bytes into low memory
. 	mov     $-256.,-(r1)
. 	mov     $71,-(r1)       / read and go
. 1:
. 	tstb    (r1)            / wait until done
. 	bge     1b
. 	clr     pc              / execute it
. .endif
.