NMTZ:    VAL         "T2"
NMP:     VAL         " 2"
         IF          NMPROC-NMTZ,,XWOR%,
         IF          NMPROC-NMP,,XWOR%,
         IF          ATTENTION : 'NMPROC' EST MAUVAIS !!!
XWOR%:   VAL         0
         IF          NMPROC-NMTZ,XWOR%9,,XWOR%9
         IDP         "T2 - VERSION CHAMP DE VECTEURS 2D DE TW"
XWOR%9:  VAL         0
         IF          NMPROC-NMP,XWOR%9,,XWOR%9
         IDP         " 2 - VERSION DE 'T2' 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-NMP,XWOR%,,XWOR%
NMPROC:  VAL         NMTZ            < SI " 3", ON LE REMPLACE PAR "T3",
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               < ADRESSE DE LA MEMOIRE DE VISUALISATION
                                     < EN 'CDAI'.
         IF          TV1-0,,XWOR%,
         IF          TV1 DOIT ETRE NUL, SINON, DE NOMBREUSES
         IF          SEQUENCES DE CODE SONT MAUVAISES !!!
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
                                     < 4K 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    < ADRESSE DE LA DEUXIEME IMAGE SCRATCH
                                     < UTILISEE EN PARTICULIER POUR LA MODU-
                                     < LATION D'AMPLITUDE SUR LA NORMALE.
LNOMP:   VAL         LNOM-1          < LONGUEUR UTILE DU NOM (A CAUSE DE
                                     < L'EOT A PRIORI...
         PAGE
<
<
<        F O R M E   D U   3 E M E   O R D R E  :
<
<
         DSEC
DEVELO:  EQU         $
<
< COEFFICIENTS DE U ET V :
<
A00:     FLOAT       0
A10:     FLOAT       0
A01:     FLOAT       0
A20:     FLOAT       0
A11:     FLOAT       0
A02:     FLOAT       0
A30:     FLOAT       0
A21:     FLOAT       0
A12:     FLOAT       0
A03:     FLOAT       0
<
< COEFFICIENTS DE 1/U ET 1/V :
< ('Z' SIGNIFIE 'Z'ERO,
<  'U' SIGNIFIE 'U'N,
<  'D' SIGNIFIE 'D'EUX)
<
XDEB3::  VAL         $-DEVELO        < INDEX DU PREMIER COEFFICIENT.
AUZ:     FLOAT       0
AZU:     FLOAT       0
AUU:     FLOAT       0
ADZ:     FLOAT       0
AZD:     FLOAT       0
XDEB4::  VAL         $-DEVELO        < INDEX DE 'INV'...
INV:     DZS         2               < 0 : TOUS LES COEFFICIENTS DE 1/U ET
                                     <     1/V SONT NULS...
                                     < 1 : AU MOINS 1 EST NON NUL...
<
< ZONE D'INSERTION DE NOUVEAUX COEFFICIENTS :
<
NEWC:    EQU         $
<
< COEFFICIENTS DES SINUS/COSINUS :
< ('U' SIGNIFIE '1',
<  'B' SIGNIFIE COS(U),
<  'R' SIGNIFIE SIN(U),
<  'C' SIGNIFIE COS(V),
<  'S' SIGNIFIE SIN(V) )
<
XDEB1::  VAL         $-DEVELO        < INDEX DU PREMIER COEFFICIENT.
AUB:     FLOAT       0
AUR:     FLOAT       0
AUC:     FLOAT       0
AUS:     FLOAT       0
ABB:     FLOAT       0
ABR:     FLOAT       0
ABC:     FLOAT       0
ABS:     FLOAT       0
ARR:     FLOAT       0
ARC:     FLOAT       0
ARS:     FLOAT       0
ACC:     FLOAT       0
ACS:     FLOAT       0
ASS:     FLOAT       0
XDEB2::  VAL         $-DEVELO        < INDEX DE 'ITRIGO'...
ITRIGO:  DZS         2               < 0 : TOUS LES COEFFICIENTS TRIGONOMETRI-
                                     <     QUES SONTS NULS,
                                     < 1 : AU MOINS UN N'EST PAS NUL...
LDEV::   VAL         $-DEVELO        < NOMBRE DE MOTS OCCUPES PAR UN
                                     < DEVELOPPEMENT...
         PROG
         PAGE
<
<
<        M E S S A G E S  :
<
<
MMCDA:   BYTE        5;'6D
MCDAI:   ASCI        "!CDA"
         BYTE        "I";EOT
MCDA:    ASCI        "!CDA"
         BYTE        EOT;0
REP:     DZS         NBRHEX/NOCMO    < BUFFER DES REPONSES.
MERR:    BYTE        1;"?"
MTR:     WORD        "00";"10";"01";"20";"11";"02";"30";"21";"12";"03"
         WORD        "UZ";"ZU";"UU";"DZ";"ZD"
         WORD        0               < A CAUSE DE 'INV'...
         WORD        "UB";"UR";"UC";"US"
         WORD        "BB";"BR";"BC";"BS"
         WORD             "RR";"RC";"RS"
         WORD                  "CC";"CS"
         WORD                       "SS"
         WORD        0               < A CAUSE DE 'ITRIGO'...
         WORD        "KU";"KV"
LMTR::   VAL         $-MTR           < NOMBRE D'ELEMENTS A RENTRER.
         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="
MODM:    BYTE        6;'6D
         ASCI        "MODE= "
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= "
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...
XCTCDA:  WORD        0
MODX:    WORD        1               < 0 : "TORE" SUR LES X,
                                     < 1 : L'IMAGE SCRATCH NE SE REFERME PAS...
MODY:    WORD        1               < DE MEME SUR L'AXE DES Y.
WORK1:   WORD        0               < VARIABLE DE TRAVAIL...
MCDAM:   WORD        0               < MOT COURANT DE LA 'CDA'.
IMASKO:  WORD        0               < 0 : MASK OFF,
                                     < 1 : MASK ON...
INUL:    WORD        0               < 0 : NE PAS TRACER LES VECTEURS DE NORME
                                     <     INFERIEURE A 1,
                                     < 1 : LES TRACER...
         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
<
< NIVEAU DE TRACE DES VECTEURS :
<
FNIV:    FLOAT       0               < NIVEAU COURANT LORS DU TRACE D'UN
                                     < VECTEUR.
FCONS:   FLOAT       0               < CONSTANTE DE PROGRESSION DE 'FNIV'.
<
< 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="
AMODM:   EQU         MODM            < "MODE="
MCXYZ:   BYTE        6;'6D
         WORD        "CF"
MCXYZ2:  WORD        "  "
         WORD        "= "
XWOR%7:  VAL         0
AMTR:    WORD        MTR,X
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.
ASERIE:  WORD        SERIE,X         < RELAI VERS LE DDEVELOPPEMENT LIMITE...
AMCDAI:  EQU         MCDAI           < !CDAI.
AMCDA:   EQU         MCDA            < !CDA.
AMMCDA:  EQU         MMCDA           < !CDA.
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...
AIN:     WORD        IN              < ENTREE D'UN CARACTERE,
AIHEX:   WORD        IHEX            < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX,
AIFLOT:  WORD        IFLOT           < ENTREE D'UNE CONSTANTE FLOTTANTE.
AHEX:    WORD        HEX             < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE
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.
ASPTR:   WORD        SPTR            < (XS,YS) <-- TRANS(XR,YR).
AHORN:   WORD        HORN            < APPLICATION DE LA METHODE DE HORNER.
AHORNU:  WORD        HORNU           < CALCUL DE LA DERIVEE EN U D'UNE FORME,
AHORNV:  WORD        HORNV           < CALCUL DE LA DERIVEE EN V D'UNE FORME.
ARAC:    WORD        RAC             < EXTRACTION D'UNE RACINE CARREE.
AGRAD2:  WORD        GRAD2           < RELAI VERS 'GRAD2'...
APTRAN:  WORD        PTRANS          < ENTREE D'UN COEFFICIENT DE LA MATRICE.
AISER:   WORD        ISER            < ENTREE D'UNE DES 3 SERIES...
AROND:   WORD        ROND            < ARRONDI FLOTTANT, ET CONVERSION ENTIERE.
ASP:     WORD        0               < RELAI VARIABLE CONTENANT L'ADRESSE DE
                                     < L'UN DES SOUS-PROGRAMMES PRECEDENTS.
ASPOP:   WORD        SPOP            < OPERATIONS INTER-IMAGES...
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
         IF          MODE-VISU,XWOR%7,,XWOR%7
NOMBB::  VAL         "4"             < NOM DE LA BRANCHE D'OVERLAY.
NOMOV1:: VAL         " ">NBITOC?NOMBB
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
NOMBB::  VAL         "5"             < NOM DE LA BRANCHE D'OVERLAY.
NOMOV1:: VAL         " ">NBITOC?NOMBB
XWOR%7:  VAL         0
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
DEMOVL:  BYTE        '80?SGNLNS;'02  < CHARGEMENT DE L'OVERLAY DE 'TZ'.
         WORD        OVLTZ2
         WORD        LOVL2
         WORD        -1
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
<
< CONSTANTES DE CALCUL DES SINUS ET COSINUS :
<
ASIN:    WORD        SIN             < S/P DE CALCUL DU SINUS,
ACOS:    WORD        COS             < ET DU COSINUS.
ZZZ061:  DZS         2               < NB EN FLOTTANT
ZZZ062:  DZS         2
ZZZ063:  DZS         1               < SIGNE
DEUXPI:  FLOAT       6.2831853       < 2 PI
PI3141:  FLOAT       3.1415926       < PI
PISUR2:  FLOAT       1.5707963       < PI/2
ZZZ067:  EQU         PISUR2          < CSTES DU POLYNOME
ZZZ068:  WORD        'AD00;'5110
ZZZ069:  WORD        '51FD;'9A2C
ZZZ070:  WORD        'B3F9;'6CCE
ZZZ071:  WORD        '4FF4;'6BDD
         PAGE
<
<
<        C O M M O N  :
<
<
         COMMON
COMON:   WORD        0               < LE PREMIER MOT DU COMMON EST RESERVE
                                     < A L'OPERATEUR FLOTTANT !!!
F1:      FLOAT       1
F3:      FLOAT       3
<
< DONNEES D'ARRONDI :
<
F05:     FLOAT       0.5
<
< DONNEES POUR LA TRANSFORMATION :
<
ATRIG:   WORD        TRIG            < SOUS-PROGRAMME DE CALCUL DES SINUS
                                     < ET COSINUS DE 'U' ET 'V' SI NECESSAIRE.
FSINU:   FLOAT       0               < SIN(U),
FCOSU:   FLOAT       0               < COS(U),
FSINV:   FLOAT       0               < SIN(V),
FCOSV:   FLOAT       0               < COS(V).
DFDU:    FLOAT       0               < DF/DU,
DFDV:    FLOAT       0               < DF/DV.
SING:    FLOAT       0               < SING=PROJECTION(GRAD(F)) SUR OY,
COSG:    FLOAT       0               < COSG=PROJECTION(GRAD(F)) SUR OX, EN FAIT
                                     < POUR SING ET COSG, ON NORMALISE GRAD(F).
NORMG:   FLOAT       0               < MODUL(GRAD(F)).
FWORK:   FLOAT       0               < VARIABLE DE TRAVAIL.
TRX:     WORD        0               < TRANSLATION EN X,
TRY:     WORD        0               < TRANSLATION EN Y.
FXR:     FLOAT       0
FYR:     FLOAT       0
FXS:     FLOAT       0
FYS:     FLOAT       0
VARU:    FLOAT       0               < U=KX*XR,
VARV:    FLOAT       0               < V=KY*YR.
SERIE:   DZS         LDEV            < DEVELOPPEMENT EN SERIE DE LA FONCTION...
KFU:     FLOAT       0
KFV:     FLOAT       0
         IF          $-SERIE/2-LMTR,,XWOR%,
         IF          ERREUR !!!
XWOR%:   VAL         0
FK:      FLOAT       1
         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        PNUL            < . : TRACE DES PETITS VECTEURS
         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        DTRANS          < = : DEFINITION DE LA MATRICE M(I,J)
         WORD        ERROR           < >
         WORD        ERROR           < ?
         WORD        ERROR           < @
         WORD        ERROR           < A
         WORD        ERROR           < B
         WORD        ECOEF           < C : ENTREE INDIVIDUELLE DE AIJ
         WORD        DISP            < D : RESIDENT <-- IMAGE SGN
         WORD        ERROR           < E
         WORD        GOGE            < F : FIN
         WORD        ERROR           < G
         WORD        ERROR           < H
         WORD        ERROR           < I
         WORD        ERROR           < J
         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        ERROR           < Q
         WORD        ERROR           < R
         WORD        IMSAV           < S : SCRATCH <-- (RESIDENT)
         WORD        TRANS           < T : SCRATCH <-- M(I,J)(RESIDENT)
         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 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
<
<
<        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...
         LAD         DEMOVL
         SVC         0               < CHARGEMENT DE LA BRANCHE D'OVERLAY...
         STZ         XCTCDA          < AU CAS OU UN MALHEUREUX 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         $
         LAI         AMCDAI-ZERO
         BSR         ACCI            < ENVOI DE !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 '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             < ENTREE DE LA COMMANDE...
         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         $
<
<
<        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
<
<
<        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 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          < POUR PERMETTRE UN ACCES A 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
<
<
<        C A L C U L   S I N U S   E T   C O S I N U S  :
<
<
<        ARGUMENT :
<                    A,B = ANGLE EN RADIANS,
<
<
<        RESULTAT :
<                    A,B = LIGNE TRIGONOMETRIQUE DEMANDEE.
<
<
COS:     EQU         $               < ENTRY 'COSINUS' :
         FSB         PISUR2          < A,B = TETA-PI/2,
         FNEG                        < A,B = PI/2-TETA.
SIN:     EQU         $               < ENTRY 'SINUS' :
         FST         ZZZ061          < SAVE TEMPORAIRE DE L'ANGLE.
         STZ         ZZZ063
         JAGE        ZZZ072
         FNEG
         FST         ZZZ061
         IC          ZZZ063
ZZZ072:  EQU         $
         FDV         DEUXPI
         FIX
         FLT
         FMP         DEUXPI
         FSB         ZZZ061
         FNEG
         FCAM        PI3141
         JL          ZZZ073
         FSB         PI3141
         IC          ZZZ063
ZZZ073:  EQU         $
         FCAM        PISUR2
         JL          ZZZ074
         FSB         PI3141
         FNEG
ZZZ074:  EQU         $
         FDV         PISUR2
         FST         ZZZ061
         FMP         ZZZ061
         FST         ZZZ062
         FMP         ZZZ071
         FAD         ZZZ070
         FMP         ZZZ062
         FAD         ZZZ069
         FMP         ZZZ062
         FAD         ZZZ068
         FMP         ZZZ062
         FAD         ZZZ067
         FMP         ZZZ061
         DC          ZZZ063
         JNE         ZZZ075
         FNEG
ZZZ075:  EQU         $
         RSR
         PAGE
<
<
<        C A L C U L   D ' U N E   F O R M E   D U   3 E M E
<        D E G R E   E N   U   E T   V   P A R   L A
<        M E T H O D E   D E   H O R N E R  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME CALCULE LA
<                    VALEUR DE LA FORME SUIVANTE :
<
<                    A00+A10*U+A01*V+A20*U2+A11*U*V+A02*V2
<                    +A30*U3+A21*U2*V+A12*U*V2+A03*V3
<                    +AUZ/U+AZU/V+AUU/U/V+ADZ/U2+AZD/V2
<                    +COSU*(ABB*COSU+ABR*SINU+ABC*COSV+ABS*SINV+AUB)
<                    +SINU*(ARR*SINU+ARC*COSV+ARS*SINV+AUR)
<                    +COSV*(ACC*COSV+ACS*SINV+AUC)
<                    +SINV*(ASS*SINV+AUS)
<
<                    QUI DONNE EN FAIT, SUIVANT LES VALEURS
<                    DES AIJ, DES COMBINAISONS DE DEVELOPPE-
<                    MENTS LIMITES EN U ET V DE FONCTIONS
<                    QUELCONQUES, PUIS MULTIPLICATION PAR 'FK'.
<
<
<        ARGUMENT :
<                    A=ADRESSE DE LA LISTE DES COEFFICIENTS AIJ.
<
<
<        RESULTAT :
<                    A,B=VALEUR DE LA FORME.
<
<
         USE         W,DEVELO
HORN:    EQU         $
         PSR         W
         LR          A,W             < W=ADRESSE DE LA LISTE DES AIJ.
         FLD         A30
         FMP         VARU
         FST         FWORK
         FLD         A21
         FMP         VARV
         FAD         A20
         FAD         FWORK
         FMP         VARU
         FST         FWORK
         FLD         A12
         FMP         VARV
         FAD         A11
         FMP         VARV
         FAD         A10
         FAD         FWORK
         FMP         VARU
         FST         FWORK
         FLD         A03
         FMP         VARV
         FAD         A02
         FMP         VARV
         FAD         A01
         FMP         VARV
         FAD         A00
         FAD         FWORK
         CPZ         INV
         JE          HORN3           < PAS DE SERIE INVERSE...
         PSR         A,B
         FLD         ADZ
         FDV         VARU
         FST         FWORK
         FLD         AUU
         FDV         VARV
         FAD         AUZ
         FAD         FWORK
         FDV         VARU
         FST         FWORK
         FLD         AZD
         FDV         VARV
         FAD         AZU
         FDV         VARV
         FAD         FWORK
         FST         FWORK
         PLR         A,B
         FAD         FWORK
HORN3:   EQU         $
         CPZ         ITRIGO
         JE          HORN2           < PAS DE SERIE TRIGONOMETRIQUE...
         PSR         A,B
         FLD         FCOSU
         FMP         ABB
         FST         FWORK
         FLD         FSINU
         FMP         ABR
         FAD         FWORK
         FST         FWORK
         FLD         FCOSV
         FMP         ABC
         FAD         FWORK
         FST         FWORK
         FLD         FSINV
         FMP         ABS
         FAD         FWORK
         FAD         AUB
         FMP         FCOSU
         FST         FWORK
         PLR         A,B
         FAD         FWORK
         PSR         A,B
         FLD         FSINU
         FMP         ARR
         FST         FWORK
         FLD         FCOSV
         FMP         ARC
         FAD         FWORK
         FST         FWORK
         FLD         FSINV
         FMP         ARS
         FAD         FWORK
         FAD         AUR
         FMP         FSINU
         FST         FWORK
         PLR         A,B
         FAD         FWORK
         PSR         A,B
         FLD         FCOSV
         FMP         ACC
         FST         FWORK
         FLD         FSINV
         FMP         ACS
         FAD         FWORK
         FAD         AUC
         FMP         FCOSV
         FST         FWORK
         PLR         A,B
         FAD         FWORK
         FST         FWORK
         FLD         FSINV
         FMP         ASS
         FAD         AUS
         FMP         FSINV
         FAD         FWORK
HORN2:   EQU         $
         FMP         FK              < HOMOTHETIE...
         PLR         W
         RSR
         PAGE
<
<
<        B R A N C H E   D ' O V E R L A Y  :
<
<
DEBOV1:  EQU         $
XWOR%1:  VAL         DEBOV1-ZERO*NOCMO
OVLTZ2:  EQU         ZERO+XWOR%1     < ADRESSE-OCTET DE LA BRANCHE...
         BYTE        " ";NOMBB
         ASCI        "    "
         BYTE        '04;'D0
XWOR%1:  VAL         ITEM2-ZERO
         IF          $-ZERO-XWOR%1,XWOR%,,
         IF          ATTENTION : LA RACINE DE L'OVERLAY EST TROP LONGUE !!!
XWOR%:   VAL         0
         PAGE
<
<
<        D E R I V E E   E N   U   D ' U N E   F O R M E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME CALCULE LA
<                    DERVIEE EN U DE LA FORME CALCULEE
<                    PAR 'HORN', SOIT :
<
<                    A10+2*A20*U+A11*V+3*A30*U2+2*A21*U*V+A12*V2
<                    -AUZ/U2-AUU/U2/V-2*ADZ/U3
<                    +SINU*(-AUB-(-ARR+ABB)*COSU-ABR*SINU-ABC*COSV-ABS*SINV)
<                    +COSU*(AUR+(ARR-ABB)*SINU+ABR*COSU+ARC*COSV+ARS*SINV)
<
<
<        ARGUMENT :
<                    A=ADRESSE DE LA LISTE DES COEFFICIENTS AIJ.
<
<
<        RESULTAT :
<                    A,B=VALEUR DE LA DERIVEE.
<
<
HORNU:   EQU         $
         PSR         W
         LR          A,W             < W=ADRESSE DE LA LISTE DES AIJ.
         FLD         A30
         FMP         F3
         FMP         VARU
         FST         FWORK
         FLD         A21
         FMP         VARV
         FAD         A20
         FDV         F05
         FAD         FWORK
         FMP         VARU
         FST         FWORK
         FLD         A12
         FMP         VARV
         FAD         A11
         FMP         VARV
         FAD         A10
         FAD         FWORK
         CPZ         INV
         JE          HORNU3          < PAS DE SERIE INVERSE...
         PSR         A,B
         FLD         ADZ
         FDV         F05
         FDV         VARU
         FST         FWORK
         FLD         AUU
         FDV         VARV
         FAD         AUZ
         FAD         FWORK
         FDV         VARU
         FDV         VARU
         FST         FWORK
         PLR         A,B
         FSB         FWORK
HORNU3:  EQU         $
         CPZ         ITRIGO
         JE          HORNU1          < PAS DE DEVELOPPEMENT TRIGONOMETRIQUE...
         PSR         A,B
         FLD         ABB
         FSB         ARR
         FMP         FCOSU
         FST         FWORK
         FLD         ABR
         FMP         FSINU
         FAD         FWORK
         FST         FWORK
         FLD         ABC
         FMP         FCOSV
         FAD         FWORK
         FST         FWORK
         FLD         ABS
         FMP         FSINV
         FAD         FWORK
         FAD         AUB
         FNEG
         FMP         FSINU
         FST         FWORK
         PLR         A,B
         FAD         FWORK
         PSR         A,B
         FLD         ARR
         FSB         ABB
         FMP         FSINU
         FST         FWORK
         FLD         ABR
         FMP         FCOSU
         FAD         FWORK
         FST         FWORK
         FLD         ARC
         FMP         FCOSV
         FAD         FWORK
         FST         FWORK
         FLD         ARS
         FMP         FSINV
         FAD         FWORK
         FAD         AUR
         FMP         FCOSU
         FST         FWORK
         PLR         A,B
         FAD         FWORK
HORNU1:  EQU         $
         PLR         W
         RSR
         PAGE
<
<
<        C A L C U L   D E   L A   D E R I V E E   E N   V
<                    D ' U N E   F O R M E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME CALCULE LA
<                    DERVIEE EN V DE LA FORME CALCULEE
<                    PAR 'HORN', SOIT :
<
<                    A01+A11*U+2*A02*V+A21*U2+2*A12*U*V+3*A03*V2
<                    -AZU/V2-AUU/U/V2-2*AZD/V3
<                    +SINV*(-(-ASS+ACC)*COSV-ACS*SINV-AUC-ABC*COSU-ARC*SINU)
<                    +COSV*((ASS-ACC)*SINV+ACS*COSV+AUS+ABS*COSU+ARS*SINU)
<
<
<        ARGUMENT :
<                    A=ADRESSE DE LA LISTE DES AIJ.
<
<
<        RESULTAT :
<                    A,B=VALEUR DE LA DERIVEE.
<
<
HORNV:   EQU         $
         PSR         W
         LR          A,W             < W=ADRESSE DE LA LISTE DES AIJ.
         FLD         A03
         FMP         F3
         FMP         VARV
         FST         FWORK
         FLD         A12
         FMP         VARU
         FAD         A02
         FDV         F05
         FAD         FWORK
         FMP         VARV
         FST         FWORK
         FLD         A21
         FMP         VARU
         FAD         A11
         FMP         VARU
         FAD         A01
         FAD         FWORK
         CPZ         INV
         JE          HORNV3          < PAS DE SERIE INVERSE...
         PSR         A,B
         FLD         AZD
         FDV         F05
         FDV         VARV
         FST         FWORK
         FLD         AUU
         FDV         VARU
         FAD         AZU
         FAD         FWORK
         FDV         VARV
         FDV         VARV
         FST         FWORK
         PLR         A,B
         FSB         FWORK
HORNV3:  EQU         $
         CPZ         ITRIGO
         JE          HORNV1          < PAS DE DEVELOPPEMENT TRIGONOMETRIQUE...
         PSR         A,B
         FLD         ACC
         FSB         ASS
         FMP         FCOSV
         FST         FWORK
         FLD         ACS
         FMP         FSINV
         FAD         FWORK
         FST         FWORK
         FLD         ABC
         FMP         FCOSU
         FAD         FWORK
         FST         FWORK
         FLD         ARC
         FMP         FSINU
         FAD         FWORK
         FAD         AUC
         FNEG
         FMP         FSINV
         FST         FWORK
         PLR         A,B
         FAD         FWORK
         PSR         A,B
         FLD         ASS
         FSB         ACC
         FMP         FSINV
         FST         FWORK
         FLD         ACS
         FMP         FCOSV
         FAD         FWORK
         FST         FWORK
         FLD         ABS
         FMP         FCOSU
         FAD         FWORK
         FST         FWORK
         FLD         ARS
         FMP         FSINU
         FAD         FWORK
         FAD         AUS
         FMP         FCOSV
         FST         FWORK
         PLR         A,B
         FAD         FWORK
HORNV1:  EQU         $
         PLR         W
         RSR
         PAGE
<
<
<        C A L C U L   ' C O S '   E T   ' S I N '   D E   ' U '   E T   ' V '
<
<
TRIG:    EQU         $
         PSR         W
         LR          A,W
         CPZ         ITRIGO
         JE          TRIG1           < INUTILE...
         FLD         VARU
         BSR         ASIN
         FST         FSINU           < SIN(U),
         FLD         VARU
         BSR         ACOS
         FST         FCOSU           < COS(U),
         FLD         VARV
         BSR         ASIN
         FST         FSINV           < SIN(V),
         FLD         VARV
         BSR         ACOS
         FST         FCOSV           < COS(V).
TRIG1:   EQU         $
         PLR         W
         RSR
         PAGE
<
<
<        E X T R A C T I O N   D ' U N E   R A C I N E   C A R R E E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME EXTRAIT LA
<                    RACINE CARREE D'UN NOMBRE PAR
<                    LA METHODE DE NEWTON, C'EST-A-DIRE
<                    A PARTIR DE LA SUITE :
<                    U(N+1)=(U(N)+K/U(N))/2,
<                    OU K DESIGNE LE NOMBRE DONT ON
<                    EXTRAIT LA RACINE...
<
<
<        ARGUMENT :
<                    A,B=NOMBRE DONT ON EXTRAIT LA RACINE.
<
<
<        RESULTAT :
<                    A,B=RACINE DU NOMBRE ARGUMENT.
<
<
RAC:     EQU         $
         FCAZ
         JE          RAC2            < NOMBRE=0 ==> RACINE=0...
         JG          RAC3            < OK, NOMBRE>0...
         QUIT        1               < ??!??!?!
RAC3:    EQU         $
         PSR         X,Y
         LR          A,X             < X ET
         LR          B,Y             < Y MEMORISENT LE NOMBRE ARGUMENT.
RAC1:    EQU         $
         FST         FWORK
         LR          X,A
         LR          Y,B
         FDV         FWORK           < K/U(N),
         FAD         FWORK           < U(N)+K/U(N),
         FMP         F05             < (U(N)+K/U(N))/2.
         FCAM        FWORK           < TEST DE FIN ???
         JNE         RAC1            < NON...
         PLR         X,Y
RAC2:    EQU         $
         RSR
         PAGE
<
<
<        S O U S - P R O G R A M M E   D E   T R A N S F O R M A T I O N  :
<
<
<        FONCTION :
<
<
SPTR:    EQU         $
         PSR         A,B,X,Y
<
< DETERMINATION DE (XR,YR) :
<
         LA          XR
         SB          TRX
         FLT
         FST         FXR             < XR.
         FMP         KFU
         FST         VARU            < U=KFU*XR.
         LA          YR
         SB          TRY
         FLT
         FST         FYR             < YR.
         FMP         KFV
         FST         VARV            < V=KFV*YR.
<
<
<        C A L C U L   D U   G R A D I E N T ( F )  :
<
<
         LAD         SERIE
         BSR         ATRIG           < CALCUL DE COS(U), SIN(U), COS(V), SIN(V).
         LAD         SERIE
         BSR         AHORNU
         FST         DFDU            < DF/DU,
         LAD         SERIE
         BSR         AHORNV
         FST         DFDV            < DF/DV.
         FMP         DFDV
         FST         FWORK
         FLD         DFDU
         FMP         DFDU
         FAD         FWORK           < (DF/DU)*(DF/DU)+(DF/DV)*(DF/DV).
         BSR         ARAC
         FST         NORMG           < NORME(GRADIENT(F)).
         FMP         FK              < MODULATION PAR LA CONSTANTE K,
         BSR         AROND
         JAG         GRAD1           < OK...
         LAI         0               < A PRIORI, ON VA LE TRACER AVEC UNE
                                     < LONGUEUR DE 1...
         CPZ         INUL            < ALORS ???
         JNE         GRAD1           < ET OUI, ON LE TRACE...
         JMP         SPTR1           < SI LA CONSTANTE 'K' EST MAUVAISE,
                                     < OU SI LE VECTEUR EST TROP PETIT, ON
                                     < NE TRACE RIEN...
GRAD1:   EQU         $
         ADRI        1,A             < ET OUI, C'EST LA FAMEUX PROBLEME DES
                                     < PIQUETS ET DES INTERVALLES...
         LR          A,X             < X=NOMBRE DE POINTS NECESSAIRES POUR
                                     < TRACER LE VECTEUR GRAD(F).
         FLD         DFDU
         FDV         NORMG
         FST         COSG            < COSINUS DIRECTEUR DE GRAD(F),
         FLD         DFDV
         FDV         NORMG
         FST         SING            < SINUS DIRECTEUR DE GRAD(F).
<
<
<        R E P R E S E N T A T I O N   G R A P H I Q U E  :
<
<
         LAI         0
         FLT
         FST         FYS             < YS EST TOUJOURS NUL (AVANT LA ROTATION
                                     < DE TRACE DU GRAD(F)).
         FLD         F1
         FST         FNIV            < INITIALISATION DU NIVEAU DE GRIS
                                     < DU GRADIENT.
         LAI         NIVMAX
         FLT
         FDV         NORMG
         FDV         FK
         FST         FCONS           < CONSTANTE DE PROGRESSION DE 'FNIV' ;
                                     < 'FNIV' VARIERA DONC DE 1 A 'NIVMAX'.
         LAI         0               < COORDONNEE X RELATIVE AU POINT (XR,YR)
                                     < DU VECTEUR GRAD(F) LORS DE SON TRACE.
                                     < ATTENTION, 'Y' EST NULLE AVANT ROTATION.
GRAD2:   EQU         $
         PSR         A,X             < SAVE LE POINT RELATIF COURANT, AINSI
                                     < QUE LE NOMBRE DE POINTS A TRACER.
         FLT
         FST         FXS
<
< ROTATION DU POINT RELATIF COURANT PAR RAPPORT A (XR,YR) :
< (XS,YS,ZS) APRES ROTATION DONNE LE POINT COURANT
< DU VECTEUR GRAD(F) QUE L'ON TRACE.
<
         FMP         COSG
         PSR         A,B             < X=XS*COSG-YS*SING,
         FLD         FXS
         FMP         SING            < Y=XS*SING+YS*COSG.
         FAD         FYR             < ON ABSOLUTISE Y,
         FST         FYS             < CE QUI DONNE LE Y COURANT DE GRAD(F).
         PLR         A,B
         FAD         FXR             < ON ABSOLUTISE X,
         FST         FXS             < CE QUI DONNE LE X COURANT DE GRAD(F).
<
< COORDONNEES ENTIERES :
<
         FLD         FXS
         BSR         AROND
         AD          TRX
         STA         XS
         FLD         FYS
         BSR         AROND
         AD          TRY
         STA         YS
<
< TEST DES HORS-ECRAN :
<
SPTR4:   EQU         $
         LA          XS
         CPZ         MODX            < EST-ON SUR UN X-TORE ???
         JE          SPTT3           < OUI...
         JAL         SPTR1X          < NON, ET XS EST OVERSCREEN...
         CPI         NPOLM1
         JG          SPTR1X          < DE MEME...
         JMP         SPTT4           < OK, XS EST DANS L'ECRAN...
SPTT3:   EQU         $               < CAS OU L'ON EST SUR UN X-TORE :
         ANDI        NPOLM1
         STA         XS              < CALCUL MODULO DE XS...
SPTT4:   EQU         $
         LA          YS
         CPZ         MODY            < EST-ON SUR UN Y-TORE ???
         JE          SPTT6           < OUI...
         JAL         SPTR1X          < NON, ET YS EST OVERSCREEN...
         CPI         NLIGM1
         JG          SPTR1X          < DE MEME...
         JMP         SPTT7
SPTT6:   EQU         $               < CAS OU L'ON EST SUR UN Y-TORE :
         ANDI        NLIGM1
         STA         YS              < CALCUL MODULO DE YS...
SPTT7:   EQU         $
<
< MARQUAGE DU POINT COURANT :
<
         FLD         FNIV
         FAD         FCONS
         FST         FNIV
         FIX
         CPI         NIVMAX
         JLE         GRAD4
         LAI         NIVMAX
GRAD4:   EQU         $
         BSR         ASPRPS          < RESIDENT --> SCRATCH...
<
< POINT COURANT SUIVANT DU GRADIENT :
<
SPTR1X:  EQU         $
         PLR         A,X
         ADRI        1,A             < PASSAGE AU POINT RELATIF SUIVANT DU
                                     < VECTEUR GRAD(F),
         JDX         GRAD3           < S'IL EXISTE...
<
< SORTIE DU MODULE :
<
SPTR1:   EQU         $
         PLR         A,B,X,Y
         RSR
GRAD3:   EQU         $
         BR          AGRAD2
<
<
<        A R R O N D I   F L O T T A N T  :
<
<
ROND:    EQU         $
         JAL         ROND1           < NOMBRE NEGATIF...
         FAD         F05             < NOMBRE POSITIF...
         JMP         ROND2
ROND1:   EQU         $
         FSB         F05
ROND2:   EQU         $
         FIX
         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
<
<
<        E N T R E E   D E   L ' U N E   D E S   3   S E R I E S  :
<
<
ISER:    EQU         $
         PSR         A,B,X
         LXI         0               < X=INDEX DES ELEMENTS A TRAITER...
ISER1:   EQU         $
         BSR         APTRAN          < ENTREE D'UN COEFFICIENT,
         ADRI        1,X             < AU SUIVANT...
         LR          X,A
         CPI         LMTR            < EXISTE-T'IL ???
         JL          ISER1           < OUI, OK...
         PLR         A,B,X
         RSR
         PAGE
<
<
<        E N T R E E   D E   C ( I , J )  :
<
<
<        ARGUMENT :
<                    X=NUMERO DE L'ELEMENT.
<
<
PTRANS:  EQU         $
         PSR         A,X,Y
PTRAN1:  EQU         $
         LA          &AMTR
         JAE         PTRAN9          < CAS DE 'ITRIGO' OU 'INV', RIEN A FAIRE.
         IF          MODE-VISU,XWOR%7,,XWOR%7
         STA         MCXYZ2          < NUMERO DE L'ELEMENT COURANT...
         LAD         MCXYZ           < A=ADRESSE DU MESSAGE...
XWOR%7:  VAL         0
         BSR         AIFLOT          < ENTREE DE LA CONSTANTE FLOTTANTE.
         ADR         X,X             < POUR RANGER UNE CONSTANTE FLOTTANTE...
         FST         &ASERIE         < RANGEMENT DE L'ELEMENT COURANT...
<
< TEST DES COEFFICIENTS INVERSES :
<
         LXI         XDEB4
         STZ         &ASERIE         < INV=0 : PAS DE COEF A PRIORI...
PTRAN4:  EQU         $
         ADRI        -2,X
         LR          X,A
         CPI         XDEB3
         JL          PTRAN5          < TOUS NULS...
         FCMZ        &ASERIE         < ???
         JE          PTRAN4
         LXI         XDEB4
         IC          &ASERIE         < AU MOINS UN EST NON NUL, INV=1 (#0).
PTRAN5:  EQU         $
<
< TEST DES COEFFICIENTS TRIGONOMETRIQUES :
<
         LXI         XDEB2
         STZ         &ASERIE         < ITRIGO(SERIE)=0 A PRIORI...
PTRAN2:  EQU         $
         ADRI        -2,X
         LR          X,A
         CPI         XDEB1
         JL          PTRAN3          < FINI : ITRIGO(SERIE)=0, IL N'Y A PAS
                                     < DE SERIE TRIGONOMETRIQUE A CALCULER...
         FCMZ        &ASERIE         < COEFFICIENT NON NUL ???
         JE          PTRAN2          < OUI...
         LXI         XDEB2
         IC          &ASERIE         < NON, ITRIGO(SERIE)=1 (#0)...
PTRAN3:  EQU         $
PTRAN9:  EQU         $
         PLR         A,X,Y
         RSR
         PAGE
<
<
<        E N T R E E   D E   L A   S E R I E   :
<
<
DTRANS:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         MKOEF-ZERO
         BSR         APRINT
XWOR%7:  VAL         0
         BSR         AIN             < ENTREE DES COEFFICIENTS ???
         CPI         "N"
         JE          DTRAN1          < NON...
         CPI         "O"
         JNE         DTRANS          < ??!?!?!
<
< ENTREE DES COEFFICIENTS DE LA SERIE :
<
         BSR         AISER           < ENTREE DE LA SERIE...
<
< ENTREE DES AUTRES PARAMETRES :
<
DTRAN1:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMTRX-ZERO
         BSR         APRINT          < EDITION DE "CX=",
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DE 4 CHIFFRES HEXADECIMAUX.
         JNE         DTRAN1          < ERREUR...
         STA         TRX
DTRAN2:  EQU         $
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMTRY-ZERO
         BSR         APRINT          < EDITION DE "CY=",
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DE 4 CHIFFRES HEXADECIMAUX.
         JNE         DTRAN2          < ERREUR...
         STA         TRY
DTRAN3:  EQU         $
DTRAN4:  EQU         $
         BR          ALOOP           < EASY ??!?!?!
         PAGE
<
<
<        E N T R E E   I N D I V I D U E L L E   D E   A I J  :
<
<
ECOEF:   EQU         $
         LAD         DEMHEX
         BSR         AENTER          < ENTREE DU NOM DU COEFFICIENT :
         LXI         2
         LBY         &AREPX          < ON DOIT TROUVER 2 CARACTERES SUIVIS
                                     < D'UN 'R/C' OU D'UN 'EOT'...
         CPI         '04
         JE          ECOEF5          < OK...
         CPI         '0D
         JNE         ECOEF4          < !??!?
ECOEF5:  EQU         $
         LXI         0
         LA          &AREPX          < A=NOM PRESUME DU COEFFICIENT :
ECOEF2:  EQU         $
         CP          &AMTR           < ET VALIDATION :
         JE          ECOEF3          < OK...
         ADRI        1,X             < NON, AU SUIVANT,
         XR          A,X
         CPI         LMTR            < SI EXISTE...
         XR          A,X
         JL          ECOEF2          < OUI...
ECOEF4:  EQU         $               < BRANCHEMENT EN ERREUR...
         BR          AERROR
ECOEF3:  EQU         $
         BSR         APTRAN          < ENTREE DU COEFFICIENT DE RANG (X).
         BR          ALOOP           < ET C'EST TOUT...
         PAGE
<
<
<        T R A C E   D E S   P E T I T S   V E C T E U R S  :
<
<
PNUL:    EQU         $
         STZ         INUL            < NON A PRIORI...
         BSR         AIN             < ENTREE DE LA REPONSE :
<
<        REPONSES RECONNUES :
<                    O : ON TRACE LES PETITS VECTEURS (DE NORME
<                        INFERIEURE A 1),
<                    N : ON NE LES TRACE PAS...
<
         CPI         "N"
         JE          PNUL1           < NON : INUL=0...
         CPI         "O"
         JNE         PNUL            < ??!??!
         IC          INUL            < OUI : INUL#0...
PNUL1:   EQU         $
         BR          ALOOP
         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.
XLOAD:   EQU         $
         BR          AERROR          < OUI, 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         XLOAD           < RAPPEL DU SCRATCH EN RESIDENT SANS MASK.
TRANS:   EQU         $               < APPLICATION DE M(I,J).
         LB          ASPTR
         JMP         IM2
IM1:     EQU         $
IM2:     EQU         $
         STB         ASP             < RELAI DYNAMIQUE DE SOUS-PROGRAMME.
         BSR         ASPOP
         BR          ALOOP
         PAGE
<
<
<        A C C E S   A U   C C I  :
<
<
GOCCI:   EQU         $
         QUIT        1               < ACCES AU CCI INTERACTIF...
         BR          ALOOP
         PAGE
<
<
<        E N T R E E   D ' U N   C A R A C T E R E  :
<
<
<        RESULTAT :
<                    A=CARACTERE ENTRE.
<
<
IN:      EQU         $
         LAD         DEMIN
         BSR         AENTER
         LBY         &AREP           < A=CARACTERE REPONSE.
         RSR
         PAGE
<
<
<        E N T R E E   D ' U N   N O M B R E   H E X A D E C I M A L
<                    E T   C O N V E R S I O N  :
<
<
<        RESULTAT :
<                    VOIR 'HEX'...
<
<
IHEX:    EQU         $
         LAD         DEMHEX
         BSR         AENTER
         BSR         AHEX            < A=NOMBRE HEXADECIMAL, ET CODES CONDITION.
         RSR
         PAGE
<
<
<        E N T R E E   D ' U N E   C O N S T A N T E   F L O T T A N T E  :
<
<
<        ARGUMENT :
<                    A=ADRESSE D'UN MESSAGE EN MODE 'VISU'.
<
<
<        RESULTAT :
<                    A,B=CONSTANTE FLOTTANTE.
<
<
IFLOT:   EQU         $
         PSR         X,Y
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LR          A,X             < X=SAUVEGARDE DE L'ADRESSE MESSAGE.
IFLOT1:  EQU         $
         LR          X,A             < A=ADRESSE DU MESSAGE A EDITER...
         BSR         APRINT
XWOR%7:  VAL         0
         IF          MODE-ITEM,XWOR%7,,XWOR%7
IFLOT1:  EQU         $
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DU NUMERATEUR,
         JNE         IFLOT1          < ERREUR...
         LR          A,Y             < Y=NUMERATEUR.
         IF          MODE-VISU,XWOR%7,,XWOR%7
         LAI         AMSLAS-ZERO
         BSR         APRINT
XWOR%7:  VAL         0
         BSR         AIHEX           < ENTREE DU DENOMINATEUR,
         JNE         IFLOT1          < ERREUR...
         JAE         IFLOT1          < IL NE PEUT ETRE NUL !!!
         FLT
         FST         FWORK           < DENOMINATEUR,
         LR          Y,A
         FLT                         < NUMERATEUR,
         FDV         FWORK           < RESULTAT=NUMERATEUR/DENOMINATEUR.
         PLR         X,Y
         RSR
         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
XWOR%7:  VAL         0
         BSR         AIFLOT          < ENTREE DE FK...
         FCAZ
         JLE         INFK            < 'K' DOIT ETRE STRICTEMENT POSITIVE...
         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  :
<
<
DEMTV:   WORD        TVDKU           < DEMANDE D'ENVOI D'UNE IMAGE DE 'TV'
                                     < EN MODE ENTRELACE ; CETTE DEMANDE EST
                                     < MISE ICI, ET NON PAS EN BAS, CAR IL
                                     < N'Y A PAS DE PLACE DANS LA RACINE DE
                                     < L'OVERLAY !!!
         WORD        IMAGE-ZERO*NOCMO
         WORD        LIMAG*NOCMO*NCOOL
         WORD        0
MOV0:    EQU         $               < RESIDENT R+V+B --> TV.
         LRM         A
         WORD        DEMTV
         JMP         MOVX            < VERS L'ENVOI DE L'IMAGE...
MOV3:    EQU         $               < RESIDENT B --> TV.
         LAD         DEMTVB
MOVX:    EQU         $
         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
<
<
<        F I N   D E   L ' O V E R L A Y  :
<
<
XWOR%1:  VAL         $-DEBOV1*NOCMO
LOVL2:   EQU         ZERO+XWOR%1
         IF          BUFIN-$,,,XWOR%
         IF          ATTENTION : L'OVERLAY RECOUVRE LA
         IF          ZONE EN RECOUVREMENT DE L'ITEM2 !!!
XWOR%:   VAL         0
         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          $-DEBOV1-XWOR%1,XWOR%,,
         IF          ATTENTION : LA BRANCHE D'OVERLAY EST TROP LONGUE !!!
XWOR%:   VAL         0
         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.