< COMMENTAIRE UNIQUEMENT DESTINE A PERMETTRE L'ACCES PAR 'vi' (introduit le 20061123170648).
INITS:   VAL         0               < INITIALISER LA ZONE SCRATCH DK.
INITS:   VAL         1               < NE PAS INITIALISER ZONE SCRATCH.
         IDP         "' A' (EX-TI SOLAR)"
         IDP         "RELEASE 09 - 10/06/80"
         IDP         "IMAGES VIDEOS"
         PAGE
         EOT         #SIP DEFINITION CMS5#
         PAGE
NMPROC:  VAL         " A"            < NOM DU PROCESSEUR.
         EOT         #SIP DEF PROCESSEUR#
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
         PAGE
<
<
<        I M A G E S   G R A P H I Q U E   E T   V I D E O  :
<
SIZE:    VAL         ITEM2-ZERO
<
< PILE DU PROGRAMME :
<
SSTACK:  VAL         40              < ELLE EST GRANDE A CAUSE DE
                                     < LA DICHOTOMIE...
         EOT         #SIP IMAGE 256#
NOM:     EQU         ITEM1           < NOM EST EN RECOUVREMENT DE
                                     < L'EN-TETE DE L'ITEM1.
IMAG:    EQU         ZERO+PILE+5
EOT:     EQU         IMAG-2
LONG:    EQU         IMAG-1
ENTIM:   EQU         IMAG-LENTIM     < EN-TETE IMAGE (INTERPOLATION VIDEO
                                     < PAR CMS5).
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20:     VAL         1024/DY         < NBRE DE LIGNES/IMAGE.
X21:     VAL         CNMPL*16        < NBRE DE POINTS/LIGNE.
         IF          X20-X21,,X100,
         IF          ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100:    VAL         0
         PAGE
<
<        B R A N C H E   '  A '   D E   S C
<
<          CE SOUS-PROGRAMME DE SC, DIRECTEMENT TIRE DE TI, EST CHARGE
<        PAR CELUI-CI JUSTE DERRIERE L'IMAGE RESIDENTE, ET APPELE PAR UN
<        SIMPLE 'BSR'.
<
<        ARGUMENTS :
<                    - 'B' INDEX NOM IMAGE ARGUMENT.
<                    - 'X' RELAI VERS L'ITEM COURANT.
<                    - 'Y' INDEX CARACTERE COURANT.
<
<        RESULTAT :
<                    - 'A' DE RETOUR = NOUVEL INDEX CARACTERE COURANT.
<
         PROG
         $EQU        ZERO
XWOR%:   VAL         IMAG-ZERO+LIMAG < POUR S'IMPLANTER DERRIRE L'IMAGE
                                     < RESIDENTE.
         DZS         XWOR%
IMPL:    EQU         $               < IMPLANTATION ' A'.
         WORD        NMPROC
         ASCI        "    "
         WORD        '04D0
         WORD        '1F00
         WORD        IMAGE
GOA:     EQU         $               < GO OVERLAY ' A'.
         LRP         L
         BR          -1,L
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
LOCS:    EQU         $
<
<        PARTIE DU LOCAL A SAUVEGARDER A LA PREMIERE ENTREE DANS ' A'
<        ET A REINITIALISER A CHAQUE NOUVELLE ENTREE DANS ' A'.
<
<        CETTE PARTIE VA DE 'LOCS' --> 'FLOCS'.
<
NOMARG:  WORD        -1              < MEMORISE DANS LE CAS D'UN APPEL
                                     < PAR 'SC', L'INDEX EVENTUEL DE
                                     < L'IMAGE APPELEE PRECEDEMMENT
                                     < PAR 'SC' LUI-MEME...
INIT:    WORD        0               < INDICATEUR D'INITIALISATION
                                     < DE L'IMAGE :
                                     < =0 : INITIALISER ,
                                     < #0 : NE PAS INITIALISER.
PATS:    WORD        'FFFF;'FFFF     < LISTE SUR 32 BITS DES SECTEURS
                                     < D'UNE IMAGE SCRATCH A PRENDRE
                                     < EN COMPTE (BIT=0 : SECTEUR
                                     < DE MEME RANG A IGNORER).
MIROR:   WORD        0               < =0 : MIROIR NORMAL LORS DES
                                     <      OPERATIONS LOGIQUES ,
                                     < #0 : &AS DE MIROIR.
INDICS:  WORD        0               < INDICATEUR TEMPORAIRE DE PRISE
                                     < EN COMPTE D'UN SECTEUR ;
                                     < =0 : IGNORER LE SECTEUR ,
                                     < =1 : TRAITER LE SECTEUR COURANT.
BANDE:   WORD        0               < NUMERO DE LA BANDE COURANTE
                                     < QUE L'ON VIRTUALISE.
ATOPO:   WORD        TOPO,X          < RELAI VERS LA TOPOGRAPHIE
                                     < DES BANDES HORIZONTALES.
TOPO:    EQU         $
         BYTE        0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15
         BYTE        16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31
         IF          LIMAG/128-32,,X100,
         IF          ATTENTION : LA TOPOGRAPHIE N'EST PAS ADAPTEE !!!
X100:    VAL         0
XIMAG:   WORD        0               < INDEX DE MODIFICATION DE
                                     < L'IMAGE VIDEO.
MASKX:   WORD        LIMAG-1         < MASQUE DE CALCUL DE XIMAG
                                     < MODULO LIMAG.
SENSX:   WORD        0               < CONTIENT L'INCREMENT (+1,-1)
                                     < DE XIMAG.
SECTX:   WORD        0               < DONNE L'INDEX INITIAL DE PARCOURS
                                     < D'UN SECTEUR D'IMAGE SCRATCH.
                                     < (0 OU 127).
ITEST:   WORD        0               < 0 : TEST SUR VALEUR 0 DES POINTS.
                                     < 1 : TEST SUR VALEUR 1 DES POINTS.
<
< MATRICE DE TRANSFORMATION :
< (INITIALISEE SUR UNE TRANSPOSITION)
<
C256:    WORD        256             < POUR DECONCATENER 2 OCTETS.
XEQUIV:  WORD        0               < CLASSE D'EQUIVALENCE DES X.
YEQUIV:  WORD        0               < CLASSE D'EQUIVALENCE DES Y.
MSX:     WORD        0               < SAVE TEMPORAIRE X DE M(X,Y).
SX:      WORD        0               < COORDONNEE REDUITE X TEMPORAIRE.
RSX:     WORD        0               < RESIDU DE X TEMPORAIRE.
MSY:     WORD        0               < SAVE TEMPORAIRE Y DE M(X,Y).
SY:      WORD        0               < COORDONNEE Y REDUITE TEMPORAIRE.
RSY:     WORD        0               < RESIDU DE Y TEMPORAIRE.
AMAT:    WORD        $,X             < LE RELAI AMAT DE LA MATRICE ,
                                     < DOIT ETRE SUIVI DANS L'ORDRE
                                     < PAR A22,A21,A12,A11.
A22:     WORD        0
A21:     WORD        1
A12:     WORD        1
A11:     WORD        0
SA22:    WORD        0               < VALEUR TEMPORAIRE DE A22.
SA21:    WORD        0               < VALEUR TEMPORAIRE DE A21.
DIAGON:  WORD        1               < #0 : &ARCOURS DIAGONAL DE
                                     < L'IMAGE LORS DE 'T'.
                                     < =0 : PARCOURS ENTIER DE L'IMAGE.
<
< ACCES 'DKU' SOLAR.
<
XALAD1:  VAL         '0E00           < PREMIER 16*Q-SECTEUR ACCESSIBLE,
XALAD2:  VAL         '0F00           < PREMIER 16*Q-SECTEUR INACCESSIBLE,
XDKU:    VAL         4               < DECALAGE DE GENERATION ADRESSES DKU.
STDKU:   WORD        '8A01           < STABILISATION IMAGE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        0               < SELECTION COULEUR.
FLOCS:   EQU         $               < FIN DE LA ZONE DU LOCAL A SAUVEGARDER.
RWDKU:   WORD        '8A00           < ACCES A 'DKU' SUR NVP='8A.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        XALAD1-1>XDKU   < ADRESSE DE L'IMAGE EN ABSOLU.
DMTRAV:  WORD        '8A00           < POUR REINITIALISER 'RWDKU'.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
FDMTRV:  EQU         $
XNQSPI:  VAL         LIMAG+127/128+2/3
INCR:    WORD        LIMAG/128*3/3   < VALEUR IMPLICITE DE L'INCREMENTATION
                                     < AUTOMATIQUE POUR ACCES DKU (MODI-
                                     < FIABLE PAR LA COMMANDE "K").
QC:      WORD        3               < QUANTA COURANT D'ACCES A DKU,
                                     < 3 A PRIORI.
LMSQC:   WORD        3*128           < LONGUEUR MOTS D'UN SECTEUR DKU EN
                                     < QUANTA COURANT (3 A PRIORI).
<
< BUFFERS ET MESSAGES :
<
REP:     WORD        0               < REPONSE UTILISATEUR.
         WORD        0               < (ET FOND DE L'IMAGE)
                                     < (ET NBRE DE POINTS/IMAGE)
CURSOR:  DZS         3               < POUR ENTRER LE CURSEUR GRAPHIQUE:
                                     < OCTET0=CARACTERE DE DEBLOCAGE ,
                                     < MOT1=Y(CURSEUR) ,
                                     < MOT2=X(CURSEUR).
MIT1:    BYTE        7;'6D
         ASCI        "!ITEM1"
MERR:    BYTE        3;'6D;"?";"?"
<
< DEMANDES A CMS4 :
<
DEMOUT:  WORD        '0202           < EMISSION D'UN MESSAGE.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR DU MESSAGE.
OG:      WORD        '0B03           < OG SUR NVP='0B.
CU:      WORD        '0B06           < CU SUR NVP='0B.
         WORD        0               < AMDEM DOIT ETRE NUL !!!
LCU:     WORD        '0B09           < LCU SUR NVP='0B.
         WORD        CURSOR-ZERO*2
         WORD        6
DEMCCI:  WORD        '0001           < RETOUR AU CCI.
SLEEP:   WORD        '0005           < DEMANDE DE TEMPORISATION.
         WORD        0
         WORD        2               < POUR 2 SECONDES ....
SGN:     WORD        '0002           < ACCES SGN POUR LES IMAGES.
         WORD        NOM-ZERO*2
         WORD        IMAG-NOM+LIMAG*2
         WORD        EOT-NOM*2
RDK:     WORD        '0C00           < LECTURE SCRATCH DU DISQUE.
SECT2:   WORD        ZSECT2          < @OCTET DU SECTEUR.
         WORD        256             < 1 SECTEUR=256 OCTETS.
         WORD        0               < @SECTEUR COURANT.
WDK:     WORD        '0C02           < ECRITURE SCRATCH DU DISQUE.
         WORD        ZSECT2
         WORD        256             < 1 SECTEUR=256 OCTETS.
         WORD        0               < NUMERO DU SECTEUR COURANT.
<
< CONSTANTES DE CONVERSION GRAPHIQUE --> VIDEO :
<
X1:      WORD        0               < X 1ER POINT.
Y1:      WORD        0               < X 1ER POINT.
X2:      WORD        0               < X 2EME POINT.
Y2:      WORD        0               < Y 2EME POINT.
X:       WORD        0               < X=(X1+X2)/2.
Y:       WORD        0               < Y=(Y1+Y2)/2.
<
< RELAIS DIVERS :
<
SAVKSC:  DZS         1               < SAVE 'K' DE SC.
SAVKA:   DZS         1               < 'K' DE ' A'.
ASECT:   WORD        SECTOR-1,X      < REALI DE RAZ DU BUFFER SECTEUR.
AIMAG1:  WORD        IMAG,X          < RELAI DE MODIF. DE L'IMAGE VIDEO.
ASECT1:  WORD        SECTOR,X        < RELAI POUR ACCES AU SECTEUR.
AOP:     WORD        OP              < ADRESSE D'1NE INSTRUCTION
                                     < VARIABLE CONTENANT SOIT UN
                                     < 'OR' , SOIT UN 'AND' , SOIT
                                     < ENFIN UN 'EOR'.
AOP2:    WORD        OP2             < REALI VERS L'INSTRUCTION
                                     < VARIABLE DE CHOIX DES COULEURS
                                     < DE L'IMAGE VIDEO COURANTE...
AREP:    WORD        REP,X           < RELAI DE CONVERSION DU FOND.
AEOT:    WORD        EOT             < ADRESSE DE L'EOT A PRIORI.
ALONG:   WORD        LONG            < ADRESSE DE L'INDICATEUR VIDEO.
AI2:     WORD        ITEM2-1,X       < RELAI VERS ITEM2-1 POUR RAZ.
ABUF:    WORD        BUFFER,X        < RELAI D'ACCES AU BUFFER CARACTERE
AIMAG:   WORD        IMAG-1,X        < RELAI D'ACCES A L'IMAGE-1.
ANOM:    WORD        NOM,X           < RELAI D'ACCES AU NOM IMAGE.
AI1:     WORD        ITEM1+LTN,X     < RELAI D'ACCES A L'ITEM1.
AINOM:   WORD        INOM            < RECUPERATION NOM DANS L'ITEM1.
ASIMU:   WORD        SIMU            < RECUPERATION CARACTERE DANS ITEM1
APOINT:  WORD        SET             < ROUTINE D'AFFICHAGE D'UN POINT :
                                     < CONTIENT SET/RESET/INVER SUIVANT
                                     < LE FOND DE L'IMAGE CHOISI.
ASET:    WORD        SET             < ROUTINE D'AFFICHAGE UN POINT.
ARESET:  WORD        RESET           < ROUTINE D'EFFACEMENT UN POINT.
AINVER:  WORD        INVER           < INVERSION VIDEO UN POINT.
ATEST:   WORD        TEST            < TEST D'1N POINT 0/1.
LROUT:   WORD        $+3+1,X;SET;RESET;INVER
AEXIST:  WORD        EXIST           < EXISTENCE ET VALEUR D'UN POINT.
AFILTR:  WORD        FILTR           < MODULE DE FILTRAGE IMAGE.
AVIRT:   WORD        VIRT            < MODULE D'ENTREE TOPOGRAPHIE.
ADEF:    WORD        DEF             < DEFINITION DE LA MATRICE DE
                                     < TRANSFORMATION.
ACOEF:   WORD        COEF            < ENTREE 1 COEEFICIENT MATRICE.
ASEG:    WORD        SEG             < TRACE DU SEGMENT (M1,M2).
ARETSC:  WORD        RETSC           < RETOUR VERS SC.
APRINT:  WORD        PRINT           < ROUTINE D'EMISSION MESSAGE.
ADESIR:  WORD        DESIR           < QUESTION-REPONSE UTILISATEUR.
AHEX:    WORD        HEX             < CONVERSION HEXA --> BINAIRE.
AHEX4:   WORD        HEX4            < ENTREE / CONVERSION DE 4 CHIFFRES HEXA.
AGOSGN:  WORD        GOSGN           < ROUTINE D'ACCES AU SGN.
AE300:   WORD        E300            < INTERROGATION UTILISATEUR.
AFIN:    WORD        E2              < ADRESSE DE FIN DE CONVERSION.
AINTER:  WORD        E410            < 2EME NIVEAU D'INTERROGATION.
AERR:    WORD        ERROR           < ERREUR 2EME NIVEAU INTERRO.
AE770:   WORD        E770            < INTERACTION GRAPHIQUE.
AOPER:   WORD        OPER            < OPERATION LOGIQUES IMAGES.
AIMAG2:  WORD        IMAGE2          < ENTRY POUR CHANGEMENT DE NOM.
<
< SAUVEGARDE/RESTAURATION DE L'EN-TETE ITEM1 :
<
I1:      WORD        ITEM1           < ADRESSE EN-TETE ITEM1.
ASI1:    WORD        SI1             < ADRESSE ZONE DE SAUVEGARDE.
SI1:     DZS         LNOM+2          < ZONE DE SAUVEGARDE.
<
< CONSTANTES :
<
NCP:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES PAR ITEM.
IEG:     WORD        0               < INDEX COURANT DE L'ITEM1.
ALIMAG:  WORD        LIMAG           < NBRE DE MOTS OCCUPES PAR L'IMAGE.
LO3IM:   WORD        LIMAG*2*3       < LONGUEUR OCTETS DE 3 IMAGES.
NMPL:    WORD        CNMPL           < NBRE DE MOTS DE 16 BITS/LIGNE.
NLIG:    WORD        1024/DY-1       < NBRE DE LIGNES D'UNE IMAGE -1.
NPPL:    WORD        CNMPL*16-1      < NBRE DE POINTS/LIGNE-1.
XWOR%1:  VAL         4
TEMPO:   WORD        XWOR%1*2        < TEMPORISATION PAIRE DE CLIGNOT-
                                     < TEMENT DU PSEUDO-CURSEUR TV.
IMAG2:   WORD        IMAG-ZERO*2     < @OCTET DE L'IMAGE VIDEO.
<
< COULEURS SOLAR.
<
MCOOL:   WORD        0               < CUMUL DES ARGUMENTS ENVOYES A 'CU3'.
AMCOOL:  WORD        MCOOL
DEMCU3:  WORD        '8B02           < COMMANDE DES REGISTRES DE COULEUR.
         WORD        MCOOL-ZERO*2
         WORD        2
VALAD1:  WORD        XALAD1          < 'E000 : 1ER SECTEUR ACCESSIBLE,
VALAD2:  WORD        XALAD2          < 'F000 : 1ER SECTEUR INACESSIBLE.
M0FFF:   WORD        '0FFF           < POUR RAZER LES BITS 0,1,2 ET 3.
IPRAP:   WORD        1               < INDICATEUR PREMIER APPEL DE ' A' :
                                     < = 1 : PREMIER APPEL,
                                     < = 0 : SINON.
         PROG
         PAGE
<
<
<        M I S E   D ' U N   B I T   A   1  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
SET:     EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL            < CONVERSION DE L'Y DU POINT EN
                                     < UN NUMERO DE MOT.
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < CALCUL DE X MODULO 16 ;
                                     < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         SBT         0,X             < POSITIONNEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        E F F A C E M E N T   D ' U N   P O I N T  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
RESET:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         RBT         0,X             < EFFACEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        I N V E R S I O N   V I D E O   U N   P O I N T  :
<
<
<        ARGUMENT :
<                    X ET Y CONTIENNENT X ET Y DU POINT A INVERSER.
<                    C=@IMAG (IMAGE VIDEO).
<
<
INVER:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         IBT         0,X             < INVERSION VIDEO DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        T E S T   D ' U N   P O I N T  :
<
<
<        FONCTION DE ITEST :
<                    ITEST=0 : CARY=1 SI POINT=0 ,
<                         =1 : CARY=1 SI POINT=1.
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT ,
<                    C=@IMAG.
<
<
<        RESULTAT :
<                    CARY POISITIONNE PAR LE POINT (0/1) 9
<
<
TEST:    EQU         $
         PSR         B,X,C
         LR          Y,A             < A=COORDONNEE Y DU POINT.
         MP          NMPL
         ADR         B,C
         LR          X,A             < A=COORDONNEE X DU POINT.
         SLRS        4
         ADR         A,C             < C#MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU POINT DANS LE MOT (C)
         LA          0,C
         CPZ         ITEST           < TEST DE LA VALEUR LOGIQUE DU
                                     < POINT.
         JNE         E1022           < CONVENTION NORMALE (1).
         IBT         0,X             < CAS DES CONVENTIONS INVERSEES (1)
E1022:   EQU         $
         TBT         0,X             < TEST DU POINT.
         PLR         B,X,C
         RSR
         PAGE
<
<
<        E X I S T E N C E   E T   V A L E U R   P O I N T  :
<
<
<        ARGUMENT :
<                    X ET Y CONTIENNENT L'X ET L'Y D'UN POINT.
<
<
<        RESULTAT :
<                    A#0 : M(X,Y) N'EXISTE PAS , OU
<                          M(X,Y) EXISTE ET M(X,Y)=0.
<
<
<        A T T E N T I O N  :
<                      LE TEST D'EXISTENCE NE PORTE QUE
<                    SUR LA COORSONNEE Y DU POINT !!!
<
<
EXIST:   EQU         $
         LR          Y,A
         JAL         NEXIST          < M(X,Y) N'EXISTE PAS : A<0#0 !!!
         CP          NLIG
         JG          NEXIST          < M(X,Y) N'EXISTE PAS : A>0#0 !!!
<
< CAS OU LE POINT M(X,Y) EXISTE :
<
         BSR         ATEST           < TEST DE LA VALEUR DE M(X,Y).
         LAI         1
         SBCR        A               < A=0 SI M(X,Y)=1.
NEXIST:  EQU         $
         RSR
         PAGE
<
<
<        A C C E S   C A R A C T E R E   I T E M 1  :
<
<
<        ARGUMENT :
<                    IEG=INDEX COURANT DE L'ITEM1.
<
<
<        A T T E N T I O N  :
<                      SI L'APPEL A EU LIEU PAR 'SC' ,
<                    IL EST POSSIBLE QUE L'ACCES A L'ITEM
<                    AIT LIEU VERS L'ITEM2 , ET NON L'ITEM1 ;
<                    TOUT DEPENDE DE CDRET.
<
<
<        RESULTAT :
<                    A=CARACTERE COURANT DE L'ITEM1 ,
<                    IEG<--(IEG)+1 ,
<                    RETOUR DIRECT EN 'GOGE' SI DEBORDEMENT ITEM1 !!!
<
<
SIMU:    EQU         $
         PSR         X
         LA          IEG             < A=INDEX COURANT DE L'ITEM1.
         CP          NCP             < VALIDATION DE (IEG).
         JGE         SIMUR           < ERREUR : HORS L'ITEM1 ...
         LR          A,X             < OK , X=INDEX COURANT DE L'ITEM1.
         LBY         &AI1            < A=CARACTERE COURANT DE L'ITEM1.
         IC          IEG             < PROGRESSION DE IEG.
         PLR         X
         RSR
<
< ERREUR : HORS L'ITEM1 :
<
SIMUR:   EQU         $
         BR          ARETSC          < RETOUR VERS SC.
<
<
<        A C C E S   A U   N O M   D ' U N E   I M A G E
<                    D A N S   L ' I T E M1  :
<
<
<        RESULTAT :
<                    S'IL N'Y A PAS DE DEBORDEMENT DE L'ITEM1 ,
<                    'NOM' RECOIT LE NOM RECUPERE DANS L'ITEM1
<                    A CONCURRENCE DE '2*LNOM' CARACTERES ,
<                    OU JUSQU'A TROUVER UN ';' , QUI EST ALORS
<                    REMPLACE PAR UN 'EOT'.
<
<
<        A T T E N T I O N  :
<                      LE 'NOM' EST INCHANGE, SI LE
<                    NOM CORANT RECUPERE EST VIDE (';').
<
<
INOM:    EQU         $
         PSR         X,Y             < ON N'EST JAMAIS ASSEZ PRUDENT...
         LXI         2*LNOM          < X=NBRE MAX DE CARACTERES.
         LYI         0               < INDEX COURANT DU NOM.
<
< BOUCLE DE RECUPERATION :
<
INOM1:   EQU         $
         BSR         ASIMU           < A=CARACTERE COURANT DE ITEM1.
         CPI         ";"             < EST-CE LA FIN DE NOM ???
         JNE         INOM2           < NON , ON LE CONSERVE.
         CPZR        Y               < LE NOM RECUPERE EST-IL VIDE ???
         JE          INOM3           < OUI, 'NOM' RESTE ALORS INCHANGE.
         LAI         '04             < OUI , ON LE REMPLACE PAR 'EOT' ,
         LXI         1               < ET ON ARRETE ICI LA BOUCLE ...
INOM2:   EQU         $
         XR          X,Y
         STBY        &ANOM           < RANGEMENT DE (A) DANS NOM.
         ADRI        1,X             < PROGRESSION DE L'INDEX DE NOM.
         XR          X,Y
         JDX         INOM1           < SUITE EVENTUELLE DE LA BOUCLE
                                     < DE RECUPERATION ...
INOM3:   EQU         $               < CAS DES NOMS VIDES.
         PLR         X,Y
         RSR
         PAGE
RETSC:   EQU         $
<
<        R E T O U R   V E R S   S C.
<
<                    (NOTER QU'ON LUI RENVOIE 'A' = NOUVEL INDEX CARACTERE
<                     COURANT).
<
<
< INVALIDATION DE L'ITEM2 EN NE RAZANT QUE
< SON EN-TETE (EN EFFET IL NE FAUT PAS LE
< RAZER LUI-MEME CAR IL PEUT CONTENIR UNE
< BIBLIOTHEQUE APPELEE PAR 'SC'...) :
<
         LXI         LTN             < X=NBRE DE MOTS DE L'EN-TETE.
RAZET:   EQU         $
         STZ         &AI2
         JDX         RAZET
<
< RESTAURATION DE L'EN-TETE DE L'ITEM1 :
<
         LA          ASI1
         LB          I1
         LXI         LNOM+1
         MOVE
<
< RESTAURATION DES REGISTRES.
<
         LA          SAVKA
         LR          A,K             < K DE ' A'.
         PLR         W
         PLR         B,X,Y,C
<
< RESTAURATION DU 'K' DE 'SC'.
<
         LA          SAVKSC
         LR          A,K
<
<        RENVOI DU NOUVEL INDEX CARACTERE COURANT.
<
         LA          IEG
         RSR                         < ET VOILA.
         PAGE
<
<
<        G E N E R A T E U R   S Y N T H E T I Q U E   V I D E O  :
<
<
<        PRINCIPE :
<                      CE PROCESSEUR PERMET A PARTIR DE
<                    COMMANDES CONTENUS DANS L'ITEM1 DE
<                    TRAVAILLER SUR DES IMAGES PRE-CONSTRUITES
<                    OU PAS ...
<                      SI MODCAL#0 : 'TI' EST EN FAIT APPELE
<                    PAR 'SC' QUI LUI DEMANDE AINSI
<                    D'INTERPRETER UNE PARTIE DE SES
<                    COMMANDES.
<                      MODCAL DONNE ALORS L'INDEX INITIAL
<                    DE SIMULATION CARACTERES IEG.
<                      LE BIT0 DE MODCAL INDIQUE ALORS LE
<                    NOM DE L'APPELANT DE SC : 0 APPEL PAR GE ,
<                    1 : APPEL PAR EI ...
<
<
<        ARGUMENTS :
<                    MODCAL=INDEX CARACTERE COURANT ,
<                           BIT0=0 : RETOUR A GE SI ALT-MODE ,
<                           BIT0=1 : RETOUR A EI SI ALT-MODE.
<                    CDRET=RELAI D'ACCES A L'ITEM COURANT.
<                    B=INDEX DE L'IMAGE APPELEE EVENTUELLEMENT
<                      PRECEDEMMENT PAR 'SC', LORS D'UN APPEL
<                      PAR 'SC' (MODCAL#0).
<
<
<        FORMAT D'UNE IMAGE VIDEO SOUS SGN :
<                    MOTS0-9 : NOM DE L'IMAGE VIDEO , TERMINEE
<                              PAR UN 'EOT' S'IL Y A MOINS DE 20
<                              CARACTERES) ,
<                    MOT10 : 'EOT;'00 ,
<                    MOT11 : -3 : IMAGE DIRECTE ,
<                            -2 : IMAGE INVERSEE ,
<                            -1 : IMAGE A FOND HACHURE ,
<                              ON PEUT AINSI DIFFERNCIER
<                            UNE IMAGE VIDEO , D'UNE SIMULATION DE
<                            FLOPPY , MAIS AUSSI POURSUIVRE
<                            ULTERIEUREMENT LA MISE A JOUR D'UNE
<                            IMAGE VIDEO ...
<
<
<        I N I T I A L I S A T I O N  :
<
<
IMAGE:   EQU         $
         LR          K,A             < 'K' DE SC.
         LRM         L,K
         WORD        LOC+'80         < BASE DU LOCAL DE ' A'.
         WORD        STACK-1         < PILE DE ' A'.
<
< SI C'EST LE PREMIER APPEL DE ' A' (CHARGEMENT INITIAL PAR 'SC', IL FAUT
< SAUVER LE LOCAL INITIAL ('LOCS' --> 'FLOCS') DANS LA ZONE DE SAUVEGARDE
< 'LOCBIS';
< SI CE N'EST PAS LE PREMIER APPEL, IL FAUT RESTAURER LA ZONE 'LOCS' --> 'FLOCS'
< INITIALE A PARTIR DE 'LOCBIS'.
<
         PSR         A,B,X
         LRM         A,B,X           < PREPARATION DU MOVE.
         WORD        LOCBIS
         WORD        LOCS
         WORD        FLOCS-LOCS
         CPZ         IPRAP           < TEST PREMIER APPEL.
         STZ         IPRAP           < CE NE LE SERA PLUS.
         JE          IMAGE1
< C'EST LE PREMIER APPEL : SAUVER 'LOCS'  DANS 'LOCBIS'.
         XR          A,B             < MOVE 'LOC' --> 'LOCBIS'.
< SINON, FAIRE 'LOCBIS' --> 'LOCS'.
IMAGE1:  EQU         $
         MOVE                        < ET VOILA...
         PLR         A,B,X
         STA         SAVKSC          < SAVE LE 'K' DE SC.
< SAVE DES AUTRES REGISTRES DE 'SC' DANS LA PILE DE ' A'.
         PSR         B,X,Y,C
         PSR         W
         LR          K,A
         STA         SAVKA           < 'K' DE ' A'.
         LRM         C,W             < INITIALISATION DES BASES.
         WORD        IMAG            < IMAGE.
         WORD        BRANCH          < SANS DOUTE INUTILE.
<
< EXPLOITATION DES ARGUMENTS.
<
         STB         NOMARG          < INDEX NOM IMAGE ARGUMENT EVENTUELLE.
         STX         AI1             < ITEM COURANT.
         STY         IEG             < INDEX CARACTERE COURANT.
<
< SAUVEGARDE DE L'EN-TETE DE ITEM1 :
<
         LB          ASI1
         LA          I1
         LXI         LNOM+1
         MOVE
         CPZ         NOMARG          < Y-A-T'IL UNE IMAGE PRECEDENTE ????
         JL          PASIMA          < NON...
<
< MISE EN PLACE D'UN NOM INITIAL (CAS 'SC') :
<
         LY          IEG             < SAVE IEG DANS Y.
         LA          NOMARG
         STA         IEG             < ET ON FAIT CROIRE QUE L'INDEX
                                     < COURANT POINTE SUR LE NOM DE
                                     < L'IMAGE PRECEDENTE...
         BSR         AINOM           < RECUPERATION DU NOM DE L'IMAGE
                                     < PRECEDENTE.
         STY         IEG             < PUIS, ON RESTAURE IEG...
PASIMA:  EQU         $
         IF          INITS,X100,,X100
<
< INITIALISATION DE LA ZONE SCRATCH DU DISQUE :
<
         LXI         128             < X=128 MOTS=1 SECTEUR.
E830:    EQU         $
         STZ         &ASECT          < RAZ DU BUFFER SECTEUR COURANT.
         JDX         E830
         STZ         WDK+3           < RAZ DU NUMERO DE SECTEUR.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS A INITIALISER.
         LAD         WDK
E831:    EQU         $
         PSR         X               < SAVE LE DECOMPTE DES SECTEURS.
         SVC         0               < INIT. LE SECTEUR COURANT.
         PLR         X
         IC          WDK+3           < PASSAGE AU SECTEUR SUIVANT.
         JDX         E831            < AU SUIVANT SI EXISTE ...
X100:    VAL         0
<
< ENTREE DU NOM DE L'IMAGE :
<
IMAGE2:  EQU         $               < ENTRY POUR CHANGEMENT DE NOM.
                                     < (SUITE A UNE 2EME INTERRO-
                                     < GATION 'N').
         BSR         AINOM           < RECUPERATION DU NOM DE L'2MAGE.
         LAI         '04
         STBY        &AEOT           < MISE D'UN 'EOT' A PRIORI
                                     < TOUT AU BOUT DU NOM.
                                     < (MEME S'IL Y EN A DEJA UN) ...
<
< INTERROGATION DE L'UTILISATEUR :
<
E300:    EQU         $
         STZ         INIT            < REINITIALISATION IMAGE A PRIORI.
         STZ         OG              < LORS DE CHAQUE COMMANDE PRIMAIRE,
                                     < ON INVALIDE AINSI LE CURSEUR
                                     < GRAPHIQUE DE '0B; CELUI-CI PEUT
                                     < ETRE REAUTORISEE PAR LA PRIMITIVE
                                     < 'G' A LA SUITE DE 'M' DANS
                                     < L'ITEM COURANT.
         BSR         ADESIR          < QUESTION-REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    R : ENREGISTREMENT D'UNE IMAGE VIDEO (SUR NVP='0A),
<                        A PARTIR D'UN DESSIN GRAPHIQUE (G2/G3) ,
<                        INITIALISATION DU FOND.
<                    E : IDENTIQUE A 'R' , MIAS SANS INITIALISATION
<                        DU FOND BIEN QU'IL SOIT DEMANDE POUR
<                        INITIALISRR 'APOINT'.
<                        RECUPERATION D'IMAGES PREEXISTANTES.
<                    V : ENREGISTREMENT VIDEO EXTERNE ,
<                    D : AFFICHAGE D'UNE IMAGE VIDEO ,
<                    G : VALIDATION IMAGE SANS LOAD
<                        DANS LE CAS DE L'APPEL PAR 'SC' ,
<                    F : RETOUR A 'GE'.
<
         CPI         "D"
         JE          DESSIN          < DEMANDE D'UNE IMAGE VIDEO.
         CPI         "R"
         JE          RECORD          < ENREGISTREMENT D'UNE IMAGE.
         CPI         "E"
         JE          EDIT            < PRISE EN COMPTE D'UNE IMAGE
                                     < PREEXISTANTE.
         CPI         "F"
         JE          RETSC           < RETOUR A 'SC'.
         CPI         "G"
         JE          E2              < VALIDATION IMAGE SANS LOAD (CF: SC).
E4501:   EQU         $               < ERREUR DE COMMANDE.
<
< ERREUR :
<
E7000:   EQU         $
         LAD         MERR
         BSR         APRINT          < REPONSE INCOMPREHENSIBLE ...
         JMP         E300            < VERS UNE NOUVELLE INTERROGATION.
         PAGE
<
<
<        I M A G E   P R E E X I S T A N T E  :
<
<
EDIT:    EQU         $
         IC          INIT            < INIT#0 : DONC PAS D'ECRASEMENT
                                     < DE L'IMAGE PREEXISTANTE PAR
                                     < LE FOND !!!
<
<
<        E N R E G I S T R E M E N T   D ' U N E   I M A G E  :
<
<
RECORD:  EQU         $
<
< CHOIX DU FOND DE L'IMAGE :
<
<
< CONVERSION HEXADECIMALE --> BINAIRE :
<
         BSR         AHEX4           < ENTREE DE 4 CHIFFRES HEXA.
         JNE         RECORD          < ERREUR DE CARACTERES ...
<
< CHOIX DE LA ROUTINE D'AFFICHAGE DES POINTS :
<
         LB          ASET            < SET A PRIORI.
         JAE         E52             < EFFECTIVEMENT LE FOND EST NOIR.
         LB          ARESET          < RESET A PRIORI.
         CPI         -1
         JE          E52             < EFFECTIVEMENT , LE FOND EST BLAN.
         LB          AINVER          < ET BIEN ON FERA DE L'INVERSION.
E52:     EQU         $
         STB         APOINT          < MISE EN PLACE DU RELAI D'ACCES
                                     < A LA ROUTINE D'AFFICHAGE CHOISIE.
<
< INITIALISATION DE L'IMAGE :
<
CLEAR:   EQU         $
         CPZ         INIT            < DOIT-ON INITIALISER LE FOND ???
         STZ         INIT            < REINITIALISATION INIT A PRIORI.
         JNE         E400            < NON , PAS D'INITIALISATION ;
                                     < C'EST UN CHANGEMENT DE NOM.
         LX          ALIMAG
E1:      EQU         $
         STA         &AIMAG          < INITIALISATION DE L'IMAGE.
         JDX         E1
<
<        E N R E G I S T R E M E N T   G R A P H I Q U E  :
<
E400:    EQU         $               < ENREGISTREMENT DE LA SUITE
                                     < D'UN DESSIN GRAPHIQUE.
         JMP         E2              < VERS LE 2EME NIVEAU D'INTERRO...
<
<
<        E R R E U R  :
<
E102:    EQU         $
         LAD         MERR
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR.
         BR          AIMAG2          < VERS UNE REINITIALISATION DE TV.
         PAGE
<
<        L I S T E   D E S   S E C T E U R S   A   T R A I T E R  :
<
<        FONCTION :
<                      CE MODULE PERMET DE RECUPERER
<                    8 CARACTERES HEXAS ; CHAQUE BIT
<                    CORRESPONADANT A 1 SECTEUR D'1NE
<                    IMAGE SCRATCH ; UN BIT A 0
<                    INDIQUE QU'IL FAUT IGNOERER CE
<                    SECTEUR LORS DES OPERATIONS LOGIQUES
<                    ENTRE IMAGES ....
<
E2101:   EQU         $
         BSR         AHEX4           < ENTREE DE 4 CHIFFRES HEXA.
         JNE         E2101           < ERREUR DE SYNTAXE.
         STA         PATS            < MEMORISATION DES SECTEURS 0 A 'F.
E2102:   EQU         $
         BSR         AHEX            < CONVERSION HEXA --> BINAIRE
                                     < DES SECTEURS '10 A '1F.
         JNE         E2102           < ERREUR DE SYNTAXE.
         STA         PATS+1          < MEMORISATION SECTEURS '10-'1F.
         JMP         E410            < VERS L'2NTERROGATION.
<
<        R E T O U R   T E M P O R A I R E   A U   C C I  :
<
E2700:   EQU         $
         LAD         DEMCCI
         SVC         0
         JMP         E410            < VERS L'INTERROGATION SI !GO.
<
<        D E F I N I T I O N   D E   L A   M A T R I C E
<        D E   T R A N S F O R M A T I O N  :
<
E2800:   EQU         $
         BR          ADEF            < VERS LE MODULE SPECIFIQUE.
<
<
<        R E C H E R C H E   I M A G E   V I D E O  :
<
<
DESSIN:  EQU         $
         LAI         '05
         BSR         AGOSGN          < TENTATIVE DE CHARGEMENT.
         JE          E350            < OK , CHARGEMENT REUSSI.
         LAI         '06
         BSR         AGOSGN          < SINON TENTATIVE DE CHARGEMENT
                                     < SOUS :SYS.
         JNE         E102            < ET NON , L'IMAGE N'EXISTE PAS !!!
E350:    EQU         $
         LA          &ALONG          < VALIDATION DE L'IMAGE CHARGEE.
         JAGE        E102            < ERREUR : IL S'AGIT D'UNE
                                     < SIMULATION DE FLOPPY.
         CPI         -3
         JL          E102            < IL S'AGIT DE QUELQUE CHOISE...
         LR          A,X             < OK , X=INDEX DE RECUPERATION.
         LA          &LROUT          < SI <0 , C'EST UN INDEX DE
                                     < RECUPERATION DE LA ROUTINE
                                     < D'AFFICHAGE DES POINTS.
         STA         APOINT          < CE QUI NOUS DONNE L'ADRESSE
                                     < DE LA ROUTINE SET/RESET/INVER.
<
<
<        F I N   D E   C O N V E R S I O N  :
<
<
E2:      EQU         $
<
< INTERROGATION UTILISATEUR :
<
E410:    EQU         $
         BSR         ADESIR          < QUESTION-REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    D : ON RESTE SUR L'INTERROGATION (PERMET DONC
<                        DE RAFRAICHIR L'IMAGE VIDEO...) ,
<                        DE PLUS EDITE LE NBRE DE POINTS DE L'IMAGE
<                        COURANTE...
<                    G : VERS UNE REINITIALISATION ENTIERE ,
<                        (SAUF DE L'IMAGE SCRATCH !!!)
<                    S : SAVE L'IMAGE COURANTE EN SCRATCH ,
<                    L : ENTREE DE LA LISTE DES SECTEURS D'1NE
<                        IMAGE SCRATCH A PRENDRE EN COMPTE ,
<                    O : 'OR' ENTRE L'IMAGE COURANTE ET L'IMAGE SCRATCH,
<                    A : DE MEME AVEC 'AND' ,
<                    E : DE MEME AVEC 'EOR' ,
<                    H : DE MEME AVEC 'AD' ('HADDITION'...) ,
<                    Z : DE MEME AVEC 'SB' ('ZOUSTRACTION'....)
<                    U : IMAGE-COURANTE <-- IMAGE-SRACTCH ,
<                    N : PERMET UN 2EME ENTRY DANS TV , AFIN
<                        DE POUVOIR FAIRE DES CHANGEMENTS DE NOM ,
<                        ET DES SUPERPOSITIONS ,...
<                    I : INVERSION VIDEO DE L'IMAGE ,
<                    P : FILTRAGE D'UNE IMAGE ,
<                    C : PSEUDO-COLORIAGE DE L'IMAGE ,
<                    T : TRANSPOSITION DE L'IMAGE ,
<                    = : DEFINITION DE LA MATRICE DE TRANSFORMATION ,
<                    V : ENTREE DE LA VIRTUALISATION DE L'2MAGE ,
<                    M : MODIFICATION INTERACTIVE DE L'IMAGE VIDEO
<                        PAR LE CURSEUR GRAPHIQUE DE LA VISU ,
<                    - : DELETE L'IMAGE VIDEO SOUS SGN ,
<                    + INSERT L'IMAGE VIDEO SOUS SGN ,
<                    F : RETOUR A GE SANS RIEN FAIRE D'AUTRE ,
<                    W : RETOUR TEMPORAIRE AU CCI ,
<                    R : DEMANDE D'UNE SUITE GRAPHIQUE AU DESSIN (VI1).
<
         CPI         "R"
         JE          E400            < VERS L'ENREGISTREMENT DE LA
                                     < SUITE GRAPHIQUE DE L'IMAGE VIDEO.
         CPI         "V"
         JE          E2400           < VIRTUALISATION DE L'IMAGE.
         CPI         "L"
         JE          E2101           < ENTREE LISTE DES SECTEURS.
         CPI         "F"
         JE          E420            < VERS UN RETOUR IMMEDIAT A 'GE'.
         CPI         "W"
         JE          E2700           < DEMANDE DE RETOUR AU CCI.
         CPI         "-"
         JE          E430            < VERS UN DELETE-SGN DE L'IMAGE.
         CPI         "+"
         JE          E440            < VERS UN STORE SGN DE L'IMAGE.
         CPI         "="
         JE          E2800           < DEFINITION DE LA MATRICE.
         CPI         "I"
         JE          E870            < INVERSION VIDEO DE L'IMAGE.
         CPI         "P"
         JE          E2000           < DEMANDE DE FILTRAGE D'UNE IMAGE.
         CPI         "C"
         JE          E2010           < PSEUDO-COLORIAGE DE L'IMAGE.
         CPI         "T"
         JE          E2020           < TRANSPOSITION DE L'IMAGE.
         CPI         "M"
         JE          E790XX          < MODIFICATION INTERACTIVE DE
                                     < L'IMAGE VIDEO.
         CPI         "N"
         JE          E860            < 2EME ENTRY DANS LE PROCESSEUR.
         CPI         "O"
         JE          E842            < OR(IMAGE COURANTE,IMAGE SCRACTH).
         CPI         "A"
         JE          E843            < AND(IMAGE COURANTE,IMAGE SCRATCH)
         CPI         "E"
         JE          E844            < EOR(IMAGE COURANTE,IMAGE SCRATCH)
         CPI         "H"
         JE          E2550           < AD(IMAGE SCRATCH,IMAGE COURANTE).
         CPI         "Z"
         JE          E2551           < SB(IMAGE COURANTE,IMAGE SCRATCH).
         CPI         "U"
         JE          E2500           < RAPPEL DE L'IMAGE SCRATCH.
         CPI         "S"
         JE          E834            < SAVE L'IMAGE COURANTE EN SCRATCH.
         CPI         "G"
         JE          E833            < REINITIALISATION DE 'TV' ,
                                     < SAUF DE LA ZONE SCRATCH !!!
         CPI         "B"
         JE          EB00            < "BASCULEMENT" DU MODE D'ACCES A DKU
                                     < "DIRECT"/"INDIRECT", ET DEFINITION
                                     < LONGUEUR D'ECHANGE SI PASSAGE EN MODE
                                     < "DIRECT" STACKS RVB <--> DKU.
         CPI         "Q"             < "QUANTA" D'ACCES QUEL QUE SOIT LE
                                     < MODE D'ACCES UTILISE.
         JE          EQ00
         CPI         "@"             < ADRESSE DANS STACK RVB POUR ACCES DKU
                                     < EN MODE DIRECT.
         JE          EA00
         CPI         "K"             < DEFINITION D'INCREMENT AUTOMATIQUE
                                     < POUR LES ACCES DKU.
         JE          EK00
         CPI         "\"
         JE          EX00            < CHANGEMENT DES BORNES DEFINISSANT LA
                                     < ZONE DKU UTILISABLE.
         ADRI        -"0",A          < TEST DES FONCTIONS INDICATEUR TV.
         JAL         ERROR
         CPI         7               < DOIT ETRE ENTRE 0 ET 7.
         JG          ERROR
XWOR%1:  VAL         TVSIMU=0        < DECALAGE DES INDICATEURS.
         IF          XWOR%1,,X100,   < A APPLIQUER SI DIFFERENT DE ZERO.
         SLLS        XWOR%1
X100:    VAL         0
         TBT         13              < 0/1/2/3 OU 4/5/6/7 ???
         RBT         13              < RAZ A PRIORI...
         LR          A,B             < SAVE DANS B LA COULEUR...
         JNC         TVCOL1          < 0/1/2/3.
XWOR%1:  VAL         TVIN=0
XWOR%1:  VAL         NBITMO-1-XWOR%1
         SBT         XWOR%1          < 4/5/6/7.
TVCOL1:  EQU         $
         STA         STDKU+3         < STORE DES INDICATEURS.
         LAD         STDKU           < STABILISATION DE L'IMAGE
         SVC         0               < SI ON EST SOUS :SYS
         STB         STDKU+3         < RAZ LE BIT IN A PRIORI...
E410K:   JMP         E410            < VERS UNE NOUVELLE INTERROGATION.
ERROR:   EQU         $               < ERREUR 2EME NIVEAU INTERRO.
         LAD         MERR
         BSR         APRINT          < REPONSE INCOMPREHENSIBLE ??
         JMP         E410            < VERS UNE NOUVELLE INTERROGATION.
<
<        C H A N G E M E N T   D E   N O M  :
<
E860:    EQU         $
         IC          INIT            < INIT#0 : AINSI ON NE REINITIA-
                                     < LISERA PAS LE FOND DE L'IMAGE ...
<
<        R E I N I T I A L I S A T I O N   G E N E R A L E   ,
<        S A U F   L ' I M A G E   S C R A T C H  :
<
E833:    EQU         $
         BR          AIMAG2          < VERS UNE 2EME ENTRY ...
<
<        V I R T U A L I S A T I O N   D E   L ' I M A G E  :
<
E2400:   EQU         $
         BR          AVIRT           < VERS LE MODULE SPECIFIQUE.
<
<        F I L T R A G E   I M A G E  :
<
E2000:   EQU         $
         LBI         0               < B=0 : DEMANDE DE FILTRAGE.
         BR          AFILTR          < VERS LE MODULE DE FILTRAGE.
<
<        P S E U D O - C O L O R I A G E  :
<
E2010:   EQU         $
         LBI         1               < B=1 : PSEUDO-COLORIAGE IMAGE.
         BR          AFILTR
<
<        T R A N S P O S I T I O N   D E   L ' I M A G E  :
<
E2020:   EQU         $
         LBI         -1              < B=-1 : DEMANDE DE TRANSPOSITION.
         BR          AFILTR
<
<        I N V E R S I O N   V I D E O   D E   L ' I M A G E  :
<
E870:    EQU         $
         LX          ALIMAG          < X=NBRE DE MOTS DE L'IMAGE.
E450:    EQU         $
         LA          &AIMAG          < A=1 MOT DE L'IMAGE.
         EORI        -1              < INVERSION BIT A BIT DE L'IMAGE.
         STA         &AIMAG          < ET MISE A JOUR DE L'IMAGE.
         JDX         E450            < AU MOT SUIVANT.
         LA          APOINT          < ACCES A LA ROUTINE COURANTE.
         LB          ARESET          < SET COURANT A PRIORI.
         CP          ASET            < EST-CE SET ???
         JE          E451            < OUI , ON PASSE DONC EN RESET.
         CP          ARESET          < EST-CE RESET ???
         JNE         E410            < NON , INVER QUE L'ON LAISSE
                                     < TELLE QU'ELLE EST ...
         LB          ASET            < ET OUI , ON PASSE DONC EN SET.
E451:    EQU         $
         STB         APOINT          < MISE EN PLACE DE LA NOUVELLE
                                     < ROUTINE SET/RESET/INVER.
         JMP         E410            < PUIS ENFIN VERS L'INTERROGATION.
<
<        D E L E T E - S G N   D E   L ' I M A G E  :
<
E430:    EQU         $
         LAI         '03
         BSR         AGOSGN          < ESSAI DE DELETE SGN.
E102J:   JNE         E102            < ERREUR : LE NOM N'EXISTE PAS ...
         JMP         E410            < VERS LA DEMANDE DES DESIRS
                                     < DE L'UTILISATEUR ....
<
<        S T O R E - S G N   D E   L ' I M A G E  :
<
E440:    EQU         $
         LA          APOINT          < RECUPERATION DE L'ADRESSE DE
                                     < LA ROUTINE SET/RESET/INVER.
         LBI         -3              < SET A PRIORI.
         CP          ASET
         JE          E960            < EFFECTIVEMENT C'EST SET.
         LBI         -2              < RESET A PRIORI.
         CP          ARESET
         JE          E960            < EFFECTIVEMENT C'EST RESET.
         LBI         -1              < ET BIEN NON , C'EST INVERS.
E960:    EQU         $
         STB         &ALONG          < MAJ DE LA LONGUEUR (?) , POUR
                                     < DISTINGUER UNE IMAGE VIDEO
                                     < D'UNE IMAGE DE SIMULATION FLOPPY.
         LAI         '03
         BSR         AGOSGN          < TENTATIVE DE DELETE PRELIMINAIRE.
         LAI         '04
         BSR         AGOSGN          < TENTATIVE DE STORE.
         JNE         E102J           < ERREUR DE STORE ...
         JMP         E410            < VERS LA DEMANDE DES DESIRS
                                     < DE L'UTILISATEUR.
<
<        R E T O U R   A   ' G E '  :
<
E420:    EQU         $
         BR          ARETSC          < AIN'T IT HARD ???
<
<        S A V E   L ' I M A G E   C O U R A N T E   E N   S C R A T C H
<
E834:    EQU         $
         LY          WDK+2           < Y=256 (POUR TRANSLATER
                                     < L'@OCTET DU BUFFER DE SAVE).
         LB          IMAG2           < B=@OCTET INITIALE DU BUFFER
                                     < DE SAVE.
         STZ         WDK+3           < RAZ DU NUMERO DE SECTEUR COURANT.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS A SAVER.
         LAD         WDK
<
< BOUCLE DE SAVE DE L'IMAGE COURANTE PAR SECTEUR :
<
E832:    EQU         $
         STB         WDK+1           < MAJ DE L'@OCTET DU BUFFER.
         PSR         X               < SAVE LE DECOMPTE DE SECTEURS.
         SVC         0               < SAVE LE SECTEUR COURANT.
         PLR         X               < RESTAURE LE DECOMPTE DES SECTEUR.
         IC          WDK+3           < PROGRESSION DU NUMERO DE SECTEUR
                                     < COURANT.
         ADR         Y,B             < PROGRESSION DE L'@OCTET BUFFER.
         JDX         E832            < AU SUIVANT ...
E410J:   JMP         E410K           < VERS L'INTERRO. UTILISATEUR.
<
<        O P E R A T I O N S   L O G I Q U E S   E N T R E
<        I M A G E   C O U R A N T E   E T    I M A G E
<                    S C R A T C H  :
<
<        FONCTION :
<                      CE MODULE PERMET DE REALISER
<                    LES 3 FONCTION SUIVANTES , SELON
<                    LE MODE D'APPEL :
<                    O : IMAGE-COURANTE=IMAGE-COURANTE.OR.IMAGE-SCRATCH
<                    A : IMAGE-COURANTE=IMAGE-COURANTE.AND.IMAGE SCRATCH
<                    E : IMAGE-COURANTE=IMAGE-COURANTE.EOR.IMAGE-SCRATCH
<                    H : IMAGE-COURANTE=IMAGE-COURANTE.AD.IMAGE SCRATCH
<                    Z : IMAGE-COURANTE=IMAGE-COURANTE.SB.IMAGE SCRATCH
<        AINSI QUE :
<                    U : IMAGE-COURANTE=IMAGE-SCRATCH
<                        (U='UP')
<
E2500:   EQU         $
         LAI         '04             < CODE DU NOP AFIN DE NE PAS
                                     < MELANGER L'IMAGE SCRATCH AVEC
                                     < L'IMAGE COURANTE LORS DU RAPPEL.
         JMP         E845
E2550:   EQU         $               < AD.
         LAI         'A9             < CODE DU AD INDIRECT SUR L.
         JMP         E845
E2551:   EQU         $               < SB.
         LAI         'A8             < CODE DU SB INDIRECT SUR L.
         JMP         E845
E842:    EQU         $               < OR.
         LAI         'B2             < CODE DU OR INDIRECT SUR L.
         JMP         E845
E843:    EQU         $               < AND.
         LAI         'B3             < CODE DU AND INDIRECT SUR L.
         JMP         E845
E844:    EQU         $               < EOR.
         LAI         'B4             < CODE DU EOR INDIRECT SUR L.
E845:    EQU         $
         STBY        &AOP            < MISE EN PLACE DE L'INSTRUCTION
                                     < VARIABLE D'OPERATION LOGIQUE
                                     < ENTRE IMAGES.
<
< ENTREE DU NOM DE LA NOUVELLE IMAGE COURANTE :
<
         BSR         AINOM           < RECUPERATION NOM DANS ITEM1.
<
< OPERATION LOGIQUE ENTRE LES 2 IMAGES :
<
         BR          AOPER           < VERS L'OPERATION LOGIQUE ...
E790XX:  JMP         E790X           < SAUT > 128 !
EQ00:    JMP         EQ00X           < SAUT > 128 !
EX00:    JMP         EX00X           < SAUT > 128 !
EK00:    JMP         EK00X           < DEPLACEMENT > 128 !
<
<        C H A N G E M E N T   D U   M O D E   D ' A C C E S   A   D K U.
<
<          LORS DE CETTE COMMANDE "B" (COMME "BASCULEMENT !),  ON SERT UNE
<        LONGUEUR OCTETS QUI PEUT ETRE NULLE, SUR 0 OU 4 CHIFFRES HEXA.
<
<        - SI LONGUEUR NULLE, ON REVIENT EN MODE D'ACCES "INDIRECT" DKU.
<        - SI LONGUEUR NON NULLE, ELLE EST VALIDEE (PAIRE, ET 0<=L<='6000)
<        ET ON PASSE EN MODE D'ACCES DKU "DIRECT" (C-A-D STACKS RVB <--> DKU)
<        ET L'ADRESSE STACK RVB RECOIT IMPLICITEMENT 0 (ELLE EST MODIFIABLE
<        PAR LA COMMANDE "A-ROND").
<
EB00:    EQU         $
         BSR         AHEX4           < ENTREE DE 4 CHIFFRES HEXA.
         JE          EB01            < 4 CHIFFRES HEXA RECONNUS.
         CPZR        X
         JNE         ERROR
EB03:    EQU         $
         LRM         A,B,X           < REPONSE VIDE OU NULLE, RETOUR ANCIEN MODE
         WORD        DMTRAV          < DEMANDE 'RWDKU' MODE "INDIRECT".
         WORD        RWDKU
         WORD        FDMTRV-DMTRAV
         MOVE                        < NOTA: ON NE TOUCHE NI A L'ADRESSE
                                     < SECTEUR COURANTE, NI A L'INCREMENT
                                     < COURANT.
         JMP         E410J           < VERS COMMANDE SUIVANTE.
EB01:    EQU         $               < PASSER EN MODE D'ACCES "DIRECT" :
                                     < STACK RVB <--> DKU.
< VALIDATION LONGUEUR.
         JAE         EB03            < REPONSE NULLE, RETOUR ANCIEN MODE.
         JAL         ERROR           < NEGATIVE.
         TBT         15
         JC          ERROR           < IMPAIRE.
         CP          LO3IM
         JG          ERROR           < TROP GRANDE.
         STA         RWDKU+2         < LONGUEUR DEMANDEE.
< PREMIER MOT DE LA DEMANDE.
         LRM         B
         WORD        '8A04           < FONCTION = LECTURE Q3 A PRIORI.
         LA          QC              < QUANTA COURANT.
         CPI         3
         JE          EB02            < C'EST BON.
         SBT         16+12           < SET BIT QUANTA 1.
EB02:    EQU         $
         STB         RWDKU           < PREMIER MOT DE LA DEMANDE.
< ADRESSE STACK RVB = 0 IMPLICITEMENT (MODIFIABLE PAR COMMANDE "@").
         STZ         RWDKU+1
< NOTA:
<        ADRESSE SECTEUR COURANTE ET INCREMENT COURANT RESTENT INCHANGES.
         JMP         E410J           < VERS COMMANDE SUIVANTE.
<
<        D E F I N I T I O N   /   R E D E F I N I T I O N    A D R E S S E
<
<        D A N S   S T A C K   R V B   ( M O D E   " D I R E C T "   D K U ).
<
<          CETTE COMMANDE ( A-ROND) N'EST ACCEPTEE QUE SI LE MODE COURANT D'ACCE
<        D'ACCES A DKU EST BIEN LE MODE DIRECT STACK RVB <--> DKU.
<
<          DE PLUS CETTE ADRESSE DOIT :
<        - ETRE EXPRIMEE SUR 0 OU 4 CHIFFRES HEXA, EN OCTETS.
<        - ETRE PAIRE ET POSITIVE,
<        - ETRE <= 'LO3IM' - LONGUEUR DEMANDEE (COMMANDE "B").
<
EA00:    EQU         $
< VERIFIER QUE L'ON EST BIEN EN MODE DIRCT STACK RVB <--> DKU.
         LA          RWDKU
         TBT         13
         JNC         ERROR
< ACQUERIR L'ADRESSE SPECIFIEE.
         BSR         AHEX4           < ENTREE DE 4 CHIFFRES HEXA.
         JE          EA01            < 4 CHIFFRES HEXA RECONNUS.
         CPZR        X
         JNE         ERROR
< REPONSE VIDE, 0 IMPLICITE.
         LAI         0
EA01:    EQU         $
         JAL         ERROR           < NEGATIVE.
         TBT         15
         JC          ERROR           < IMPAIRE.
         LR          A,B
         LA          LO3IM           < LONGUEUR DE 3 IMAGES (OCTETS).
         SB          RWDKU+2         < - LONGUEUR DEMANDEE.
         CPR         B,A             < VALIDATION.
         JL          ERROR
         STB         RWDKU+1         < ADRESSE DEMANDEE.
         JMP         E410J           < VERS COMMANDE SUIVANTE.
ERRORX:  JMP         ERROR           < SAUT > 128 !
<
<        D E F I N I T I O N   /   R E D E F I N I T I O N   I N C R E M E N T
<
<        P O U R   A C C E S   D K U.
<
<          L'INCREMENT EST UN NOMBRE QUELCONQUE DE Q-SECTEURS, EXPRIME
<        SUR 0 OU 4 CHIFFRES HEXA.
<
<          CET INCREMENT EST VALABLE QUEL QUE SOIT LE MODE D'ACCES DKU UTILISE.
<
EK00X:   EQU         $
         BSR         AHEX4           < ENTREE DE 4 CHIFFRES HEXA.
         JE          EK01            < 4 CHIFFRES HEXA RECONNUS.
         CPZR        X
         JNE         ERROR
         LAI         0               < REPONSE VIDE, 0 IMPLICITE.
EK01:    EQU         $
         STA         INCR            < INCREMENT COURANT.
E410L:   JMP         E410J           < VERS COMMANDE SUIVANTE.
EQ00X:   EQU         $
<
<        S P E C I F I C A T I O N   Q U A N T A   D ' A C C E S   A   D K U.
<
<                    COMMANDE "Q" SUIVIE DE "1" OU "3".
<
         BSR         ADESIR          < QUANTA DEMANDE.
         ADRI        -"0",A
         CPI         1
         JE          EQ01            < QUANTA 1 DEMANDE.
         CPI         3
         JNE         ERRORX
< QUANTA 3 DEMANDE.
         CP          QC              < EST-ON DEJA EN QUANTA 3 ?
         JE          E410L           < OUI, RIEN A FAIRE...
< MISE A JOUR QUANTA COURANT.
         STA         QC
< RAZ BIT QUANTA 1 DE LA DEMANDE DKU.
         LA          RWDKU
         RBT         12
         STA         RWDKU
< DIVISER ADRESSE SECTEUR COURANTE PAR 3.
         LA          RWDKU+3
         SLRD        16
         DV          QC
         STA         RWDKU+3
< DIVISER VALAD1 ET VALAD2 PAR 3 (BORNES).
         LA          VALAD1
         SLRD        16
         DV          QC
         STA         VALAD1
         LA          VALAD2
         SLRD        16
         DV          QC
         STA         VALAD2
< DIVISER L'INCREMENT COURANT +/- 2 PAR 3.
         LA          INCR
         JAGE        EQ04
         ADRI        -2,A
         JMP         EQ05
EQ04:    EQU         $
         ADRI        2,A
EQ05:    EQU         $
         SARD        16
         DV          QC
         STA         INCR
<
         JMP         EQ06            < VERS MISE A JOUR DE 'LMSQC'.
E790X:   JMP         E790            < SAUT > 128
< QUANTA 1 DEMANDE.
EQ01:    EQU         $
         CP          QC              < EST-ON DEJA EN QUANTA 1 ?
         JE          E410L           < OUI, RIEN A FAIRE.
< SET BIT QUANTA 1 DANS LES DEMANDES DKU 'DMTRAV' ET 'RWDKU'.
         LA          DMTRAV
         SBT         12
         STA         DMTRAV
         LA          RWDKU
         SBT         12
         STA         RWDKU
< MULTIPLIER PAR 3 L'ADRESSE SECTEUR COURANTE.
         LA          RWDKU+3
         MP          QC
         STB         RWDKU+3
< NOTER QUE SI L'ADRESSE SECTEUR SE TROUVE HORS DES LIMITES 'VALAD1','VALAD2'
< ELLE SERA VALIDEEE AVANT LE PROCHAIN ACCES DKU !
<
< MULTIPLIER PAR 3 'VALAD1' ET 'VALAD2'.
         LA          VALAD1
         MP          QC
         LA          M0FFF           < NE PAS DEPASSER '0FFF !
         CPR         A,B
         JLE         EQ07
         XR          A,B             < PRENDRE '0FFF.
EQ07:    EQU         $
         STB         VALAD1
         LA          VALAD2
         MP          QC
         LA          M0FFF           < IDEM...
         CPR         A,B
         JLE         EQ08
         XR          A,B
EQ08:    EQU         $
         STB         VALAD2
< MULTIPLIER L'INCREMENT PAR 3.
         LA          INCR
         MP          QC
         STB         INCR
< ET, ENFIN, QUANTA COURANT RECOIT 1 !
         LAI         1
         STA         QC
EQ06:    EQU         $
< METTRE A JOUR 'LMSQC' (LONGUEUR MOTS SECTEUR EN QUANTA COURANT).
         LA          QC
         SLLS        7
         STA         LMSQC
         JMP         E410L           < VERS COMMANDE SUIVANTE.
<
<        C H A N G E M E N T   D E S   B O R N E S   D E F I N I S S A N T
<
<        L ' E S P A C E   D K U   A C C E S S I B L E.
<
<                    COMMANDE "\", SE PRESENTANT COMME SUIT:
<
<                    \XXXX\YYYY\
<
<                    AVEC XXXX = ADRESSE PREMIER SECTEUR AUTORISE ET
<                         YYYY = ADRESSE DERNIER SECTEUR AUTORISE.
<
EX00X:   EQU         $
         BSR         AHEX4           < ADRESSE PREMIER SECTEUR AUTORISE.
         JNE         ERRORX
         PSR         A
         BSR         ADESIR          < ON ATTEND LE "\" DE SEPARATION.
         CPI         "\"
         PLR         A
         JNE         ERRORX
         PSR         A
         BSR         AHEX4           < ADRESSE DERNIER SECTEUR AUTORISE.
         JNE         ERRORX
         PSR         A
         BSR         ADESIR          < ON ATTEND LE "\" DE FIN.
         CPI         "\"
         PLR         A,B             < 'A' = DEBUT, 'B' = FIN.
         JNE         ERRORX
< ON TRANSFORME CES ADRESSES SECTEUR EN ADRESSES 16-SECTEURS, ET
< ON LES VALIDE.
         SLRS        4
         XR          A,B
         SLRS        4
         CPR         A,B
         JG          ERRORX
         STA         VALAD2
         STB         VALAD1
         JMP         E410L
<
<
<        M O D I F I C A T I O N   I N T E R A C T I V E  :
<        D E   L ' I M A G E   V I D E O  :
<
<
<        A T T E N T I O N  :
<                      POUR QUE L'INTERACTION AIT LIEU,
<                    IL FAUT :
<                    1- LA COMMANDE 'G' DOIT ETRE UTILISEE
<                    A LA SUITE DE 'M'; SA VALIDITE NE PORTE
<                    QUE JUSQU'A LA PROCHAINE COMMANDE
<                    PRIMAIRE.
<                    2- LE NVP='0B DOIT ETRE ASSIGNE.
<
<
<        COMMANDES RECONNUES :
<                    G : VALIDATION DE L'INTERACTION SUR '0B
<                        JUSQU'A LA PROCHAINE COMMANDE
<                        PRIMAIRE,
<                    F : FIN D'INTERACTION ,
<                    O : MISE A L'ORIGINE DE 'A' ,
<                    A : ORIGINE D'UN SEGMENT ,
<                    B : EXTREIMITE D'UN SEGMENT ; LE SEGMENT
<                        AB EST TRACE SUIVANT 'APOINT' ,
<                        PUIS B DEVIENT A ,
<                    S : IDEM A 'B' , SAUF QUE A NE CHANGE PAS ,
<                    - : MODE TRACE 'RESET' (NOIR) ,
<                    + : MODE TRACE 'SET' (BLANC) ,
<                    E : MODE 'SET' SI 'RESET'/'RESET' SI 'SET' ,
<                    I : MODE TRACE 'INVER' (INVERSION) ,
<                    C : COMMANDE NEUTRE (CURSEUR) ,
<                    N : REINITIALISATION DE LA TOPO DES BANDES ,
<                    M : MONTERER A TV/TI LA BANDE QUE
<                        L'ON VIRTUALISE ,
<                    T : MONTRER A TV/TI LA BANDE REELLE
<                        ASSOCIEE A UNE BANDE VIRTUELLE 'M' ,
<                    V : COLORIAGE VOLET A 1 SUR FOND 0 ,
<                        (ITEST=1)
<                    W : COLORIAGE VOLET A 0 SUR FOND 1 ,
<                        (ITEST=0)
<                    0 : MISE A NOIR DU POINT COURANT ,
<                    1 : MISE A BLANC DU POINT COURANT.
<
<                      LE POINT COURANT EST DEFINI PAR
<                    LA POSITION COURANTE DU CURSEUR
<                    GRAPHIQUE ('GIN').
<
E791:    EQU         $               < RETURN DE L'INTERACTION.
         PLR         A
         STA         APOINT          < RESTAURE L'APOINT D'ENTREE.
         JMP         E410L           < VERS L'INTERRO. UTILISATEUR.
E790:    EQU         $               < ENTRY DE L'INTERACTION.
         LA          APOINT          < SAVE L'APOINT D'ENTRY.
         PSR         A
E780:    EQU         $
<
< MISE A L'ORIGINE DE A ET B :
<
         LA          NLIG            < Y INITIAL.
         STZ         X1              < X1=0.
         STA         Y1              < Y1=NLIG.
         STZ         X2              < X2=0.
         STA         Y2              < Y2=NLIG.
<
< INTERACTION CURSEUR :
<
         LAI         'FF
         STBY        CURSOR          < A PRIORI : PAS D'INTERACTION !!!
E770:    EQU         $
         LAD         STDKU
         SVC         0               < VISUALISATION AVANT LE CURSEUR...
         LAD         OG
         SVC         0               < MISE EN GRAPHIQUE DE LA VISU.
         LAD         CU
         SVC         0               < MISE EN FONCTION DU CURSEUR.
         LAD         LCU
         SVC         0               < LECTURE DU CURSEUR GRAPHIQUE.
<
< STABILISATION DE L'2MAGE :
<
E4002:   EQU         $               < ON N'EST PAS SSOUS :SYS ...
<
< COORDONNEES DU POINT COURANT :
<
         LA          CURSOR+1        < A=Y(CURSEUR).
         SLRS        DEDY            < PRISE EN COMPTE DE LA DEFINITION
                                     < RELATIVE DE LA VIDEO.
         SB          NLIG            < DU AU FAIT QUE LES AXES Y
                                     < DE LA VIDEO ET DES VISUS
                                     < SONT INVERSES.
         NGR         A,Y             < Y=Y(POINT COURANT).
         LA          CURSOR+2        < A=X(CURSEUR).
         SLRS        DEDX            < PRISE EN COMPTE DE LA DEFINITION
                                     < RELATIVE DE LA VIDEO.
         LR          A,X             < X=X(POINT COURANT).
<
< SIMULATION D'UN CURSEUR SUR LA TV :
<
         LB          TEMPO           < B=NBRE DE CLIGNOTTEMENTS (PAIR).
E781:    EQU         $
         PSR         X
         LAD         STDKU
         SVC         0               < EXECUTION MAITRE DE SP3.
         PLR         X
         BSR         AINVER          < NBRE PAIR D'INVERSION DU POINT
                                     < COURANT ...
         ADRI        -1,B            < DECOMPTE DES CLIGNOTEMENTS.
         CPZR        B               < EST-CE FINI ???
         JG          E781            < NON , ENCORE ...
<
< ANALYSE DES DESIRS DE L'UTILISATEUR :
<
         LBY         CURSOR          < A=CARACTERE DE DEBLOCAGE.
         CPI         'FF             < Y-A-T'IL EU INTERACTION ???
         JNE         E6000           < OUI , (A) EST BON ,
         BSR         ADESIR          < NON : SIMULATION DE L'ENTREE ...
E6000:   EQU         $
         CPI         "B"
         JE          E774            < EXTREMITE SEQUENTIELLE
                                     < D'UN SEGMENT AB.
         CPI         "A"
         JE          E773            < ORIGINE D'UN SEGMENT.
         CPI         "0"
         JE          E771            < VERS LA MISE A NOIR DU POINT.
         CPI         "1"
         JE          E772            < VERS LA MISE A BLANC DU POINT.
         CPI         "S"
         JE          E775            < EXTREMITE ETOILEE D'UN SEGMENT.
         CPI         "-"
         JE          E776            < MISE EN MODE 'RESET' (NOIR).
         CPI         "+"
         JE          E777            < MISE EN MODE 'SET' (BLANC).
         CPI         "E"
         JE          E785            < VERS LA PERMUTATION 'SET'/'RESET'
         CPI         "I"
         JE          E778            < MISE EN MODE 'INVER' (INVERSION).
         CPI         "C"
         JE          E770            < COMMANDE NEUTRE ...
         CPI         "F"
         JE          E791            < FIN DE L'INTERACTION , RETOUR
                                     < A L'INTERROGATION ('>').
         CPI         "O"
         JE          E780            < MISE A L'ORIGINE DE A ET DE B.
                                     < COIN EN BAS A GAUCHE).
         CPI         "V"
         JE          E1010           < VERS LE COLORIAGE D'UN VOLET.
         CPI         "W"
         JE          E1020           < COLORIAGE INVERSE D'1N VOLET.
         CPI         "N"
         JE          E2300           < REINITIALISATION DE LA TOPO.
         CPI         "M"
         JE          E2301           < INDICATION BANDE A VIRTUALISER.
         CPI         "T"
         JE          E2302           < INDICATION DE LA BANDE REELLE.
         CPI         "G"             < VALIDATION INTERACTION '0B ???
         JE          VALCU           < ET OUI...
         LAD         MERR
         BSR         APRINT          < DESIR INCOMPREHENSIBLE ...
         JMP         E770            < VERS UNE NOUVELL INTERACTION.
<
< MISE A NOIR DU POINT (X,Y) :
<
E771:    EQU         $
         BSR         ARESET          < RESET DU POINT.
         JMP         E770            < VERS L'INTERACTION.
<
< MISE A BLANC DU POINT (X,Y) :
<
E772:    EQU         $
         BSR         ASET            < SET DU POINT.
         JMP         E770            < VERS L'INTERACTION.
<
< ORIGINE 'A' D'UN SEGMENT :
<
E773:    EQU         $
         STX         X1              < CHANGEMENT DE M1 ('A').
         STY         Y1              < CHANGEMENT DE M1 ('A').
         JMP         E770            < VERS UNE NOUVELLE INTERACTION.
<
< EXTREMITE 'B' DU SEGMENT AB :
<
E774:    EQU         $
         STX         X2              < CHANGEMENT DE POINT M2 ('B').
         STY         Y2              < CHANGEMENT DE POINT M2 ('B').
         BSR         ASEG            < TRACE DU SEGMENT AB.
         STX         X1              < M1 <-- M2.
         STY         Y1              < ('B' DEVIENT LE NOUVEAU 'A').
         JMP         E770            < VERS UNE NOUVELLE INTERACTION.
<
< EXTREMITE 'S' D'UN SEGMENT :
<
E775:    EQU         $
         STX         X2              < CHANGEMENT DE POINT M2 ('S').
         STY         Y2              < CHANGEMENT DE POINT M2 ('S').
         LA          X1
         LB          Y1
         PSR         A,B             < SAVE LE POINT 'A' (M1).
         BSR         ASEG            < TRACE DU SEGMENT M1M2.
         PLR         A,B             < RESTAURE LE POINT 'A' (M1).
         STA         X1
         STB         Y1
         JMP         E770            < VERS UNE NOUVELLE INTERACTION.
<
< MODES DE TRACE DES SEGMENTS :
<
E776:    EQU         $
         LB          ARESET
         JMP         E779
E777:    EQU         $
         LB          ASET
         JMP         E779
E778:    EQU         $
         LB          AINVER
E779:    EQU         $
         STB         APOINT          < MAJ TEMPORAIRE DE APOINT.
         JMP         E770            < VERS L'INTERACTION.
E785:    EQU         $
         LB          ASET            < 'RESET' COURANT A PRIORI.
         LA          APOINT
         CP          ARESET
         JE          E779            < PASSAGE EN MODE 'SET'.
         LB          ARESET          < MODE 'SET' COURANT A PRIORI.
         CP          ASET
         JE          E779            < PASSAGE AU MODE 'RESET'.
         JMP         E770            < MODE INCHANGE SI 'INVER'.
<
<        C O L O R I A G E   A   0   S U R   F O N D   1  :
<
E1020:   EQU         $
         LAI         0               < CONVENTIONS INVERSEES.
         JMP         E1021
<
<        C O L O R I A G E   A   1   S U R   F O N D   0  :
<
E1010:   EQU         $
         LAI         1               < CONVENTIONS NORMALES.
E1021:   EQU         $
         STA         ITEST           < SAVE LES CONVENTIONS.
         LY          NLIG            < Y=INDEX VERTICAL.
<
< BALAYAGE VERTICAL (Y) :
<
E1001:   EQU         $
         LX          NPPL            < X=INDEX HORIZONTAL.
<
< BALAYAGE HORIZONTAL (X) :
<
E1002:   EQU         $
<
< RECHERCHE DU DERNIER POINT A 1 DE LA LIGNE (Y) :
<
         BSR         ATEST           < TEST DU POINT (X,Y).
         JC          E1003           < ON S'ARRETE SUR LE DERNIER
                                     < POINT A 1.
         ADRI        -1,X            < SI 0 , PASSAGE AU POINT
                                     < PRECEDENT DE LA LIGNE.
         CPZR        X               < DEBUT DE LIGNE ???
         JGE         E1002           < NON , PASSAGE AU POINT PRECEDENT.
<
< CAS D'UNE LIGNE NOIRE , OU FIN DE
< TRAITEMENT D'UNE LIGNE :
<
E1004:   EQU         $
         ADRI        -1,Y            < PASSAGE A LA LIGNE PRECEDENTE.
         CPZR        Y               < DEBUT D'IMAGE ???
         JGE         E1001           < NON , LIGNE PRECEDENTE ...
         JMP         E770            < C'EST FINI , VERS L'INTER-
                                     < ACTION DU CURSEUR.
<
< CAS OU ON A TROUVE UN DERNIER POINT
< BLANC (1) SUR LA LIGNE COURANTE :
<
E1003:   EQU         $
         LR          X,B             < B=COORDONEE X DU DERNIER POINT
                                     < BLANC (1) DE LA LIGNE (Y).
         LXI         0               < RETOUR AU DEBUT DE LA LIGNE (Y).
<
< RECHERCHE DU 1ER POINT BLANC :
<
E1005:   EQU         $
         BSR         ATEST           < TEST DU POINT (X,Y).
         JC          E1006           < ON S'ARRETE SUR LE 1ER POINT
                                     < BLANC (1) TROUVE.
         ADRI        1,X             < SINON , PASSAGE AU POINT SUIVANT.
         JMP         E1005           < PARCOURS DE LA LIGNE (Y)
                                     < SANS PRECAUTIONS , CAR ON EST
                                     < SUR QU'IL Y A AU MOINS UN
                                     < POINT BLANC (PEUT-ETRE UNIQUE??).
<
< CAS OU ON A TROUVE UN 1ER POINT BLANC (1) :
<
E1006:   EQU         $
         CPR         X,B             < A-T'ON BALAYE TOUS LES POINTS
                                     < DU 1ER AU DERNIER BLANC ???
         JE          E1004           < OUI , ALORS , IL FAUT PASSER
                                     < A LA LIGNE PRECEDENTE.
         BSR         APOINT          < SINON , ON TRAITE CE POINT
                                     < (X,Y) A 1 (BLANC).
         ADRI        1,X             < PASSAGE AU POINT SUIVANT.
         JMP         E1006
<
<        T O P O G R A P H I E   D E S   B A N D E S
<        H O R I Z O N T A L E S  :
<
< INDICATION D'UNE BANDE VIRTUELLE :
<
E2301:   EQU         $
         LR          Y,A             < A=NUMERO DE LIGNE COURANTE.
         SLRS        3               < A=NUMERO DE BANDE COURANTE.
         STA         BANDE           < SAVE LA BANDE VIRTUELLE COURANTE.
         BR          AE770           < VERS L'INTERROGATION ...
<
< BANDE REELLE D'UNE BANDE VIRTUELLE :
<
E2302:   EQU         $
         LX          BANDE           < X=BANDE VIRTUELLE COURANTE.
         LR          Y,A             < A=LIGNE COURANTE.
         SLRS        3               < A=BANDE COURANTE.
         STBY        &ATOPO          < SAVE LA TOPOGRAPHIE.
         BR          AE770           < VERS L'INTERROGATION ...
<
< REINITIALISATION DE LA TOPO :
<
E2300:   EQU         $
         LAI         LIMAG/128-1     < A=NUMERO DE LA DERNIERE BANDE.
E2303:   EQU         $
         LR          A,X             < X=NUMERO REGISTRE TOPOGRAPHIQUE.
         STBY        &ATOPO          < REGISTRE <-- NUMERO DE REGISTRE.
         ADRI        -1,A            < DECOMPTE.
         JAGE        E2303           < PARCOURS DE LA MEMOIRE TOPO.
         STZ         BANDE           < RAZ LA BANDE VIRTUELLE COURANTE.
         BR          AE770           < VERS L'INTERROGATION ...
<
<        V A L I D A T I O N   I N T E R A C T I O N   ' 0 B  :
<
VALCU:   EQU         $
         LA          CU
         ADRI        -3,A            < CALCUL DE 'OG' A PARTIR DE 'CU'.
         STA         OG              < OG POSSEDE CETTE VALEUR JUSQU'A
                                     < LA PROCHAINE COMMANDE PRIMAIRE.
         BR          AE770           < VERS L'INTERROGATION SUR '0B.
<
<        E N T R E E   D E   L A   T O P O G R A P H I E  :
<
<        FONCTION :
<                      CE MODULE PERMET D'INITIALISER DIRECTEMENT
<                    LES REGISTRES TOPOGRAPHIQUES DE L'IMAGE ;
<                    CEUX-CI SONT BAPTISES 0,....,9,A,...,V.
<
<        CAS DES ERREURS :
<                      LA TOPOGRAPHIE EST ALORS
<                    REINITIALISEE ; UNE ERREUR
<                    VOLONTAIRE PERMET DONC DE
<                    REINITIALISER LA TOPOGRAPHIE ...
<
VIRT:    EQU         $
         LXI         0               < X=NUMERO DE REGISTRE COURNT.
<
< BOUCLE DE RECUPERATION :
<
VIRT1:   EQU         $
         PSR         X               < SAVE LE NUMERO DE REGISTRE.
         LAI         0               < @MESSAGE=0.
         BSR         ADESIR          < RECUPERATION D'UN CARACTERE.
         PLR         X               < RESTAURE LE NUMERO DE REGISTRE.
         ADRI        -'30,A          < CONVERSION BINAIRE.
         JAL         VIRT2           < ERREUR ...
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         VIRT3           < OUI , OK.
         ADRI        -'41+'39+1,A    < SINON , SUITE CONVERSION.
         CPI         9               < EST-CE UNE LETTRE ???
         JLE         VIRT2           < NON , ERREUR.
         CPI         LIMAG/128-1     < EST-CE UN BON NUMERO ???
         JG          VIRT2           < NON , ERREUR.
VIRT3:   EQU         $               < CAS DES BONS NUMEROS VIRTUELS.
         STBY        &ATOPO          < MEMORISATION TOPOGRAPHIE.
         ADRI        1,X             < PASSAGE AU REGISTRE SUIVANT.
         LR          X,A
         CPI         LIMAG/128       < EST-CE FINI ???
         JL          VIRT1           < NON , ON CONTINUE.
VIRT5:   EQU         $
         BR          AINTER          < SI OUI , VERS L'2NTERROGATION.
<
< CAS DES ERREURS :
<
VIRT2:   EQU         $
         LR          X,Y             < Y=INDEX COURANT DE LA TOPO.
         LAI         LIMAG/128-1     < A=NUMERO DE LA DERNIERE BANDE.
VIRT4:   EQU         $
         LR          A,X             < LE REGISTRE TOPOGRAPHIQUE EST
         STBY        &ATOPO          < AVEC SON PROPRE NUMERO.
         ADRI        -1,A            < PASSAGE AU NUMERO PRECEDENT.
         JAGE        VIRT4           < AU REGISTRE PRECEDENT ...
         CPZR        Y               < L'ERREUR S'EST-ELLE PRODUITE SUR
                                     < LE 1ER REGISTRE TOPO ???
         JE          VIRT5           < OUI , ON CONSIDERE QU'IL
                                     < N'Y AP AS ERREUR ....
         BR          AERR            < VERS LE MESSAGE D'ERREUR.
<
<        O P E R A T I O N   L O G I Q U E
<        E N T R E   I M A G E S  :
<
<        ORIGINE :
<                    BIT0=0 : SENS CROISSANT ,
<                        =1 : SENS DECROISSANT ,
<                             BIT1=0 : FAIRE UN MIROIR OK ,
<                                  1 : SUIVANT LE BIT2 :
<                                      BIT2=0 : PAS DE MIROIR, PERMET
<                                               DONC DES EFFETS TRES
<                                               SPECIAUX...
<                                           1 : CHOIX SELECTIF DE LA
<                                               COULEUR DE L'IMAGE
<                                               COURANTE.
<                    BIT14-15 : INDEX INITIAL XIMAG SI BIT2=0,
<                               SELECTION DES COULEURS SI BIT2=1.
<
<
OPER:    EQU         $
<
< DEMANDE DE L'ORIGINE DE L'IMAGE COURANTE :
<
         BSR         AHEX4           < ENTREE DE 4 CHIFFRES HEXA.
                                     < CONTENUS DANS REP.
                                     < (ET DANS L'ITEM1 POUR 'TI')
         JE          E475X           < REPONSE HEXA OK...
         XR          A,X
         CPI         1               < 1 SEUL CARACTERE RECONNU ???
         XR          A,X
         JNE         OPER            < NON, ERREUR...
         CPI         'E              < OUI, EST-CE 'E OU 'F ???
         JL          OPER            < NON, ERREUR...
< EFFECTUER L'INCREMENTATION AUTOMATIQUE POUR ACCES DKU.
         PSR         A
         LA          RWDKU+3         < ADRESSE SECTEUR COURANTE.
         AD          INCR            < + INCREMENT.
         STA         RWDKU+3         < NOUVELLE ADRESSE SECTEUR.
         PLR         A               < RAPPEL, ICI, 'A' = '000E OU '000F.
         JMP         COOL1           < VERS ACCES DKU.
E475X:   EQU         $
<
< VOYONS S'IL S'AGIT D'UN ORG DE TYPE 'EXXX OU 'FXXX (ACCES DKU AVEC SPECI-
< FICATION DE L'ADRESSE SECTEUR), AUQUEL CAS IL NOUS FAUT ENCORE UN CHIFFRE
< HEXA QUI NOUS DONNERA LE DERNIER CHIFFRE DE L'ADRESSE SECTEUR DKU DONT
< NOUS N'AVONS POUR L'INSTANT QUE LES 3 PREMIERS CHIFFRES.
<
         SLRD        12
         CPI         'E              < EST-CE 'E OU 'F ?
         JL          E475X1
< OUI, ALLONS-Y POUR LE DERNIER CHIFFRE...
         SLRD        4               < 'B' = 'EXXX OU 'FXXX.
         PSR         B               < A CAUSE DE BSR AHEX...
         LYI         1
         BSR         AHEX
         PLR         B
         JNE         ERRORY
         SLLS        12
         SCLD        4               < 'B' = ADRESSE SECTEUR, 'A' = 'E OU 'F.
         STB         RWDKU+3         < MISE A JOUR ADRESSE SECTEUR DANS LA
                                     < DEMANDE DKU.
         JMP         COOL1           < VERS ACCES DKU.
ERRORY:  BR          AERR            < SAUT > 128 !
E475X1:  EQU         $
         SLLD        12              < DEFAIRE CE QU'ON A FAIT...
<
< VALIDATION DE L'ORIGINE :
<
         LBI         1               < +1 : SENS CROISSANT A PRIORI ...
         LYI         0               < INDEX INITIAL DE PARCOURS
                                     < POSITIF D'1N SECTEUR.
         LXI         0               < DEPART SUR LE 1ER SECTEUR
                                     < DE L'IMAGE SCRATCH A PRIORI.
         JAGE        E475            < OK, SENS CROISSANT...
         NGR         B,B             < SINON : B=-1 (DECROISSANT).
         LYI         127             < INDEX INITIAL DE PARCOURS
                                     < NEGATIF DE SECTEUR.
         LXI         LIMAG/128-1     < DEPART SUR LE DERNIER SECTEUR
                                     < DE L'IMAGE SCRATCH.
         STZ         MIROR           < MIROIR A PRIORI (=0).
         TBT         1               < SUPPRESSION DE MIROIR DEMANDEE???
         JNC         E2840           < 0 : NON , MIROIR OK.
         TBT         2
         JC          COOL1           < CHOIX COULEUR IMAGE COURANTE.
         STA         MIROR           < 1 : SUPPRESSION DU MIROIR (#0).
         RBT         1               < SUPPRESSION DE L'INDICATEUR (1).
E2840:   EQU         $
         RBT         0               < RAZ LE BIT0 DE L'ORIGINE.
E475:    EQU         $
         STB         SENSX           < SENSX=+1/-1.
         STY         SECTX           < SAVE L'INDEX INITIAL DE PARCOURS
                                     < DE SECTEUR.
         CP          ALIMAG          < VALIDATION DE L'ORIGINE PAR
                                     < RAPPORT A LA LONGUEUR DE IMAGE.
         STA         XIMAG           < OK , ON INITIALISE XIMAG
                                     < AVEC L'ORIGINE.
         JGE         CROTA           < C'EST PEUT-ETRE UNE MODIFICATION DES
                                     < REGISTRES DE COULEUR SI BIT1=1...
         ADRI        -127,Y
         SBR         Y,B             < B=VALEUR DE TEST DE FIN DU
                                     < PARCOURS D'UN SECTEUR.
         STX         RDK+3           < INITIALISATION NUMERO SECTEUR
                                     < COURANT DE L'IMAGE SCRATCH.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS A LIRE.
<
< BOUCLE D'OPERATIONS :
<
E840:    EQU         $
         PSR         X               < SAVE LE DECOMPTE DES SECTEURS.
<
< ETAT DU SECTEUR COURANT :
<
         PSR         B
         LA          PATS
         LB          PATS+1          < (A,B)=LISTE DES SECTEURS.
         LX          RDK+3           < X=SECTEUR COURANT.
         TBT         0,X             < FAUT-IL TRAITER LE SECTEUR (X) ???
         PLR         B
         LAI         0
         ADCR        A
         STA         INDICS          < A=0 : NE PAS TRAITER LE SECTEUR.
         JAE         E2104           < INUTILE DE LIRE LE SECTEUR (X).
<
< ENTREE SECTEUR COURANT :
<
         LBY         &ATOPO          < A=SECTEUR REEL ASSOCIE AU
                                     < SECTEUR VIRTUEL (X).
         STA         RDK+3           < MAJ DE LA DEMANDE DE LECTURE.
         PSR         X               < ET SAVE LE NUMERO DE SECTEUR
                                     < VIRTUEL.
         LAD         RDK
         SVC         0               < LECTURE DU SECTEUR COURANT.
         PLR         X
         STX         RDK+3           < RESTAURE LE SECTEUR VIRTUEL
                                     < COURANT.
E2104:   EQU         $
         LA          RDK+3
         AD          SENSX
         STA         RDK+3           < CALCUL DU NUMERO DU SECTEUR
                                     < SUIVANT.
         LY          SECTX           < REINITIALISATION DE L'INDEX DE
                                     < PARCOURS DU SECTEUR COURANT.
E841:    EQU         $
         LR          Y,X             < X=INDEX COURANT DANS SECTEUR.
         CPZ         INDICS          < OPERE-T'ON AVEC LE SECTEUR
                                     < COURANT ????
         JE          E2100           < NON , ON NE FAIT PAS L'OPERATION.
         LA          &ASECT1         < ACCES AU MOT COURANT SECTEUR.
         CPZR        B               < EST-CE UN PARCOURS CROISSANT ???
         JG          E1300           < OK , (A) EST BON.
         CPZ         MIROR           < FAUT-IL MIROITER LE MOT ???
         JNE         E1300           < NON , ON SAUTE LE MIROIR !!!
<
< CAS D'UN PARCOURS DECROISSANT :
< IL FAUT MIROITER (???) LE MOT COURANT
< DU SECTEUR ; A NOTER QUE B='FFFF (-1).
<
         LXI         16              < X=NBRE DE BITS A INVERSER.
E1301:   EQU         $
         TBT         31,X            < TEST UN BIT DE A.
         JC          E1302           < 1 : IL L'EST DEJA DANS B.
         NGR         X,X             < 0 : IL FAUT LE RAZER DANS B.
         RBT         0,X             < ARZ EN MIROIR.
         NGR         X,X             < RESTAURE X.
E1302:   EQU         $
         JDX         E1301           < AU BIT SUIVANT ...
         LR          B,A             < A=MOT COURANT DU SECTEUR VU
                                     < DANS UN MIROIR.
         LBI         -1              < RESTAURE (B)=-1 : VALEUR DE
                                     < TEST DE (Y).
<
< OPERATION ELEMENTAIRE :
<
E1300:   EQU         $
         LX          XIMAG           < X=INDEX COURANT DE L'IMAGE
                                     < COURANTE.
OP:      OR          &AIMAG1         < LE MOT COURANT DE L'IMAGE
                                     < COURANTE EST OPERER AVEC LE
                                     < MOT COURANT DU SECTEUR COURANT.
         STA         &AIMAG1         < LE RESULTAT EST REMIS DANS
                                     < L'IMAGE COURANT.
E2100:   EQU         $               < CAS DES SECTEURS IGNORES.
         LA          XIMAG
         ADRI        1,A             < INCREMENTATION DE XIMAG.
         AND         MASKX           < ET CALCUL MODULO LIMAG.
         STA         XIMAG           < MAJ DE XIMAG.
         LA          SENSX
         ADR         A,Y             < INDEX DU MOT SUIVANT DU SECTEUR
                                     < COURANT.
         CPR         Y,B             < A-T'ON EXPLORE TOUT LE SECTEUR
                                     < COURANT ???
         JNE         E841            < NON , ON CONTINUE ...
         PLR         X               < OUI , RESTAURATION DU DECOMPTE
                                     < DES SECTEURS A LIRE ...
         JDX         E840            < AU SECTEUR SUIVANT ...
         BR          AINTER          < ET ENFIN , VERS L'INTERROGATION
                                     < DE L'UTILISATEUR ...
OPERXX:  JMP         OPER            < SAUT > 128 !
<
<
<        M O D I F I C A T I O N   D E S   R E G I S T R E S
<                    D E   C O U L E U R  :
<
<
<        FONCTION :
<                      LES REGISTRES DE COULEUR PERMETTENT
<                    DE COLORIER AVEC DES NIVEAUX DE GRIS
<                    LES DIFFERENTES COMBINAISONS DE 3
<                    POINTS DE MEME COORDONNEES APPARTENANT
<                    AUX 3 TRAMES R, V ET B ; SOIENT PR, PV
<                    ET PB UN TRIPLET DE TELS POINTS.
<                      CHAQUE COMBINAISON (PR,PV,PB), CES
<                    3 POINTS ETANT BINAIRES (0/1) DONNENT
<                    DES NOMBRES DE 0 A 7 :
<                    PB=0 PV=0 PR=0 --> 000='0,
<                    PB=0 PV=0 PR=1 --> 001='1,
<                    PB=0 PV=1 PR=0 --> 010='2,...
<                    PB=1 PV=1 PR=1 --> 111='7,
<                      SOIT I L'UNE DES 8 VALEURS POSSIBLES ;
<                    CETTE VALEUR SERT D'INDEX DANS 3 MEMOIRES
<                    PARALLELES MR, MV ET MB CONTENANT CHACUNE
<                    DES MOTS DE 4 BITS PERMETTANT DE CODER
<                    DONC 16 NIVEAUX PAR COULEUR.
<                      SOIT DONC LE POINT P(PB,PV,PR) ; A CE
<                    POINT ON ASSOCIE DONC LE NOMBRE I TEL
<                    QUE I=PB*4+PV*2+PR*1 ; LE POINT P
<                    APPARAITRA DONC SUR L'ECRAN COMME LA
<                    SUPERPOSITION DU BLEU AVEC LE NIVEAU
<                    -MB(I), DU VERT AVEC LE NIVEAU -MV(I),
<                    ET ENFIN DU ROUGE AVEC LE NIVEAU -MR(I) ;
<                    LE SIGNE "MOINS" INDIQUE QUE LES NIVEAUX
<                    SONT COMPLEMENTES A 1 DANS LES 3 MEMOIRES.
<
<
<        UTILISATION :
<                      EN REPONSE A 'ORG' DES DIFFERENTES
<                    OPERATIONS INTER-IMAGES, ON PEUT AGIR
<                    SUR CES 3 MEMOIRES PAR LA REPONSE :
<                    ORG=4XYZ, QUI A L'EFFET SUIVANT :
<                    0<=X<=7 : SELECTIONNE 0 A 3 DES MEMOIRES,
<                    PAR EXEMPLE X=4 SELECTIONNE MB,
<                    X=2 : MV ET X=1 MR ; ON PEUT COMBINER
<                    CES DIFFERENTES VALEURS ;
<                    0<=Y<=7 : DONNE L'INDEX DANS LES MEMOIRES
<                    SELECTIONNEES, ET ENFIN
<                    0<=Z<=15 : DONNE LE NIVEAU DE GRIS COMPLEMENTE
<                    A 1, C'EST-A-DIRE QUE Z=0 DONNE LE MAXIMUM
<                    (BLANC), ET 15 LE MINIMUM (NOIR)...
<
<
CROTA:   EQU         $
         TBT         1
         JNC         OPER            < ERREUR... ON REDEMANDE 'ORG'...
         LBY         &AOP            < RECUPERATION DE L'OPERATION DEMANDEE,
         STBY        &AOP2           < ET GENERATION...
         LA          XIMAG           < NOTA : ON RAZE LES BITS INUTILISES
         SLLS        4               < COMME CECI.
         SLRS        4
OP2:     OR          &AMCOOL         < OPERATION DYNAMIQUE : CUMUL
         STA         &AMCOOL         < MAJ DES ORDRES COURANTS...
         LBY         &AOP2
         CPI         'A8             < A-T'ON FAIT UNE SOUSTRACTION ???
         JNE         CROTA2          < NON...
         LA          &AMCOOL         < OUI, IL FAUT
         NGR         A,A             < INVERSER
         STA         &AMCOOL         < LE RESULTAT...
CROTA2:  EQU         $
         LAD         DEMCU3
         SVC         0               < ENVOI DE '0XYZ,
CROTA1:  EQU         $
         BR          AINTER          < VERS L'INTERROGATION...
<
<
<        A C C E S   A B S O L U   A U X   I M A G E S
<                    S U R   D K U  :
<
<
<        FONCTION :
<                      LE NSP='8A EST ASSIGNE IMPLICI-
<                    TEMENT A 'DKU' ; ENSUITE LES COMMANDES
<                    SUIVANTES SONT DISPONIBLES :
<
<        ORG=EXXXX / ORG=E;          ECRITURE SUR DKU,
<        ORG=FXXXX / ORG=F;          LECTURE DKU.
<
<          DANS TOUS LES CAS (INCREMENTATION AUTOMATIQUE, OU SPECIFICATION
<        DE L'ADRESSE SECTEUR EN CLAIR), ON A ICI:
<
<        - ADRESSE SECTEUR DE LA DEMANDE DKU A JOUR (MAIS PAS VALIDEE),
<        - 'A' = '000E OU '000F (ECRITURE / LECTURE).
<
COOL1:   EQU         $
         TBT         15              < SENS DE L'ECHANGE.
         LB          RWDKU
         RBT         14+16           < READ A PRIORI...
         JC          COOL2           < OUI (1)...
         SBT         14+16           < NON (0) : WRITE...
COOL2:   EQU         $
         STB         RWDKU           < MAJ DE LA DEMANDE...
<
< VALIDATION DE L'ADRESSE SECTEUR DE LA DEMANDE PAR RAPPORT AU BORNES
< 'VALAD1' ET 'VALAD2', EN TENANT COMPTE DE LA LONGUEUR DE L'ECHANGE ET
< DU QUANTA COURANT.
<
         LA          RWDKU+2         < LONGUEUR OCTETS ECHANGE.
         SLRS        1               < LONGUEUR MOTS.
         AD          LMSQC           < + LONGUEUR MOTS SECTEUR EN QUANTA
         ADRI        -1,A            < COURANT -1.
         SLRD        16
         DV          LMSQC           < --> NOMBRE DE SECTEURS NECESSAIRE
                                     < A L'ECHANGE.
         ADRI        'F,A            < ON ARRONDIT...
         SLRD        16+XDKU         < 'B' = UN NOMBRE DE 16-SECTEURS EN Q1/Q3.
         LA          RWDKU+3         < ADRESSE SECTEUR DE LA DEMANDE.
         SLRS        XDKU            < EN 16 SECTEURS Q1/Q3.
         CP          VALAD1          < VALIDATION EN BAS...
         JL          ERRORY
         ADR         B,A
         CP          VALAD2          < VALIDATION EN HAUT...
         JG          ERRORY
< ALLONS-Y POUR L'ECHANGE...
         LAD         RWDKU
         SVC         0               < ENVOI DE LA DEMANDE...
         JNE         OPERXX          < ERREUR !!!
         BR          AINTER          < COMMANDE SUIVANTE...
<                      CE MODULE PERMET DE COLRIER D'UNE
<                    MANIERE FICTIVE LES IMAGES , AVEC
<                    MALHEUREUSEMENT UN PETIT DEFAUT
<                    EN CE QUI CONCERNE LES CONCAVITES HAU-GAUCHE ...
<        3- B=-1 :
<                    3.1- MATRICE=(0,1,1,0) :
<                      CE MODULE PERMET ALORS DE TRANSPOSER
<                    LA MATRICE DE L'IMAGE ET CECI
<                    BIT A BIT ; IL S'AGIT DONC D'1NE
<                    SYMETRIE PAR RAPPORT A LA DIAGONALE
<                    PRINCIPALE DE CELLE-CI.
<                    3.2- MATRICE#(0,1,1,0) :
<                      CE MODULE PERMET DES TRANSFORMATIONS
<                    BIZARRES ET VARIEES !!?!?!!
<
FILTR:   EQU         $
         LAI         1
         STA         ITEST           < MISE EN MODE TESTS NORMAUX.
         LY          NLIG            < INDEX DE BALAYAGE VERTICAL.
<
< BOUCLE DE BALAYAGE VERTICAL :
<
E2001:   EQU         $
         PSR         B               < SAVE LA FONCTION DEMANDEE.
         LR          Y,A             < Y=NUMERO DE LIGNE COURANTE.
         SLRS        3
         LR          A,X             < X=NUMERO DE BANDE COURANTE.
         LA          PATS            < ACCES A LA LISTE DES BANDES
         LB          PATS+1          < A TRAITER.
         TBT         0,X             < LA BANDE COURANTE (X) DOIT-
                                     < ELLE ETRE TRAITEE ???
         PLR         B               < RESTAURE LA FONCTION DEMANDEE.
         JNC         E2821           < LA BANDE COURANTE EST IGNOREE.
         LX          NPPL            < X=INDEX DE BALAYAGE HORIZONTAL.
         CPZR        B               < EST-CE UNE TRANSPOISTION ???
         JGE         E2002           < NON , (X) EST BON.
         CPZ         DIAGON          < UN PARCOURS DIAGONAL EST-IL
                                     < DEMANDE ???
         JE          E2002           < NON , PARCOURS DE L'IMAGE
                                     < ENTIERE.
         LR          Y,X             < DANS LE CAS D'UNE TRANSPOSITION ,
                                     < ON FAIT UN PARCOURS TRIANGULAIRE
                                     < DE L'IMAGE.
<
< BOUCLE DE BALAYAGE HORIZONTAL :
<
E2002:   EQU         $
         CPZR        B
         JL          E2021           < DEMANDE DE TRANSPOSITION.
         BSR         ATEST           < TEST DU POINT COURANT M(X,Y).
         JNC         E2003           < ININTERESSANT : M(X,Y)=0.
<
< CAS OU LE POINT COURANT M(X,Y)=1 :
<
         ADRI        1,Y             < PASSAGE AU VOISIN M(X,Y+1).
         CPZR        B               < FILTRAGE OU PSEUDO-CLORIAGE ???
         JG          E2011           < PSEUDO-COLORIAGE DE L'IMAGE.
<
< FILTRAGE DE L'IMAGE :
<
         BSR         AEXIST          < TEST DU POINT M(X,Y+1) ???
         ADRI        -1,Y            < RETOUR AU POINT M(X,Y).
         JAE         E2003           < ININTERESSANT M(X,Y+1)
                                     < EXISTE ET EST A 1.
         ADRI        -1,Y            < PASSAGE SUR M(X,Y-1).
         BSR         AEXIST          < TEST DU VOISIN M(X,Y-1) ???
         ADRI        1,Y             < RETOUR AU POINT M(X,Y).
         JAE         E2003           < ININTERESSANT : M(X,Y-1)
                                     < EXISTE ET EST A 1.
         BSR         ARESET          < DANS LE CAS OU M(X,Y) A 2
                                     < VOISIN A 0 OU INEXISTANTS ,
                                     < ON LE CONSIDRE COMME SINGULIER ,
                                     < ET ON LE SUPPRIME ...
<
< CHANGEMENT DE POINT COURANT M(X,Y) :
<
E2003:   EQU         $
         ADRI        -1,X            < BALAYAGE HORIZONTAL.
E2013:   EQU         $
         CPZR        X
         JGE         E2002
E2820:   EQU         $               < ENTRY SAUT DE LA BANDE COURANTE.
         ADRI        -1,Y            < BALAYAGE VERTICAL.
         CPZR        Y
         JGE         E2001
         BR          AINTER          < RETOUR A L'INTERROGATION ...
<
<
<        P S E U D O - C O L O R I A G E  :
<
<
E2011:   EQU         $
         ADRI        -1,X            < PASSAGE AU POINT M(X-1,Y+1).
         CPZR        X               < L'X EXISTE-T'IL ???
         JL          E2012           < NON , PAS D'INTERET ...
         BSR         AEXIST          < TEST DU POINT M(X-1,Y+1).
         JANE        E2012           < M(X-1,Y+1) N'EXISTE PAS OU
                                     < EST A 0.
         ADRI        -1,Y            < SI M(X-1,Y+1)=1 , ON PASSE
                                     < AU POINT M(X-1,Y).
         BSR         APOINT          < COLORIAGE DE M(X-1,Y) SUIVANT
                                     < 'APOINT'.
         JMP         E2013           < VERS LE POINT SUIVANT ...
E2012:   EQU         $
         ADRI        -1,Y            < RETOUR A LA LIGNE (Y) ...
         JMP         E2013           < VERS LE POINT SUIVANT.
<
<
<        T R A N S F O R M A T I O N   M A T R I C I E L L E  :
<
<
E2021:   EQU         $
         PSR         B,X,Y
<        ON A ICI :
<                    B=-1.
         BSR         ATEST           < TEST DU POINT M(X,Y).
         ADCR        B               < B=0 SI M(X,Y)=1.
<
<
<        T R A N S F O R M A T I O N   D E S   C O O R D O N N E E S  :
<
<
<        METHODE DE TRANSFORMATION :
<
<                      SOIT :
<                    MSX=SX*(2**XEQUIV)+RSX ,
<                    MSY=SY*(2**YEQUIV)+RSY ,
<
<                      MSX ET MSY SONT LES COORDONNEES DU POINT M(X,Y) ,
<                    SX ET SY EN SONT LES COORDONNEES REDUITES ,
<                    RSX ET RSY LES RESIDUS ; XEQUIV ET YEQUIV
<                    DETERMINENT LES CLASSES D'EQUIVALENCE DES
<                    COORDONNEES DU PLAN.
<
<                      LA MATRICE DE TRANSFORMATION 'T' S'APPLIQUE
<                    AUX COORDONNEES REDUITES :
<                    (SXP,SYP)=T*(SX,SY) ,
<
<                      LES COORDONNEES REDUITES SXP ET SYP
<                    SONT EVENTUELLEMENT TRANSLATEES A
<                    L'AIDE DES CONSTANTES DE TRANSLATION
<                    TRX ET TRY INTRODUITES AVEC XEQUIV ET
<                    YEQUIV :
<                    (SXP,SYP)=(SXP,SYP)+(TRX,TRY) ,
<
<                      LES COORDONNEES RESULTANTES X ET Y SONT :
<                    X=SXP*(2**XEQUIV)+RSX ,
<                    Y=SYP*(2**YEQUIV)+RSY.
<
<
         PSR         B               < SAVE L'INDICATEUR D'ETAT.
         STX         MSX             < SAVE TEMPORAIRE X DE M(X,Y).
         STY         MSY             < SAVE TEMPORAIRE Y DE M(X,Y).
<
< DETERMINATION DES COORDONNEES REDUITES DE M(X,Y) :
<
         LR          X,A             < A=COORDONNEE X.
         LX          XEQUIV          < CLASSE D'EQUIVALENCE DES X.
         SLRD        0,X             < CALCUL DE LA CLASSE D'EQUI-
                                     < VALENCE DU X DE M(X,Y).
         STA         SX              < SAVE LA VALEUR REDUITE DE X.
         LR          X,A             < A=XEQUIV ,
         SLRS        5               < RECUPERATION DE TRX : A=TRX.
                                     < (TRANSLATION DES X REDUITS)
         SLLD        0,X             < A=RESIDU DE LA COORDONNEE X.
         STA         RSX             < ET SAVE LE REIDU DE X.
         LR          Y,A             < A=COORDONNEE Y DE M(X,Y).
         LX          YEQUIV          < ACCES CLASSE D'EQUIVALENCE DE Y.
         SLRD        0,X             < CALCUL DE LA CLASSE D'EQUI-
                                     < VALENCE DE LA COORDONEE Y.
         STA         SY              < SAVE LA COORDONNEE REDUITE Y.
         LR          X,A             < A=YEQUIV ,
         SLRS        5               < RECUPERATION DE TRY : A=TRY.
                                     < (TRANSLATION DES Y REDUITS)
         SLLD        0,X             < A=RESIDU DE LA COORDONNEE Y.
         STA         RSY             < SAVE LE RESIDU DE Y.
<
< TRANSFORMATION PAR LA MATRICE T DES
< COORDONNEES REDUITES DE M(X,Y) :
<
         LA          SX              < COORDONNEE X REDUITE.
         MP          A21             < B=A21*X.
         LR          B,Y
         LA          SY
         MP          A22             < B=A22*Y.
         ADR         B,Y
         LR          Y,A             < A=A21*X+A22*Y.
         LX          YEQUIV          < X=CLASSE D'EQUIVALENCE DES Y.
         SLLS        0,X             < 'DEREDUCTION' DE Y.
         AD          RSY             < RESTAURATION DU RESIDU DE Y.
         AND         NLIG            < ET ENFIN , CALCUL MODULO LE
                                     < NBRE DE LIGNES PAR ECRAN.
         LR          A,Y             < Y=COORDONNEE Y DU POINT
                                     < TRANSFORME DE M(X,Y).
         LA          SX              < COORDONNEE X REDUITE.
         MP          A11             < B=A11*X.
         LR          B,X
         LA          SY
         MP          A12             < B=A12*Y.
         ADR         B,X
         LR          X,A             < A=A11*X+A12*Y.
         LX          XEQUIV          < X=CLASSE D'EQUIVALENCE DES X.
         SLLS        0,X             < 'DEREDUCTION' DE X.
         AD          RSX             < RESTAURATION DU RESIDU DE X.
         AND         NPPL            < ET ENFIN CALCUL MODULO LE NBRE
                                     < DE POINTS PAR LIGNE.
         LR          A,X             < X=COORDONNE DU POINT TRANFORME.
         PLR         B               < RESTAURE L'INDICATEUR D'ETAT.
         BSR         ATEST           < TEST DU POINT M(Y,X).
         ADCR        B               < B=0 SI M(X,Y)#M(Y,X).
         CPZR        B
         JNE         E2022           < B=-1 OU B=1 ; CELA SIGNIFIE
                                     < QUE M(X,Y)=M(Y,X) ; IL N'Y A
                                     < DONC RIEN A FAIRE ...
         BSR         AINVER          < SINON INVERSION DE M(Y,X).
<
< TRANSFORMATION INVERSE DES COORDONNEES :
<
         LX          MSX             < RESTAURE COORDONNEE X DE M(X,Y).
         LY          MSY             < RESTAURE COORDONNEE Y DE M(X,Y).
         BSR         AINVER          < INVERSION DE M(X,Y).
E2022:   EQU         $
         PLR         B,X,Y
         JMP         E2003           < VERS LE POINT M(X,Y) SUIVANT.
<
< CAS OU LA BANDE COURANTE EST IGNOREE :
<
E2821:   EQU         $
         LR          X,A             < X=NUMERO DE LA BANDE COURANTE.
         SLLS        3
         LR          A,Y             < Y=NUMERO DE LA 1ERE LIGNE
                                     < DE LA BANDE COURANTE.
         JMP         E2820           < VERS LE PASSAGE A LA BANDE
                                     < PRECEDENTE (SI EXISTE...).
<
<        D E F I N I T I O N   D E   L A   M A T R I C E
<        D E   T R A N S F O R M A T I O N  :
<
<        NOTA :
<                      IL EST POSSIBLE DE FAIRE GENERER
<                    AU PROCESSEUR DES MATRICES IDEMPOTENTES ,
<                    C'EST-A-DIRE TELLES QUE :
<                                    M*M=I.
<                      CES MATRICES SONT DE LA FORME :
<                    -M22      (1-M22*M22)/M21
<                    M21       M22
<
<                      A NOTER QUE LES MATRICES
<                    +-1,0,0,+-1 CONVIENNENT AUSSI ...
<
DEF:     EQU         $
         LYI         4               < Y=NBRE DE CARACTERES DEMANDES
                                     < POUR CHAQUE COEFFICIENT.
<
< ENTREE DES CLASSES D'EQUIVALENCE XEQUIV ET
< YEQUIV AINSI QUE DES CONSTANTES DE TRANSLATION
< TRX ET TRY :
<
<        BITS0-2 :   TRANSLATION A DROITE DES X REDUITS (TRX) ,
<        BITS3-7 :   CLASSE D'EQUIVALENCE DES X (XEQUIV) ,
<        BITS8-10 :  TRANSLATION VERS LE BAS DES Y REDUITS (TRY) ,
<        BITS11-15 : CLASSE D'EQUIVALENCE DES Y (YEQUUIV).
<
<                      EN DONNANT '0000 , LES CLASSES
<                    SONT PONCTUELLES ET NON TRANSLATEES !!!
<
         LXI         5               < INDEX DU MESSAGE SUR LES
                                     < CLASSES D'EQUIVALENCE X,Y.
         BSR         ACOEF           < RECUPERATION DES CLASSES :
                                     < OCTET0(A)=CLASSE DE X ,
                                     < OCTET1(A)=CLASSE DE Y.
         SLRD        16              < A=0 , B=CLASSES D'EQUIVALENCE.
         DV          C256            < DECONCATENATION DES 2 OCTETS.
         STB         YEQUIV          < CLASSE D'EQUIVALENCE DE Y.
         STA         XEQUIV          < CLASSE D'EQUIVALENCE DE X.
         CP          YEQUIV          < LES CLASSES SONT-ELLES DE
                                     < 'MEME TAILLE' ???
         JNE         E2811           < NON , ON VA DONC RENTRER UNE
                                     < MATRICE QUELCONQUE ; EN EFFET
                                     < LORSQUE LES CLASSES NE SONT
                                     < PAS CARREES , LES MATRICES
                                     < IDEMPOTENTES NE DONNENT
                                     < PAS DES RESULTATS INVERSIBLES !!!
         CPI         '0F             < UNE TRANSLATION A-T'ELLE ETE
                                     < INTRODUITE , OU BIEN LA CLASSE
                                     < DEMANDEE EST-ELLE SUPERIEURE
                                     < A '0F ???
         JG          E2811           < UNE MATRICE IDEMPOTENTE NE
                                     < DONNERA PAS DE BONS RESULTATS !!!
E2810:   EQU         $
         BSR         ADESIR          < L'UTILISATEUR DESIRE-T'IL
                                     < UNE MATRICE IDEMPOTENTE OU PAS ???
         CPI         "N"             < A CONTIENT LA REPONSE ...
         JE          E2811           < IL DESIRE RENTRER LA MATRICE
                                     < ENTIERE (4 COEFFICIENTS).
         CPI         "O"
         JNE         E2810           < ERREUR , ON RECOMMENCE ...
<
< GENERATION D'UNE MATRICE IDEMPOTENTE :
<
         LXI         2               < INDEX DU MESSAGE 'M22'.
         BSR         ACOEF           < ENTREE DU COEFFICIENT M22.
         STA         SA22            < ET SAVE TEMPORAIRE.
         LXI         1               < INDEX DU MESSAGE 'M21'.
         BSR         ACOEF           < ENTREE DU COEFFICIENT M21.
         STA         SA21            < ET SAVE TEMPORAIRE.
E2816:   EQU         $               < ENTRY DE RECHERCHE D'UN JEU
                                     < DE M21,M22 QUI DONNENT UNE
                                     < MATRICE M ENTIERE.
         LA          SA22
         LR          A,Y             < Y=SA22.
         MP          SA22            < B=SA22*SA22.
         LAI         1
         SBR         B,A             < A=1-SA22*SA22.
         SARD        16              < ET CADRAGE SUR 32 BITS.
         DV          SA21            < CALCUL DE (1-SA22*SA22)/SA21.
         CPZR        B               < LE RESTE EST-IL NUL ???
         JE          E2815           < OK , RESTE NUL , M EST ENTIERE !
         LAD         MERR
         BSR         APRINT          < SINON , ENVOI D'UN MESSAGE
                                     < D'ERREUR.
         IC          SA22            < PUIS MODIFICATION DE SA22 ,
         JMP         E2816           < PUIS BOUCLAGE JUSQU'A TROUVER
                                     < LE BON COUPLE M21,M22 , OU
                                     < JUSQU'A UN ALT-MODE !!!
E2815:   EQU         $               < OK , MATRICE ENTIERE !!!
         STA         A12             < OK , GENERE A12.
         LA          SA21
         STA         A21             < OK , GENERE A21.
         STY         A22             < OK , GENERE A22.
         NGR         Y,Y
         STY         A11             < OK , GENERE A11=-A22.
         JMP         E2803           < VERS L'ENTREE DU MODE DE
                                     < PARCOURS DE L'IMAGE.
<
< ENTREE D'UNE MATRICE QUELCONQUE :
<
E2811:   EQU         $
         LXI         4               < X=NBRE DE COEFFICIENTS MATRICIELS
                                     < A ENTRER.
<
< ENTREE DES 4 COEFFICIENTS A11,A12,A21,A22 :
<
E2801:   EQU         $
         BSR         ACOEF           < ENTREE DU COEFFICIENT MIJ.
         STA         &AMAT           < SI OK , ON RANGE MIJ DANS
                                     < LA MATRICE(X).
         JDX         E2801           < AU COEFFICIENT SUIVANT.
<
< DEMANDE DE LA NATURE DU PARCOURS DE L'IMAGE :
<
E2803:   EQU         $
         STZ         DIAGON          < A PRIORI PARCOURS IMAGE ENTIERE.
         BSR         ADESIR          < ENTREE DES DESIRS UTILISATEUR.
         CPI         "N"             < A CONTIENT LE CARACTERE ENTRE.
         JE          E2802           < OK , PARCOURS IMAGE ENTIERE.
         CPI         "O"
         JNE         E2803           < ERREUR , ON REINTERROGE ...
         IC          DIAGON          < PARCOURS DIAGONAL DEMANDE.
E2802:   EQU         $
         BR          AINTER          < VERS L'INTERROGATION UTILISATEUR.
         PAGE
<
<
<        E N T R E E    U N   C O E F F I C I E N T
<        D E   L A   M A T R I C E   M  :
<
<
<        ARGUMENT :
<                    X=INDEX DU COEFFICIENT :
<                                    4 : A11 ,
<                                    3 : A12 ,
<                                    2 : A21 ,
<                                    1 : A22.
<
<
<        RESULTAT :
<                    A=VALEUR BINAIRE DU COEFFICIENT.
<
<
COEF:    EQU         $
         PSR         X               < SAVE LE DECOMPTE X.
         BSR         AHEX            < CONVERSION BINAIRE DE MIJ.
         PLR         X               < RESTAURE LE DECOMPTE X.
         JNE         COEF            < ERREUR DE SYNTAXE HEXADECIMALE.
         RSR
         PAGE
<
<        T R A C E   V I D E O   D ' U N   S E G M E N T   E N   S O L A R.
<
<        (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
<
<
SEG:     EQU         $
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
         PSR         A,B,X,Y
         PSR         W
<
         LR          K,B
         ADRI        1,B             < ZONE RECEPTRICE.
         LRM         A,X,W
         WORD        ENTIM           < ZONE EMETTRICE (A SAUVER DANS LA PILE).
         WORD        LENTIM          < LONGUEUR EN-TETE IMAGE.
         WORD        ENTIM           < POUR BASER L'EN-TETE.
         MOVE
         ADRI        LENTIM,K        < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
< CONVERSION DES COORDONNEES VIDEO EN COORDONNEES GRAPHIQUES.
<
         LA          X1              < X1 VIDEO.
         SLLS        DEDX
         STA         DEPX1,W         < X1 GRAPHIQUE.
         LA          X2              < X2 VIDEO.
         SLLS        DEDX
         STA         DEPX2,W         < X2 GRAPHIQUE.
         LA          Y1              < Y1 VIDEO.
         SB          NLIG
         NGR         A,A
         SLLS        DEDY
         STA         DEPY1,W         < Y1 GRAPHIQUE.
         LA          Y2              < Y2 VIDEO.
         SB          NLIG
         NGR         A,A
         SLLS        DEDY
         STA         DEPY2,W         < Y2 GRAPHIQUE.
<
< POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT').
<
         STZ         DEPMOD,W        < MODE TRACE = 'RBT' A PRIORI.
         LA          APOINT
         CP          ARESET
         JE          SEGRS           < C'EST 'RBT'.
         CP          AINVER
         JE          SEGINV
         IC          DEPMOD,W        < C'EST 'SBT'.
         JMP         SEGRS
SEGINV:  EQU         $
         DC          DEPMOD,W        < C'EST 'IBT'.
SEGRS:   EQU         $
         LRM         A,X
         WORD        ENTIM-ZERO*2    < ADRESSE OCTET EN-TETE IMAGE.
         WORD        LENTIM+LIMAG*2  < LONGUEUR OCTETS EN-TETE + IMAGE.
         STA         STDKU+1
         STX         STDKU+2
         LAD         STDKU           < DEMANDE INTERPOLATION ET AFFICHAGE.
         SVC         0
         LRM         A,X
         WORD        IMAG-ZERO*2     < RESTAURATION ADRESSE ET
         WORD        LIMAG*2         < LONGUEUR IMAGE DANS LA DEMANDE.
         STA         STDKU+1
         STX         STDKU+2
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
         ADRI        -LENTIM,K       < RESTAURATION DE 'K'.
         LR          K,A
         ADRI        1,A             < ZONE EMETTRICE.
         LRM         B,X
         WORD        ENTIM           < ZONE RECEPTRICE (A RESTAURER).
         WORD        LENTIM          < LONGUEUR.
         MOVE
<
         PLR         W
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        C O N V E R S I O N   H E X A ---> B I N A I R E  :
<
<
<        ARGUMENT :
<                    Y=NBRE DE CARACTERES A DECODER (1 A 4) ,
<                    ITEM1 CONTIENT 4 CARACTERES COURANTS PRESUMES HEXA.
<
<
<        RESULTAT :
<                    B=0 : OK ,
<                     =1#0 : CARACTERE ERRONNE ,
<                    INDICATEURS SUR LA VALEUR DE (B) ,
<                    A=VALEUR BINAIRE DES (Y) CARACTERES DE (REP)
<                      SI B=0, OU LA VALEUR COURANTE SI B#0 SUR "S"...
<
<
HEX:     EQU         $
         LXI         0               < INDEX DU BUFFER DE REPONSE.
         LBI         0               < CLEAR LE REGISTRE B.
E55:     EQU         $
         BSR         ASIMU           < A=CARACTERE COURANT DE ITEM1.
         ADRI        -'30,A
         JAL         E472            < ERREUR : CARACTERE NON RECONNU.
         CPI         9               < EST-CE UN CHIFFRE ???
         JLE         E51             < OUI , C'EST UN CHIFFRE.
         ADRI        -'41+'39+1,A    < NON.
         CPI         'A              < VALIDATION.
         JL          E472            < ERREUR : CARACTERE NON RECONNU.
         CPI         'F              < VALIDATION.
         JG          E472            < ERREUR : CARACTERE NON RECONNU.
E51:     EQU         $
         SCRS        4               < MISE DES 4 BITS EN TETE DE A.
         SCLD        4               < ET CONCATENATION A B.
         ADRI        1,X             < PROGRESSION DE L'INDEX.
         CPR         X,Y             < EST-CE FINI ???
         JNE         E55             < NON , ON CONTINUE.
         LR          B,A             < A=VALEUR BINAIRE DE (REP).
         LBI         0               < B=0 : RETOUR OK.
E473:    EQU         $
         CPZR        B               < POSITIONNEMENT DES INDICATEURS.
         RSR
<
< RETOURS EN ERREUR :
<
E472:    EQU         $
         LR          B,A             < A=VALEUR COURANTE...
         LBI         1               < B#0.
         JMP         E473            < VERS LA SORTIE ...
<
<        E N T R E E / C O N V E R S I O N   D E   4   C H I F F R E S
<
<        H E X A.
<
<
<        ATTENTION !
<
<                    DETRUIT LE REGISTRE 'Y' !
<
HEX4:    EQU         $
         LYI         4               < 4 CHIFFRES HEXA DEMANDES.
         BR          AHEX            < ET VOILA ...
         PAGE
<
<
<        E M I S S I O N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MOT DU MESSAGE.
<
<
PRINT:   EQU         $
         PSR         C,X             < SAVE L'@IMAGE VIDEO ET (X).
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1        < MAJ DE DEMOUT.
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2        < MAJ DE DEMOUT.
         LAD         DEMOUT
         SVC         0               < EMISSION DU MESSAGE.
         PLR         C,X             < RESTAURE L'@IMAGE VIDEO ET (X).
         RSR                         < RETOUR.
<
<
<        I N T E R R O G A T I O N   U T I L I S A T E U R  :
<
<
<        RESULTAT :
<                    A=CARACTERE COURANT DE L'ITEM1 (REPONSE...)
<                      (LES 'SPACE' SONT IGNORES)
<
<
DESIR:   EQU         $
         LAD         STDKU
         SVC         0
E4003:   EQU         $               < ON N'EST PAS SOUS :SYS ...
DESIR1:  EQU         $
         BSR         ASIMU           < A=CARACTERE COURANT DE L'ITEM1.
         CPI         " "
         JE          DESIR1          < LES 'SPACE' EN REPONSE SONT
                                     < DES ELEMENTS NEUTRES , ET
                                     < IGNORES ....
         RSR
         PAGE
<
<
<        A C C E S   A U   S G N  :
<
<
<        ARGUMENT :
<                    A=NVP D'ACCES.
<
<
<        RESULTAT :
<                    X=CONDITION DE RETOUR DU SGN.
<
<
GOSGN:   EQU         $
         STBY        SGN
         LAD         SGN
         SVC         0               < ACCES AU SGN.
         RSR
<
<        F I N   D U   C O D E   D E   '   A '.
<
<                    (POUR SA GENERATION EN TANT QU'ITEM, NE PAS CONFONDRE AVEC
<                     L'ESPACE MEMOIRE QU'IL OCCUPERA, CF CI-APRES).
<
FINCOD:  EQU         $
<
<        L O C A L   ' B I S '   D E   '   A '
<
LOCBIS:  DZS         FLOCS-LOCS      < POUR SUVEGARDER LA ZONE DU LOCAL INITIAL
                                     < A SUVEGARDER.
         PAGE
<
<
<        B U F F E R   S E C T E U R   E T   P I L E  :
<
<
STACK:   EQU         $
BUFFER:  EQU         STACK+SSTACK
SECTOR:  EQU         BUFFER
ZSECTX:  VAL         SECTOR-ZERO*2
ZSECT2:  EQU         ZERO+ZSECTX     < @OCTET DU BUFFER SECTEUR.
         $EQU        BUFFER+128      < POUR VALIDATION TAILLE MEMOIRE DE ' A'.
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
FIMPL:   EQU         $               < FIN D'IMPLANTATION.
XWOR%1:  VAL         FIMPL-IMPL      < ESPACE MEMOIRE TOTAL DE ' A'.
         IF          XWOR%1-'800-'10,XWOR%,XWOR%, < ON A DROIT A 2K - '10 MOTS.
         IF          ERREUR D'IMPLANTATION ( > 2K MOTS).
XWOR%:   VAL         0
XWOR%1:  VAL         FINCOD-IMPL     < TAILLE DU CODE SEUL DE ' A' (POUR SA
                                     < GENERATION EN TANT QU'ITEM).
XWOR%2:  VAL         ZERO-BRANCH+PILE-LTNI-LTNI
         DZS         XWOR%2-XWOR%1   < POUR COMPATIBILITE AUTRES PROCESSEURS.
         PAGE
<
<
<        G E N E R A T I O N   D U   P R O C E S S E U R :
<
<
         LOCAL
XXXLOC:  EQU         $
XXXCCI:  WORD        1               < RETOUR AU CCI.
XXXMOK:  BYTE        '6D;"O"
         ASCI        "K!"            < MESSAGE 'OK!'.
XXXDOK:  WORD        '0202           < ENVOI DU MESSAGE 'OK'.
         WORD        XXXMOK-ZERO*2
         WORD        4
XXXSGN:  WORD        '8402           < DEMANDE DE GENERATION DU PROCESSEUR.
         WORD        IMPL-ZERO*2     < @OCTET DE LA BRANCHE.
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2 < POUR COMPATIBILITE AUTRES
                                     < PROCESSEURS DE SMC.
         WORD        -1
         NLS
NOMOV1: @
         IF          '0006='F700,,XWOR%,
         LST
XXXOV1:  WORD        DEBOV1          < ADRESSE DEBUT OVERLAY 1.
         NLS
XWOR%:   VAL         0
NOMOV2: @
         IF          '0006='F700,,XWOR%,
         LST
XXXOV2:  WORD        DEBOV2          < ADRESSE DEBUT OVERLAY 2.
         NLS
XWOR%:   VAL         0
         LST
XXXPIL:  DZS         2               < PILE DE GENERATION.
         PROG
         USE         L,XXXLOC+'80
         WORD        XXXLOC+'80      < VALEUR INITIALE DE LA BASE L.
XXXGEN:  EQU         $
         LRP         L               < INITIALISATION DE LA BASE L.
         LA          -1,L
         LR          A,L
         LAD         XXXPIL-1        < INITIALISATION DE L'ADRESSE DE PILE.
         LR          A,K
         NLS
NOMOV2: @
         IF          '0006='F700,,XWOR%,
         LST
<
<        TENTATIVE DE GENERATION DE L'OVERLAY 2.
<
XXXGN4:  EQU         $
         LB          XXXSGN+1
         LA          XXXOV2          < PLACER SON ADRESSE DE DEBUT.
         SLLS        1
         STA         XXXSGN+1
         LAD         XXXSGN          < GENERATION.
         SVC         0
         STB         XXXSGN+1
         JE          XXXGN5          < OK ...
<
<        ERREUR - L'OVERLAY EXISTE DEJA.
<
         LAD         XXXCCI          < RETOUR CCI.
         SVC         0
         JMP         XXXGN4          < ET REESSAI.
<
<        BONNE GENERATION.
<
XXXGN5:  EQU         $
         LAD         XXXDOK          < ENVOI MESSAGE OK.
         SVC         0
         LAD         XXXCCI          < ET RETOUR AU CCI.
         SVC         0
         NLS
XWOR%:   VAL         0
NOMOV1: @
         IF          '0006='F700,,XWOR%,
         LST
<
<        TENTATIVE DE GENERATION DE L'OVERLAY 1.
<
XXXGN7:  EQU         $
         LB          XXXSGN+1
         LA          XXXOV1          < PLACER SON ADRESSE DE DEBUT.
         SLLS        1
         STA         XXXSGN+1
         LAD         XXXSGN          < GENERATION.
         SVC         0
         STB         XXXSGN+1
         JE          XXXGN8          < OK ...
<
<        ERREUR - L'OVERLAY EXISTE DEJA.
<
         LAD         XXXCCI          < RETOUR CCI.
         SVC         0
         JMP         XXXGN7          < ET REESSAI.
<
<        BONNE GENERATION.
<
XXXGN8:  EQU         $
         LAD         XXXDOK          < ENVOI MESSAGE OK.
         SVC         0
         LAD         XXXCCI          < ET RETOUR AU CCI.
         SVC         0
         NLS
XWOR%:   VAL         0
         LST
<
< TENTATIVE DE GENERATION :
<
XXXGN1:  EQU         $
         LAD         XXXSGN
         SVC         0               < ENVOI DEMANDE DE GENERATION.
         JNE         XXXGN2          < ERREUR : IL EXISTE DEJA!!!
<
< OK , BONNE GENERATION :
<
         LAD         XXXDOK
         SVC         0               < ENVOI DU MESSAGE OK.
<
< RETOUR DEFINITIF AU CCI :
<
XXXGN3:  EQU         $
         LAD         XXXCCI
         SVC         0               < RETOUR AU CCI.
         JMP         XXXGN3          < CAS DES !GO.
<
< CAS DES ERREURS DE GENERATION :
< LE PROCESSEUR EXISTE DEJA:
<
XXXGN2:  EQU         $
         LAD         XXXCCI
         SVC         0               < RETOUR PROVISOIRE AU CCI.
         JMP         XXXGN1          < TRY AGAIN LA GENERATION.
         END         XXXGEN



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