NMPROC:  VAL         "VO"            < NOM DU PROCESSEUR.
         IDP         "VO - RELEASE 03/03/1980"
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU GENERATEUR.
         WORD        0
PIMAGE:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
         PAGE
<
< PILE DU PROGRAMME :
<
SSTACK:  VAL         60              < IL FAUT CE QU'IL FAUT...
STACK:   DZS         SSTACK
         EOT         #SIP IMAGE 256#
NOM:     EQU         ZERO+PILE+5-LNOM-2  < NOM DE L'IMAGE VIDEO.
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO.
         IF          ORDI-"S",XWOR%,,XWOR%
ENTIM:   EQU         IMAG-LENTIM     < EN-TETE IMAGE (TRACE VIDEO SOLAR).
IMAG2:   EQU         IMAG+LIMAG      < IMAGE2 EST EN SOLAR L'IMAGE SCRATCH
                                     < SIMULEE. CECI DU FAIT QUE LES INTER-
                                     < POLATIONS SONT FAITES PAR LE SYSTEME
                                     < ET QUE PAR CONSEQUENT ON NE "SAIT"
                                     < PLUS TRACER SUR DISQUE SCRATCH.
XWOR%:   VAL         0
<
< 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
<
< BUFFER DES SECTEURS SCRATCHES :
<
SECTOR:  EQU         STACK+SSTACK
         DZS         128             < CELA PEUT TOUJOURS SERVIR !!!
         PAGE
<
<
<        L O C A L  :
<
<
         TABLE
M1:      BYTE        2;'6D
         ASCI        "??"
M9:      BYTE        5;'6D
         ASCI        "RAZ?"
M10:     BYTE        35;'6D
         ASCI        "MODE (AD=1/SB=2/OR=3/AND=4/EOR=5)="
M4:      BYTE        15;'6D
         ASCI        "GRAPHIQUE ZDC?"
M5:      BYTE        14;'6D
         ASCI        "TAILLE POINT= "
M6:      BYTE        17;'6D
         ASCI        "MEMOIRE SCRATCH "
M7:      BYTE        2;"O";"N";0
M8:      BYTE        3;"O";"F";"F"
M20:     BYTE        9;'6D
         ASCI        "COULEUR="
M21:     BYTE        6;'6D
         ASCI        "MODE="
         LOCAL
LOC:     EQU         $
<
< RELAIS A METTRE EN TETE DU LOCAL AFIN
< D'ABSOLUTISER LES DEPLACEMENTS D'ACCES SIMPLIFIANT
< AINSI L'ECRITURE DES SOUS-PROGRAMMES EN OVERLAY
< IMPLEMENTES DANS L'ITEM2 :
<
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        -1
         WORD        -1
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
<        RESET       00 ('80)
ARESET:  WORD        RESET           < MISE D'UN POINT A 0.
<        SET         01 ('81)
ASET:    WORD        SET             < MISE D'UN POINT A 1.
XWOR%:   VAL         0
<        INVER       10 ('82)
AINVER:  WORD        INVER           < INVERSION D'UN POINT.
<        TEST        11 ('83)
ATEST:   WORD        TEST            < TEST DE L'ETAT D'UN POINT.
<        EXISTENCE
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        -1
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
AVOISE:  WORD        VOISE           < TEST ETAT ET EXISTENCE.
XWOR%:   VAL         0
<
< MESSAGES :
<
AM1:     WORD        M1
AM4:     WORD        M4
AM5:     WORD        M5
AM6:     WORD        M6
AM7:     WORD        M7
AM8:     WORD        M8
AM9:     WORD        M9
AM10:    WORD        M10
AM20:    WORD        M20
AM21:    WORD        M21
CURSOR:  BYTE        "N";0           < CARACTERE DE DEBLOCAGE DU
                                     < CURSEUR (ERREUR A PRIORI).
         DZS         2               < COORDONNEES Y ET X.
REP:     DZS         2               < ENTREE DE NBRES HEXADECIMAUX.
<
< DEMANDES A CMS4 :
<
DEMSGN:  WORD        '0602           < CHARGEMENT DES OVERLAYS.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMCCI:  WORD        '0001           < APPEL DU CCI INTERACTIF.
DEMMEM:  WORD        '0004           < DEMANDE D'ALOCATION 8K MOTS.
RELMEM:  WORD        '0004           < DEMANDE D'ALLOCATION 4K MOTS.
         WORD        '4000
         WORD        '2000
         IF          ORDI-"S",XWOR%,,XWOR%
DEMM12:  WORD        '0004           < DEMANDE D'ALLOCATION 12K MOTS.
ATRSV:   WORD        TRSV            < TRACE SEGMENT VIDEO SOLAR.
         WORD        '6000
XWOR%:   VAL         0
DEMOUT:  WORD        '0202           < ECRITURE DES MESSAGES.
         WORD        0
         WORD        0
DEMIN:   WORD        '0101           < ENTREE SUR '01.
         WORD        REP-ZERO*2
         WORD        4
DEMREP:  WORD        '0101           < LECTURE 1 CARACTERE REPONSE.
         WORD        REP-ZERO*2
         WORD        1
OG:      WORD        '0103           < OPEN GRAPHIQUE DE '01.
CU:      WORD        '0106           < MISE EN FONCTION DU CURSEUR
         WORD        0               < GRAPHIQUE DE '01 (AMDEM=0).
LCU:     WORD        '0109           < LECTURE CURSEUR GRAPHIQUE
         WORD        CURSOR-ZERO*2   < DE '01.
         WORD        6
CG:      WORD        '0104           < CLOSE GRAPHIQUE DE '01.
         IF          ORDI-"T",XWOR%,,XWOR%
RDK:     WORD        '0C00           < LECTURE SCRATCH DU DISQUE.
         WORD        SECTOR-ZERO*2
         WORD        128*2
         WORD        0               < NUMERO DU SECTEUR.
WDK:     WORD        '0C02           < ECRITURE SCRATCH DU DISQUE.
         WORD        SECTOR-ZERO*2
         WORD        128*2
         WORD        0               < NUMERO DU SECTEUR.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
AEDKS:   WORD        EDKS            < ECHANGE IMAGE2 <--> DK SCRATCH.
DMEDKS:  WORD        '0C00           < ECHANGE DK SCRATCH <--> IMAGE2.
         DZS         1               < ADRESSE OCTETS MEMOIRE.
         WORD        128*2           < COMPTE D'OCTETS.
         DZS         1               < ADRESSE SECTEUR DK SCRATCH.
XWOR%:   VAL         0
LOADI:   WORD        '0502           < RECUPERATION D'UNE IMAGE.
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
DELI:    WORD        '0302           < DELETE D'UNE IMAGE.
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
STORI:   WORD        '0402
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
         IF          ORDI-"S",XWOR%,,XWOR%
STABIL:  WORD        '8A01           < DEMANDE DE STABILISATION IMAGE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        TVPV            < SUR LE PROCESSEUR VERT.
XWOR%:   VAL         0
<
< CONSTANTES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTRIES DANS KO.
NGE:     WORD        "GE"            < NOM DU PROCESSEUR GE.
         IF          ORDI-"T",XWOR%,,XWOR%
ACNSYS:  ASCI        ":SYS"
XWOR%:   VAL         0
NMOTS:   WORD        2*LTNI          < NBRE DE MOTS DE ITEM1+ITEM2.
ALIMAG:  WORD        LIMAG           < NBRE DE MOTS DE L'IMAGE.
NMPL:    WORD        CNMPL           < NBRE MOTS DE 16 BITS PAR LIGNE.
NLIG:    WORD        1024/DY-1       < NBRE DE LIGNES/IMAGE-1.
NPPL:    WORD        CNMPL*16-1      < NBRE DE POINTS/LIGNE-1.
ITEST:   WORD        1               < 0 : TEST SUR LA VALEUR 0 DES POINTS,
                                     < 1 : TEST SUR VALEUR 1 DES POINTS.
X:       VAL         1               < COORDONNEE X D'UN POINT.
Y:       VAL         0               < COORDONNEE Y D'UN POINT.
POINT:   DZS         2               < POINT COURANT CURSEUR VIDEO.
         IF          ORDI-"T",XWOR%,,XWOR%
TEMPO:   WORD        '400*2          < TEMPO DE CLIGNOTEMENT VIDEO.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
TEMPO:   WORD        5*2             < NOMBRE DE CLIGNOTEMENTS CURSEUR.
XWOR%:   VAL         0
INDIC:   WORD        0               < RESULTAT (0/1) DES TESTS
                                     < VIRTUELS.
SAVE:    WORD        0               < VARIABLE TEMPORAIRE DE 'PS'.
INDM:    WORD        0               < 0 : SCRATCH INACTIVE.
C3:      WORD        3               < POUR MULTIPLIER
C4:      WORD        4               <                 PAR 4/3...
<
< SEGMENT D'INTERFACE ZDC :
<
NOMSEG:  WORD        0               < MOT DE VALIDATION.
SEG:     DZS         4
SEGORG:  EQU         SEG+0           < ORIGINE D'UN SEGMENT.
SEGEXT:  EQU         SEG+2           < EXTREMITE D'UN SEGMENT.
LONSEG:  VAL         $-NOMSEG*2
         IF          ORDI-"T",XWOR%,,XWOR%
AIMAGZ:  WORD        IMAG-1,X        < RELAI POUR RAZER L'IMAGE.
ADICO:   WORD        DICO            < DICHOTOMIE D'UN SEGMENT.
XWOR%:   VAL         0
ATRACE:  WORD        TRACE           < TRACE DICHOTOMIQUE D'UN
                                     < SEGMENT VIDEO.
ATRACV:  WORD        TRACEV          < IDEM A 'TRACE' SANS 'ZDC'.
         IF          ORDI-"S",XWOR%,,XWOR%
AIMAG2:  WORD        IMAG2-1,X       < RELAI DE RAZ IMAGE2.
XWOR%:   VAL         0
IGRAPH:  WORD        0               < 0=EMETTRE PAR LA ZDC 'SEG'.
<
< INTERFACE D'ACCES ZDC :
<
STOGS:   WORD        '000A
         WORD        NOMSEG-ZERO*2
         WORD        LONSEG
         WORD        'FFC0
GETGS:   WORD        '0008
         WORD        NOMSEG-ZERO*2
         WORD        SEG-NOMSEG*2
         WORD        'C000
ASTORE:  WORD        STORE           < ENVOI SEGMENT DANS ZDC.
<
< RELAIS DIVERS :
<
ATYP:    WORD        ITEM2+IINDIC    < ACCES AU TYPE DE L'ITEM2.
AITEM2:  WORD        ITEM2+LTN       < POINT D'ENTREE D'UN SOUS-
                                     < PROGRAMME EN OVERLAY
                                     < DANS L'ITEM2.
ASECT:   WORD        SECTOR-1,X      < RELAI DE RAZ BUFFER SECTEUR.
AIMAG1:  WORD        IMAG,X          < ACCES A L'IMAGE VIDEO COURANTE.
AIMAG0:  WORD        0               < POUR METTRE LES SECTEURS
                                     < SCRATCH DANS L'IMAGE COURANTE.
ASECT1:  WORD        SECTOR,X        < ACCES AU SECTEUR COURANT.
AIMAG:   WORD        IMAG-1,X        < RELAI DE RAZ IMAGE COURANTE.
         IF          ORDI-"S",XWOR%,,XWOR%
AEIC:    DZS         1               < ADRESSE MOT EN-TETE IMAGE COURANTE
                                     < IMAGE1 OU IMAGE2.
XWOR%:   VAL         0
AREP:    WORD        REP,X           < RELAI D'ACCES AUX REPONSES.
ACLIGN:  WORD        CLIGN           < CLIGNOTEMENT DES POINTS VIDEO.
         IF          ORDI-"T",XWOR%,,XWOR%
ASETV:   WORD        SETV            < MISE D'UN POINT VIRTUEL A 1.
ARSETV:  WORD        RSETV           < MISE D'UN POINT VIRTUEL A 0.
AINVEV:  WORD        INVEV           < INVERSION D'UN POINT VIRTUEL.
ATESTV:  WORD        TESTV           < TEST D'UN POINT VIRTUEL.
AXISTV:  WORD        XISTV           < EXISTENCE VIRTUELLE...
APS:     WORD        PS              < SBT.
APR:     WORD        PR              < RBT.
API:     WORD        PI              < IBT.
APT:     WORD        PT              < TBT.
AOP:     WORD        0               < PS/PR/PI/PT SUIVANT LES BESOINS.
XWOR%:   VAL         0
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
         IF          ORDI-"T",XWOR%,,XWOR%
AEXIST:  WORD        EXIST           < EXISTENCE D'UN POINT.
XWOR%:   VAL         0
APILE:   WORD        PILE-1          < PILE DE SMC.
ASTACK:  WORD        STACK-1         < PILE DE KO.
AI1:     WORD        ITEM1-1,X       < RELAI DE RAZ ITEM1.
AI2:     WORD        ITEM2-1,X       < RELAI DE RAZ ITEM1+ITEM2.
         IF          ORDI-"T",XWOR%,,XWOR%
ASP3:    WORD        SP3             < STABILISATION IMAGE VIDEO
                                     < SI :SYS, 0 SINON.
XWOR%:   VAL         0
AGOGE:   WORD        GOGE            < RETOUR A GE.
APRINT:  WORD        PRINT           < EDITION DES MESSAGES.
AINTER:  WORD        INTER           < INTERROGATION OUI/NON.
AHEX:    WORD        HEX             < CONVERSION ASCI --> BINAIRE.
ACOORD:  WORD        COORD           < ENTREE COORDONNE X/Y.
ACOEF:   WORD        COEF            < ENTREE RAPPORT DE ZOOM.
APAS:    WORD        PAS             < ENTREE D'UN PAS (#0).
ACUR:    WORD        CUR             < ENTREE DU CURSEUR GRAPHIQUE.
         IF          ORDI-"T",XWOR%,,XWOR%
ACONTI:  WORD        CONTI           < RETOUR DE LA ZONE SCRATCH
                                     < EN MEMOIRE.
XWOR%:   VAL         0
ARAZDK:  WORD        RAZDK           < RAZ DE LA ZONE SCRATCH DK.
         IF          ORDI-"S",XWOR%,,XWOR%
OPER:    DZS         1               < OPERATION CHOISIE (REPONSE A LA
                                     < QUESTION MODE...) :
                                     < 1=AD, 2=SB, 3=OR, 4=AND, 5=EOR.
MODI:    DZS         1               < MODE DEMANDE POUR L'INTERPOLATION
                                     < ('TRSV') :
                                     < = -1 : IBT,
                                     < = -2 : RBT,
                                     < = -3 : SBT.
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
AINS:    WORD        INS             < INSTRUCTION VARIABLE DE 'PS'.
ACODE:   WORD        CODE,X          < LISTE DES CODES POSSIBLES
                                     < POUR 'INS' (L'OCTET 0
                                     < EN CONTIENT LE NOMBRE).
CODE:    EQU         $
         BYTE        5;'89;'88;'92;'93;'94
XWOR%:   VAL         0
ACOM:    WORD        COM1,X          < RECONNAISSANCE DES COMMANDES.
ALOOP:   WORD        LOOP            < ENTREE DES COMMANDES.
<
< CONSTANTES SPIRALES :
<
NM:      WORD        1               < NBRE DE PAS DE GENERATION
                                     < DE LA SPIRALE.
         IF          ORDI-"T",XWOR%,,XWOR%
NX:      WORD        1               < POUR CALCULER LA LONGUEUR
                                     < HORIZONTALE.
NY:      WORD        1               < ID. SUR LA VERTICALE.
SNX:     WORD        0               < DECOMPTEUR A PARTIR DE NX.
SNY:     WORD        0               < DECOMPTEUR A PARTIR DE NY.
ASPI:    WORD        SPIR            < TRACE D'UNE SPIRALE.
AVALXY:  WORD        VALXY           < VALIDATION DE (X,Y); SI OK,
                                     < TRACE DU POINT.
AVALN:   WORD        VALN            < VALIDATION DE NX ET NY PAR
                                     < RAPPORT A NM.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
X1:      DZS         1               < POUR TRACE SEGMENT.
Y1:      DZS         1               < IDEM.
X2:      DZS         1               < IDEM.
Y2:      DZS         1               < IDEM.
IPCONF:  DZS         1               < INDICATEUR POINTS CONFONDUS :
                                     < = 0 : POINTS DISTINCTS,
                                     < = 1 POINTS CONFONDUS.
                                     < UTILISE LORSQU'ON DOIT TRACER UN
                                     < SEGMENT D'UN POINT P1 VERS UN POINT P2,
                                     < SI LES DEUX POINTS SONT CONFONDUS, IL
                                     < EST INUTILE D'APPELER LE SYSTEME POUR
                                     < INTERPOLER.
<
< DONNEES D'ACCES AUX 8
< COULEURS SIMULTANEMENT :
<
NCOOL::  VAL         3               < NOMBRE DE PROCESSEURS DE COULEURS.
MODEV:   WORD        0               < =0 : MODE 8 COULEURS "OFF",
                                     < #0 : DONNE ALORS LE MODE DE TRACE (VOIR
                                     <      LA LISTE 'EVIDEO' ET LE MOT 'COLOR'.
COLOR:   WORD        0               < COULEUR DU TRACE (0-8).
AVIDEO:  WORD        EVIDEO,X        < TABLE DE TRANSCODAGE ENTRE LES MODES
                                     < DEMANDES, ET LA COMMANDE DE 'DKU'.
XWOR%:   VAL         0
<
< MISE EN PLACE DES ROUTINES DE TRAITEMENT DES POINTS :
< (X=-3 : SET / X=-2 : RESET / X=-1 : INVER)
<
         IF          ORDI-"T",XWOR%,,XWOR%
LRR:     WORD        $+3+1,X;SET;RESET;INVER
LRV:     WORD        $+3+1,X;SETV;RSETV;INVEV
APOINT:  WORD        0               < CONTIENT L'UNE DES 6 ADRESSES
                                     < PRECEDENTES.
XWOR%:   VAL         0
MODE:    WORD        -3              < MODE 'SET' A PRIORI; PERMET
                                     < DE POSITIONNER 'APOINT'.
<
< CONSTANTES DICHOTOMIQUES :
<
DICOX:   WORD        0               < X DU POINT VIDEO COURANT M.
DICOY:   WORD        0               < Y DU POINT VIDEO COURANT M.
DICOX1:  WORD        0               < X DE L'ORIGINE VIDEO COURANTE M1.
DICOY1:  WORD        0               < Y DE L'ORIGINE VIDEO COURANTE M1.
DICOX2:  WORD        0               < X EXTREMITE VIDEO COURANTE M2.
DICOY2:  WORD        0               < Y EXTREMITE VIDEO COURANTE M2.
         IF          ORDI-"T",XWOR%,,XWOR%
<
< TOPOGRAPHIE MEMOIRE :
<
NSEC:    VAL         LIMAG/128       < NRE DE SECTEURS POUR UNE IMAGE.
XSECR:   VAL         2*LTNI-128
NSECR:   VAL         XSECR/128       < NBRE DE SECTEURS RESIDANTS
                                     < SI PAS DE TRANSFORMATION.
XSECRT:  VAL         LTNI-128
NSECRT:  VAL         XSECRT/128      < NBRE DE SECTEURS RESIDANTS
                                     < SI TRANSFORMATION.
ANCIEN:  WORD        1               < EST INCREMENTE DE 1 A CHAQUE
                                     < MODIFICATION DE LA MEMOIRE
                                     < VIRTUELLE (CONSTITUE DONC
                                     < UNE HORLOGE).
ALS:     WORD        LSECT-1,X       < RELAI D'INITIALISATION DE
                                     < LA LISTE LSECT.
ALSECT:  WORD        LSECT,X         < REALI D'ACCES A LSECT.
ATOPO:   WORD        TOPO-1,X        < RELAI D'ACCES A TOPO.
ASECTC:  WORD        0               < RELAI COURANT D'ACCES A UN
                                     < SECTEUR MANIPULE.
AUSE:    WORD        USE-1,X         < RELAI D'ACCES A USE.
INFINI:  WORD        '7FFF
CSECT:   WORD        0               < MEMORISE LE SECTEUR COURANT.
WDKT:    WORD        '0C02           < ECRITURE 1 SECTEUR TOPO.
         WORD        0
         WORD        128*2
         WORD        0
RDKT:    WORD        '0C00           < LECTURE 1 SECTEUR TOPO.
         WORD        0
         WORD        128*2
         WORD        0
ABUF1:   WORD        PILE-XSECR/128*128*2
                                     < @OCTET DU 1ER BUFFER LIBRE.
ABUF:    WORD        PILE-XSECR/128*128*2
                                     < 1ER BUFFER LIBRE SI PAS TRANS.
ABUFT:   WORD        PILE-XSECRT/128*128*2
                                     < 1ER BUFFER LIBRE SI TRANS.
ANSECR:  WORD        NSECR           < NBRE DE SECTEURS RESIDANTS
                                     < INITIALISE SUR 'PAS TRANS'.
AWSE:    WORD        WSE             < ROUTINE DE REECRITURE
                                     < D'UN SECTEUR TOPO.
AVIRE:   WORD        VIRE            < ROUTINE SUPPRIMANT LA TOPO.
ARESID:  WORD        RESID           < REND LE SECTEUR SCRATCH (B)
                                     < RESIDENT EN MEMOIRE.
<
< LISTE DES SECTEURS REELS (DE 0 A NSEC-1) :
<
LSECT:   EQU         $
         DO          NSEC
         WORD        -1              < INITIALEMENT NON RESIDENT.
<
< LISTE D'OCCUPATION DES BUFFERS (DE 1 A NSECR) :
<
TOPO:    EQU         $
         DO          NSECR
         WORD        -1              < INOCCUPE INITIALEMENT.
<
< COMPTEUR D'USAGE DES BUFFERS :
<
USE:     EQU         $
         DO          NSECR
         WORD        0               < INUTILISE INITIALEMENT.
XWOR%:   VAL         0
<
< LISTE DES COMMANDES RECONNUES :
<
COM1:    EQU         $
         WORD        "A";GENA
         WORD        "B";GENB
         WORD        "+";GENS
         WORD        "-";GENR
         WORD        "I";GENI
         WORD        "0";GEN0
         WORD        "1";GEN1
         WORD        "2";GEN2
         WORD        "F";GENF
         WORD        "S";GENE
         WORD        "V";GENV
         WORD        "W";GENW
         WORD        "Z";GENZ
         WORD        "T";GENT
         WORD        "R";GENCCI
         WORD        "M";GENM
         IF          ORDI-"S",XWOR%,,XWOR%
         WORD        "5";GEN5
         WORD        "6";GEN6
         WORD        "7";GEN7
         WORD        "K";GENCOL
         WORD        "L";GENMOD
XWOR%:   VAL         0
         WORD        -1              < FIN DE LISTE.
EVIDEO:  EQU         $               < MODE :
         WORD        '0000           < =0 : "OFF",
         WORD        '0180           < =1 : "OR" FLOU,
         WORD        '0080           < =2 : "AND" FLOU,
         WORD        'FF80           < =3 : "EOR" FLOU,
         WORD        '01B0           < =4 : "FORCAGE NIVEAU",
         WORD        '01F0           < =5 : "NE TRACER QUE SUR LE NOIR",
         WORD        '0380           < =6 : "OR" BINAIRE,
         WORD        '0280           < =7 : "AND" BINAIRE,
         WORD        'FD80           < =8 : "EOR" BINAIRE.
LVIDEO:: VAL         $-EVIDEO-1
         PAGE
         PROG
<
<
<        E D I T I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE.
<
<
PRINT:   EQU         $
         PSR         C,X
         LR          A,C             < C=@MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2
         LAD         DEMOUT
         SVC         0               < EDITION DU MESSAGE.
         PLR         C,X
         RSR
<
<
<        I N T E R R O G A T I O N  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    B=0 : REPONSE=OUI,
<                      1 : REPONSE=NON,
<                    CARRY POSITIONNE PAR UN 'CPZR B'.
<
<
INTER1:  EQU         $
         LR          Y,A             < RESTAURE A=@MESSAGE.
INTER:   EQU         $
         LR          A,Y             < SAVE Y=@MESSAGE.
         BSR         APRINT          < EMISSION DU MESSAGE (A).
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBI         0               < B=0 (OUI A PRIORI).
         LBY         REP             < A=CARACTERE REPONDU.
         CPI         "O"
         JE          INTER2          < OUI.
         LBI         1               < B=1 (NON A PRIORI).
         CPI         "N"
         JNE         INTER1          < INCOMPREHENSIBLE...
INTER2:  EQU         $
         CPZR        B               < POSITIONNEMENT CODES CONDITION.
         RSR
<
<
<        E N T R E E   C U R S E U R
<        G R A P H I Q U E  :
<
<
<        RESULTAT :
<                    SI LE CARACTERE FRAPPE N'EST PAS 'C',
<                    X,Y=COORDONNE VIDEO DU CURSEUR GRAPHIQUE,
<                    POUR 'C', LE PROGRAMME REBOUCLE EN
<                    CLIGNOTANT.
<
<
CUR:     EQU         $
         LAD         OG
         SVC         0
         LAD         CU
         SVC         0
         LAD         LCU
         SVC         0
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         JAE         CUR2            < ON N'EST PAS SOUS :SYS..
         WORD        '1EC5           < SOUS :SYS, ON STABILISE IMAGE.
CUR2:    EQU         $
XWOR%:   VAL         0
         LA          CURSOR+1        < Y(CURSEUR).
         MP          C4              < POUR ATTEINDRE
         DV          C3              <                TOUTE LA VIDEO...
         SLRS        DEDY
         SB          NLIG
         NGR         A,Y             < Y(VIDEO).
         LA          CURSOR+2        < X(CURSEUR).
         SLRS        DEDX
         LR          A,X             < X(VIDEO).
         LBY         CURSOR          < A=CARACTERE DE DEBLOCAGE.
         CPI         "C"             < EST-CE UN CLIGNOTEMENT ???
         JNE         CUR3            < NON - ALLER VERS LA SORTIE.
         BSR         ACLIGN          < OUI - CLIGNOTEMENT DU POINT (X,Y).
         JMP         CUR             < ET ON REBOUCLE.
CUR3:    EQU         $
         STX         POINT+X         < SAVE LES COORDONNEES
         STY         POINT+Y         < DU CURSEUR VIDEO.
         RSR                         < NON, ON SORT...
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        T R A C E   D I C H O T O M I Q U E   D ' U N   S E G M E N T  :
<
<
DICO:    EQU         $
         LA          DICOX1          < A=X1.
         AD          DICOX2          < A=X1+X2.
         SLRS        1               < A=(X1+X2)/2.
         STA         DICOX           < X DU MILIEU DE M1M2.
         LA          DICOY1          < A=Y1.
         AD          DICOY2          < A=Y1+Y2.
         SLRS        1               < A=(Y1+Y2)/2.
         STA         DICOY           < Y DU MILIEU DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 :
<
         SB          DICOY1          < A=Y-Y1.
         JANE        DICO31          < M#M1.
         LA          DICOX           < A=X.
         SB          DICOX1          < A=X-X1.
         JAE         DICO32          < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31:  EQU         $
         LA          DICOY           < A=Y.
         SB          DICOY2          < A=Y-Y2.
         JANE        DICO30          < M#M2 ET M#M1.
         LA          DICOX           < A=X.
         SB          DICOX2          < A=X-X2.
         JANE        DICO30          < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32:  EQU         $
         LX          DICOX
         LY          DICOY
         BSR         ASPI            < SPIRALE CENTREE SUR M=(M1+M2)/2.
         RSR                         < ARRET PROVISOIRE DE LA DICHOTOMIE
                                     < DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30:  EQU         $
         LA          DICOX2          < A=X2.
         LB          DICOY2          < B=Y2.
         PSR         A,B             < SAVE LE POINT M2 COURANT.
         LA          DICOX           < A=X.
         STA         DICOX2          < X2<--X.
         LA          DICOY           < A=Y.
         STA         DICOY2          < Y2<--Y.
         BSR         ADICO           < DICHOTOMIE SUR LE SEGMENT M1M.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASPI            < SPIRALE CENTREE SUR M2.
         STX         DICOX1          < X1<--X2.
         STY         DICOY1          < Y1<--Y2.
         PLR         A,B             < RESTAURATION DU POINT M2 APRES
                                     < LE CHANGEMENT DU POINT M1.
         STA         DICOX2          < RESTAURE X2.
         STB         DICOY2          < RESTUARE Y2.
         JMP         DICO            < VERS LA POURSUITE DE LA DICHOTOMIE.
XWOR%:   VAL         0
<
<
<        T R A C E   D ' U N   S E G M E N T   V I D E O  :
<
<
TRACEV:  EQU         $
         LA          INDM
         TBT         15              < SCRACTCH EST-ELLE ACTVIVE ???
         JNC         NTRACV          < NON, RIEN A FAIRE...
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        CHOIX   MODE DE TRACE POUR L'INTERPOLATEUR ('MODI')  SUR IMAGE2
<        EN FONCTION DE 'OPER' ET 'MODE' :
<
<        - SI 'MODE' = -1 (INVERSION) ON FERA 'MODI'=IBT, QUEL QUE SOIT OPER,
<        - SI 'MODE' = -2 (NOIR)      ON FERA 'MODI'=RBT, QUEL QUE SOIT OPER,
<        - SI 'MODE' = -3 (BLANC)     ON FERA :
<                                    - 'MODI'=SBT SI 'OPER'=OR,
<                                    - 'MODI'=IBT SI 'OPER'=EOR,
<                                    - RIEN DU TOUT SI 'OPER'=AND.
<        - NOTA:     SI 'OPER' = AD OU SB, ON NE FAIT JAMAIS RIEN
<                    SUR IMAGE2.
<
         LRM         A
         WORD        IMAG2-LENTIM    < ADRESSE MOT EN-TETE IMAGE COURANTE,
         STA         AEIC            < POUR 'TRSV'.
<
         STZ         MODI            < VALEUR INITIALE.
         LA          OPER
         ADRI        -3,A
         JAL         NTRACV          < SI 'OPER' = AD OU SB, ON NE FAIT RIEN.
< ON EST SUR ICI QUE 3 <= 'OPER' <= 5.
         LA          MODE
         CPI         -1              < TEST 'MODE' :: IBT.
         JE          TRAIBT
         CPI         -2              < TEST 'MODE' :: RBT.
         JE          TRARBT
< ICI, 'MODE' = SBT.
         LA          OPER            < VOYONS DONC 'OPER'.
         CPI         4
         JE          NTRACV          < C'EST AND, RIEN A FAIRE...
         CPI         5
         JE          TRAIBT          < C'EST EOR.
< ICI, 'MODE' = SBT  ET  'OPER' = OR.
TRASBT:  EQU         $               < FAIRE 'MODI' = -3 ('SBT').
         DC          MODI
TRARBT:  EQU         $               < FAIRE 'MODI' = -2 ('RBT').
         DC          MODI
TRAIBT:  EQU         $               < FAIRE 'MODI' = -1 ('IBT').
         DC          MODI
XWOR%:   VAL         0
         PSR         X,Y,C
         JMP         TRACE1          < IDEM A 'TRACE' MAIS IGNORE
                                     < SYSTEMATIQUEMENT LA 'ZDC' !!!
TRACE:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LA          MODE
         STA         MODI            < 'MODI' = 'MODE' (TRACE "REEL").
<
         LRM         A
         WORD        ENTIM           < ADREESSE EN-TETE IMAGE1 POUR 'TRSV'.
         STA         AEIC
XWOR%:   VAL         0
         PSR         X,Y,C
<
< MODE GRAPHIQUE ???
<
         CPZ         IGRAPH
         JNE         TRACE1          < NON, JUSTE VIDEO.
         LA          DICOX1
         SLLS        DEDX
         STA         SEGORG+X        < X(ORIGINE GRAPHIQUE).
         LA          DICOY1
         SB          NLIG
         NGR         A,A
         SLLS        DEDY
         STA         SEGORG+Y        < Y(ORIGINE GRAPHIQUE).
         LA          DICOX2
         SLLS        DEDX
         STA         SEGEXT+X        < X(EXTREMITE GRAPHIQUE).
         LA          DICOY2
         SB          NLIG
         NGR         A,A
         SLLS        DEDY
         STA         SEGEXT+Y        < Y(EXTREMITE GRAPHIQUE).
         BSR         ASTORE          < ENVOI DU SEGMENT EN ZDC.
TRACE1:  EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        T R A C E   D ' U N   " S E G M E N T "   V I D E O   E N
<
<        S O L A R.
<
<
<          ON VA REMPLIR DEUX CARRES DE TAILLE 'NM' * 'NM' CENTRES
<        RESPECTIVEMENT EN M1 ET M2 (DICOX1,DICOY1),(DICOX2,DICOY2)
<        EN PROCEDANT COMME CECI:
<          EN CHAQUE POINT P1 DU CARRE 1 ON TIRE UN TRAIT VERS LE POINT
<        CORRESPONDANT P2 DU CARRE 2.
<
         PSR         A,B,X
<
< POSITIONNEMENT DE L'INDICATEUR 'IPCONF' : POINTS CONFONDUS.
<
         STZ         IPCONF          < DISTINCTS A PRIORI.
         LA          DICOX1
         CP          DICOX2
         JNE         TRAC3
         LA          DICOY1
         CP          DICOY2
         JNE         TRAC3
         IC          IPCONF          < POINTS CONFONDUS.
TRAC3:   EQU         $
         LA          NM              < TAILLE DEMANDEE.
         ADRI        -1,A
         SLRD        16+1            < 'B' = E((NM-1)/2).
<
<        ON VA PARTIR DU POINT INFERIEUR GAUCHE DU CARRE A DECRIRE.
<
< X1,Y1 = COORDONNEES POINT INFERIEUR GAUCHE DU CARRE 1 (M1).
         LA          DICOX1
         SBR         B,A
         STA         X1
         LA          DICOY1
         ADR         B,A
         STA         Y1
< X2,Y2 = COORDONNEES POINT INFERIEUR GAUCHE DU CARRE 2 (M2).
         LA          DICOX2
         SBR         B,A
         STA         X2
         LA          DICOY2
         ADR         B,A
         STA         Y2
<
         CPZ         IPCONF          < TEST POINTS CONFONDUS.
         JNE         TRAC5           < POINTS CONFONDUS, VERS TRAITEMENT
                                     < SIMPLIFIE.
<
<        ON VA MAINTENANT PARCOURIR POINT PAR POINT CES DEUX CARRES, ET
<        RELIER DEUX A DEUX LES POINTS CORRESPONDANTS.
<
         LX          NM              < TAILLE DEMANDEE.
TRAC1:   EQU         $
         PSR         X
         LA          X1
         LB          X2
         PSR         A,B             < SAVE LES X.
         LX          NM              < POUR AVOIR 'NM' * 'NM'.
TRAC2:   EQU         $
         BSR         ATRSV           < TRACE SEGMENT P1-P2.
         IC          X1
         IC          X2
         JDX         TRAC2           < POINT SUIVANT.
         PLR         A,B             < RESTAURATION DES X.
         STA         X1
         STB         X2
         DC          Y1
         DC          Y2
         PLR         X
         JDX         TRAC1
         JMP         TRAC4
<
TRAC5:   EQU         $
<
<        POINTS CONFONDUS, TRAITEMENT SIMPLIFIE :
<                      ON VA SE CONTENTER DE REMPLIR UN CARRE DE SURFACE
<                    'NM' * 'NM' CENTRE EN (DICOX1,DICOY1).
<
         LA          X1
         AD          NM
         ADRI        -1,A
         STA         X2
         LX          NM              < NM SEGMENTS HORIZONTAUX A TRACER.
TRAC6:   EQU         $
         BSR         ATRSV           < TRACE 1 SEGMENT HORIZONTAL DU CARRE.
         DC          Y1
         DC          Y2
         JDX         TRAC6
<
TRAC4:   EQU         $
         CPZ         MODEV           < 3 OU 8 COULEURS ???
         JNE         TRAC10          < 8 COULEURS...
         LAD         STABIL          < 3 COULEURS :
         SVC         0               < VISUALISATION...
TRAC10:  EQU         $
         PLR         A,B,X
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
         LX          DICOX1          < X=X1.
         LY          DICOY1          < Y=Y1.
         PSR         X,Y             < SAVE M1.
         BSR         ASPI            < SPIRALE CENTREE SUR M1.
         LA          DICOX1
         CP          DICOX2
         JNE         TRACE2          < M1#M2 : TRACE D'UN SEGMENT...
         LA          DICOY1
         CP          DICOY2
         JE          TRACE3          < M1=M2 : TRACE UN POINT SEUL :
                                     < C'EST FINI....
TRACE2:  EQU         $
         BSR         ADICO           < TRACE DU SEGMENT M1M2.
         LX          DICOX2          < X=X2.
         LY          DICOY2          < Y=Y2.
         BSR         ASPI            < SPIRALE CENTREE SUR M2.
TRACE3:  EQU         $
         PLR         X,Y
         STX         DICOX1          < RESTORE M1.
         STY         DICOY1          < RESTORE M1.
XWOR%:   VAL         0
         PLR         X,Y,C
NTRACV:  EQU         $
         RSR
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        V A L I D A T I O N   N X   E T   N Y  :
<
<
<        RESULTAT :
<                    A=0 SI NX EY NY SONT OK.
<
<
VALN:    EQU         $
         LA          NX
         CP          NM
         JG          VALN1           < NX INVALIDE.
         LA          NY
         CP          NM
         JG          VALN1           < NY INVALIDE.
         LAI         0               < NX ET NY VALIDES.
VALN1:   EQU         $
         RSR
<
<
<        V A L I D A T I O N   E T   T R A C E
<        D U   P O I N T   ( X , Y )  :
<
<
<        ARGUMENT :
<                    X,Y=COORDONNEES D'UN POINT A VALIDER.
<
<
VALXY:   EQU         $
         LR          X,A
         JAL         VALXY1          < X INVALIDE.
         CP          NPPL
         JG          VALXY1          < X INVALIDE.
         LR          Y,A
         JAL         VALXY1          < Y INVALIDE.
         CP          NLIG
         JG          VALXY1          < Y INVALIDE.
         BSR         APOINT          < OK, TRACE DU POINT (X,Y).
VALXY1:  EQU         $
         RSR
<
<
<        T R A C E   D ' U N E   S P I R A L E  :
<
<
<        ARGUMENT :
<                    X,Y=COORDONNEES DU CENTRE.
<
<
SPIR:    EQU         $
         PSR         X,Y             < SAVE LE CENTRE.
         LAI         1
         STA         NX
         STA         NY
SPIR1:   EQU         $
<
< X=X+1 NX FOIS :
<
         LA          NX
         STA         SNX             < DECOMPTEUR HORIZONTAL.
SPIR2:   EQU         $
         BSR         AVALXY          < TRACE EVENTUEL DE (X,Y).
         ADRI        1,X             < X=X+1.
         DC          SNX
         JNE         SPIR2           < PARCOURS HORIZONTAL.
         IC          NX              < SI FIN, ON ALLONGE LA LONGUEUR
                                     < DE LA PROCHAINE HORIZONTALE.
         BSR         AVALN           < VALIDATION NX.
         JANE        SPIRF           < C'EST FINI...
<
< Y=Y+1 NY FOIS :
<
         LA          NY
         STA         SNY             < DECOMPTEUR VERTICAL.
SPIR12:  EQU         $
         BSR         AVALXY          < TRACE EVENTUEL DE (X,Y).
         ADRI        1,Y             < Y=Y+1.
         DC          SNY
         JNE         SPIR12          < PRACOURS VERTICAL.
         IC          NY              < SI FIN, ON ALLONGE LA LONGUEUR
                                     < DE LA PROCHAINE VERTICALE.
         BSR         AVALN           < VALIDATION NY.
         JANE        SPIRF           < C'EST FINI...
<
< X=X-1 NX FOIS :
<
         LA          NX
         STA         SNX
SPIR22:  EQU         $
         BSR         AVALXY          < TRACE EVENTUEL DE (X,Y).
         ADRI        -1,X            < X=X-1.
         DC          SNX
         JNE         SPIR22          < PARCOURS HORIZONTAL.
         IC          NX              < ALLONGEMENT HORIZONTAL.
         BSR         AVALN           < VALIDATION NX.
         JANE        SPIRF           < C'EST FINI...
<
< Y=Y-1 NY FOIS :
<
         LA          NY
         STA         SNY
SPIR32:  EQU         $
         BSR         AVALXY          < TRACE EVENTUEL DE (X,Y).
         ADRI        -1,Y            < Y=Y-1.
         DC          SNY
         JNE         SPIR32          < PARCOURS VERTICAL.
         IC          NY              < ALLONGEMENT VERTICAL.
         BSR         AVALN           < VALIDATION NY.
         JAE         SPIR1           < ET ON CONTINUE...
<
< C'EST FINI :
<
SPIRF:   EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STABIL          < STABILISATION DE L'IMAGE.
         SVC         0
XWOR%:   VAL         0
         PLR         X,Y
         RSR
XWOR%:   VAL         0
<
<
<        E N V O I   E N   Z D C  :
<
<
STORE:   EQU         $
         LAD         GETGS
         SVC         0
         CPZ         NOMSEG          < LE SEGMENT PRECEDENT A-T'IL
                                     < ETE ACQUITTE ???
         JNE         STORE           < NON, ON ATTEND.
         DC          NOMSEG          < OUI, VALIDONS LE SUIVANT.
         LAD         STOGS
         SVC         0               < QUE L'ON ENVOIE.
         RSR
         PAGE
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        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 !).
<
<
<
TRSV:    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,W
<
         LR          K,B
         ADRI        1,B             < ZONE RECEPTRICE.
         LA          AEIC            < ZONE EMETTRICE (A SAUVER DANS LA PILE).
         LR          A,W             < POUR BASER L'EN-TETE DE L'IMAGE.
         LXI         LENTIM          < LONGUEUR EN-TETE IMAGE.
         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.
<
< DISCRIMINATION 3/8 COULEURS :
<
         CPZ         MODEV           < ALORS ???
         JE          SEG10           < 3 COULEURS (ANCIEN MODE)...
<
< 8 COULEURS (NOUVEAU MODE) :
<
         LA          STABIL+1
         LB          STABIL+2
         LX          STABIL+3
         PSR         A,B,X,W         < SAUVEGARDE DE LA DEMANDE 'STABIL'.
         LRM         A,B,W
         WORD        ENTIM-ZERO*2    < (A)=ADRESSE DE L'EN-TETE (EN OCTETS),
         WORD        LENTIM*2        < (B)=LONGUEUR DE L'EN-TETE,
         WORD        ENTIM           < (W)=ADRESSE DE L'EN-TETE (EN MOTS).
         STA         STABIL+1        < MISE-A-JOUR
         STB         STABIL+2        <             DE LA
         STZ         STABIL+3        <                   DEMANDE 'STABIL'.
         LA          MODEV           < ACCES AU MODE DE TRACE,
         OR          COLOR           < CONCATENATION DE LA COULEUR,
         STA         DEPMOD,W        < ET MISE DANS L'EN-TETE...
         LRM         A
         WORD        '7F00
         STA         DEPSPA,W
         LAD         STABIL
         SVC         0               < ET TRACE...
         PLR         A,B,X,W
         STX         STABIL+3        < RESTAURATION
         STB         STABIL+2        <              DE LA
         STA         STABIL+1        <                    DEMANDE 'STABIL'...
         JMP         SEG11           < ET SORTIE...
<
< 3 COULEURS (ANCIEN MODE) :
<
SEG10:   EQU         $
<
< POSITIONNEMENT DU MODE DE TRACE ('SBT'/'RBT'/'IBT').
<
         STZ         DEPMOD,W        < MODE TRACE = 'RBT' A PRIORI.
         LA          MODI            < MODE DEMANDE.
         CPI         -2
         JE          SEG1            < C'EST 'RBT'.
         CPI         -3
         JE          SEGS            < C'EST 'SBT'.
         DC          DEPMOD,W        < C'EST 'IBT'.
         JMP         SEG1
SEGS:    EQU         $
         IC          DEPMOD,W        < C'EST 'SBT'.
SEG1:    EQU         $
         LA          AEIC
         SLLS        1               < ADRESSE OCTET EN-TETE IMAGE.
         LRM         X
         WORD        LENTIM+LIMAG*2  < LONGUEUR OCTETS EN-TETE + IMAGE.
         STA         STABIL+1
         STX         STABIL+2
         LB          STABIL+3        < SAVE COMPOSANTE DIFFUSION.
         STZ         STABIL+3        < INTERPOLATION SEULE.
         LAD         STABIL          < DEMANDE D'INTERPOLATION.
         SVC         0
         LRM         A,X
         WORD        IMAG-ZERO*2     < RESTAURATION ADRESSE ET
         WORD        LIMAG*2         < LONGUEUR IMAGE DANS LA DEMANDE.
         STA         STABIL+1
         STX         STABIL+2
         STB         STABIL+3        < RESTAURATION COMPOSANTE DIFFUSION.
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
SEG11:   EQU         $
         ADRI        -LENTIM,K       < RESTAURATION DE 'K'.
         LR          K,A
         ADRI        1,A             < ZONE EMETTRICE.
         LB          AEIC            < ZONE RECEPTRICE (A RESTAURER).
         LXI         LENTIM          < LONGUEUR.
         MOVE
<
         PLR         A,B,X,W
         RSR
         PAGE
EDKS:    EQU         $
<
<        E C H A N G E   D K   S C R A T C H  < - - > I M A G E 2   ( SOLAR)
<
<        ARGUMENT:
<                    - 'A' = 0 : LIRE.
<                    - 'A' = 2 : ECRIRE.
<
<        DETRUIT 'A'.
<
         PSR         X
<
         LR          A,X
         LA          DMEDKS
         ANDI        'FF00
         ORR         X,A
         STA         DMEDKS          < SENS DE L'ECHANGE.
<
         LRM         A
         WORD        IMAG2-ZERO*2
         STA         DMEDKS+1        < ADRESSE OCTET COURANTE.
<
         STZ         DMEDKS+3        < ADRESSE SECTEUR SCRATCH COURANTE.
<
XWOR%1:  VAL         LIMAG/128       < NOMBRE D'ECHANGES.
XWOR%2:  VAL         XWOR%1*128
         IF          LIMAG-XWOR%2,,XWOR%3,
         IF          ERREUR VOLONTAIRE : NOMBRE D'ECHANGES INCORRECT.
XWOR%3:  VAL         0
         LXI         XWOR%1          < NOMBRE D'ECHANGES.
EDKS1:   EQU         $
         PSR         X
<
         LAD         DMEDKS          < ECHANGE.
         SVC         0
         LA          DMEDKS+1
         AD          DMEDKS+2
         STA         DMEDKS+1        < NOUVELLE ADRESSE COURANTE.
         IC          DMEDKS+3        < NOUVELLE ADRESSE SECTEUR COURANTE.
<
         PLR         X
         JDX         EDKS1
<
         PLR         X
         RSR
XWOR%:   VAL         0
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        R O U T I N E   D E   C R E A T I O N
<        D ' I M A G E S   V I R T U E L L E S  :
<
<
<        ARGUMENT :
<                    X=X DU POINT A TRAITER,
<                    Y=Y DU POINT A TRAITER.
<
<
<        RESULTAT :
<                    LE CARY EST POSITIONNE POUR 'TESTV', DE
<                    PLUS, LE SECTEUR COURANT PEUT CHANGER...
<
<
PS:      EQU         $
         STA         SAVE            < SAUVEGARDE TEMPORAIRE DU
                                     < MOT COURANT DE L'IMAGE.
         LAI         0               < GENERATION D'UN
         SBT         0,X             < MASQUE.
INS:     OR          SAVE            < INSTRUCTION VARIABLE (AD,
                                     < SB, OR, AND, EOR) ENTRE
                                     < LE MASQUE ET LE MOT COURANT.
         RSR
PR:      EQU         $
         RBT         0,X
         RSR
PI:      EQU         $
         IBT         0,X
         RSR
PT:      EQU         $
         CPZ         ITEST           < TEST DU MODE 0/1 DE TEST.
         JNE         PT1             < MODE 1.
         IBT         0,X             < MODE 0.
PT1:     EQU         $
         TBT         0,X
         LAI         1               < A EST DESTRUCTIBLE !!!
         SBCR        A               < CALCUL DU RESULTAT,
         STA         INDIC           < ET TRANSMISSION A 'EXISTV'.
         RSR
<
<        A C C E S   I M A G E   V I R T U E L L E  :
<
SETV:    EQU         $
         LA          APS             < SBT.
         JMP         VIRT
RSETV:   EQU         $
         LA          APR             < RBT.
         JMP         VIRT
TESTV:   EQU         $
         LA          APT             < TBT.
         JMP         VIRT
INVEV:   EQU         $
         LA          API
VIRT:    EQU         $
         STA         AOP             < MISE EN PLACE DE LA ROUTINE
                                     < VARIABLE...
         PSR         B,X,Y
         LR          Y,A
         MP          NMPL            < B=NUMERO 1ER MOT DE LA LIGNE
                                     < CONTENANT LE POINT ARGUMENT.
         LR          X,A
         SLRS        4
         ADR         A,B             < B=NUMERO DU MOT CONTENANT
                                     < LE POINT ARGUMENT.
         LAI         '0F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT ARGUMENT DANS LE
                                     < MOT (B).
         LR          B,A
         SLRD        7               < A=NUMERO DU SECTEUR LE CONTENANT.
         XR          A,B             < B=NUMERO DU SECTEUR.
         SLRS        9               < A=NUMERO DU MOT DANS LE SECTEUR.
         LR          A,Y             < Y=NUMERO DU MOT DANS LE SECTEUR.
         BSR         ARESID          < REND LE SECTEUR (B) RESIDENT.
         XR          X,Y             < X=NUMERO MOT, Y=NUMERO BIT.
         LA          &ASECTC         < ACCES MOT.
         XR          X,Y             < X=NUMERO BIT, Y=NUMERO MOT.
         BSR         AOP             < EXECUTION OPERATION SPECIFIQUE.
         XR          X,Y             < X=NUMERO MOT, Y=NUMERO BIT.
         LB          AOP             < ACCES A LA FONCTION DEMANDEE.
         XR          A,B
         CP          APT             < EST-CE LE TEST VIRTUEL ???
         XR          A,B
         JE          VIRT3           < OUI, DONC PAS DE MISE A JOUR
                                     < DE L'IMAGE VIRTUELLE...
         STA         &ASECTC         < MAJ IMAGE VIRTUELLE.
VIRT3:   EQU         $
         PLR         B,X,Y
         RSR
<
<
<        R E S I D E N C E   D ' U N   S E C T E U R  :
<
<
<        ARGUMENT :
<                    B=NUMERO DU SECTEUR A RENDRE RESIDENT.
<
<
RESID:   EQU         $
         PSR         X,Y
         LR          B,X             < X=SECTEUR REFERENCE.
         LA          &ALSECT
         JAG         VIRT1           < LE SECTEUR REFERENCE EST DEJA
                                     < RESIDENT A L'ADRESSE=(A).
<
< CAS OU LE SECTEUR REFERENCE (X) N'EST PAS RESIDENT :
<
         IC          ANCIEN          < MODIFICATION DE LA
                                     < MEMOIRE VIRTUELLE.
         STX         CSECT           < SAUVEGARDE DE (X).
         LX          ANSECR
         LA          INFINI          < RECHERCHE D'UN BUFFER.
VIRT2:   EQU         $
         CPZ         &ATOPO          < LE BUFFER COURANT EST-IL
                                     < LIBRE ???
         JGE         VIRT4           < OUI, PAR LE SECTEUR (A).
         LR          X,Y             < NON, (Y)=BUFFER CHOISI.
         JMP         VIRT5
VIRT4:   EQU         $
         CP          &AUSE           < EST-IL PEU UTILISE ???
         JL          VIRT10          < NON, ON LE LAISSE.
         LA          &AUSE           < NON, IL DEVIENT LE MINI.
         LR          X,Y             < PEUT-ETRE SERA-T'IL ELU..
VIRT6:   EQU         $
         JDX         VIRT2
<
< OK, ON A TROUVE UN BUFFER (Y)PEU OU PAS UTILISE :
<
VIRT5:   EQU         $
         LR          Y,X             < X=NUMERO DE BUFFER/1.
         BSR         AWSE            < REECRITURE DU SECTEUR TOPO
                                     < ASSOCIE PAR 'TOPO' AU
                                     < BUFFER (X).
         LA          ANCIEN
         STA         &AUSE           < ON MEMORISE AINSI LA 'DATE'
                                     < DE MODIFICATION DU
                                     < BUFFER (X).
         LX          CSECT           < X=SECTEUR A CHARGER.
         LA          WDKT+1          < A=@OCTET DU BUFFER LIBERE.
         STA         RDKT+1          < C'EST LA QU'ON VA LIRE (X).
         SLRS        1               < A=@MOT DU BUFFER.
         STA         &ALSECT         < LE SECTEUR (X) SERA RESIDENT
                                     < A L'ADRESSE (A).
         STX         RDKT+3
         XR          X,Y             < Y=SECTEUR A CHARGER,
                                     < X=NUMERO DU BUFFER.
         STY         &ATOPO          < ON MEMORISE LE NUMERO
                                     < DU SECTEUR (Y) ASSOCIE
                                     < AU BUFFER (X).
         XR          X,Y             < X=SECTEUR A CHARGER,
                                     < Y=NUMERO DU BUFFER.
         LAD         RDKT
         SVC         0               < CHARGEMENT DU SECTEUR.
         LX          CSECT
         LA          &ALSECT         < A=@MOT DU BUFFER.
VIRT1:   EQU         $
         SBT         0               < BIT D'INDEX.
         STA         ASECTC          < GENERATION D'UN RELAI D'ACCES
                                     < TEMPORAIRE AU SECTEUR (X).
         SLLS        1               < CONVERSION EN UNE ADRESSE
                                     < D'OCTET.
         SB          ABUF1
         SLRS        8
         ADRI        1,A             < A=NUMERO DU BUFFER LE CONTENANT.
         LR          A,X
         PLR         X,Y
         RSR
<
< CAS DES SECTEURS TRES UTILISES :
<
VIRT10:  EQU         VIRT6
<
<
<        R E E C R I T U R E   D ' U N   B U F F E R  :
<
<
<        ARGUMENT :
<                    X=NUMERO DE CE BUFFER.
<
<
WSE:     EQU         $
         LR          X,A
         ADRI        -1,A
         SLLS        8
         AD          ABUF1
         STA         WDKT+1          < @OCTET DU BUFFER.
         LA          &ATOPO          < A=SECTEUR ASSOCIE.
         JAL         WSE1            < IL N'EXISTE PAS...
         PSR         X
         STA         WDKT+3          < SI EXISTE MAJ DE WDKT.
         LAD         WDKT
         SVC         0               < REECRITURE DU SECTEUR.
         LX          WDKT+3          < X=SECTEUR ASSOCIE.
         LAI         -1
         STA         &ALSECT         < LE SECTEUR ASSOCIE N'EST
                                     < PLUS RESIDENT.
         PLR         X               < RESTAURE : X=NUMERO BUFFER.
         STA         &ATOPO          < LE BUFFER EST LIBRE.
         STZ         &AUSE           < ET NON UTILISE...
WSE1:    EQU         $
         RSR
<
<
<        R E E C R I T U R E   D E   T O U S   L E S
<        B U F F E R S   E N   S C R A T C H  :
<
<
VIRE:    EQU         $
         PSR         X
         LXI         NSECR           < X=NBRE DE BUFFERS.
VIRE1:   EQU         $
         BSR         AWSE            < ECRITURE DU BUFFER (X).
         JDX         VIRE1
         PLR         X
         RSR
         PAGE
<
<
<        R E T O U R   D E   L A   Z O N E   S C R A T C H
<        E N   M E M O I R E   I M A G E  :
<
<
CONTI:   EQU         $
         STZ         RDK+3           < DEPART SUR LE SECTEUR 0.
         LA          AIMAG1
         RBT         0
         STA         AIMAG0          < INITIALISATION SUR @IMAG.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS.
ECH1:    EQU         $
         PSR         X
         LB          RDK+3           < B=NUMERO DU SECTEUR COURANT.
         BSR         ARESID          < QUE L'ON REND RESIDENT.
         LX          RDK+3
         LA          &ALSECT         < A=@BUFFER QUI LE CONTIENT.
         JAG         ECH2            < OK, IL EST OCCUPE...
         WORD        '1E16           < E R R E U R   P R O G  !!!
ECH2:    EQU         $
         LXI         128             < X=NBRE DE MOTS/SECTEUR.
         LB          AIMAG0          < B=@RECEPTEUR=@IMAGE.
         MOVE                        < GENERATION IMAGE.
         LXI         128             < X=NBRE DE MOTS/SECTEUR.
         ADR         X,B             < PROGRESSION @IMAGE.
         STB         AIMAG0
         IC          RDK+3           < PASSAGE AU SECTEUR SUIVANT.
         PLR         X
         JDX         ECH1
         RSR
XWOR%:   VAL         0
<
<
<        R A Z   D E   L A   Z O N E   S C R A T C H  :
<
<
RAZDK:   EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         STZ         WDK+3           < DEPART SUR LE SECTEUR 0.
         LXI         128
RAZ1:    EQU         $
         STZ         &ASECT          < RAZ DU BUFFER SECTOR.
         JDX         RAZ1
         LXI         LIMAG/128       < NBRE DE BUFFERS SCRATCH
                                     < NECESSAIRE POUR 1 IMAGE.
RAZ2:    EQU         $
         PSR         X               < SAVE LE DECOMPTEUR.
         LB          WDK+3           < B=NUMERO DU SECTEUR COURANT.
         BSR         ARESID          < QUE L'ON REND RESIDENT.
         LX          WDK+3
         LB          &ALSECT         < B=RECEPTEUR=@BUFFER ASSOCIE.
         CPZR        B               < VALIDATION...
         JG          RAZ3            < OK, IL EST OCCUPE..
         WORD        '1E16           < E R R E U R   P R O G  !!
RAZ3:    EQU         $
         LA          ASECT1
         RBT         0               < A=@EMETTEUR DES '0000.
         LXI         128             < X=NBRE DE MOTS A RAZER.
         MOVE                        < RAZ DU SECTEUR COURANT.
         PLR         X               < RESTAURE LE DECOMPTEUR.
         IC          WDK+3           < PASSGE AU SECTEUR SUIVANT.
         JDX         RAZ2            < DECOMPTAGE..
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<
< EN SOLAR 'IMAGE SCRATCH EST SIMULEE DANS 'IMAG2'.
<
         LX          ALIMAG          < NOMBRE DE MOTS DE L'IMAGE.
         STZ         &AIMAG2         < RAZ.
         JDX         $-1
         LAI         2               < SENS DE L'ECHANGE = ECRITURE.
         BSR         AEDKS           < IMAGE2 --> DKS.
XWOR%:   VAL         0
         RSR
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        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
XWOR%:   VAL         0
<
<
<        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
<
<
<        C L I G N O T E M E N T   D ' U N   P O I N T  :
<
<
CLIGN:   EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         PSR         B
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         CPZ         MODEV           < 3 OU 8 COULEURS ???
         JNE         CLIGN2          < 8 COULEURS : PAS DE CLIGNOTEMENT...
         PSR         A,B             < 3 COULEURS...
XWOR%:   VAL         0
         LB          TEMPO           < B=NBRE DE CLIGNOTEMENTS.
CLIGN1:  EQU         $
         BSR         AINVER          < INVERSION DU POINT (X,Y).
         IF          ORDI-"S",XWOR%,,XWOR%
         PSR         X
         LAD         STABIL          < STABILISATION DE L'IMAGE.
         SVC         0
         PLR         X
XWOR%:   VAL         0
         ADRI        -1,B            < DECOMPTAGE.
         CPZR        B               < EST-CE FINI ???
         JG          CLIGN1          < NON.
         IF          ORDI-"T",XWOR%,,XWOR%
         PLR         B               < OUI.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         PLR         A,B
CLIGN2:  EQU         $
XWOR%:   VAL         0
         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
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        E X I S T E N C E   E T   C O M P T A G E
<                    D E S   V O I S I N S  :
<
<
<        ARGUMENT :
<                    X,Y = COORDONNEE D'UN VOISIN.
<
<
<        RESULTAT :
<                    B EST INCREMENTE DE 1 SI CE POINT EXISTE
<                      ET EST A 1.
<                    LE CARRY EST NON SIGNIFICATIF !!!!
<
<
VOISE:   EQU         $
         LR          X,A
         JAL         NVOISE          < X INVALIDE.
         CP          NPPL
         JG          NVOISE          < X INVALIDE.
         LR          Y,A
         JAL         NVOISE          < Y INVALIDE.
         CP          NLIG
         JG          NVOISE          < Y INVALIDE.
         BSR         ATEST           < TEST DU POINT EXISTANT (X,Y).
         ADCR        B               < B EST INCREMENTE DE 1
                                     < SI (X,Y) EXISTE.
NVOISE:  EQU         $
         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.
<
<
EXIST:   EQU         $
         LR          X,A
         JAL         NEXIST          < X INVALIDE (<0).
         CP          NPPL
         JG          NEXIST          < X INVALIDE (>NPPL).
         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
<
<
<        E X I S T E N C E   V I R T U E L L E  :
<
<
XISTV:   EQU         $
         LR          X,A
         JAL         NXISTV          < POINT VIRTUEL INEXISTANT.
         CP          NPPL
         JG          NXISTV          < POINT VIRTUEL INEXISTANT.
         LR          Y,A
         JAL         NXISTV          < POINT VIRTUEL INEXISTANT.
         CP          NLIG
         JG          NXISTV          < POINT VIRTUEL INEXISTANT.
         BSR         ATESTV          < TEST D'UN POINT VIRTUEL.
         LA          INDIC           < A=RESULTAT DU TEST VIRTUEL.
NXISTV:  EQU         $
         RSR                         < VOIR 'EXIST' POUR (A).
TIMAG:   WORD        IMAG            < @RELATIVE IMAGE VIDEO.
         EOT         #SIP SP3#
XWOR%:   VAL         0
         PAGE
<
<
<        E N T R E E   U N E   C O O R D O N N E E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=COORDONNEE (X OU Y).
<
<
COORD1:  EQU         $               < RETOUR EN ERREUR.
         LR          B,A             < RESTAURE A=@MESSAGE.
COORD:   EQU         $
         PSR         X,Y
         LR          A,B             < SAVE B=@MESSAGE.
         BSR         APRINT          < ENVOI DU MESSAGE ARGUMENT.
         LAD         DEMIN
         SVC         0               < ENTREE D'UN NBRE HEXADECIMAL.
         LYI         4               < 4 CHIFFRES MAX A CONVERTIR.
         BSR         AHEX            < ESSAI DE CONVERSION...
         PLR         X,Y
         JNE         COORD1          < ERREUR : ON RECOMMENCE.
         JAL         COORD1          < COORDONNEE<0 : ERREUR..
         CPI         X20-1           < DEBORDEMENT : ERREUR...
         JG          COORD1          < ERREUR...
         RSR                         < OK, (A)=VALEUR HEXA.
<
<
<        E N T R E E   C O E F F I C I E N T  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=COEFFICIENT.
<
<
COEF1:   EQU         $
         LR          B,A             < RESTAURE A=@MESSAGE.
COEF:    EQU         $
         PSR         X,Y
         LR          A,B             < SAVE B=@MESSAGE.
         BSR         APRINT          < ENVOI DU MESSAGE.
         LAD         DEMIN
         SVC         0               < ENTREE DE 4 CARACTERES.
         LYI         4
         BSR         AHEX            < CONVERSION HEXA.
         PLR         X,Y
         JNE         COEF1           < ERREUR SYNTAXE HEXADECIMALE.
         RSR                         < OK...
<
<
<        E N T R E   D ' U N   P A S  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=PAS#0.
<
<
PAS1:    EQU         $
         LR          B,A             < RESTAURE A=@MESSAGE.
PAS:     EQU         $
         PSR         X,Y
         LR          A,B             < SAVE B=@MESSAGE.
         BSR         APRINT          < ENVOI MESSAGE.
         LAD         DEMIN
         SVC         0               < ENTREE DU PAS.
         LYI         4               < Y=NBRE CARACTERES A DECODER.
         BSR         AHEX            < CONVERSION HEXA-BINAIRE.
         PLR         X,Y
         JNE         PAS1            < ERREUR SYNTAXE.
         JALE        PAS1            < REFUS DE PAS<=0.
         CPI         X20-1           < VALIDATION.
         JG          PAS1            < ERREUR.
         RSR
<
<
<        C O N V E R S I O N   A S C I   -->   B I N A I R E  :
<
<
<        RESULTAT :
<                    A=VALEUR CONVERTIE S'IL N'Y A PAS
<                    D'ERREUR, LES CODES DE CONDITION
<                    L'INDIQUANT.
<
<
HEX:     EQU         $
         PSR         B,X
         LXI         0               < X=INDEX DE 'REP'.
         LBI         0               < B=CUMUL COURANT.
HEX1:    EQU         $
         LBY         &AREP           < A=CARACTERE COURANT DE 'REP'.
         CPI         '04             < EST-CE 'EOT' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         CPI         '0D             < EST-CE 'R/C' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         ADRI        -'30,A          < CONVERSION BIANIRE.
         JAL         HEX2            < ERREUR.
         CPI         9               < EST-CE UN CHIFFRE DECIMAL ???
         JLE         HEX3            < OUI.
         ADRI        -"A"+"9"+1,A    < NON.
         CPI         'A              < VALIDATION HEXDECIMALE ???
         JL          HEX2            < ERREUR.
         CPI         'F              < VALIDATION HEXADECIMALE ???
         JG          HEX2            < ERREUR.
HEX3:    EQU         $
         SCRS        4               < CUMUL PARTIEL DE LA
         SCLD        4               < VALEUR A CONVERTIR.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         CPR         X,Y             < EST-CE FINI ???
         JNE         HEX1            < NON.
HEX5:    EQU         $
         LR          B,A             < OUI, A=RESULTAT.
         LBI         0               < B=0 : OK.
HEX4:    EQU         $
         CPZR        B               < POSITIONNEMENT DES CODES
                                     < DE CONDITION SUR ERREUR.
         PLR         B,X
         RSR
HEX2:    EQU         $               < CAS DES ERREURS.
         LBI         1               < B=1#0 : ERREUR.
         JMP         HEX4            < VERS LA SORTIE...
         PAGE
<
<
<        R E T O U R   A   ' G E '  :
<
<
GOGE:    EQU         $
GOGEX:   EQU         $               < ENTRY ALT-MODE.
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         AVIRE           < TOUTE L'IMAGE VIRTUELLE EST
                                     < RENVOYEE EN SCRATCH AVANT
                                     < LE RETOUR A 'GE'.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LA          INDM
         TBT         15              < OPTION "SCRATCH" ACTIVE ?
         JNC         GOGE3           < NON.
         LAI         2               < OUI, ALORS ECRIRE IMAGE2 EN SCRATCH.
         BSR         AEDKS           < SENS DE L'ECHANGE = ('A').
GOGE3:   EQU         $
XWOR%:   VAL         0
ERR:     EQU         $               < SORTIE EN ERREUR...
         LAI         BRANCH-ZERO
         LR          A,W             < W=@BRANCH.
<
< RAZ DES ITEMS 1 ET 2 :
<
         LX          NMOTS           < X=NBRE DE MOTS A RAZER.
GOGE1:   EQU         $
         STZ         &AI2
         JDX         GOGE1
<
< MISE EN PLACE DU NOM DE 'GE' :
<
         LA          NGE
         STA         0,W             < (W)=@BRANCH.
<
< RETOUR A 4K, ET SMC :
<
         LA          APILE
         LR          A,K
         LAD         RELMEM
         SVC         0
GOGE2:   EQU         $
         LAD         DEMSGN          < A=@DEMSGN.
         BSR         AOVL            < CHARGEMENT DE 'GE'.
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI SI ERREUR.
         JMP         GOGE2
         PAGE
<
<
<        G E N E R A T E U R   D E   V O L E T S  :
<
<
<        FONCTION :
<                      A PARTIR DU CURSEUR GRAPHIQUE DE
<                    LA VISU '01, IL PERMET DE TRACER
<                    SIMULTANEMENT SUR L'IMAGE RESIDEN-
<                    TE ET SUR L'IMAGE SCRATCH DES IMAGES
<                    LINEAIRES POUVANT SERVIR ENSUITE
<                    DE CONTOURS DE VOLETS, MAIS AUSSI
<                    AVEC L'EMISSION OPTIONNELLE PAR ZDC
<                    PERMET DE GENERER LE DESSIN EQUIVALENT
<                    A UNE IMAGE VIDEO...
<
<
         WORD        IMAG            < VALEUR BASE C.
         WORD        LOC+'80         < VALEUR BASE L.
         WORD        BRANCH          < VALEUR BASE W.
IMAGE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATION C,L,W.
         LA          ASTACK
         LR          A,K             < INITIALISATION K.
         IC          KIN             < COMPTAGE DES ENTRIES.
         JG          GOGEX           < ABORT SI ALT-MODE.
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         DEMM12          < SOLAR: IL FAUT 12K A PRIORI PUISQUE
         SVC         0               < L'IMAGE SCRATCH EST SIMULEE EN 'IMAG2'.
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         LAD         DEMMEM
         SVC         0
<
< TEST DU NUMERO DE COMTE D'APPEL :
<
         WORD        '1E25           < A,B=ACN.
         CP          ACNSYS
         JNE         INIT1           < ON N'EST PAS SOUS :SYS.
         LR          B,A
         CP          ACNSYS+1
         JE          INIT2           < ON EST SOUS :SYS.
INIT1:   EQU         $
         STZ         ASP3            < PAS DE STABILISATION D'IMAGE.
INIT2:   EQU         $
XWOR%:   VAL         0
<
< MODE DE GENERATION DE L'IMAGE SCRATCH :
<
OPER1:   EQU         $
         LA          AM10
         BSR         APRINT          < EMISSION D'UN MESSAGE.
         LAD         DEMREP
         SVC         0               < ENTREE DU MODE DE GENERATION.
         LBY         REP             < A=MODE CHOISI.
         ADRI        -'30,A          < DECODAGE ASCI-NUMERIQUE.
         JALE        OPER1           < ERREUR.
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         5
         JG          OPER1
         STA         OPER            < OPERATION DEMANDEE.
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         LXI         0
         CPBY        &ACODE          < VALIDATION PAR RAPPORT AU
                                     < MODE MAX.
         JG          OPER1           < ERREU.
         LR          A,X             < X=MODE CHOISI.
         LBY         &ACODE          < A=OPERATION ASSOCIEE.
         STBY        &AINS           < QUE L'ON MET DANS 'PS'
                                     < POUR LA ROUTINE 'SETV'.
XWOR%:   VAL         0
TR3:     EQU         $
<
< INITIALISATION DU DISQUE :
<
         IF          ORDI-"S",XWOR%,,XWOR%
< SOLAR, LIRE L'IMAGE SCRATCH EN 'IMAG2'.
         LAI         0               < SENS DE L'ECHANGE = LECTURE.
         BSR         AEDKS           < DK SCRATCH --> IMAGE2.
XWOR%:   VAL         0
         LA          AM9
         BSR         AINTER          < FAUT-IL RAZER L'IMAGE SCRATCH.
         JNE         RZ1             < NON.
         BSR         ARAZDK
RZ1:     EQU         $
<
< DOIT-ON EMETTRE PAR ZDC ???
<
         LA          AM4
         BSR         AINTER          < FAUT-IL EMETTRE PAR ZDC ???
         STB         IGRAPH          < SAVE LA REPONSE 0/1.
<
<        A T T E N T I O N  :
<
<                      ON SUPRIME LE CODE SUIVANT
<                    QUI AVAIT POUR OBJET D'ACTIVER
<                    LA ZONE SCRATCH ; DESORMAIS,
<                    CELLE-CI SERA INACTIVE INITIA-
<                    LEMENT !!!
<
<        LAI         "M"             < ON VA SIMULER UNE COMMANDE
<        JMP         SIMULM          < 'M', AFIN DE RENDRE ACTIVE
<                                    < LA ZONE SCRATCH.
<
<
<        A N A L Y S E   D E S   C O M M A N D E S  :
<
<
<        COMMANDES RECONNUES :
<                    A : ORIGINE D'UN SEGMENT,
<                    B : EXTREMITE D'UN SEGMENT,
<                    S : EXTREMITE ETOILEE D'UN SEGMENT,
<                    0 : MISE D'UN POINT A 0,
<                    1 : MISE D'UN POINT A 1,
<                    2 : INVERSION D'UN POINT,
<                    + : MODE 'SET',
<                    - : MODE 'RESET',
<                    I : MODE 'INVER',
<                    V : VOLET 1 SUR FOND 0,
<                    W : VOLET 0 SUR FOND 1,
<                    Z : RAZ DE L'IMAGE RESIDENTE.
<                    T : CHANGEMENT TAILLE SPIRALE AUTOUR D'UN POINT.
<                    C : CURSEUR VIDEO,
<                    R : RETOUR TEMPORAIRE AU CCI.
<                    M : ACTIVATION/DESACTIVATION EN BASCULE SCRATCH.
         IF          ORDI-"S",XWOR%,,XWOR%
<                    5 : COMPOSANTE ROUGE ACTIVE.
<                    6 : COMPOSANTE VERTE ACTIVE.
<                    7 : COMPOSANTE BLEUE ACTIVE.
XWOR%:   VAL         0
<                    F : FIN.
<
<
LOOP:    EQU         $
         BSR         ACUR            < ENTREE DU CURSEUR+COMMANDE.
SIMULM:  EQU         $               < LA 1ERE COMMANDE EST SIMULEE ('M').
         LXI         0               < INDEX 1ERE COMMANDE.
LOOP1:   EQU         $
         CPZ         &ACOM           < EST-CE LA FIN DE LISTE ???
         JG          LOOP2           < NON, OK.
         LA          AM1             < OUI, ERREUR.
         BSR         APRINT          < ENVOI MESSAGE D'ERREUR.
         JMP         LOOP            < ET ON RECOMMENCE.
LOOP2:   EQU         $
         CP          &ACOM           < LA COMMANDE (A) EST-ELLE
                                     < LA COMMANDE COURANTE (X) ???
         JNE         LOOP3           < NON.
         ADRI        1,X             < OUI, ON VA DONC LA
         BR          &ACOM           < TRAITER...
LOOP3:   EQU         $
         ADRI        2,X             < INDEX COMMANDE SUIVANTE.
         JMP         LOOP1           < ET ON REANALYSE...
<
< FIN D'ANALYSE :
<
GENF:    EQU         $
         CPZ         IGRAPH          < ENVOI EN ZDC ???
         JNE         ANA30           < NON.
         STZ         SEG+0           < OUI, ON ENVOIE 'OAB'.
         STZ         SEG+1
         STZ         SEG+2
         STZ         SEG+3
         BSR         ASTORE          < ENVOI DU 'OAB' DANS ZDC.
ANA30:   EQU         $
         BR          AGOGE           < C'EST FINI...
<
<        R E T O U R   A U   C C I  :
<
GENCCI:  EQU         $
         LAD         DEMCCI
         SVC         0
         BR          ALOOP           < RETOUR SI !GO...
<
<        C O M M A N D E S   D E   M O D E  :
<
GENS:    EQU         $
         LAI         -3              < MODE 'SET'.
         JMP         GEN10
GENR:    EQU         $
         LAI         -2              < MODE 'RESET'.
         JMP         GEN10
GENI:    EQU         $
         LAI         -1              < MODE 'INVER'.
GEN10:   EQU         $
         STA         MODE            < MISE EN PLACE DU MODE.
         BR          ALOOP           < VERS LA COMMANDE SUIVANTE.
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        C H O I X   3 / 8   C O U L E U R S  :
<
<
GENMOD:  EQU         $
         PSR         X,Y             < SAUVEGARDES...
         LA          AM21
         BSR         APRINT          < MESSAGE,
         LAD         DEMIN
         SVC         0               < ENTREE DU MODE,
         LYI         4
         BSR         AHEX            < ET CONVERSION BINAIRE...
         PLR         X,Y
         JNE         GENMOD          < ERREUR DE SYNTAXE...
         JAL         GENMOD          < MAUVAIS MODE...
         CPI         LVIDEO
         JG          GENMOD          < MAUVAIS MODE...
         PSR         X
         LR          A,X
         LA          &AVIDEO
         STA         MODEV           < ET MEMORISATION DU MODE :
                                     < =0 : ANCIEN MODE (3 COULEURS),
                                     < #0 : NOUVEAU MODE (8 COULEURS).
         PLR         X
         LA          INDM
         TBT         15              < LA ZONE SCRATCH EST-ELLE ACTIVE ???
         JC          GENM            < OUI, ON LA DESACTIVE...
         BR          ALOOP           < NON, VERS L'INTERPRETEUR...
<
<
<        C H O I X   D E   L A   C O U L E U R  :
<
<
GENCOL:  EQU         $
         PSR         X,Y             < SAUVEGARDES...
         LA          AM20
         BSR         APRINT          < MESSAGE,
         LAD         DEMIN
         SVC         0               < ENTREE DU COULEUR,
         LYI         4
         BSR         AHEX            < ET CONVERSION BINAIRE...
         PLR         X,Y
         JNE         GENCOL          < ERREUR DE SYNTAXE...
         JAL         GENCOL          < MAUVAIS COULEUR...
         CPI         1>NCOOL-1+1
         JG          GENCOL          < MAUVAIS COULEUR...
         STA         COLOR           < ET MEMORISATION DE LA COULEUR...
         BR          ALOOP           < ET VERS L'INTERPRETEUR...
XWOR%:   VAL         0
<
<        O R I G I N E   D ' U N   S E G M E N T  :
<
GENA:    EQU         $
         LA          POINT+X
         STA         DICOX1          < ORIGINE X(M1).
         LA          POINT+Y
         STA         DICOY1          < ORIGINE Y(M1).
         BR          ALOOP           < VERS LA COMMANDE SUIVANTE.
<
<        E X T R E M I T E   D ' U N   S E G M E N T  :
<
GENE:    EQU         $               < COMMANDE 'S'.
GENB:    EQU         $
         LA          POINT+X
         STA         DICOX2          < EXTREMITE X(M2).
         LA          POINT+Y
         STA         DICOY2          < EXTREMITE Y(M2).
         IF          ORDI-"T",XWOR%,,XWOR%
         LX          MODE
         LA          &LRR            < MISE EN PLACE DE LA ROUTINE
         STA         APOINT          < DE TRAITEMENT REEL.
         BSR         ATRACE          < TRACE REEL DE M1M2.
         LA          &LRV            < MISE EN PLACE DE LA ROUTINE
         STA         APOINT          < DE TRAITEMENT VIRTUEL.
         BSR         ATRACV          < TRACE VIRTUEL DE M1M2.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ATRACE          < TRACE REEL.
         BSR         ATRACV          < TRACE IMAGE2 ("SCRATCH").
XWOR%:   VAL         0
         LBY         CURSOR          < RECUPERATION DE LA COMMANDE.
         CPI         "B"             < DISCRIMINATION 'B'/'S' ???
         JE          GENA            < 'B' : ON FAIT UN 'A' IMPLICITE.
         BR          ALOOP           < 'S' : COMMANDE SUIVANTE.
<
<        T R A C E   P O I N T S   I S O L E S  :
<
GEN2:    EQU         $
         LAI         -1              < MODE 'INVER'.
         JMP         GEN11
GEN0:    EQU         $
         LAI         -2              < MODE 'RESET'.
         JMP         GEN11
GEN1:    EQU         $
         LAI         -3              < MODE 'SET'.
GEN11:   EQU         $
         STA         SAVE            < SAVE PROVISOIRE.
         LA          DICOX1
         LB          DICOY1
         LX          DICOX2
         LY          DICOY2
         PSR         A,B,X,Y         < SAVE M1 ET M2.
         LA          POINT+X
         STA         DICOX1          < M1 ET
         STA         DICOX2          < M2 SONT CONFONDUS.
         LA          POINT+Y
         STA         DICOY1          < M1 ET
         STA         DICOY2          < M2 SONT CONFONDUS.
         IF          ORDI-"T",XWOR%,,XWOR%
         LX          SAVE            < RECUPERATION DU MODE DEMANDE.
         LA          &LRR            < ROUTINE DE TRAITEMENT REEL.
         STA         APOINT
         BSR         ATRACE          < TRACE REEL DE M, ET ZDC EVENTUEL.
         LA          &LRV            < ROUTINE DE TRAITEMENT VIRTUEL.
         STA         APOINT
         BSR         ATRACV          < TRACE VIRTUEL DE M.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
< SAUVEGARDE MODE COURANT, ET ON LUI SUBSTITUE ('SAVE').
         LA          SAVE
         XM          MODE
         STA         SAVE
         BSR         ATRACE          < TRACE REEL.
         BSR         ATRACV          < TRACE IMAGE2 ("SCRATCH").
< RESTAURATION DU MODE COURANT.
         LA          SAVE
         XM          MODE
         STA         SAVE
XWOR%:   VAL         0
         PLR         A,B,X,Y         < RESTAURE M1 ET M2.
         STY         DICOY2
         STX         DICOX2
         STB         DICOY1
         STA         DICOX1
         BR          ALOOP           < VERS LA COMMANDE SUIVANTE.
<
<        T A I L L E   D E S   S P I R A L E S  :
<
GENT:    EQU         $
         LA          AM5             < MESSAGE A EMETTRE.
         BSR         APAS            < ENTREE DE LA NOUVELLE TAILLE.
         STA         NM
         BR          ALOOP           < ET C'EST TOUT...
<
<        R A Z   I M A G E   R E S I D E N T E  :
<
GENZ:    EQU         $
         LX          ALIMAG
GEN40:   EQU         $
         STZ         &AIMAG
         JDX         GEN40
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STABIL          < VISUALISATION IMAGE RAZEE.
         SVC         0
XWOR%:   VAL         0
         BR          ALOOP           < VERS LA COMMANDE SUIVANTE.
<
<        G E N E R A T I O N   D E S   V O L E T S  :
<
GENW:    EQU         $
         LAI         0
         JMP         GEN20
GENV:    EQU         $
         LAI         1
GEN20:   EQU         $
         STA         ITEST           < MODE DE TEST DES POINTS REELS.
         LY          NLIG            < BALAYGAE VERTICAL.
E1001:   EQU         $
         LX          NPPL            < BALAYAGE HORIZONTAL.
E1002:   EQU         $
         BSR         ATEST           < TEST REEL DU POINT (X,Y).
         JC          E1003           < ON A TROUVE LE DERNIER
                                     < POINT DE LA LIGNE (Y).
         ADRI        -1,X
         CPZR        X               < EST-ON AU DEBUT DE LIGNE ???
         JGE         E1002           < NON...
E1004:   EQU         $
         ADRI        -1,Y            < CHANGEMENT DE LIGNE.
         CPZR        Y               < EST-CE FINI ???
         JGE         E1001           < NON.
         BR          ALOOP           < OUI, COMMANDE SUIVANTE.
<
< CAS DU DERNIER POINT D'UNE LIGNE :
<
E1003:   EQU         $
         LR          X,B             < SAVE SON ABSCISSE DANS B.
         LXI         0               < BALAYONS LA LIGNE (Y)
                                     < EN PARTANT DE LA GAUCHE.
E1005:   EQU         $
         BSR         ATEST           < TEST REEL DU POINT (X,Y).
         JC          E1006           < ON A TROUVE LE 1ER POINT
                                     < DE LA LIGNE (Y).
         ADRI        1,X             < POINT SUIVANT.
         JMP         E1005           < PAS DE TEST DE FIN, CAR ON
                                     < SAIT QU'IL Y A AU MOINS UN
                                     < POINT SUR CETTE LIGNE.
<
< CAS DU 1ER POINT BLANC D'UNE LIGNE :
<
E1006:   EQU         $
         STX         DICOX1          < X(M1),
         STY         DICOY1          < Y(M1).
         STB         DICOX2          < X(M2),
         STY         DICOY2          < Y(M2).
         IF          ORDI-"T",XWOR%,,XWOR%
         LX          MODE            < MODE DE TRAITEMENT.
         LA          &LRR            < TRAITEMENT REEL.
         STA         APOINT
         BSR         ATRACE          < REMPLISSAGE REEL, ET ZDC EVENTUEL.
         LA          &LRV            < TRAITEMENT VIRTUEL.
         STA         APOINT
         BSR         ATRACV          < REMPLISSAGE VIRTUEL.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ATRACE          < TRACE REEL.
         BSR         ATRACV          < TRACE IMAGE2 ("SCRATCH").
XWOR%:   VAL         0
         JMP         E1004           < VERS LA LIGNE PRECEDENTE.
<
<
<        B A S C U L E   Z O N E   S C R A T C H  :
<
<
GENM:    EQU         $
         LA          AM6
         BSR         APRINT
         LA          INDM
         IBT         15              < INVERSION DE L'ETAT.
         TBT         15              < VIENT-ON D'ACTIVER ???
         JNC         GENM3           < NON...
         CPZ         MODEV           < OUI : 3 OU 8 COULEURS ???
         JE          GENM3           < 3, OK, ANCIEN MODE...
         LA          AM1             < 8 : ON INTERDIT LA ZONE SCRATCH...
         BSR         APRINT          < MESSAGE D'ERREUR !!!
         BR          ALOOP           < VERS L'INTERPRETEUR...
GENM3:   EQU         $
         STA         INDM
         TBT         15              < TEST DU NOUVEL ETAT ???
         LA          AM7             < 'ON' A PRIORI.
         JC          GENM1           < OUI, C'EST ON...
         LA          AM8             < ET NON, C'EST OFF...
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         APRINT
         LAI         2               < SENS DE L'ECHANGE = ECRITURE.
         BSR         AEDKS           < IMAGE2 --> DK SCRATCH.
         LAD         DEMMEM          < ET 8K SEULEMENT...
         SVC         0
         JMP         GENM2
XWOR%:   VAL         0
GENM1:   EQU         $
         BSR         APRINT          < MESSAGE D'ETAT.
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         DEMM12          < IL FAUT 12K MOTS.
         SVC         0
         LAI         0               < SENS DE L'ECHANGE = LECTURE.
         BSR         AEDKS           < DK SCRATCH --> IMAGE2.
GENM2:   EQU         $
XWOR%:   VAL         0
         BR          ALOOP           < VERS L'INTERROGATION...
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        A C T I V A T I O N   D ' U N E   C O M P O S A N T E :
<
<
GEN5:    EQU         $
         LBI         TVPR+TVIN       < ROUGE.
         JMP         GEN100
GEN6:    EQU         $
         LBI         TVPV+TVIN       < VERT.
         JMP         GEN100
GEN7:    EQU         $
         LBI         TVPB+TVIN       < BLEU.
GEN100:  EQU         $
         STB         STABIL+3        < LIRE LA COMPOSANTE.
         LAD         STABIL
         SVC         0
NBTVIN:  VAL         TVIN=0
NBTVIN:  VAL         15-NBTVIN
         RBT         16+NBTVIN       < REPASSER EN DIFFUSION.
         STB         STABIL+3
         BR          ALOOP           < VERS L'INTERROGATION...
XWOR%:   VAL         0
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE VOLONTAIRE
                                     < SI MAUVAISE IMPLANTATION...
         DZS         X10+1           < PAR PROPRETE !!!!
         EOT         #SIP GEN PROCESSEUR#



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