DATE
         PROG
         TRN
<
<
<        D E F I N I T I O N S   G E N E R A L E S  :
<
<
XUNDEF:: VAL         -1              < POUR NE DEFINIR QUE LES 'XX...' DANS LES
                                     < FICHIERS DE DEFINITION...
         CALL        #SIP DEFINITION CTTE#
<
< PREPARATION DE L'APPEL DE #SIP UTILITAIRES# :
<
XXXDEF:  VAL         XUNDEF
XXXLOC:  VAL         XUNDEF
XXXTAB:  VAL         XUNDEF
XXXPRO:  VAL         XUNDEF
         CALL        #SIP UTILITAIRES#
<
<
<        D E F I N I T I O N   D E   L ' I M A G E  :
<
<
XXXVEC:  VAL         XUNDEF          < AFIN DE NE DEFINIR QUE LES 'XXVEC'...
         CALL        #SIP VECTEUR 512#
XXXVEC:  VAL         XXVEC1          < DEFINITION DES CONSTANTES IMAGE/VECTEUR.
         CALL        #SIP VECTEUR 512#
         PAGE
<
<
<        O P T I O N S   D ' A S S E M B L A G E  :
<
<
XOPT01: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'XOPT01'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
XOPT01:: VAL         EXIST           < TRACE GRAPHIQUE, ET VERIFICATIONS CROI-
                                     < SEES DES EQUATIONS CALCULEES...
XEIF%:   VAL         ENDIF
         PAGE
<
<
<        B A S   D E   L A   M E M O I R E  :
<
<
ZERO:    EQU         $
         DZS         PEPROG-D+Z
<
< POINT D'ENTREE :
<
ENTRY:   EQU         $
         LRM         A,K
         WORD        DEBUT           < POINT D'ENTREE DU PROGRAMME,
         WORD        STACK-DEPILE    < INITIALISATION DE LA PILE.
         PSR         A
         RSR                         < ON EFFECTUE AINSI UN 'GOTO' 'DEBUT'...
         PAGE
<
<
<        M E S S A G E S  :
<
<
         TABLE
<
< BUFFER BANDE :
<
LBUFMT: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'LBUFMT'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
LBUFMT:: VAL         4096
XEIF%:   VAL         ENDIF
BUFMT:   EQU         $
         DZS         LBUFMT/NOCMO
<
<
<        C O M M O N  :
<
<
         COMMON
COM:     EQU         $
<
< MOT DESTINE AU BLOC FLOTTANT :
<
COMFLO:  WORD        NILK            < MOT "BIDON" DESTINE AU BLOC FLOTTANT
                                     < POUR QU'IL Y FIT SES MERDES...
ATSFLO:  WORD        TSFLO           < POUR TESTER DE TEMPS EN TEMPS 'COMFLO'...
<
< INDICATEURS DE CONTROLE :
<
XWOR%1:  VAL         W+W             < SEUIL DU MODULE,
XWOR%2:  VAL         XWOR%1*XWOR%1   < CARRE DU SEUIL DU MODULE,
MODUL:   FLOAT       <XWOR%2<K<K     < SEUIL DE DEFINITION DE LA FRONTIERE
                                     < DE L'ENSEMBLE DE MANDELBROT.
IERASE:  WORD        NEXIST          < EFFACER ('EXIST'), OU NON ('NEXIST')
                                     < L'ECRAN 512...
IVIDEO:  WORD        NEXIST          < ECRIRE ('EXIST') L'IMAGE COURANTE SUR LE
                                     < DISQUE VIDEO OU PAS ('NEXIST').
IQUIT:   WORD        NEXIST          < S'ARRETER ('EXIST') OU PAS ('NEXIST')
                                     < APRES CHAQUE IMAGE (POINT D'ARRET).
PASIX:   WORD        W               < PAS DE BALAYAGE DE L'AXE REEL,
PASIY:   WORD        W               < PAS DE BALAYAGE DE L'AXE IMAGINAIRE.
SIZEX:   WORD        W               < LARGEUR DE MARQUAGE DES POINTS,
SIZEY:   WORD        W               < HAUTEUR DE MARQUAGE DES POINTS.
NIMAGE:  WORD        NILK            < NOMBRE D'IMAGES A GENERER PAR INTER-
                                     < POLATION ENTRE LA FENETRE 'DEPART' ET
                                     < LA FENETRE 'ARRIVEE'.
IBANDE:  WORD        NEXIST          < CHOIX DU MODE D'"ENTREE" DE LA FONCTION :
                                     < 'NEXIST' : ELLE EST CALCULEE A PARTIR
                                     <            DE LA FORMULE ALEATOIRE RECUR-
                                     <            SIVE,
                                     < 'EXIST'  : ELLE EST LUE SUR BANDE, ET
                                     <            ALORS ON A INTERET A FAIRE :
                                     <            (ALPHA)=0...
ABLOC0:  WORD        K               < NUMERO DU PREMIER BLOC A LIRE SUR LA
                                     < BANDE MAGNETIQUE.
                                     < NOTA : SI (ABLOC0)<0 : ON TRAVAILLE EN
                                     <        SEQUENTIEL STRICT, SANS JAMAIS RE-
                                     <        INITIALISER L'ADRESSE COURANTE
                                     <        SUR LA BANDE...
ILAMBD:  WORD        NEXIST          < CHOIX DE LA FONCTION ITEREE :
                                     < 'NEXIST' : Z <-- Z**2+C,
                                     < 'EXIST'  : Z <-- LAMBDA*(Z**2+C),
                                     <            OU 'LAMBDA' EST UN NOMBRE
                                     <            COMPLEXE DONT LE MODULE
                                     <            POURRA VALOIR 1...
LAMBDR:  FLOAT       <NILK<NILK<NILK < PARTIE REELLE DE 'LAMBDA',
LAMBDI:  FLOAT       <NILK<NILK<NILK < PARTIE IMAGINAIRE DE 'LAMBDA'.
F0R:     FLOAT       <NILK<NILK<NILK < POUR INITIALISER LE CUMUL
F0I:     FLOAT       <NILK<NILK<NILK < DE L'ITERATION Z <-- Z**2+C.
ITRACE:  WORD        NEXIST          < INDICATEUR DU TRACE DE LA "TRAJECTOIRE"
                                     < DE LA TRANSFORMATION :
                                     < 'NEXIST' : PAS DE TRACE,
                                     < 'EXIST'  : TRACE.
IQUITR:  WORD        NEXIST          < INDICATEUR D'ARRET APRES CHAQUE TRACE
                                     < D'UNE TRAJECTOIRE :
                                     < 'NEXIST' : PAS D'ARRET,
                                     < 'EXIST'  : ARRET.
NTRACE:  WORD        XXNOIR          < NIVEAU INITIAL MOINS UN DU TRACE DE LA
                                     < "TRAJECTOIRE" DE LA TRANSFORMATION,
PTRACE:  WORD        I               < PAS D'INCREMENTATION DES NIVEAUX DE
                                     < TRACE (SI (PTRACE)=0, ON TRACE TOUT AVEC
                                     < LE NIVEAU 'NTRACE').
IJULIA:  WORD        EXIST           < INDIQUE LE TYPE DE L'ENSEMBLE QUE L'ON
                                     < CONSTRUIT :
                                     < 'NEXIST' : ENSEMBLE DE MANDELBROT, SOIT :
                                     <            INIT : Z <-- CTTE,
                                     <            ITER : Z <-- Z**2+COURANT.
                                     < 'EXIST'  : ENSEMBLE DE JULIA, SOIT :
                                     <            INIT : Z <-- COURANT,
                                     <            ITER : Z <-- Z**2+CTTE.
                                     < OU 'CTTE' ET 'COURANT' DESIGNENT RESPEC-
                                     < TIVEMENT UNE CONSTANTE COMPLEXE, ET LE
                                     < NOMBRE COMPLEXE COURANT.
IRAYON:  WORD        NEXIST          < DOIT-ON ('EXIST') OU PAS ('NEXIST')
                                     < VISUALISER LES "RAYONS", C'EST-A-DIRE
                                     < L'ARGUMENT TETA=ARCTG(ZI/ZR) DU NOMBRE
                                     < COMPLEXE (ZR,ZI) OBTENU EN FIN D'ITE-
                                     < RATION.
<
< FENETRE DE DEPART :
<
PR0D:    FLOAT       <NILK<NILK<NILK < LIMITE REELLE INFERIEURE,
PR1D:    FLOAT       <NILK<NILK<NILK < LIMITE REELLE SUPERIEURE.
PI0D:    FLOAT       <NILK<NILK<NILK < LIMITE IMAGINAIRE INFERIEURE,
PI1D:    FLOAT       <NILK<NILK<NILK < LIMITE IMAGINAIRE SUPERIEURE.
<
< FENETRE D'ARRIVEE :
<
PR0A:    FLOAT       <NILK<NILK<NILK < LIMITE REELLE INFERIEURE,
PR1A:    FLOAT       <NILK<NILK<NILK < LIMITE REELLE SUPERIEURE.
PI0A:    FLOAT       <NILK<NILK<NILK < LIMITE IMAGINAIRE INFERIEURE,
PI1A:    FLOAT       <NILK<NILK<NILK < LIMITE IMAGINAIRE SUPERIEURE.
<
< FENETRE COURANTE :
<
PR0:     FLOAT       <NILK<NILK<NILK < LIMITE REELLE INFERIEURE,
PR1:     FLOAT       <NILK<NILK<NILK < LIMITE REELLE SUPERIEURE.
PI0:     FLOAT       <NILK<NILK<NILK < LIMITE IMAGINAIRE INFERIEURE,
PI1:     FLOAT       <NILK<NILK<NILK < LIMITE IMAGINAIRE SUPERIEURE.
<
< DONNEES DE L'INTERPOLATION NON LINEAIRE :
<
F3:      FLOAT       3.0
F5:      FLOAT       5.0
F6:      FLOAT       6.0
F8:      FLOAT       8.0
COEF:    FLOAT       <NILK<NILK<NILK < POIDS DE L'INTERPOLATION BARYCENTRIQUE.
COEFR0:  EQU         COEF            < RAPPORT DE PASSAGE DU PAS REEL INFERIEUR
                                     < P(I) AU PAS P(I+1).
COEFR1:  EQU         COEF            < RAPPORT DE PASSAGE DU PAS REEL SUPERIEUR
                                     < P(I) AU PAS P(I+1).
COEFI0:  EQU         COEF            < RAPPORT DE PASSAGE DU PAS IMAGINAIRE INFE
                                     < RIEUR P(I) AU PAS P(I+1).
COEFI1:  EQU         COEF            < RAPPORT DE PASSAGE DU PAS IMAGINAIRE SUPE
                                     < RIEUR P(I) AU PAS P(I+1).
EPSI:    FLOAT       <NILK<NILK<NILK < POUR CALCULER 'COEF'...
<
< RELAIS DIVERS :
<
ADEB9:   WORD        DEBUT9
AINIT1:  WORD        INIT01
AGEN01:  WORD        GEN01
AGEN02:  WORD        GEN02
<
< CONSTANTES FLOTTANTES DE BASE :
<
F0:      FLOAT       <K<K<K          < REMISE A ZERO FLOTTANTE...
F1:      FLOAT       <W<K<K          < L'UNITE EN FLOTTANT...
<
< DONNEES DIVERSES :
<
NIVOC:   WORD        NILK            < NIVEAU COURANT DE MARQUAGE.
XXXLOC:  VAL         YYYFLO          < 'YYYFLO'.
         CALL        #SIP UTILITAIRES#
<
< DEMANDE DE TEMPORISATION
< APRES EFFACEMENT :
<
TEMPO:   BYTE        NVPSER;FONDOR
         WORD        NILK            < INUTILE...
         WORD        XXXMOY          < 2 PETITES SECONDES...
XXXLOC:  VAL         YYYGOT          < 'YYYGOT'.
         CALL        #SIP UTILITAIRES#
XXXVEC:  VAL         XXVEC2          < DEFINITION DES DONNEES DU VECTEUR 512...
         CALL        #SIP VECTEUR 512#
APOINT:  WORD        POINT           < SOUS-PROGRAMME DE MARQUAGE D'UN POINT
                                     < DE COORDONNEES (X), DONT LE NIVEAU EST
                                     < CALCULE VIA LA TABLE 'LNIVO'.
ALNIVO:  WORD        LNIVO,X         < TABLE DE CORRESPONDANCE DES NIVEAUX POUR
                                     < LE SOUS-PROGRAMME 'POINT'.
<
< ACCES AUX REGISTRES DE CONTROLE :
<
ACTRL1:  WORD        RCTRL1
ACTRL2:  WORD        RCTRL2
<
< POUR LE CALCUL DU LOGARITHME :
<
POLLO1:  FLOAT       <NILK<NILK<NILK < VARAIBLE DE MANOEUVRE...
POLLO2:  FLOAT       <NILK<NILK<NILK
POLLO3:  FLOAT       <NILK<NILK<NILK
POLLO4:  FLOAT       0.7071067       < RACINE(2)/2.
POLLO5:  FLOAT       1.2920088       < COEFFICIENTS
POLLO6:  FLOAT       2.6398577       <              DU
POLLO7:  FLOAT       1.656763        <                 DEVELOPPEMENT.
POLLO8:  EQU         F05             < CONSTANTE 1/2.
POLLO9:  FLOAT       0.6931472       < LN(2).
<
< POUR LE CALCUL DE L'EXPONENTIELLE :
<
POLEX1:  EQU         POLLO1          < VARIABLE DE MANOEUVRE...
POLEX2:  EQU         POLLO2
POLEX3:  EQU         POLLO3
POLEX4:  FLOAT       1.442695        < LOG2(E).
POLEX5:  WORD        NILK            < RELEVE DE L'EXPOSANT
POLEX6:  EQU         F1              < 1.0
POLEX7:  FLOAT       2               < 2.
POLEX8:  FLOAT       87.417488       < COEFFICIENTS
POLEX9:  FLOAT       0.0346573       <              DU
POLEY0:  FLOAT       -17830.91       <                 DEVELOPPEMENT.
POLEY1:  FLOAT       9.9545955
SIGNE:   WORD        NILK            < POUR DETERMINER LE SIGNE DE X**Y...
<
< POUR CALCULER
< LES EXPOSANTS :
<
XXMASK:: VAL         MOCG
XX7F::   VAL         '7F             < MAXIMUM POSITIF,
XX80::   VAL         -'80            < MIMIMUM NEGATIF.
<
< CALCUL D'UNE PUISSANCE QUELCONQUE :
<
ARAK:    WORD        RAK             < CALCUL DE LA PUISSANCE P/(2**Q) D'UN
                                     < NOMBRE...
EXPOP:   FLOAT       <NILK<NILK<NILK < EXPOSANT REEL.
<
< DONNEES D'ITERATION DE LA
< TRANSFORMATION COMPLEXE :
<
ZR:      FLOAT       <NILK<NILK<NILK < VALEUR COURANTE
ZI:      FLOAT       <NILK<NILK<NILK <                 DU CUMUL COMPLEXE.
CR:      FLOAT       <NILK<NILK<NILK < NOMBRE COMPLEXE
CI:      FLOAT       <NILK<NILK<NILK <                 COURANT 'C'.
DELTAR:  FLOAT       <NILK<NILK<NILK < LARGEUR REELLE DE LA FENETRE,
DELTAI:  FLOAT       <NILK<NILK<NILK < LARGEUR IMAGINAIRE DE LA FENETRE.
FNC:     FLOAT       <XMAX+Z<K<K     < LARGEUR DE L'ECRAN,
FNL:     FLOAT       <YMAX+Z<K<K     < HAUTEUR DE L'ECRAN.
F2:      FLOAT       <W+W<K<K
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< GESTION DU DISQUE VIDEO :
<
BUFVIW:  BYTE        "J";KCR
XWOR%1:  VAL         '0000000@@@@(MOCD
XWOR%3:  VAL         $-BUFVIW*NOCMO
         IF          XWOR%1-K,XEIF%,,XEIF%
XWOR%3:  VAL         XWOR%3-W
XEIF%:   VAL         ENDIF
LBUFVW:: VAL         XWOR%3          < LONGUEUR DE LA COMMANDE AU DISQUE
                                     < VIDEO...
XWOR%2:  VAL         COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIW:  BYTE        XWOR%2;FAVW     < COMMANDE DE L'ECRITURE SUR LE DISQUE
                                     < VIDEO...
         WORD        BUFVIW=FCTA*NOCMO
         WORD        LBUFVW
BUFVIR:  DZS         W               < BUFFER DE LECTURE DES ACQUITTEMENTS.
LBUFVR:: VAL         $-BUFVIR*NOCMO
DEMVIR:  BYTE        XWOR%2;FAVR     < LECTURE DES ACQUITTEMENTS DU DISQUE.
         WORD        BUFVIR=FCTA*NOCMO
         WORD        LBUFVR
<
< GESTION DU DEROULEUR :
<
NVPMT::  VAL         '0B             < 'NVP' D'ACCES AU DEROULEUR DE BANDES.
DEMMT:   BYTE        NVPMT;XFMTWA    < DEMANDE D'ECRITURE A ACCES DIRECT.
         WORD        BUFMT=FCTA*NOCMO
         WORD        LBUFMT
         WORD        NILK            < ADRESSE DU BLOC COURANT.
DEMMTM:  BYTE        NVPMT;XFMTTM    < DEMANDE D'ECRITURE D'UN 'TAPE-MARK'.
IBUFMT:  WORD        LBUFMT-Z+I      < INDEX COURANT DU BUFFER 'MT',
ZBUFMT:  WORD        LBUFMT-Z+I      < POUR LES TESTS "BUFFER PLEIN"...
ABUFMT:  WORD        BUFMT,X         < ET RELAI D'ACCES...
<
< DONNEES D'ACCES AU CURSEUR :
<
CURSOR:  BYTE        "N";NILK        < CARACTERE DE DEBLOCAGE DU
                                     < CURSEUR (ERREUR A PRIORI).
CURSOY:  WORD        NILK            < COORDONNEE 'Y' D'UN POINT,
CURSOX:  WORD        NILK            < COORDONNEE 'X' D'UN POINT.
LCURSO:: VAL         $-CURSOR*NOCMO  < LONGUEUR DU BUFFER DE CURSEUR...
NLIN:    EQU         VECTNL          < NBRE DE LIGNES/IMAGE-1.
C3:      WORD        3               < POUR MULTIPLIER
C4:      WORD        4               <                 PAR 4/3...
OG:      BYTE        NVPIN;FAVOG     < OPEN GRAPHIQUE DE LA CONSOLE.
CU:      BYTE        NVPIN;FAVCU     < MISE EN FONCTION DU CURSEUR GRAPHIQUE.
         WORD        K               < (AMDEM)=0...
LCU:     BYTE        NVPIN;FAVRG     < LECTURE CURSEUR GRAPHIQUE DE LA CONSOLE.
         WORD        CURSOR-ZERO*NOCMO
         WORD        LCURSO
CG:      BYTE        NVPIN;FAVCG     < CLOSE GRAPHIQUE DE LA CONSOLE.
<
< SIMULATION D'UNE REDUCTION
< DE LA PRECISION DU CALCUL :
<
WMODUL:  FLOAT       <NILK<NILK<NILK < VALEUR DE 'MODUL' APRES REDUCTION
                                     < EVENTUELLE DE LA PRECISION...
XREDUC: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'XREDUC'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
XREDUC:: VAL         NEXIST          < PAS DE REDUCTION DE PRECISION A PRIORI...
XEIF%:   VAL         ENDIF
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
AREDUC:  WORD        REDUC           < SOUS-PROGRAMME DE SIMULATION...
REDUCA:  WORD        MMOT            < MASQUE SUR LES 16 PREMIERS BITS,
REDUCB:  WORD        MMOT            < MASQUE SUR LES 16 DERNIERS BITS.
XEIF%9:  VAL         ENDIF
<
< DONNEES DE CALCUL DE 'ARCTG' :
<
ATGT1:   FLOAT       <NILK<NILK<NILK < ZONE DE TRAVAIL NUMERO 1,
ATGT2:   FLOAT       <NILK<NILK<NILK < ZONE DE TRAVAIL NUMERO 2,
ATGT3:   FLOAT       <NILK<NILK<NILK < ZONE DE TRAVAIL NUMERO 3.
ATGSDX:  WORD        NILK            < INDICATEUR "SIGNE DE X ARGUMENT":
                                     < = 0 : POSITIF OU NUL;
                                     < < 0 : NEGATIF.
ATGPSC:  FLOAT       0.0548862       < TG(PI/12).
ATGPS2:  FLOAT       1.5707963       < PI/2.
ATGPS3:  FLOAT       1.0471975       < PI/3.
ATGPS6:  FLOAT       0.5235988       < PI/6.
ATGUN:   EQU         F1
ATGR3:   FLOAT       1.7320508       < RACINE(3).
ATGP1:   FLOAT       0.6031058       < COEFFICIENTS
ATGP2:   FLOAT       0.0516045       <              (P1,P2,P3,P4)
ATGP3:   FLOAT       0.5591371       <                            DU
ATGP4:   FLOAT       1.4087812       <                               POLYNOME.
AARCTG:  WORD        ARCTG           < SOUS-PROGRAMME DE CALCUL.
PI:      FLOAT       3.1415927       < PI,
DEUXPI:  FLOAT       6.2831853       < 2*PI.
F255:    FLOAT       <XXN255<K<K     < POUR PASSER D'UN ANGLE (EN NOMBRE DE
                                     < TOURS) A UN NIVEAU DE GRIS...
         PAGE
<
<
<        T A B L E   D E   T R A N S C O D A G E   D E S   N I V E A U X  :
<
<
<        ARGUMENTS D'ASSEMBLAGE :
<                    ND=DIVISEUR DES NIVEAUX DE 'LNIVO' (0 OU 2),
<                    NI=TRANSLATION DES NIVEAUX DE 'LNIVO' (0 OU 128)...
<
<
NI:     @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'NI'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
NI::     VAL         XXNOIR          < LE NIVEAU INITIAL SERA LE NIVEAU NOIR.
XEIF%:   VAL         ENDIF
ND:     @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'ND'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
ND::     VAL         W               < PAS DE DIVISEUR DES NIVEAUX...
XEIF%:   VAL         ENDIF
LNIVO:   EQU         $
         NTRN
XWOR%1:  VAL         NIV256+NOCMO-E/NOCMO
XWOR%2:  VAL         NIV256/NOCMO(K=FCREST
         TRN
XWOR%3:  VAL         NIV256+XWOR%2
                                     < INCREMENT DES OCTETS GAUCHES,
XWOR%4:  VAL         XWOR%3+NOCMO-Z
                                     < INCREMENT DES OCTETS DROITS.
         NTRN
<*******************************************************************************
         DO          XWOR%1
   BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3/ND+NI;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4/ND+NI
XWOR%5:  VAL         '0000000@@@@    < RECUPERATION DU DERNIER MOT,
<*******************************************************************************
         TRN
         IF          XWOR%2-K,,XEIF%,
XWOR%5:  VAL         XWOR%5(MOCG     < DANS LE CAS D'UNE TABLE DE LONGUEUR
                                     < IMPAIRE, ON EFFACE LE DERNIER OCTET
                                     < GENERE,
         $EQU        $-D             < ON REVIENT D'UN MOT EN ARRIERE,
         WORD        XWOR%5          < ET ON REGENERE LE DERNIER MOT...
XEIF%:   VAL         ENDIF
         NLS
         DO          XC512
         FLOAT       <NILK<NILK<NILK < LIGNE PRECEDENTE.
         LST
         PAGE
<
<
<        P I L E   D E   T R A V A I L  :
<
<
STACK:   EQU         $
         DZS         64
         PROG
XXXVEC:  VAL         XXVEC3          < DEFINITION DES PROGRAMMES VECTEUR 512...
         CALL        #SIP VECTEUR 512#
         PAGE
<
<
<        M A R Q U A G E   D ' U N   P O I N T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME MARQUE
<                    LE POINT ARGUMENT (X,Y) AVEC
<                    COMME NIVEAU, LE NIVEAU ARGU-
<                    MENT (A) TRANSCODE VIA LA TA-
<                    BLE 'LNIVO', CE QUI PERMET PAR
<                    EXEMPLE LA SUPERPOSITION DE
<                    PLUSIEURS IMAGES, EN FAISANT
<                    QUE LEURS TABLES 'LNIVO' SOIENT
<                    COMPLEMENTAIRES...
<
<
<        ARGUMENTS :
<                    (A)=NIVEAU,
<                    (X,Y)=COORDONNEES DU POINT.
<
<
<        RESULTAT :
<                    (A)=NIVEAU TRANSCODE.
<
<
POINT:   EQU         $
<
< TRANSCODAGE DU NIVEAU :
<
         PSR         X               < SAUVEGARDE DE LA COORDONNEE 'X'...
         LR          A,X             < (X)=NIVEAU ARGUMENT,
         LBY         &ALNIVO         < (A)=NIVEAU TRANSCODE,
         PLR         X               < RESTAURE :
                                     < (X)=COORDONNEE 'X'.
<
< MARQUAGE DU POINT :
<
         BSR         ASTORP          < MARQUAGE : (X,Y) <-- (A)...
<
< ET RETOUR :
<
         RSR
         PAGE
<
<
<        T E S T   P E R I O D I Q U E   D E   ' C O M F L O '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EST
<                    APPELE DERRIERE CHAQUE
<                    'FDV' EXPLICITE AINSI
<                    QU'APRES LES APPELS DE
<                    'RAC' ET 'CRAMR'...
<
<
TSFLO:   EQU         $
         PSR         A
         LA          COMFLO          < TEST DE 'COMFLO' PAR UN 'LA' AFIN DE NE
                                     < PAS MODIFIER LES CODES (CARY & CO)...
         JAE         TSFLO1          < OK...
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
                                     < ON A :
                                     < (A)=INDICATEURS FLOTTANTS...
                                     < BIT 0 : UNDERFLOW,
                                     < BIT 1 : OVERFLOW,
                                     < BIT 2 : DIVISION PAR ZERO,
                                     < BIT 3 : 'FIX' IMPOSSIBLE.
         STZ         COMFLO          < PUIS RAZ, CAR CES INDICATEURS SONT
                                     < REMANENTS...
TSFLO1:  EQU         $
         PLR         A
         RSR
XXXPRO:  VAL         YYYGOT          < 'YYYGOT'.
         CALL        #SIP UTILITAIRES#
XXXPRO:  VAL         YYYFLO          < 'YYYFLO'.
         CALL        #SIP UTILITAIRES#
         PAGE
<
<
<        C A L C U L   D ' U N E   P U I S S A N C E
<        Q U E L C O N Q U E   R E E L L E   ' P '  :
<
<
<        ARGUMENT :
<                    (A,B)=NOMBRE 'N' ARGUMENT,
<
<
<        RESULTAT :
<                    (A,B)='N' A LA PUISSANCE P.
<
<
RAK:     EQU         $
         PSR         Y
<
<
<        L O G   N E P E R I E N  :
<
<
LOGN:    EQU         $
         STZ         SIGNE           < =0 : SIGNE "+" A PRIORI...
         FCAZ
         JGE         LOGN1           < POSITIF...
         IC          SIGNE           < =1 : SIGNE "-"...
LOGN1:   EQU         $
         LR          A,Y
         FABS
         ANDI        XXMASK
         #/FST#      POLLO3
         FAD         POLLO4
         #/FST#      POLLO2
         LR          Y,A
         SWBR        A
         SARS        XXMASK=K
         FLT
         #/FST#      POLLO1
         #/FLD#      POLLO3
         FSB         POLLO4
         FDV         POLLO2
         #/FST#      POLLO3
         FMP         POLLO3
         FNEG
         FAD         POLLO7
         #/FST#      POLLO2
         #/FLD#      POLLO6
         FDV         POLLO2
         FAD         POLLO5
         FMP         POLLO3
         FSB         POLLO8
         FAD         POLLO1
         FMP         POLLO9
<
<
<        G E S T I O N   D U   S I G N E   D E   L ' E X P O S A N T  :
<
<
         PSR         A,B             < SAVE LE 'LOG'...
         #/FLD#      EXPOP
         FABS
         BSR         AROND           < ON PREND LA PARTIE ENTIERE (PAR EXCES
                                     < OU PAR DEFAUT) DE LA VALEUR ABSOLUE DE
                                     < L'EXPOSANT...
         TBT         NBITMO-B        < QUELLE EST SA PARITE ???
         JC          RAK1            < IMPAIRE, 'SIGNE' RESTE TEL QUEL...
         STZ         SIGNE           < PAIRE : ON FORCE "+" (SIGNE INCHANGE)...
RAK1:    EQU         $
         PLR         A,B             < RESTAURATION DU LOG,
         FMP         EXPOP           < ET ON CALCULE P*LOG...
<
<
<        E X P O N E N T I E L L E  :
<
<
EXP:     EQU         $
         FMP         POLEX4
         #/FST#      POLEX3
         FIX
         STA         POLEX5
         FLT
         FCAM        POLEX3
         JNV         EXPON3
         #/FLD#      POLEX6
         #/FST#      POLEX3
         JMP         EXPON5
EXPON3:  EQU         $
         CPZ         POLEX3
         JGE         EXPON4
         DC          POLEX5
         LA          POLEX5
         FLT
EXPON4:  EQU         $
         FSB         POLEX3
         FNEG
         #/FST#      POLEX2
         FMP         POLEX2
         #/FST#      POLEX1
         FAD         POLEX8
         #/FST#      POLEX3
         #/FLD#      POLEY0
         FDV         POLEX3
         FAD         POLEX1
         FMP         POLEX9
         FAD         POLEY1
         FSB         POLEX2
         #/FST#      POLEX3
         #/FLD#      POLEX7
         FMP         POLEX2
         FDV         POLEX3
         FAD         POLEX6
         #/FST#      POLEX3
EXPON5:  EQU         $
         SWBR        A
         SARS        XXMASK=K
         AD          POLEX5
         CPI         XX7F
         JG          $               < E R R E U R   P R O G R A M M E ...
         CPI         XX80
         JGE         EXPON6
         #/FLD#      F0              < ON PREND LE MINIMUM...
         JMP         EXPON7
EXPON6:  EQU         $
XWOR%1:  VAL         XXMASK=K
XWOR%1:  VAL         -XWOR%1
         ANDI        XXMASK>XWOR%1
         STA         POLEX5
         LA          POLEX3
         ANDI        XXMASK
         AD          POLEX5
EXPON7:  EQU         $
         CPZ         SIGNE           < PRISE EN COMPTE DU SIGNE SIMULE :
         JE          EXP1            < POSITIF, ON LAISSE LE RESULTAT TEL QUEL..
         FNEG                        < NEGATIF, ON INVERSE...
EXP1:    EQU         $
         BSR         ATSFLO
         PLR         Y
         RSR
         PAGE
<
<
<        C A L C U L   D E   L A   F O N C T I O N   ' A R C T G '  :
<
<
<        ARGUMENT:
<                    (A,B)=VALEUR ARGUMENT.
<
<
<        RESULTAT:
<                    (A,B)='ARCTG' DE L'ARGUMENT EN RADIANS.
<
<
ARCTG:   EQU         $
<
< SAUVEGARDES ET INITIALISATIONS.
<
         PSR         X,L
         STZ         ATGSDX          < ARGUMENT 'X' POSITIF OU NUL A PRIORI.
         FCAZ
         JGE         ARCTG1
         DC          ATGSDX          < ARGUMENT 'X' NEGATIF.
ARCTG1:  EQU         $
         FABS                        < U = ABS(X).
         FCAM        ATGUN
         JGE         ARCTG2
<
< U < 1 : J RECOIT 0.
<
         LXI         K
         JMP         ARCTG3
ARCTG2:  EQU         $
<
< U >= 1 : J RECOIT 2 ET U RECOIT 1/U.
<
         LXI         W+W             < J = 2.
         FST         ATGT1
         FLD         ATGUN
         FDV         ATGT1           < U = 1/U.
ARCTG3:  EQU         $
         FCAM        ATGPSC          < COMPARER U A TG(PI/12).
         JG          ARCTG4
<
< U <= TG(PI/12) : J RECOIT J+2.
<
         ADRI        I+I,X           < J = J + 2.
         JMP         ARCTG5
ARCTG4:  EQU         $
<
< U > TG(PI/12) : J RECOIT J+1 ET
< U RECOIT  (U * RACINE(3) - 1) / (RACINE(3) + U).
<
         ADRI        I,X             < J = J + 1.
         FST         ATGT1
         FMP         ATGR3
         FSB         ATGUN
         PSR         A,B
         FLD         ATGR3
         FAD         ATGT1
         FST         ATGT1
         PLR         A,B
         FDV         ATGT1           < U=(U*RACINE(3)-1)/(RACINE(3)+U).
ARCTG5:  EQU         $
<
< FORMER Y = U * P(U ** 2) LES COEFFICIENTS DU POLYNOME ETANT ATGP1, ATGP2
< ATGP3 ET ATGP4. ON CALCULE :
< Y = U * (P1 - P2 * U ** 2 + (P3 / (P4 + U ** 2)).
<
         FST         ATGT1           < TRAV1 = U.
         FMP         ATGT1
         FST         ATGT3           < TRAV3 = U ** 2.
         FAD         ATGP4
         FST         ATGT2
         FLD         ATGP3
         FDV         ATGT2
         FAD         ATGP1
         PSR         A,B
         FLD         ATGP2
         FMP         ATGT3
         FST         ATGT3
         PLR         A,B
         FSB         ATGT3           < Y = P(U ** 2).
         FMP         ATGT1           < Y = U * P( U ** 2).
         FST         ATGT1           < TRAV1 = U * P (U ** 2).
<
< BRANCHEMENT SELON VALEUR DE J (REGISTRE 'X').
<
         ADRI        -I-I,X
         CPZR        X
         JE          ARCTG6
         JL          ARCTG7
         ADRI        -I,X
         CPZR        X
         JE          ARCTG8
<
< FAIRE Y = PI / 2 - Y.
<
         FLD         ATGPS2
         JMP         ARCTG9
ARCTG8:  EQU         $
<
< FAIRE Y = PI / 3 - Y.
<
         FLD         ATGPS3
ARCTG9:  EQU         $
         FSB         ATGT1           < - Y.
         JMP         ARCTG6
ARCTG7:  EQU         $
<
< FAIRE Y = PI / 6 + Y.
<
         FAD         ATGPS6
ARCTG6:  EQU         $
<
< AFFECTER A Y LE SIGNE DU X ARGUMENT.
<
         CPZ         ATGSDX          < SIGNE DU X ARGUMENT.
         JL          ARCTGA
<
< X ARGUMENT POSITIF OU NUL, IL FAUT QUE Y LE SOIT.
<
         FCAZ
         JGE         ARCTGB
         FNEG
         JMP         ARCTGB
ARCTGA:  EQU         $
<
< X ARGUMENT NEGATIF, IL FAUT QUE Y LE SOIT.
<
         FCAZ
         JL          ARCTGB
         FNEG
ARCTGB:  EQU         $
<
< RESTAURATIONS ET FIN...
<
         PLR         X,L
         RSR
         PAGE
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
<
<
<        S I M U L A T I O N   D ' U N E   P R E C I S I O N
<        D E   C A L C U L   I N F E R I E U R E  :
<
<
<        ARGUMENT :
<                    (A,B)=NOMBRE FLOTTANT SUR 32 BITS,
<                    (REDUCA,REDUCB)=MASQUE SUR 32 BITS DES 32 BITS DE (A,B)
<                                    A CONSERVER.
<
<
<        RESULTAT :
<                    (A,B)=NOMBRE FLOTTANT EN PRECISION REDUITE.
<
<
REDUC:   EQU         $
         AND         REDUCA          < REDUCTION DES 16 PREMIERS BITS,
         XR          A,B
         AND         REDUCB          < REDUCTION DES 16 DERNIERS BITS.
         XR          A,B
         RSR
XEIF%9:  VAL         ENDIF
         PAGE
<
<
<        P O I N T   D ' E N T R E E  :
<
<
DEBUT:   EQU         $
<
< INITIALISATION DES REGISTRES :
<
         LRM         C,L,K
         WORD        COM+DEPBAS      < POSITIONNEMENT DE 'C',
         WORD        LOC+DEPBAS      < DE 'L',
         WORD        STACK-DEPILE    < ET DE 'K'.
<
< CONNEXION A LA 'CDA' :
<
         CPZ         IBANDE          < GENERE-T'ON UNE BANDE ???
         JNE         GEN51           < OUI, PAS DE CONNEXION 'CDAJ'...
         LAI         PAGER
         BSR         AGPCDA          < AFIN D'ATTEINDRE LA MEMOIRE DU '68000'
                                     < ET LA MEMOIRE 'SOLAR' QUI LA PRECEDE
                                     < AFIN D'Y METTRE 'BUF'...
GEN51:   EQU         $
<
<
<        E N T R Y   D E   R E B O U C L A G E  :
<
<
DEBUT4:  EQU         $
DEBUT9:  EQU         $
<
< MODIFICATION A PRIORI DU 'PRESC' :
<
         LRM         A
         WORD        DEBUT5          < POUR 'XXXPRE'...
         ACTD        XXXPRE          < ON CHANGE ALORS SYSTEMATIQUEMENT APRES
                                     < PASSAGE ICI LE 'PRESC' DU PROGRAMME, AFIN
                                     < DE REVENIR SUR LA VISUALISATION APRES
                                     < CHAQUE ALT-MODE (VIA 'DEBUT5'...).
<
< INITIALISATION A PRIORI
< DU TRACE DES "TRAJECTOIRES" :
<
         LRM         A,B,X,Y
         WORD        CORBT?BANTI=FMASK(K=FCINST
         WORD        MMOT
         WORD        K
         WORD        COSBT?VELODD=FMASK(K?VECTSB=FCINST
         STA         VECANT          < PAS D'ANTI-ALIASING,
         STB         VEPOIN          < PAS DE POINTILLE,
         STX         VEDECA          < PAS DE DECALAGE DES NIVEAUX,
         STY         VECTRS          < MODE 'SBT' EN LOGIQUE BINAIRE.
<
< PREPARATION DE LA VALEUR
< DE SEUIL DU MODULE DES
< NOMBRES COMPLEXES :
<
         #/FLD#      MODUL
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
XEIF%9:  VAL         ENDIF
         #/FST#      WMODUL
<
< INITIALISATION DU GESTIONNAIRE
< DE BANDES MAGNETIQUES (A PRIORI) :
<
         LA          ABLOC0
         JAL         INIT20          < ON FERA DU SEQUENTIEL STRICT...
         STA         DEMMT+ARGESC    < ADRESSE DU PREMIER BLOC A LIRE,
INIT20:  EQU         $
         STZ         IBUFMT          < POUR FORCER LA PREMIERE LECTURE...
<
< CALCUL DES PAS D'INTERPOLATIONS :
<
<        NOTONS 'D', 'C' ET 'A' RESPECTIVE-
<        MENT UNE COORDONNEE DE 'DEPART',
<        'COURANTE' ET D''ARRIVEE'. NOTONS
<        AUSSI 'K' LE RAPPORT DE PASSAGE DE
<        L'IMAGE 'I' A L'IMAGE 'I+1'.
<        ON CHOISIT UNE RELATION BARYCENTRI-
<        QUE DU TYPE :
<
<                    C=K*C+(1-K)*A,
<
<        SOIT :
<
<                    C=K*(C-A)+A,
<
<        AVEC INITIALEMENT :
<
<                    C=D.
<
< CALCUL DE 'COEF' :
<
<        ON PREND :
<                    COEF=EPSI**(1/(N-1)),
<
         LA          NIMAGE          < (A)=NOMBRE D'IMAGES A GENERER...
         CPI         W
         JLE         INT01           < IL N'Y EN A QU'UNE SEULE...
         ADRI        -I,A            < IL Y EN A PLUS D'UNE, LE NOMBRE DE PAS
                                     < ET DONC LE NOMBRE D'IMAGES MOINS UNE...
         FLT
         #/FST#      FWORK           < ET SAVE...
         #/FLD#      F1              < 1,
         FDV         FWORK           < 1/(N-1),
         #/FST#      EXPOP           < ET SAVE...
         #/FLD#      EPSI            < EPSI,
         BSR         ARAK            < ELEVATION A LA PUISSANCE (EXPOP)...
         #/FST#      COEF            < COEF=EPSI**(1/(N-1)).
INT01:   EQU         $
<
< INITIALISATION DE LA
< FENETRE COURANTE :
<
         #/FLD#      PR0D
         #/FST#      PR0             < LIMITE REELLE INFERIEURE,
         #/FLD#      PR1D
         #/FST#      PR1             < LIMITE REELLE SUPERIEURE.
         #/FLD#      PI0D
         #/FST#      PI0             < LIMITE IMAGINAIRE INFERIEURE,
         #/FLD#      PI1D
         #/FST#      PI1             < LIMITE IMAGINAIRE SUPERIEURE.
<
< CHARGEMENT DU NOMBRE D'IMAGES :
<
         LX          NIMAGE          < (X)=NOMBRE D'IMAGES A GENERER.
<
<
<        I N I T I A L I S A T I O N S  :
<
<
INIT01:  EQU         $
         PSR         X               < SAUVEGARDE DU NOMBRE D'IMAGES A
                                     < GENERER...
<
< DEFINITION DE LA FENETRE
< D'OBSERVATION DE L'ENSEMBLE
< DE MANDELBROT :
<
         #/FLD#      PR1             < DROITE,
         FSB         PR0             < DROITE-GAUCHE,
         FDV         FNC             < (DROITE-GAUCHE)/512,
         #/FST#      DELTAR          < SOIT LA LARGEUR REELLE...
         #/FLD#      PI1             < HAUT,
         FSB         PI0             < HAUT-BAS,
         FDV         FNL             < (HAUT-BAS)/512,
         #/FST#      DELTAI          < SOIT LA HAUTEUR REELLE...
<
<
<        G E N E R A T I O N   D E   L ' I M A G E  :
<
<
GEN69:   EQU         $
         CPZ         IBANDE          < GENERE-T'ON UNE BANDE ???
         JNE         GEN69N          < OUI, PAS D'EFFACEMENT...
         CPZ         IERASE          < FAUT-IL EFFACER ???
         JE          GEN69N          < NON...
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
<
< EFFACEMENT DE L'ECRAN :
<
XWOR%1:  VAL         NIV256=K
         IF          BIT>XWOR%1-NIV256,,XWOR%,
         IF          ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
         IF          LES PLANS EST ABSURDE !!!
XWOR%:   VAL         ENDIF
         LAI         NIV256-MASK)MOCD
         STA         MCDAJ
         LA          ARPLAN          < (A)=ADRESSE DU REGISTRE DE SELECTION...
         BSR         APWCDA          < ET ON SELECTIONNE TOUS LES PLANS...
         LAI         ERASE
         STA         MCDAJ
         LA          ARCMD
         BSR         APWCDA          < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
                                     < TION DE TOUS LES REGISTRES...
         LAD         TEMPO
         SVC                         < ET ON FAIT UN PETIT DODO...
         LAI         XCTRL1
         STA         MCDAJ
         LA          ACTRL1
         BSR         APWCDA          < INITIALISATION DE 'CTRL1'.
         LAI         XCTRL2
         STA         MCDAJ
         LA          ACTRL2
         BSR         APWCDA          < INITIALISATION DE 'CTRL2'.
<
< RECUPERATION DE L'IMAGE :
<
GEN69N:  EQU         $
         LY          VECTNL          < (Y)=PARTIE IMAGINAIRE,
GEN01:   EQU         $
         LX          VECTNC          < (X)=PARTIE REELLE.
GEN02:   EQU         $
         PSR         X,Y             < SAUVEGARDE DE (REELLE,IMAGINAIRE)...
<
< INITIALISATION DE LA TRACE
< DES "TRAJECTOIRES" :
<
         CPZ         ITRACE          < FAUT-IL TRACER LES "TRAJECTOIRES" ???
         JE          GEN60           < NON...
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         LR          X,A             < OUI :
         SLLS        XXDEDX
         STA         VECGX2          < INITIALISATION DU
         LR          Y,A
         SLLS        XXDEDY
         STA         VECGY2          <                   VECTEUR A TRACER.
         LA          NTRACE
         STA         VECTNI          < ET DU NIVEAU INITIAL...
GEN60:   EQU         $
<
< PASSAGE DES COORDONNEES
< ECRAN (X,Y) AU NOMBRE
< COMPLEXE 'C' COURANT :
<
         LR          X,A             < REELLE,
         FLT
         FMP         DELTAR          < MISE DANS LA FENETRE,
         FAD         PR0             < ET TRANSLATION,
         #/FST#      CR              < SOIT LA PARTIE REELLE DE 'C'.
         LR          Y,A             < IMAGINAIRE,
         FLT
         FMP         DELTAI          < MISE DANS LA FENETRE,
         FAD         PI0             < ET TRANSLATION,
         #/FST#      CI              < SOIT LA PARTIE IMAGINAIRE DE 'C'.
<
< INITIALISATION DU CUMUL 'Z' :
<
         #/FLD#      F0R
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      ZR
         #/FLD#      F0I
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      ZI
         CPZ         IJULIA          < QUEL EST L'ENSEMBLE A CONSTRUIRE ???
         JE          GEN70           < 'MANDELBROT' : LES INITIALISATIONS SONT
                                     < DONC BONNES.
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST PRECEDENT EST IDIOT !!!
XEIF%:   VAL         ENDIF
<
< CAS DE L'ENSEMBLE DE 'JULIA', IL
< FAUT PERMUTER (CR,CI) ET (ZR,ZI) :
<
         #/FLD#      ZR              < ZR,
         PSR         A,B
         #/FLD#      ZI              < ZI,
         PSR         A,B
         #/FLD#      CR
         #/FST#      ZR              < ZR <-- CR,
         #/FLD#      CI
         #/FST#      ZI              < ZI <-- CI,
         PLR         A,B
         #/FST#      CI              < CI <-- ANCIEN ZI,
         PLR         A,B
         #/FST#      CR              < CR <-- ANCIEN ZR.
GEN70:   EQU         $
<
< ITERATION DE LA TRANSFORMATION
< Z <-- Z**2+C :
<
NIVCUR:: VAL         XXN255          < NIVEAU DE MARQUAGE DU CURSEUR.
LIMITE:: VAL         NIVCUR+Z-I      < NOMBRE D'ITERATIONS MAXIMAL ACCEPTE.
                                     < (LIMITE A CAUSE DU CURSEUR...)
         LRM         X
         WORD        LIMITE          < (X)=NOMBRE D'ITERATIONS.
GEN03:   EQU         $
         #/FLD#      ZI              < ZI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FMP         ZI              < ZI**2,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      FWORK           < ET SAVE...
         #/FLD#      ZR              < ZR,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FMP         ZR              < ZR**2,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FSB         FWORK           < ZR**2-ZI**2, SOIT LA PARTIE REELLE DU
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
                                     < CARRE DU NOMBRE COMPLEXE (ZR,ZI),
         PSR         A,B             < ET SAVE...
         #/FLD#      ZR              < ZR,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FMP         ZI              < ZR*ZI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FMP         F2              < 2*ZR*ZI, SOIT LA PARTIE IMAGINAIRE DU
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
                                     < CARRE DU NOMBRE COMPLEXE (ZR,ZI),
         FAD         CI
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      ZI              < ET ITERATION :
         PLR         A,B
         FAD         CR
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      ZR              <                Z <-- Z**2+C...
         CPZ         ILAMBD          < FAUT-IL MULTIPLIER PAR 'LAMBDA' ???
         JE          GEN69L          < NON...
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         FMP         LAMBDR          < ZR*LR,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      FWORK           < ET SAVE...
         #/FLD#      ZI              < ZI,
         FMP         LAMBDI          < ZI*LI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FNEG                        < -ZI*LI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FAD         FWORK           < ZR*LR-ZI*LI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         PSR         A,B             < ET SAVE LA FUTURE PARTIE REELLE...
         #/FLD#      ZR              < ZR,
         FMP         LAMBDI          < ZR*LI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      FWORK           < ET SAVE...
         #/FLD#      ZI              < ZI,
         FMP         LAMBDR          < ZI*LR,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FAD         FWORK           < LR*ZI+LI*ZR,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      ZI              < ET ITERATION :
         PLR         A,B
         #/FST#      ZR              < Z <-- LAMBDA*(Z**2+C).
GEN69L:  EQU         $
<
< TRACE EVENTUELLE DE LA "TRAJECTOIRE"
< DE LA TRANSFORMATION (ON MARQUE LE
< CHAINAGE (Z(N),(Z(N+1))) :
<
         CPZ         ITRACE          < FAUT-IL TRACER LES "TRAJECTOIRES" ???
         JE          GEN61           < NON...
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         PSR         A,B             < SAVE 'ZR'.
         LA          VECTNI
         AD          PTRACE
         STA         VECTNI          < NIVEAU DE TRACE DU VECTEUR COURANT.
         LA          VECGX2
         LB          VECGY2
         STB         VECGY1          < ET
         STA         VECGX1          <    CHAINAGE DE L'ORIGINE...
         #/FLD#      ZR
         FSB         PR0
         FDV         DELTAR
         FIX
         SLLS        XXDEDX
         STA         VECGX2          < GENERATION DE LA
         #/FLD#      ZI
         FSB         PI0
         FDV         DELTAI
         FIX
         SLLS        XXDEDY
         STA         VECGY2          <                  NOUVELLE EXTREMITE...
         BSR         AVE512          < ET TRACE DE LA "TRAJECTOIRE"...
         PLR         A,B             < RESTAURE 'ZR'...
GEN61:   EQU         $
<
< TEST DE CONVERGENCE :
<
         FMP         ZR              < ZR**2,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         #/FST#      FWORK           < ET SAVE...
         #/FLD#      ZI              < ZI,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FMP         ZI              < ZI**2,
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
         FAD         FWORK           < ZR**2+ZI**2, SOIT LE CARRE DU MODULE
         NLS
         IF          XREDUC-EXIST,XEIF%9,,XEIF%9
         LST
         BSR         AREDUC          < SIMULATION D'UN MANQUE DE PRECISION
                                     < DANS LES CALCULS...
         NLS
XEIF%9:  VAL         ENDIF
         LST
                                     < DU NOMBRE COMPLEXE (ZR,ZI).
         FCAM        WMODUL          < EST-ON DANS OU HORS DE L'ENSEMBLE ???
         JGE         GEN04           < ON VIENT D'EN SORTIR...
         JDX         GEN03           < A PRIORI ON Y RESTE, ON CONTINUE DONC
                                     < L'ITERATION DE : Z <-- Z**2+C...
         ADRI        I,X             < POUR RETOMBER SUR NOS PIEDS...
GEN04:   EQU         $
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         CPZ         IRAYON          < FAUT-IL TRACER LES RAYONS ???
                                     < (NOTA : ON APPELLE "RAYON" LES ARGUMENTS
                                     < TETA=ARCTG(ZI/ZR) DES NOMBRES COMPLEXES
                                     < OBTENUS EN FIN D'ITERATION.
         JE          GEN80           < NON, LE NIVEAU DE MARQUAGE SERA LE NOMBRE
                                     < D'ITERATIONS.
<
< OUI, LA COULEUR DE MARQUAGE
< SERA LE "RAYON" :
<
         FCMZ        ZR              < LA TANGENTE NE SERAIT-ELLE PAS INFINIE ??
         JNE         GEN81           < NON...
         #/FLD#      ATGPS2          < OUI, L'ARGUMENT VAUT DONC +/- PI/2.
         FCMZ        ZI              < "+" OU "-" ???
         JGE         GEN82           < +PI/2.
         FNEG                        < -PI/2,
         FAD         DEUXPI          < OU 3*PI/2...
         JMP         GEN82           < VERS LE CALCUL DU NIVEAU...
GEN81:   EQU         $
         #/FLD#      ZI              < 'ZR' N'EST PAS NUL,
         FDV         ZR              < ON CALCULE DONC LA TANGENTE DE L'ARGUMENT
         FABS                        < AFIN DE CALCULER L'ARC-TANGENTE DANS
                                     < LE SEGMENT (0,PI/2)...
         BSR         AARCTG          < PUIS L'ARC-TANGENTE.
         FCMZ        ZR
         JGE         GEN83
         FCMZ        ZI
         JGE         GEN84
         FAD         PI              < ZR<0 ET ZI<0   : PI+ARCTG...
         JMP         GEN89
GEN84:   EQU         $
         FSB         PI
         FNEG                        < ZR<0 ET ZI>=0  : PI-ARCTG...
         JMP         GEN89
GEN83:   EQU         $
         FCMZ        ZI
         JGE         GEN85
         FSB         DEUXPI
         FNEG                        < ZR>=0 ET ZI<0  : 2*PI-ARCTG...
         JMP         GEN89
GEN85:   EQU         $               < ZR>=0 ET ZI>=0 : ARCTG...
GEN89:   EQU         $
GEN82:   EQU         $
         FDV         DEUXPI          < QUE L'ON PASSE DE 'RADIANS' EN NOMBRE
                                     < DE TOURS,
         FMP         F255            < ET QUE L'ON CONVERTIT EN NIVEAU...
         BSR         AROND
         JMP         GEN86           < VERS SA MISE EN PLACE...
<
< MARQUAGE DES POINTS AVEC
< LE NOMBRE D'ITERATIONS :
<
GEN80:   EQU         $
         IF          Z-I,,XEIF%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%:   VAL         ENDIF
         ADRI        -Z,X            < AFIN DE CALCULER UN NIVEAU DE GRIS...
         LR          X,A             < (A)=NIVEAU DE GRIS DU POINT COURANT,
GEN86:   EQU         $
         PLR         X,Y             < (X,Y)=POINT COURANT,
<
< MARQUAGE DU POINT (X,Y) :
<
         PSR         X,Y             < ON LE SAUVE...
         STA         NIVOC           < AINSI QUE LE NIVEAU COURANT...
         LR          X,B             < (B)=COORDONNEE 'X'.
         LX          SIZEY           < (X)=HAUTEUR DES POINTS.
GEN10:   EQU         $
         PSR         B,X
         LX          SIZEX           < (X)=LARGEUR DES POINTS.
GEN11:   EQU         $
         LR          B,A             < (A)=COORDONNEE 'X' ET VALIDATION :
         JAL         GEN12           < HORS-ECRAN...
         CP          VECTNC
         JG          GEN12           < HORS-ECRAN...
         LR          Y,A             < (A)=COORDONNEE 'Y' ET VALIDATION :
         JAL         GEN12           < HORS-ECRAN...
         CP          VECTNL
         JG          GEN12           < HORS-ECRAN...
         LA          NIVOC           < LE POINT COURANT EST DANS L'ECRAN :
                                     < (A)=NIVEAU A MARQUER...
         XR          B,X
<
< CHOIX DU MODE DE GENERATION :
<
         CPZ         IBANDE          < EN FAIT DOIT-ON ECRIRE UNE BANDE ???
         JE          GEN21           < NON...
<
< OUI, GENERATION D'UNE BANDE :
<
         PSR         A,X
         LX          IBUFMT          < (X)=INDEX DE L'OCTET COURANT,
         STBY        &ABUFMT         < (A)=OCTET COURANT...
         ADRI        I,X             < ET PREPARATION DE
         STX         IBUFMT          <                   L'ACCES SUIVANT...
<
< TEST DE L'ETAT DU BUFFER :
<
         LR          X,A             < (A)=INDEX COURANT :
         CP          ZBUFMT          < LE BUFFER A-T'IL ETE VIDE (OU EST-CE
                                     < L'ETAT INITIAL) ???
         JL          GEN31           < NON...
<
< CAS OU LE BUFFER EST PLEIN :
<
GEN32:   EQU         $
         LAD         DEMMT           < (A)=ADRESSE DE LA DEMANDE,
         SVC                         < QUE L'ON ENVOIE...
         JE          GEN33           < OK...
         QUIT        XXQUIT          < E R R E U R   D ' A S S I G N A T I O N..
         JMP         GEN32           < ET ON RE-TENTE...
GEN33:   EQU         $
         IC          DEMMT+ARGESC    < PREPARATION DE L'ADRESSE DU BLOC SUIVANT,
         STZ         IBUFMT          < (A)=INDEX DU PREMIER OCTET.
GEN31:   EQU         $
         PLR         A,X
         JMP         GEN20           < THAT'S ALL...
<
< NON, ON GENERE UNE IMAGE :
<
GEN21:   EQU         $
         BSR         APOINT          < MARQUAGE DU POINT (X,Y) AVEC LE
                                     < NIVEAU (A)...
GEN20:   EQU         $
         XR          B,X
GEN12:   EQU         $
         ADRI        I,B             < BALAYAGE HORIZONTAL...
         JDX         GEN11
         PLR         B,X             < RESTAURATION DE L'ABSCISSE (B) DE DEBUT
                                     < DE LIGNE...
         ADRI        I,Y             < BALAYAGE VERTICAL...
         JDX         GEN10
         PLR         X,Y             < ET RESTAURATION DU POINT COMPLEXE
                                     < COURANT...
<
< ARRET EVENTUEL APRES CHAQUE POINT :
<
         CPZ         IQUITR          < FAUT-IL S'ARRETER ???
         JE          GEN62           < NON...
         IF          NEXIST-K,,XEIF%,
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         QUIT        XXQUIT          < OUI...
GEN62:   EQU         $
<
< PASSAGE AU POINT (X,Y) ET
< DONC AU NOMBRE COMPLXE 'C' SUIVANT :
<
         LR          X,A
         SB          PASIX           < PROGRESSION REELLE,
         LR          A,X
         JAL         GEN02X          < OUI...
         BR          AGEN02          < NON...
GEN02X:  EQU         $
         LR          Y,A             < OUI...
         SB          PASIY           < PROGRESSION IMAGINAIRE,
         LR          A,Y
         JAL         GEN01X          < OUI...
         BR          AGEN01          < NON...
GEN01X:  EQU         $
<
< OUI, TRAITEMENT DE FIN...
<
         CPZ         IQUIT           < FAUT-IL S'ARRETER ???
         JE          GEN410          < NON...
         IF          EXIST-K,XEIF%,,XEIF%
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         QUIT        XXQUIT          < OUI...
GEN410:  EQU         $
         CPZ         IBANDE          < A-T'ON GENERE UNE BANDE ???
         JNE         GEN400          < OUI, PAS D'ECRITURE VIDEO...
         CPZ         IVIDEO          < FAUT-IL ECRIRE ???
         JE          GEN400          < NON...
         IF          EXIST-K,XEIF%,,XEIF%
         IF          ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%:   VAL         ENDIF
         PSR         X               < OUI :
         LAD         DEMVIW
         SVC                         < ON ECRIT L'IMAGE COURANTE...
         LAD         DEMVIR
         SVC                         < ET ON ATTEND L'ACQUITTEMENT...
         PLR         X
GEN400:  EQU         $
<
< PASSAGE A L'IMAGE SUIVANTE :
<
         PLR         X               < (X)=NOMBRE D'IMAGES A GENERER...
         JDX         INT02
         CPZ         IBANDE          < A-T'ON GENERE UNE BANDE ???
         JE          GEN41           < NON...
         LAD         DEMMTM
         SVC                         < OUI, ON ECRIT UN 'TAPE-MARK'...
GEN41:   EQU         $
         QUIT        XXQUIT          < C'EST FINI...
         BR          ADEB9           < ET ON ITERE EVENTUELLEMENT...
<
< INTERPOLATION :
<
INT02:   EQU         $
         #/FLD#      PR0             < C,
         FSB         PR0A            < C-A,
         FMP         COEFR0          < (C-A)*K,
         FAD         PR0A            < (C-A)*K+A,
         #/FST#      PR0             < NOUVELLE LIMITE REELLE INFERIEURE...
         #/FLD#      PR1             < C,
         FSB         PR1A            < C-A,
         FMP         COEFR1          < (C-A)*K,
         FAD         PR1A            < (C-A)*K+A,
         #/FST#      PR1             < NOUVELLE LIMITE REELLE SUPERIEURE...
         #/FLD#      PI0             < C,
         FSB         PI0A            < C-A,
         FMP         COEFI0          < (C-A)*K,
         FAD         PI0A            < (C-A)*K+A,
         #/FST#      PI0             < NOUVELLE LIMITE IMAGINAIRE INFERIEURE...
         #/FLD#      PI1             < C,
         FSB         PI1A            < C-A,
         FMP         COEFI1          < (C-A)*K,
         FAD         PI1A            < (C-A)*K+A,
         #/FST#      PI1             < NOUVELLE LIMITE IMAGINAIRE SUPERIEURE...
         BR          AINIT1          < ET ON PASSE A L'IMAGE SUIVANTE...
<
<
<        E N T R Y   A L T - M O D E  :
<
<
DEBUT5:  EQU         $
         QUIT        XXQUIT          < A T T E N T E ...
         LRM         C,L,K           < ON REINITIALISE 'C', 'L' ET 'K' AU CAS
                                     < D'UNE RE-ENTREE PAR UN 'ALT-MODE'...
         WORD        COM+DEPBAS      < 'C',
         WORD        LOC+DEPBAS      < 'L',
         WORD        STACK-DEPILE    < 'K'.
<
< GESTION DU CURSEUR GRAPHIQUE :
<
CURS01:  EQU         $
         LAD         OG
         SVC         0               < OPEN GRAPHIQUE.
         LAD         CU
         SVC         0               < MISE EN FONCTION CURSEUR.
         LAD         LCU
         SVC         0               < LECTURE DU CURSEUR.
<
< PASSAGE DE L'ESPACE GRAPHIQUE
< A L'ESPACE MOYENNE DEFINITION :
<
         LA          CURSOY          < Y(CURSEUR).
         MP          C4              < POUR ATTEINDRE
         DV          C3              <                TOUTE LA VIDEO...
         SLRS        SIZYVI/XL512=K  < REDUCTION VIDEO.
         LR          A,Y             < Y=Y(CURSEUR VIDEO).
         LA          CURSOX          < X(CURSEUR).
         SLRS        SIZXVI/XC512=K  < REDUCTION VIDEO.
         LR          A,X             < X=X(CURSEUR VIDEO).
         LBY         CURSOR          < A=COMMANDE ASSOCIEE.
<
< ANALYSE DE LA COMMANDE :
<
<        COMMANDES RECONNUES :
<
<                    C : MARQUAGE SEUL DU CURSEUR,
<                    F : MEMORISATION DE LA FENETRE D'ARRIVEE REDUITE
<                        AU POINT COURANT (X,Y),
<                    G : VERS LE DEBUT DU PROCESSUS DE GENERATION...
<
         CPI         "C"
         JNE         CURS03          < ???
<
< MARQUAGE DU CURSEUR SEUL :
<
         LAI         NIVCUR
         BSR         APOINT          < MARQUAGE DU POINT (X,Y) AVEC LE NIVEAU
                                     < MAXIMAL...
         JMP         CURS01          < ET ON ITERE LE CURSEUR...
CURS03:  EQU         $
         CPI         "F"
         JNE         CURS02          < ???
<
< MEMORISATION DE LA FENETRE
< D'ARRIVEE (IDENTIQUE ET RE-
< DUITE AU POINT VISE) :
<
         LR          X,A             < X,
         FLT
         FMP         DELTAR          < X*(DROITE-GAUCHE)/512,
         FAD         PR0             < GAUCHE+X*(DROITE-GAUCHE)/512,
         #/FST#      PR0A            < SOIENT LES LIMITES INFERIEURES
         #/FST#      PR1A            < ET SUPERIEURES REELLES.
         LR          Y,A             < Y,
         FLT
         FMP         DELTAI          < Y*(HAUT-BAS)/512,
         FAD         PI0             < BAS+Y*(HAUT-BAS)/512,
         #/FST#      PI0A            < SOIENT LES LIMITES BASSES
         #/FST#      PI1A            < ET HAUTES IMAGINAIRES.
         JMP         CURS01          < ET ON ITERE LE CURSEUR...
CURS02:  EQU         $
         CPI         "G"
         JNE         CURS01          < ???
<
< LANCEMENT DE LA GENERATION
< DE L'ENSEMBLE :
<
         BSR         AGOTO
         WORD        DEBUT4          < (A)=ADRESSE D'ITERATION SUR ALT-MODE...
         PAGE
<
<
<        U P D A T E S  :
<
<
         $EQU        PR0D
         FLOAT       -2.0            < A GAUCHE DE LA FENETRE DE DEPART,
         $EQU        PR1D
         FLOAT       0.5             < A DROITE DE LA FENETRE DE DEPART.
         $EQU        PI0D
         FLOAT       -1.25           < EN BAS DE LA FENETRE DE DEPART,
         $EQU        PI1D
         FLOAT       1.25            < EN HAUT DE LA FENETRE DE DEPART.
         $EQU        NIMAGE
         WORD        W               < NOMBRE D'IMAGES A GENERER.
         $EQU        EPSI
         FLOAT       0.000010        < EPSILON DE CALCUL DE 'COEF'.
<
< DEFINITION DE LA FENETRE D'ARRIVEE  ('NUMFAR') :
<
FAR01::  VAL         K               < FENETRE D'ARRIVEE STANDARD.
FAR02::  VAL         '0@@@@+I        < FENETRE D'ARRIVEE HOMOTHETIQUE NON ROTEE.
FAR03::  VAL         '0@@@@+I        < FENETRE D'ARRIVEE DANS LES FILAMENTS.
FARNN::  VAL         '0@@@@          < DERNIERE FENETRE...
NUMFAR: @
XWOR%1:  VAL         KOLF=FMASK+KOLTES=FVAL
XWOR%1:  VAL         KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2:  VAL         KOLTED=FMASK+KOL0=FVAL
XWOR%2:  VAL         KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3:  VAL         XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4:  VAL         MSYMBI=FMASK+KOL0=FVAL
XWOR%4:  VAL         MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5:  VAL         XWOR%4=FCSYMT   < ETAT DU SYMBOLE 'NUMFAR'...
XWOR%6:  VAL         XWOR%5=FCSIGN
XWOR%7:  VAL         XWOR%5(MSYMBN)MSYMBN=FCSIGN
         IF          XWOR%6*XWOR%7,XEIF%,,XEIF%
NUMFAR:: VAL         FARNN           < DERNIERE FENETRE A PRIORI...
XEIF%:   VAL         ENDIF
         IF          NUMFAR-FAR01,XEIF%,,XEIF%
         $EQU        PR0A
         FLOAT       -0.73000        < A GAUCHE DE LA FENETRE D'ARRIVEE,
         $EQU        PR1A
         FLOAT       -0.73000        < A DROITE DE LA FENETRE D'ARRIVEE.
         $EQU        PI0A
         FLOAT       0.22429         < EN BAS DE LA FENETRE D'ARRIVEE,
         $EQU        PI1A
         FLOAT       0.22429         < EN HAUT DE LA FENETRE D'ARRIVEE.
XEIF%:   VAL         ENDIF
         IF          NUMFAR-FAR02,XEIF%,,XEIF%
         $EQU        PR0A
         FLOAT       -1.792          < A GAUCHE DE LA FENETRE D'ARRIVEE,
         $EQU        PR1A
         FLOAT       -1.745          < A DROITE DE LA FENETRE D'ARRIVEE.
         $EQU        PI0A
         FLOAT       -0.25           < EN BAS DE LA FENETRE D'ARRIVEE,
         $EQU        PI1A
         FLOAT       0.25            < EN HAUT DE LA FENETRE D'ARRIVEE.
XEIF%:   VAL         ENDIF
         IF          NUMFAR-FAR03,XEIF%,,XEIF%
         $EQU        PR0A
         FLOAT       -0.234254       < A GAUCHE DE LA FENETRE D'ARRIVEE,
         $EQU        PR1A
         FLOAT       -0.234254       < A DROITE DE LA FENETRE D'ARRIVEE.
         $EQU        PI0A
         FLOAT       0.828110        < EN BAS DE LA FENETRE D'ARRIVEE,
         $EQU        PI1A
         FLOAT       0.828110        < EN HAUT DE LA FENETRE D'ARRIVEE.
XEIF%:   VAL         ENDIF
         $EQU        LAMBDR
         FLOAT       <W<K<K          < PARTIE REELLE DE 'LAMBDA',
         $EQU        LAMBDI
         FLOAT       <K<K<K          < PARTIE IMAGINAIRE DE 'LAMBDA'.
         $EQU        F0R
         FLOAT       <K<K<K          < VALEUR INITIALE DU CUMUL
         $EQU        F0I
         FLOAT       <K<K<K          < DE Z <-- Z**2+I.
         PAGE
<
<
<        T A B L E   D E S   S Y M B O L E S  :
<
<
         IF          '00000000000@,XEIF%,,XEIF%
         EST
XEIF%:   VAL         ENDIF
         DATE
         END         DEBUT



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.