; a0 - dest
; a1 - source
; d0 - length=-1

	xdef	_EStrCopy

_EStrCopy	move.l	a2,-(a7)		; estr
	movea.l	a0,a2
	tst.l	d0		; length
	bge.s	.getlen
	move.w	(-4,a0),d0	; get max length
.getlen	ext.l	d0		; word only
	move.l	d0,d1		; d0 now contains max copy length, store it
.loop	move.b	(a1)+,(a0)+	; src -> dst
	beq.s	.stop
	dbf.s	d0,.loop
	clr.b	(a0)		; change last byte to zero
.stop	sub.w	d0,d1
	move.l	a2,a0
	move.w	d1,(-2,a0)	; save string length
	move.l	a0,d0		; return dest
	move.l	(a7)+,a2
	rts
