DOSSEG
.MODEL SMALL
.STACK 40000
.486

INCLUDE INCLUDE\FLAT.INC
INCLUDE INCLUDE\FREE_OVE.FNC
INCLUDE INCLUDE\HIMEM.INC
INCLUDE INCLUDE\VESA.INC
INCLUDE INCLUDE\CLAVIER.INC
INCLUDE FONCTION\Graph16v.fNC
INCLUDE FONCTION\BMP.fNC
INCLUDE FONCTION\TABP3D.fNC
INCLUDE FONCTION\OBJET3D.fNC
INCLUDE FONCTION\Polygone.fNC

.DATA
 MONITEUR DD 0
 MASKG DD 0
 BUFFERG DD 0
 OBJ1 DD 0
 OBJ2 DD 0
 Fond DD 0
 AngleX DD 0

.CODE              
START:
 MOV AX,@DATA
 MOV DS,AX
 FLAT_MODE                        ;Passe en mode flat
 NEW_KEY                          ;Installe le nouveau clavier
 GET_HIMEM_ADRESSE                ;Recup‚re adresse driver HIMEM
 ACTIVE_A20                       ;Active la ligne d'adresse A20
 RETURN_SVGA_INFO                 ;Retourne les infos du driver VESA
 RETURN_MODE_INFO 111H            ;
 SET_SVGA_MODE 111H               ;

 CREATE_ECRAN_RAMVIDEO 640,480,640/2,480/2,-640/2,-480/2,640/2-1,480/2-1,0,1000b
 MOV Moniteur,EAX
 CREATE_MASQUE Moniteur
 MOV MaskG,EAX
 CREATE_BufferZ -400,400,10
 MOV BufferG,EAX


 charge_objet3D "police.obj"
 MOV obj1,EAX
 charge_objet3D "disquett.obj"
 MOV obj2,EAX
 charge_objet3D "fond.obj"
 MOV Fond,EAX


 PUSH ES
   XOR AX,AX
   MOV ES,AX
   MOV EDI,Fond
   MOV EDI,ES:[EDI+4]
   MOV EAX,ES:[EDI.Forme3D_TABP3D]
   MOV EBX,ES:[EDI.Forme3D_TABP2D]
   TRANSLATE_P3D 0,0,250,EAX,EBX

 POP ES

@K1:
   INIT_MASQUE MaskG,Moniteur
   INIT_BUFFERZ BufferG

   PUSH ES

    XOR AX,AX
    MOV ES,AX
    MOV EDI,OBJ1
    MOV EDI,ES:[EDI+4]
    MOV EAX,ES:[EDI.Forme3D_TABP3D]
    MOV EBX,ES:[EDI.Forme3D_TABP2D]
    ROTATE_P3D_VECTEUR angleX,1,1,3,EAX,EBX

    XOR AX,AX
    MOV ES,AX
    MOV EDI,OBJ1
    MOV EDI,ES:[EDI+4]
    MOV EAX,ES:[EDI.Forme3D_TABP2D]
    MOV EBX,ES:[EDI.Forme3D_TABP2D]
    PROJETTE_P3D 2000,EAX,EBX


    XOR AX,AX
    MOV ES,AX
    MOV EDI,OBJ2
    MOV EDI,ES:[EDI+4]
    MOV EAX,ES:[EDI.Forme3D_TABP3D]
    MOV EBX,ES:[EDI.Forme3D_TABP2D]
    ROTATE_P3D_VECTEUR angleX,1,1,3,EAX,EBX


    XOR AX,AX
    MOV ES,AX
    MOV EDI,OBJ2
    MOV EDI,ES:[EDI+4]
    MOV EAX,ES:[EDI.Forme3D_TABP2D]
    MOV EBX,ES:[EDI.Forme3D_TABP2D]
    PROJETTE_P3D 700,EAX,EBX

   POP ES

   AJOUTE_OBJET3D_BUFFERZ obj1,moniteur,BUFFERG
   AJOUTE_OBJET3D_BUFFERZ obj2,moniteur,BUFFERG
   AJOUTE_OBJET3D_BUFFERZ Fond,moniteur,BUFFERG
   AFFICHE_POLYGONE_BUFFERZ BufferG,-400,400,Moniteur,MaskG

   KEY 2
   JNE @NK2
    ADD DWORD PTR AngleX,2
   @NK2:

   KEY 3
   JNE @NK3
    SUB DWORD PTR AngleX,10
   @NK3:

KEY 1
JNE @K1

 LIBERE_EMB MaskG
 LIBERE_EMB Moniteur
 LIBERE_EMB BufferG
 LIBERE_OBJET3D Obj1
 LIBERE_OBJET3D Obj2
 LIBERE_OBJET3D Fond

 MOV AX,0003H            ;Repasse en mode texte
 INT 10H                 ;
 DESACTIVE_A20           ;Desactive la ligne d'adresse A20
 HOLD_KEY                ;Restaure le clavier
 MOV AX,4C00H            ;Retourne au dos
 INT 21H                 ;
END START

