<
<
<        SP DE GENERATION DE DROITE,CERCLE
<        ET MOUVEMENT DES YEUX
<        DANS UN ITEM POUR STEREO
<        PARAMETRES:
<        - FCT : -1 POUR MVT YEUX, 0 POUR DROITE ET 1 POUR CERCLE
<        - AD : @ DE DEBUT DE GENERATION
<        - RHO : DIST. YEUX OU LG DROITE OU DIAMETRE CERCLE
<        - NB : NB POINT DE VUE OU NB SEGMENT
<
<
         ENT         GENLC
         EXT         CART,SQRT
         LOCAL
LOC:     EQU         $
REL:     DZS         1               < RELAI @ GENERATION
SPCART:  WORD        CART            < SP CONVERSION
LIST:    EQU         $               < LISTE DES PARAMETRES
RHO:     DZS         2
THETA:   DZS         2
X:       DZS         2
Y:       DZS         2
RAC:     WORD        SQRT            < SP DE RACINE CARREE
LIST1:   EQU         $               < LISTE DES PARAMETRES
PARAM:   DZS         2
RESUL:   DZS         2
         DZS         1
ZERO:    FLOAT       0
QUAT:    FLOAT       4
DEUXPI:  FLOAT       6.2832
PI:      FLOAT       3.1416
PIS2:    FLOAT       1.5708
RAC2:    FLOAT       1.414
CSTE:    DZS         2               < =XMAX/RAC2
DELTHE:  DZS         2               < DELTA THETA
FLT1:    DZS         2               < TRAVAIL
FLT2:    DZS         2
FLT3:    DZS         2
CAR:     DZS         1               < CARACTERE A GENERER
PRPT:    DZS         1               < INDIC PREMIER POINT
PX:      DZS         2               < POINT PRECEDENT
PY:      DZS         2
PT5:     FLOAT       0.5
MT5:     FLOAT       -35
VALA:    DZS         1               < POUR RETENIR VALEUR DEPLACEMENT
TR5:     WORD        35
DK:      BYTE        0;"G"           < DERNIER K
DX:      BYTE        0;"W"           < DERNIER X
DY:      BYTE        0;"W"           < DERNIER Y
DXY:     WORD        DX,X            < RELAI VERS DERNIER X OU Y
VX:      BYTE        0;"X"           < VALEUR X
VY:      BYTE        0;"Y"           < VALEUR Y
VXY:     WORD        VX,X            < RELAI VERS VALEUR X OU Y
DPXY:    DZS         1               < DEPLACEMENT COURANT EN X OU Y
MOVE:    WORD        SPMOVE          < SP
DLXY:    WORD        DELXY
PLX:     WORD        PLACX
PLY:     WORD        PLACY
PLA:     WORD        PLACA
PLB:     WORD        PLACB
CCAR:    WORD        SPCAR
PLK1XY:  WORD        SPPLK1
PLXY:    WORD        SPLXY
PLXYC:   WORD        SPLXYC
ORGRET:  WORD        RETORG
PSYEUX:  WORD        YEUX
         WORD        LOC+'80
         PROG
GENLC:   EQU         $
         PSR         A,B,X,L,W       < PROTEGER LES REGISTRES
         LRP         L               < INIT BASE
         LB          -2,L
         LR          B,L
         LR          A,W             < @ PARAMETRES
         CPZ         0,W             < MVT YEUX?
         JGE         PASYEU
         BR          PSYEUX
PASYEU:  EQU         $
         LA          1,W             < @ GENERATION
         SBT         0
         STA         REL
         LA          2,W             < INIT. RHO
         FLT
         FST         RHO
         FDV         RAC2
         FST         CSTE
         FLD         ZERO            < INIT. THETA
         FST         THETA
         LA          3,W             < INIT. DELTA THETA
         FLT
         FST         FLT1
         FLD         DEUXPI
         FDV         FLT1
         FST         DELTHE
         STZ         PRPT            < 1ER POINT
         FLD         ZERO            < PT PRECEDENT=0,0
         FST         PX
         FST         PY
         LXI         0               < INDEX PLACEMENT
AUTSEG:  EQU         $
         LAD         LIST            < CONVERSION	
         BSR         SPCART
         LA          0,W             < INFINI?
         CPI         2
         JNE         PASINF
         FLD         CSTE            < LA FORMULE EST:
         FMP         CSTE            < Y=+ OU - SQRT(-(X**2+A**2)
         FST         FLT1            <   +A*SQRT(A**2+4*X**2))
         FLD         X
         FMP         X
         FST         FLT2
         FMP         QUAT
         FAD         FLT1
         FST         PARAM
         LAD         LIST1
         BSR         RAC
         FLD         RESUL
         FMP         CSTE
         FSB         FLT1
         FSB         FLT2
         FCAZ
         JGE         PASNEG
         FABS
         FCAM        PT5
         JLE         PQZERO
         WORD        '1E16
PQZERO:  EQU         $
         FLD         ZERO
PASNEG:  EQU         $
         FST         PARAM
         LAD         LIST1
         BSR         RAC
         FLD         THETA
         FCAM        PI
         JL          PASINV
         FLD         RESUL
         FNEG
         FST         RESUL
PASINV:  EQU         $
         FLD         RESUL
         FST         Y
PASINF:  EQU         $
         FLD         X
         FAD         PT5
         FST         X
         FLD         Y
         FAD         PT5
         FST         Y
         CPZ         0,W             < Y=0 SI DROITE
         JNE         VOIRY
         FLD         ZERO
         FST         Y
VOIRY:   EQU         $
         BSR         DLXY            < PLACER LES COORDONNEES
         BSR         PLX
         BSR         PLY
         LAI         "B"             < PLACER B OU A
         CPZ         PRPT
         JNE         PASPRT
         IC          PRPT
         LAI         "A"
PASPRT:  EQU         $
         STBY        &REL
         ADRI        1,X
         FLD         THETA           < SEGMENT SUIVANT
         FAD         DELTHE
         FST         THETA
         DC          3,W
         JGE         AUTSEG
RETORG:  EQU         $
         LAI         "1"             < RETOUR A L'ORIGINE
         STA         CAR
         STZ         DPXY
         FLD         PX
         FNEG
         BSR         MOVE
         LAI         "2"
         STA         CAR
         LAI         1
         STA         DPXY
         FLD         PY
         FNEG
         BSR         MOVE
         LR          X,A             < RENDRE @ FIN
         ADRI        1,A
         SLRS        1
         LR          A,X
         LAD         &REL
         STA         1,W
         PLR         A,B,X,L,W
         RSR
<
< POSITIONS DES YEUX
<
YEUX:    EQU         $
         LA          2,W             < INIT. RHO
         FLT
         FST         RHO
         FLD         PIS2            < INIT. THETA
         FST         THETA
         LA          1,W             < INIT @ PLACEMENT
         SBT         0
         STA         REL
         LA          3,W             < INIT. DELTA THETA
         ADRI        -1,A
         FLT
         FST         DELTHE
         FLD         PIS2
         FDV         DELTHE
         FST         DELTHE
         FLD         ZERO            < INIT. PT PRECEDENT
         FST         PX
         FST         PY
         LXI         0               < INDEX PLACEMENT
RESEG:   EQU         $
         LAD         LIST            < CONVERSION
         BSR         SPCART
         FLD         Y               < OEIL DROIT
         FAD         PT5
         FST         FLT2
         FLD         RHO
         FSB         FLT2
         FST         FLT3
         FST         Y
         FLD         ZERO
         FST         X
         BSR         DLXY
         BSR         PLX
         BSR         PLY
         BSR         PLA
         FLD         ZERO
         FST         X
         FLD         FLT2
         FST         Y
         BSR         DLXY
         BSR         PLX
         BSR         PLY
         BSR         PLB
         FLD         MT5             < OEIL GAUCHE
         FST         X
         FLD         FLT3
         FST         Y
         BSR         DLXY
         BSR         PLX
         BSR         PLY
         BSR         PLA
         FLD         MT5
         FST         X
         FLD         FLT2
         FST         Y
         BSR         DLXY
         BSR         PLX
         BSR         PLY
         BSR         PLB
         FLD         ZERO            < VECTEUR PROJECTIF
         FST         X
         FLD         FLT3
         FST         Y
         BSR         DLXY
         BSR         PLX
         BSR         PLY
         BSR         PLA
         FLD         ZERO
         FST         X
         FLD         FLT2
         FST         Y
         BSR         DLXY
         BSR         PLX
         BSR         PLY
         BSR         PLB
         FLD         THETA           < PT DE VUE SUIVANT
         FSB         DELTHE
         FST         THETA
         DC          3,W
         JG          RESEG
         BR          ORGRET
<
< SP DE DIFFERENCE (X,Y) A PT PRECEDENT
<
DELXY:   EQU         $
         FLD         X
         FST         FLT1
         FSB         PX
         FST         X
         FLD         FLT1
         FST         PX
         FLD         Y
         FST         FLT1
         FSB         PY
         FST         Y
         FLD         FLT1
         FST         PY
         RSR
<
< SP DE PLACEMENT DU X
<
PLACX:   EQU         $
         LAI         "1"
         STA         CAR
         STZ         DPXY
         FLD         X
         BSR         MOVE
         RSR
<
< SP DE PLACEMENT DU Y
<
PLACY:   EQU         $
         LAI         "2"
         STA         CAR
         LAI         1
         STA         DPXY
         FLD         Y
         BSR         MOVE
         RSR
<
< SP DE PLACEMENT DE A
<
PLACA:   EQU         $
         LAI         "A"
         STBY        &REL
         ADRI        1,X
         RSR
<
< SP DE PLACEMENT DE B
<
PLACB:   EQU         $
         LAI         "B"
         STBY        &REL
         ADRI        1,X
         RSR
<
< SP DE CONVERSION D'UN NOMBRE EN CARACTERE
<
SPCAR:   EQU         $
         ADRI        '30,A
         CPI         "9"
         JLE         CAR1
         ADRI        7,A
CAR1:    EQU         $
         RSR
<
< PLACEMENT DE K1 SI NECESSAIRE ET DE X OU Y
<
SPPLK1:  EQU         $
         LA          DK
         CPI         "1"
         JE          PLK11
         LAI         "K"
         STBY        &REL
         ADRI        1,X
         LAI         "1"
         STBY        &REL
         ADRI        1,X
         STZ         DX
         STZ         DY
PLK11:   EQU         $
         RSR
<
< PLACEMENT DE X OU Y SI NECESSAIRE
<
SPLXY:   EQU         $
         LA          VALA
         BSR         CCAR
         STA         VALA
         PSR         X
         LX          DPXY
         LA          &DXY
         CP          VALA
         LA          &VXY
         PLR         X
         JE          PLXY1
         STBY        &REL
         ADRI        1,X
         LA          VALA
         STBY        &REL
         ADRI        1,X
PLXY1:   EQU         $
         RSR
<
< PLACEMENT DE X OU Y SI NECESSAIRE ET DEPLACEMENT
<
SPLXYC:  EQU         $
         BSR         PLXY
         LA          CAR
         STBY        &REL
         ADRI        1,X
         RSR
<
< SP DE COMPACTION D'UN MOUVEMENT
<
SPMOVE:  EQU         $
         FIX
         JAE         MOVE3           < 0. RIEN
         JAG         MOVE1
         NGR         A               < <0. INVERSER LE SENS
         IC          CAR
         IC          CAR
MOVE1:   EQU         $
         LR          A,B             < DIVISER DEPLACEMENT PAR 35
         LAI         0
         DV          TR5
         JAE         MOVE4
         STA         VALA            < A=0
         LAI         "K"             < PLACER KZX(A)(CAR)
         STBY        &REL            <          Y
         ADRI        1,X
         LAI         "Z"
         STBY        &REL
         ADRI        1,X
         STZ         DX
         STZ         DY
         BSR         PLXYC
         LAI         "Z"             < B=0, DK=Z, DX=(A)
         STA         DK              <            DY
         LA          VALA
         PSR         X
         LX          DPXY
         STA         &DXY
         PLR         X
         CPZR        B
         JNE         MOVE10
         RSR
MOVE10:  EQU         $
         STB         VALA            < B=/0
         BSR         PLK1XY          < PLACER K1X(B)(CAR)
         BSR         PLXYC           <          Y
MOVE2:   EQU         $
         LAI         "1"             < DK=1, DX=(B)
         STA         DK              <       DY
         PSR         X
         LX          DPXY
         LB          VALA
         STB         &DXY
         PLR         X
MOVE3:   EQU         $
         RSR
MOVE4:   EQU         $
         STB         VALA
         LR          B,A             < A=0
         CPI         5
         JLE         MOVE5
         BSR         PLK1XY          < B>5, PLACER K1X(B)(CAR)
         BSR         PLXYC           <               Y
         JMP         MOVE2
MOVE5:   EQU         $
         LA          DK              < B<=5
         CPI         "1"
         JNE         MOVE8
         PSR         X
         LX          DPXY
         LA          &DXY
         PLR         X
         CPI         "1"
         JNE         MOVE8
         LR          B,A             < K=1 ET DX=1
         CPI         3               <        DY
         JLE         MOVE60
MOVE6:   EQU         $
         BSR         PLXYC           < B=4 OU 5, PLACER X(B)(CAR)
         JMP         MOVE2           <                  Y
MOVE60:  EQU         $
         STB         VALA            < B<=3, PLACER (CAR)*(B)
         LA          CAR
MOVE7:   EQU         $
         STBY        &REL
         ADRI        1,X
         DC          VALA
         JG          MOVE7
         LBI         "1"
         STB         VALA
         JMP         MOVE2
MOVE8:   EQU         $
         BSR         PLK1XY          < K=/1 OU DX=/1, PLACER K1X1(CAR)*(B)
         LR          B,A             <         DY              Y
         CPI         3
         JG          MOVE6
         LAI         1
         STA         VALA
         BSR         PLXY
         JMP         MOVE60
         END



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.