DF'SIOD ATTRACTEUR 1'
ED'SIOD ATTRACTEUR 1'
IN0
         PAGE
         IDP         "SIOD ATTRACTEUR 1"
         $EQU        $-64            < A T T E N T I O N...
         IDP         "ATTENTION : EST EN RECOUVREMENT DE -64 MOTS !!!"
<
<
<        A T T R A C T E U R   E T R A N G E   1  :
<
<
<        FONCTION :
<                      CE MODULE CALCULE L'ATTRACTEUR
<                    D'EQUATION SUIVANTE :
<
<        X(N+1)=A1*X(N)**2+A2*X(N)*Y(N)+A3*Y(N)**2+A4*X(N)+A5*Y(N)+A6
<        Y(N+1)=A7*X(N)**2+A8*X(N)*Y(N)+A9*Y(N)**2+A10*X(N)+A11*Y(N)+A12
<        C(N+1)=A13*X(N)+A14*Y(N)+A15
<
<                    OU C(N+1) DESIGNE LA COULEUR
<                    MODULO 'NIVMAX'...
<
<                    PUIS ON MARQUE LE POINT :
<                    XS=FK*X(N+1)+TRX,
<                    YS=FK*Y(N+1)+TRY,
<                    AVEC LA COULEUR C(N+1) MODULO 'NIVMAX'.
<
<
<        ATTRACTEUR DE HENON :
<                      IL S'OBTIENT EN FAISANT TOUS
<                    COEFFICIENTS A(I) NULS, SAUF :
<
<                    A1=-7/5,
<                    A5=1,
<                    A6=1,
<                    A10=3/10.
<
<
<        A T T E N T I O N  :
<                      MARQUE LE POINT (0,0) !!!
<
<
<        PARAMETRES :
A0::     VAL         0               < NOMBRE DE POINTS A CALCULER.
A1::     VAL         A0+1            < SUITE DES COEFFICIENTS DE X(N+1).
A2::     VAL         A1+1
A3::     VAL         A2+1
A4::     VAL         A3+1
A5::     VAL         A4+1
A6::     VAL         A5+1
A7::     VAL         A6+1            < SUITE DES COEFFICIENTS DE Y(N+1).
A8::     VAL         A7+1
A9::     VAL         A8+1
A10::    VAL         A9+1
A11::    VAL         A10+1
A12::    VAL         A11+1
A13::    VAL         A12+1           < SUITE DES COEFFICIENTS DE C(N+1).
A14::    VAL         A13+1
A15::    VAL         A14+1
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
XA1:     FLOAT       0
XA2:     FLOAT       0
XA3:     FLOAT       0
XA4:     FLOAT       0
XA5:     FLOAT       0
XA6:     FLOAT       0
XA7:     FLOAT       0
XA8:     FLOAT       0
XA9:     FLOAT       0
XA10:    FLOAT       0
XA11:    FLOAT       0
XA12:    FLOAT       0
XA13:    FLOAT       0
XA14:    FLOAT       0
XA15:    FLOAT       0
XNP1:    FLOAT       0               < MEMORISE LE POINT COURANT X(N+1),
YNP1:    FLOAT       0               < Y(N+1).
ASPU3:   WORD        SPU3            < RELAI...
         PROG
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
<
< RECUPERATION DES PARAMETRES :
<
         LXI         A1
         BSR         ASPCT
         FST         XA1
         LXI         A2
         BSR         ASPCT
         FST         XA2
         LXI         A3
         BSR         ASPCT
         FST         XA3
         LXI         A4
         BSR         ASPCT
         FST         XA4
         LXI         A5
         BSR         ASPCT
         FST         XA5
         LXI         A6
         BSR         ASPCT
         FST         XA6
         LXI         A7
         BSR         ASPCT
         FST         XA7
         LXI         A8
         BSR         ASPCT
         FST         XA8
         LXI         A9
         BSR         ASPCT
         FST         XA9
         LXI         A10
         BSR         ASPCT
         FST         XA10
         LXI         A11
         BSR         ASPCT
         FST         XA11
         LXI         A12
         BSR         ASPCT
         FST         XA12
         LXI         A13
         BSR         ASPCT
         FST         XA13
         LXI         A14
         BSR         ASPCT
         FST         XA14
         LXI         A15
         BSR         ASPCT
         FST         XA15
<
< INITIALISATION DE X(N) ET Y(N) :
<
         FLD         VARU
         FST         XNP1            < X(N)=VARU,
         FLD         VARV
         FST         YNP1            < Y(N)=VARV.
<
< ENTREE DU NOMBRE D'ITERATIONS :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         LR          A,X             < (X)=NOMBRE DE POINTS A CALCULER...
         JAG         SPU1
         QUIT        1               < ?!???!
SPU1:    EQU         $
<
< BOUCLE D'ITERATION :
<
SPU3:    EQU         $
         FLD         XA1
         FMP         XNP1
         FMP         XNP1            < A1*X(N)**2.
         FST         FWORK
         FLD         XA2
         FMP         XNP1
         FMP         YNP1            < A2*X(N)*Y(N).
         FAD         FWORK
         FST         FWORK
         FLD         XA3
         FMP         YNP1
         FMP         YNP1            < A3*Y(N)**2.
         FAD         FWORK
         FST         FWORK
         FLD         XA4
         FMP         XNP1            < A4*X(N).
         FAD         FWORK
         FST         FWORK
         FLD         XA5
         FMP         YNP1            < A5*Y(N).
         FAD         XA6             < A6.
         FAD         FWORK
         PSR         A,B             < FUTUR X(N+1).
         FLD         XA7
         FMP         XNP1
         FMP         XNP1            < A7*X(N)**2.
         FST         FWORK
         FLD         XA8
         FMP         XNP1
         FMP         YNP1            < A8*X(N)*Y(N).
         FAD         FWORK
         FST         FWORK
         FLD         XA9
         FMP         YNP1
         FMP         YNP1            < A9*Y(N)**2.
         FAD         FWORK
         FST         FWORK
         FLD         XA10
         FMP         XNP1            < A10*X(N).
         FAD         FWORK
         FST         FWORK
         FLD         XA11
         FMP         YNP1            < A11*Y(N).
         FAD         XA12            < A12.
         FAD         FWORK
         PSR         A,B             < FUTUR Y(N+1).
         FLD         XA13
         FMP         XNP1            < A13*X(N).
         FST         FWORK
         FLD         XA14
         FMP         YNP1            < A14*Y(N).
         FAD         XA15            < A15.
         FAD         FWORK
         BSR         AROND
         ANDI        NIVMAX          < CALCUL DE LA COULEUR MODULO 'NIVAMX',
         STA         FWORK           < ET SAVE...
         PLR         A,B             < RECUPERATION DE Y(N+1)
         FST         YNP1
         FMP         FK
         BSR         AROND           < POUR LE CALCUL DE 'YS' :
         AD          TRY             < TRANSLATION,
         STA         YS              < QUE L'ON STORE, QUELQU'IL SOIT...
         PLR         A,B             < RECUPERATION DE X(N+1),
         FST         XNP1            < QUE L'ON MEMORISE...
         FMP         FK
         BSR         AROND           < POUR LE CALCUL DE 'XS' :
         AD          TRX             < TRANSLATION,
         JAL         SPU2            < HORS-ECRAN...
         CPI         NPOLM1          < ???
         JG          SPU2            < HORS-ECRAN...
         STA         XS
         LA          YS              < TEST DE 'YS' :
         JAL         SPU2            < 'YS' HORS-ECRAN...
         CPI         NLIGM1          < ???
         JG          SPU2            < HORS-ECRAN...
         LA          FWORK           < (A)=COULEUR DE (XS,YS),
         BSR         ASPRPS          < QUE L'ON MARQUE...
<
< FIN DE L'ITERATION :
<
SPU2:    EQU         $
         JDX         SPU4            < A L'ITERATION SUIVANTE...
         JMP         SPU5
SPU4:    EQU         $
         BR          ASPU3           < RELAI...
SPU5:    EQU         $
<
<
<        C O M P O S A N T E   E N   ' V '   E T   ' W '  :
<
<
SPV:     EQU         $
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOD ATTRACTEUR 1'
DF'SIOD CHIFFRAGE 1'
ED'SIOD CHIFFRAGE 1'
IN0
         PAGE
         IDP         "SIOD CHIFFRAGE 1"
<
<
<        C H I F F R A G E   1  :
<
<
<        FONCTION :
<                      CE MODULE DEFINIT UNE
<                    TRANSFORMATION 'T' TELLE QUE
<                    T*T=1 ; ELLE PERMET DONC EN
<                    L'APPLIQUANT DE CHIFFRER UNE
<                    IMAGE, ET EN LA REAPPLIQUANT
<                    DE LA DECHIFFRER. ELLE UTILISE
<                    LA CONSTANTE MAGIQUE...
<
<
         LOCAL
FLOC:    EQU         $
MAGIC::  VAL         7               < FABULEUSE CONSTANTE MAGIQUE...
ACHIFR:  WORD        TCHIFR,X        < RELAI D'ACCES A LA LISTE DE CHIFFRAGE...
FCREST:: VAL         'FD00           < ACCES AU RESTE D'UNE DIVISION...
NBITCX:: VAL         NBITMO/NBRHEX   < NOMBRE DE BITS PAR CHIFFRE HEXA-DECIMAL.
TCHIFR:  EQU         $               < TABLE DE CHIFFRAGE :
XWOR%2:  VAL         NBITMO-NBITCX
         DO          BASE16
         WORD        0=FCDO)MFFFF+1+BASE16-1*MAGIC/BASE16(0=FCREST>XWOR%2
PCHIFR:  WORD        CHIFRE          < S/P DE CHIFFRAGE...
         PROG
<
<
<        M O D U L E   D E   C H I F F R A G E  :
<
<
<        ARGUMENT :
<                    (A,B)=COORDONNEE A CHIFFRER.
<
<
<        RESULTAT :
<                    (A,B)=COORDONNEE CHIFFREE.
<
<
CHIFRE:  EQU         $
         FIX                         < (A)=COORDONNEE ENTIERE,
         LR          A,B             < QUE L'ON MET DANS 'B',
         LAI         0               < ET CLEAR DE 'A'...
         LXI         NBRHEX          < NOMBRE DE TOURS A FAIRE.
CHIFR1:  EQU         $
         SCLD        NBITCX          < (A)=CHIFFRE HEXA COURANT,
         PSR         X
         LR          A,X
         LA          &ACHIFR         < ET CHIFFRAGE...
         PLR         X
         JDX         CHIFR1          < ET AU CHIFFRE SUIVANT...
         SCRD        NBITMO-NBITCX   < (A)=COORDONNE ENTIERE CHIFFREE,
         FLT                         < ET CONVERSION FLOTTANTE...
         RSR
<
<
<        C O O R D O N N E E   E N   ' U '  :
<
<
SPU:     EQU         $
         FLD         VARU
         BSR         PCHIFR          < CHIFFRAGE DE 'VARU'.
         RSR
<
<
<        C O O R D O N N E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         VARV
         BSR         PCHIFR          < CHIFFRAGE DE 'VARV'.
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0              < ON NE BOUGE PAS...
         RSR
:F
:F
< <<'SIOD CHIFFRAGE 1'
DF'SIOD CHIFFRAGE 2'
ED'SIOD CHIFFRAGE 2'
IN0
         PAGE
         IDP         "SIOD CHIFFRAGE 2"
<
<
<        C H I F F R A G E   2  :
<
<
<        FONCTION :
<                      CE MODULE CALCULE LE
<                    NOMBRE (XR,YR,NIVEAU(XR,YR)),
<                    QUI TIENT DONC SUR 19 BITS
<                    NUMEROTES DE 0 A 18 ; IL
<                    PROCEDE SUIVANT LES ARGUMENTS
<                    'A0',...,'A12' A UNE PERMUTATION
<                    DE CES 19 BITS, PUIS ON DECON-
<                    CATENE, CE QUI DONNE (XS,YS,
<                    NIVEAU(XS,YS)).
<
<
<        ARGUMENTS :
A0::     VAL         0               < PREMIER INDICE DE PERMUTATION...
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
MOCG::   VAL         'FF00
MOCD::   VAL         '00FF
K::      VAL         0
<
< ZONE DE PERMUTATION :
<
SAVE:    EQU         $
SAVE1:   WORD        0               < CONTIENDRA (XS,YS),
SAVE2:   WORD        0               <                     ET NIVEAU(XS,YS)...
<
< CONSTANTES :
<
FINITE:  FLOAT       1000000         < INFINI...
         PROG
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         FLD         FINITE          < POUR FAIRE UN OVER-SCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         FINITE          < POUR FAIRE UN OVER-SCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
<
< CALCUL DU NOMBRE INITIAL :
<
         STZ         SAVE1           < CLEAR DES
         STZ         SAVE2           <           19 BITS...
         BSR         ASPGPR          < (A)=NIVEAU(XR,YR),
         SLRD        NCOOL           < QUE L'ON POUSSE DANS 'B',
         LA          XR              < (A)=(0,XR),
         SWBR        A,A             < (A)=(XR,0),
         OR          YR              < (A,B)=(XR,YR,NIVEAU(XR,YR),...).
         LXI         0               < (X)=INDEX DES BITS...
<
< BOUCLE DE PERMUTATION :
<
SPW1:    EQU         $
         TBT         0,X             < TEST DU BIT COURANT :
         JNC         SPW2            < OK, NUL, DEJA CLEARE...
         PSR         A,B,X           < A 1 : ON VA LE PERMUTER :
         BSR         ASPCT           < RECUPERATION DE LA CONSTANTE D'INDEX (X),
         BSR         AROND           < QUE L'ON MET EN ENTIER,
         JAL         $               < !??!???!
         CPI         NBITMO+NCOOL
         JGE         $               < ???!??!?!!
         LR          A,X             < (X)=PERMUTATION(X)...
         LAD         SAVE            < (A)=ADRESSE DE LA LISTE PERMUTEE...
         SBTM        A0,X            < ET ON GENERE LA LISTE PERMUTEE...
         PLR         A,B,X
SPW2:    EQU         $
         ADRI        1,X             < PASSAGE AU BIT SUIVANT...
         XR          A,X
         CPI         NBITMO+NCOOL    < S'IL EXISTE ???
         XR          A,X
         JL          SPW1            < OUI...
<
< GENERATION D'UN POINT :
<
         LA          SAVE1
         ANDI        MOCD
         STA         YS              < GENERATION DE SON 'Y',
         LA          SAVE1
         SLRS        MOCG=K
         STA         XS              <                        DE SON 'X',
         LAI         0
         LB          SAVE2
         SLLD        NCOOL           < ET DE SON NIVEAU DANS (A)...
         BSR         ASPRPS          < ET ON LE MARQUE...
<
< GENERATION DE LA COMPOSANTE :
<
         FLD         F0
         RSR
:F
:F
< <<'SIOD CHIFFRAGE 2'
DF'SIOD CONVOLUTION 1'
ED'SIOD CONVOLUTION 1'
IN0
         PAGE
         IDP         "SIOD CONVOLUTION 1"
<
<
<        N O Y A U   D E   C O N V O L U T I O N   1  :
<
<
<        FONCTION :
<                      CE MODULE EN CHAQUE POINT (XR,YR)=(XS,YS)
<                    CALCULE :
<                    SIGMA(NIVEAU(XR,YR)*CT(I)), OU 'CT' DESIGNE
<                    UNE CONSTANTE DE TRAVAIL, ET 'I' L'INDICE
<                    DE SOMMATION VARIANT DE 1 AU NOMBRE DE
<                    POINTS 'NPM' DE LA SPIRALE. ENSUITE
<                    LE POINT (XS,YS) RECOIT COMME NIVEAU
<                    LE SIGMA DIVISE PAR 'NPM', LE TOUT
<                    CALCULE MODULO 'NIVMAX'...
<                      ENSUITE, APRES "NORMALISATION"
<                    (MULTIPLICATION PAR 'MCUMUL'
<                    ET DIVISION PAR LE NOMBRE
<                    DE POINTS 'FNP' DE LA SPIRALE),
<                    SI CETTE SOMME SE TROUVE ENTRE
<                    LE MIN ('A25') ET LE MAX ('A26'),
<                    LE POINT EST MARQUE ; ON PEUT AINSI
<                    FAIRE DES OPERATIONS DE MORPHOLO-
<                    GIE MATHEMATIQUE :
<
<                    1 - EROSION : ON NE GARDE UN POINT
<                    QUE SI TOUTE LA SPIRALE CORRESPON-
<                    DANTE EST ENTIEREMENT PLEINE DE
<                    POINTS, DONC :
<                                    MIN=MAX=VALEUR MAX DU SIGMA.
<
<                    2 - DILATATION : ON MARQUE UN POINT
<                    DES QUE LA SPIRALE CORRESPONDANTE
<                    CONTIENT UN POINT, DONC :
<                                    MIN=1,
<                                    MAX=VALEUR MAX DU SIGMA.
<
<
<        ARGUMENTS :
A20::    VAL         '20             < NOMBRE DE POINTS 'NPM' DE CHAQUE SPIRALE,
A21::    VAL         A20+1           < PAS DE LA SPIRALE (+1 EN GENERAL),
A22::    VAL         A21+1           < QUE FAIRE LORS DE LA SORTIE HORS DE
                                     < L'INTERVALLE (0,NIVMAX) :
                                     < -1 : NIVEAUX<0 --> NOIR,
                                     <      NIVEAUX>NIVMAX --> NOIR,
                                     < 0  : NIVEAUX CALCULES MODULO NIVMAX+1,
                                     < +1 : NIVEAUX<0 --> NOIR,
                                     <      NIVEAUX>NIVMAX --> NIVMAX.
A23::    VAL         A22+1           < DIVISEUR DE 'CUMUL'.
A24::    VAL         A23+1           < MULTIPLICATEUR DE SIGMA/FNP.
A25::    VAL         A24+1           < MIN(MCUMUL*SIGMA/FNP),
A26::    VAL         A25+1           < MAX(MCUMUL*SIGMA/FNP).
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
PASQ:    WORD        0               < ARGUMENT 'A21'.
DELTAX:  WORD        0
DELTAY:  WORD        0
LB:      WORD        0               < LONGUEUR DES
LB0:     WORD        0               <              BRANCHES DE LA SPIRALE.
NP:      WORD        0               < NOMBRE DE POINT COURANT,
FNP:     FLOAT       0               < IDEM EN FLOTTANT.
NPM:     WORD        0               < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
CUMUL:   FLOAT       0               < SIGMA SUR LA SPIRALE.
DCUMUL:  FLOAT       1               < DIVISEUR DE 'CUMUL'...
MCUMUL:  FLOAT       1               < MULTIPLICATEUR DE SIGMA/FNP.
FMIN:    FLOAT       0               < MIN(MCUMUL*SIGMA/FNP),
FMAX:    FLOAT       0               < MAX(MCUMUL*SIGMA/FNP).
MODET:   WORD        0               < ARGUMENT 'A22'.
FINFIN:  FLOAT       100000          < INFINI...
ASPIR:   WORD        SPIR            < CALCUL DU SIGMA SUR UNE SPIRALE...
IPREM:   WORD        0               < INDICATEUR DE PREMIERE ENTREE...
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
         PROG
SPU:     EQU         $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DU Z-BUFFER :
<
         LA          IPREM           < EST-CE LA PREMIERE FOIS ???
         JANE        SPU2            < NON...
         IC          IPREM           < OUI, INITIALISATION...
<
< DEFINITION DE LA SPIRALE :
<
         LXI         A20
         BSR         ASPCT
         FST         FNP
         BSR         AROND
         JALE        $               < ?!?!?!?!!!!!
         CPI         A20             < VALIDATION...
         JGE         $               < ??!??!?!
         STA         NPM             < NOMBRE DE POINTS MAX...
         LXI         A21
         BSR         ASPCT
         BSR         AROND
         JALE        $               < !??!?!?!
         STA         PASQ            < PAS DE PARCOURS...
<
< ENTREE DU MODE DE TRACE :
<
         LXI         A22
         BSR         ASPCT
         BSR         AROND
         STA         MODET
<
< ENTREE DU NORMALISATEUR :
<
         LXI         A23
         BSR         ASPCT
         FST         DCUMUL
<
< ENTREE DU MIN/MAX :
<
         LXI         A24
         BSR         ASPCT
         FST         MCUMUL          < MULTIPLICATEUR DE SIGMA/FNP,
         LXI         A25
         BSR         ASPCT
         FST         FMIN            < MIN(MCUMUL*SIGMA/FNP),
         LXI         A26
         BSR         ASPCT
         FST         FMAX            < MAX(MCUMUL*SIGMA/FNP).
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2:    EQU         $
         FLD         FINFIN          < POUR UN OVER-SCREEN...
         RSR                         < ?!???!
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         FINFIN          < POUR UN OVER-SCREEN...
         RSR                         < ???!?
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         LA          XR
         LB          YR
         PSR         A,B             < SAUVEGARDE DU POINT COURANT...
<
< CALCUL DU POINT COURANT :
<
         FLD         VARU
         FDV         KFU
         FDV         KUZ
         FST         FWORK
         LA          TRX
         FLT
         FAD         FWORK
         FIX
         STA         XS              < COORDONNEE 'X' DU PREMIER SOMMET,
         STA         XR              < CENTRE DE LA SPIRALE...
         FLD         VARV
         FDV         KFV
         FDV         KVZ
         FST         FWORK
         LA          TRY
         FLT
         FAD         FWORK
         FIX
         STA         YS              < COORDONNEE 'Y' DU PREMIER SOMMET,
         STA         YR              < CENTRE DE LA SPIRALE...
<
< CONVOLUTION PROPREMENT DITE :
<
         BSR         ASPIR           < MARQUAGE DU POINT COURANT (XS,YS)=(XR,YR)
<
< RETOUR :
<
         PLR         A,B
         STA         XR              < RESTAURATION
         STB         YR              <              DU POINT COURANT...
         FLD         F0              < ET PAS DE DEPLACEMENT...
         RSR
<
<
<        S O M M A T I O N   S U R   U N E   S P I R A L E
<        C E N T R E E   S U R   ( X S , Y S )   D E S
<        N I V E A U X   D E   S E S   P O I N T S  :
<
<
SPIR:    EQU         $
<
< INITIALISATION DE LA SPIRALE :
<
         LA          XR
         LB          YR
         PSR         A,B             < SAUVEGARDE DU POINT (XR,YR).
         FLD         F0
         FST         CUMUL           < CUMUL <-- 0.
         STZ         NP              < NP=NOMBRE DE POINTS TRAITES.
         LA          PASQ
         STA         DELTAX          < DELTAX <-- +1,
         STZ         DELTAY          < DELTAY <-- 0.
         LAI         1
         STA         LB0             < INITIALISATION DE LA LONGUEUR DU
                                     < PREMIER BRAS DE LA SPIRALE.
SPMOY8:  EQU         $
<
< PARCOURS D'UN BRAS :
<
SPMOY1:  EQU         $
         LA          LB0
         STA         LB              < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2:  EQU         $
         IC          NP              < COMPTAGE DES POINTS TRAITES :
         LA          NP
         CP          NPM             < FINI ???
         JG          SPMOY3          < OUI...
         LA          XR              < NON :
         JAL         SPMOY4          < LE POINT EST HORS-ECRAN...
         CPI         NPOLM1
         JG          SPMOY4          < HORS-ECRAN...
         LA          YR
         JAL         SPMOY4          < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPMOY4          < HORS-ECRAN...
         BSR         ASPGPR          < A=NIVEAU(XR,YR),
         FLT                         < NIVEAU DU POINT COURANT,
         LX          NP              < (X)=NUMERO DU POINT COURANT (DE 1 A NPM),
         ADR         X,X
         FMP         &ACT            < ET ON PONDERE LE NIVEAU PAR CT(X),
         FAD         CUMUL
         FST         CUMUL           < PUIS ON CUMULE...
SPMOY4:  EQU         $
         LA          XR
         AD          DELTAX          < CHANGEMENT DE
         STA         XR
         LA          YR
         AD          DELTAY          < POINT COURANT (XS,YS).
         STA         YR
         DC          LB              < DECOMPTAGE DES POINTS SUR LA BRANCHE :
         JG          SPMOY2          < OK, IL EN RESTE...
         CPZ         DELTAX          < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
                                     < LA LONGUEUR COURANTE DES BRANCHES ???
         JNE         SPMOY5          < NON (DX#0) ...
         IC          LB0             < OUI (DX=0) ...
SPMOY5:  EQU         $
         LA          DELTAY          < ON FAIT SUBIR AU NOMBRE COMPLEXE
         NGR         A,A             < (DX,DY) UNE ROTATION DE PI/2, SOIT
         LB          DELTAX          < UNE MULTIPLICATION PAR LA MATRICE
                                     < (0,-1,1,0)...
         STA         DELTAX          < DELTAX=-DELTAY,
         STB         DELTAY          < DELTAY=DELTAX.
         JMP         SPMOY1          < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3:  EQU         $
         FLD         CUMUL           < VALEUR DU SIGMA,
         FST         FWORK           < QUE L'ON SAUVEGARDE...
         FDV         FNP             < QUE L'ON RAMENE AU NOMBRE DE POINTS,
         FMP         MCUMUL          < QUE L'ON PONDERE...
         FCAM        FMIN            < ALORS :
         JL          SPMOYA          < TROP PETIT : POINT IGNORE...
         FCAM        FMAX            < ALORS :
         JG          SPMOYA          < TROP GRAND : POINT IGNORE...
         FLD         FWORK           < OK, ON EST ENTRE 'MIN' ET 'MAX',
                                     < RECUPERONS LE SIGMA...
         FDV         DCUMUL          < NORMALISATION...
         BSR         AROND
         CPZ         MODET           < QUEL EST LE MODE DE TRACE ???
         JNE         SPMOY6          < PAR SEUILLAGE...
         ANDI        NIVMAX          < PAR MODULO...
         JMP         SPMOY7          < VERS LA GENERATION...
SPMOY6:  EQU         $
         JAG         SPMOY9          < LE NIVEAU N'EST PAS NOIR...
         LAI         0               < NOIR, OU NEGATIF --> NOIR...
         JMP         SPMOY7          < VERS LE TRACE...
SPMOY9:  EQU         $
         CPI         NIVMAX
         JLE         SPMOY7          < ON EST DANS L'INTERVALLE (0,NIVMAX)...
         CPZ         MODET           < HORS DE CET INTERVALLE, QUEL EST LE
                                     < MODE DE TRACE ???
         LAI         0               < A PRIORI : NIVEAU>NIVMAX --> NOIR...
         JL          SPMOY7          < ET OUI, VERS LA GENERATION...
         LAI         NIVMAX          < ET NON : NIVEAU>NIVMAX --> NIVMAX...
SPMOY7:  EQU         $
         BSR         ASPRPS          < ET ON LE MARQUE...
SPMOYA:  EQU         $
         PLR         A,B
         STA         XR              < RESTAURATION DE
         STB         YR              <                 (XR,YR)...
         RSR
:F
:F
< <<'SIOD CONVOLUTION 1'
DF'SIOD GRAPHIQUE 1'
ED'SIOD GRAPHIQUE 1'
IN0
         PAGE
         IDP         "SIOD GRAPHIQUE 1"
<
<
<        G R A P H I Q U E   1  :
<
<
<        FONCTION :
<                      CE MODULE PREND L'IMAGE RESIDENTE,
<                    DEFINIT UNE GRILLE (PASIX,PASIY), Y
<                    CALCULE EN CHAQUE NOEUD LE NIVEAU
<                    MOYEN DES POINTS CONTENUS DANS LA
<                    MAILLE COURANTE ; A PARTIR DE LA
<                    IL GENERE DANS L'ITEM1 (EN QUEUE)
<                    UN PROGRAMME GRAPHIQUE EQUIVALENT SOUS
<                    LA FORME :
<                                    >X((((D
<                                           =        /
<                                           =        /
<
<                                           =        /
<                                                     Y))))
<                    OU :
<                                    X=NOM A DONNER AU SOUS-PROGRAMME,
<                                    Y=CARACTERE DE FIN CARACTERISTIQUE DE
<                                      LA MATRICE DEFINIE...
<
<
<        ARGUMENTS :
A0::     VAL         0               < INDEX D'INSERTION DU PREMIER CARACTERE
                                     < DANS L'ITEM1,
A1::     VAL         A0+1            < 'PASIX',
A2::     VAL         A1+1            < 'PASIY'.
A3::     VAL         A2+1            < NOM 'X' DU SOUS-PROGRAMME,
A4::     VAL         A3+1            < CARACTERE 'Y' DE FIN...
A5::     VAL         A4+1            < OPTIMISATION EN BOUT DE LIGNE :
                                     < =0 : OUI, ON REDUIT LA LIGNE,
                                     < #0 : NON, ON LA LAISSE INTEGRALE...
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
PREM:    WORD        -1              < INDICATEUR DE PREMIER PASSAGE...
XA3:     WORD        0               < NOM DU SOUS-PROGRAMME,
XA4:     WORD        0               < ET CARACTERE DE FIN 'Y'...
XA5:     WORD        0               < PARAMETRE D'OPTIMISATION EN BOUT DE
                                     < LIGNE.
KXA5:    WORD        0               < COMPTEUR DES "-"...
INDEX0:  WORD        0               < INDEX COURANT DE L'ITEM1 (POUR INSERER).
ANLIG1:  WORD        NLIGM1
AINFIN:  WORD        INFINI          < A CAUSE DE LA BASE 'L'...
PASIX:   WORD        0               < PAS SUR 'X',
PASIY:   WORD        0               < PAS SUR 'Y'.
LIGC:    WORD        -1              < NUMERO DE GRILLE HORIZONTALE COURANTE,
COLC:    WORD        -1              < NUMERO DE GRILLE VERTICALE COURANTE.
CUMUL:   WORD        0               < SIGMA(NIVEAUX(XR,YR)) DANS UNE MAILLE.
NPTS:    WORD        0               < NOMBRE DE POINTS DANS UNE MAILLE.
NCPM:    WORD        NBCAR*NBLIG-LNOM  < POUR NE PAS DEBORDER...
BCDA:    WORD        0               < BUFFER DE LA 'CDA',
ABCDA:   WORD        BCDA
SAVEC:   WORD        0               < CARACTERE COURANT POUR L'ITEM1...
TCDA:    WORD        SAVIT1+LTN      < ADRESSE DU PREMIER CARACTERE DE L'ITEM1
                                     < DANS LA 'CDA'...
ASTIT:   WORD        STIT            < INSERTION D'UN CARACTERE DANS ITEM1...
ASPM:    WORD        SPM             < S/P D'INSERTION DES "-"...
ASPMT:   WORD        SPMT            < INSERTION DES "-" SI NECESSAIRE...
<
<
<        C A R A C T E R E S   G R A P H I Q U E S  :
<
<
XKSUP::  VAL         ">"             < DEBUT DE SOUS-PROGRAMME GRAPHIQUE.
XKPG::   VAL         "("
XKPD::   VAL         ")"
XKDEBP:: VAL         "D"             < DEBUT DU SOUS-PROGRAMME GRAPHIQUE.
XKDEBL:: VAL         "="             < DEBUT DE LIGNE DE MATRICE,
XKFIN::  VAL         "/"             < ET FIN.
XKNUL::  VAL         "-"             < CARACTERE D'ESPACEMENT...
<
<
<        R A N G E M E N T   D A N S   I T E M 1  :
<
<
<        ARGUMENTS :
<                    (A)=CARACTERE,
<                    (INDEX0)=INDEX COURANT.
<
<
<        RESULTAT :
<                    INDICATEURS SUIVANT QU'AVANT L'INSERTION IL Y A
<                    DEBORDEMENT DANS L'ITEM1...
<
<
         PROG
STIT:    EQU         $
         PSR         A,B,X,Y
         LBI         0               < CLEAR 'B',
         STA         SAVEC           < CARACTERE A RANGER,
         LA          INDEX0
         CP          NCPM            < Y-A-T'IL PRE-DEBORDEMENT ???
         JGE         STIT1           < OUI, ON NE FAIT RIEN...
         SLRD        NOCMO=0         < POUR CONVERTIR EN UN INDEX-MOT,
         AD          TCDA            < (A)=ADRESSE DU MOT EN CDA CONTENANT LE
                                     <     CARACTERE,
         LR          B,Y             < (Y)=0 : OCTET GAUCHE,
                                     <    #0 : OCTET DROIT.
         LB          ABCDA           < (B)=ADRESSE MEMOIRE UTILISATEUR,
         LXI         1               < ET ON DEPLACE UN MOT...
         PSR         A,X
         RCDA
         LA          BCDA            < (A)=MOT COURANT,
         CPZR        Y               < OCTET DROIT OU GAUCHE ???
         JNE         STIT2           < DROIT...
         SWBR        A,A             < GAUCHE, ON PERMUTE...
STIT2:   EQU         $
         ANDI        'FF00           < CLEAR,
         OR          SAVEC           < ET CONCATENATION...
         JNE         STIT3           < OCTET DROIT...
         SWBR        A,A             < GAUCHE, ON REPERMUTE...
STIT3:   EQU         $
         STA         BCDA
         PLR         A,X
         WCDA
         LA          INDEX0          < (A)=INDEX COURANT...
         IC          INDEX0          < POUR LE CARACTERE SUIVANT...
         CP          NCPM            < POUR RESTAURER LES INDICATEURS...
STIT1:   EQU         $
         PLR         A,B,X,Y
         RSR
<
<
<        I N S E R T I O N   D E S   " - "  :
<
<
SPM:     EQU         $
         PSR         A,X             < SAUVEGARDES...
         LX          KXA5            < (X)=NOMBRE DE REPETITIONS DE "-" :
         CPZR        X               < Y-EN-A-T'IL ???
         JE          SPM1            < NON, ON SORT...
         LAI         XKNUL           < OUI, (A)=CARACTERE 'ESPACE'...
SPM2:    EQU         $
         BSR         ASTIT           < INSERTION D'UN "-",
         JDX         SPM2            < AU SUIVANT...
         STZ         KXA5            < ET ON RAZE LE COMPTE D'ITERATIONS...
SPM1:    EQU         $
         PLR         A,X
         RSR
<
<
<        I N S E R T I O N   D E S   " - "   S I   N E C E S S A I R E  :
<
<
SPMT:    EQU         $
         CPZ         XA5             < FAUT-IL OPTIMISER LES BOUTS DE
                                     < LIGNE ???
         JE          SPMT1           < OUI...
         BSR         ASPM            < NON, INSERTION DE (KXA5) CARACTERES "-"
                                     < EN BOUT DE LIGNE,
SPMT1:   EQU         $
         STZ         KXA5            < RAZ DU COMPTE D'ITERATIONS...
         RSR
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
<
< SAUVEGARDE DE (XR,YR), ET
< SYMETRIE PAR RAPPORT A OX :
<
         LA          YR
         LB          XR
         PSR         A,B
         SB          ANLIG1
         NGR         A,A
         STA         YR              < SYMETRIE/OX...
<
< TEST DE PREMIERE FOIS :
<
         CPZ         PREM            < PREMIERE FOIS ???
         JGE         SPU1            < NON...
         IC          PREM            < OUI...
<
< ENTREE DES ARGUMENTS :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         JALE        $
         STA         INDEX0          < INDEX DE RANGEMENT DANS L'ITEM1,
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         JALE        $
         STA         PASIX           < PAS EN 'X',
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JALE        $
         STA         PASIY           < PAS EN 'Y'.
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JALE        $
         STA         XA3             < NOM DU SOUS-PROGRAMME,
         LXI         A4
         BSR         ASPCT
         BSR         AROND
         JALE        $
         STA         XA4             < CARACTERE DE FIN...
         LXI         A5
         BSR         ASPCT
         BSR         AROND
         STA         XA5
<
< INITIALISATION DU BOUT DE ITEM1 :
<
         LX          INDEX0
         PSR         X               < SAVE 'INDEX0'...
         LAI         " "             < (A)=CARACTERE DE CLEAR,
SPU2:    EQU         $
         BSR         ASTIT           < MISE A BLANC DU BOUT DE ITEM1...
         JL          SPU2            < AU SUIVANT...
         PLR         X
         STX         INDEX0          < ET RESTAURATION DE ITEM1...
<
< INITIALISATION DU SOUS-PROGRAMME GRAPHIQUE :
<
         LAI         XKSUP
         BSR         ASTIT           < >
         LA          XA3
         BSR         ASTIT           < >X
         LAI         XKPG
         BSR         ASTIT           < >X(
         BSR         ASTIT           < >X((
         BSR         ASTIT           < >X(((
         BSR         ASTIT           < >X((((
         LAI         XKDEBP
         BSR         ASTIT           < >X((((D
<
< TRAITEMENT DU POINT COURANT :
<
SPU1:    EQU         $
         LA          XR
         SARD        NBITMO
         DV          PASIX
         CPZR        B               < EST-ON EN UN NOEUD ???
         JNE         SPU3            < NON, RIEN A FAIRE...
         LR          A,X             < PEUT-ETRE :
                                     < (X)=NUMERO DE GRILLE VERTICALE,
         LA          YR
         SARD        NBITMO
         DV          PASIY
         CPZR        B               < EST-ON EN UN NOEUD ???
         JNE         SPU3            < NON, RIEN A FAIRE...
         LR          A,Y             < OUI :
                                     < (Y)=NUMERO DE GRILLE HORIZONTALE.
<
< CAS D'UN NOEUD DE LA GRILLE :
<
         CP          LIGC            < VIENT-ON DE CHANGER DE LIGNE ???
         JE          SPU4            < NON...
         STA         LIGC            < OUI :
         CPZ         COLC            < DE PLUS, EST-CE LA PREMIERE ???
         JL          SPU5            < OUI...
         BSR         ASPMT           < NON, INSERTION DES "-" AVEC TEST...
         LAI         XKFIN           < PUIS,
         BSR         ASTIT           < FERMONS LA LIGNE PRECEDENTE,
SPU5:    EQU         $
         STX         COLC            < MEMORISONS LA COLONNE COURANTE...
         LAI         XKDEBL
         BSR         ASTIT           < ET OUVRONS LA NOUVELLE LIGNE...
<
< CALCUL DU NIVEAU MOYEN D'UNE MAILLE :
<
SPU4:    EQU         $
         STZ         NPTS            < RAZ DU NOMBRE DE POINTS,
         STZ         CUMUL           < ET DU CUMUL DES NIVEAUX...
         LA          XR
         LX          PASIX
         PSR         A               < SAVE 'XR'.
SPU6:    EQU         $               < BOUCLE HORIZONTALE :
         LA          YR
         PSR         A,X             < SAVE 'YR' ET 'PASIX' COURANT...
         LX          PASIY
SPU7:    EQU         $               < BOUCLE VERTICALE :
         IC          NPTS            < COMPTAGE DES POINTS,
         BSR         ASPGPR          < (A)=NIVEAU(XR,YR),
         AD          CUMUL           < ET
         STA         CUMUL           < CUMULE...
         IC          YR              < AU POINT VERTICAL SUIVANT...
         JDX         SPU7
         PLR         A,X
         STA         YR              < RESTAURATION DE 'YR',
         IC          XR              < PASSAGE A LA COLONNE SUIVANTE,
         JDX         SPU6
         PLR         A
         STA         XR              < RESTAURATION DE 'XR'.
         LA          CUMUL
         SARD        NBITMO
         DV          NPTS            < CALCUL DU NIVEAU MOYEN,
         ADRI        "0",A           < CONVERSION 'ASCI',
         CPI         "0"             < EST-CE LE NOIR ???
         JNE         SPU9            < NON...
         IC          KXA5            < OUI, COMPTAGE...
         JMP         SPU3            < ET ON DIFFERE L'INSERTION, AU CAS OU
                                     < IL S'AGIRAIT D'UN BOUT DE LIGNE...
SPU9:    EQU         $
         BSR         ASPM            < INSERTION PRELIMINAIRE DE "-" EN
                                     < ATTENTE...
         BSR         ASTIT           < RANGEMENT DU NIVEAU MOYEN COURANT.
<
< TEST DE FIN D'IMAGE :
<
SPU3:    EQU         $
         LA          XR
         CPI         NPOLM1
         JNE         SPU8            < NON...
         LA          YR
         JANE        SPU8            < NON...
<
< FERMETURE DU SOUS-PROGRAMME GRAPHIQUE :
<
         BSR         ASPMT           < INSERTION DES "-" EN ATTENTE AVEC TEST...
         LAI         XKFIN
         BSR         ASTIT           < /
         LA          XA4
         BSR         ASTIT           < /Y
         LAI         XKPD
         BSR         ASTIT           < /Y)
         BSR         ASTIT           < /Y))
         BSR         ASTIT           < /Y)))
         BSR         ASTIT           < /Y))))
<
< SORTIE :
<
SPU8:    EQU         $
         PLR         A,B
         STB         XR
         STA         YR
         FLD         &AINFIN
         RSR
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         &AINFIN
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOD GRAPHIQUE 1'
DF'SIOD LUMINANCE 1'
ED'SIOD LUMINANCE 1'
IN0
         PAGE
         IDP         "SIOD LUMINANCE 1"
<
<
<        C A L C U L   D E   L A   L U M I N A N C E   D E
<                    L ' I M A G E  :
<
<
<        FONCTION :
<                      CE MODULE CALCULE LA LUMINANCE
<                    DE L'IMAGE RESIDENTE SUIVANT LA
<                    FORMULE :
<                    Y=AR*R+AV*V+AB*B-ARV*(R+V)-AVB*(V+B)-ARB*(R+B)-ARVB*(R+V+B)
<                    OU 'R', 'V' ET 'B' SONT CALCULES
<                    A PARTIR DES REGISTRES DE COULEUR...
<
<
<        ARGUMENTS :
A0::     VAL         0               < =0 : IGNORER LES POINTS NOIRS,
                                     < #0 : LES PRENDRE EN COMPTE...
A1::     VAL         A0+1            < FACTEUR MULTIPLICATIF DE LA LUMINANCE
                                     < MOYENNE.
A2::     VAL         A1+1            < REGLAGE DU TELEVISEUR...
<
<
         LOCAL
FLOC:    EQU         $
<
< TABLE DES LUMINANCES ABSOLUES :
<
LMC::    VAL         NIVMAX+1        < NOMBRE DE LUMINANCES A MEMORISER.
MC:      EQU         $               < TABLE DES LUMINANCES ABSOLUES.
         DO          LMC
         FLOAT       0
AMC:     WORD        MC,X            < RELAI VERS LA LISTE DES LUMINANCES.
NNIV::   VAL         16              < NOMBRE DE NIVEAUX PAR CANAL.
<
< RELAIS :
<
ASP1:    WORD        SP1             < S/P DE RECUPERATION D'UN NIVEAU DE GRIS,
ASP2:    WORD        SP2             < S/P DE CALCUL DE LA LUMINANCE.
ASPU1:   WORD        SPU1            < RELAI...
<
< DEFINITION DE LA LUMINANCE :
<
FAR:     FLOAT       0.575
FAV:     FLOAT       0.680
FAB:     FLOAT       0.510
FARV:    FLOAT       -0.290
FARB:    FLOAT       -0.236
FAVB:    FLOAT       -0.255
FARVB:   FLOAT       0.1695
FLR:     FLOAT       0               < LUMINANCE ROUGE SEUL,
FLV:     FLOAT       0               < LUMINANCE VERT SEUL,
FLB:     FLOAT       0               < LUMINANCE BLEU SEUL.
F16:     FLOAT       <NNIV<0<0
<
< CONSTANTES :
<
F10000:  FLOAT       10000           < POUR FAIRE DES OVER-SCREEN...
MEMAD:   WORD        0               < ADRESSE COURANTE EN REGISTRES DE
                                     < COULEUR.
SAVNIV:  WORD        0               < VARAIABLE DE TRAVAIL.
XA0:     WORD        0               < DISCRIMINATEUR DES POINTS NOIRS...
FLOG2:   FLOAT       0.69315         < LOG(2).
F2:      FLOAT       2
F40:     FLOAT       40
XA1:     FLOAT       0               < CONSTANTE MULTIPLICATIVE.
XTV:     FLOAT       0               < REGLAGE DU TELEVISEUR.
XCUMUL:  FLOAT       0               < SIGMA(LUMINANCE DES POINTS).
XNPT:    FLOAT       0               < NOMBRE DE POINTS TRAITES.
<
< DONNEES DE CALCUL DE EXP(X) :
<
XNITER:: VAL         8               < PRECISION DU DEVELOPPEMENT DE EXP(X).
FWORK3:  FLOAT       0               < VARAIBLE DE TRAVAIL...
<
< EDITION DE LA LUMINANCE :
<
MLUM:    BYTE        '6D;" "
         ASCI        "LUM="
MLUMX:   ASCI        "XXXX"
         ASCI        " DIAPH="
MDIAPH:  ASCI        "YYYY"
LMLUM::  VAL         $-MLUM*NOCMO
AMLUM:   WORD        MLUM,X          < RELAI DE GENERATION DE "XXXX".
DEMLUM:  WORD        '0202           < EDITION DE LA LUMINANCE...
         WORD        MLUM-ZERO*NOCMO
         WORD        LMLUM
AHEXEX:  WORD        HEXEX           < CONVERSION BINAIRE --> ASCI...
F10:     FLOAT       <BASE10<0<0
C10:     WORD        BASE10
C16:     WORD        BASE16
<
<
<        C A L C U L   D ' U N   N I V E A U   D E   G R I S  :
<
<
         PROG
SP1:     EQU         $
         LAI         0               < CLEAR 'A',
         LB          SAVNIV          < B=MOT COURANT DE LA MEMOIRE,
         SLLD        NNIV=0          < A=NIVEAU DE GRIS COURANT,
         STB         SAVNIV          < ET SATUVEGARDE DU MOT COURANT...
         ADRI        -NNIV+1,A
         NGR         A,A             < NOIR=0 ET BLANC=15...
         FLT                         < RENVOI DU NIVEAU DE GRIS EN FLOTTANT...
         RSR
<
<
<        C U M U L   D E   L A   L U M I N A N C E  :
<
<
SP2:     EQU         $
         FAD         FWORK
         FST         FWORK
         RSR
<
<
<        C O N V E R S I O N   B I N A I R E  --> A S C I  :
<
<
<        ARGUMENT :
<                    A=VALEUR,
<                    X=INDEX D'INSERTION...
<
<
HEXEX:   EQU         $
<
< CONSTANTES :
<
NBITCX:: VAL         4               < NOMBRE DE BITS PAR CHIFFRE HEXA,
HA::     VAL         "A"
HNEUF::  VAL         "9"
Z::      VAL         1
I::      VAL         1
HZERO::  VAL         "0"
<
< INITIALISATION :
<
         LR          A,B             < (B)=NOMBRE A CONVERTIR...
         LYI         NBITMO/NBITCX   < 4 CONVERSIONS A FAIRE.
<
< BOUCLE DE DECODAGE :
<
Z324:    EQU         $
         LAI         0               < INITIALISATION DE A.
         SLLD        NBITCX          < RECUPERATION D'UN NBRE DE
                                     < 4 BITS DANS B.
         CPI         BASE10-Z        < LA CONVERSION EST-ELLE EN CHIFFRE ?
         JLE         Z325            < OUI , C'EST UN CHIFFRE.
         ADRI        HA-HNEUF-Z,A    < CAS D'UNE LETTRE.
Z325:    EQU         $
         ADRI        HZERO,A         < CONVERSION EN ASCI.
         STBY        &AMLUM          < ET RANGEMENT DANS LE TEXTE.
         ADRI        I,X             < PROGRESSION DE L'INDEX
                                     < DU TEXTE.
         ADRI        -I,Y            < DECOMPTE DES CONVERSIONS.
         CPZR        Y
         JG          Z324            < C'EST PAS FINI ....
<
< SORTIE :
<
         RSR
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JAE         SPU20           < OUI...
         BR          ASPU1           < NON...
SPU20:   EQU         $
<
< CALCUL DE LA LUMINANCE DES POINTS DE L'IMAGE :
<
         LAI         NSPCOL
         SBT         0
         ACTD        1               < B=ADRESSE DE LA MEMOIRE DES COULEURS,
         STB         MEMAD           < QUE L'ON SAUVEGARDE...
         LXI         0               < X=INDEX DES NIVEAUX DE GRIS.
GCOUL1:  EQU         $
         FLD         F0
         FST         FWORK           < INITIALISATION DE LA LUMINANCE...
         LA          MEMAD           < A=ADRESSE DU MOT COURANT,
         ACTD        1               < QUE L'ON RECUPERE DANS 'B',
         SLLD        NNIV=0          < ET QUE L'ON CADRE...
         STB         SAVNIV
         BSR         ASP1            < RECUPERATION DU BLEU,
         FST         FLB
         BSR         ASP1            < RECUPERATION DU VERT,
         FST         FLV
         BSR         ASP1            < RECUPERATION DU ROUGE,
         FST         FLR
         FMP         FAR
         BSR         ASP2            < +AR*R,
         FLD         FLV
         FMP         FAV
         BSR         ASP2            < +AV*V,
         FLD         FLB
         FMP         FAB
         BSR         ASP2            < +AB*B,
SPU10:   EQU         $
         FCMZ        FLR
         JE          SPU11
         FCMZ        FLV
         JE          SPU11
         FLD         FLR
         FAD         FLV
         FMP         FARV
         BSR         ASP2            < +ARV*(R+V),
SPU11:   EQU         $
         FCMZ        FLV
         JE          SPU12
         FCMZ        FLB
         JE          SPU12
         FLD         FLV
         FAD         FLB
         FMP         FAVB
         BSR         ASP2            < +AVB*(V+B),
SPU12:   EQU         $
         FCMZ        FLR
         JE          SPU13
         FCMZ        FLB
         JE          SPU13
         FLD         FLR
         FAD         FLB
         FMP         FARB
         BSR         ASP2            < +ARB*(R+B),
SPU13:   EQU         $
         FCMZ        FLR
         JE          SPU14
         FCMZ        FLV
         JE          SPU14
         FCMZ        FLB
         JE          SPU14
         FLD         FLR
         FAD         FLV
         FAD         FLB
         FMP         FARVB
         BSR         ASP2            < +ARVB*(R+V+B)...
SPU14:   EQU         $
         FCAM        F16             < SATURATION ???
         JLE         SPU9            < NON...
         FLD         F16             < OUI...
SPU9:    EQU         $
         FST         &AMC            < SAUVEGARDE DE LA LUMINANCE EQUIVALENTE
                                     < DU NIVEAU DE GRIS=(X)...
         IC          MEMAD           < AU MOT SUIVANT,
         ADRI        1,X
         LR          X,A
         CPI         NIVMAX          < S'IL EXISTE...
         JLE         GCOUL1          < ET OUI...
<
< ENTREE DES PARAMETRES :
<
         LXI         A0
         BSR         ASPCT
         FIX
         STA         XA0             < DISCRIMINATEUR DES POINTS NOIRS.
         LXI         A1
         BSR         ASPCT
         FST         XA1             < CONSTANTE MULTIPLICATIVE.
         LXI         A2
         BSR         ASPCT
         FST         XTV             < REGLAGE DU TELEVISEUR...
         BSR         AROND           < VALIDATION :
XTV0::   VAL         10              < MIN,
XTV1::   VAL         22              < MAX...
         CPI         XTV0
         JL          $               < !??!?!??!!
         CPI         XTV1
         JG          $               < ??!?!?
<
< INITIALISATIONS :
<
         FLD         F0
         FST         XCUMUL          < SIGMA(LUMINANCE),
         FST         XNPT            < NOMBRE DE POINTS TRAITES.
<
< CAS DE TOUS LES POINTS :
<
SPU1:    EQU         $
         BSR         ASPGPS          < A=NIVEAU(XS,YS)...
         LR          A,X             < X=NIVEAU DE GRIS,
         FLD         &AMC            < (A,B)=LUMINANCE ABSOLUE DE CE POINT.
         FCAZ                        < LE POINT EST-IL NOIR REELLEMENT ???
         JNE         SPU3            < NON, ON LE TRAITE...
         CPZ         XA0             < OUI, FAUT-IL L'IGNORER ???
         JE          SPU4            < OUI, ON IGNORE LES POINTS REELLEMENT
                                     < NOIRS...
SPU3:    EQU         $               < LE POINT N'EST PAS NOIR, OU BIEN IL
                                     < L'EST ET IL FAUT LE TRAITER...
         FAD         XCUMUL
         FST         XCUMUL          < CUMUL DES LUMINANCES ABSOLUES.
         FLD         XNPT
         FAD         F1
         FST         XNPT            < ET COMPTAGE DES POINTS.
SPU4:    EQU         $
<
< TEST DE FIN :
<
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         FLD         XCUMUL
         FDV         XNPT
         FST         FWORK           < FWORK=LUMINANCE MOYENNE CALCULEE.
         FLD         F40             < 40,
         FDV         XTV             < 40/REGLAGE,
         FST         FWORK1
         FLD         FWORK           < LUMINANCE,
         FDV         F2              < LUMINANCE/2,
         FSB         FWORK1          < LUMINANCE/2-40/REGLAGE,
         FAD         F2              < LUMINANCE/2-40/REGLAGE+2,
                                     < LOG(DIAPHRAGME)=L/2-40/R+2,
         FMP         FLOG2           < POUR CALCULER EXP(LOG(DIAPHRAGME)) EN
                                     < BASE 2...
<
< CALCUL DE L'EXPONENTIELLE :
<
         FST         FWORK1          < FWORK1=LOG(DIAPHRAGME)*LOG(2).
         FLD         F1
         FST         FWORK2          < FWORK2=VALEUR COURANTE DU DEVELOPPEMENT,
         LXI         XNITER          < (X)=NOMBRE DE TOURS...
SPU8:    EQU         $
         LR          X,A
         FLT
         FST         FWORK3          < 1/N,
         FLD         FWORK1          < LOG(DIAPH)*LOG(2),
         FDV         FWORK3          < LOG(DIAPH)*LOG(2)/N,
         FMP         FWORK2          < (LOG(DIAPH)*LOG(2)/N)*CUMUL,
         FAD         F1              < (LOG(DIAPH)*LOG(2)/N)*CUMUL+1,
         FST         FWORK2          < NOUVEAU CUMUL,
         JDX         SPU8            < AU TERME PRECEDENT...
<
< EDITION DE LA LUMINANCE ET DU DIAPHRAGME :
<
         FMP         F10
         BSR         AROND           < (A)=16*DIAPHRAGME...
         LXI         NBITMO/NBITCX
SPU6:    EQU         $
         SARD        NBITMO
         DV          C10
         PSR         B               < DECONCATENATION DES CHIFFRES DECIMAUX,
         JDX         SPU6
         LYI         0               < INITIALISATION DU CUMUL,
         LXI         NBITMO/NBITCX
SPU7:    EQU         $
         LR          Y,A
         MP          C16
         PLR         Y
         ADR         B,Y             < ET RECONCATENATION HEXA-DECIMALE...
         JDX         SPU7
         LR          Y,A
         LXI         MDIAPH-MLUM*NOCMO
         BSR         AHEXEX          < CONVERSION ASCI DU DIAPHRAGME...
         FLD         FWORK           < RECUPERATION DE LA LUMINANCE,
         FMP         XA1             < QUE L'ON "TRANSLATE"...
         BSR         AROND           < (A)=LUMINANCE MOYENNE,
                                     <    =SIGMA(LUMINANCE ABSOLUE)*A1*FKONS/
                                     <     NOMBRE DE POINTS.
         LXI         MLUMX-MLUM*NOCMO
         BSR         AHEXEX          < CONVERSION ASCI DE LA LUMINANCE...
         LAD         DEMLUM
         SVC         0
<
< SORTIE :
<
SPU2:    EQU         $
<
< FIN :
<
SPV:     EQU         $               < C O M P O S A N T E   E N   ' V '.
SPW:     EQU         $               < C O M P O S A N T E   E N   ' W '.
         FLD         F10000
         RSR
:F
:F
< <<'SIOD LUMINANCE 1'
DF'SIOD MOVE RDN 1'
ED'SIOD MOVE RDN 1'
IN0
         PAGE
         IDP         "SIOD MOVE RDN 1"
<
<
<        M O V E   R D N   1  :
<
<
<        FONCTION :
<                      POUR CHAQUE POINT (XR,YR), ON
<                    PREND LE NIVEAU N=NIVEAU(XR,YR)
<                    DANS 'TV2' ; ON CALCULE ALORS 3
<                    NOMBRE ALEATOIRES, QUI VONT
<                    FORMER UN VECTEUR DEPLACEMENT
<                    APPLIQUE A (XR,YR) ; DONC AINSI
<                    TOUS LES POINTS AYANT LA MEME
<                    COULEUR ASSOCIEE DANS 'TV2' AURONT
<                    LE MEME DEPLACEMENT ALEATOIRE...
<
<                    VECTEURS DEPLACEMENTS :
<                                    A03 <= A00*RDN1(N)+A01*SIN(A02) <= A04,
<                                    A08 <= A05*RDN2(N)+A06*SIN(A07) <= A09,
<                                    A0D <= A0A*RDN3(N)+A0B*SIN(A0C) <= A0E.
<
<
<        PARAMETRES :
A00::    VAL         0
A01::    VAL         A00+1
A02::    VAL         A01+1
A03::    VAL         A02+1           < MIN(DELTA(X)),
A04::    VAL         A03+1           < MAX(DELTA(X)).
A05::    VAL         A04+1
A06::    VAL         A05+1
A07::    VAL         A06+1
A08::    VAL         A07+1           < MIN(DELTA(Y)),
A09::    VAL         A08+1           < MAX(DELTA(Y)).
A0A::    VAL         A09+1
A0B::    VAL         A0A+1
A0C::    VAL         A0B+1
A0D::    VAL         A0C+1           < MIN(DELTA(Z)),
A0E::    VAL         A0D+1           < MAX(DELTA(Z)).
A0F::    VAL         A0E+1           < PREMIER GENERATEUR ALEATOIRE,
A10::    VAL         A0F+1           < SECOND GENERATEUR ALEATOIRE,
A11::    VAL         A10+1           < TROISIEME GENERATEUR ALEATOIRE.
<
<
         LOCAL
FLOC:    EQU         $
PREM:    WORD        -1              < INDICATEUR DE PREMIER PASSAGE.
<
< PARAMETRES :
<
XFA00:   FLOAT       0
XFA01:   FLOAT       0
XFA02:   FLOAT       0
XFA03:   FLOAT       0
XFA04:   FLOAT       0
XFA05:   FLOAT       0
XFA06:   FLOAT       0
XFA07:   FLOAT       0
XFA08:   FLOAT       0
XFA09:   FLOAT       0
XFA0A:   FLOAT       0
XFA0B:   FLOAT       0
XFA0C:   FLOAT       0
XFA0D:   FLOAT       0
XFA0E:   FLOAT       0
PARAM1:  FLOAT       0
PARAM2:  FLOAT       0
PARAM3:  FLOAT       0
<
< VARIABLES DE MANOEUVRE :
<
FWORK4:  FLOAT       0
FWORK5:  FLOAT       0
XFSUP:   FLOAT       0               < BORNE SUP COURANTE,
XFINF:   FLOAT       0               < BORNE INF COURANTE.
<
< PARAMETRES DE GENERATION RDN :
<
INFIN1:  FLOAT       32768           < INFINI ENTIER,
INFIN2:  FLOAT       16384           < INFINI ENTIER/2...
<
< RELAIS :
<
ASPRDN:  WORD        SPRDN           < GENERATION ALEATOIRE.
         PROG
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
<
< ENTREE DES PARAMETRES :
<
         CPZ         PREM            < EST-CE LA PREMIERE FOIS ???
         JGE         SPU1            < NON...
         IC          PREM            < OUI, ON ENTRE LES PARAMETRES :
         LXI         A00
         BSR         ASPCT
         FST         XFA00
         LXI         A01
         BSR         ASPCT
         FST         XFA01
         LXI         A02
         BSR         ASPCT
         FST         XFA02
         LXI         A03
         BSR         ASPCT
         FST         XFA03
         LXI         A04
         BSR         ASPCT
         FST         XFA04
         LXI         A05
         BSR         ASPCT
         FST         XFA05
         LXI         A06
         BSR         ASPCT
         FST         XFA06
         LXI         A07
         BSR         ASPCT
         FST         XFA07
         LXI         A08
         BSR         ASPCT
         FST         XFA08
         LXI         A09
         BSR         ASPCT
         FST         XFA09
         LXI         A0A
         BSR         ASPCT
         FST         XFA0A
         LXI         A0B
         BSR         ASPCT
         FST         XFA0B
         LXI         A0C
         BSR         ASPCT
         FST         XFA0C
         LXI         A0D
         BSR         ASPCT
         FST         XFA0D
         LXI         A0E
         BSR         ASPCT
         FST         XFA0E
         LXI         A0F
         BSR         ASPCT
         FST         PARAM1
         LXI         A10
         BSR         ASPCT
         FST         PARAM2
         LXI         A11
         BSR         ASPCT
         FST         PARAM3
<
< CALCUL DE 'X' :
<
SPU1:    EQU         $
         FLD         XFA03
         FST         XFINF           < BORNE INFERIEURE,
         FLD         XFA04
         FST         XFSUP           < BORNE SUPERIEURE,
         FLD         PARAM1          < (A,B)=PARAMETRE INITIAL...
         BSR         ASPRDN          < RDN1,
         FMP         XFA00           < A00*RDN1,
         FST         FWORK4
         FLD         XFA02           < A02,
         BSR         ASIN            < SIN(A02),
         FMP         XFA01           < A01*SIN(A02),
         FAD         FWORK4          < A00*RDN1+A01*SIN(A02),
         FAD         VARU            < ET ENFIN, ON TRANSLATE LA COORDONNEE
                                     < 'U' COURANTE...
         RSR
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
<
< CALCUL DE 'Y' :
<
         FLD         XFA08
         FST         XFINF           < BORNE INFERIEURE,
         FLD         XFA09
         FST         XFSUP           < BORNE SUPERIEURE,
         FLD         PARAM2          < (A,B)=PARAMETRE INITIAL...
         BSR         ASPRDN          < RDN2,
         FMP         XFA05           < A05*RDN2,
         FST         FWORK4
         FLD         XFA07           < A07,
         BSR         ASIN            < SIN(A07),
         FMP         XFA06           < A06*SIN(A07),
         FAD         FWORK4          < A05*RDN2+A06*SIN(A07),
         FAD         VARV            < ET ENFIN, ON TRANSLATE LA COORDONNEE
                                     < 'V' COURANTE...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
<
< CALCUL DE 'Z' :
<
         FLD         XFA0D
         FST         XFINF           < BORNE INFERIEURE,
         FLD         XFA0E
         FST         XFSUP           < BORNE SUPERIEURE,
         FLD         PARAM3          < (A,B)=PARAMETRE INITIAL...
         BSR         ASPRDN          < RDN3,
         FMP         XFA0A           < A0A*RDN3,
         FST         FWORK4
         FLD         XFA0C           < A0C,
         BSR         ASIN            < SIN(A0C),
         FMP         XFA0B           < A0B*SIN(A0C),
         FAD         FWORK4          < A0A*RDN3+A0B*SIN(A0C),
                                     < CE QUI DONNE LA COMPOSANTE 'W'...
         RSR
         PAGE
<
<
<        G E N E R A T I O N   A L E A T O I R E  :
<
<
<        ARGUMENTS :
<                    (A,B)=CONSTANTE D'INITIALISATION,
<                    (XFINF,XFSUP)=BORNES COURANTES.
<
<
<        RESULTAT :
<                    (A,B)=NOMBRE FLOTTANT ALEATOIRE COMPRIS
<                          ENTRE LA BORNE INF ET LE BORNE
<                          INFERIEURE, ET FONCTION DE (A)
<                          ET DU NIVEAU(XR,YR) DANS 'TV2'.
<
<
SPRDN:   EQU         $
         PSR         A,B             < SAUVEGARDE DE LA CONSTANTE INITIALE.
<
< ACCES A 'TV2' :
<
         LA          CTCDA
         STA         XCTCDA          < POUR ACCEDER A 'TV2'...
         LA          XS
         LB          YS
         PSR         A,B             < SAUVEGARDE DE (XS,YS),
         LA          XR
         LB          YR
         STB         YS              < ON FAIT :
         STA         XS              <           (XS,YS)=(XR,YR)...
         BSR         ASPGPS          < (A)=NIVEAU(XS,YS),
         BSR         AFLT
         BSR         ASIN            < POUR RIRE...
         EORR        B,A
         SWBR        A,A
         BSR         AFLT
         FST         FWORK           < QUE L'ON FLOTTE, ET SAUVEGARDE...
         PLR         A,B
         STB         YS              < RESTAURATION
         STA         XS              <              DE (XS,YS),
         STZ         XCTCDA          < ET RETOUR A 'TV1'...
<
< GENERATION ALEATOIRE :
<
         PLR         A,B
         FAD         FWORK           < A LAQUELLE ON AJOUTE LE NIVEAU
                                     < DU POINT (XR,YR) DANS 'TV2',
         BSR         ASIN            < DONT ON PREND LE SINUS,
         EORR        B,A             < QUE L'ON CONVERTIT EN ENTIER,
         SWBR        A,A             < POUR GENERER DU NEGATIF...
         BSR         AFLT            < PUIS EN FLOTTANT...
<
< NORMALISATION :
<
         FMP         F05             < RDN/2,
         PSR         A,B             < SAVE RDN/2...
         FAD         INFIN2          < (RDN+INFINI)/2,
         FST         FWORK4
         FLD         XFSUP           < BORNE SUPERIEURE COURANTE,
         FMP         FWORK4
         FST         FWORK4
         PLR         A,B             < RDN/2,
         FSB         INFIN2          < (RDN-INFINI)/2,
         FST         FWORK5
         FLD         XFINF           < BORNE INFERIEURE COURANTE,
         FMP         FWORK5
         FST         FWORK5
         FLD         FWORK4
         FSB         FWORK5
         FDV         INFIN1          < MISE A L'ECHELLE...
<
< SORTIE :
<
         RSR
:F
:F
< <<'SIOD MOVE RDN 1'
DF'SIOD FACETTES 1'
ED'SIOD FACETTES 1'
IN0
         PAGE
         IDP         "SIOD FACETTES 1"
<
<
<        R E C U P E R A T I O N   D E S   F A C E T T E S   1  :
<
<
<        FONCTION :
<                      CE MODULE RECUPERE LES
<                    FACETTES "X/YYXXT" GENEREES
<                    PAR LA COMBINAISON DE " +"
<                    ET DU PROGRAMME DE MAILLAGE ;
<                    A CHAQUE PASSAGE DANS 'SPU',
<                    ON RECHERCHE LA FACETTE SUIVANTE
<                    ET ON LA VISUALISE SUR L'ECRAN
<                    APRES LUI AVOIR FAIT SUBIR LA
<                    MATRICE DE TRANSFORMATION COU-
<                    RANTE..
<
<
<        ARGUMENTS :
A0::     VAL         0               < DERNIER CARACTERE ATTENDU POUR LE NOM
                                     < DES FACETTES :
                                     < "0" : POUR LES FACETTES "INTERNES",
                                     < "1" A "6" : POUR LES FACETTES "EXTERNES".
A1::     VAL         A0+1            < MOT 0 DE LA DEMANDE GRAPHIQUE,
A2::     VAL         A1+1            < MOT 1 DE LA DEMANDE GRAPHIQUE.
<
<
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
IPREM:   WORD        0               < INDICATEUR DE PREMIER PASSAGE...
IFINI:   WORD        0               < =0 : ON PEUT EXPLORER LE CATALOGUE,
                                     < #0 : ON A FINI L'EXPLORATION...
<
< RELAIS DIVERS :
<
AMATRB:  WORD        MATRB           < ACCES A LA MATRICE DE TRANSFORMATION.
APROJB:  WORD        PROJB           < PROJECTION 2D --> 3D.
AVISU:   WORD        VISU            < PASSAGE 'TV' --> 'VISU'...
<
< CONSTANTES :
<
XA0:     WORD        0               < DERNIER CARACTERE ATTENDU POUR CHAQUE
                                     < NOM DE FACETTE ("0" : FACETTES INTERNES,
                                     < ET DE "1" A "6" POUR LES FACETTES EXTER-
                                     < NES).
FINITE:  FLOAT       1000000         < POUR UN OVERS-SCREEN...
<
< FACETTES PROJETTEES :
<
CA2D:    EQU         $               < SOMMET 'A' 2D :
XSA:     WORD        0               < X(A),
YSA:     WORD        0               < Y(A).
CB2D:    EQU         $               < SOMMET 'B' 2D :
XSB:     WORD        0               < X(B),
YSB:     WORD        0               < Y(B).
CC2D:    EQU         $               < SOMMET 'C' 2D :
XSC:     WORD        0               < X(C),
YSC:     WORD        0               < Y(C).
<
<
<        D E F I N I T I O N   D E S   F A C E T T E S  :
<
<
ANFACE:  WORD        NFACET,X        < RELAI D'ACCES AU NOM DE LA FACETTE.
NFACET:  ASCI        "X/"            < NOM DES FACETTES "X/YYXX"...
NFACE1:  ASCI        "YYXX"          < DESTINE A CONTENIR L'INDICE TOPOLOGIQUE.
NFACE2:  BYTE        "Z";EOT
LNFACE:: VAL         $-NFACET*NOCMO
                                     < LONGUEUR DU NOM D'UNE FACETTE...
CF3D:    EQU         $               < DEBUT DE LA LISTE DES SOMMETS :
CA3D:    EQU         $               < SOMMET 'A' :
FXSA:    FLOAT       0               < XA,
FYSA:    FLOAT       0               < YA,
FZSA:    FLOAT       0               < ZA.
LBUF3D:: VAL         $-CA3D
NA3D:    EQU         $               < VECTEUR NORMAL EN 'A' :
XNA:     FLOAT       0               < XN(A),
YNA:     FLOAT       0               < YN(A),
ZNA:     FLOAT       0               < ZN(A).
VARUA:   FLOAT       0               < UA,
VARVA:   FLOAT       0               < VA.
IDENTA:  BYTE        0;0             < IDENTA.
CB3D:    EQU         $               < SOMMET 'B' :
FXSB:    FLOAT       0               < XB,
FYSB:    FLOAT       0               < YB,
FZSB:    FLOAT       0               < ZB.
NB3D:    EQU         $               < VECTEUR NORMAL EN 'B' :
XNB:     FLOAT       0               < XN(B),
YNB:     FLOAT       0               < YN(B),
ZNB:     FLOAT       0               < ZN(B).
VARUB:   FLOAT       0               < UB,
VARVB:   FLOAT       0               < VB.
IDENTB:  BYTE        0;0             < IDENTB.
CC3D:    EQU         $               < SOMMET 'C' :
FXSC:    FLOAT       0               < XC,
FYSC:    FLOAT       0               < YC,
FZSC:    FLOAT       0               < ZC.
NC3D:    EQU         $               < VECTEUR NORMAL EN 'C' :
XNC:     FLOAT       0               < XN(C),
YNC:     FLOAT       0               < YN(C),
ZNC:     FLOAT       0               < ZN(C).
VARUC:   FLOAT       0               < UC,
VARVC:   FLOAT       0               < VC.
IDENTC:  BYTE        0;0             < IDENTC.
PLAN3D:  EQU         $               < DEFINITION DU PLAN :
PLANAF:  FLOAT       0               < A=XN,
PLANBF:  FLOAT       0               < B=YN,
PLANCF:  FLOAT       0               < C=ZN,
PLANDF:  FLOAT       0               < D.
LFACET:: VAL         $-NFACET*NOCMO  < LONGUEUR TOTALE NOM+VALEUR D'UNE FACETTE.
<
< DONNEES D'ACCES A UNE FACETTE :
<
DEMSGN:  BYTE        '00;'02         < DEMANDE D'ACCES AU 'SGN' :
         WORD        NFACET-ZERO*NOCMO
         WORD        0               < LA LONGUEUR VARIE SUIVANT LE 'NVP'...
         WORD        -1
XRAC:    WORD        0               < NOMBRE DE CARACTERES DE LA RACINE "X/",
SXRAC:   WORD        0               < (SXRAC)=(XRAC)-Z.
ASPSGN:  WORD        SPSGN           < SOUS-PROGRAMME D'ACCES AU 'SGN'...
<
< DONNEES GRAPHIQUES :
<
BGRAPH:  EQU         $
MODE1:   BYTE        '00;'00         < OCTET GAUCHE=QUE FAIRE DES POINTS ANTE-
                                     <              RIEURS DANS 'MEMTV',
                                     < OCTET DROITE=POINTILLES.
MODE2:   BYTE        '01;'B0         < OCTET GAUCHE=TYPE DE LOGIQUE,
                                     < OCTET DROITE=LA COULEUR DU TRACE SUR
                                     <              LES 4 DERNIERS BITS.
YV1:     WORD        0               < Y1 VIDEO,
XV1:     WORD        0               < X1 VIDEO.
YV2:     WORD        0               < Y2 VIDEO,
XV2:     WORD        0               < X2 VIDEO.
YG1:     WORD        0               < Y1 GRAPHIQUE,
XG1:     WORD        0               < X1 GRAPHIQUE.
YG2:     WORD        0               < Y2 GRAPHIQUE,
XG2:     WORD        0               < X2 GRAPHIQUE.
LGRAPH:: VAL         $-BGRAPH
DEMGRA:  WORD        TVDKU           < DEMANDE D'INTERPOLATION 12K...
         WORD        BGRAPH-ZERO*NOCMO
         WORD        LGRAPH*NOCMO
         WORD        0
         PROG
         PAGE
<
<
<        A P P E L   D U   ' S G N '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET
<                    D'APPELER LE 'SGN' POUR
<                    CONNAITRE SOIT LE SUIVANT
<                    SERIE, SOIT LE SUIVANT PA-
<                    RALLELE DE LA CHAINE DE CA-
<                    RACTERES COURANTE.
<
<
<        ARGUMENT :
<                    (A)='NVPLON', 'NVPNXS' OU 'NVPNXP',
<                    (X)=INDEX DU CARACTERE COURANT.
<
<
<        RESULTAT :
<                    (A)=CODES D'ERREUR EVENTUELS.
<
<
SPSGN:   EQU         $
<
< INITIALISATIONS :
<
         PSR         X               < SAUVEGARDE DE L'INDEX COURANT...
         STBY        DEMSGN          < MISE EN PLACE DU 'NVP' CHOISI...
<
< VALIDATIONS :
<
         CPZR        X
         JGE         SPSGN1          < OK...
         QUIT        1               < E R R E U R   P R O G R A M M E...
SPSGN1:  EQU         $
<
< ACCES AU 'SGN' :
<
         CPI         '80?SGNLON
         JNE         SPSGN2          < CE N'EST PAS 'LON'...
         LAI         LFACET          < CAS DE 'LON', ON MET ON PLACE LA LONGUEUR
                                     < NOM+VALEUR...
         JMP         SPSGN3
SPSGN2:  EQU         $               < CAS DE 'NXP' ET 'NXS' :
         LR          X,A             < ON CALCULE LA LONGUEUR DE LA CHAINE
         ADRI        1,A             < COURANTE...
SPSGN3:  EQU         $
         STA         DEMSGN+2        < MISE EN PLACE DE LA LONGUEUR
                                     < COURANTE.
         LAD         DEMSGN
         SVC         0               < APPEL DU 'SGN'.
<
< ET RETOUR :
<
         LR          X,A             < A=CONDITIONS DE RETOUR.
         PLR         X               < RESTAURE X COURANT.
         RSR
         PAGE
<
<
<        P A S S A G E   ' T V '   -->   ' V I S U '  :
<
<
VISU:    EQU         $
<
< CONVERSION DE 'X' :
<
         LA          XS
         SLLS        DEDX
         STA         XS
<
< CONVERSION DE 'Y' :
<
         LRM         A
         WORD        NLIGM1
         SB          YS
         SLLS        DEDY
         STA         YS
<
< ET RETOUR :
<
         RSR
         PAGE
<
<
<        A C C E S   A   L A   M A T R I C E   D E   T R A N S F O R M A T I O N
<        P O U R   U N   S O M M E T   D E   L A   F A C E T T E  :
<
<
<        ARGUMENT :
<                    (A)=ADRESSE DU SOMMET.
<
<
MATRB:   EQU         $
         LRM         B,X
         WORD        FXS
         WORD        LBUF3D
         MOVE                        < LE SOMMET EST MIS DANS LE POINT
                                     < COURANT, AFIN QUE 'MATR' FONCTIONNE
                                     < CORRECTEMENT...
         PSR         L               < SAVE LE 'L' LOCAL...
         LRM         L
         WORD        LOC+'80         < ET MISE DE 'L' DE " +"...
         USE         L,LOC+'80
         LAD         FXS             < (A)=ADRESSE DES COORDONNEES A TRANS-
                                     <     FORMER,
         BSR         AMATR           < ET TRANSFORMATION GEOMETRIQUE...
         PLR         L               < RESTAURE LE 'L' LOCAL...
         USE         L
         RSR
         PAGE
<
<
<        P R O J E C T I O N  :
<
<
<        ARGUMENT :
<                    (FXS,FYS,FZS)=POINT 3D.
<
<
<        RESULTAT :
<                    (A)=YS,
<                    (XS,YS)=POINT 2D.
<
<
PROJB:   EQU         $
         PSR         L               < SAVE LE 'L' LOCAL...
         LRM         L
         WORD        LOC+'80         < ET MISE DE 'L' DE " +"...
         USE         L,LOC+'80
         BSR         APROJ           < PROJECTION 2D --> 3D...
         PLR         L               < RESTAURE LE 'L' LOCAL...
         USE         L
         RSR
         PAGE
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         CPZ         IFINI           < A-T'ON FINI L'EXPLORATION DU CATALOGUE ??
         JNE         SPU3            < OUI, ON SORT...
<
<
<        P A R C O U R S   D U   C A T A L O G U E   " X / "  :
<
<
         LX          SXRAC           < (X)=A PRIORI LA VALEUR SAUVEGARDEE
                                     <     DE 'XRAC'...
         CPZ         IPREM           < EST-CE LA PREMIERE FOIS ???
         JG          E102            < NON, ON GARDE 'X', ET ON VA CHERCHER LE
                                     < NOM SUIVANT...
<
< INITIALISATIONS DES CONSTANTES :
<
         IC          IPREM           < OUI, IL FAUT INITIALISER 'X'...
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         XA0             < ENTREE DU DERNIER CARACTERE DES NOMS
                                     < DES FACETTES...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         MODE1           < PREMIER MOT DE MODE GRAPHIQUE,
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         STA         MODE2           < DEUXIEME MOT DE MODE GRAPHIQUE.
<
< INITIALISATION DU PARCOURS :
<
         LXI         NFACE1-NFACET*NOCMO
         STX         XRAC            < (XRAC)=LONGUEUR DE LA RACINE,
         ADRI        -1,X
<
<        B O U C L E   D E   R E C U P E R A T I O N  :
<
E100:    EQU         $
         LAI         '89             < (A)='NVPNXS'...
         BSR         ASPSGN          < DEMANDE DE NEXT-SERIE.
         CPI         '05             < TEST DU CODE D'ERREUR.
         JE          E103            < IL N'Y A PAS DE NEXT SERIE...
         JAE         E101            < OK, LE NEXT-SERIE EXISTE.
         LR          X,A
         CP          XRAC            < EST-ON DE RETOUR SUR LA RACINE ???
         JL          E106            < OUI, ON ARRETE LE PARCOURS DU CATALOGUE.
         ADRI        -1,X            < DANS LES AUTRES CAS D'ERREURS,
                                     < ON FAIT UN RETOUR ARRIERE, CAR
                                     < EN EFFET ON NE DOIT PLUS SAVOIR
                                     < OU L'ON EN EST SUITE A UN
                                     < DELETE SIMULTANE...
         JMP         E100            < N'ETANT PAS DE RETOUR SUR
                                     < LA RACINE, ON CONTINUE.
<
< CAS OU IL Y A UN NEXT-SERIE :
<
E101:    EQU         $
         ADRI        1,X
         LBY         &ANFACE         < RECUPERATION DE CE NEXT-SERIE.
         CPI         EOT             < EST-CE UNE FIN DE NOM ???
         JNE         E100            < NON, ON CONTINUE A RECUPERER.
         ADRI        -1,X            < OUI, MAIS
         LBY         &ANFACE         < RECUPERONS LE CARACTERE PRECEDENT :
         ADRI        1,X
         CP          XA0             < EST-CE LA CARACTERE PARAMETRE ATTENDU ???
         JNE         E102            < NON, LE NOM EST IGNORE...
<
< ACCES A LA VALEUR COURANTE :
<
         LAI         '80?SGNLON      < (A)='NVPLON' (SOUS ":SYS"...).
         BSR         ASPSGN          < CHARGEMENT DE LA VALEUR...
         ACTD        3               < ACCES A LA TAILLE DE LA VALEUR CHARGEE :
         LR          B,A             < (A)=NOMBRE D'OCTETS OCCUPES :
         CPI         LFACET-LNFACE   < EST-CE BIEN CE QUE L'ON ATTEND ???
         JNE         E102            < NON, ON L'IGNORE...
<
<
<        T R A I T E M E N T   D E   L A   F A C E T T E
<                    C O U R A N T E  :
<
<
         PSR         A,B,X
<
< TRANSFORMATION ET PROJECTION DE 'A' :
<
         LAD         CA3D
         BSR         AMATRB          < TRANSFORMATION GEOMETRIQUE DE 'A',
         BSR         APROJB          < PROJECTION DE 'A'.
         BSR         AVISU           < ET MISE AU FORMAT VISU...
         LA          XS
         STA         XSA
         LA          YS
         STA         YSA
<
< TRANSFORMATION ET PROJECTION DE 'B' :
<
         LAD         CB3D
         BSR         AMATRB          < TRANSFORMATION GEOMETRIQUE DE 'B',
         BSR         APROJB          < PROJECTION DE 'B'.
         BSR         AVISU           < ET MISE AU FORMAT VISU...
         LA          XS
         STA         XSB
         LA          YS
         STA         YSB
<
< TRANSFORMATION ET PROJECTION DE 'C' :
<
         LAD         CC3D
         BSR         AMATRB          < TRANSFORMATION GEOMETRIQUE DE 'C',
         BSR         APROJB          < PROJECTION DE 'C'.
         BSR         AVISU           < ET MISE AU FORMAT VISU...
         LA          XS
         STA         XSC
         LA          YS
         STA         YSC
<
< TRACE GRAPHIQUE :
<
         LB          XSA
         STB         XG1
         LB          YSA
         STB         YG1
         LB          XSB
         STB         XG2
         LB          YSB
         STB         YG2
         LAD         DEMGRA
         SVC         0               < TRACE DE 'AB'...
         LB          XSC
         STB         XG1
         LB          YSC
         STB         YG1
         SVC         0               < TRACE DE 'CB'...
         LB          XSA
         STB         XG2
         LB          YSA
         STB         YG2
         SVC         0               < TRACE DE 'CA'...
<
< FIN DE LA FACETTE COURANTE :
<
         PLR         A,B,X
SPU2:    EQU         $
         STX         SXRAC           < ON SAUVEGARDE 'X' POUR LE TOUR SUIVANT...
SPU3:    EQU         $               < CAS OU L'EXPLORATION DU CATALOGUE
                                     < EST ACHEVEE...
         FLD         FINITE          < POUR UN OVERSCREEN...
         RSR
<
< RECHERCHE DU NEXT-PARALLELE :
<
E102:    EQU         $
E103:    EQU         E102            < ENTRY DE 1ERE RECHERCHE NEXT-
                                     < SERIE (CF. RACINE D'UN CATALOGUE)
         LAI         '88
         BSR         ASPSGN          < RECHERCHE NEXT-PARALLELE.
         CPI         '05             < TEST DU CODE D'ERREUR.
         JE          E105            < CAS DU NEXT-PARALLELE QUI
                                     < N'EXISTE PAS...
         JANE        E100            < AUTRES CAS DU SUREMENT A UN
                                     < DELETE SIMULTANE QUI DESORIENTE!!!
<
< CAS OU IL Y A UN NEXT-PARALLELE :
<
E104:    EQU         $
         ADRI        1,X
         LBY         &ANFACE         < RECUPERATION DE CELUI-CI.
         ADRI        -1,X
         STBY        &ANFACE         < ET ON LE MET A SA BONNE PLACE.
         JMP         E100            < ET RETOUR A LA BOUCLE DE
                                     < RECUPERATION.
<
< CAS OU IL N'Y A PAS DE NEXT-PARALLELE :
<
E105:    EQU         $
         ADRI        -1,X            < RETOUR ARRIERE DANS LE NOM.
         LR          X,A             < POUR VALIDATION.
         CP          XRAC            < EST-ON DE RETOUR SUR LA RACINE ???
         JGE         E102            < NON, ON CONTINUE...
<
< FIN DE PARCOURS :
<
E106:    EQU         $
         IC          IFINI           < AFIN DE NE PLUS EXPLORER...
         JMP         SPU3            < ET ON SORT SANS RIEN FAIRE...
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         FINITE          < POUR UN OVER-SCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         FINITE          < POUR UN OVERS-SCREEN...
         RSR
:F
:F
< <<'SIOD FACETTES 1'
DF'SIOD AUTOMATE 1'
ED'SIOD AUTOMATE 1'
IN0
         PAGE
         IDP         "SIOD AUTOMATE 1"
<
<
<        A U T O M A T E S   C E L L U L A I R E S   1  :
<
<
<        FONCTION :
<                      CE MODULE EXAMINE EN CHAQUE
<                    POINT LA PATTERN DES VOISINS
<                    (DEFINIE PAR UNE SPIRALE DE
<                    'A20' POINTS DEFINIS PAR LES
<                    LISTES DE NIVEAUX 'A01', 'A02',...)
<                    S'IL Y A COINCIDENCE, LE
<                    POINT CENTRAL EST MARQUE AVEC
<                    LA COULEUR 'A22', SINON, IL
<                    EST EFFACE AVEC 'A23'... LE MOT
<                    COINCIDENCE SIGNIFIANT QUE LE
<                    NIVEAU DU POINT COURANT DE LA
<                    SPIRALE EN COURS D'EXPLORATION
<                    EST A 1 DANS LA LISTE COURANTE
<                    (DE MEME RANG QUE LE POINT) 'AX'.
<
<
<        ARGUMENTS :
A20::    VAL         '20             < NOMBRE DE POINTS 'NPM' DE CHAQUE SPIRALE,
A21::    VAL         A20+1           < PAS DE LA SPIRALE (+1 EN GENERAL),
A22::    VAL         A21+1           < COULEUR DE MARQUAGE,
A23::    VAL         A22+1           < COULEUR D'EFFACEMENT.
A24::    VAL         A23+1           < COMMENT GERER LES "HORS-ECRAN" :
                                     < =0 : FAIRE COMME S'IL Y AVAIT COINCIDENCE
                                     < #0 : PAS DE COINCIDENCE ==> EFFACAGE
                                     <      IMMEDIAT...
<
<
<        L O C A L  :
<
<
         LOCAL
FLOC:    EQU         $
PASQ:    WORD        0               < ARGUMENT 'A21'.
DELTAX:  WORD        0
DELTAY:  WORD        0
LB:      WORD        0               < LONGUEUR DES
LB0:     WORD        0               <              BRANCHES DE LA SPIRALE.
NP:      WORD        0               < NOMBRE DE POINT COURANT,
FNP:     FLOAT       0               < IDEM EN FLOTTANT.
NPM:     WORD        0               < NOMBRE DE POINTS ENTIER DE LA SPIRALE.
COULMA:  WORD        0               < COULEUR DE MARQUAGE ('A22'),
COULRA:  WORD        0               < COULEUR D'EFFACEMENT ('A23').
OVSCR:   WORD        0               < GESTION DES "HORS-ECRAN" :
                                     < =0 : POURSUIVRE L'EXPLORATION DE LA
                                     <      SPIALE COMME S'IL Y AVAIT EU
                                     <      COINCIDENCE,
                                     < #0 : EFFACER IMMEDIATEMENT...
FINFIN:  FLOAT       100000          < INFINI...
ASPIR:   WORD        SPIR            < CALCUL DU SIGMA SUR UNE SPIRALE...
IPREM:   WORD        0               < INDICATEUR DE PREMIERE ENTREE...
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
         PROG
SPU:     EQU         $
<
< TEST DU PREMIER POINT, ET
< INITIALISATION DU Z-BUFFER :
<
         LA          IPREM           < EST-CE LA PREMIERE FOIS ???
         JANE        SPU2            < NON...
         IC          IPREM           < OUI, INITIALISATION...
<
< DEFINITION DE LA SPIRALE :
<
         LXI         A20
         BSR         ASPCT
         FST         FNP
         BSR         AROND
         JALE        $               < ?!?!?!?!!!!!
         CPI         A20             < VALIDATION...
         JGE         $               < ??!??!?!
         STA         NPM             < NOMBRE DE POINTS MAX...
         LXI         A21
         BSR         ASPCT
         BSR         AROND
         JALE        $               < !??!?!?!
         STA         PASQ            < PAS DE PARCOURS...
<
< ENTREE DES COULEURS :
<
         LXI         A22
         BSR         ASPCT
         BSR         AROND
         STA         COULMA          < COULEUR DE MARQUAGE,
         LXI         A23
         BSR         ASPCT
         BSR         AROND
         STA         COULRA          < COULEUR D'EFFACEMENT.
<
< GESTION DES "HORS-ECRAN" :
<
         LXI         A24
         BSR         ASPCT
         BSR         AROND
         STA         OVSCR
<
< CALCUL DE LA COMPOSANTE EN 'U' :
<
SPU2:    EQU         $
         FLD         FINFIN          < POUR UN OVER-SCREEN...
         RSR                         < ?!???!
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         FINFIN          < POUR UN OVER-SCREEN...
         RSR                         < ???!?
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         LA          XR
         LB          YR
         PSR         A,B             < SAUVEGARDE DU POINT COURANT...
<
< CALCUL DU POINT COURANT :
<
         FLD         VARU
         FDV         KFU
         FDV         KUZ
         FST         FWORK
         LA          TRX
         FLT
         FAD         FWORK
         FIX
         STA         XS              < COORDONNEE 'X' DU PREMIER SOMMET,
         STA         XR              < CENTRE DE LA SPIRALE...
         FLD         VARV
         FDV         KFV
         FDV         KVZ
         FST         FWORK
         LA          TRY
         FLT
         FAD         FWORK
         FIX
         STA         YS              < COORDONNEE 'Y' DU PREMIER SOMMET,
         STA         YR              < CENTRE DE LA SPIRALE...
<
< CONVOLUTION PROPREMENT DITE :
<
         BSR         ASPIR           < MARQUAGE DU POINT COURANT (XS,YS)=(XR,YR)
<
< RETOUR :
<
         PLR         A,B
         STA         XR              < RESTAURATION
         STB         YR              <              DU POINT COURANT...
         FLD         F0              < ET PAS DE DEPLACEMENT...
         RSR
<
<
<        S O M M A T I O N   S U R   U N E   S P I R A L E
<        C E N T R E E   S U R   ( X S , Y S )   D E S
<        N I V E A U X   D E   S E S   P O I N T S  :
<
<
SPIR:    EQU         $
<
< INITIALISATION DE LA SPIRALE :
<
         LA          XR
         LB          YR
         PSR         A,B             < SAUVEGARDE DU POINT (XR,YR).
         STZ         NP              < NP=NOMBRE DE POINTS TRAITES.
         LA          PASQ
         STA         DELTAX          < DELTAX <-- +1,
         STZ         DELTAY          < DELTAY <-- 0.
         LAI         1
         STA         LB0             < INITIALISATION DE LA LONGUEUR DU
                                     < PREMIER BRAS DE LA SPIRALE.
SPMOY8:  EQU         $
<
< PARCOURS D'UN BRAS :
<
SPMOY1:  EQU         $
         LA          LB0
         STA         LB              < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2:  EQU         $
         IC          NP              < COMPTAGE DES POINTS TRAITES :
         LA          NP
         CP          NPM             < FINI ???
         JG          SPMOY3          < OUI...
         LA          XR              < NON :
         JAL         SPMOYB          < LE POINT EST HORS-ECRAN...
         CPI         NPOLM1
         JG          SPMOYB          < HORS-ECRAN...
         LA          YR
         JAL         SPMOYB          < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPMOYB          < HORS-ECRAN...
         BSR         ASPGPR          < A=NIVEAU(XR,YR),
         LR          A,Y             < (Y)=NIVEAU DU POINT COURANT.
         LX          NP              < (X)=NUMERO DU POINT COURANT (DE 1 A NPM),
         BSR         ASPCT           < ACCES A LA LISTE DES NIVEAUX :
         BSR         AFIX            < (A)=LISTE DES NIVEAUX SIGNIFICATIFS (1),
         LR          Y,X             < (X)=NIVEAU DU POINT COURANT,
         TBT         0,X             < ALORS, Y-A-T'IL COINCIDENCE ???
         JNC         SPMOYC          < NON, ON EFFACE IMMEDIATEMENT...
SPMOY4:  EQU         $               < OUI, ON POURSUIT L'EXPLORATION...
         LA          XR
         AD          DELTAX          < CHANGEMENT DE
         STA         XR
         LA          YR
         AD          DELTAY          < POINT COURANT (XS,YS).
         STA         YR
         DC          LB              < DECOMPTAGE DES POINTS SUR LA BRANCHE :
         JG          SPMOY2          < OK, IL EN RESTE...
         CPZ         DELTAX          < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
                                     < LA LONGUEUR COURANTE DES BRANCHES ???
         JNE         SPMOY5          < NON (DX#0) ...
         IC          LB0             < OUI (DX=0) ...
SPMOY5:  EQU         $
         LA          DELTAY          < ON FAIT SUBIR AU NOMBRE COMPLEXE
         NGR         A,A             < (DX,DY) UNE ROTATION DE PI/2, SOIT
         LB          DELTAX          < UNE MULTIPLICATION PAR LA MATRICE
                                     < (0,-1,1,0)...
         STA         DELTAX          < DELTAX=-DELTAY,
         STB         DELTAY          < DELTAY=DELTAX.
         JMP         SPMOY1          < VERS LA BRANCHE SUIVANTE
<
< GESTION DES "HORS-ECRAN" :
<
SPMOYB:  EQU         $
         CPZ         OVSCR           < QUE FAIRE ???
         JE          SPMOY4          < FAIRE COMME S'IL Y AVAIT EU COINCIDENCE..
SPMOYC:  EQU         $
         LA          COULRA          < NON,
                                     < (A)=COULEUR D'EFFACEMENT...
         JMP         SPMOY7          < VERS L'EFFACEMENT...
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3:  EQU         $
         LA          COULMA          < (A)=COULEUR DE MARQUAGE...
SPMOY7:  EQU         $
         BSR         ASPRPS          < ET ON LE MARQUE, OU ON L'EFFACE...
SPMOYA:  EQU         $
         PLR         A,B
         STA         XR              < RESTAURATION DE
         STB         YR              <                 (XR,YR)...
         RSR
:F
:F
< <<'SIOD AUTOMATE 1'



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.