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
         PAGE
<
<
<        D E F I N I T I O N   D U   F O R M A T
<        D E S   N O M B R E S   C O M P L E X E S  :
<
<
         DSEC
NCA1:    EQU         $               < NOMBRE COMPLEXE 'ARGUMENT 1' :
NCA1R:   FLOAT       <NILK<NILK<NILK < PARTIE REELLE,
NCA1I:   FLOAT       <NILK<NILK<NILK < PARTIE IMAGINAIRE.
DCOMP::  VAL         $-NCA1          < LONGUEUR D'UN NOMBRE COMPLEXE.
         DSEC
NCA2:    EQU         $               < NOMBRE COMPLEXE 'ARGUMENT 2' :
NCA2R:   FLOAT       <NILK<NILK<NILK < PARTIE REELLE,
NCA2I:   FLOAT       <NILK<NILK<NILK < PARTIE IMAGINAIRE.
         IF          $-NCA2-DCOMP,,XEIF%,
         IF          ATTENTION : 'NCA2' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
         DSEC
NCR:     EQU         $               < NOMBRE COMPLEXE 'RESULTAT :
NCRR:    FLOAT       <NILK<NILK<NILK < PARTIE REELLE,
NCRI:    FLOAT       <NILK<NILK<NILK < PARTIE IMAGINAIRE.
         IF          $-NCR-DCOMP,,XEIF%,
         IF          ATTENTION : 'NCR' EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
<
<        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 :
<
MODUL:   FLOAT       <NILK<NILK<NILK < 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...
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.
TROISR:  FLOAT       3.0             < NOMBRE COMPLEXE
TROISI:  FLOAT       0.0             <                 (3.0,0.0).
DEUXR:   FLOAT       2.0             < NOMBRE COMPLEXE
DEUXI:   FLOAT       0.0             <                 (2.0,0.0).
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
<
< DONNEES DES OPERATIONS
< SUR LES NOMBRES COMPLEXES :
<
ZW1:     DZS         DCOMP           < NOMBRE COMPLEXE DE MANOEUVRE 1,
ZW2:     DZS         DCOMP           < NOMBRE COMPLEXE DE MANOEUVRE 2,
ZW3:     DZS         DCOMP           < NOMBRE COMPLEXE DE MANOEUVRE 3,
ZW4:     DZS         DCOMP           < NOMBRE COMPLEXE DE MANOEUVRE 4,
ZW5:     DZS         DCOMP           < NOMBRE COMPLEXE DE MANOEUVRE 5,
ZW6:     DZS         DCOMP           < NOMBRE COMPLEXE DE MANOEUVRE 6.
AZAD:    WORD        ZAD             < ADDITION COMPLEXE,
AZSB:    WORD        ZSB             < SOUSTRACTION COMPLEXE,
AZMP:    WORD        ZMP             < MULTIPLICATION COMPLEXE.
<
< 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.
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< 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'.
SCR:     FLOAT       <NILK<NILK<NILK < ET SAVE
SCI:     FLOAT       <NILK<NILK<NILK <         LE NOMBRE 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
<
< 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...
<
< CONSTANTES DE CALCUL DES SINUS ET COSINUS :
<
ASIN:    WORD        SIN             < S/P DE CALCUL DU SINUS,
ACOS:    WORD        COS             < ET DU COSINUS.
COS061:  FLOAT       <NILK<NILK<NILK < NOMBRE FLOTTANT,
COS062:  FLOAT       <NILK<NILK<NILK
COS063:  WORD        NILK            < SIGNE.
PI3141:  FLOAT       3.1415926       < PI,
PISUR2:  FLOAT       1.5707963       < PI/2.
COS067:  EQU         PISUR2          < COEFFICIENTS DU POLYNOME :
COS068:  WORD        'AD00;'5110
COS069:  WORD        '51FD;'9A2C
COS070:  WORD        'B3F9;'6CCE
COS071:  WORD        '4FF4;'6BDD
         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
<
<
<        O P E R A T I O N S   S U R   L E S   N O M B R E S
<                    C O M P L E X E S  :
<
<
<        FONCTION :
<                      CES MODULES REALISENT LES OPERATIONS
<                    DE BASE (+,-,*) SUR LES NOMBRES COMPLEXES
<                    DE TELLE FACON QUE LE 'RESULTAT' PUISSE
<                    ETRE L'UN DES 2 'ARGUMENTS'.
<
<
<        ARGUMENTS :
<                    (A)=ADRESSE DE 'ARGUMENT 1',
<                    (B)=ADRESSE DE 'ARGUMENT 2',
<                    (Y)=ADRESSE DE 'RESULTAT'.
<
<
         USE         C,NCA1
         USE         L,NCA2
         USE         W,NCR
<
<
<        A D D I T I O N  :
<
<
ZAD:     EQU         $
         PSR         A,B
         PSR         C,L,W           < SAUVEGARDE DES BASES CAR ON VA LES
                                     < UTILISER COMME POINTEURS.
         LR          A,C             < 'ARGUMENT 1',
         LR          B,L             < 'ARGUMENT 2',
         LR          Y,W             < 'RESULTAT'.
         #/FLD#      NCA1R
         FAD         NCA2R
         PSR         A,B             < SAVE LA PARTIE REELLE 'RESULTAT'...
         #/FLD#      NCA1I
         FAD         NCA2I
         #/FST#      NCRI            < PARTIE IMAGINAIRE 'RESULTAT'.
         PLR         A,B
         #/FST#      NCRR            < PARTIE REELLE 'RESULTAT'.
         PLR         C,L,W           < RESTAURATIONS...
         PLR         A,B
         RSR                         < ET RETOUR...
<
<
<        S O U S T R A C T I O N  :
<
<
ZSB:     EQU         $
         PSR         A,B
         PSR         C,L,W           < SAUVEGARDE DES BASES CAR ON VA LES
                                     < UTILISER COMME POINTEURS.
         LR          A,C             < 'ARGUMENT 1',
         LR          B,L             < 'ARGUMENT 2',
         LR          Y,W             < 'RESULTAT'.
         #/FLD#      NCA1R
         FSB         NCA2R
         PSR         A,B             < SAVE LA PARTIE REELLE 'RESULTAT'...
         #/FLD#      NCA1I
         FSB         NCA2I
         #/FST#      NCRI            < PARTIE IMAGINAIRE 'RESULTAT'.
         PLR         A,B
         #/FST#      NCRR            < PARTIE REELLE 'RESULTAT'.
         PLR         C,L,W           < RESTAURATIONS...
         PLR         A,B
         RSR                         < ET RETOUR...
<
<
<        M U L T I P L I C A T I O N  :
<
<
ZMP:     EQU         $
         PSR         A,B
         PSR         C,L,W           < SAUVEGARDE DES BASES CAR ON VA LES
                                     < UTILISER COMME POINTEURS.
         LR          A,C             < 'ARGUMENT 1',
         LR          B,L             < 'ARGUMENT 2',
         LR          Y,W             < 'RESULTAT'.
         #/FLD#      NCA1I
         FMP         NCA2I
         PSR         A,B
         #/FLD#      NCA1R
         FMP         NCA2R
         XR          C,K
         FSB         -DFLOT+DEPILE,C
         XR          C,K
         ADRI        -DFLOT,K
         PSR         A,B             < SAVE LA PARTIE REELLE 'RESULTAT'...
         #/FLD#      NCA1I
         FMP         NCA2R
         PSR         A,B
         #/FLD#      NCA2I
         FMP         NCA1R
         XR          C,K
         FAD         -DFLOT+DEPILE,C
         XR          C,K
         ADRI        -DFLOT,K
         #/FST#      NCRI            < PARTIE IMAGINAIRE 'RESULTAT',
         PLR         A,B
         #/FST#      NCRR            < PARTIE REELLE 'RESULTAT'.
         PLR         C,L,W           < RESTURATIONS...
         PLR         A,B
         RSR                         < ET RETOUR...
         USE         L
         USE         C
         PAGE
<
<
<        C A L C U L   S I N U S   E T   C O S I N U S  :
<
<
<        ARGUMENT :
<                    A,B = ANGLE EN RADIANS,
<
<
<        RESULTAT :
<                    A,B = LIGNE TRIGONOMETRIQUE DEMANDEE.
<
<
COS:     EQU         $               < ENTRY 'COSINUS' :
         FSB         PISUR2          < A,B = TETA-PI/2,
         BSR         AFNEG           < A,B = PI/2-TETA.
SIN:     EQU         $               < ENTRY 'SINUS' :
         FST         COS061          < SAVE TEMPORAIRE DE L'ANGLE.
         STZ         COS063
         JAGE        COS072
         BSR         AFNEG
         FST         COS061
         IC          COS063
COS072:  EQU         $
         FDV         DEUXPI
         BSR         AFIX
         BSR         AFLT
         FMP         DEUXPI
         FSB         COS061
         BSR         AFNEG
         FCAM        PI3141
         JL          COS073
         FSB         PI3141
         IC          COS063
COS073:  EQU         $
         FCAM        PISUR2
         JL          COS074
         FSB         PI3141
         BSR         AFNEG
COS074:  EQU         $
         FDV         PISUR2
         FST         COS061
         FMP         COS061
         FST         COS062
         FMP         COS071
         FAD         COS070
         FMP         COS062
         FAD         COS069
         FMP         COS062
         FAD         COS068
         FMP         COS062
         FAD         COS067
         FMP         COS061
         DC          COS063
         JNE         COS075
         BSR         AFNEG
COS075:  EQU         $
         RSR
         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',
         #/FST#      SCR             < ET SAVE A CAUSE DE "JULIA"...
         LR          Y,A             < IMAGINAIRE,
         FLT
         FMP         DELTAI          < MISE DANS LA FENETRE,
         FAD         PI0             < ET TRANSLATION,
         #/FST#      CI              < SOIT LA PARTIE IMAGINAIRE DE 'C',
         #/FST#      SCI             < ET SAVE A CAUSE DE "JULIA"...
<
< 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
         FNEG
         #/FST#      ZR              < ZR <-- -CR,
         #/FLD#      CI
         FNEG
         #/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**3-3*(C**2)*Z+LAMBDA+2*(C**3) :
<
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         $
         LRM         A,B,Y
         WORD        ZR;ZR;ZW1
         BSR         AZMP            < Z**2,
         LRM         A,B,Y
         WORD        ZR;ZW1;ZW1
         BSR         AZMP            < Z**3.
         LRM         A,B,Y
         WORD        ZR;TROISR;ZW2
         BSR         AZMP            < -3*Z,
         LRM         A,B,Y
         WORD        SCR;SCR;ZW3
         BSR         AZMP            < C**2,
         LRM         A,B,Y
         WORD        ZW2;ZW3;ZW4
         BSR         AZMP            < 3*Z*(C**2).
         LRM         A,B,Y
         WORD        ZW1;ZW4;ZW6
         BSR         AZSB            < Z**3-3*Z*(C**2).
         LRM         A,B,Y
         WORD        SCR;ZW3;ZW1
         BSR         AZMP            < C**3,
         LRM         A,B,Y
         WORD        DEUXR;ZW1;ZW1
         BSR         AZMP            < 2*(C**3),
         LRM         A,B,Y
         WORD        LAMBDR;ZW1;ZW2
         BSR         AZAD            < LAMBDA+2*(C**3).
         LRM         A,B,Y
         WORD        ZW6;ZW2;ZR
         BSR         AZAD            < Z**3-3*Z*(C**2)+LAMBDA+2*(C**3).
         #/FLD#      ZR              < ZR...
<
< 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.2            < A GAUCHE DE LA FENETRE DE DEPART,
         $EQU        PR1D
         FLOAT       +2.2            < A DROITE DE LA FENETRE DE DEPART.
         $EQU        PI0D
         FLOAT       -2.2            < EN BAS DE LA FENETRE DE DEPART,
         $EQU        PI1D
         FLOAT       +2.2            < 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        MODUL
XWOR%1:  VAL         10              < "RAYON" COURANT...
XWOR%2:  VAL         XWOR%1*XWOR%1   < CARRE DU "RAYON"...
         FLOAT       <XWOR%2<K<K     < POUR LE TEST DE DIVERGENCE...
         $EQU        LAMBDR
         FLOAT       <XWOR%1<K<K     < PARTIE REELLE DE 'LAMBDA',
         $EQU        LAMBDI
         FLOAT       0.0             < 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.