PAGE
         PROG
<
<        G E N E R A T I O N   D E   P R I M I T I V E S   G R A P H I Q U E S
<
<        D E   T Y P E   <  1  2  3  4  5  6  >   E X P R I M A N T   L E S
<
<        D E P L A C E M E N T S   A   E F F E C T U E R   E N T R E   D E U X
<
<        P O I N T S.
<
<                      CE S/P TRADUIT EN TERMES DE PRIMITIVES <1,2,3,4,5,6>
<                    (VOIR LE PROCESSEUR 3D) LES DEPLACEMENTS A EFFECTUER
<                    ENTRE DEUX POINTS P1 ET P2 DE COORDONNEES RESPECTIVES
<                    (X1,Y1,Z1),(X2,Y2,Z2). CES COORDONNEES SONT PLACEES
<                    DANS UNE TABLE DE 6 MOTS BASEE PAR 'W'.
<
<                      LES DEPLACEMENTS SONT:
<                    - SUR L'AXE DES X : 1 ET 4
<                    - SUR L'AXE DES Y : 2 ET 5
<                    - SUR L'AXE DES Z : 3 ET 6
<
<        ARGUMENTS:
<
<                    'W'=ADRESSE MOT DE LA TABLE CONTENANT LES COORDONNEES.
<
<        RESULTAT:
<
<                    'A'=ADRESSE MOT DE LA SEQUENCE GENEREE, DELIMITEE
<                        PAR UN $.
<
<        NOTA:       SEUL LE REGISTRE 'A' EST DETRUIT.
<
ZZSEQ:   DZS         512             < SEQUENCE GENEREE.
ZZSEQF:  EQU         $
<
ZZPILE:  DZS         20
         LOCAL
ZZLOC:   EQU         $               < LOCAL DU S/P 'ZZGEN'.
ZZASEQ:  WORD        ZZSEQ           < RELAI MOT SUR 'ZZSEQ'.
ZZPCS:   DZS         1               < POINTEUR COURANT (OCTET) SUR 'ZZSEQ'.
ZZAOS:   WORD        ZZSEQ-ZERO*2    < RELAI OCTET SUR ZZSEQ.
ZZAOSF:  WORD        ZZSEQF-ZERO*2   < RELAI SUR FIN DE 'ZZSEQ'.
                                     < (POUR VALIDATIONS)
<
ZZINF:   WORD        '8000           < L' "INFINI".
<
ZZK:     DZS         1               < UNITE COURANTE..
ZZPRIM:  DZS         1               < PRIMITIVE COURANTE.
ZZACAL:  WORD        ZZCAL           < S/P DE CALCUL ET GENERATION.
         PROG
ZZGEN:   EQU         $
         PSR         B,X,Y           < SAUVEGARDES.
         PSR         C,L,W
         LR          A,W             < ADRESSE TABLE DES COORDONNEES.
         LRM         L
         WORD        ZZLOC+'80       < 'L' (LOCAL).
<
<        RAZ SEQUENCE GENEREE.
<
         STZ         &ZZASEQ
         LRM         A,B,X
         WORD        ZZSEQ           < EMETTEUR.
         WORD        ZZSEQ+1         < RECEPTEUR.
         WORD        ZZSEQF-ZZSEQ-1  < LONGUEUR.
<
<        INITIALISATION POINTEUR SUR 'ZZSEQ'
<
         LA          ZZAOS
         STA         ZZPCS           < POINTEUR COURANT OCTET.
<
<        ACQUISITION ET EXPLOITATION DES COORDONNEES.
<
         LA          X,W             < X1.
         LB          X+DIM,W         < X2.
         LXI         "1"             < PRIMITIVE.
         LY          DX              < UNITES EN X.
         BSR         ZZACAL
<
         LA          Y,W             < Y1.
         LB          Y+DIM,W         < Y2.
         LXI         "2"             < PRIMITIVE.
         LY          DY              < UNITES EN Y.
         BSR         ZZACAL
<
         LA          Z,W             < Z1.
         LB          Z+DIM,W         < Z2.
         LXI         "3"             < PRIMITIVE.
         LY          DZ              < UNITES EN X.
         BSR         ZZACAL
<
<        DELIMITEUR '$' DE FIN DE SEQUENCE.
<
         LX          ZZPCS           < POINTEUR COURANT (FORCEMENT
                                     < VALIDE).
         LAI         "$"
         STBY        &ZZINF
<
<        FIN DU SOUS-PROGRAMME.
<
         LA          ZZASEQ          < A=ADRESSE DE LA SEQUENCE GENEREE.
         PLR         C,L,W
         PLR         B,X,Y           < RESTAURATIONS.
         RSR
ZZCAL:   EQU         $
<
<        S/P DE GENERATION DES PRIMITIVES.
<
<        ARGUMENTS:
<                    'A'=X1/Y1/Z1
<                    'B'=X2/Y2/Z2
<                    'X'="1"/"2"/"3"
<                    'Y'=UNITES X/Y/Z
<                    'ZZPCS'=POINTEUR COURANT SUR 'ZZSEQ'.
<
<        RESULTAT: SEQUENCE DANS 'ZZSEQ'
<
<        NOTA: SI DEBORDEMENT, RETOUR CCI...
<
         PSR         A,B,X,Y         < SAUVEGARDES.
<
         STY         ZZK             < UNITE COURANTE.
         STX         ZZPRIM          < PRIMITIVE COURANTE.
<
         SBR         B,A             < CALCUL X2-X1 (OU Y2-Y1...)1-
         NGR         A,A
         SARD        16              < ON ETEND LE SIGNE.
         DV          ZZK             < DIVISION PAR UNITE.
         LR          A,X             < 'X'=NOMBRE DE PRIMITIVES A GENERER
                                     < (POSITIF OU NEGATIF).
         LA          ZZPRIM          < PRIMITIVE A PRIORI.
         CPZR        X
         JE          ZZCALF          < RIEN A GENERER.
         JG          ZZCAL1          < DEPLACEMENT POSITIF.
         ADRI        DIM,A           < "1" DEVIENT "4", ETC.
         NGR         X,X             < 'X' SERA POSITIF.
ZZCAL1:  EQU         $
         PSR         X               < SAVE INDEX DE BOUCLE.
         LX          ZZPCS           < POINTEUR COURANT.
         STBY        &ZZINF          < ON PLACE LA PRIMITIVE.
         IC          ZZPCS           < INCREMENTAION DU POINTEUR.
         LR          A,Y             < SAVE PRIMITIVE.
         LA          ZZPCS
         CP          ZZAOSF          < VALIDATION POINTEUR.
                                     < (IL NE FAUT PAS OUBLIER QU'ON
                                     < AURA UN "$" A PLACER EN FIN DE SEQUENCE.
         LR          Y,A             < RECUPERATION PRIMITIVE.
         JL          ZZCAL2          < OK.
         WORD        '1E16           < DEBORDEMENT: RETOUR CCI...
ZZCAL2:  EQU         $
         PLR         X               < RECUP INDEX DE BOUCLE.
         JDX         ZZCAL1          < SUIVANT!
<
ZZCALF:  EQU         $
         PLR         A,B,X,Y         < RESTAURATIONS.
         RSR



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.