.define .and

! auxiliary size 'and'
! parameters:
!    de: size
!    stack: operands
!    stack: result (out)



.and:
	pop ix		! save return address
	ld h,d
	ld l,e
	add hl,sp
	ex de,hl
	add hl,de	! now hl is the base of second
	ld b,d		! operand.  bc and de are base
	ld c,e		! of the first operand
1:
	dec hl
	dec de
	ld a,(de)
	and (hl)
	ld (hl),a
	xor a
	sbc hl,bc
	jr z,2f
	add hl,bc
	jr 1b
2:
	ld h,b
	ld l,c
	ld sp,hl
	jp (ix)