PROG
         IDP         "LAX - RELEASE 14 - 30/10/80"
         IDP         "P. FRANCONNET"
ZERO:    EQU         $
         DZS         '10
         WORD        RUN
         WORD        ENTRY
RUN:     EQU         $
         LRP         L
         BR          -1,L            < ALLONS-Y.
<
<
<        P R O G R A M M E   D E   C A L C U L   E T   D E
<
<        V I S U A L I S A T I O N   D E   L A   P R O P A G A T I O N
<
<        D ' U N   S I G N A L.
<
LNF:     VAL         2               < LONGUEUR MOTS D'UN NOMBRE EN FLOTTANT.
INIDKU:  VAL         '0000           < PREMIER BLOC DISPONIBLE DKU.
XWORK:   VAL         -12
VALIDA:  VAL         INIDKU>XWORK    < POUR VALIDATION ADRESSES SECTEURS.
NMVU0:   VAL         101             < NB MAX DE VALEURS DE U0.
PILE:    DZS         30              < PILE POUR 'K'.
VINIT:   DZS         NMVU0*LNF       < VALEURS INITIALES DE U0.
<
ENTIM:   EQU         $               < EN-TETE IMAGE VIDEO.
         DZS         1               < SPARE.
         WORD        1               < MODE TRACE = 'SBT'.
         DZS         4               < INUTILISE.
YXV:     DZS         4               < (Y1,X1),(Y2,X2).
IMAG:    DZS         256*16          < IMAGE VIDEO.
FIMAG:   EQU         $
LIMAG:   VAL         FIMAG-IMAG      < LONGUEUR MOTS IMAGE.
XDOL1:   VAL         IMAG-ZERO
XDOL2:   VAL         $-ZERO
         $EQU        ZERO+XDOL1
NBD:     DZS         3               < NOMBRE DECIMAL SAISI EN ASCI.
FNBD:    EQU         $
REPH:    EQU         NBD             < NOMBRE HEXA SAISI EN ASCI.
MCDAI:   ASCI        "!CDA"
         BYTE        "I";'04
FMCDAI:  EQU         $
<
< MESSAGES STANDARD POUR LE S/P 'ENVOI'.
<
M:       EQU         $+256
MSORVI:  BYTE        '6D;"V"
         ASCI        "ISU?"
         WORD        0
MVISU:   BYTE        '6D;"S"
         ASCI        "ORTIR SUR VI"
         WORD        0
MTV:     BYTE        '6D;"T";"V";"?";0
MCATAL:  BYTE        '6D;"C"
         ASCI        "ATALOGUER?"
         WORD        0
MAINIT:  BYTE        '6D;"A"
         ASCI        "DR. INITIALE="
         WORD        0
MMEMH:   BYTE        '6D;"M"
         ASCI        "EMOIRE HAUTE?"
         WORD        0
MNINI:   BYTE        '6D;"N"
         ASCI        "UMERO IM. INITIALE="
         WORD        0
MMETH:   BYTE        '6D;"M"
         ASCI        "ETHODE (L,W,S,C)?"
         WORD        0
MPERT:   BYTE        '6D;"P"
         ASCI        "ERTURBATION (N/2/4)?"
         WORD        0
MEPS:    BYTE        '6D;"E"
         ASCI        "PSILON="
         WORD        0
MSLASH:  BYTE        "/";0
MDX:     BYTE        '6D;"D"
         ASCI        "ELTA X = 1/"
         WORD        0
MDT:     BYTE        '6D;"D"
         ASCI        "ELTA T = 1/"
         WORD        0
MDIRAC:  BYTE        '6D;"D"
         ASCI        "IRAC?"
         WORD        0
MTYPS:   BYTE        '6D;"T"
         ASCI        "YPE SIGNAL (U/V/T/C/S)?"
         WORD        0
MNETAP:  BYTE        '6D;"N"
         ASCI        "OMBRE D'ETAPES="
         WORD        0
MOBSC:   BYTE        '6D;"O"
         ASCI        "BSERVATEUR VITESSE C?"
         WORD        0
MVIS:    BYTE        '6D;"V"
         ASCI        "ISUALISATION:"
         WORD        0
MSUPER:  BYTE        '6D;"S"
         ASCI        "UPERPOSITION?"
         WORD        0
MCATS:   BYTE        '6D;"C"
         ASCI        "ATALOGUER LA SUPERPOSITION?"
         WORD        0
MENV:    BYTE        '6D;"E"
         ASCI        "NVELOPPE?"
         WORD        0
MNBENV:  BYTE        '6D;"U"
         ASCI        "N SUR "
         WORD        0
MMULX:   BYTE        '6D;"M"
         ASCI        "ULX="
         WORD        0
MMULY:   BYTE        '6D;"M"
         ASCI        "ULY="
         WORD        0
MTX:     BYTE        '6D;"T";"X";"=";0
MTY:     BYTE        '6D;"T";"Y";"=";0
MTR:     BYTE        '6D;"T"
         ASCI        "RACER UNE ETAPE SUR "
         WORD        0
MRAZ:    BYTE        '6D;"R"
         ASCI        "AZ?"
         WORD        0
XDOL1:   VAL         $-ZERO
         IF          FIMAG-ZERO-XDOL1,,,XWOR%
         IF          E R R E U R   (RECOUVREMENT TROP LONG).
XWOR%:   VAL         0
         $EQU        ZERO+XDOL2
<
<        MESSAGES IMPLANTES EN MEMOIRE "HAUTE".
<
M2:      EQU         $+256
MIMCR2:  BYTE        '6D;"I"
         ASCI        "MAGE CREEE EN "
         WORD        0
MNIMC:   WORD        '0708;0;0;0     < EDITION NUMERO IMAGE CREEE.
         WORD        '0700           < POUR AVOIR UNE CLOCHE !
MESPM:   BYTE        '6D;"E"
         ASCI        "SPACE MEMOIRE INSUFFISANT"
         WORD        0
MINEG:   BYTE        '6D;"I"
         ASCI        "NEGALITE!!"
         WORD        '0700
         PAGE
         COMMON
COM:     EQU         $
         DZS         1               < POUR LE BLOC FLOTTANT.
<
< RELAIS DE SOUS-PROGRAMMES.
<
AINI:    WORD        INI             < INITIALISATIONS.
ACALC:   WORD        CALCUL          < CALCULS ETAPE COURANTE.
ASP1SM:  WORD        SP1SM           < SP1 SAUTE-MOUTON.
ASP2SM:  WORD        SP2SM           < SP2 SAUTE-MOUTON.
AVISUA:  WORD        VISUAL          < VISUALISATION DES RESULTATS DE L'ETAPE.
ATRANS:  WORD        TRANS           < TRANSFORMATION DES COORDONNEES X,Y
                                     < EN COORDONNEES GRAPHIQUES.
ATRACE:  WORD        TRACE           < TRACE GRAPHIQUE ET EVENTUELLEMENT VIDEO.
ACOMP:   WORD        COMP            < COMPARAISON IMAGE GENEREE :: IMAGE DKU.
ADIFF:   WORD        DIFF            < DIFFUSION / RELECTURE IMAGE.
AENVOI:  WORD        ENVOI           < ENVOI D'UN MESSAGE STANDARD.
AQREP:   WORD        QREP            < ENVOI QUESTION ET DEMANDE REPONSE.
AQREPN:  WORD        QREPN           < ENVOI QUESTION ET DEMANDE, VALIDATION
                                     < ET CONVERSION DE LA REPONSE QUI DOIT
                                     < ETRE UN NOMBRE DECIMAL.
AFIX:    WORD        FIX             < ARRONDI ET FIX NOMBRE FLOTTANT.
ACVAD:   WORD        CVAD            < CONVERSION ASCI-DECIMAL --> BINAIRE.
ACVDA:   WORD        CVDA            < CONVERSION BINAIRE --> ASCI-DECIMAL.
ACONVH:  WORD        CONVH           < CONVERSION ASCI --> HEXA.
AMOVE:   WORD        MOVE            < MOVE "MANUEL" !
AECH:    WORD        ECH             < ECHANGE DE DEUX ZONES MEMOIRE.
ARAZ:    WORD        RAZ             < RAZ ECRAN VISU (IMAGE RESIDENTE).
ARZ123:  WORD        RAZ123          < RAZ STACK RVB.
ACATAL:  WORD        CATAL           < CATALOGAGE IMAGE COURANTE.
ASUPER:  WORD        SUPER           < SUPERPOSITION DU SIGNAL INITIAL.
< FONCTIONS DE CALCUL DE U0 (CONDITION INITIALE).
AUDEX:   DZS         1
AFUNI:   WORD        FUNIT           < "UNITE".
AFUNI1:  WORD        FUNI1           < "UNITE 1".
AFTRIA:  WORD        FTRIAN          < "TRIANGLE".
AFCLOC:  WORD        FCLOCH          < "CLOCHE".
AFSIN:   WORD        FSIN            < "SINUS PI*X".
<
ASIN:    WORD        SIN             < S/P DE CALCUL DE SIN(X).
<
< DIVERS.
<
MASVI:   ASCI        "!ASSIGN B=VI"
VISU:    BYTE        0;'04
FMASVI:  EQU         $
MASO:    ASCI        "!ASSIGN B="
         BYTE        "O";'04
FMASO:   EQU         $
MCLOS:   ASCI        "!CLOSE"
         BYTE        '04
FMCLOS:  EQU         $
<
REP:     DZS         1               < ZONE REPONSE.
AXTRAV:  WORD        ZERO,X          < RELAI DE TRAVAIL.
NETAP:   DZS         1               < CONTIENT N : TRACER UNE ETAPE SUR N.
ISORVI:  DZS         1               < INDICATEUR SORTIE VISU ACTIVE:
                                     < = 0 : NON,
                                     < = 1 : OUI.
ISORTV:  DZS         1               < INDICATEUR SOTIE TV DEMANDEE :
                                     < = 0 : NON,
                                     < = 1 : OUI.
ICATAL:  DZS         1               < INDICATEUR CATALOGAGE:
                                     < = 0  : NE PAS CATALOGUER,
                                     < = 1 : CATALOGUER SUR DKU.
ICATS:   DZS         1               < INDICATEUR CATALOGAGE IMAGE SUPERPOSEE,
                                     < = 0 / 1 : COMME 'ICATAL'
ISUPER:  DZS         1               < INDICATEUR SUPERPOSITION DEMANDEE:
                                     < = 0 : PAS DE SUPERPOSITION,
                                     < = 1 : SUPERPOSITION.
CSUPER:  DZS         1               < COULEUR DE L'IMAGE SUPERPOSEE :
                                     < = 0,1,2,3 : RIEN,R,V,B.
IENV:    DZS         1               < INDICATEUR MODE "ENVELOPPE":
                                     < = 0 : NON,
                                     < = 1 : OUI.
IOBSC:   DZS         1               < INDICATEUR "OBSERVATEUR VITESSE C":
                                     < = 0 : NON,
                                     < = 1 : OUI.
NBENV:   DZS         1               < UN SIGNAL SUR 'NBENV'.
ITRAV:   DZS         1               < MOT DE TRAVAIL.
AINIDK:  WORD        INIDKU          < ADRESSE INITIALE AUTORISEE SUR DKU.
NIMC:    DZS         1               < NUMERO IMAGE COURANTE (POUR CATAL SGN).
IRAZ:    DZS         1               < INDICATEUR RAZ AVANT VISUALISATION :
                                     < = 0 : PAS DE RAZ,
                                     < = 1 : RAZ.
TYPU:    DZS         1               < INDICATEUR TYPE "UNITE":
                                     < = 0 : TYPE "UNITE" OU "UNITE1",
                                     < = 1 : TYPE "TRIANGLE","CLOCHE" OU "SIN".
IMETH:   DZS         1               < METHODE UTILISEE:
                                     < = 0 : LAX,
                                     < = 1 : LAX-WENDROFF,
                                     < = 2 : SCHEMA AUX CARACTERISTIQUES,
                                     < =-1 : SAUTE-MOUTON.
IMODSM:  DZS         1               < MODE EN SAUTE-MOUTON:
                                     < = 0 : MODE NORMAL (NOTER QUE SI METHODE
                                     <       UTILISEE # SAUTE-MOUTON, ALORS
                                     <       'IMODSM' = 0);
                                     < = 1 : MODE "PERTURBATION2";
                                     < =-1 : MODE "PERTURBATION4".
IMEMH:   DZS         1               < INDICATEUR "MEMOIRE HAUTE" DANS
                                     < LA CDA IMAGE:
                                     < = 0 : NON,
                                     < = 1 : OUI (MODE "AVEUGLE").
ALM3IM:  WORD        LIMAG*3         < LONGUEUR MOTS DE 3 IMAGES.
AXIM:    WORD        IMAG-1,X        < POUR RAZ IMAGE.
AFTABL:  WORD        FTABLO          < ADRESSE FIN TABLEAU.
<
< CONSTANTES ET VARIABLES FIXES ET FLOTTANTES ...
<
ZEROF:   FLOAT       0.0
UN:      FLOAT       1.0
UNDEMI:  FLOAT       0.5
DEUX:    FLOAT       2.0
TROIS:   FLOAT       3.0
FDEUX:   EQU         DEUX
FQUATR:  FLOAT       4.0
FSIX:    FLOAT       6.0
FDIX:    FLOAT       10.0
PI:      FLOAT       3.1415926
TRAV:    DZS         LNF             < ZONE DE TRAVAIL.
DELTAX:  DZS         LNF             < DELTA X.
DELTAT:  DZS         LNF             < DELAT T.
TC:      DZS         LNF             < T COURANT.
NBETAP:  DZS         1               < NOMBRE D'ETAPES.
MULX:    DZS         LNF             < MULTIPLICATEUR X.
MULY:    DZS         LNF             < MULTIPLICATEUR Y.
TX:      DZS         LNF             < TRANSLATION EN X.
TXOBS:   DZS         LNF             < TRANSLATION SUPPLEMENTAIRE EN X
                                     < (SI L'OBSERVATEUR SE DEPLACE A LA
                                     < LA VITESSE C; CF 'IOBSC').
TY:      DZS         LNF             < TRANSLATION EN Y.
ETAPEC:  DZS         1               < NUMERO DE L'ETAPE COURANTE (0,1,...).
GAMMA:   DZS         LNF             < GAMMA=C*(DELTAT/DELTAX) AVEC C=1.
GAMMA2:  DZS         LNF             < GAMMA AU CARRE.
< COEFFICIENTS A UTILISER.
C0:      DZS         LNF             < COEFFICIENT "ZERO".
CM1:     DZS         LNF             < COEFFICIENT "MOINS 1".
CP1:     DZS         LNF             < COEFFICIENT "PLUS 1".
< COEFFICIENTS METHODE LAX.
COEFM1:  DZS         LNF             < COEFFICIENT "MOINS 1" =
                                     < 0.5 * (1+GAMMA).
COEFP1:  DZS         LNF             < COEFFICIENT "PLUS 1" =
                                     < 0.5 * (1-GAMMA).
< COEFFICIENTS LAX-WENDROFF.
A0:      DZS         LNF             < A "ZERO".
AM1:     DZS         LNF             < A "MOINS 1"
AP1:     DZS         LNF             < A "PLUS 1".
< COEFFICIENTS SCHEMA AUX CARACTERISTIQUES.
B0:      DZS         LNF             < B "ZERO".
BM1:     EQU         GAMMA           < B "MOINS 1" = GAMMA.
< COEFFICIENTS SAUTE-MOUTON.
SM0:     EQU         UN              < SM "ZERO".
SMM1:    EQU         GAMMA           < SM "MOINS 1".
SMP1:    DZS         LNF             < SM "PLUS 1" = (1-GAMMA).
EPS:     DZS         LNF             < EPSILON ('IMODSM' # 0).
PERT:    DZS         LNF             < COEFFICIENT "PERTURBATION 2/4".
< ZONES DE TRAVAIT SAUTE-MOUTON.
TRAV2:   DZS         1
TRAV3:   DZS         1
TRAV5:   DZS         1
FTRAV4:  DZS         LNF
<
X:       DZS         LNF             < X COURANT FLOTTANT.
Y:       DZS         LNF             < Y COURANT FLOTTANT.
NBVU0:   DZS         1               < NOMBRE DE VALEURS DE U ZERO.
XINIT:   FLOAT       0.0             < X INITIAL.
<
DIX0:    WORD        1               < DIX PUISSANCE ZERO.
DIX1:    WORD        10              < ... 1.
DIX2:    WORD        100             < ... 2.
DIX3:    WORD        1000            < ... 3.
DIX4:    WORD        10000           < ... 4.
DIX:     EQU         DIX1            < DIX.
C1024:   WORD        1024            < POUR VALIDATIONS (X,Y).
<
AINF:    WORD        TABLO           < ADRESSE INFERIEURE DES U (N-1).
ASUP:    DZS         1               < ADRESSE SUPERIEURE DES U (N-1).
<
< DEMANDES A CMS5.
<
DMCLOS:  WORD        '0002           < !CLOSE.
         WORD        MCLOS-ZERO*2
         WORD        FMCLOS-MCLOS*2
DMASVI:  WORD        '0002           < !ASSIGN B=VIX.
         WORD        MASVI-ZERO*2
         WORD        FMASVI-MASVI*2
DMASO:   WORD        '0002           < !ASSIGN B=O.
         WORD        MASO-ZERO*2
         WORD        FMASO-MASO*2
DMREP:   WORD        '0101           < DEMANDE REPONSE 1 CARACTERE.
         WORD        REP-ZERO*2
         WORD        1
AM:      WORD        M               < POUR LE S/P 'ENVOI'.
DMOUT:   WORD        '0202           < ENVOI MESSAGE UL 2.
         DZS         1
         DZS         1
DMTRV:   WORD        '8A01           < TRACE VIDEO.
         WORD        ENTIM-ZERO*2
         WORD        FIMAG-ENTIM*2
         WORD        0               < PAS DE VISUALISATION.
DMDIFF:  WORD        '8A01           < DIFFUSION IMAGE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
COUL:    DZS         1               < COULEUR.
DMDIR:   WORD        '8A06           < ECRITURE DIRECTE SUR DKU.
         DZS         1               < ADRESSE STACK RVB.
         WORD        '4000           < 2 COMPOSANTES (3EME = TIMING).
         DZS         1               < ADRESSE SECTEUR QUANTA 3.
DMRR:    WORD        '8A01           < READ ROUGE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        '40+1
DMWR:    WORD        '8A01           < WRITE ROUGE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        1
DMRV:    WORD        '8A01           < READ VERT.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        '40+2
DMWV:    WORD        '8A01           < WRITE VERT.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        2
DMRB:    WORD        '8A01           < READ BLEU.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        '40+3
DMWB:    WORD        '8A01           < WRITE BLEU.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        3
ALIMAG:  WORD        LIMAG           < LONGUEUR MOTS IMAGE.
AIMAG:   WORD        IMAG            < ADRESSE MOT IMAGE.
AOMH:    WORD        LIMAG*3*2       < ADRESSE OCTETS MEMOIRE HAUTE EN CDAI.
DMRAZ:   WORD        '0B05           < RAZ ECRAN VISU.
DMOG:    WORD        '0B03           < OPEN GRAPHIQUE.
COORD:   EQU         $               < COORDONNEES GRAPHIQUES.
Y1:      DZS         1
X1:      DZS         1
Y2:      DZS         1
X2:      DZS         1
DMTRGR:  WORD        '0B0A           < TRACE GRAPHIQUE.
         WORD        COORD-ZERO*2
         WORD        4*2
DMNBD:   WORD        '0101           < LECTURE NOMBRE DECIMAL.
         WORD        NBD-ZERO*2
         WORD        FNBD-NBD*2
AXNBD:   WORD        NBD,X           < RELAI D'ACCES A CE NOMBRE.
DMGETM:  WORD        '0004           < DEMANDE MEMOIRE.
         DZS         1               < INUTILISE.
         WORD        '8000           < 16 K MOTS.
DMREPH:  WORD        '0101           < DEMANDE NOMBRE HEXA.
         WORD        REPH-ZERO*2
         WORD        4
DMCDAI:  WORD        '0002           < !CDAI.
         WORD        MCDAI-ZERO*2
         WORD        FMCDAI-MCDAI*2
<
TABSIN:  DZS         2*LNF           < TABLE POUR LE S/P 'SIN'.
         PAGE
         PROG
ENTRY:   EQU         $
         LRM         C,K             < COMMON ET PILE.
         WORD        COM+'80
         WORD        PILE-1
<
         BSR         AINI            < INITIALISATION.
         BSR         ARZ123          < RAZ EVENTUEL DES STACKS RVB.
         BSR         AVISUA          < VISUALISATION SIGNAL INITIAL (ETAPE 0).
         BSR         ACATAL          < CATALOGAGE EVENTUEL.
<
         LX          NBETAP          < NOMBRE D'ETAPES.
LAX1:    EQU         $               < BOUCLE PRINCIPALE (VARIATION DE T
                                     < PAR PAS DE DELTA T).
         PSR         X               < SAVE COUNT.
         FLD         TC              < T COURANT.
         FAD         DELTAT          < + DELTA T.
         FST         TC              < NOUVEAU T COURANT.
         IC          ETAPEC          < NOUVEAU NUMERO D'ETAPE COURANTE.
         BSR         ACALC           < CALCUL ETAPE COURANTE.
         BSR         AVISUA          < VISUALISATION DES RESULTATS DE L'ETAPE.
         BSR         ASUPER          < SUPERPOSITION (EVENTUELLE) SIGNAL INITIAL
         BSR         ACATAL          < CATALOGAGE EVENTUEL.
         PLR         X               < RECUPERATION COUNT.
         JDX         LAX1            < SUIVANT...
<
FIN:     EQU         $
         LAD         DMCLOS          < !CLOSE.
         SVC         0
         WORD        '1E16
         JMP         $-1             < PROGRAMME NON REUTILISABLE.
         PAGE
XDOL2:   VAL         $-ZERO
         $EQU        ZERO+XDOL1
INI:     EQU         $
<
<        I N I T I A L I S A T I O N S . ..
<
<          CE SONT ESSENTIELLEMENT :
<
<        - ASSIGNATION DE LA VISU SUR LAQUELLE SE FERA LE TRACE,
<        - CHOIX DE LA SORTIE VIDEO,
<        - CHOIX DE LA METHODE DE CALCUL,
<        - CHOIX DU TYPE DE SIGNAL,
<        - DELTA X, DELTA T,
<        - CALCUL DES COEFFICIENTS GAMMA, COEFM1, COEFP1,
<        - VALEURS DE LA FONCTION U A L'INSTANT 0,
<        - VALEUR FINALE DE T,
<        - PARAMETRES POUR LA VISUALISATION :
<                    - FACTEURS MULTIPLICATIFS EN X ET Y,
<                    - TRANSLATIONS EN X ET Y,
<        - MISE A ZERO DU NUMERO DE L'ETAPE COURANTE ('ETAPEC'),
<        - ...
<
< DEMANDE DE MEMOIRE.
         LAD         DMGETM
         SVC         0
         JE          $+2
         WORD        '1E16
< CHOIX DE LA SORTIE VISU.
         LAD         DMCLOS          < !CLOSE A PRIORI.
         SVC         0
INI0:    EQU         $
         STZ         ISORVI          < SORTIE VISU = NON A PRIORI.
         LAI         MSORVI-M
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         "N"
         JE          INI2            < NON.
         CPI         "O"
         JNE         INI0            < REPONSE INCORRECTE.
         IC          ISORVI          < SORTIE VISU.
INI1:    EQU         $
         LAD         DMCLOS          < !CLOSE.
         SVC         0
         LAI         MVISU-M         < PROPOSITION.
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         '04
         JE          INI11           < ASSIGNER L'OUTPUT.
         CPI         '0D
         JE          INI11           < ASSIGNER L'OUTPUT.
         STBY        VISU            < VISU A ASSIGNER.
         LAD         DMASVI          < !ASSIGN B=VIX.
         SVC         0
         JNE         INI1
         JMP         INI2
INI11:   EQU         $
         LAD         DMASO           < !ASSIGN B=O.
         SVC         0
INI2:    EQU         $
< CHOIX DE LA SORTIE TV.
         STZ         ISORTV          < SORTIE TV = NON A PRIORI.
         STZ         COUL            < PAS DE COULEUR A PRIORI.
         STZ         ICATAL          < PAS DE CATALOGAGE A PRIORI.
         LAI         MTV-M           < PROPOSITION.
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         "N"
         JE          INI3            < PAS DE TV.
         CPI         "O"
         JNE         INI2            < REPONSE INCORRECTE.
         LAI         2               < SIGNAL CALCULE TOUJOURS DANS STACK VERT.
         STA         COUL
         IC          ISORTV          < OPTION TV ACTIVE.
         STZ         IMEMH           < A PRIORI, MODE NON-AVEUGLE.
         STZ         DMDIR+1         < IDEM.
         LAD         DMCDAI          < FAIRE DE TOUTES FACONS !CDAI.
         SVC         0
         JE          $+2
         ACTD
<
< CHOIX DE L'OPTION CATALOGAGE.
<
INI7:    EQU         $
                                     < 'ICATAL' DEJA INITIALISE.
         LAI         MCATAL-M
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         "N"
         JE          INI3            < NON.
         CPI         "O"
         JNE         INI7            < REPONSE INCORRECTE.
         IC          ICATAL          < INDICATEUR CATAL = OUI.
INI74:   EQU         $
< PROPOSER LA GENERATION EN MEMOIRE HAUTE DE LA CDAI.
         LAI         MMEMH-M
         BSR         AQREP
         CPI         "N"
         JE          INI73
         CPI         "O"
         JNE         INI74
         IC          IMEMH           < MEMOIRE HAUTE.
         LA          AOMH            < ADRESSE OCTETS POUR DEMANDE D'ECHANGE
         STA         DMDIR+1         < DIRECT AVEC DKU.
INI73:   EQU         $
         LAI         MAINIT-M
         BSR         AENVOI
         LAD         DMREPH          < REPONSE = ADRESSE SECTEUR EN HEXA.
         SVC         0
         LA          DMREPH+1        < ADRESSE OCTET REPONSE.
         BSR         ACONVH          < 'A' <-- ADRESSE EN BINAIRE...
         JNE         INI73           < REPONSE INCORRECTE.
         STA         DMDIR+3         < IDEM POUR ECRITURE DIRECTE.
         SLRS        12              < POUR VALIDATION.
         CPI         VALIDA
         JL          INI73           < INVALIDE...
INI3:    EQU         $
<
< CHOIX DE LA METHODE DE CALCUL.
<
         STZ         IMETH           < LAX A PRIORI.
         STZ         IMODSM          < A PRIORI.
         LAI         MMETH-M
         BSR         AQREP
         CPI         "L"
         JE          INIH            < LAX.
         CPI         "W"
         JE          INIJ            < LAX-WENDROFF.
         CPI         "C"
         JE          INIM            < SCHEMA AUX CARACTERISTIQUES.
         CPI         "S"
         JNE         INI3            < REPONSE INCORRECTE.
         DC          IMETH           < SAUTE-MOUTON.
INI30:   EQU         $
< EN SAUTE-MOUTON, ON A 3 MODES: NORMAL, PERTURBATION2 ET PERTURBATION4.
         LAI         MPERT-M         < CHOIX DU MODE.
         BSR         AQREP
         CPI         "N"
         JE          INI32
         CPI         "2"
         JE          INI33
         CPI         "4"
         JNE         INI30
         DC          IMODSM          < MODE PERTURBATION4.
         JMP         INI31
INI33:   EQU         $
         IC          IMODSM          < MODE PERTURBATION2.
INI31:   EQU         $
< DEMANDER EPSILON (SOUS FORME NUMERATEUR / DENOMINATEUR).
         LAI         MEPS-M
         BSR         AQREPN
         PSR         A               < NUMERATEUR.
         LAI         MSLASH-M
         BSR         AQREPN
         FLT
         FST         FTRAV4          < DENOMINATEUR.
         PLR         A
         FLT
         FDV         FTRAV4
         FST         EPS
INI32:   EQU         $
         JMP         INIH
INIM:    EQU         $
         LAI         2
         STA         IMETH           < SCHEMA AUX CARACTERISTIQUES.
         JMP         INIH
INIJ:    EQU         $
         IC          IMETH           < LAX-WENDROFF.
INIH:    EQU         $
<
< CHOIX DE DELTA X.
<
         LAI         MDX-M           < PROPOSITION.
         BSR         AQREPN          < QUESTION / REPONSE NB DECIMAL.
         STA         NBVU0
         IC          NBVU0           < NOMBRE DE VALEURS DE U ZERO.
         CPI         NMVU0           < VALIDATION.
         JGE         INIH            < DELTAX TROP PETIT !
         FLT
         FST         DELTAX
         FLD         UN
         FDV         DELTAX
         FST         DELTAX          < DELTA X.
<
< CHOIX DE DELTA T.
<
         LAI         MDT-M           < PROPOSITION.
         BSR         AQREPN          < QUESTION / REPONSE NB DECIMAL.
         FLT
         FST         DELTAT
         FLD         UN
         FDV         DELTAT
         FST         DELTAT          < DELTA T.
<
<        CHOIX DE L'OPTION "DIRAC".
<
INIQ:    EQU         $
         LAI         MDIRAC-M
         BSR         AQREP
         CPI         "N"
         JE          INI8
         CPI         "O"
         JNE         INIQ
         LAI         2
         STA         NBVU0           < DEUX VALEURS DE U0.
         FLD         UN              < CETTE VALEUR ETANT 1/DELTAX.
         FDV         DELTAX
         LRM         W
         WORD        TABLO
         FST         0,W             < ET VOILA, EVIDEMMENT, LA QUESTION DU
         FST         LNF,W
         JMP         INIB            < TYPE DE SIGNAL NE SE POSE PAS...
<
< ACQUISITION OU GENERATION DES 'NBVU0' VALEURS DE U0.
<
INI8:    EQU         $
         STZ         TYPU            < TYPE "UNITE" OU "UNITE1" A PRIORI.
         LAI         MTYPS-M         < PROPOSITION TYPE DE SIGNAL.
         BSR         AQREP
         CPI         "U"
         JE          INIU
         CPI         "V"
         JE          INIV
         CPI         "T"
         JE          INIT
         CPI         "C"
         JE          INICL
         CPI         "S"
         JNE         INI8
< TYPE "SINUS PI * X ".
         IC          TYPU            < TYPE "TRIANGLE","CLOCHE" OU "SIN".
         LA          AFSIN
         JMP         INI9
INICL:   EQU         $
< TYPE "CLOCHE".
         IC          TYPU            < TYPE "CLOCHE","TRIANGLE" OU "SIN".
         LA          AFCLOC
         JMP         INI9
< TYPE "TRIANGLE".
INIT:    EQU         $
         IC          TYPU            < TYPE "TRIANGE","CLOCHE" OU "SIN".
         LA          AFTRIA
         JMP         INI9
< TYPE "UNITE 1".
INIV:    EQU         $
         LA          AFUNI1
         JMP         INI9
< TYPE "UNITE".
INIU:    EQU         $
         LA          AFUNI
INI9:    EQU         $
         STA         AUDEX           < RELAI DU SP DE CALCUL DE U(X).
         LX          NBVU0           < NOMBRE DE VALEURS A GENERER.
         FLD         ZEROF
         FST         X               < X COURANT.
         LRM         W               < ADRESSE COURANTE DE STOCKAGE.
         WORD        TABLO
INI5:    EQU         $               < BOUCLE DE CALCUL.
         FLD         X               < X COURANT.
         BSR         AUDEX           < RENVOIE 'A','B' = U(X)
         FST         0,W             < STOCKAGE.
         ADRI        LNF,W
         FLD         X
         FAD         DELTAX
         FST         X               < NOUVEL X COURANT.
         JDX         INI5
<
< NOMBRE D'ETAPES...
<
INIB:    EQU         $
         LAI         MNETAP-M        < PROPOSITION.
         BSR         AQREPN          < QUESTION / REPONSE NB DECIMAL.
         JALE        INIB            < CE NOMBRE DOIT ETRE > 0.
         STA         NBETAP          < NOMBRE D'ETAPES.
<
< T COURANT INITIAL.
<
         FLD         ZEROF
         FST         TC              < T COURANT INITIAL.
<
< ETAPE COURANTE = 0.
<
         STZ         ETAPEC
<
< PARAMETRES DE VISUALISATION.
<
         LAI         MVIS-M
         BSR         AENVOI
INIC1:   EQU         $
<
< OBSERVATEUR A LA VITESSE C ...
<
         STZ         IOBSC           < OPTION INACTIVE A PRIORI.
         LAI         MOBSC-M
         BSR         AQREP
         CPI         "N"
         JE          INIC
         CPI         "O"
         JNE         INIC1
         IC          IOBSC           < OPTION ACTIVE...
INIC:    EQU         $
<
< CHOIX DE LA SUPERPOSITION.
<
         STZ         ISUPER          < PAS DE SUPERPOSITION A PRIORI.
         STZ         CSUPER          < NI DE COULEUR DE SUPERPOSITION,
         STZ         ICATS           < NI DE CATALOGAGE DE SUPERPOSITION.
         LAI         MSUPER-M
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         "N"
         JE          INID
         CPI         "O"
         JNE         INIC            < REPONSE INCORRECTE.
         LAI         1               < SIGNAL SUPERPOSE TOUJOURS DANS ROUGE.
         IC          ISUPER          < SUPERPOSITION = OUI.
         CPZ         ISORTV          < TEST TV ACTIVE.
         JE          $+2             < SI NON, PAS DE COULEUR DE SUPERPOSITION.
         STA         CSUPER          < COULEUR DE LA SUPERPOSITION.
< REMPLIR 'VINIT', VALEURS INITIALES DE U0 POUR LE S/P 'SUP'.
         LA          NBVU0
         SLLS        1
         LR          A,X             < LONGUEUR.
         LRM         A,B
         WORD        TABLO           < EMETTEUR.
         WORD        VINIT           < RECEPTEUR.
         MOVE
< FAUT-IL CATALOGUER LES IMAGES DE SUPERPOSITION ?
         CPZ         ISORTV          < TEST TV ACTIVE.
         JE          INID
INIE:    EQU         $
         LAI         MCATS-M
         BSR         AQREP           < QUESTION / REPONSE.
         CPI         "N"
         JE          INID
         CPI         "O"
         JNE         INIE
         LA          ICATAL          < OUI, MEME OPTION QUE POUR ...
         STA         ICATS           < ... LES IMAGES "PRIMAIRES"
INID:    EQU         $
<
< FACTEUR MULTIPLICATIF EN X.
<
         LAI         MMULX-M
         BSR         AQREPN          < QUESTION / REPONSE NB DECIMAL.
         FLT
         FST         MULX
<
< FACTEUR MULTIPLICATIF EN Y.
<
         LAI         MMULY-M
         BSR         AQREPN          < QUESTION / REPONSE NB DECIMAL.
         FLT
         FST         MULY
<
< TRANSLATION EN X.
<
         LAI         MTX-M
         BSR         AQREPN
         FLT
         FST         TX
<
< TRANSLATION EN Y.
<
         LAI         MTY-M
         BSR         AQREPN
         FLT
         FST         TY
<
< CALCUL DES COEFFICIENTS GAMMA, COEFFICIENT "MOINS 1", COEFFICIENT "PLUS 1".
<
         FLD         DELTAT
         FDV         DELTAX
         FST         GAMMA           < GAMMA = DELTAT / DELTAX.
         FMP         GAMMA
         FST         GAMMA2          < GAMMA ** 2.
<
         FLD         UN
         FAD         GAMMA
         FST         COEFM1
         FLD         UNDEMI
         FMP         COEFM1
         FST         COEFM1          < COEFM1 = (1/2) * (1+GAMMA).
<
         FLD         UN
         FSB         GAMMA
         FST         B0              < B "ZERO" = (1-GAMMA); SCHEMA AUX
                                     < CARACTERISTIQUES.
         FST         COEFP1
         FLD         UNDEMI
         FMP         COEFP1
         FST         COEFP1          < COEFP1 = (1/2) * (1-GAMMA).
<
< CALCUL DES COEFFICIENTS A "ZERO", A "MOINS 1", A "PLUS 1".
<
         FLD         UN
         FSB         GAMMA2
         FST         A0              < A0 = (1-GAMMA**2).
<
         FLD         UNDEMI
         FMP         GAMMA
         FST         AM1
         FST         AP1
         FLD         UNDEMI
         FMP         GAMMA2
         FST         TRAV
         FAD         AM1
         FST         AM1             < AM1 = ((1/2)*GAMMA)+((1/2)*GAMMA**2).
         FLD         TRAV
         FSB         AP1
         FST         AP1             < AP1 =-((1/2)*GAMMA)+((1/2)*GAMMA**2).
<
< DEFINITION DES COEFFICIENTS A UTILISER.
<
         LA          IMETH           < METHODE UTILISEE.
         JAE         INIK            < LAX.
         CPI         1
         JE          ININ            < LAX-WENDROFF.
         CPI         2
         JE          INIP            < SCHEMA AUX CARACTERISTIQUES.
< SAUTE-MOUTON.
         FLD         ZEROF
         FSB         GAMMA
         FST         SMP1            < SM "PLUS 1" = -GAMMA.
                                     < NOTER QUE SM0 ET SMM1 VALENT RESPECTI-
                                     < VEMENT 1 ET GAMMA.
         CPZ         IMODSM          < TEST DU MODE SAUTE-MOUTPON.
         JE          INI35
< SAUTE-MOUTON, MODE PERTURBATION: CALCULER LE COEFF DE PERTURBATION.
         FLD         GAMMA
         FMP         EPS
         CPZ         IMODSM
         JG          INI34
         FNEG
INI34:   EQU         $
         FST         PERT
INI35:   EQU         $
<
                                     < REMARQUE: POUR L'INSTANT, ON FAIT COMME
                                     < SI LA METHODE ETAIT LAX-WENDROFF,
                                     < ET CE N'EST QU'A L'ETAPE 2 QUE L'ON
                                     < BASCULERA SUR LES COEFFICIENTS SAUTE-
                                     < MOUTON.
         JMP         ININ            < FAIRE COMME SI...
< SCHEMA AUX CARACTERISTIQUES.
INIP:    EQU         $
         FLD         GAMMA
         FST         CM1
         FLD         B0
         FST         C0
         FLD         ZEROF
         FST         CP1
         JMP         INIL
< LAX - WENDROFF.
ININ:    EQU         $
         FLD         A0
         FST         C0
         FLD         AP1
         FST         CP1
         FLD         AM1
         FST         CM1
         JMP         INIL
< LAX TOUT COURT.
INIK:    EQU         $
         FLD         COEFM1
         FST         CM1
         FLD         COEFP1
         FST         CP1
         FLD         ZEROF           < COEF ZERO = 0.
         FST         C0
INIL:    EQU         $
<
< TRACER UNE ETAPE SUR ...
<
         LAI         MTR-M
         BSR         AQREPN          < QUESTION / REPONSE NB DECIMAL.
         STA         NETAP           < UNE SUR 'NETAP'.
<
< CHOIX DE L'OPTION RAZ.
<
INI6:    EQU         $
         LAI         MRAZ-M
         BSR         AQREP           < QUESTION / REPONSE.
         STZ         IRAZ            < RAZ = NON A PRIORI.
         CPI         "N"
         JE          INI4            < NON.
         CPI         "O"
         JNE         INI6            < REPONSE INCORRECTE.
         IC          IRAZ            < OPTION ACTIVE.
INI4:    EQU         $
<
< CHOIX DE "ENVELOPPE".
<
         STZ         IENV            < MODE "ENVELOPPE" = NON A PRIORI.
         LAI         MENV-M
         BSR         AQREP
         CPI         "N"
         JE          INIG
         CPI         "O"
         JNE         INI4
         IC          IENV            < MODE "ENVELOPPE" = OUI.
         LAI         MNBENV-M
         BSR         AQREPN
         MP          NETAP
         STB         NBENV           < ON PRENDRA UN SIGNAL SUR 'NBENV'
                                     < POUR FAIRE L'ENVELOPPE.
INIG:    EQU         $
         LRM         A               < POUR LES MESSAGES IMPLANTES EN MEMOIRE
         WORD        M2              < HAUTE A ENVOYER PAR LE S/P ENVOI.
         STA         AM
         RSR
         PAGE
<
<         R O U T I N E S   D E   C A L C U L   D E S   U 0 ( X ).
<
<        ARGUMENTS:
<                    'A'-'B' = X COURANT FLOTTANT (0<=X<=1).
<                    'W' BASE LE U0 COURANT (QUI EST UTILISABLE COMME
<                        DOUBLE-MOT DE TRAVAIL.
<
<        RESULTAT:
<                    'A'-'B' = U0(X).
<
< FONCTION "UNITE".
FUNIT:   EQU         $
         FLD         UN
         RSR
< FONCTION "UNITE 1".
FUNI1:   EQU         $
         FCAZ
         JV          FUNI11
         LR          X,A             < IL VAUT MIEUX TESTER REGISTRE 'X' A 1
                                     < PLUTOT QUE 'A'-'B' = UN FLOTTANT, CAR
                                     < IL SE PEUT QUE CETTE DERNIERE CONDITION
                                     < NE SOIT JAMAIS EXACTEMENT REMPLIE (PAR
                                     < EXEMPLE, SI DELTAX = 1/6 ....!).
         CPI         1
         JNE         FUNIT
FUNI11:  EQU         $               < X=0 OU X=1, U0(X)=1/2.
         FLD         UNDEMI
         RSR
< FONCTION "TRIANGLE".
FTRIAN:  EQU         $
         FCAM        UNDEMI
         JNCV        FTRI1
         FMP         DEUX            < X < 1/2 --> U0(X) = 2X.
         RSR
FTRI1:   EQU         $
         FMP         DEUX
         FST         0,W
         FLD         DEUX
         FSB         0,W             < X >= 1/2 --> U0(X) = 2 (1-X).
         RSR
< FONCTION "CLOCHE".
FCLOCH:  EQU         $
         FCAM        UNDEMI
         JNCV        FCL1
< X <= 1/2 --> FAIRE X <-- 2X.
         FMP         DEUX
         JMP         FCL2
< X > 1/2  --> FAIRE X <-- 2(1-X).
FCL1:    EQU         $
         FMP         DEUX
         FST         0,W
         FLD         DEUX
         FSB         0,W
FCL2:    EQU         $
< FAIRE :  U0(X) = -2*X**3 + 3X**2.
         FST         0,W
         FMP         0,W
         FST         TRAV            < X AU CARRE.
         FMP         0,W
         FMP         DEUX
         FST         0,W             < 2*X**3
         FLD         TROIS
         FMP         TRAV            < 3*X**2.
         FSB         0,W             < -2*X**3 + 3*X**2.
         RSR
< FONCTION "SINUS PI * X".
FSIN:    EQU         $
         FMP         PI              < PI * X.
         FST         TABSIN          < POUR LE S/P 'SIN'.
         LAD         TABSIN          < ADRESSE ARGUMENT.
         BSR         ASIN
         FLD         TABSIN+LNF      < 'A'-'B' = SIN (PI * X).
         RSR
         PAGE
<
<        SOUS-PROGRAMME DE CALCUL DU SINUS
<        TABLE DE TRANSMISSION POINTEE PAR REGISTRE A
<        - MOT1 ET MOT2 : X EN FLOTTANT
<        - MOT3 ET MOT4 : Y EN FLOTTANT(RESULTAT)
<
         LOCAL
ZZZ060:  EQU         $
ZZZ061:  DZS         2               < NB EN FLOTTANT
ZZZ062:  DZS         2
ZZZ063:  DZS         1               < SIGNE
ZZZ064:  WORD        '6403;'87ED     < 2 PI
ZZZ065:  WORD        '6402;'87ED     < PI
ZZZ066:  WORD        '6401;'87ED     < PI/2
ZZZ067:  EQU         ZZZ066          < CSTES DU POLYNOME
ZZZ068:  WORD        'AD00;'5110
ZZZ069:  WORD        '51FD;'9A2C
ZZZ070:  WORD        'B3F9;'6CCE
ZZZ071:  WORD        '4FF4;'6BDD
         WORD        ZZZ060+'80      < RELAI VERS LE LOCAL
         PROG
SIN:     EQU         $
         PSR         A,B,L,W
         LRP         L               < INIT. DE LA BASE L
         LB          -2,L
         LR          B,L
         LR          A,W             < @ TABLE PARAM.
         FLD         0,W
         FST         ZZZ061
         STZ         ZZZ063
         JAGE        ZZZ072
         FNEG
         FST         ZZZ061
         IC          ZZZ063
ZZZ072:  EQU         $
         FDV         ZZZ064
         FIX
         FLT
         FMP         ZZZ064
         FSB         ZZZ061
         FNEG
         FCAM        ZZZ065
         JL          ZZZ073
         FSB         ZZZ065
         IC          ZZZ063
ZZZ073:  EQU         $
         FCAM        ZZZ066
         JL          ZZZ074
         FSB         ZZZ065
         FNEG
ZZZ074:  EQU         $
         FDV         ZZZ066
         FST         ZZZ061
         FMP         ZZZ061
         FST         ZZZ062
         FMP         ZZZ071
         FAD         ZZZ070
         FMP         ZZZ062
         FAD         ZZZ069
         FMP         ZZZ062
         FAD         ZZZ068
         FMP         ZZZ062
         FAD         ZZZ067
         FMP         ZZZ061
         DC          ZZZ063
         JNE         ZZZ075
         FNEG
ZZZ075:  EQU         $
         FST         2,W
         PLR         A,B,L,W
         RSR
         PAGE
CVAD:    EQU         $
<
<        C O N V E R S I O N   E N   B I N A I R E   D A N S   ' A '
<
<        D ' U N   N O M B R E   D E C I M A L   S A I S I   E N   A S C I.
<
<        ARGUMENTS:
<                    - 'A' = ADRESSE MOT DE LA CHAINE DE CARACTERES ASCI
<                            TERMINEE PAR <EOT> OU <RETURN> ET DE LONGUEUR
<                            MAXIMUM 6 OCTETS.
<
<        RESULAT:
<                    - AU RETOUR, FAIRE:
<                      JE     OK     < 'A' = NOMBRE EN BINAIRE.
<                      JNE    ERREUR < NOMBRE INCORRECT.
<
         PSR         B,X,Y,W         < SAUVEGARDES.
<
         LR          A,B             < 'B' = ADRESSE DEBUT ZONE POUR SBS.
         LAI         '0D             < CARACTERE A RECHERCHER.
         LXI         0               < RANG DU PREMIER CARACTERE.
         LYI         FNBD-NBD*2      < NOMBRE D'OCTETS DE LA ZONE.
         IF          FNBD-NBD*2-6,XWOR%,XWOR%,
         IF          E R R E U R : 'NBD' TROP LONG.
XWOR%:   VAL         0
         SBS                         < SEARCH '0D.
         JNC         CVAD1           < '0D EXISTE.
         LXI         FNBD-NBD*2      < '0D N'EXISTE PAS.
CVAD1:   EQU         $
         PSR         X
         LAI         '04             < CHERCHONS AUSSI '04.
         LXI         0
         SBS                         < SEARCH '04.
         JNC         CVAD7           < '04 EXISTE.
         LXI         FNBD-NBD*2      < '04 N'EXISTE PAS.
CVAD7:   EQU         $
< NOUS ALLONS PRENDRE LE MIN DES INDEX '0D ET '04; SI CE MIN VAUT
< FNBD-NBD*2, ALORS C'EST QUE NI '0D NI '04 N'EXISTENT...
         PLR         A
         CPR         X,A
         JLE         CVAD3
         LR          X,A
CVAD3:   EQU         $
         LR          A,X             < CE SERA FAIT...
         CPI         FNBD-NBD*2
         JE          CVAD2           < NI '0D NI '04, ERREUR.
         JAE         CVAD4           < REPONSE VIDE, 0 SUPPOSE.
< REPONSE NON VIDE, CONVERSION DECIMAL --> BINAIRE.
         LYI         0               < NOMBRE COURANT.
         LRM         W
         WORD        DIX0            < 'W' BASE LES PUISSANCES DE DIX.
CVAD5:   EQU         $
         ADRI        -1,X            < CHIFFRE SUIVANT (DE DROITE A GAUCHE).
         LBY         &AXNBD          < CRACTERE COURANT.
         ADRI        -"0",A
         JAL         CVAD2           < ERREUR.
         CPI         9
         JG          CVAD2           < ERREUR.
         MP          0,W             < CHIFFRE COURANT * 10 PUISSANCE COURANTE.
         ADR         B,Y             < NOUVEAU NOMBRE COURANT.
         ADRI        1,W             < PISSANCE DE DIX SUIVANTE.
         CPZR        X
         JG          CVAD5           < AU SUIVANT.
         LR          Y,A             < 'A' = NOMBRE EN BINAIRE.
CVAD4:   EQU         $
         LBI         0               < OK.
         JMP         CVAD6
CVAD2:   EQU         $
         LBI         1               < ERREUR.
CVAD6:   EQU         $
         CPZR        B               < POUR TEST AU RETOUR.
         PLR         B,X,Y,W         < RESTAURATIONS.
         RSR
         PAGE
QREPN:   EQU         $
<
<        E N V O I   Q U E S T I O N   E T   D E M A N D E   V A L I D A T I O N
<
<        E T   C O N V E R S I O N   D E   L A   R E P O N S E   Q U I
<
<        D O I T   E T R E   U N   N O M B R E   D E C I M A L.
<
<        ARGUMENT:
<                    'A' = ARGUMENT D'APPEL POUR LE S/P 'ENVOI'.
<
<        RESULTAT:
<                    'A' = NOMBRE VALIDE, CONVERTI EN BINAIRE.
<
         PSR         X,Y             < SAUVEGARDES.
<
         LR          A,Y             < SAVE ARGUMENT D'APPEL S/P ENVOI.
QREPN1:  EQU         $
         BSR         AENVOI          < ENVOI QUESTION.
         LAD         DMNBD           < LECTURE REPONSE (NB DECIMAL).
         SVC         0
         LRM         A               < ADRESSE ZONE REPONSE.
         WORD        NBD
         BSR         ACVAD           < CONVERSION EN BINAIRE DANS 'A'.
         JE          QREPN2          < REPONSE CORRECTE (CONVERSION OK).
         LR          Y,A             < REPONSE INCORRECTE, RECOMMENCER...
         JMP         QREPN1
QREPN2:  EQU         $
         PLR         X,Y             < RESTAURATIONS.
         RSR
         PAGE
QREP:    EQU         $
<
<        E N V O I   Q U E S T I O N   E T   D E M A N D E   R E P O N S E
<
<                      LA REPONSE EST DE 1 CARACTERE (PAR EXEMPLE
<                    OUI/NON).
<
<        ARGUMENT:
<                    'A' = ARGUMENT D'APPEL DU S/P ENVOI POUR
<                          POSER UNE QUESTION.
<
<        RESULTAT:
<                    'A' ( 8-15 ) = REPONSE.
<
         PSR         X
         BSR         AENVOI          < ENVOI QUESTION
         LAD         DMREP           < DEMANDE REPONSE
         SVC         0
         LBY         REP             < CHARGEMENT REPONSE DANS 'A'.
         PLR         X
         RSR
         PAGE
<
<        CONVERSION EN BINAIRE D'UN NOMBRE HEXADECIMAL SAISI
<        EN ASCI (PAR EXEMPLE, NUMERO DE SECTEUR)
<
<        ARGUMENTS:
<                    'A' = ADRESSE OCTET DES 4 CARACTERES ASCI
<
<        RESULTAT:
<                    'A' = NOMBRE EN BINAIRE, A VALIDER EN FAISANT AU RETOUR:
<                                         JE     OK         OU
<                                         JNE    ERREUR
<
CONVH:   EQU         $
         PSR         B,X,Y,W         < SAUVEGARDES
         LR          A,Y             < Y = ADRESSE CARACTERE EN COURS
         LXI         4               < INIT COUNT
CONVH1:  EQU         $
         LR          X,W             < SAUVEGARDE COUNT
         LR          Y,X             < INDEX CARACTERE
         LBY         &AXTRAV         < CARACTERE
         CPI         "0"
         JL          CONVH3          < ERREUR
         CPI         "9"
         JLE         CONVH2
         CPI         "A"
         JL          CONVH3          < ERREUR
         CPI         "F"
         JG          CONVH3          < ERREUR
         ADRI        -7,A
CONVH2:  EQU         $
         ADRI        -'30,A
         SLLS        12
         SCLD        4               < CHIFFRE HEXA DANS 'B'
         ADRI        1,Y             < CARACTERE SUIVANT
         LR          W,X             < RESTAURATION COUNT
         JDX         CONVH1          < AU SUIVANT
<
         SLLD        16              < CONVERSION OK
         JMP         CONVH9
<
CONVH3:  EQU         $
         LBI         1               < ERREUR
CONVH9:  EQU         $
         CPZR        B               < POUR TEST AU RETOUR.
         PLR         B,X,Y,W         < RESTAURATIONS
         RSR
XDOL1:   VAL         $-ZERO
         IF          FIMAG-ZERO-XDOL1,,,XWOR%
         IF          E R R E U R   (RECOUVREMENT TROP LONG).
XWOR%:   VAL         0
         $EQU        ZERO+XDOL2
         PAGE
CALCUL:  EQU         $
<
<        C A L C U L S   D E S   V A L E U R S   D E   U   A
<
<        L ' E T A P E   C O U R A N T E   ' E T A P E C '.
<
         LA          ETAPEC
         JAG         $+2
         ACTD
         CPI         1
         JE          CAL1
         CPZ         IMETH           < TEST METHODE.
         JGE         $+2
         BSR         ASP1SM          < SAUTE-MOUTON.
<
< ETAPE 2 ET SUIVANTES : IL FAUT ECRASER DANS 'TABLO' LES RESULTATS DE L'ETAPE
< N-2 PAR CEUX DE L'ETAPE N-1, DE TELLE FACON QUE 'TABLO' NE CONTIENNE
< JAMAIS DE RESULTATS PLUS ANCIENS QUE CEUX DE L'ETAPE N-1.
<
         LRM         B
         WORD        TABLO           < ZONE RECEPTRICE ( A ECRASER...).
<
         LA          ETAPEC
         ADRI        -1,A
         SLLS        1
         AD          NBVU0
         SLLS        1
         LR          A,X             < LONGUEUR MOTS A TRANSFERER (LONGUEUR
                                     < MOTS DES RESULTATS DE L'ETAPE (N-1).
<
         ADRI        -2*LNF,A
         ADR         B,A             < ADRESSE ZONE EMETTRICE (RESULTATS DE
                                     < L'ETAPE (N-1).
         BSR         AMOVE           < MOVE "MANUEL" ! (A CAUSE DES
                                     < RECOUVREMENTS!).
         CPZ         IMETH           < TEST METHODE.
         JGE         $+2
         BSR         ASP2SM          < SAUTE-MOUTON.
CAL1:    EQU         $
         LA          ETAPEC
         ADRI        -1,A
         SLLS        1
         AD          NBVU0
         SLLS        1
         LRM         W
         WORD        TABLO
         ADR         A,W             < 'W' = ADRESSE DE STOCKAGE DANS 'TABLO'
                                     < DU PREMIER RESULTAT U(J,N) DE L'ETAPE
                                     < COURANTE N ('ETAPEC').
         LR          W,A
         CP          AFTABL          < TEST DEPASSEMENT DU TABLEAU.
         JL          CAL7
         LAI         MESPM-M2        < ESPACE MEMOIRE INSUFFISANT.
         BSR         AENVOI
         WORD        '1E16
CAL7:    EQU         $
         LAD         -LNF,W
         STA         ASUP            < ADRESSE SUPERIEURE DES RESULTATS DE
                                     < L'ETAPE (N-1).
<
         LRM         L               < POUR ACCEDER AU RESULTATS DE L'ETAPE
         WORD        TABLO-LNF       < (N-1).
         LA          ETAPEC
         SLLS        1
         AD          NBVU0
         LR          A,X             < NOMBRE DE RESULTATS A CALCULER A
                                     < L'ETAPE COURANTE.
CAL2:    EQU         $
         CPZ         IMETH           < TEST METHODE.
         JGE         CAL21
         FLD         0,W             < C'EST SAUTE-MOUTON, SAUVER U(J,(N-2)).
         CPZ         IMODSM
         JE          CAL23
         FLD         &TRAV5          < MODE PERTURBATION...
CAL23:   EQU         $
         FST         FTRAV4
CAL21:   EQU         $
         LAD         -LNF,L          < ADRESSE DE L'ELEMENT U((J-1),(N-1)).
         CP          AINF            < VALIDATION.
         JGE         CAL3
         FLD         ZEROF           < INEXISATNT, DONC ON PREND ZERO.
         JMP         CAL4
CAL3:    EQU         $
         FLD         -LNF,L          < U((J-1),(N-1)).
CAL4:    EQU         $
         FMP         CM1
         FST         0,W             < COEFM1 * U((J-1),(N-1)).
<
         LAD         0,L             < ADRESSE ELEMENT U(J,(N-1)).
         CP          ASUP
         JG          CAL9
         CP          AINF
         JL          CAL9
         FLD         0,L             < L'ELEMENT EXISTE.
         JMP         CALA
CAL9:    EQU         $
         FLD         ZEROF           < ELEMENT INEXISTANT, PRENDRE 0.
CALA:    EQU         $
         CPZ         IMETH           < TEST METHODE.
         JGE         CAL22
         PSR         A               < C'EST SAUTE-MOUTON.
         LA          ETAPEC
         CPI         2               < TEST NUMERO ETAPE COURANTE.
         PLR         A
         JL          CAL22           < ON FAIT ENCORE COMME SI LAX-WENDROFF...
         FLD         FTRAV4          < PRENDRE U(J,(N-2)).
CAL22:   EQU         $
         FMP         C0              < COEF 0 * U(J,(N-1)) OU, SI SAUTE-
                                     < MOUTON : C0 * U(J,(N-2)).
         FAD         0,W
         FST         0,W             < CUMUL.
         LAD         LNF,L           < ADRESSE DE L'ELEMENT U((J+1),(N-1)).
         CP          ASUP            < VALIDATION.
         JLE         CAL5
         FLD         ZEROF           < INEXISTANT, DONC ON PREND ZERO.
         JMP         CAL6
CAL5:    EQU         $
         FLD         LNF,L           < U((J+1),(N-1)).
CAL6:    EQU         $
         FMP         CP1             < COEFP1 * U((J+1),(N-1)).
         FAD         0,W
         FST         0,W             < U (J,N).
<
         ADRI        LNF,W           < SUIVANT ...
         ADRI        LNF,L           < SUIVANT ...
         LR          W,A
         CP          AFTABL          < TEST DEPASSEMENT DU TABLEAU.
         JL          CAL8
         LAI         MESPM-M2        < ESPACE MEMOIRE INSUFFISANT.
         BSR         AENVOI
         WORD        '1E16
CAL8:    EQU         $
< ICI, SI L'ON EST EN MODE SAUTE-MOUTON-PERTURBATION ET QUE ETAPE COURANTE
< EST >= 2, ALORS ON CALCULE ET UN RAJOUTE A U(J,N) LE TERME DE PERTURBATION
< QUI DOIT AVOIR POUR EFFET D'ADOUCIR LES OSCILLATIONS...
         CPZ         IMODSM
         JE          CAL81
         LA          ETAPEC
         CPI         2
         JL          CAL81
         PSR         W               < SAVE W COURANT.
         LA          TRAV5
         LR          A,W             < ADRESSE DE U(J,(N-2)).
         ADRI        LNF,A           < CE SERA FAIT...
         STA         TRAV5
         CPZ         IMODSM
         JL          CAL82
< MODE PERTURBATION2.
         FLD         FDEUX
         FMP         0,W
         FNEG
         FAD         -LNF,W
         FAD         LNF,W
         FMP         PERT
         JMP         CAL83
CAL82:   EQU         $
< MODE PERTURBATION4.
         FLD         -LNF,W
         FAD         LNF,W
         FMP         FQUATR
         FST         FTRAV4
         FLD         FSIX
         FMP         0,W
         FSB         FTRAV4
         FAD         LNF*2,W
         FAD         -LNF*2,W
         FMP         PERT
CAL83:   EQU         $
         PLR         W               < RESTAURATION W.
         FAD         -LNF,W          < ET MISE A JOUR DE U(J,N)...
         FST         -LNF,W          < ... SACHANT QUE 'W' AVAIT DEJA ETE
                                     < INCREMENTE.
CAL81:   EQU         $
         JDX         CAL2            < SUIVANT ...
<
< CALCUL DE LA TRANSLATION 'TXOBS' (LIEE AU DEPLACEMENT DE L'OBSERVATEUR).
         FLD         ZEROF           < 0 A PRIORI.
         CPZ         IOBSC           < OPTION ACTIVE?
         JE          VIS7
         LA          ETAPEC
         FLT
         FMP         DELTAT
         FNEG
VIS7:    EQU         $
         FST         TXOBS
         RSR
         PAGE
SP1SM:   EQU         $
<
<        S A U T E - M O U T O N   S / P  1.
<
<          BASCULEMENT EVENTUEL DES COEFFICIENTS (LAX-WENDROFF --> SAUTE-M),
<        ET PROTECTION DES RESULTATS DE L'ETAPE N-2.
<
<        ARGUMENT:
<                    'A' = ETAPE COURANTE (DE PLUS, 'A' > 1 !!!!).
<
<        ATTENTION:
<                    SI METHODE SAUTE-MOUTON-PERTURBATION, ALORS ON PROTEGE
<                    LES RESULTATS DE L'ETAPE (N-2) UN PEU PLUS LOIN, ET
<                    ENCADRES DE SUFFISAMMENT DE ZEROS.
<
         CPI         2
         JG          SP1SM1
< ETAPE 2, BASCULER SUR LES COEFFICIENTS SAUTE-MOUTON.
         FLD         SM0
         FST         C0
         FLD         SMM1
         FST         CM1
         FLD         SMP1
         FST         CP1
SP1SM1:  EQU         $
< LONGUEUR MOTS A PROTEGER.
         LA          ETAPEC
         ADRI        -2,A
         SLLS        1
         AD          NBVU0
         SLLS        1               < 2((ETAPEC-2)*2+NBVU0).
         LR          A,X             < 'X' = LONGUEUR.
         STX         TRAV3           < POUR TOUT A L'HEURE...
< ADRESSES EMETTRICE ET RECEPTRICE.
         LRM         B
         WORD        TABLO
<
         LA          ETAPEC
         SLLS        1
         ADRI        -3,A
         AD          NBVU0
         SLLS        2               < 4(2*ETAPEC-3+NBVU0).
         ADR         B,A             < ADRESSE DE SAUVEGARDE.
         XR          A,B             < 'A' = EMETTRICE, 'B' = RECEPTRICE.
         STB         TRAV2           < POUR TOUT A L'HEURE...
         CPZ         IMODSM
         JE          SP1SM2
< MODE SATUTE-MOUTON-PERTURBATION.
         ADRI        4*LNF,B         < SAUVER L'ETAPE (N-2) PLUS LOIN...
         LR          B,W
         PSR         A
         FLD         ZEROF
         LXI         4               < METTRE 4 ZEROS FLOTTANTS.
SP1SM3:  EQU         $
         FST         0,W
         ADRI        LNF,W
         JDX         SP1SM3
<
         PLR         A               < ORIGINE.
         LR          W,B             < DESTINATION.
         LX          TRAV3           < LONGUEUR.
         MOVE
         ADRI        -2*LNF,W
         LR          W,A
         STA         TRAV5           < POUR LES CALCULS.
         LR          B,A
         AD          TRAV3
         LR          A,W
         FLD         ZEROF
         LXI         4               < METTRE 4 ZEROS FLOTTANTS EN QUEUE.
SP1SM4:  EQU         $
         FST         0,W
         ADRI        LNF,W
         JDX         SP1SM4
         JMP         SP1SMF
SP1SM2:  EQU         $
         MOVE                        < PROTECTION. SI L'ON TRAPPE, TANT PIS.
SP1SMF:  EQU         $
         RSR
<
<
SP2SM:   EQU         $
<
<        S A U T E - M O U T O N   S / P  2.
<
<          PLACER LES RESULTATS DE ETAPE N-2 ENCADRES A GAUCHE ET A DROITE
<        PAR DEUX FOIS DEUX NOMBRE NULS, A L'EMPLACEMENT DE TABLO DESTINE A
<        RECEVOIR LES RESULTATS DE L'ETAPE COURANTE.
<
<        ARGUMENTS:
<                    - 'A' + 2*LNF = ADRESSE IMPLANTATION RESULT. ETAPE COURANTE
<                    - 'TRAV2' = ADRESSE ZONE DE SAUVEGARDE ETAPE N-2.
<                    - 'TRAV3' = LONGUEUR DE CETTE ZONE DE SAUVEGARDE.
<
<        ATTENTION:
<                    SI SAUTE-MOUTON-PERTURBATION, NE RIEN FAIRE DANS CE S/P.
<
         CPZ         IMODSM
         JNE         SP2SMF
         ADRI        2*LNF,A
         PSR         A               < ADRESSE RESULT. ETAPE COURANTE.
         LR          A,W
         FLD         ZEROF           < METTRE 0.0, 0.0
         FST         0,W
         ADRI        LNF,W
         FST         0,W
         PLR         B
         ADRI        2*LNF,B         < ADRESSE ZONE RECEPTRICE.
         LA          TRAV2           < ADRESSE ZONE EMETTRICE.
         LX          TRAV3           < LONGUEUR.
         BSR         AMOVE           < MOVE "MANUEL" (RECOUVREMENTS !).
         LR          B,W
         ADR         X,W             < METTRE 0.0, 0.0
         FLD         ZEROF
         FST         0,W
         ADRI        LNF,W
         FST         0,W
SP2SMF:  EQU         $
         RSR
         PAGE
VISUAL:  EQU         $
<
<        V I S U A L I S A T I O N   G R A P H I Q U E
<
<        ( E T   E V E N T U E L L E M E N T   V I D E O )
<
<        D E S   R E S U L T A T S   D E   L ' E T A P E   C O U R A N T E.
<
< FAUT-IL VISUALISER ?
         CPZ         ISORVI
         JNE         VIS4            < AU MOINS VISUALISATION GRAPHIQUE.
         CPZ         ISORTV
         JE          VIS3            < NI GRAPHIQUE NI TV !!!
VIS4:    EQU         $
< FAUT-IL VISUALISER L'ETAPE COURANTE ?
         LAI         0
         LB          ETAPEC
         DV          NETAP
         CPZR        B               < RESTE NUL ?
         JNE         VIS3            < SI NON, PAS DE VISUALISATION.
         CPZ         IENV            < TEST MODE "ENVELOPPE".
         JE          VIS5
         LAI         0               < FAUT-IL GENERER CE SIGNAL POUR
                                     < L'ENVELOPPE ?
         LB          ETAPEC
         DV          NBENV
         CPZR        B
         JNE         VIS3            < NE PAS RETENIR CE SIGNAL.
< MODE ENVELOPPE, IL FAUT RELIRE L'IMAGE CONTENANT LES SIGNAUX DEJA GENERES
< POUR Y AJOUTER LE SIGNAL COURANT.
         LB          COUL
         SBT         16+9            < 'INPUT'.
         STB         COUL
         LAD         DMDIFF          < LECTURE IMAGE.
         BSR         ADIFF
         RBT         16+9            < 'OUTPUT'.
         STB         COUL
         JMP         VIS6            < RETENIR CE SIGNAL.
VIS5:    EQU         $
< FAUT-IL RAZER ?
         CPZ         IRAZ
         JE          $+2
         BSR         ARAZ            < OUI.
< CALCUL X COURANT.
VIS6:    EQU         $
         LA          ETAPEC
         FLT
         FMP         DELTAX
         FST         X
         FLD         XINIT           < X INITIAL.
         FSB         X               < X COURANT = X INITIAL - ( ETAPE
                                     < COURANTE * DELTAX ).
         FST         X               < X COURANT.
< NOMBRE DE POINTS A VISUALISER.
         LA          ETAPEC
         SLLS        1
         AD          NBVU0           < NB DE POINTS A VISUALISER =
                                     < ETAPE COURANTE * 2 + NB DE VALEURS
                                     < DE U EN ZERO.
         LR          A,X             < NOMBRE DE POINTS A VISUALISER.
< POINT INITIAL.
         FLD         ZEROF
         FST         Y               < Y = 0 ...
                                     < ... ET X = X COURANT.
         BSR         ATRANS          < TRANSFORMATION DE (X,Y) EN COORDONNEES
                                     < GRAPHIQUES.
<
         LY          TYPU            < "FRONT MONTANT" NON ENCORE TRACE (SI
                                     < TYPE DE SIGNAL = "UNTE" OU "UNITE1").
         LRM         W
         WORD        TABLO           < ADRESSE DU PREMIER Y A AFFICHER SI
                                     < ETAPE COURANTE = 0.
         CPZ         ETAPEC
         JE          VIS1
         LA          ETAPEC
         ADRI        -1,A
         SLLS        1
         AD          NBVU0
         SLLS        1
         ADR         A,W             < ADRESSE DU PREMIER Y A AFFICHER SI
                                     < ETAPE COURANTE > 0.
VIS1:    EQU         $               < BOUCLE DE TRACE.
         FLD         0,W
         FST         Y               < Y COURANT.
<
         CPZR        Y
         JNE         VIS2
< FRONT MONTANT NON ENCORE TRACE.
         FCAZ                        < Y COURANT NUL ?
         JV          VIS2            < OUI, RIEN A FAIRE.
         FST         TRAV            < SAVE Y COURANT.
         FLD         ZEROF
         FST         Y               < Y COURANT RECOIT 0.
         BSR         ATRANS          < TRANSFORMATION DE  (X,Y) EN
                                     < COORDONNEES GRAPHIQUES.
         BSR         ATRACE          < ET TRACE.
         FLD         TRAV
         FST         Y               < RESTAURATION Y COURANT.
         ADRI        1,Y             < FRONT MONTANT TRACE.
VIS2:    EQU         $
         BSR         ATRANS          < TRANSFORMATION (X,Y) EN COORDONNEES
                                     < GRAPHIQUES.
         BSR         ATRACE          < TRACE GRAPHIQUE (ET VIDEO EVENTUEL).
         ADRI        LNF,W           < ADRESSE Y SUIVANT.
         FLD         X
         FAD         DELTAX
         FST         X               < NOUVEL X COURANT.
         JDX         VIS1
< POINT FINAL POUR LE "FRONT DESCENDANT".
         FLD         ZEROF
         FST         Y
         FLD         X
         FSB         DELTAX          < ON A INCREMENTE X UNE FOIS DE TROP.
         FST         X
         BSR         ATRANS
         BSR         ATRACE
< VISUALISER L'IMAGE RESIDENTE OBTENUE:
         CPZ         ISORTV
         JE          VIS3
         LAD         DMDIFF          < DIFFUSION.
         BSR         ADIFF
<
VIS3:    EQU         $
         RSR
         PAGE
SUPER:   EQU         $
<
<        S U P E R P O S I T I O N   D U   S I G N A L   I N I T I A L
<
<        A U   S I G N A L   C O U R A N T.
<
<                      CE SIGNAL SERA ENVOYE (SI TV) SUR LA COULEUR 'ISUPER'.
<                    ON VA LE GENERER EN UTILISANT LE S/P 'VISUAL' A QUI ON VA
<                    DEVOIR FAIRE CROIRE UN TAS DE CHOSES, MAIS POUR LA BONNE
<                    CAUSE....
         CPZ         ISUPER
         JE          SUPFIN
< FAUT-IL TRACER A CETTE ETAPE ?
         LAI         0
         LB          ETAPEC
         DV          NETAP
         CPZR        B
         JNE         SUPFIN          < NON.
< ECHANGER LES VALEURS INITIALES AVEC CELLES DU DEBUT DE TABLO.
         LA          NBVU0
         SLLS        1
         LR          A,X             < LONGUEUR.
         LRM         A,B
         WORD        VINIT           < VALEURS INITIALES.
         WORD        TABLO           < TABLEAU.
         PSR         A,B,X           < POUR TOUT A L'HEURE.
         BSR         AECH            < ECHANGE...
         FLD         XINIT           < SAUVER 'XINIT',
         PSR         A,B             < ET VOILA...
         FST         X
         LA          ETAPEC          < ET LE REMPLACER PAR UN FAUX!
         FLT
         FMP         DELTAT
         FAD         X
         FST         XINIT           < ET VOILA...
<
         LA          ETAPEC          < SAUVER LE NUMERO D'ETAPE COURANTE,
         LB          COUL            < LA COULEUR COURANTE,
         LX          IRAZ            < L'INDICATEUR DE RAZ,
         PSR         A,B,X
         STZ         ETAPEC          < ETAPE 0 !
         LA          CSUPER          < REMPLACER COULEUR,
         STA         COUL
< FAIRE CROIRE QUE 'IENV' = 0.
         LA          IENV
         STZ         IENV
         STA         ITRAV
         STZ         IRAZ
         CPZ         ISORTV
         JE          SUP1            < PAS DE TV, PAS DE RAZ.
         IC          IRAZ            < TV, DONC RAZ.
SUP1:    EQU         $
< APPELONS MAINTENANT 'VISUAL' !
         BSR         AVISUA
<
< ET RESTAURONS...
<
         LA          ITRAV
         STA         IENV            < RESTAURATION DE 'IENV'.
         PLR         A,B,X
         STA         ETAPEC
         STB         COUL
         STX         IRAZ
         PLR         A,B
         FST         XINIT
         PLR         A,B,X           < POUR NOUVEL ECHANGE...
         BSR         AECH            < ET VOILA.
SUPFIN:  EQU         $
         RSR
         PAGE
ECH:     EQU         $
<
<        E C H A N G E   D E   D E U X   Z O N E S   M E M O I R E.
<
<        ARGUMENTS:
<                    - 'A' = ADRESSE ZONE 1.
<                    - 'B' = ADRESSE ZONE 2.
<                    - 'X' = LONGUEUR MOTS.
<
         PSR         A,B,X
         PSR         L,W
         LR          A,L
         LR          B,W
ECH1:    EQU         $
         LA          0,L
         XM          0,W
         STA         0,L
         ADRI        1,W
         ADRI        1,L
         JDX         ECH1
         PLR         L,W
         PLR         A,B,X
         RSR
         PAGE
TRANS:   EQU         $
<
<        T R A N S F O R M A T I O N   D E   ( X , Y )   F L O T T A N T S
<
<        E N   C O O R D O N N E E S   G R A P H I Q U E S.
<
<        ARGUMENTS:
<                    - X ET Y DU COMMON.
<                    - MULX, MULY, TX, TY.
<
<        RESULTATS:
<                    - X ET Y INCHANGES,
<                    - DANS LA DEMANDE GRAPHIQUE, (X2,Y2) --> (X1,Y1),
<                      (X2,Y2) <-- (X,Y) TRANSFORMES.
<                    - 'A' ET 'B' DETRUITS.
<
         LA          X2
         STA         X1
         LA          Y2
         STA         Y1
<
         FLD         X
         FAD         TXOBS           < TRANSLATION LIEE A LA VITESSE DE L'OBSER-
                                     < VATEUR.
         FMP         MULX
         FAD         TX
         BSR         AFIX
         STA         X2
<
         FLD         Y
         FMP         MULY
         FAD         TY
         BSR         AFIX
         STA         Y2
<
         RSR
<
FIX:     EQU         $
<
<        A R R O N D I   E T   F I X   D ' U N   N O M B R E   F L O T T A N T.
         FAD         UNDEMI
         FIX
         RSR
         PAGE
TRACE:   EQU         $
<
<        T R A C E   G R A P H I Q E   E V E N T U E L   E T   V I D E O
<
<        E V E N T U E L   D ' U N   S E G M E N T.
<
         PSR         A,B,X,W
<
         LRM         A,B,X
         WORD        COORD           < COORDONNEES GRAPHIQUES.
         WORD        YXV             < COORDONNEES VIDEO.
         WORD        4
         MOVE
<
         CPZ         ISORVI
         JNE         TRACE4          < TRACE GRAPHIQUE DEMANDE.
         CPZ         ISORTV
         JE          TRACE1          < NI GRAPHIQUE, NI TV.
< TRACE VIDEO SEUL, PAS DE "FILTRAGE" DES COORDONNEES.
TRACE2:  EQU         $
         LAD         DMTRV           < TRACE VIDEO.
         SVC         0
         JE          $+2
         WORD        '1E16
         JMP         TRACE1
< TRACE GRAPHIQUE ET EVENTUELLEMENT VIDEO.
TRACE4:  EQU         $
         LRM         W               < POUR BASER LES COORDONNEES.
         WORD        COORD
         LXI         4               < FILTRAGE.
TRACE3:  EQU         $
         LA          0,W
         JAL         TRACE1
         CP          C1024
         JGE         TRACE1
         ADRI        1,W
         JDX         TRACE3
< ICI, LES COORDONNEES SONT TOUTES DANS L'ECRAN, DONC ON TRACE.
         LAD         DMOG            < OPEN GRAPHIQUE.
         SVC         0
         JE          $+2
         WORD        '1E16
         LAD         DMTRGR          < TRACE GRAPHIQUE.
         SVC         0
         JE          $+2
         WORD        '1E16
         CPZ         ISORTV          < TEST TRACE VIDEO DEMANDE.
         JNE         TRACE2          < TRACE GRAPHIQUE DEMANDE.
TRACE1:  EQU         $
         PLR         A,B,X,W
         RSR
         PAGE
CATAL:   EQU         $
<
<        C A T A L O G A G E   D E   L ' I M A G E   C O U R A N T E.
<
         CPZ         ICATAL          < CATALOGAGE DEMANDE ?
         JE          CATFIN          < NON.
< ETAPE A RETENIR ?
         LAI         0
         LB          ETAPEC
         DV          NETAP
         CPZR        B
         JNE         CATFIN
< FAUT-IL AUSSI CATALOGUER L'IMAGE SUPERPOSEE ?
         CPZ         ICATS
         JNE         CATAL2          < OUI.
         BSR         ARAZ            < RAZER L'IMAGE SUPERPOSEE (EVENTULLE).
         LB          COUL
         LA          CSUPER          < COULEUR SUPERPOSITION.
         STA         DMDIFF+3
         LAD         DMDIFF
         BSR         ADIFF
         STB         COUL
CATAL2:  EQU         $
<
< CATALOGUER LES IMAGES R ET V DE LA CDAI EN ECRITURE DIRECTE DKU.
<
CATAL1:  EQU         $
         LAD         DMDIR
         SVC         0
         JE          $+2
         ACTD
         BSR         ACOMP           < COMPARAISON STACKS R ET V :: IMAGE DKU,
         JNE         CATAL1          < SI DIFFERENTES, REECRITURE SUR DKU.
         LAI         '17             < ON N'UTILISE QUE '17 DES 32
                                     < Q-SECTEURS NECESSAIRES A UNE IMAGE 12K.
         AD          DMDIR+3         < PROGRESSION ADRESSE SECTEUR.
         STA         DMDIR+3
         SLRS        12
         CPI         VALIDA          < VALIDATION.
         JGE         $+2
         ACTD
         LAI         MIMCR2-M2       < MESSAGE "IMAGE CREEE EN ..."
         BSR         AENVOI
         LRM         Y               < POUR EDITER LE NUMERO IMAGE
         WORD        MNIMC-ZERO*2+2  < COURANTE.
         LA          NIMC            < NUMERO IMAGE COURANTE.
         BSR         ACVDA           < EDITION.
         LAI         MNIMC-M2        < ET ENVOI.
         BSR         AENVOI
         IC          NIMC            < NOUVEAU NUMERO IMAGE COURANTE.
CATFIN:  EQU         $
         RSR
         PAGE
CVDA:    EQU         $
<
<        C O N V E R S I O N - E D I T I O N   E N   D E C I M A L
<
<        F O R M A T   A S C I   D ' U N   N O M B R E   B I N A I R E
<
<        C O N T E N U   D A N S   ' A '.
<
<        ARGUMENTS:
<                    - 'A' = NOMBRE EN BINAIRE.
<                    - 'Y' = ADRESSE OCTET D'EDITION DE CE NOMBRE
<                      ( ZONE D'EDITION DE 6 OCTETS MAXIMUM: 5 CHIFFRES
<                      PLUS LE SIGNE).
<
         PSR         A,B,X,Y         < SAUVEGARDES.
         PSR         W
<
         XR          Y,W
         LYI         " "             < SI POSITIF, PAS DE SIGNE.
         JAGE        $+2
         LYI         "-"             < NOMBRE NEGATIF, SIGNE MOINS.
         XR          Y,W             < 'W' CONTIENT LE SIGNE.
<
         LXI         5               < 5 CHIFFRES MAXI.
CVDA1:   EQU         $
         SARD        16
         DV          DIX
         CPZR        B               < TEST SIGNE DU RSTE.
         JGE         $+2
         NGR         B               < CHIFFRE POSITIF.
         ADRI        "0",B           < POUR EDITION FUTURE.
         PSR         B               < PUSH CHIFFRE COURANT.
         JDX         CVDA1
         PSR         W               < PUSH SIGNE.
<
         LXI         6               < SIGNE PLUS 5 CHIFFRES.
CVDA2:   EQU         $
         LR          X,W             < SAVE COUNT.
         LR          Y,X             < INDEX COURANT.
         PLR         A               < PULL SIGNE / CHIFFRE COURANT.
         STBY        &AXTRAV         < STOCKAGE SIGNE / CHIFFRE.
         LR          W,X             < RECUPERATION COUNT.
         ADRI        1,Y             < INDEX CHIFFRE SUIVANT.
         JDX         CVDA2
<
         PLR         W               < RESTAURATIONS.
         PLR         A,B,X,Y
         RSR
         PAGE
MOVE:    EQU         $
<
<        M O V E   " M A N U E L ".
<
<        ARGUMENTS:
<                    - 'A' = ADRESSE ZONE EMETTRICE.
<                    - 'B' = ADRESSE ZONE RECEPTRICE.
<                    - 'X' = LONGUEUR.
<
         PSR         A,B,X
         PSR         L,W
<
         LR          A,L
         LR          B,W
MOVE1:   EQU         $
         LA          0,L
         STA         0,W
         ADRI        1,L
         ADRI        1,W
         JDX         MOVE1
         PLR         L,W
         PLR         A,B,X
         RSR
RAZ:     EQU         $
<
<        R A Z   E C R A N   G R A P H I Q U E   E T   I M A G E
<
<        R E S I D E N T E   E V E N T U E L L E M E N T.
<
         PSR         A,X
         LAD         DMRAZ           < RAZ ECRAN GRAPHIQUE.
         SVC         0
         CPZ         ISORTV          < OPTION VIDEO ?
         JE          RAZ1
< RAZ IMAGE RESIDENTE.
         LX          ALIMAG          < LONGUEUR MOTS IMAGE.
         STZ         &AXIM
         JDX         $-1
RAZ1:    EQU         $
         PLR         A,X
         RSR
<
RAZ123:  EQU         $
<
<        R A Z   D U   S T A C K   R V B.
<
         CPZ         COUL            < VISUALISATION ACTIVE?
         JE          RZF
         PSR         A,B,X
         LRM         X
         WORD        LIMAG
         STZ         &AXIM
         JDX         $-1
         LXI         3
         LAD         DMDIFF
         LB          COUL            < SAVE COULEUR CHOISIE.
RZ1:     EQU         $
         STX         COUL
         BSR         ADIFF
         JDX         RZ1
         STB         COUL            < RESTAURE COULEUR.
         PLR         A,B,X
RZF:     EQU         $
         RSR
         PAGE
<
<        D I F F U S I O N   O U   R E C U P E R A T I O N   I M A G E.
<
<
<        ARGUMENTS:
<                    -'A' = ADRESSE DEMANDE DE TYPE '8A01.
<                    - 'IMEMH': INDICATEUR MEMOIRE HAUTE/BASSE POUR L'ECHANGE
<                               AVEC LA CDA IMAGE.
<
DIFF:    EQU         $
         PSR         A,B,X,W
         CPZ         IMEMH
         JNE         DIFF1
         SVC         0
         JE          $+2
         WORD        '1E16
         JMP         DIFFF           < C'EST TOUT.
DIFF3:   EQU         $               < ECHANGE AVEC LA CDAI, MOT PAR MOT!
         PSR         X
         LXI         1
OP:      EQU         $
         RCDA
         ADRI        1,A
         ADRI        1,B
         PLR         X
         JDX         DIFF3
         JMP         DIFFF
DIFF1:   EQU         $
         LRM         X               < LONGUEUR ECHANGE.
         WORD        LIMAG
         LR          A,W             < ADRESSE DEMANDE DE TYPE '8A01.
         LA          3,W
         ANDI        '0003           < NUMERO DE LA COMPOSANTE.
         ADRI        -1,A            < NUMERO COMPOSANTE - 1.
         SLLS        12              < ADRESSE RELATIVE COMPOSANTE.
         AD          ALM3IM          < ADRESSE ABSOLUE COMPOSANTE EN CDAI.
         LRM         B               < ADRESSE MEMOIRE IMAGE A ECHANGER.
         WORD        IMAG
         PSR         A
         LA          3,W
         TBT         9               < TEST SENS DE L'ECHANGE.
         JC          DIFF2
< FAIRE UN WCDA.
         LRM         A,W
         WORD        1               < WCDA, SECOND MOT.
         WORD        OP+1
         JMP         DIFF4
< FAIRE UN RCDA.
DIFF2:   EQU         $
         LRM         A,W
         WORD        0               < RCDA, SECOND MOT.
         WORD        OP+1
DIFF4:   EQU         $
         STA         0,W             < OPERATION RCDA / WCDA.
         PLR         A               < ADRESSE CDAI.
         JMP         DIFF3           < ALLONS-Y.
<
DIFFF:   EQU         $
         PLR         A,B,X,W
         RSR
         PAGE
<
<        V A L I D A T I O N   D E   L ' I M A G E   S T O C K E E
<
<        S U R   D K U.
<
<          DANS CE SOUS-PROGRAMME, ON COMPARE L'IMAGE QU'ON VIENT D'ECRIRE SUR
<        DKU EN ECRITURE "DIRECTE" (CF: LA DEMANDE 'DMDIR'), AVEC L'IMAGE
<        PRESENTE DANS LA MEMOIRE D'IMAGE (CDAI(R) ET CDAI(V)).
<          S'IL Y A DIFFERENCE, ON REITERERA L'ECRITURE.
<
<        - ARGUMENTS:
<                    DEMANDE 'DMDIR'.
<                    CDAI(R) ET CDAI(V) (L'IMAGE FAIT 8K MOTS).
<
<        - RESULTAT:
<                    AU RETOUR, FAIRE:
<                        JE          EGALITE
<                        JNE         INEGALITE
<
<        - NOTA:
<                    AU RETOUR, LES STACKS SONT INCHANGES, IL N'EST DONC
<                    PAS NECESSAIRE DE REGENERER L'IMAGE, IL Y A JUSTE A
<                    RELANCER UN ORDRE D'ECRITURE SUR DKU.
<
<        -METHODE UTILISEE:
<                    1/ IR (IMAGE RESIDENTE) <-- CDAI(R),
<                       CDAI(B) <-- CDAI(V).
<                    2/ CDAI(R) ET CDAI(V) <-- IMAGE DKU.
<                    3/ COMPARAISON:
<                       CDAI(R) :: IR, ET CDAI(V) :: CDAI(B).
<                    4/ RESTAURATION:
<                       CDAI(R) <-- IR ET CDAI(V) <-- CDAI(B).
<
COMP:    EQU         $
         PSR         A,B,X,Y
         PSR         L,W
<
< SAUVEGARDE DES CDAI(R) ET CDAI(V).
<
         LAD         DMRV            < IR <-- CDAI(V).
         BSR         ADIFF
         LAD         DMWB            < CDAI(B) <-- IR.
         BSR         ADIFF
         LAD         DMRR            < IR <-- CDAI(R).
         BSR         ADIFF
<
< LECTURE DE L'IMAGE DKU.
<
         LB          DMDIR
         LA          DMDIR
         RBT         14              < PASSAGE EN MODE LECTURE.
         STA         DMDIR
         LAD         DMDIR
         SVC         0
         JE          $+2
         ACTD
         STB         DMDIR           < RETOUR EN MODE ECRITURE.
<
< COMPARAISON IR :: CDAI(R).
<
         LX          ALIMAG          < NOMBRE DE MOTS.
         LRM         W               < ADRESSE PREMIER MOT IR.
         WORD        IMAG
COMP1:   EQU         $
         PSR         X
         LY          0,W             < MOT COURANT IR.
         LXI         1
         LR          W,A
         SB          AIMAG           < RANG DU MOT DANS L'IMAGE.
         SLLS        1
         AD          DMDIR+1         < POUR ETRE DANS LA BONNE ZONE DE CDAI.
         SLRS        1               < ADRESSE MOT EN CDAI.
         LR          W,B             < ADRESSE MOT EN MEMOIRE.
                                     < READ MOT.
         RCDA
         LR          Y,A             < MOT INITIAL.
         CP          0,W             < COMPARAISON.
         STY         0,W             < RESTAURATION DU MOT INITIAL.
         PLR         X
         JNE         COMPNE          < INEGALITE...
         ADRI        1,W             < AU SUIVANT.
         JDX         COMP1
<
         LX          ALIMAG          < NOMBRE DE MOTS.
         LRM         W               < ADRESSE PREMIER MOT.
         WORD        IMAG
COMP2:   EQU         $
         PSR         X
         LY          0,W             < SAUVEGARDE MOT DE IR.
         LXI         1
         LR          W,A
         SB          AIMAG           < RANG DU MOT DANS STACK.
         AD          ALIMAG          < POUR ACCES CDAI(V).
         SLLS        1
         AD          DMDIR+1         < POUR ACCES A LA BONNE ZONE DE CDAI.
         SLRS        1               < ADRESSE CDAI.
         LR          W,B             < ADRESSE MEMOIRE
                                     < ACCES AU MOT DE CDAI(V).
         RCDA
         LA          0,W
         LR          A,L             < MOT DE CDAI(V).
         LXI         1
         LR          W,A
         SB          AIMAG
         AD          ALIMAG          < POUR ACCES AU MOT...
         AD          ALIMAG          < ... DE CDAI(B).
         SLLS        1
         AD          DMDIR+1         < POUR ACCES A LA BONNE ZONE DE CDAI.
         SLRS        1               < ADRESSE CDAI.
                                     < ACCES AU MOT DE CDAI(B).
         RCDA
         LR          L,A             < MOT DE CDAI(V)
         CP          0,W             < COMPARAISON.
         STY         0,W             < RESTAURATION IR.
         PLR         X
         JNE         COMPNE          < INEGALITE...
         ADRI        1,W             < AU SUIVANT.
         JDX         COMP2
<
< EGALITE, Y <-- 0.
<
         LYI         0
         JMP         COMPR           < VERS RETOUR.
<
< INEGALITE, Y <-- 1.
<
COMPNE:  EQU         $
         LYI         1
<
< RESTAURATION DE CDAI(R) ET CDAI(V) (DANS LE CAS D'INEGALITE...).
<
         LAD         DMWR            < CDAI(R) <-- IR.
         BSR         ADIFF
         LAD         DMRB            < IR <-- CDAI(B).
         BSR         ADIFF
         LAD         DMWV            < CDAI(V) <-- IR.
         BSR         ADIFF
         LAI         MINEG-M2        < MESSAGE PREVENANT QU'IL Y A EU INEGALITE.
         BSR         AENVOI
<
< RETOUR...
<
COMPR:   EQU         $
         CPZR        Y               < POUR TEST EN RETOUR.
         PLR         L,W
         PLR         A,B,X,Y
         RSR
         PAGE
ENVOI:   EQU         $
<
<        ENVOI D'UN MESSAGE SUR UL '02
<
<        EN ENTREE
<
<        A=DEPLACEMENT MOTS DU MESSAGE A ENVOYER PAR RAPPORT
<          A M. TOUT MESSAGE EST DELIMITE PAR '00
<
<
<        NOTA: ON A
<                    EN TABLE:     M:    EQU    $+256
<                                  MES1: ASCI   "TEXTE..."
<                                        WORD   0
<                    EN COMMON:    AM:  WORD   M
<                    APPEL PAR:          LAI    MESI-M
<                                        BSR    AENVOI
<
         PSR         A,X
         AD          AM              < @ MOT MESSAGE
         ADR         A,A             < @ OCT MESSAGE
         STA         DMOUT+1
         STZ         DMOUT+2
         LR          A,X
ENV1:    EQU         $               < BOUCLE JUSQU'A DELIM '00
         LBY         &AXTRAV
         JAE         ENV2
         IC          DMOUT+2         < LONGUEUR='+1
         ADRI        1,X
         JMP         ENV1
ENV2:    EQU         $
         LAD         DMOUT
         SVC         0
         PLR         A,X
         RSR
TABLO:   EQU         $               < TABLEAU DES VALEURS CALCULEES.
XWORK:   VAL         TABLO-ZERO
XWORK1:  VAL         '4000-'10-XWORK
FTABLO:  EQU         TABLO+XWORK1
NBNB:    VAL         FTABLO-TABLO/LNF <NOMBRE DE NOMBRES STOCKABLES.
         LST
         NDS
         END



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.