drawframe_prepare
        call sortobj_clear
	
	ld a,-1 ;невозможное значение рыскания объекта?
	ld (oldyaw),a ;чтобы первый раз не совпало
	;xor a
	;ld (linesdrawn),a
	ld hl,(mcamx)
	ld (frame_mcamx),hl
	ld hl,(mcamy)
	ld (frame_mcamy),hl
	ld hl,(mcamz)
	ld (frame_mcamz),hl
	;xor a
	;ld (alpha),a ;крен
	ld a,(tangage)
	ld (frame_tangage),a ;тангаж
	ld (cosZYpatch),a
	if FASTROTOBJ==0
	ld (cosZYpatch2),a
	endif
	cpl
	add a,#40+1
	ld (sinZYpatch),a
	add a,#80
	ld (sinZYpatchneg),a
	ld a,(azimuth)
	ld (frame_azimuth),a ;рыскание
	;xor #80 ;чтобы первый раз не совпало
	;ld (oldyaw),a
	;xor #80
	;ld a,(frame_azimuth) ;azimuth (yaw, рыскание)
	ld (cosZXpatch),a
	if FASTROTOBJ==0
	ld (cosZXpatch2),a
	endif
	cpl
	add a,#40+1
	ld (sinZXpatch),a
	add a,#80
	ld (sinZXpatchneg),a

	if FASTROTOBJ
cosZYpatch=$+1
	ld a,(tcos)
	;cpl
	;and   %11111100
	;add a,%00000010 ;чтобы без ошибок прибавить или вычесть +-#3ff
	;ld (cosZYpatchN),a
	ld e,a
	push af
sinZYpatch=$+1
	ld a,(tcos)
	;cpl
	;and   %11111100
	;add a,%00000010 ;чтобы без ошибок прибавить или вычесть +-#3ff
	;ld (sinZYpatchN),a
	ld hl,mulYX1-5
	call mkmul2fast_h
sinZYpatchneg=$+1
	ld a,(tcos)
	;cpl
	;and   %11111100
	;add a,%00000010 ;чтобы без ошибок прибавить или вычесть +-#3ff
	;ld (sinZYpatchnegN),a
	ld e,a
	pop af
	;ld (cosZYpatchN2),a
	ld hl,mulYX2-5
	call mkmul2fast_h
	
cosZXpatch=$+1
	ld a,(tcos)
	;cpl
	;and   %11111100
	;add a,%00000010 ;чтобы без ошибок прибавить или вычесть +-#3ff
	;ld (cosZXpatchN),a
	ld e,a
	push af
sinZXpatch=$+1
	ld a,(tcos)
	;cpl
	;and   %11111100
	;add a,%00000010 ;чтобы без ошибок прибавить или вычесть +-#3ff
	;ld (sinZXpatchN),a
	ld hl,mulZX1-5
	call mkmul2fast_h
sinZXpatchneg=$+1
	ld a,(tcos)
	;cpl
	;and   %11111100
	;add a,%00000010 ;чтобы без ошибок прибавить или вычесть +-#3ff
	;ld (sinZXpatchnegN),a
	ld e,a
	pop af
	;ld (cosZXpatchN2),a
	ld hl,mulZX2-5
	call mkmul2fast_h
	endif
        ret

       if FLOORON
drawframe_floor
;кнопка нажата, когда 0 И было 1 (т.е. keyinv&keyold)
floorkeyold=$+1
	ld c,8
	ld a,#fd
	in a,(#fe)
	ld (floorkeyold),a
	cpl
	and c
	and 8 ;'f'
	jr z,nofloorkey ;key not pressed
	ld a,(flooron)
	cpl
	ld (flooron),a
nofloorkey
flooron=$+1
	ld a,0
	or a
	call z,DOFLOOR
        ret
       endif

       if 0
drawframe_objects
	ld bc,-#80 ;bc=Y (будет =Z')
	ld hl,-#30 ;hl=X (будет =X')
	ld de,-#020 ;de=Z (будет =Y')
	ld a,#20
	add a,-3
	 inc a
	 jr z,$+3 ;-1 = невозможное значение рыскания объекта? (используется для вызова ROTMATRIX в любом случае)
	 dec a
	ld ($-2-1-4),a
	LD ix,vertwascube
	call DOOBJ ;вращающийся кубик справа внизу

	ld bc,#80;#100 ;bc=Y (будет =Z')
	ld hl,-#60 ;hl=X (будет =X')
	ld de,-#020 ;de=Z (будет =Y')
	;ld a,0
	LD ix,vertwas;cube
	call DOOBJNROT ;кубик слева внизу
	
	if 1==1
	;ld bc,-#10;#40 ;bc=Y (будет =Z')
	;ld hl,#20 ;hl=X (будет =X')
	;ld de,-(sz/2) ;de=Z (будет =Y')
	;ld a,#80;#40
	;add a,5
	 ;inc a
	 ;jr z,$+3 ;-1 = невозможное значение рыскания объекта?
	 ;dec a
	;ld ($-2-1-4),a
	;LD ix,vertwascurve
	;call DOOBJNROT
	ld bc,0 ;bc=Y (будет =Z')
	ld hl,#60 ;hl=X (будет =X')
	ld de,#02-#05c;0 ;de=Z (будет =Y') ;стена вверху
	;ld a,0;#20
	LD ix,vertwaswall
	call DOOBJNROT
	ld bc,0 ;bc=Y (будет =Z')
	ld hl,#60 ;hl=X (будет =X')
	ld de,#40-#05c ;de=Z (будет =Y') ;стена внизу
	;ld a,0;#20
	LD ix,vertwaswall
	call DOOBJNROT
	ld bc,-#80 ;bc=Y (будет =Z')
	ld hl,-#30 ;hl=X (будет =X')
	ld de,-#40-#060 ;de=Z (будет =Y')
	;ld a,0
	LD ix,vertwaspyramid
	call DOOBJNROT ;пирамида справа вверху
	endif
	
_blz=0
	if 1==0
_=0
	dup 2
	ld bc,-#180 ;bc=Y (будет =Z')
	ld hl,-#100+_ ;hl=X (будет =X')
	ld de,_blz;#80-#060 ;de=Z (будет =Y')
	;ld a,0
	LD ix,vertwascube
	call DOOBJNROT ;кубик справа
	ld bc,-#140 ;bc=Y (будет =Z')
	ld hl,-#140+_ ;hl=X (будет =X')
	ld de,_blz;#80-#060 ;de=Z (будет =Y')
	;ld a,0
	LD ix,vertwascube
	call DOOBJNROT ;кубик справа
	ld bc,-#100 ;bc=Y (будет =Z')
	ld hl,-#100+_ ;hl=X (будет =X')
	ld de,_blz;#80-#060 ;de=Z (будет =Y')
	;ld a,0
_=_+#80
	edup
	endif

	if 1==1
_=0
	ld bc,-#120;#40 ;bc=Y (будет =Z')
	ld hl,-#100+_ ;hl=X (будет =X')
	ld de,-(sz/2) ;de=Z (будет =Y')
	LD ix,vertwascurve
	call DOOBJNROT

	ld bc,-#140;#40 ;bc=Y (будет =Z')
	ld hl,-#0c0+_ ;hl=X (будет =X')
	ld de,-(sz/2) ;de=Z (будет =Y')
	LD ix,vertwascurve
	call DOOBJNROT

	dup 3
	;ld a,(col1a)
	;or a
	;jp z,1f
__=-#180
	dup 3
	ld bc,__ ;bc=Y (будет =Z')
	ld hl,-#100+_ ;hl=X (будет =X')
	ld de,_blz;#80-#060 ;de=Z (будет =Y')
	;ld a,0
	LD ix,vertwascell
	call DOOBJNROT
	ld bc,#20+__ ;bc=Y (будет =Z')
	ld hl,-#120+_ ;hl=X (будет =X')
	ld de,_blz;#80-#060 ;de=Z (будет =Y')
	;ld a,0
	LD ix,vertwascell
	call DOOBJNROT
__=__+#40
	edup
1
_=_+#40
	edup
	endif
        ret
       endif

drawframe_show
       if ATM
	call sortobjpop
        ;call swapscreen
;swapscreen
        ld a,(curpgscr)
        xor 2
        ld (curpgscr),a
        ld a,(curscrnum)
        xor 8
        ld (curscrnum),a
        ld bc,0x7ffd
        out (c),a
        jp clearscreen
       else
	call sortobjpop
       if INTERLACE
	ld hl,+(coltab&0xff00)+br1
	ld a,(hl)
	xor #55
	ld (hl),a
	ld l,br2;inc l
	ld a,(hl)
	cpl
	ld (hl),a
	ld l,br3;inc l
	ld a,(hl)
	xor #aa
	ld (hl),a
	ld l,br1a;inc l
	ld a,(hl)
	xor #55
	ld (hl),a
	ld l,br3a;inc l
	ld a,(hl)
	cpl
	ld (hl),a
       endif

	if LINEEX
	ld a,(line_opcode)
	xor #eb ;ex de,hl
	ld (line_opcode),a
	endif
	;ld hl,#8080 ;xy1
	;ld de,#909f ;xy2
	;call line
	;halt
	jp copyscreen ;92053(77525)t чересстрочно весь экран с полной очисткой
       endif
