	mov	$1,u.intr / u.intr determines handling of interrupts;
			  / u.intr = 1 take interrupt
	mov	$rtssym,30 / emt trap vector set to take system routine
	mov	$fpsym,*10 / reserved instruction trap vector set to take 
			   / system routine
	mov	$sstack,sp / stack space used during swapping
	mov	r5,-(sp) / save arguments pointer on stack
	mov	$ecore,r5 / r5 has end of core
	mov	$core,r4 / r4 has start of users core
	mov	r4,u.base / u.base has start of users core
	mov	(sp),r2 / move arguments list pointer into r2
1:
	tst	(r2)+ / argument char = "nul"
	bne	1b
	tst	-(r2) / decrement r2 by 2; r2 has addr of end of arguent 
		      / pointer list
1: / move arguments to bottom of users core
	mov	-(r2),r3 / (r3) last non zero argument ptr
	cmp	r2,(sp) / is r2 = beginning of argument ptr list
	blo	1f / branch to 1f when all arguments are moved
2:
	tstb	(r3)+
	bne	2b / scan argument for \0 (nul)
2:
	movb	-(r3),-(r5) / move argument char by char starting at 
			    / "ecore"
	cmp	r3,(r2) / moved all characters in this argument
	bhi	2b / branch 2b if not
	mov	r5,(r4)+ / move r5 into top of users core; r5 has 
			 / pointer to nth arg
	br	1b / string
1:
	clrb	-(r5)
	bic	$1,r5 / make r5 even, r5 points to last word of argument 
		      / strings
	mov	$core,r2
1: / move argument pointers into core following argument strings
	cmp	r2,r4
	bhis	1f / branch to 1f when all pointers are moved
	mov	(r2)+,-(r5)
	br	1b
1:
	sub	$core,r4 / gives number of arguments *2
	asr	r4 / divide r4 by 2 to calculate the number of args stored
	mov	r4,-(r5) / save number of arguments ahead of the argument 
			 / pointers
	clr	-(r5) / popped into ps when rti in sysrele is executed
	mov	$core,-(r5) / popped into pc when rti in sysrele 
			    / is executed
	mov	r5,0f / load second copyz argument
	tst	-(r5) / decrement r5
	mov	r5,u.r0 /
	sub	$16.,r5 / skip 8 words
	mov	r5,u.sp / assign user stack pointer value, effectively
		        / zeroes all regs when sysrele is executed
	jsr	r0,copyz; core; 0:0 / zero user's core
