rotmodelbegin=$

;вращение произвольной вершины
	macro ROTVERTEX2 x,z,y
	if (x&#8000)==0
	;display "x>=0 x=",x
_x=(#1f-x)
_xsgn=0
	else
	;display "x<0 x=",x
_x=(#1f+x)
_xsgn=1
	endif
_x=_x+#40
	if (z&#8000)==0 ;display "z>=0 z=",z
_z=(#1f-z)
_zsgn=0
	else ;display "z<0 z=",z
_z=(#1f+z)
_zsgn=1
	endif
_z=_z+#60
	if (y&#8000)==0 ;display "y>=0 y=",y
_y=(#1f-y)
_ysgn=0
	else ;display "y<0 y=",y
_y=(#1f+y)
_ysgn=1
	endif
_y=_y+#20
	if z;(TWOAXES==0)||(_z != 0)
_usede=1
	else
_usede=0
	endif
	 if _usede
	 ld de,#100*_z+_x
	 endif
	ld hl,CUTS+_y ;засечки
	;ld b,l
	if y
	if _ysgn
	xor a
	sub (hl)
	else
	ld a,(hl)
	endif
	else
	xor a
	endif
	if z
	if TWOAXES==0
	 if _usede
	 ld l,d
	 else
	 ld l,_z
	 endif
	if _zsgn
	sub (hl) ;(=0 без крена)
	else
	add a,(hl) ;(=0 без крена)
	endif
	endif
	endif
	if x
	 if _usede
	 ld l,e
	 else
	 ld l,_x
	 endif
	if _xsgn
	sub (hl)
	else
	add a,(hl)
	endif
	endif
	ld c,a ;x'

	inc h

	if x
	if _xsgn
	xor a
	sub (hl)
	else
	ld a,(hl)
	endif
	else
	xor a
	endif
	if z
	 if _usede
	 ld l,d
	 else
	 ld l,_z
	 endif
	if _zsgn
	sub (hl)
	else
	add a,(hl)
	endif
	endif
	if y
	ld l,_y;b
	if _ysgn
	sub (hl)
	else
	add a,(hl)
	endif
	endif
	ld b,a ;y'
	
	inc h

	if y
	if _ysgn
	xor a
	sub (hl)
	else
	ld a,(hl)
	endif
	else
	xor a
	endif
	if z
	 if _usede
	 ld l,d
	 else
	 ld l,_z
	 endif
	if _zsgn
	sub (hl)
	else
	add a,(hl)
	endif
	endif
	if x
	 if _usede
	 ld l,e
	 else
	 ld l,_x
	 endif
	if _xsgn
	sub (hl)
	else
	add a,(hl)
	endif
	endif
	;z'
	call div8xinch
	push bc
__=$
	endm

;-sz/0/+sz можно сделать так:
        MACRO ASCUBE sign
	if sign
	 if _hl^_hlneed
	  if (_hl^_hlneed)&#ff00
	   ld hl,_hlneed
	  else
	   if ((_hlneed-(_hl+1))&#ff)==0
	    inc l
	   else
	    ld l,_hlneed&#ff
	   endif
	  endif
_hl=_hlneed
	 endif
	 if ((sign&#8000)==0)
    if _==0
        LD A,(HL)
    else
        ADD A,(HL)
    endif
_=1
	 else ;((sign&#8000)!=0)
    if _==0
	xor a
        sub (HL)
    else
        sub (HL)
    endif
_=1
	 endif
	endif ;sign
_hlneed=_hlneed+1
        ENDM 

;вращение вершины -sz/0/+sz
	macro ROTVERTEX x,z,y
_hlneed=_MATRIX
_=0
	if TWOAXES==0
        ASCUBE z ;(=0 без крена) ;не проверено
	endif
        ASCUBE x
        ASCUBE y
;a=x=-127..+127
	if _==0
	ld c,0
	else
	ld c,a
	endif
_=0
        ASCUBE z
        ASCUBE x
        ASCUBE y
;a=y=-127..+127
	if _==0
	ld b,0;e,0
	else
	ld b,a;e,a
	endif
_=0
        ASCUBE z
        ASCUBE x
        ASCUBE y
	if _==0
	xor a
	endif
;a=z=-127..+127
	CALLDIVX 0 ;c
_hl=0
	push bc
__=$
	endm

ROTCUBE
	ROTATEBEGIN
_MATRIX=MATRIX
_hl=0
                  ;X Z Y
        ROTVERTEX +sz,+sz,+sz
        ROTVERTEX +sz,+sz,-sz
        ROTVERTEX +sz,-sz,-sz
        ROTVERTEX +sz,-sz,+sz ;left
        ROTVERTEX -sz,+sz,+sz
        ROTVERTEX -sz,+sz,-sz
        ROTVERTEX -sz,-sz,-sz
        ROTVERTEX -sz,-sz,+sz ;right
	org __ ;ld:ld bc:add ix,bc:ld
	;ld hl,polycube
	;call checkvisibility ;11600t (4600t восьмибитное)
	ld ix,polycube
	call drawfaces
	;ld hl,edgecube
	;call drawedges
	jp sortobjnext
	display "   ROTCUBE size=",$-ROTCUBE

	display "rotmodel size=",$-rotmodelbegin
