;полное разрешение экрана
;96/2=48
;мы имеем в 7 странице 37 вариантов -18..0..+18

//---------------------------------------- 
// Переменные и константы 
//---------------------------------------- 
XYZMAX    EQU    15        ; максимальная длина по осям (в одну сторону) 
COR_PZ    EQU    #E0+XYZMAX    ; коэффициент для Z  
COR_Z    EQU    #C0+XYZMAX 
COR_PX    EQU    XYZMAX 
COR_PY    EQU    #20+XYZMAX

; Начальные координаты точек хранятся в формате 
; X=X+COR_Z 
; Y=Y+COR_Z 
; Z=Z+COR_Z 
; (т.е. с прибавленным смещением до начала таблиц)

; Диапазон изменения угла вращения 0..127 
; Поворот осуществляется вокруг осей Ox,Oy 
; по адресу Ay - угол вращения вокруг Oy 
; по адресу Ax - угол вращения вокруг Ox

//---------------------------------------- 
// Формат хранения таблиц: 
//---------------------------------------- 

; Таблица произведений: 

;        #DB00           #DB80 
;        +--------------+--------------+ 
;   Coord| Coord*cos(A) | Coord*sin(A) | 
;        +--------------+--------------+ 
;        Alpha          Alpha

//---------------------------------------- 
// Формулы вращения 
//---------------------------------------- 

;    OX: 
;    y` =y*cos(Ax) - z*sin(Ax) 
;    z` =y*sin(Ax) + z*cos(Ax) 

;    OY: 
;    x =x*cos(Ay) - z*sin(Ay) 
;    z =x*sin(Ay) + z*cos(Ay)

//---------------------------------------- 
// Вращение и проецирование: 
//----------------------------------------
ROT3D
	POP	BC	;10 взяли координаты C=z B=y
	//--- вращение по оси Ox: (считаем y` z`)
	LD	L,0	;7 угол Ax
Ax0	EQU	$-1
	LD	H,B	;4 (hl)=y*cos(Ax)
	LD	A,(HL)	;7
	LD	L,0	;7 угол Ax+128
Ax1	EQU	$-1
	LD	H,C	;4 (hl)=z*sin(Ax)
	SUB	(HL)	;7 a=y`=y*cos(Ax)-z*sin(Ax)
	ADD	A,COR_PY ;A=таблица проекции


    LD    H,C        ;4 
    SET    7,L        ;8    (HL)=Z*sinA 
    SUB    (HL)        ;7    A=X*cosA-Z*sinA 
    ADD    A,COR_PX    ;7 
    LD    B,A        ;4 
    LD    H,E        ;4 
    LD    A,(HL)        ;7 
    LD    H,C        ;4 
    RES    7,L        ;8 
    ADD    A,(HL)        ;7 
    ADD    A,COR_Z        ;7 
    LD    C,A        ;4 // 49+24+16=89 
    //--- вращение по оси OX: 
    LD    L,0        ;7 
Ax    EQU    $-1 
    LD    H,D        ;4 
    LD    A,(HL)        ;7 
    LD    H,C        ;4 
    SET    7,L        ;8 
    SUB    (HL)        ;7 
    ADD    A,COR_PY    ;7 
    LD    E,A        ;4 
    LD    H,D        ;4 
    LD    A,(HL)        ;7 
    LD    H,C        ;4 
    RES    7,L        ;8 
    ADD    A,(HL)        ;7 
    ADD    A,COR_PZ    ;7 // 49+24+16=89
