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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.