NMTC:    VAL         "TC"
NMQ:     VAL         " Q"
         IF          NMPROC-NMTC,,XWOR%,
         IF          NMPROC-NMQ,,XWOR%,
         IF          ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%:   VAL         0
         IF          NMPROC-NMTC,XWOR%9,,XWOR%9
         IDP         "TC - VERSION INTERPOLATEUR DE TW"
XWOR%9:  VAL         0
         IF          NMPROC-NMQ,XWOR%9,,XWOR%9
         IDP         " Q - VERSION DE 'TC' INTERPRETATIVE"
XWOR%9:  VAL         0
         IDP         "RELEASE 27/05/1980"
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        TW              < POINT D'ENTREE...
         WORD        0
PTW:     EQU         $               < DOIT VALOIR '12...
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR...
         EOT         #SIP DEFINITION ITEM#
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
ITEM1:   EQU         ITEM2+LTNI
         EOT         #SIP IMAGE 256#
NBITMO:  VAL         16              < NOMBRE DE BITS PAR MOT.
NOCMO:   VAL         2               < NOMBRE D'OCTETS PAR MOT...
NBITOC:  VAL         NBITMO/NOCMO    < NOMBRE DE BITS PAR OCTET...
NBRHEX:  VAL         4               < NOMBRE DE CHIFFRES HEXAS PAR MOT.
BIT:     VAL         1
NMOTL:   VAL         CNMPL           < NOMBRE DE MOTS PAR LIGNE.
NLIG:    VAL         LIMAG/NMOTL     < NOMBRE DE LIGNES PAR TRAME.
NLIGM1:  VAL         NLIG-1          < ORDONNEE MAXIMALE.
XWOR%1:  VAL         NLIGM1+1
XWOR%2:  VAL         XWOR%1=0
         IF          BIT>XWOR%2-XWOR%1,,XWOR%,
         IF          ATTENTION : 'NLIGM1' DOIT ETRE UN MASQUE !!!
XWOR%:   VAL         0
NPOLM1:  VAL         NMOTL*NBITMO-1  < ABSCISSE MAXIMALE.
XWOR%1:  VAL         NPOLM1+1
XWOR%2:  VAL         XWOR%1=0
         IF          BIT>XWOR%2-XWOR%1,,XWOR%,
         IF          ATTENTION : 'NPOLM1' DOIT ETRE UN MASQUE !!!
XWOR%:   VAL         0
NCOOL:   VAL         3               < NOMBRE DE COULEURS DE BASE.
NIVMAX:  VAL         BIT>NCOOL-BIT   < NIVEAU MAX RECONNU.
MFFFF:   VAL         'FFFF           < MASQUE DU MOT.
EOT:     VAL         '04             < CARACTERE 'EOT'.
SGNDLN:  VAL         3               < FONCTION DE DELETE SGN,
SGNSTN:  VAL         4               < FONCTION DE STORE SGN,
SGNLON:  VAL         5               < FONCTION DE LOAD SOUS ACN SGN,
SGNLNS:  VAL         6               < FONCTION DE LOAD SOUS :SYS SGN.
         PAGE
<
<
<        S E L E C T I O N   D U   M O D E   D ' E N T R E E  :
<
<
NMPROD:  VAL         NMPROC          < SAUVEGARDE DU NOM REEL DU PROCESSEUR,
                                     < ON NE SAIT JAMAIS ??!?!?!?
VISU:    VAL         0               < MODE D'ENTREE PAR LA VISU,
ITEM:    VAL         1               < MODE D'ENTREE PAR L'ITEM1.
MODE:    VAL         VISU            < A PRIORI, 'TW'/'TX' : ENTREE VISU...
         IF          NMPROC-NMQ,XWOR%,,XWOR%
NMPROC:  VAL         NMTC            < SI " Q", ON LE REMPLACE PAR "TC",
MODE:    VAL         ITEM            < AVEC ENTREE PAR L'ITEM1.
XWOR%:   VAL         0
         PAGE
<
<
<        D E F I N I T I O N   D E   L ' I M A G E  :
<
<
NOM:     EQU         ZERO+PILE+5-LNOM
IMAG:    EQU         NOM+LNOM
IMAGE:   EQU         IMAG
IMAGR:   EQU         IMAGE+0
IMAGV:   EQU         IMAGR+LIMAG
IMAGB:   EQU         IMAGV+LIMAG
TV1::    VAL         0               < ZONE DE VISUALISATION TELEVISION.
         IF          TV1,,XWOR%,
         IF          ATTENTION : DE NOMBREUSES CHOSES VONT MERDER !!!
XWOR%:   VAL         0
AMASK::  VAL         NCOOL*LIMAG+TV1 < ADRESSE DU MASQUE DANS LA 'CDA'.
IZBUF::  VAL         AMASK+LIMAG     < DEBUT DU BLOC COURANT DU Z-BUFFER DANS
                                     < LA 'CDA' QUAND ON EST EN '!CDAI'...
LIZBUF:: VAL         '1000           < LE Z-BUFFER EST DECOUPE EN BLOCS DE
                                     < 16K MOTS.
NZBUF::  VAL         16              < CE QUI FAIT DONC 16 BLOCS...
XWOR%1:  VAL         1024
XWOR%2:  VAL         LIZBUF/XWOR%1*NZBUF
XWOR%3:  VAL         LIMAG/XWOR%1*NBITMO
         IF          XWOR%3-XWOR%2,,XWOR%,
         IF          ATTENTION : LIZBUF ET NZBUF INCOMPATIBLES !!!
XWOR%:   VAL         0
LSDKU::  VAL         128
NSDKU::  VAL         LIZBUF/LSDKU    < INCREMENT DE PASSAGE D'UN BLOC DU
                                     < Z-BUFFER AU SUIVANT SUR 'DKU'...
TV2::    VAL         IZBUF+LIZBUF    < ZONE DE SAUVEGARDE DE L'IMAGE RESIDENTE
                                     < LORS DES INTERPOLATIONS DE COULEURS.
LNOMP:   VAL         LNOM-1          < LONGUEUR UTILE DU NOM (A CAUSE DE
                                     < L'EOT A PRIORI...
         PROG
         PAGE
<
<
<        M E S S A G E S  :
<
<
MMCDA:   BYTE        5;'6D
MCDAP:   ASCI        "!CDA"
PI:      BYTE        "P";EOT
MCDA:    ASCI        "!CDA"
         BYTE        EOT;0
REP:     DZS         NBRHEX/NOCMO    < BUFFER DES REPONSES.
MERR:    BYTE        1;"?"
         IF          MODE-VISU,XWOR%7,,XWOR%7
MINT:    BYTE        2;'6D;">";0
MNOM:    BYTE        5;'6D
         ASCI        "NOM="
MORGX:   BYTE        3;'6D
         ASCI        "X="
MORGY:   BYTE        3;'6D
         ASCI        "Y="
MTORE:   BYTE        6;'6D
         ASCI        "TORE? "
MK:      BYTE        3;'6D
         ASCI        "K="
MASKO:   BYTE        9;'6D
         ASCI        "MASK ON?"
MSLAS:   BYTE        1;"/"
MKOEF:   BYTE        6;'6D
         ASCI        "COEF? "
MTRX:    BYTE        4;'6D
         ASCI        "CX= "
MTRY:    BYTE        4;'6D
         ASCI        "CY= "
MPOINT:  BYTE        6;'6D
         ASCI        "#PTS= "
MPASQ:   BYTE        5;'6D
         ASCI        "PAS="
MINTC:   BYTE        24;'6D
         ASCI        "INTERPOLATION COULEURS? "
MDIAF:   BYTE        7;'6D
         ASCI        "DIAPH?"
XWOR%7:  VAL         0
<
< ZONE EN RECOUVREMENT :
<
BUFIN:   EQU         ITEM2+'518      < BUFFER D'ENTREE DES FONDS.
LBUFIN:  VAL         NBITMO/NOCMO
LBUFMH:  VAL         NPOLM1+1/NBITMO < LONGUEUR DU MASQUE HORIZONTAL,
LBUFMV:  VAL         NLIGM1+1/NBITMO < LONGUEUR DU MASQUE VERTICAL.
BUFMH:   EQU         BUFIN+LBUFIN    < MASQUE HORIZONTAL,
BUFMV:   EQU         BUFMH+LBUFMH    < MASQUE VERTICAL.
LSTACK:: VAL         30              < LONGUEUR DE LA PILE DE TRAVAIL.
STACK:   EQU         BUFMV+LBUFMV    < PILE DE TRAVAIL.
         IF          ITEM1-STACK-LSTACK,,,XWOR%
         IF          ATTENTION : LA ZONE EN RECOUVREMENT DE
         IF          L'ITEM2, RECOUVRE AUSSI L'ITEM1 !!!
XWOR%:   VAL         0
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< CONSTANTES :
<
         IF          MODE-VISU,XWOR%7,,XWOR%7
NGE:     ASCI        "GE"            < NOM DU PROCESSEUR DE RETOUR.
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
NSD:     ASCI        "SD"            < NOM DE L'OVERLAY D'APPEL.
TCALL:   WORD        "GE";"EI"       < NOM DES OVERLAYS DE RETOUR SI ALT-MODE.
NCALL:   WORD        TCALL,X
NPCALL:  WORD        0               < NOM DU PROCESSEUR DE RETOUR SI ALT-MODE.
XWOR%7:  VAL         0
SAVER:   WORD        0               < SAUVEGARDE D'UN MOT DE LA TRAME
                                     < RESIDENTE ROUGE,
SAVEV:   WORD        0               < DE MEME POUR LE VERT,
SAVEB:   WORD        0               < DE MEME POUR LE BLEU.
MCDAR:   EQU         SAVER           < SAUVEGARDE D'UN MOT DE LA TRAME
                                     < SCRATCH ROUGE,
MCDAV:   EQU         SAVEV           < DE MEME POUR LE VERT,
MCDAB:   EQU         SAVEB           < DE MEME POUR LE BLEU.
SAVEK:   WORD        0               < SAUVEGARDE DU REGISTRE 'K'.
KIN:     WORD        -1              < COMPTEUR DES ENTREES...
         IF          MODE-VISU,XWOR%7,,XWOR%7
NMOTS:   WORD        2*LTNI          < LONGUEUR MOTS DES 2 ITEMS.
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
NMOTS:   WORD        LTNI            < POUR NE RAZER QUE L'ITEM2...
XWOR%7:  VAL         0
XR:      WORD        0               < COORDONNEE X D'UN POINT RESIDENT,
YR:      WORD        0               < COORDONNEE Y D'UN POINT RESIDENT,
XS:      WORD        0               < COORDONNEE X D'UN POINT SCRATCH,
YS:      WORD        0               < COORDONNEE Y D'UN POINT SCRATCH.
ORGX:    WORD        0               < ORIGINE EN X DE L'IMAGE SCRATCH
                                     < PAR RAPPORT A L'IMAGE RESIDENTE,
ORGY:    WORD        0               < DE MEME, ORIGINE EN Y...
MODX:    WORD        0               < 0 : "TORE" SUR LES X,
                                     < 1 : L'IMAGE SCRATCH NE SE REFERME PAS...
MODY:    WORD        0               < DE MEME SUR L'AXE DES Y.
WORK1:   WORD        0               < VARIABLE DE TRAVAIL...
MCDAM:   WORD        0               < MOT COURANT DE LA 'CDA'.
CTCDA:   WORD        TV2-TV1         < POUR PASSER DE TV1 A TV2...
XCTCDA:  WORD        0               < IDEM...
INTC:    WORD        0               < 0 : PAS D'INTERPOLATION COULEURS,
                                     < 1 : INTERPOLATIONS DES COULEURS.
IMASKO:  WORD        0               < 0 : MASK OFF,
                                     < 1 : MASK ON...
FK:      FLOAT       1               < CONSTANTE 'K'...
F05:     FLOAT       0.5
F1:      FLOAT       1
FWORK:   FLOAT       0               < VARIABLE DE TRAVAIL...
         IF          MODE-ITEM,XWOR%7,,XWOR%7
<
< DONNEES DE SIMULATION DES ENTREES :
<
IEG:     WORD        0               < INDEX COURANT DE L'ITEM1.
NCP:     WORD        NBCAR*NBLIG-LNOM  < LONGUEUR MAX D'UN ITEM,
                                       < ON RETRANCHE LNOM, CAR LE NOM
                                       < D'UNE IMAGE DOIT ETRE IMPERATIVEMENT
                                       < DEVANT L'IMAGE...
AI1:     WORD        ITEM1+LTN,X     < RELAI D'ACCES A L'ITEM1.
ABUFC:   WORD        0               < RELAI D'ACCES AU BUFFER COURANT.
XWOR%7:  VAL         0
<
< RELAIS DE TABLES, D'IMAGES...
<
ACOM:    WORD        KOM,X           < TABLE DES COMMANDES RECONNUES.
AMERR:   EQU         MERR            < MESSAGE D'ERREUR.
         IF          MODE-VISU,XWOR%7,,XWOR%7
AMINT:   EQU         MINT            < MESSAGE D'INVITATION.
AMNOM:   EQU         MNOM            < "NOM="
AMORGX:  EQU         MORGX           < "ORGX="
AMORGY:  EQU         MORGY           < "ORGY="
AMTORE:  EQU         MTORE           < "TORE?"
AMASKO:  EQU         MASKO           < "MASK ON?"
AMSLAS:  EQU         MSLAS           < "/"
AMTRX:   EQU         MTRX            < "TX="
AMTRY:   EQU         MTRY            < "TY="
AMK:     EQU         MK              < "K="
AMPOIN:  EQU         MPOINT          < "#POINTS="
AMPASQ:  EQU         MPASQ           < "PAS="
AMINTC:  EQU         MINTC           < "INTERPOLATION COULEURS?"
AMDIAF:  EQU         MDIAF           < "DIAPH?"
XWOR%7:  VAL         0
AREP:    WORD        REP             < ACCES AU BUFFER DE REPONSE...
AREPX:   WORD        REP,X           < DE MEME EN INDEXE...
ABUFIN:  WORD        BUFIN,X         < ACCES AU BUFFER DE GENERATION DU FOND.
AMCDAP:  EQU         MCDAP           < !CDAP.
AMCDA:   EQU         MCDA            < !CDA.
AMMCDA:  EQU         MMCDA           < !CDA.
API:     WORD        PI              < RELAI POUR RANGER "P" OU "I"...
AIMAGR:  WORD        IMAGR,X         < RELAI TRAME ROUGE,
AIMAGV:  WORD        IMAGV,X         < RELAI TRAME VERTE,
AIMAGB:  WORD        IMAGB,X         < RELAI TRAME BLEUE.
AITEM2:  WORD        ITEM2-1,X       < POUR RAZER LES ITEMS 1 ET 2.
AEOT:    WORD        NOM+LNOMP       < POUR FORCER UN EOT...
<
< RELAIS DE SOUS-PROGRAMMES :
<
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS...
         IF          MODE-VISU,XWOR%7,,XWOR%7
APRINT:  WORD        PRINT           < EDITION D'UN MESSAGE.
XWOR%7:  VAL         0
AENTER:  WORD        ENTER           < ENTREE DE QUELQUE CHOSE SUR LA VISU...
AHEX:    WORD        HEX             < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE
AIN:     WORD        IN              < ENTREE D'UN CARACTERE REPONSE.
AIHEX:   WORD        IHEX            < ENTREE D'UN NOMBRE HEXA-DECIMAL.
ACCI:    WORD        CCI             < ACCES AU CCI.
AGOSGN:  WORD        GOSGN           < POUR ACCEDER AU SGN...
ASPAPR:  WORD        SPAPR           < ACCES A UN POINT RESIDENT (X,Y).
ASPAPS:  WORD        SPAPS           < ACCES A UN POINT SCRATCH (X,Y).
ASPSPR:  WORD        SPSPR           < RANGEMENT D'UN POINT RESIDENT (X,Y).
ASPSPS:  WORD        SPSPS           < RANGEMENT D'UN POINT SCRATCH (X,Y).
ASPGPR:  EQU         ASPAPR
ASPGPS:  EQU         ASPAPS
ASPRPR:  EQU         ASPSPR
ASPRPS:  EQU         ASPSPS
ASPSCD:  WORD        SPSCD           < TRANSFERT BRUTAL EN SCRATCH.
ASPACD:  WORD        SPACD           < TRANSFERT EN RESIDENT AVEC MASQUE,
ASPBCD:  WORD        SPBCD           < TRANSFERT EN RESIDENT SANS MASQUE.
APMOV5:  WORD        PMOV5           < TV R --> RESIDENT,
APMOV6:  WORD        PMOV6           < TV V --> RESIDENT,
APMOV7:  WORD        PMOV7           < TV B --> RESIDENT.
ASP:     WORD        0               < RELAI VARIABLE CONTENANT L'ADRESSE DE
                                     < L'UN DES SOUS-PROGRAMMES PRECEDENTS.
ASPOP:   WORD        SPOP            < OPERATIONS INTER-IMAGES...
AGZB:    WORD        GZB             < ACCES AU Z-BUFFER...
ALOOP:   WORD        LOOP            < BOUCLE DE L'INTERROGATION.
         IF          MODE-ITEM,XWOR%7,,XWOR%7
AALTM:   WORD        ALTM            < TRAITEMENT DES RETOURS BRUTAUX...
XWOR%7:  VAL         0
<
< DEMANDES A CMS5 :
<
DEMIN:   WORD        '0101           < ENTREE D'UN CARACTERE DE REPONSE.
         WORD        REP-ZERO*NOCMO
         WORD        1
DEMHEX:  WORD        '0101           < ENTREE D'UN NOMBRE HEXA-DECIMAL.
         WORD        REP-ZERO*NOCMO
         WORD        NBRHEX
DEMOUT:  WORD        '0202           < ECRITURE D'UN MESSAGE SUR LA VISU.
         WORD        MERR-ZERO*NOCMO+1
         WORD        1               < MESSAGE D'ERREUR POUR " P"...
DEMMEM:  WORD        4               < DEMANDE DE 16 K MOTS...
RELMEM:  WORD        4               < RETOUR A 4K MOTS...
         WORD        '8000
         WORD        '2000
DEMCC:   WORD        2               < ACCES AU CCI INTERPRETATIF.
         WORD        0               < ADRESSE DE LA CARTE.
         WORD        80
NOMIN:   WORD        '0101           < ENTREE DU NOM D'UNE IMAGE.
         WORD        NOM-ZERO*NOCMO
         WORD        LNOMP*NOCMO
SGN:     WORD        '0002           < POUR LES ACCES AU SGN.
         WORD        NOM-ZERO*NOCMO
         WORD        LIMAG*NCOOL+LNOM*NOCMO
         WORD        -1              < LA VALEUR SUIT LE NOM...
TVDKU:   VAL         '8A01           < ACCES A 'DKU' POUR LA 'TV'.
DEMTVR:  WORD        TVDKU           < ACCES AU ROUGE.
         WORD        IMAGR-ZERO*NOCMO
         WORD        LIMAG*NOCMO
         WORD        TVPR
DEMTVV:  WORD        TVDKU           < ACCES AU VERT.
         WORD        IMAGV-ZERO*NOCMO
         WORD        LIMAG*NOCMO
         WORD        TVPV
DEMTVB:  WORD        TVDKU           < ACCES AU BLEU.
         WORD        IMAGB-ZERO*NOCMO
         WORD        LIMAG*NOCMO
         WORD        TVPB
DEMLOD:  BYTE        '80?SGNLNS;'02  < DEMANDE DE CHARGEMENT DE "GE".
         WORD        BRANCH-ZERO*NOCMO
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO
         WORD        -1
         IF          MODE-ITEM,XWOR%7,,XWOR%7
SITEM1:  DZS         LNOM/NOCMO      < POUR SAUVEGARDER LA FIN DE L'ITEM1.
XWOR%7:  VAL         0
<
< ACCES AU Z-BUFFER :
<
RDKU:    BYTE        '8A;'0C         < 'DKU' --> 'MEMTV' EN QUANTA=1.
         WORD        IZBUF*NOCMO
         WORD        LIZBUF*NOCMO
         WORD        0
WDKU:    BYTE        '8A;'0E         < 'MEMTV' --> 'DKU' EN QUANTA=1.
         WORD        IZBUF*NOCMO
         WORD        LIZBUF*NOCMO
         WORD        0
SDKU:    WORD        -1              < NUMERO DU BLOC COURANT, N'EXISTE PAS
                                     < AU CHARGEMENT.
MDKU:    WORD        0               < COMPTAGE DES MODIFS DU BLOC COURANT.
ZBUF:    WORD        0               < 0 : Z-BUFFER INHIBE (!CDAP),
                                     < 1 : Z-BUFFER AUTORISE (!CDAI).
ZMAX:    WORD        '7FFF           < PLUS GRAND NOMBRE POSITIF...
ASPDKU:  WORD        SPDKU           < ECRITURE DU BLOC COURANT...
<
< DONNEES DE SIMULATION DU DIAPHRAGME :
<
POINTS:  WORD        0               < COMPTEUR DES POINTS...
NPTS:    EQU         POINTS          < COMPTAGE DES ASSOCIATIONS LORS D'UNE
                                     < INTERPOLATION.
LB0:     WORD        0               < LONGUEUR DU BRAS COURANT DE LA SPIRALE.
LB:      WORD        0               < NOMBRE DE POINTS ENCORE A TRAITER
                                     < SUR LE BRAS COURANT DE LA SPIRALE.
NP:      WORD        0               < NOMBRE DE POINTS DEJA TRAITES,
NPNN:    WORD        0               < NOMBRE DE POINTS NON NOIRS RECONTRES
                                     < SUR UNE SPIRALE.
NPM:     WORD        0               < NOMBRE DE POINTS A TRAITER.
DELTAX:  WORD        0               < PAS D'INCREMENTATION DE X,
DELTAY:  WORD        0               < PAS D'INCREMENTATION DE Y.
PASQ:    WORD        1               < VALEUR INITIALE DU PAS...
CUMUL:   WORD        0               < CUMUL DES NIVEAUX DES POINTS D'UNE
                                     < SPIRALE.
FNPM:    FLOAT       0               < NPM EN FLOTTANT...
FC10:    FLOAT       10              < CONSTANTE ARBITRAIRE,
FC2:     FLOAT       2
RDN:     WORD        4397            < NOMBRE ALEATOIRE COURANT.
RDN1:    WORD        5189            < CONSTANTE
RDN2:    WORD        6791            < DE CALCUL DES
RDN3::   VAL         19              < NOMBRE ALEATOIRES...
RDN4:    WORD        7993            < 2EME NOMBRE ALEATOIRE COURANT.
RDN5:    WORD        4021
RDN6::   VAL         23
PC:      WORD        0               < SAUVEGARDE DE NIVEAU(XR,YR).
         PAGE
<
<
<        C O M M O N  :
<
<
         COMMON
COMON:   WORD        0               < LE PREMIER MOT DU COMMON EST RESERVE
                                     < A L'OPERATEUR FLOTTANT !!!
<
< RELAIS :
<
ASPMOY:  WORD        SPMOY           < SIMULATION DU DIAPHRAGME...
AFOND:   WORD        SPFOND          < SOUS-PROGRAMME DE FONDU ENCHAINE.
ASPINT:  WORD        SPINT           < RECHERCHE DES ASSOCIATIONS LORS
                                     < D'UNE INTERPOLATION.
ASPRAZ:  WORD        SPRAZ           < MISE AU NOIR DE (XR,YR).
AROND:   WORD        ROND            < ARRONDI FLOTTANT...
<
< DONNEES DE BOUCHAGE :
<
LNIV:    EQU         $
         DZS         NIVMAX+1        < UN MOT PAR NIVEAU ; LE MOT DE RANG (X)
                                     < COMPTE LES OCCURENCES DU NIVEAU (X) SUR
                                     < LA SPIRALE COURANTE...
ALNIV0:  WORD        LNIV,X          < RELAIS
ALNIV1:  WORD        LNIV-1,X        < D'ACCES...
IDIAF:   WORD        0               < 0 : SIMULATION D'UN DIAPHRAGME,
                                     < 1 : BOUCHAGE DES TROUS...
         PAGE
<
<
<        T A B L E   D E S   C O M M A N D E S  :
<
<
REP0:    VAL         "+"             < PREMIERE COMMANDE.
KOM:     EQU         $-REP0          < ELLES COMMENCENT A "+"...
         WORD        STORE           < + : STORE SGN LE RESIDENT
AERROR:  WORD        ERROR           < ,
         WORD        DELETE          < - : DELETE SGN LE RESIDENT
         WORD        ERROR           <.
         WORD        ERROR           < /
         WORD        MOV0            < 0 : TV <-- RESIDENT R+V+B
         WORD        MOV1            < 1 : TV <-- RESIDENT R
         WORD        MOV2            < 2 : TV <-- RESIDENT V
         WORD        MOV3            < 3 : TV <-- RESIDENT B
         WORD        MOV4            < 4 : RESIDENT <-- TV R+V+B
         WORD        MOV5            < 5 : RESIDENT <-- TV R
         WORD        MOV6            < 6 : RESIDENT <-- TV V
         WORD        MOV7            < 7 : RESIDENT <-- TV B
         WORD        ERROR           < 8
         WORD        ERROR           < 9
         WORD        ERROR           < :
         WORD        ERROR           < ;
         WORD        ERROR           < <
         WORD        ERROR           < =
         WORD        ERROR           < >
         WORD        ERROR           < ?
         WORD        ERROR           < @
         WORD        ERROR           < A
         WORD        ERROR           < B
         WORD        ERROR           < C
         WORD        DISP            < D : RESIDENT <-- IMAGE SGN
         WORD        ERROR           < E
         WORD        GOGE            < F : FIN
         WORD        ERROR           < G
         WORD        FONDU           < H : RESIDENT <-- (RESIDENT).FONDU.(SCRA)
         WORD        INTER           < I : INTERPOLATION RESIDENT --> SCRATCH.
         WORD        JNTER           < J : IDEM A 'I' SANS ASSOCIATION...
         WORD        INFK            < K : ENTREE CTTE TRANSFORMATION
         WORD        IMLOAD          < L : RESIDENT <-- (SCRATCH) SANS MASQUE
         WORD        ERROR           < M
         WORD        NAME            < N : NOMME L'IMAGE RESIDENTE
         WORD        ERROR           < O
         WORD        ERROR           < P
         WORD        MOYEN           < Q : SIMULATION D'UN DIAPHRAGME
         WORD        ERROR           < R
         WORD        IMSAV           < S : SCRATCH <-- (RESIDENT)
         WORD        ERROR           < T
         WORD        IMUP            < U : RESIDENT <-- (SCRATCH) AVEC MASQUE
         WORD        ERROR           < V
         WORD        GOCCI           < W : RETOUR TEMPORAIRE AU CCI
         WORD        GORGX           < X : POSITIONNEMENT DE 'ORGX'
         WORD        GORGY           < Y : POSITIONNEMENT DE 'ORGY'
         WORD        ERROR           < Z
REPZ:    VAL         $-KOM-1         < DERNIERE COMMANDE.
         PAGE
         PROG
         IF          MODE-VISU,XWOR%7,,XWOR%7
<
<
<        E D I T I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=ADRESSE MOT DU MESSAGE, DONT LE
<                    PREMIER OCTET EST LA LONGUEUR.
<
<
PRINT:   EQU         $
         PSR         A,X,C
         LR          A,C
         ADR         A,A
         ADRI        1,A             < CALCUL DE L'ADRESSE OCTET DU MESSAGE.
         STA         DEMOUT+1
         LBY         0,C             < ACCES A LA LONGUEUR...
         STA         DEMOUT+2
         LAD         DEMOUT
         SVC         0               < ENVOI DU MESSAGE...
         PLR         A,X,C
         RSR
XWOR%7:  VAL         0
         PAGE
<
<
<        E N T R E E   D E   Q U E L Q U E   C H O S E  :
<
<
<        ARGUMENT :
<                    A=ADRESSE DE LA DEMANDE.
<
<
         IF          MODE-VISU,XWOR%7,,XWOR%7
ENTER:   EQU         $
         PSR         X
         SVC         0               < ENVOI DE LA DEMANDE...
         PLR         X
         RSR
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
ENTER:   EQU         $
         PSR         A,X,Y,W
         LR          A,W             < W=ADRESSE DE LA DEMANDE :
         LRM         A
         WORD        '0101
         CP          0,W             < EST-CE BIEN UNE ENTREE AVEC ECHO
                                     < SUR LA VISU UTILISATEUR ???
         JE          ENTER1          < OUI...
         QUIT        1               < NON, ???!???!
ENTER1:  EQU         $
         LA          1,W             < A=ADRESSE OCTET DU BUFFER,
         LYI         0               < Y=INDEX DU BUFFER,
         SLRS        NOCMO=0         < CONVERSION EN UNE ADRESSE MOT,
         ADCR        Y               < Y=INDEX INITIAL DU BUFFER COURANT.
         SBT         0               < MISE EN PLACE DU BIT INDEX,
         STA         ABUFC           < ET GENERATION DU RELAI VERS LE BUFFER.
         LX          2,W             < X=NOMBRE D'OCTETS MAX A DEPLACER...
ENTER2:  EQU         $
         PSR         X
         LA          IEG             < A=INDEX COURANT DE L'ITEM1,
         CP          NCP             < ET VALIDATION ???
         JL          ENTER3          < OK...
         BR          AALTM           < NON, ON FAIT COMME SI UN ALT-MODE
                                     < ETAIT ARRIVE...
ENTER3:  EQU         $
         IC          IEG             < PROGRESSION DE L'INDEX DE L'ITEM1.
         LR          A,X             < X=INDEX D'ACCES A L'ITEM1,
         LBY         &AI1            < A=CARACTERE COURANT DE L'ITEM1,
         CPI         " "             < EST-CE L'ELEMENT NEUTRE ???
         JNE         ENTER6          < NON...
         PLR         X               < OUI,
         LR          X,A
         CP          2,W             < EST-ON EN TETE DU MESSAGE ???
         JE          ENTER2          < OUI, ON IGNORE LE 'SPACE'...
         PSR         X               < NON, ON LE CONSERVE...
         LAI         " "             < RESTAURATION DE 'A'...
ENTER6:  EQU         $
         CPI         ";"             < EST-CE LA FIN DE MESSAGE ???
         JNE         ENTER4          < NON,
         LAI         '04             < OUI, ON LE REMPLACE PAR 'EOT'...
ENTER4:  EQU         $
         LR          Y,X
         STBY        &ABUFC          < ET RANGEMENT DANS LE BUFFER...
         ADRI        1,Y             < PROGRESSION DE L'INDEX BUFFER.
         PLR         X
         CPI         '04             < EST-CE UNE FIN DE MESSAGE ???
         JE          ENTER5          < OUI, ON ARRETE LA...
         JDX         ENTER2          < NON, ON CONTINUE...
ENTER5:  EQU         $
         PLR         A,X,Y,W
         RSR
XWOR%7:  VAL         0
         PAGE
<
<
<        C O N V E R S I O N   H E X A   -->   B I N A I R E  :
<
<
<        ARGUMENT :
<                    LE BUFFER 'REP'.
<
<
<        RESULTAT :
<                    B=0 : (A)=VALEUR BINAIRE,
<                    B#0 : ERREUR DE SYNTAXE HEXA-DECIMALE.
<                    LES INDICATEURS POSITIONNES SUR (B).
<
<
HEX:     EQU         $
BASE10:  VAL         10
BASE16:  VAL         16
         PSR         X,Y
         LYI         NBRHEX
         LXI         0               < INDEX DU BUFFER DE REPONSE.
         LBI         0               < CLEAR LE REGISTRE B.
HEX1:    EQU         $
         LBY         &AREPX          < A=CARACTERE COURANT DU BUFFER.
         ADRI        -"0",A
         JAL         HEX4            < ERREUR : CARACTERE NON RECONNU.
         CPI         BASE10          < EST-CE UN CHIFFRE ???
         JL          HEX2            < OUI , C'EST UN CHIFFRE.
         ADRI        -"A"+"9"+1,A    < NON.
         CPI         BASE10          < VALIDATION.
         JL          HEX4            < ERREUR : CARACTERE NON RECONNU.
         CPI         BASE16          < VALIDATION.
         JGE         HEX4            < ERREUR : CARACTERE NON RECONNU.
HEX2:    EQU         $
         SCRS        NBITMO/NBRHEX   < MISE DES 4 BITS EN TETE DE A.
         SCLD        NBITMO/NBRHEX   < ET CONCATENATION A B.
         ADRI        1,X             < PROGRESSION DE L'INDEX.
         CPR         X,Y             < EST-CE FINI ???
         JNE         HEX1            < NON , ON CONTINUE.
         LR          B,A             < A=VALEUR BINAIRE DE (REP).
         LBI         0               < B=0 : RETOUR OK.
HEX3:    EQU         $
         PLR         X,Y
         CPZR        B               < POSITIONNEMENT DES INDICATEURS.
         RSR
<
< RETOURS EN ERREUR :
<
HEX4:    EQU         $
         LR          B,A             < A=VALEUR COURANTE...
         LBI         1               < B#0.
         JMP         HEX3            < VERS LA SORTIE ...
         PAGE
<
<
<        E N T R E E   U N   C A R A C T E R E  :
<
<
IN:      EQU         $
         LAD         DEMIN
         BSR         AENTER
         LBY         &AREP           < A=CARACTERE REPONSE.
         RSR
         PAGE
<
<
<        E N T R E E   U N   N O M B R E   H E X A - D E C I M A L  :
<
<
IHEX:    EQU         $
         LAD         DEMHEX
         BSR         AENTER
         BSR         AHEX            < DONC MEMES RESULTATS QUE 'HEX'...
         RSR
         PAGE
<
<
<        E N V O I   D ' U N E   C A R T E   A U   C C I  :
<
<
<        ARGUMENT :
<                    A=ADRESSE MOT DE LA CARTE.
<
<
CCI:     EQU         $
         ADR         A,A             < CONVERSION EN UNE ADRESSE OCTET.
         STA         DEMCC+1
         LAD         DEMCC
         SVC         0               < ET ENVOI DE LA CARTE...
         RSR
         PAGE
<
<
<        T R A I T E M E N T   D E S   E R R E U R S  :
<
<
ERROR:   EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMERR-ZERO
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR...
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
         LAD         DEMOUT
         SVC         0               < EDITION DU MESSAGE D'ERREUR...
XWOR%7:  VAL         0
         BR          ALOOP           < ET C'EST TOUT...
         PAGE
<
<
<        R E T O U R   A   ' G E '  :
<
<
GOGE:    EQU         $
         IF          MODE-ITEM,XWOR%7,,XWOR%7
         LAI         BRANCH-ZERO
         LR          A,W             < W=ADRESSE DE LA BRANCHE...
         LA          NSD
         STA         0,W             < GENERATION DU NOM DE L'OVERALY,
         ACTD        4               < A='IDESC',
         ORI         "0"             < CONVERTI EN ASCI,
         STBY        2,W             < QUI FAIT PARTIE DU NOM...
         LAI         SGNLON
         STBY        DEMLOD          < MISE EN MODE 'LOAD SOUS ACN'...
         STZ         CDRET,W         < RETOUR OK...
GOGE2:   EQU         $
         LRM         A,B,X
         WORD        SITEM1          < A=ZONE DE SAUVEGARDE,
         WORD        NOM             < B=ZONE A RESTAURER,
         WORD        LNOM/NOCMO      < X=NOMBRE DE MOTS A RESTAURER.
         MOVE                        < RESTAURATION DU BOUT DE L'ITEM1...
         LX          NMOTS
GOGE3:   EQU         $
         STZ         &AITEM2         < RAZ DE L'ITEM2...
         JDX         GOGE3
XWOR%7:  VAL         0
         LA          SAVEK
         LR          A,K             < RESTAURATION DE 'K'...
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAD         RELMEM
         SVC         0               < RETOUR A 4K MOTS...
         LX          NMOTS           < X=NOMBRE DE MOTS A RAZER...
TW2:     EQU         $
         STZ         &AITEM2         < RAZE DES ITEMS 1 ET 2.
         JDX         TW2
         LAI         BRANCH-ZERO
         LR          A,W             < RESTAURATION DE 'W'.
         STZ         MODCAL,W        < REINITIALISATION DU MODE D'APPEL...
         LA          NGE
         STA         0,W             < MISE EN PLACE DU NOM DE "GE"...
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
         LA          IEG
         STA         MODCAL,W        < RENVOI DE L'INDEX COURANT DE ITEM1,
XWOR%7:  VAL         0
         LAI         AMCDA-ZERO
         BSR         ACCI            < ENVOI DE !CDA.
GOGE1:   EQU         $
         LAD         DEMLOD
         BSR         AOVL            < ET TENTATIVE DE CHARGEMENT...
         QUIT        1               < EN CAS D'ERREUR,
         JMP         GOGE1           < ET ON RETENTE...
         IF          MODE-ITEM,XWOR%7,,XWOR%7
<
<
<        T R A I T E M E N T   D E S   A L T - M O D E S  :
<
<
ALTM:    EQU         $
         LAI         BRANCH-ZERO
         LR          A,W             < W=ADRESSE DE LA BRANCHE...
         LA          NPCALL
         JANE        ALTM1           < OK...
         LA          MODCAL,W        < MODCAL EST ENCORE A SA VALEUR INITIALE.
         LXI         0               < "GE" A PRIORI...
         TBT         0               < "EI" OU "GE" ???
         ADCR        X
         LA          &NCALL          < A=OVERLAY A APPELER...
ALTM1:   EQU         $
         STA         0,W             < DANS LE CAS D'UN ALT-MODE, ON REVIENT
                                     < DIRECTEMENT A "GE" OU A "EI"...
         LAI         " "             < ON RESTAURE, AU CAS OU LE ALT-MODE
         STBY        2,W             < APPARAITRAIT DANS 'GOGE'...
         LAI         SGNLNS          < IDEM...
         STBY        DEMLOD
         LAI         2
         STA         CDRET,W         < TRANSMISSION DU ALT-MODE...
         JMP         GOGE2
XWOR%7:  VAL         0
         PAGE
<
<
<        E N T R Y  :
<
<
TW:      EQU         $
         LRM         C,L
         WORD        COMON+128       < C=BASE DU COMMON...
         WORD        LOC+128         < L=BASE DU LOCAL...
         STZ         XCTCDA          < REINITIALISATION A CAUSE DU ALT-MODE...
         IC          KIN             < COMPTAGE DES ENTREES :
         IF          MODE-VISU,XWOR%7,,XWOR%7
         JG          TW1             < CAS DES ALT-MODES...
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
         JG          ALTM            < ABORT IMMEDIAT SUR ALT-MODE...
         LA          CDRET,W         < A=RELAI D'ACCES A ITEM1/ITEM2...
         CP          AI1             < SEUL ITEM1 EST AUTORISE...
         JNE         ALTM            < L'ITEM2 PROVOQUE UN ABORT...
         LA          MODCAL,W        < A=INDEX INITIAL DE L'ITEM1...
         LXI         0               < "GE" A PRIORI...
         TBT         0               < "GE" (0) OU "EI" (1) ???
         ADCR        X
         RBT         0
         STA         IEG
         LA          &NCALL
         STA         NPCALL          < NOM DU PROCESSEUR A APPELER SUR LA
                                     < RECEPTION D'UN ALT-MODE.
         LRM         A,B,X
         WORD        NOM             < A=ZONE A SAUVEGARDER,
         WORD        SITEM1          < B=ZONE DE SAUVEGARDE,
         WORD        LNOM/NOCMO      < X=NOMBRE DE MOTS.
         MOVE                        < SAUVEGARDE...
XWOR%7:  VAL         0
         LR          K,A             < CAS DE LA PREMIERE,
         STA         SAVEK           < SAUVEGARDE DE K...
TW1:     EQU         $
         LRM         K
         WORD        STACK-1         < INITIALISATION DE K...
TW20:    EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMMCDA-ZERO
         BSR         APRINT          < EDITION DE "!CDA"...
XWOR%7:  VAL         0
         BSR         AIN             < CHOIX ENTRE !CDAI ET !CDAP...
         STZ         ZBUF            < PAS DE Z-BUFFER A PRIORI...
         CPI         "P"
         JE          TW21            < VERS LA 'CDA-PRIVEE'...
         CPI         "I"
         JNE         TW20            < ?!??!??!
         IC          ZBUF            < DANS LE CAS DE LA 'CDA-IMAGE', ON
                                     < AUTORISE LE Z-BUFFER...
TW21:    EQU         $
         STBY        &API            < MISE EN PLACE DE "P" OU "I"...
         LAI         AMCDAP-ZERO
         BSR         ACCI            < TENTATIVE DE !CDAP OU !CDAI,
         JNE         GOGE            < ET BIEN CELA NE MARCHE PAS...
         STZ         IMASKO          < MISE DU MASQUE OFF A PRIORI...
         LAD         DEMMEM
         SVC         0               < PASSAGE A 16 K...
         LAI         '18
         WORD        '1E15
         LR          B,X             < X=ORIGINE DE LA 'CDAP'/'CDAI',
         LAI         '19
         WORD        '1E15
         SBR         X,B
XWOR%1:  VAL         -4              < B=LONGUEUR UTILE DE LA 'CDAP'/'CDAI',
         LRM         A
         WORD        IZBUF-TV1>XWOR%1 < A=LONGUEUR NECESSAIRE (IMAGE+MASQUE),
         CPR         A,B             < CELA SUFFIT-IL ???
         JL          GOGE            < B<A : INSUFFISANT POUR TRAVAILLER...
TW13:    EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMASKO-ZERO
         BSR         APRINT          < EDITION DE "MASK ON?"...
XWOR%7:  VAL         0
         BSR         AIN
         STZ         IMASKO          < OFF A PRIORI...
         CPI         "N"
         JE          TW14            < OK, IMASKO=0 ==> OFF...
         IC          IMASKO          < A PRIORI, IMASKO=1 ==> ON...
         CPI         "O"
         JNE         TW13            < ?!??!??!
TW14:    EQU         $
         PAGE
<
<
<        B O U C L E   D ' I N T E R R O G A T I O N  :
<
<
LOOP:    EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMINT-ZERO
         BSR         APRINT          < ENVOI DU MESSAGE ">",
XWOR%7:  VAL         0
         BSR         AIN
         CPI         REP0            < ET VALIDATION...
         JL          TW12            < ERREUR...
         CPI         REPZ            < VALIDATION, SUITE...
         JG          TW12            < ERREUR...
         LR          A,X             < X=COMMANDE DEMANDEE,
         BR          &ACOM           < BRANCHEMENT AU MODULE SPECIFIQUE...
TW12:    EQU         $
         BR          AERROR          < ERREUR...
         PAGE
<
<
<        A C C E S   A U   C C I  :
<
<
GOCCI:   EQU         $
         QUIT        1               < ACCES AU CCI INTERACTIF...
         BR          ALOOP
         PAGE
<
<
<        M O D U L E S   D ' A C C E S   A U   S G N  :
<
<
<        FONCTION :
<                      PERMETTENT L'ACCES AU SGN
<                    POUR LES IMAGES SUIVANT :
<                    N : NOMME L'IMAGE RESIDENTE,
<                        JUSQU'A UNE COMMANDE 'N'
<                        SUIVANTE,
<                    D : AFFICHE L'IMAGE PRECEDEMMENT
<                        NOMMEE PAR 'N'.
<                    + : CREE L'IMAGE PRECEDEMMENT
<                        NOMMEE PAR 'N',
<                    - : DETRUIT L'IMAGE PRECEDEMMENT
<                        NOMMEE PAR 'N'.
<
<
NAME:    EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMNOM-ZERO
         BSR         APRINT
XWOR%7:  VAL         0
         LAD         NOMIN
         BSR         AENTER          < ENTREE DU NOM COURANT,
         LAI         EOT
         STBY        &AEOT           < ET ON FORCE A PRIORI UN 'EOT'...
         BR          ALOOP           < ET C'EST TOUT...
<
< SOUS-PROGRAMME GENERAL D'ACCES AU SGN :
< (LORS DES 'LNS' ET 'LON', IL REGARDE
< SI LA LONGUEUR DE L'IMAGE VAUT EXACTE-
< MENT LIMAG*NCOOL*NOCMO ; SI NON, ELLE
< REITERE L'OPERATION AVEC UN DELTA
< NOM-VALEUR DE -1 CORRESPONDANT A UNE
< ANCIENNE VERSION DU PROGRAMME)
<
GOSGN:   EQU         $               < RESPONSABLE DE TOUS LES ACCES SGN...
         STBY        SGN             < MISE EN PLACE DU 'NVP' ARGUMENT,
         LAI         LNOM*NOCMO
         STA         SGN+3           < A PRIORI...
         LAD         SGN
         SVC         0               < ET ENVOI DE LA DEMANDE...
         LBY         SGN
         CPI         SGNDLN
         JE          GOSGN1          < CAS D'UN DELETE...
         CPI         SGNSTN
         JE          GOSGN1          < CAS D'UN STORE...
         ACTD        3               < CAS D'UN LOAD : B=LONGUEUR DE L'IMAGE,
         LRM         A
         WORD        LIMAG*NCOOL*NOCMO
         CPR         A,B             < S'AGIT-IL D'UNE ANCIENNE OU D'UNE
                                     < NOUVELLE IMAGE ???
         JE          GOSGN1          < NOUVELLE : DELTA=LNOM*NOCMO...
         LAI         -1              < ANCIENNE :
         STA         SGN+3           < IL FAUT LA RECUPERER AVEC DELTA=-1...
         LAD         SGN
         SVC         0               < ON REITERE LE LOAD...
GOSGN1:  EQU         $
         CPZR        X               < TEST DES CONDITIONS DE RETOUR...
         RSR
<
< MODULES SPECIFIQUES :
<
DISP:    EQU         $               < COMMANDE 'D' :
         LAI         SGNLON          < ON COMMENCE PAR L'ACN DU DEMANDEUR,
         BSR         AGOSGN
         JE          DISP1           < OK, IL EXISTE...
         LAI         SGNLNS          < NON, ON TENTE SOUS :SYS...
         BSR         AGOSGN
         JE          DISP1           < OK...
DISP2:   EQU         $
         BR          AERROR          < TRAITEMENT DES ERREURS...
DISP1:   EQU         $
         BR          ALOOP           < VERS LA BOUCLE SI OK...
DELETE:  EQU         $               < COMMANDE '-' :
         LAI         SGNDLN
DELET1:  EQU         $
         BSR         AGOSGN
         JE          DISP1           < OK...
         JMP         DISP2           < ERREUR...
STORE:   EQU         $               < COMMANDE '+' :
         LAI         SGNSTN
         JMP         DELET1
         PAGE
<
<
<        A C C E S   A U   Z - B U F F E R  :
<
<
<        UTILISATION DES REGISTRES :
<                    A=ADRESSE D'UN MOT DANS LE Z-BUFFER (YS/XS),
<                    B=INFORMATION (INT(FZS)) A Y METTRE, OU RESULTAT...
<                    Y=YLOAD/YSTORE SUIVANT LE SENS...
<
<
GZB:     EQU         $
         STB         MCDAR           < AU CAS OU CE SERAIT 'YSTORE'...
         PSR         A,X
         LBI         0
XWOR%1:  VAL         LIZBUF=0
         SCLD        NBITMO-XWOR%1   < B=NUMERO DE BLOC,
         SLRS        NBITMO-XWOR%1   < A=ADRESSE DANS LE BLOC.
         XR          A,B             < A=NUMERO DE BLOC, B=ADRESSE DANS LE BLOC.
         CP          SDKU            < LE BLOC DEMANDE EST-IL LE BLOC COURANT ?
         JE          GZB2            < OUI...
<
< REECRITURE DU BLOC COURANT LORSQU'IL A ETE MODIFIE :
<
         PSR         A               < SAVE LE BLOC DEMANDE,
         BSR         ASPDKU          < ECRITURE DU BLOC COURANT S'IL EXISTE
                                     < ET S'IL A ETE MODIFIE...
         PLR         A               < RESTAURE LE BLOC DEMANDE...
<
< LECTURE DU BLOC DEMANDE :
<
GZB3:    EQU         $
         STA         SDKU            < NOUVEAU BLOC COURANT,
         STZ         MDKU            < PAS ENCORE MODIFIE...
XWOR%1:  VAL         NSDKU=0
         SLLS        XWOR%1          < CONVERSION EN UNE ADRESSE DKU...
         STA         RDKU+3
         LAD         RDKU
         SVC         0               < LECTURE DU BLOC DEMANDE...
<
< ACCES AU MOT DEMANDE :
<
GZB2:    EQU         $
         LRM         A
         WORD        IZBUF
         ADR         A,B             < B=ADRESSE DU MOT DEMANDE DANS LA 'CDAI'.
         LAD         MCDAR
         XR          A,B             < A=ADRESSE DU MOT DANS LA 'CDAI',
                                     < B=ADRESSE DU MOT OU RANGER/PRENDRE
                                     <   L'INFORMATION.
         LXI         1               < X=1 MOT A TRANSFERER...
YLOAD::  VAL         0               < MODE LOAD,
YSTORE:: VAL         1               < MODE STORE.
         CPZR        Y               < QUEL EST LE SENS DE L'OPERATION ???
         JE          GZB4            < LOAD...
         IC          MDKU            < STORE : DANS CE CAS, ON COMPTABILISE
                                     < LA MISE A JOUR...
         WCDA
         JMP         GZB5
GZB4:    EQU         $
         RCDA
GZB5:    EQU         $
         LB          MCDAR           < QUELQUE SOIT LE MODE 'B' EST BON...
         PLR         A,X
         RSR
<
<
<        E C R I T U R E   B L O C   C O U R A N T  :
<
<
SPDKU:   EQU         $
         LA          SDKU            < A=BLOC COURANT...
         JAL         GZB6            < IL N'EXISTE PAS, ON EST DONC A
                                     < L'INITIALISATION, ON NE PEUT
                                     < QUE LIRE LE Z-BUFFER SUR 'DKU'...
         CPZ         MDKU            < IL EXISTE, ALORS A-T'IL ETE MODIFIE ???
         JE          GZB6            < NON, INUTILE D'ECRIRE...
XWOR%1:  VAL         NSDKU=0
         IF          BIT>XWOR%1-NSDKU,,XWOR%,
         IF          ATTENTION : NSDKU DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%:   VAL         0
         SLLS        XWOR%1          < CONVERSION EN UNE ADRESSE SUR DKU...
         STA         WDKU+3
         LAD         WDKU
         SVC         0               < REECRITURE DU BLOC COURANT...
         JE          GZB6            < OK...
         QUIT        1               < DKU ?!??!??!!!
GZB6:    EQU         $
         RSR
         PAGE
<
<
<        A C C E S   A   U N   P O I N T   R E S I D E N T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME RECONSTITUE
<                    LE NIVEAU ASSOCIE A 3 BITS
<                    PARALLELES.
<
<
<        ARGUMENT :
<                    XR,YR = COORDONNEES DU POINT,
<
<
<        RESULTAT :
<                    A = NIVEAU DE GRIS DU POINT, SOIT R+V*2+B*4.
<
<
SPAPR:   EQU         $
         PSR         B,X,Y
         LX          XR              < X=ABSCISSE,
         LY          YR              < Y=ORDONNEE.
         LR          X,A             < A=COORDONNEE X,
         LBI         0
XWOR%1:  VAL         NBITMO=0
         SCLD        NBITMO-XWOR%1   < B=NUMERO DE MOT DANS LA LIGNE,
         SLRS        NBITMO-XWOR%1   < A=NUMERO DE BIT DANS LE MOT,
         LXI         NBITMO-BIT
         SBR         A,X             < X=DECALAGE D'ACCES AU BIT COURANT.
         XR          Y,B             < Y=NUMERO DU MOT DANS LA LIGNE,
         SLLD        NMOTL=0
         IF          NBITMO-NMOTL,,XWOR%,
         IF          ATTENTION : LA CONCATENATION QUI SUIT EST COMPLETEMENT
         IF          STUPIDE !!!
XWOR%:   VAL         0
         ORR         B,Y             < Y=NUMERO DU MOT DANS LA TRAME.
         XR          Y,X
         LA          &AIMAGB         < ACCES A LA TRAME BLEU,
         PSR         A
         LA          &AIMAGV         < ACCES A LA TRAME BLEUE,
         PSR         A
         LA          &AIMAGR         < ACCES A LA TRAME ROUGE.
         XR          X,Y
         SLRS        0,X
         SLRD        BIT             < RECUPERATION D'UN BIT ROUGE,
         PLR         A
         SLRS        0,X
         SLRD        BIT             < RECUPERATION D'UN BIT VERT,
         PLR         A
         SLRS        0,X
         ANDI        BIT             < RECUPERATION D'UN BIT BLEU.
         SLLD        NCOOL-BIT       < A=NIVEAU DE GRIS DU POINT (X,Y).
         PLR         B,X,Y
         RSR
         PAGE
<
<
<        A C C E S   A   U N   P O I N T   S C R A T C H  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME RECONSTITUE
<                    LE NIVEAU ASSOCIE A 3 BITS
<                    PARALLELES.
<
<
<        ARGUMENTS :
<                    XS,YS = COORDONNEES DU POINT SCRATCH,
<
<
<        RESULTAT :
<                    A=NIVEAU DE GRIS DU POINT SCRATCH.
<
<
SPAPS:   EQU         $
         PSR         B,X,Y
         LX          XS              < X=ABSCISSE,
         LY          YS              < Y=ORDONNEE.
         LR          X,A
         LBI         0
XWOR%1:  VAL         NBITMO=0
         SCLD        NBITMO-XWOR%1   < B=NUMERO DU MOT DANS LA LIGNE,
         SLRS        NBITMO-XWOR%1
         LXI         NBITMO-BIT
         SBR         A,X             < X=DECALAGE D'ACCES AUX BITS,
         PSR         X
         XR          Y,B
         SLLD        NMOTL=0+NBITMO
         ORR         Y,A             < A=NUMERO DU MOT DANS LA TRAME.
         AD          XCTCDA          < DISCRIMINATION TV1/TV2...
         LRM         B,X,Y
         WORD        MCDAR
         WORD        1
         WORD        LIMAG           < Y=LONGUEUR EN MOTS D'UNE TRAME.
         RCDA
                                     < ACCES A UN MOT ROUGE,
         LRM         B,X
         WORD        MCDAV
         WORD        1
         ADR         Y,A
         RCDA
                                     < ACCES A UN MOT VERT,
         LRM         B,X
         WORD        MCDAB
         WORD        1
         ADR         Y,A
         RCDA
                                     < ACCES A UN MOT BLEU.
         PLR         X               < RESTAURATION DU DECALAGE,
         LA          MCDAR
         SLRS        0,X
         SLRD        BIT             < RECUPERATION D'UN BIT ROUGE,
         LA          MCDAV
         SLRS        0,X
         SLRD        BIT             < RECUPERATION D'UN BIT VERT,
         LA          MCDAB
         SLRS        0,X
         ANDI        BIT             < RECUPERATION D'UN BIT BLEU,
         SLLD        NCOOL-BIT       < A=NIVEAU DE GRIS DU POINT.
         PLR         B,X,Y
         RSR
         PAGE
<
<
<        R A N G E M E N T   D ' U N   P O I N T   R E S I D E N T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME RANGE LE
<                    NIVEAU D'UN POINT SUR 3 BITS
<                    PARALLELES.
<
<
<        ARGUMENTS :
<                    XR,YR = COORDONNEES DU POINT,
<                    A = SON NIVEAU DE GRIS.
<
<
SPSPR:   EQU         $
         PSR         A,B,X,Y
         LX          XR              < X=ABSCISSE,
         LY          YR              < Y=ORDONNEE.
         PSR         A
         LR          X,A
         LBI         0
XWOR%1:  VAL         NBITMO=0
         SCLD        NBITMO-XWOR%1
         SLRS        NBITMO-XWOR%1
         LR          A,X             < X=NUMERO DE BITS.
         XR          Y,B
         SLLD        NMOTL=0
         ORR         B,Y             < Y=NUMERO DU MOT DANS LA TRAME.
         PLR         A               < A=NIVEAU DE GRIS DU POINT.
         SLRD        NCOOL           < ET MISE DANS B...
         XR          X,Y
         LA          &AIMAGR         < ACCES A UN MOT ROUGE,
         STA         SAVER
         LA          &AIMAGV         < ACCES A UN MOT VERT,
         STA         SAVEV
         LA          &AIMAGB         < ACCES A UN MOT BLEU.
         XR          X,Y
         SCLS        0,X
         SLLD        BIT             < RECUPERATION DU BIT BLEU,
         SCRS        BIT,X
         STA         SAVEB
         LA          SAVEV
         SCLS        0,X
         SLLD        BIT             < RECUPERATION DU BIT VERT,
         SCRS        BIT,X
         STA         SAVEV
         LA          SAVER
         SCLS        0,X
         SLLD        BIT             < RECUPERATION DU BIT ROUGE,
         SCRS        BIT,X
         XR          X,Y
         STA         &AIMAGR         < RANGEMENT DU MOT ROUGE,
         LA          SAVEV
         STA         &AIMAGV         < RANGEMENT DU MOT VERT,
         LA          SAVEB
         STA         &AIMAGB         < RANGEMENT DU MOT BLEU.
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        R A N G E M E N T   D ' U N   P O I N T   S C R A T C H  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME RANGE LE
<                    NIVEAU D'UN POINT SUR 3 BITS
<                    PARALLELES EN SCRATCH.
<
<
<        AGUMENTS :
<                    XS,YS = COORDONNEES DU POINT,
<                    A = SON NIVEAU DE GRIS.
<
<
SPSPS:   EQU         $
         PSR         A,B,X,Y
         PSR         A               < SAUVEGARDE DU NIVEAU,
         LX          XS              < DU POINT
         LY          YS              < SCRATCH (XS,YS).
         LR          X,A
         LBI         0
XWOR%1:  VAL         NBITMO=0
         SCLD        NBITMO-XWOR%1
         SLRS        NBITMO-XWOR%1
         LXI         NBITMO-BIT
         SBR         A,X             < X=AMPLITUDE DU DECALAGE...
         PSR         X
         XR          Y,B
         SLLD        NMOTL=0+NBITMO
         ORR         Y,A             < A=ADRESSE DU MOT ROUGE CONTENANT
                                     < (XS,YS) DANS LA 'CDA'...
         LRM         B,X,Y
         WORD        MCDAR
         WORD        1
         WORD        LIMAG           < Y=POUR PASSER D'UNE COULEUR A L'AUTRE.
         RCDA
                                     < ACCES AU MOT ROUGE,
         LRM         B,X
         WORD        MCDAV
         WORD        1
         ADR         Y,A
         RCDA
                                     < ACCES AU MOT VERT,
         LRM         B,X
         WORD        MCDAB
         WORD        1
         ADR         Y,A
         RCDA
                                     < ACCES AU MOT BLEU.
         PLR         X               < X=AMPLITUDE DU DECALAGE,
         STA         WORK1           < SAUVEGARDE DE LA DERNIERE ADRESSE...
         PLR         A               < A=NIVEAU DE GRIS DE (XS,YS).
         SLRD        NCOOL           < ET CADRAGE DANS 'B'...
         LA          MCDAB           < MSE A JOUR DU BLEU,
         SCRS        0,X
         SLRS        BIT
         SLLD        BIT
         SCLS        0,X
         STA         MCDAB
         LA          MCDAV           < MISE A JOUR DU VERT,
         SCRS        0,X
         SLRS        BIT
         SLLD        BIT
         SCLS        0,X
         STA         MCDAV
         LA          MCDAR           < MISE A JOUR DU ROUGE.
         SCRS        0,X
         SLRS        BIT
         SLLD        BIT
         SCLS        0,X
         STA         MCDAR
         LA          WORK1           < A=ADRESSE EN 'CDA' DU BLEU...
         LRM         B,X
         WORD        MCDAB
         WORD        1
         WCDA
                                     < MISE A JOUR DU BLEU,
         LRM         B,X
         WORD        MCDAV
         WORD        1
         SBR         Y,A
         WCDA
                                     < MISE A JOUR DU VERT,
         LRM         B,X
         WORD        MCDAR
         WORD        1
         SBR         Y,A
         WCDA
                                     < MISE A JOUR DU ROUGE.
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        O P E R A T I O N   I N T E R - I M A G E S  :
<
<
<        FONCTION :
<                      CETTE VERSION PROVISOIRE REALISE
<                    L'OPERATION .OP. DE LA FACON
<                    SUIVANTE :
<                    RESIDENT <-- (RESIDENT).OP.(SCRATCH)
<                    CETTE OPERATION N'ETANT EFFECTUEE
<                    QUE POUR LES BITS A 1 DU MASQUE...
<
<
SPOP:    EQU         $
         PSR         A,B,X,Y
         LY          ORGY
         STY         YS              < ORDONNEE SCRATCH.
         LYI         0               < Y=ORDONNEE.
         STY         YR
SPOP1:   EQU         $
         LXI         0
         STX         XR              < X=ABSCISSE.
         LX          ORGX
         STX         XS
SPOP2:   EQU         $
         LX          XS
         LY          YS
         PSR         X,Y             < SAUVEGARDE DE 'XS' ET 'YS'...
         LA          XS
         CPZ         MODX            < EST-ON SUR UN X-TORE ???
         JE          SPOP3           < OUI...
         JAL         SPOP5           < NON, ET XS EST OVERSCREEN...
         CPI         NPOLM1
         JG          SPOP5           < DE MEME...
         JMP         SPOP4           < OK, XS EST DANS L'ECRAN...
SPOP3:   EQU         $               < CAS OU L'ON EST SUR UN X-TORE :
         ANDI        NPOLM1
         STA         XS              < CALCUL MODULO DE XS...
SPOP4:   EQU         $
         LA          YS
         CPZ         MODY            < EST-ON SUR UN Y-TORE ???
         JE          SPOP6           < OUI...
         JAL         SPOP5           < NON, ET YS EST OVERSCREEN...
         CPI         NLIGM1
         JG          SPOP5           < DE MEME...
         JMP         SPOP7
SPOP6:   EQU         $               < CAS OU L'ON EST SUR UN Y-TORE :
         ANDI        NLIGM1
         STA         YS              < CALCUL MODULO DE YS...
SPOP7:   EQU         $
         CPZ         IMASKO
         JE          SPOP8           < LE MASQUE EST OFF...
         PSR         X,Y
         LX          XR              < X=COORDONNEE RESIDENTE,
         LY          YR              < AINSI QUE Y...
         LR          X,A
         LBI         0
XWOR%1:  VAL         NBITMO=0
         SCLD        NBITMO-XWOR%1   < B=NUMERO DU MOT SUR LA LIGNE,
         SLRS        NBITMO-XWOR%1   < A=NUMERO DU BIT DANS LE MOT,
         LR          A,X             < X=NUMERO DU BIT DANS LE MOT,
         XR          Y,B
         SLLD        NMOTL=0+NBITMO
         ORR         A,Y             < Y=NUMERO DU MOT DANS LE MASQUE,
         LRM         A
         WORD        AMASK
         ADR         Y,A             < A=ADRESSE DU MOT DANS LA 'CDA'.
         PSR         X
         LRM         B,X
         WORD        MCDAM           < B=ADRESSE DU MOT DE TRANSIT,
         WORD        1               < X=NOMBRE DE MOTS A DEPLACER.
         RCDA
         PLR         X
         LA          MCDAM           < ACCES AU MASQUE,
         TBT         0,X             < ALORS ???
         PLR         X,Y
         JNC         SPOP5           < LE MOT (X,Y) EST MASQUE...
SPOP8:   EQU         $
         BSR         ASP             < EXECUTION DE L'OPERATION VARIABLE .OP.
                                     < SUR LE COUPLE DE POINTS (X,Y).
SPOP5:   EQU         $
         PLR         X,Y             < RESTAURATION DE XS ET YS...
         STX         XS
         STY         YS
         IC          XS              < PROGRESSION DE XS,
         IC          XR              < ET DE XR,
         LA          XR
         CPI         NPOLM1          < EST-ON EN BOUT DE LIGNE ???
         JLE         SPOP2           < NON... BALAYAGE HORIZONTAL...
         IC          YS              < OUI, PROGRESSION DE YS,
         IC          YR              < ET DE YR...
         LA          YR
         CPI         NLIGM1          < EST-ON EN BOUT D'IMAGE ???
         JLE         SPOP1           < NON, BALAYAGE VERTICAL...
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        R E C H E R C H E   D U   V O I S I N
<        I M M E D I A T   D E   M E M E   C O U L E U R  :
<
<
SPINT:   EQU         $
         PSR         A,B,X,Y
         BSR         ASPGPR          < TEST DU NIVEAU(XR,YR)...
         JAE         SPINT7          < (XR,YR) EST NOIR, ON L'IGNORE...
         STA         CUMUL           < CUMUL=NIVEAU(POINT D'ORIGINE (XR,YR)).
         LA          XR
         LB          YR
         PSR         A,B             < SAUVEGARDE DU POINT (XR,YR).
         STZ         NP              < NP=NOMBRE DE POINTS TRAITES.
         LA          PASQ
         STA         DELTAX          < DELTAX <-- +1,
         STZ         DELTAY          < DELTAY <-- 0.
         LAI         1
         STA         LB0             < INITIALISATION DE LA LONGUEUR DU
                                     < PREMIER BRAS DE LA SPIRALE.
<
< PARCOURS D'UN BRAS :
<
SPINT1:  EQU         $
         LA          LB0
         STA         LB              < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPINT2:  EQU         $
         LA          NP
         CP          NPM             < EST-CE FINI ???
         JE          SPINT3          < OUI, ON N'A PAS TROUVE DE POINT A
                                     < ASSOCIER AU POINT ORIGINE...
         LA          XR
         STA         XS              < XS=XR...
         JAL         SPINT4          < LE POINT EST HORS-ECRAN...
         CPI         NPOLM1
         JG          SPINT4          < HORS-ECRAN...
         LA          YR
         STA         YS              < YS=YR...
         JAL         SPINT4          < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPINT4          < HORS-ECRAN...
         IC          NP              < COMPTAGE DES POINTS TESTES DANS L'ECRAN.
         BSR         ASPGPS          < A=NIVEAU(XS,YS), TEL QUE XS=XR, YS=YR.
         CPZ         INTC            < INTERPOLATION COULEURS ???
         JE          SPINT8          < NON...
         JAE         SPINT4          < OUI, MAIS (XS,YS) EST NOIR...
         JMP         SPINT9          < OUI, ET (XS,YS) N'EST PAS NOIR...
                                     < ALORS ON S'AERRETE LA...
SPINT8:  EQU         $               < PAS D'INTERPOLATION COULEURS :
         CP          CUMUL           < NIVEAU(XS,YS)=NIVEAU(POINT ORIGINE) ???
         JNE         SPINT4          < NON, PASSONS AU SUIVANT...
<
< CAS OU ON A TROUVE UN POINT (XS,YS) DE
< L'IMAGE D'ARRIVEE A ASSOCIER AU POINT
< ORIGINE (XR,YR) DE L'IMAGE DE DEPART :
<
SPINT9:  EQU         $
         IC          NPTS            < COMPTAGE DES ASSOCIATIONS...
         LA          YR
         SWBR        A,A
         OR          XR
         LR          A,X             < X=POINT ASSOCIE DE L'IMAGE D'ARRIVEE.
         PLR         A,B
         STA         XR              < RESTAURATION DU
         STB         YR              < POINT ORIGINE...
         SWBR        B,B
         ORR         A,B             < B=YR/XR DU POINT ORIGINE DE L'IMAGE
                                     < DE DEPART.
         LR          X,A             < A=YS/XS DU POINT ASSOCIE DE L'IMAGE
                                     < D'ARRIVEE.
         XR          A,B
         LYI         YSTORE
         BSR         AGZB            < ENVOI EN Z-BUFFER, TEL QUE :
                                     < (YR/XR)=YS/XS.
         JMP         SPINT7          < ET C'EST FINI...
<
< PARCOURS DE LA SPIRALE :
<
SPINT4:  EQU         $
         LA          XR
         AD          DELTAX          < CHANGEMENT DE
         STA         XR
         LA          YR
         AD          DELTAY          < POINT COURANT (XR,YR).
         STA         YR
         DC          LB              < DECOMPTAGE DES POINTS SUR LA BRANCHE :
         JG          SPINT2          < OK, IL EN RESTE...
         CPZ         DELTAX          < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
                                     < LA LONGUEUR COURANTE DES BRANCHES ???
         JNE         SPINT5          < NON (DX#0) ...
         IC          LB0             < OUI (DX=0) ...
SPINT5:  EQU         $
         LA          DELTAY          < ON FAIT SUBIR AU NOMBRE COMPLEXE
         NGR         A,A             < (DX,DY) UNE ROTATION DE PI/2, SOIT
         LB          DELTAX          < UNE MULTIPLICATION PAR LA MATRICE
                                     < (0,-1,1,0)...
         STA         DELTAX          < DELTAX=-DELTAY,
         STB         DELTAY          < DELTAY=DELTAX.
         JMP         SPINT1          < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPINT3:  EQU         $
         PLR         A,B
         STA         XR              < RESTAURATION
         STB         YR              < DE (XR,YR),
SPINT7:  EQU         $
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        M I S E   A U   N O I R   D E   ( X R , Y R )  :
<
<
SPRAZ:   EQU         $
         PSR         A
         LAI         0
         BSR         ASPRPR          < NIVEAU(XR,YR) <-- 0.
         PLR         A
         RSR
         PAGE
<
<
<        A R R O N D I   F L O T T A N T  :
<
<
ROND:    EQU         $
         JAL         ROND1
         FAD         F05
         JMP         ROND2
ROND1:   EQU         $
         FSB         F05
ROND2:   EQU         $
         FIX
         RSR
         PAGE
<
<
<        I N T E R P O L A T I O N  :
<
<
<        PHILOSOPHIE :
<                      ON CONSIDERE L'IMAGE RESIDENTE COMME
<                    L'IMAGE DE DEPART : D=(XR,YR), ET
<                    L'IMAGE SCRATCH COMME L'IMAGE D'ARRIVEE :
<                    A=(XS,YS) ; ON CONSIDERE CHAQUE POINT NON
<                    NOIR (XR,YR) DE 'D', ET ON CENTRE AU
<                    POINT (XS,YS) DE L'IMAGE 'A' TEL QUE
<                    XS=XR, YS=YR UNE SPIRALE DE LONGUEUR
<                    INDETERMINEE SUR LAQUELLE ON RECHERCHE
<                    LE PREMIER POINT (XS,YS) AYANT MEME
<                    NIVEAU QUE LE POINT ORIGINE DE LA
<                    RECHERCHE (XR,YR) ; ENSUITE ON INTERPOLE
<                    ENTRE (XR,YR) ET (XS,YS) A L'AIDE DE
<                    LA CONSTANTE FK :
<                    XR <-- (XR)+(XS-XR)*FK,
<                    YR <-- (YR)+(YS-YR)*FK.
<                    N(R) <-- N(R) SI PAS D'INTERPOLATION COULEUR,
<                    N(R) <-- N(R)+(N(S)-N(R))*FK SI OUI...
<
<
<        POINTS D'ENTREE :
<                    INTER : FAIT L'ASSOCIATION D --> A
<                            INITIALEMENT, PUIS L'INTERPOLATION...
<                    JNTER : REPREND UNE ASSOCIATION ANTERIEURE,
<                            PUIS FAIT L'INTERPOLATION...
<
<
INTER:   EQU         $
         CPZ         ZBUF            < Z-BUFFER ACTIF ???
         JNE         INT1            < OUI, OK...
         BR          AERROR          < NON, ERREUR !!!
INT1:    EQU         $
         STZ         NPTS            < RAZ DU NOMBRE D'ASSOCIATION...
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMPOIN-ZERO
         BSR         APRINT
XWOR%7:  VAL         0
         BSR         AIHEX
         JNE         INTER           < ERREUR...
         JAE         INTER           < NPM=0 !!!
         STA         NPM             < 'NPM' PEUT ETRE QUELCONQUE...
INT10:   EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMINTC-ZERO
         BSR         APRINT
XWOR%7:  VAL         0
         BSR         AIN
         STZ         INTC            < INTC=0 : NON A PRIORI...
         CPI         "N"
         JE          INT11           < "N"...
         CPI         "O"
         JNE         INT10           < ?!???!?!
         IC          INTC            < INTC=1 : OUI...
         LRM         A,B,X           < ET ALORS DUPLIQUONS L'IMAGE
                                     < RESIDDENTE EN TV2...
         WORD        TV2
         WORD        IMAGE
         WORD        LIMAG*NCOOL
         WCDA
INT11:   EQU         $
         LAI         1
         STA         PASQ            < PAS DE PARCOURS DE LA SPIRALE.
<
< CLEAR DU Z-BUFFER :
<
         LBI         0               < ON VA FORCER 0 PARTOUT...
         LAI         0
         LYI         YSTORE
INT5:    EQU         $
         BSR         AGZB
         ADRI        1,A             < AU MOT SUIVANT...
         JANE        INT5
         STZ         XS
         STZ         YS
         BSR         ASPRPS          < ON ELIMINE LE POINT XS=YS=0, CAR LA
                                     < LA CONFIGURATION '0000 EN Z-BUFFER
                                     < INDIQUE UNE NON-ASSOCIATION...
<
< RECHERCHE DES ASSOCIATIONS :
<
         LB          ASPINT
         STB         ASP
         BSR         ASPOP           < VERS LA RECHERCHE D'ASSOCIATIONS ENTRE
                                     < L'IMAGE DE DEPART ET CELLE D'ARRIVEE.
<
< INTERPOLATION :
<
JNTER:   EQU         $
         LB          ASPRAZ
         STB         ASP
         BSR         ASPOP           < REMISE AU NOIR DE L'IMAGE RESIDENTE,
                                     < QUI VA DONNER LA NOUVELLE IMAGE DE
                                     < DEPART...
<
< GENERATION DE LA NOUVELLE IMAGE DE
< DEPART OU IMAGE INTERMEDIAIRE :
<
         CPZ         NPTS            < TEST DU NOMBRE D'ASSOCIATIONS ???
         JE          INT2            < AUCUNE...
         LAI         0               < A=(YR/XR)=ADRESSE DANS LE Z-BUFFER.
INT3:    EQU         $
         PSR         A
         LYI         YLOAD
         BSR         AGZB            < B=(YS/XS) ASSOCIE A (YR/XR).
XWOR%1:  VAL         '00FF           < POUR MASQUER L'OCTET DROIT...
         CPZR        B               < L'ENTREE EST-ELLE VIDE ???
         JE          INT4            < BIEN QUE CELA NE SOIT PAS OBLIGATOIRE-
                                     < MENT VRAI, ON CONSIDERE QU'IL N'Y
                                     < EN A PAS ; ON PERD LE POINT XS=YS=0 !!!
                                     < (QUI A ETE DEJA ELIMINE...)
         XR          A,B
         PSR         A
         ANDI        XWOR%1
         STA         XS
         PLR         A
         SLRS        XWOR%1)MFFFF=0
         STA         YS              < (XS,YS)=POINT D'ARRIVEE.
         LAI         0
         SLLD        XWOR%1)MFFFF=0
         STA         YR
         LAI         0
         SLLD        XWOR%1)MFFFF=0
         STA         XR              < (XR,YR)=POINT DE DEPART.
         CPZ         INTC            < INTERPOLATION COULEURS ???
         JE          INT20           < NON...
         LA          XS
         LB          YS
         PSR         A,B             < SAUVEGARDE DE (XS,YS).
         LA          XR
         LB          YR
         STA         XS              < AFIN QUE L'ACCES
         STB         YS              < EN SCRATCH SOIT CORRECT...
         LA          CTCDA           < OUI,
         STA         XCTCDA
         BSR         ASPGPS          < ACCES A TV2, OU L'IMAGE RESIDENTE
                                     < INITIALE A ETE SAUVEGARDEE...
         STZ         XCTCDA
         STA         CUMUL           < CUMUL=NIVEAU(XR,YR)...
         PLR         A,B             < RESTAURATION DE (XS,YS)...
         CPZ         CUMUL           < VALIDATION ??!??!?!
         JG          INT20X          < OK...
         QUIT        1               < BERKK, PROBLEME DE MEMOIRE D'IMAGES !!!
         JMP         INT4            < ON IGNORE CE POINT...
INT20X:  EQU         $
         STA         XS
         STB         YS
INT20:   EQU         $
         LA          XS
         SB          XR
         FLT
         FMP         FK
         BSR         AROND
         AD          XR
         STA         XR              < INTERPOLATION :
                                     < XR <-- (XR)+(XS-XR)*FK.
         JAL         INT4            < HORS-ECRAN...
         CPI         NPOLM1
         JG          INT4            < HORS-ECRAN...
         LA          YS
         SB          YR
         FLT
         FMP         FK
         BSR         AROND
         AD          YR
         STA         YR              < INTERPOLATION :
                                     < YR <-- (YR)+(YS-YR)*FK.
         JAL         INT4            < HORS-ECRAN...
         CPI         NLIGM1
         JG          INT4            < HORS-ECRAN...
         BSR         ASPGPS          < A=NIVEAU(XS,YS),
         JAG         INT20Y          < OK...
         QUIT        1               < BERKK, PROBLEME DE MEMOIRE D'IMAGES !!!
         JMP         INT4            < ON IGNORE CE POINT...
INT20Y:  EQU         $
         CPZ         INTC            < INTERPOLATION COULEURS ???
         JE          INT21           < NON...
         SB          CUMUL           < OUI, INTERPOLONS LES COULEURS :
         FLT
         FMP         FK
         BSR         AROND
         AD          CUMUL           < NIV(XR,YR)+(NIV(XS,YS)-NIV(XR,YR))*FK,
         ANDI        NIVMAX          < QUE L'ON TRONQUE BRUTALEMENT...
INT21:   EQU         $
         BSR         ASPRPR          < GENERATION DE L'IMAGE INTERPOLEE
                                     < EN RESIDENT...
INT4:    EQU         $
         PLR         A
         ADRI        1,A             < A L'ASSOCIATION SUIVANTE...
         JANE        INT3
INT2:    EQU         $
         BR          ALOOP           < ET C'EST TOUT...
         PAGE
<
<
<        S I M U L A T I O N   D ' U N   D I A P H R A G M E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME ETUDIE LE
<                    VOISINNAGE DU POINT (XR,YR) SUR
<                    UNE SPIRALE CENTRE ; MOINS LE POINT
<                    EST ENTOURE, PLUS IL A DE CHANCE DE
<                    DISPARAITRE EN (XS,YS) ; ET INVERSEMENT
<                    PLUS IL EST ENTOUR, PLUS IL A DE CHANCE
<                    DE RESTER...
<
<
<        ARGUMENT :
<                    (XR,YR) = POINT RESIDENT COURANT.
<
<
SPMOY:   EQU         $
         PSR         A,B,X,Y
         CPZ         IDIAF           < DIAPHRAGME ???
         JE          SPMOYG          < OUI...
         LXI         NIVMAX+1        < NON, BOUCHAGE DES TROUS...
SPMOYH:  EQU         $
         STZ         &ALNIV1         < RAZ DES COMPTEURS D'OCCURENCE...
         JDX         SPMOYH
         JMP         SPMOY6
SPMOYG:  EQU         $
         BSR         ASPGPR          < SIMULATION D'UN DIAPHRAGME...
         JAE         SPMOY7          < SI 'DIAPH', ON IGNORE LES POINTS NOIRS...
         STA         PC              < SAUVEGARDE DE NIVEAU(XR,YR).
SPMOY6:  EQU         $
         IC          POINTS
         LA          XR
         LB          YR
         PSR         A,B             < SAUVEGARDE DU POINT (XR,YR).
         STZ         CUMUL           < CUMUL <-- 0.
         STZ         NP              < NP=NOMBRE DE POINTS TRAITES.
         STZ         NPNN            < NPNN=NOMBRE DE POINTS NON NOIRS TRAITES.
         LA          PASQ
         STA         DELTAX          < DELTAX <-- +1,
         STZ         DELTAY          < DELTAY <-- 0.
         LAI         1
         STA         LB0             < INITIALISATION DE LA LONGUEUR DU
                                     < PREMIER BRAS DE LA SPIRALE.
         CPZ         IDIAF           < DIAPHRAGME ???
         JNE         SPMOY8          < NON BOUCHAGE DES TROUS : ON COMMENCE
                                     < SUR LE POINT CENTRAL...
         LA          XR              < SIMULATION D'UN DIAPHRAGME :
         AD          DELTAX          < ON SAUTE LE POINT CENTRAL (XR,YR)...
         STA         XR
         LA          YR
         AD          DELTAY
         STA         YR
SPMOY8:  EQU         $
<
< PARCOURS D'UN BRAS :
<
SPMOY1:  EQU         $
         LA          LB0
         STA         LB              < LONGUEUR DU BRAS COURANT.
<
< TRAITEMENT DU POINT COURANT :
<
SPMOY2:  EQU         $
         IC          NP              < COMPTAGE DES POINTS TRAITES :
         LA          NP
         CP          NPM             < FINI ???
         JG          SPMOY3          < OUI...
         LA          XR              < NON :
         JAL         SPMOY4          < LE POINT EST HORS-ECRAN...
         CPI         NPOLM1
         JG          SPMOY4          < HORS-ECRAN...
         LA          YR
         JAL         SPMOY4          < HORS-ECRAN...
         CPI         NLIGM1
         JG          SPMOY4          < HORS-ECRAN...
         BSR         ASPGPR          < A=NIVEAU(XR,YR),
         XR          A,X
         IC          &ALNIV0         < COMPTAGE DES OCCURENCES DU NIVEAU (X)...
         XR          A,X
         JAE         SPMOY4
         IC          NPNN            < COMPTAGE DES POINTS NON NOIRS...
         AD          CUMUL           < ET
         STA         CUMUL           < CUMULE...
SPMOY4:  EQU         $
         LA          XR
         AD          DELTAX          < CHANGEMENT DE
         STA         XR
         LA          YR
         AD          DELTAY          < POINT COURANT (XR,YR).
         STA         YR
         DC          LB              < DECOMPTAGE DES POINTS SUR LA BRANCHE :
         JG          SPMOY2          < OK, IL EN RESTE...
         CPZ         DELTAX          < NON, ON EST AU BOUT, FAUT-IL AUGMENTER
                                     < LA LONGUEUR COURANTE DES BRANCHES ???
         JNE         SPMOY5          < NON (DX#0) ...
         IC          LB0             < OUI (DX=0) ...
SPMOY5:  EQU         $
         LA          DELTAY          < ON FAIT SUBIR AU NOMBRE COMPLEXE
         NGR         A,A             < (DX,DY) UNE ROTATION DE PI/2, SOIT
         LB          DELTAX          < UNE MULTIPLICATION PAR LA MATRICE
                                     < (0,-1,1,0)...
         STA         DELTAX          < DELTAX=-DELTAY,
         STB         DELTAY          < DELTAY=DELTAX.
         JMP         SPMOY1          < VERS LA BRANCHE SUIVANTE
<
< GENERATION DU POINT (XS,YS) :
<
SPMOY3:  EQU         $
         PLR         A,B
         STA         XR              < RESTAURATION
         STB         YR              < DE (XR,YR),
         STA         XS              < ET GENERATION
         STB         YS              < DE (XS,YS)...
         CPZ         IDIAF           < DIAPHRAGME ???
         JE          SPMOYI          < OUI...
<
< BOUCHAGE DES TROUS : ON VA REMPLACER
< LE NIVEAU DU POINT CENTRAL PAR LE
< NIVEAU DE PLUS FORTE OCCURENCE (ET
< LE PLUS LUMINEUX, SI'IL Y A EX-AEQUO) :
<
         LAI         -1              < POUR RECHERCHER LE MAX DES OCCURENCES,
         LXI         NIVMAX+1
SPMOYJ:  EQU         $
         CP          &ALNIV1         < ALORS ???
         JGE         SPMOYK          < MOINS D'OCCURENCES...
         LA          &ALNIV1         < ON VIENT DE TOMBER SUR UN NOUVEAU MAX
                                     < DES OCCURENCES,
         LR          X,B             < B=NIVEAU+1 CORRESPONDANT...
SPMOYK:  EQU         $
         JDX         SPMOYJ
         LR          B,A
         ADRI        -1,A            < A=NIVEAU DE PLUS FORTE OCCURENCE...
         JMP         SPMOYD          < VERS LE TRACE...
<
< SIMULATION DE LA FERMETURE D'UN DIAPHRAGME :
<
SPMOYI:  EQU         $
         LA          NPNN
         FLT
         FDV         FNPM            < NPNN/NPM.
         FMP         FK              < MODULATION...
         FMP         FC10
         FST         FWORK
         FMP         FWORK
         FAD         FC2
         FIX
         STA         CUMUL           < CUMUL EST UN PARAMETRE APPARTENANT
                                     < AU SEGMENT (FC2,FC2+FC10*FC10*FK) ; PLUS
                                     < CUMUL EST PROCHE DE LA BORNE SUPERIEURE
                                     < MOINS LE POINT DOIT DISPARAITRE...
         LA          RDN             < GENERATION DE NOMBRES ALEATOIRES :
         EOR         POINTS          < ON INTRODUIT UN AUTRE PARAMETRE...
         MP          RDN1
         SCRD        RDN3
         JANE        SPMOYC
         LR          B,A
         JANE        SPMOYC
         LA          FK              < REINITIALISATION...
         AD          FK+1            < ????
         AD          RDN2
SPMOYC:  EQU         $
         STA         RDN
         LA          RDN4            < CALCUL D'UN 2EME NOMBRE ALEATOIRE...
         MP          RDN5
         EOR         POINTS
         SCRD        RDN6
         JANE        SPMOYF
         LR          B,A
         JANE        SPMOYF
         LA          FK
         EOR         FK+1
         AD          RDN2
SPMOYF:  EQU         $
         STA         RDN4
         EOR         RDN
         SARD        NBITMO
         DV          CUMUL
         LA          PC              < A=NIVEAU(XR,YR),
         CPZR        B               < LE NOMBRE ALEATOIRE GENERE EST-IL
                                     < DIVISIBLE PAR 'CUMUL' ???
         JNE         SPMOYD          < NON, ON GARDE LE POINT...
         ADRI        -1,A            < OUI, ON REDUIT SON NIVEAU...
SPMOYD:  EQU         $
         BSR         ASPRPS          < QUE L'ON AFFECTE A (XS,YS).
SPMOY7:  EQU         $
         PLR         A,B,X,Y
         RSR
         PAGE
<
<
<        F O N D U   E N C H A I N E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EFFECTUE UN FONDU
<                    ENCHIANE ENTRE L'IMAGE RESIDENTE ET
<                    L'IMAGE SCRATCH SUIVANT LA VALEUR DE
<                    LA CONSTANTE 'FK' :
<
<                    RESIDENT <-- K*(SCRATCH)+(1-K)*(RESIDENT)
<
<
SPFOND:  EQU         $
         PSR         A,B
         FLD         F1
         FSB         FK
         FST         FWORK           < 1-K.
         BSR         ASPGPR          < A=NIVEAU(RESIDENT),
         FLT
         FMP         FWORK
         FST         FWORK           < (1-K)*(RESIDENT).
         BSR         ASPGPS          < A=NIVEAU(SCRATCH),
         FLT
         FMP         FK              < K*(SCRATCH).
         FAD         FWORK
         FIX
         ANDI        NIVMAX          < ((1-K)*(RESIDENT)+K*(SCRATCH)) MODULO
                                     < NIVMAX.
         BSR         ASPRPR          < QUE L'ON MET EN RESIDENT...
         PLR         A,B
         RSR
         PAGE
<
<
<        S I M U L A T I O N   D ' U N   D I A P H R A G M E  :
<
<
<        FONCTION :
<                      CETTE COMMANDE ETUDIE LE VOISINNAGE DE
<                    CHAQUE POINT RESIDENT ; PLUS IL EST
<                    ENTOURE, PLUS IL A DE CHANCE DE SUB-
<                    SISTER SUR L'IMAGE SCRATCH...
<
<
MOYEN:   EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMPOIN-ZERO
         BSR         APRINT          < EDITION DE "#POINTS="...
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DU NOMBRE DE POINTS.
         JNE         MOYEN           < ERREUR...
         JALE        MOYEN           < ERREUR...
         STA         NPM             < NPM=NOMBRE DE POINTS PAR SPIRALE (>1).
         FLT
         FST         FNPM            < FNP=NPM EN FLOTTANT...
MOYEN1:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMPASQ-ZERO
         BSR         APRINT          < "PAS="
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DU PAS.
         JNE         MOYEN1          < ERREUR, ON REDEMANDE...
         JALE        MOYEN1          < ERREUR...
         IF          NLIGM1-NPOLM1,,XWOR%9,
         IF          CE QUI SUIT EST IDIOT !!!
XWOR%9:  VAL         0
         CPI         NLIGM1?NPOLM1   < VALIDATION ???
         JG          MOYEN1          < ERREUR...
         STA         PASQ            < OK, LE PAS EST BON...
         STZ         IDIAF           < DIAPHRAGME A PRIORI...
MOYEN2:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMDIAF-ZERO
         BSR         APRINT
XWOR%7:  VAL         0
         BSR         AIN             < ENTREE DE LA REPONSE :
         CPI         "O"
         JE          MOYEN3          < DIAPHRAGME : IDIAF=0,
         CPI         "N"
         JNE         MOYEN2          < ?!??!
         IC          IDIAF           < BOUCHAGE DES TROUS : IDIAF=1.
MOYEN3:  EQU         $
         STZ         POINTS          < RAZ LE NOMBRE DE POINTS...
         LB          ASPMOY          < B=ADRESSE DU S/P DE MOYENNAGE...
         JMP         IM1
         PAGE
<
<
<        F O N D U   E N C H A I N E  :
<
<
FONDU:   EQU         $
         LB          AFOND           < B=ADRESSE DU SOUS-PROGRAMME...
         JMP         IM2             < VERS L'EXECUTION DU FONDU...
         PAGE
<
<
<        O P E R A T I O N S   I N T E R - I M A G E S  :
<
<
IMSAV:   EQU         $               < ENVOI DU RESIDENT EN SCRATCH.
         LBY         &API
         CPI         "P"             < EST-ON SUR LA 'CDA-PRIVE' ???
         JE          IMSAV1          < OUI, ON PEUT Y ALLER...
         BR          AERROR          < NON, SUR LA 'CDA-IMAGE', ET ALORS
                                     < GARE AUX MOVE DE PLUS D'UN MOT !!!
IMSAV1:  EQU         $
         BSR         ASPSCD
         BR          ALOOP
IMUP:    EQU         $               < RAPPEL DU SCRATCH EN RESIDENT AVEC MASK.
         LB          ASPACD
         JMP         IM2
IMLOAD:  EQU         $               < RAPPEL DU SCRATCH EN RESIDENT SANS MASK.
         LBY         &API
         CPI         "P"             < EST-ON SUR LA 'CDA-PRIVE' ???
         JE          IMLOAE          < OUI, ON PEUT Y ALLER...
         BR          AERROR          < NON, SUR LA 'CDA-IMAGE', ET ALORS
                                     < GARE AUX MOVE DE PLUS D'UN MOT !!!
IMLOAE:  EQU         $
         BSR         ASPBCD
         BR          ALOOP
IM1:     EQU         $
IM2:     EQU         $
         STB         ASP             < RELAI DYNAMIQUE DE SOUS-PROGRAMME.
         BSR         ASPOP
         BR          ALOOP
         PAGE
<
<
<        E N T R E E   D E   L A   C O N S T A N T E   ' K '
<
<
INFK:    EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMK-ZERO
         BSR         APRINT          < "K="
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DU NUMERATEUR,
         JNE         GORGX2          < ERREUR...
         LR          A,Y             < Y=SAVE LE NUMERATEUR...
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMSLAS-ZERO
         BSR         APRINT          < "/"
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DU DENOMINATEUR.
         JNE         GORGX2          < ERREUR...
         JAE         GORGX2          < NE PEUT ETRE NUL...
         FLT
         FST         FK
         LR          Y,A
         FLT
         FDV         FK              < NUMERATEUR/DENOMINATEUR...
         FST         FK              < OK...
         BR          ALOOP
         PAGE
<
<
<        E N T R E E   D E   ' O R G X '   E T   ' O R G Y '  :
<
<
GORGX:   EQU         $
         STZ         MODX            < TORE A PRIORI...
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMORGX-ZERO
         BSR         APRINT          < EDITION DU MESSAGE.
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DE ORGX,
         JE          GORGX1          < OK...
GORGX2:  EQU         $
         BR          AERROR          < ET NON...
GORGX1:  EQU         $
         NGR         A,A
         STA         ORGX
GORGX3:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMTORE-ZERO
         BSR         APRINT          < "TORE?"
XWOR%7:  VAL         0
         BSR         AIN             < ENTREE DE LA REPONSE...
         CPI         "O"
         JE          GORGX4          < TORE...
         CPI         "N"
         JNE         GORGX3          < ERREUR...
         IC          MODX            < CE N'EST PAS LE MODE TORE...
GORGX4:  EQU         $
         BR          ALOOP           < OK...
GORGY:   EQU         $
         STZ         MODY            < MODE TORE A PRIORI...
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMORGY-ZERO
         BSR         APRINT          < EDITION DU MESSAGE...
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DE ORGY,
         JNE         GORGX2          < ERREUR...
         NGR         A,A
         STA         ORGY
GORGY3:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMTORE-ZERO
         BSR         APRINT          < "TORE?"
XWOR%7:  VAL         0
         BSR         AIN             < ENTREE DE LA REPONSE...
         CPI         "O"
         JE          GORGY4          < TORE...
         CPI         "N"
         JNE         GORGY3          < ERREUR...
         IC          MODY            < CE N'EST PAS LE MODE TORE...
GORGY4:  EQU         $
         BR          ALOOP           < OK...
         PAGE
<
<
<        M O U V E M E N T S   R E S I D E N T  <-->  T V  :
<
<
MOV0:    EQU         $               < RESIDENT R+V+B --> TV.
         LAD         DEMTVR
         SVC         0               < ROUGE,
         LAD         DEMTVV
         SVC         0               < VERT,
MOV3:    EQU         $               < RESIDENT B --> TV.
         LAD         DEMTVB
         SVC         0               < BLEU.
         BR          ALOOP
MOV1:    EQU         $               < RESIDENT R --> TV.
         LAD         DEMTVR
         SVC         0               < ROUGE.
         BR          ALOOP
MOV2:    EQU         $               < RESIDENT V --> TV.
         LAD         DEMTVV
         SVC         0               < VERT.
         BR          ALOOP
PMOV5:   EQU         $               < TV R --> RESIDENT.
         LA          DEMTVR+3
         LR          A,B
         ORI         TVIN            < MISE EN ENTREE,
         STA         DEMTVR+3
         LAD         DEMTVR
         SVC         0               < ENTREE DU ROUGE,
         STB         DEMTVR+3        < ET RESTAURATION...
         RSR
PMOV6:   EQU         $               < TV V --> RESIDENT.
         LA          DEMTVV+3
         LR          A,B
         ORI         TVIN
         STA         DEMTVV+3
         LAD         DEMTVV
         SVC         0               < ENTREE DU VERT...
         STB         DEMTVV+3
         RSR
PMOV7:   EQU         $               < TV B --> RESIDENT.
         LA          DEMTVB+3
         LR          A,B
         ORI         TVIN
         STA         DEMTVB+3
         LAD         DEMTVB
         SVC         0               < ENTREE DU BLEU...
         STB         DEMTVB+3
         RSR
MOV4:    EQU         $               < TV R+V+B --> RESIDENT.
         BSR         APMOV5          < ROUGE,
         BSR         APMOV6          < VERT,
MOV7:    EQU         $               < TV B --> RESIDENT.
         BSR         APMOV7          < BLEU.
         BR          ALOOP
MOV5:    EQU         $               < TV R --> RESIDENT.
         BSR         APMOV5
         BR          ALOOP
MOV6:    EQU         $               < TV V --> RESIDENT.
         BSR         APMOV6
         BR          ALOOP
         PAGE
<
<
<        T R A N S F E R T S   R E S I D E N T - S C R A T C H  :
<
<
<        FONCTION :
<                      CE MODULE ASSURE LES TRANSFERTS
<                    BRUTAUX ENTRE LE RESIDENT, ET LE
<                    SCRATCH (QUI EST EN FAIT LA 'CDA').
<
<
SPSCD:   EQU         $
         PSR         A,B,X
         LRM         A,B,X
         WORD        0               < A=ADRESSE EN 'CDA',
         WORD        IMAGE           < B=ADRESSE EN RESIDENT,
         WORD        LIMAG*NCOOL     < X=NOMBRE DE MOTS A TRANSFERER.
         WCDA
                                     < TRANSFERT : RESIDENT --> SCRATCH.
         PLR         A,B,X
         RSR
SPACD:   EQU         $               < TRANSFERT AVEC MASQUE...
         PSR         A
         BSR         ASPGPS          < ACCES AU POINT SCRATCH COURANT,
         BSR         ASPRPR          < ET MISE EN RESIDENT...
         PLR         A
         RSR
SPBCD:   EQU         $               < TRANSFERT SANS MASQUE...
         PSR         A,B,X
         LRM         A,B,X
         WORD        0               < A=ADRESSE EN 'CDA',
         WORD        IMAGE           < B=ADRESSE EN RESIDENT,
         WORD        LIMAG*NCOOL     < X=NOMBRE DE MOTS A TRANSFERER.
         RCDA
                                     < TRANSFERT : SCRATCH --> RESIDENT.
         PLR         A,B,X
         RSR
         PAGE
<
<
<        G E N E R A T I O N   E T   V A L I D A T I O N  :
<
<
XWOR%1:  VAL         ITEM2-ZERO
         IF          $-ZERO-XWOR%1,XWOR%,,
         IF          ATTENTION : TROP LONG !!!
XWOR%:   VAL         0
XWOR%1:  VAL         PILE-LTNI-LTNI
XWOR%2:  VAL         $-ZERO
         DZS         XWOR%1-XWOR%2+1 < NETTOYAGE...
         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.