NLS
         IDP         "SIP IMAGE 512"
<        I M A G E   5 1 2  :
XXIMA0:  VAL         0               < XXXIMA=0 : DEFINITION DES CONSTANTES
                                     <            STRICTEMENT "IMAGE".
XXIMA1:  VAL         1               < XXXIMA=1 : DEFINITION DES CONSTANTES
                                     <            GENERALES ET "IMAGE".
XXIMA2:  VAL         2               < XXXIMA=2 : DEFINITION DU LOCAL (OU DU
                                     <            COMMON).
XXIMA3:  VAL         3               < XXXIMA=3 : DEFINITION DES SOUS-PRO-
                                     <            GRAMMES.
XXIMA4:  VAL         4               < XXXIMA=4 : DEFINITION DES DONNEES ,
                                     <            D'ACCES AU 'CCI' INTERPRETATIF
XXIMA5:  VAL         5               < XXXIMA=5 : SOUS-PROGRAMME D'ACCES AU
                                     <            'CCI' INTERPRETATIF.
<        YYYIMA=1 : 'STORP' EFFECTUE PAR ENVOI SEQUENTIEL DE (NIVEAU,X,Y),
<              =2 : 'STORP' PAR ENVOI DU 'NIVEAU' A L'ADRESSE (X,Y) CONCATENEES.
<              =3 : NE GENERER NI LE CODE DE 'LOADP', NI CELUI DE 'STORP'...
         IF          XXXIMA-XXIMA1,XWOR%9,,XWOR%9
         LST
<
<
<        D E F I N I T I O N   D E   C O N S T A N T E S   G E N E R A L E S  :
<
<
K:       VAL         0               < POUR CLEARER...
FSYMB:   VAL         'F700           < POUR TESTER L'ETAT D'UN SYMBOLE.
ENDIF   @
         IF          5=FSYMB,XWOR%,,XWOR%
ENDIF:   VAL         K               < POUR LES FINS DE 'IF'...
XWOR%:   VAL         ENDIF
BIT     @
         IF          3=FSYMB,XWOR%,,XWOR%
BIT:     VAL         1               < DEFINITION D'UN BIT.
XWOR%:   VAL         ENDIF
BITSIG:  VAL         0               < BIT DE SIGNE, D'INDEX...
I:       VAL         1               < POUR INCREMENTER...
Z:       VAL         1               < POUR CE QUI COMMENCE A 0...
MASK:    VAL         I               < POUR CALCULER DES MASQUES A PARTI DE
                                     < NOMBRES PUISSANCES DE 2...
NBITMO  @
         IF          6=FSYMB,XWOR%,,XWOR%
NBITMO:  VAL         16              < NOMBRE DE BITS PAR MOT,
XWOR%:   VAL         ENDIF
NOCMO   @
         IF          5=FSYMB,XWOR%,,XWOR%
NOCMO:   VAL         2               < NOMBRE D'OCTETS PAR MOT.
XWOR%:   VAL         ENDIF
NBITOC  @
         IF          6=FSYMB,XWOR%,,XWOR%
NBITOC:  VAL         NBITMO/NOCMO    < NOMBRE DE BITS PAR OCTETS.
XWOR%:   VAL         ENDIF
MOCG:    VAL         'FF00           < OCTET GAUCHE,
MOCD:    VAL         '00FF           < OCTET DROIT.
MMOT:    VAL         MOCG?MOCD       < MASQUE DE MOT ENTIER...
BASE10  @
         IF          6=FSYMB,XWOR%,,XWOR%
BASE10:  VAL         10              < BASE DE NUMERATION DECIMALE.
XWOR%:   VAL         ENDIF
EOT     @
         IF          3=FSYMB,XWOR%,,XWOR%
EOT::    VAL         '04             < CARACTERE DE FIN DE MESSAGE.
XWOR%:   VAL         ENDIF
KEOT:    VAL         EOT             < PAR COMPATIBILITE #SIP DEFINITION CTTE#.
RC      @
         IF          2=FSYMB,XWOR%,,XWOR%
RC::     VAL         '0D             < RETOUR-CHARIOT...
XWOR%:   VAL         ENDIF
KCR:     VAL         '0D             < PAR COMPATIBILITE #SIP DEFINITION CTTE#.
XXXMOY:  VAL         2               < POUR FAIRE DES MOYENNES...
FCBA:    VAL         'FA00           < FONCTION DE CONVERSION BINAIRE --> ASCI.
LCCI    @
         IF          4=FSYMB,XWOR%,,XWOR%
LCCI:    VAL         80              < LONGUEUR DES CARTES AU 'CCI'.
XWOR%:   VAL         ENDIF
FCCI::   VAL         2               < FONCTION D'ACCES AU 'CCI' INTERPRETATIF.
LK:      VAL         BIT>10          < VALEUR D'UN 'K'...
<
< FORMAT D'UNE DEMANDE A 'CMS5' :
<
NVPFON:  MOT         K               < PREMIER MOT D'UNE DEMANDE,
AMESC:   MOT         NVPFON+I        < SECOND MOT, ET
COESC:   MOT         AMESC+I         < TROISIEME...
<
< DEFINITION D'INSTRUCTIONS :
<
         PROG
FCINST:  VAL         'FB00           < FONCTION D'EXECUTION D'UNE INSTRUCTION,
FMASK:   VAL         'F500           < MISE EN PLACE DE L'INSTRUCTION COURANTE
                                     < A EXECUTER.
ESBT:    SBT         K
COSBT:   VAL         '0000000@@@@    < CODE DU 'SBT'.
         $EQU        ESBT            < ANNULATION DU CODE GENERE...
<
< DEFINITION DU CONTROLEUR '365'
< ET DE SON ACCES (POUR COMPA-
< TIBILITE AVEC #SIP DEFINITION CTTE#) :
<
XNCOOL:  VAL         3               < NOMBRE DE COULEURS FONDAMENTALES...
PAGE68:  VAL         4               < NUMERO DE LA PAGE DE 'TMCDAJ' K CONTENANT
                                     < LES REGISTRES DE PROGRAMMATION DE
                                     < L'IMAGEUR MOYENNE DEFINITION :
XLINV::  VAL         MMOT            < A CAUSE DE CERTAINES CONVENTIONS LOGIQUES
                                     < INVERSEES...
XRCMD:   MOT         'F800           < REGISTRE DE COMMANDE, DONT L'UNE D'ELLE
                                     < EST :
XPVECT:  VAL         8               < MISE EN FORMAT "PETITS VECTEURS"...
XRASTR:  VAL         COSBT?XPVECT=FMASK(K=FCINST)XLINV(MOCD
                                     < COMMANDE A ENVOYER A 'RCMD' POUR TRACER
                                     < EN MODE RASTER (POINT A POINT).
XRXH:    MOT         'F810           < REGISTRE "HIGH-X",
XRXL:    MOT         'F812           < REGISTRE "LOW-X",
XRYH:    MOT         'F814           < REGISTRE "HIGH-Y",
XRYL:    MOT         'F816           < REGISTRE "LOW-Y".
XRNIVO:  MOT         'F820           < REGISTRE CONTENANT LE NIVEAU DE GRIS A
                                     < ATTRIBUER A UN POINT, ET CE ENTRE LES
                                     < LIMITES SUIVANTES :
XXNOIR:  VAL         K               < NIVEAU MINIMAL,
XXN255:  VAL         256-Z           < NIVEAU MAXIMAL...
XC512:   VAL         512             < IL Y A 512 COLONNES, ET
XL512:   VAL         512             < 512 LIGNES...
<
< FIN DES CONSTANTES GENERALES :
<
XXXIMA:  VAL         0               < AFIN D'ASSEMBLER ENSUITE LES CONSTANTES
                                     < STRICTEMENT "IMAGES"...
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXIMA-XXIMA0,XWOR%9,,XWOR%9
         LST
<
<
<        D E F I N I T I O N   D E S   C O N S T A N T E S
<        S T R I C T E M E N T   " I M A G E S "  :
<
<
YYYIM1:: VAL         1               < POUR YYYIMA=1,
YYYIM2:: VAL         2               < POUR YYYIMA=2,
YYYIM3:: VAL         YYYIM1+YYYIM2   < POUR YYYIMA=3.
<
< DEFINITION DE L'IMAGE 512*512 :
<
XMIN::   VAL         K               < PREMIER 'X',
XMAX::   VAL         XC512-Z         < DERNIER 'X'.
YMIN::   VAL         K               < PREMIER 'Y',
YMAX::   VAL         XL512-Z         < DERNIER 'Y'.
XDECAL:: VAL         XMAX+I=K        < NOMBRE DE BITS D'UNE COORDONNEE 'X',
YDECAL:: VAL         YMAX+I=K        < NOMBRE DE BITS D'UNE COORDONNEE 'Y'.
NIV256:: VAL         XXN255+Z        < NOMBRE DE NIVEAUX DE GRIS.
NBNIV::  VAL         1024            < NOMBRE DE NIVEAUX PAR COULEUR EN SORTIE
                                     < DES CONVERTISSEURS D/A.
TPAGE::  VAL         64              < LONGUEUR EN 'K' D'UNE PAGE DE LA
                                     < MEMOIRE D'IMAGE.
DPAGE::  VAL         TPAGE           < DEPLACEMENT DE PASSAGE D'UNE PAGE A
                                     < L'AUTRE.
         IF          TPAGE-DPAGE,,XWOR%3,
XWOR%1:  VAL         DPAGE*LK        < 'DPAGE' EXPRIME EN MOTS,
XWOR%2:  VAL         XWOR%1=K        < ET SON LOG EN BASE 2...
         IF          BIT>XWOR%2-XWOR%1,,XWOR%,
         IF          ATTENTION : 'DPAGE' DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%:   VAL         ENDIF
BPAGE::  VAL         NBITMO-BIT-XWOR%2
                                     < POUR GENERER LA TRANSLATION PAR UNE
                                     < INSTRUCTION 'SBT'...
XWOR%3:  VAL         ENDIF
<
< DEFINITION DES REGISTRES
< D'ACCES A L'IMAGEUR 68000 :
<
PAGER::  VAL         PAGE68          < NUMERO DE LA PAGE DE LA 'CDAJ' CONTENANT
                                     < L'ENSEMBLE DES REGISTRES DE CONTROLE ;
                                     < AU NIVEAU 68000, LEURS ADRESSES SONT DU
                                     < TYPE '3FXXX, SOIT AU NIVEAU DU SOLAR
                                     < 'CFXXX, CE QUI REPRESENTE UNE ADRESSE
                                     < RELATIVE A LA 'CDAJ' DE '4FXXX ; D'OU
                                     < 'PAGER'=4 DONNE PAR LES 4 PREMIERS BITS
                                     < DE '4FXXX, SOIT '0100'...
<
< DEFINITION DU CONTROLEUR 365 :
<
RSTAT::  VAL         XRCMD           < REGISTRE D'ETAT (EN LECTURE) ET DE
RCMD::   VAL         RSTAT           < COMMANDE (EN ECRITURE).
RCTRL1:: VAL         'F802           < REGISTRE DE CONTROLE DE L'ECRITURE ET
                                     < DES INTERRUPTIONS.
RCTRL2:: VAL         'F804           < REGISTRE D'ORIENTATION DES SYMBOLES ET
                                     < DE TYPE DES VECTEURS.
RCSIZE:: VAL         'F806           < REGISTRE DE TAILLE DES CARACTERES.
RDELTX:: VAL         'F80A           < 'DELTAX',
RDELTY:: VAL         'F80E           < 'DELTAY'.
RXH::    VAL         XRXH            < 'X' POIDS FORTS,
RXL::    VAL         XRXL            < 'X' POIDS FAIBLES,
RYH::    VAL         XRYH            < 'Y' POIDS FORTS,
RYL::    VAL         XRYL            < 'Y' POIDS FAIBLES.
<
< DEFINITION DES COMMANDES A 'RCMD' :
<
BPVECT:: VAL         XPVECT          < MISE EN MODE PETITS VECTEURS.
RASTER:: VAL         COSBT?BPVECT=FMASK(K=FCINST)MOCD
                                     < DEFINITION DE LA FONCTION DE TRACE D'UN
                                     < POINT RASTER ; IL S'AGIT D'UN TRACE EN
                                     < MODE 'PETITS VECTEURS', TEL QUE :
                                     < DELTAX=DELTAY=DIRECTION=0...
ERASEG:: VAL         'F8             < FONCTION DE REINITIALISATION DES DIFFE-
                                     < RENTS REGISTRES ET D'EFFACEMENT DE
                                     < L'ECRAN...
ERASE::  VAL         'FB             < FONCTION D'EFFACEMENT SEUL DE L'ECRAN...
<
< INITIALISATION DE 'CTRL1' ET 'CTRL2' :
<
XCTRL1:: VAL         '03)MOCD        < POUR ACTIVER LES INTERRUPTIONS.
                                     < (METTRE '0B POUR AVOIR L'ECRAN
                                     < CYCLIQUE)
XCTRL2:: VAL         '00)MOCD        < PLUME...
<
< INHIBITION DE TOUTES LES 'LUT' :
<
ALLUT::  VAL         BIT>XNCOOL-BIT
<
< ACCES A LA MEMOIRE D'IMAGE :
<
RSLUT::  VAL         'F880           < SELECTION D'UNE OU PLUSIEURS 'LUT' EN
                                     < PARALLELE (R-V-B).
RLUT::   VAL         'FC00           < PREMIER MOT DES 'LUT'.
RPLAN::  VAL         'F860           < AUTORISATION/INTERDICTION D'ECRITURE
                                     < DANS UN OU PLUSIEURS PLANS DE LA
                                     < MEMOIRE D'IMAGE EN PARALLELE.
RNIVO::  VAL         XRNIVO          < NIVEAU DE GRIS DU POINT COURANT.
<
< FIN DES CONSTANTES :
<
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXIMA-XXIMA2,XWOR%9,,XWOR%9
         LST
<
< DONNEES DE GESTION ET
< D'ACCES A LA 'CDAJ' :
<
INFINY:: VAL         '7FFF
         IF          INFINY-K,,,XWOR%,
         IF          ATTENTION : A CAUSE DE L'AIGUILLAGE PAR 'SNIVOP'
         IF          DANS 'LOADP'/'STORP', 'INFINY' DOIT ETRE POSITIF !!!
XWOR%:   VAL         ENDIF
NPC:     WORD        INFINY          < NUMERO DE LA PAGE COURANTE (UNE VALEUR
                                     < INFINIE INDIQUE QUE CELLE-CI N'EXISTE
                                     < PAS).
MCDAJ:   WORD        0               < MOT COURANT LU/ECRIT DANS LA 'CDAJ',
LMCDAJ:: VAL         $-MCDAJ         < SA LONGUEUR,
AMCDAJ:  WORD        MCDAJ           < ET SON ADRESSE...
         IF          YYYIMA-YYYIM1,XWOR%8,,XWOR%8
ARNIVO:  WORD        RNIVO           < ADRESSE RELATIVE EN 'CDAJ' DANS LA PAGE
                                     < 'PAGER' DU REGISTRE DE NIVEAU DE GRIS
                                     < DU POINT COURANT.
ARXH:    WORD        RXH             < IDEM POUR 'RXH',
ARXL:    WORD        RXL             < IDEM POUR 'RXL',
ARYH:    WORD        RYH             < IDEM POUR 'RYH',
SNIVOP:  WORD        INFINY          < VALEUR ANTERIEURE DE 'RNIVO',
SXHP:    WORD        INFINY          < VALEUR ANTERIEURE DE 'RXH',
SXLP:    WORD        INFINY          < VALEUR ANTERIEURE DE 'RXL',
SYHP:    WORD        INFINY          < VALEUR ANTERIEURE DE 'RYH',
SYLP:    WORD        INFINY          < VALEUR ANTERIEURE DE 'RYL'.
ARYL:    WORD        RYL             < IDEM POUR 'RYL',
ARCMD:   WORD        RCMD            < IDEM POUR 'RCMD',
XWOR%8:  VAL         ENDIF
ARPLAN:  WORD        RPLAN           < IDEM POUR 'RPLAN'.
CDAJ:    ASCI        "!CDAJ+"        < CARTE DE POSITIONNEMENT SUR UNE PAGE
PCDAJ:   BYTE        "X";KEOT        < DE NUMERO 'X' DONNE (0<=X<='E).
<
< RELAIS VERS LES SOUS-PROGRAMMES :
<
AGCDA:   WORD        GCDA            < POSITIONNEMENT SUR LA PAGE D'APPARTENAN-
                                     < CE D'UN POINT (X,Y) DONNE.
AGPCDA:  WORD        GPCDA           < POSITIONNEMENT SUR UNE PAGE DONNEE.
ALOADP:  WORD        LOADP           < ACCES A UN POINT,
ASTORP:  WORD        STORP           < RANGEMENT D'UN POINT.
APWCDA:  WORD        PWCDA           < EXECUTION DE 'WCDA'...
APIS:    WORD        PIS             < INVERSION ET MISE DANS 'MCDAJ'...
<
< FIN DES VARIABLES :
<
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXIMA-XXIMA3,XWOR%9,,XWOR%9
         LST
         PAGE
<
<
<        D E T E R M I N A T I O N   D E   L A   P A G E
<        D ' A P P A R T E N A N C E   D ' U N   P O I N T  :
<
<
<        FONCTION :
<                      CE MODULE RECOIT LES COORDONNEES
<                    (X,Y) D'UN POINT, ET EN DEDUIT LA
<                    PAGE LA PLUS FAVORABLE DE LA 'CDAJ'
<                    OU LE SITUER.
<
<
<        ARGUMENTS :
<                    (X)=COORDONNEE 'X',
<                    (Y)=COORDONNEE 'Y'.
<
<
<        RESULTAT :
<                    (A)=ADRESSE DANS LA PAGE COURANTE DU POINT,
<                    (NPC)=NUMERO DE LA PAGE COURANTE.
<                    (Y) EST DETRUIT !!!
<
<
GCDA:    EQU         $
         LR          X,A             < (A)=COORDONNEE 'X',
         LR          Y,B             < (B)=COORDONNEE 'Y'.
         SLLS        NBITMO-XDECAL   < CADRAGE DE LA COORDONNEE 'X' A GAUCHE
                                     < DE 'A',
XWOR%1:  VAL         LK=K
XWOR%1:  VAL         DPAGE=XWOR%1
XWOR%1:  VAL         NBITMO-XWOR%1   < POUR CALER UNE ADRESSE COMPRISE ENTRE
                                     < 0 ET DPAGE*LK-I A GAUCHE...
         SCLD        XDECAL+XWOR%1   < CONCATENATION DES COORDONNEES 'Y' ET 'X',
         SLLS        XWOR%1
         SLRD        XWOR%1          < (A)=NUMERO DE PAGE, ET
                                     < (B)=ADRESSE MOT DANS LA PAGE.
         CP          NPC             < EST-ON DEJA DANS CETTE PAGE ???
         JE          GCDA3           < OUI, RIEN A FAIRE...
<
< RECHERCHE DE LA PAGE LA PLUS PROPICE :
<
         IF          TPAGE-DPAGE,,XWOR%3,
         LY          NPC             < (Y)=NUMERO DE LA PAGE COURANTE,
         ADRI        I,Y             < (Y)=(NPC)+I,
         CPR         A,Y             < EST-CE LA PAGE SUIVANTE QUI EST DEMANDEE?
         JE          GCDA1           < OUI...
         ADRI        I,Y             < (Y)=(NPC)+I+I,
         CPR         A,Y             < EST-CE LA PAGE SUIVANTE DE LA SUIVANTE
                                     < QUI EST DEMANDEE ???
         JNE         GCDA2           < NON, MALHEUREUSEMENT, IL FAUDRA CHANGER
                                     < DE PAGE COURANTE...
GCDA1:   EQU         $
         ADRI        -I,A            < DANS LE CAS OU LE POINT ARGUMENT APPAR-
                                     < TIENT A LA PAGE SUIVANTE, OU LA SUIVANTE
                                     < DE LA SUIVANTE, ON VA LE REFERENCER PAR
                                     < RAPPORT A LA PAGE QUI LE PRECEDE,
                                     < SOIT (A)-I, ET CECI EST RENDU POSSIBLE
                                     < PAR LE FAIT QUE LES PAGES SE RECOUVRENT
                                     < (DE 32K, ALORS QU'ELLES FONT 64K...).
         SBT         NBITMO+BPAGE    < AUQUEL CAS, IL FAUT TRANSLATER L'ADRESSE
                                     < DU POINT (ENTRE 0 ET DPAGE*LK-I) DE
                                     < DPAGE*LK...
GCDA2:   EQU         $
         CP          NPC             < ALORS, EST-ON DEJA SUR LA PAGE A LAQUELLE
                                     < APPARTIENT CE POINT (OU DU MOINS CELLE
                                     < QUE L'ON CONSIDERE COMME LA PLUS FAVO-
                                     < RABLE...) ???
         JE          GCDA3           < OUI, RIEN A FAIRE...
XWOR%3:  VAL         ENDIF
<
<
<        P O S I T I O N N E M E N T   S U R   U N E
<        P A G E   D O N N E E   D E   L A   ' C D A J '  :
<
<
<        FONCTION :
<                      CE MODULE INTERNE A 'GCDA'
<                    POUR DES RAISONS DE RAPIDITE,
<                    PERMET DE SE PLACER SUR UNE
<                    PAGE DE NUMERO DONNE.
<
<
<        A T T E N T I O N  :
<                      MEME SI (NPC)=(A), ON FAIT
<                    UN APPEL AU 'CCI', ET CECI
<                    POUR PERMETTRE DES RETOURS
<                    TEMPORAIRES A LA 'CDAI' ; SI
<                    LE TEST D'OPTIMISATION ETAIT
<                    LAISSE, ON NE POURRAIT PLUS
<                    REVENIR A 'CDAJ' APRES UN ACCES
<                    A LA 'CDAI'...
<
<
<        ARGUMENTS :
<                    (A)=NUMERO DE LA PAGE,
<                    (B)=ADRESSE DANS LA PAGE.
<
<
<        RESULTAT :
<                    (A)=(B)=ADRESSE DANS LA PAGE.
<
<
GPCDA:   EQU         $
<
< CHANGEMENT DE PAGE COURANTE :
<
         STA         NPC             < D'ABORD ON LA MEMORISE...
         CPI         BASE10          < PUIS ON LA CONVERTIT EN 'ASCI'...
         ORI         K=FCBA(MOCD
         JL          GCDA4           < IL S'AGIT D'UN CHIFFRE DE "0" A "9"...
XWOR%1:  VAL         BASE10-I=FCBA(MOCD
XWOR%2:  VAL         BASE10=FCBA(MOCD
XWOR%3:  VAL         -XWOR%1+XWOR%2-I
         ADRI        XWOR%3,A        < IL S'AGIT D'UNE LETTRE DE "A" A "F"...
GCDA4:   EQU         $
         STBY        PCDAJ           < ON INSERE LE NUMERO DE PAGE DANS LA
                                     < CARTE "!CDAJ+X",
         LAD         CDAJ
GCDA6:   EQU         $
         BSR         ASPCCI          < QUE L'ON ENVOIE AU 'CCI', AFIN DE SE
                                     < POSITIONNER SUR LA PAGE COURANTE...
         JE          GCDA5           < OK...
         QUIT        1               < E R R E U R   P R O G R A M M E ...
         JMP         GCDA6           < ET ON RETENTE...
GCDA5:   EQU         $
<
< SORTIE DU MODULE :
<
GCDA3:   EQU         $
         LR          B,A             < (A)=ADRESSE DU POINT COURANT (X,Y) DANS
                                     <     LA PAGE COURANTE...
         RSR
         PAGE
<
<
<        ' W C D A '  :
<
<
<        FONCTION :
<                      CE MODULE EXECUTE UN 'WCDA'
<                    D'UN MOT (CONTENU DE 'MCDAJ'),
<                    VERS LE MOT D'ADRESSE ARGUMENT
<                    DANS LA 'CDAJ'...
<
<
<        ARGUMENT :
<                    (A)=ADRESSE EN 'CDAJ' DU RECEPTEUR.
<
<
PWCDA:   EQU         $
         PSR         X               < SAUVEGARDE DE 'X'.
         LB          AMCDAJ          < (B)=ADRESSE DE L'EMETTEUR LOCAL,
         LXI         LMCDAJ          < (X)=NOMBRE DE MOTS A TRANSFERER,
         WCDA
                                     < TRANSFERT EN 'CDAJ'...
XTEMPO:: VAL         '20*0           < TEMPORISATION OBLIGATOIRE POUR EVITER
                                     < LES MEMOIRES INEXISTANTES SUR 'CDAJ'...
         IF          XTEMPO-K,,XWOR%,
         LXI         XTEMPO
PWCDA1:  EQU         $
         HALT                        < ON ATTEND QUELQUES MICRO-SECONDES...
         CPZR        X               < EST-CE FINI ???
         JNE         PWCDA1          < NON, ON ATTEND ENCORE...
XWOR%:   VAL         ENDIF
         PLR         X               < RESTAURATIONS,
         RSR                         < ET SORTIE...
         PAGE
<
<
<        I N V E R S I O N   E T   M I S E   D A N S   ' M C D A J '  :
<
<
<        ARGUMENT :
<                    (A)=VALEUR A INVERSER ET A METTRE
<                        DANS 'MCDAJ'.
<
<
<        A T T E N T I O N  :
<                      DETRUIT LE REGISTRE ARGUMENT 'A' !!!
<
<
PIS:     EQU         $
         EORI        MMOT            < ON INVERSE BIT A BIT,
         STA         MCDAJ           < ET ON LE MET DANS 'CDAJ'...
         RSR                         < THAT'S ALL FOLK ?!???!?!
         PAGE
<
<
<        C H A R G E M E N T   D ' U N   P O I N T  :
<
<
<        FONCTION :
<                      CE MODULE RECUPERE LE NIVEAU
<                    DE GRIS D'UN POINT DE COORDONNEES
<                    DONNEES.
<
<
<        ARGUMENTS :
<                    (X)=COORDONNEE 'X',
<                    (Y)=COORDONNEE 'Y'.
<
<
<        RESULTAT :
<                    (A)=NIVEAU DE GRIS DU POINT.
<
<
LOADP:   EQU         $
         PSR         B,X,Y           < SAUVEGARDES...
         IF          YYYIMA-YYYIM1,XWOR%8,,XWOR%8
         LAI         XXNOIR-I        < (A)=VALEUR STRICTEMENT NEGATIVE, ET
                                     < SURTOUT IMPOSSIBLE POUR UN NIVEAU...
         IF          XXNOIR-I-K,XWOR%,,
         IF          ATTENTION : CA VA MERDER !!!
XWOR%:   VAL         ENDIF
         STA         SNIVOP          < ON FORCE 'SNIVOP' AVEC UNE VALEUR IMPOS-
                                     < SIBLE AFIN DE DISCRIMINER ULTERIEUREMENT
                                     < 'LOADP' DE 'STORP' ; A NOTER QUE L'ON
                                     < FAIT CELA POUR ECONOMISER L'ENCOMBRE-
                                     < MENT MEMOIRE !!!
         JMP         LOADP9          < VERS LE TRONC COMMUN 'LOADP'/'STORP'...
XWOR%8:  VAL         ENDIF
         IF          YYYIMA-YYYIM2,XWOR%8,,XWOR%8
         BSR         AGCDA           < SELECTION DE LA PAGE COURANTE, ET DONNE :
                                     < (A)=ADRESSE DU POINT DANS LA PAGE COU-
                                     <     RANTE DE LA 'CDAJ',
         LB          AMCDAJ          < (B)=ADRESSE OU METTRE LE NIVEAU DE GRIS,
         LXI         LMCDAJ          < NOMBRE DE MOTS A TRANSFERER...
         RCDA
         LA          MCDAJ           < (A)=NIVEAU(X,Y).
         PLR         B,X,Y           < RESTAURATIONS...
         RSR                         < ET RETOUR...
XWOR%8:  VAL         ENDIF
         IF          YYYIMA-YYYIM3,XWOR%8,,XWOR%8
         PLR         B,X,Y
         RSR                         < ET RETOUR...
XWOR%8:  VAL         ENDIF
<
<
<        R A N G E M E N T   D ' U N   P O I N T  :
<
<
<        FONCTION :
<                      CE MODULE RANGE LE NIVEAU
<                    DE GRIS D'UN POINT DE COOR-
<                    DONNEES DONNEES.
<
<
<        ARGUMENTS :
<                    (A)=NIVEAU DE GRIS DU POINT,
<                    (X)=COORDONNEE 'X',
<                    (Y)=COORDONNEE 'Y'.
<
<
STORP:   EQU         $
         PSR         A,B,X,Y         < SAUVEGARDES...
         IF          YYYIMA-YYYIM1,XWOR%8,,XWOR%8
         CP          SNIVOP          < VALEUR INCHANGEE ???
         JE          STORP1          < OUI...
         JAL         STORP6          < AFIN D'EVITER UNE DISCRIMINATION UL-
                                     < TERIEURE FARFELUE ENTRE 'STORP' ET
                                     < 'LOADP'...
         IF          XXNOIR-I,XWOR%,,
         IF          ATTENTION : L'AIGUILLAGE PRECEDENT EST IDIOT !!!
XWOR%:   VAL         ENDIF
         STA         SNIVOP          < NON...
STORP6:  EQU         $
         STA         MCDAJ           < PREPARATION DU NIVEAU DE GRIS,
         LA          ARNIVO          < (A)=ADRESSE DU REGISTRE DE NIVEAU DE
                                     <     GRIS,
         BSR         APWCDA          < ENVOI DU NIVEAU DE GRIS DU POINT.
STORP1:  EQU         $
<
< TRONC COMMUN 'LOADP'/'STORP' :
<
LOADP9:  EQU         $
         LR          X,A             < (X)=COORDONNEE 'X' :
         SLRS        MOCG=K
         CP          SXHP            < VALEUR INCHANGEE ???
         JE          STORP2          < OUI...
         STA         SXHP            < NON...
         BSR         APIS            < PREPARATION DES POIDS FORTS DE 'X',
         LA          ARXH            < (A)=ADRESSE DU REGISTRE 'RXH',
         BSR         APWCDA          < ENVOI DES POIDS FORTS DE 'X'.
STORP2:  EQU         $
         LR          X,A
         ANDI        MOCD
         CP          SXLP            < VALEUR INCHANGEE ???
         JE          STORP3          < OUI...
         STA         SXLP            < NON...
         BSR         APIS            < PREPARATION DES POIDS FAIBLES DE 'X',
         LA          ARXL            < (A)=ADRESSE DU REGISTRE 'RXL',
         BSR         APWCDA          < ENVOI DES POIDS FAIBLES DE 'X'.
STORP3:  EQU         $
         LR          Y,A             < (Y)=COORDONNEE 'Y' :
         SLRS        MOCG=K
         CP          SYHP            < VALEUR INCHANGEE ???
         JE          STORP4          < OUI...
         STA         SYHP            < NON...
         BSR         APIS            < PREPARATION DES POIDS FORTS DE 'Y',
         LA          ARYH            < (A)=ADRESSE DU REGISTRE 'RYH',
         BSR         APWCDA          < ENVOI DES POIDS FORTS DE 'Y'.
STORP4:  EQU         $
         LR          Y,A
         ANDI        MOCD
         CP          SYLP            < VALEUR INCHANGEE ???
         JE          STORP5          < OUI...
         STA         SYLP            < NON...
         BSR         APIS            < PREPARATION DES POIDS FAIBLES DE 'Y',
         LA          ARYL            < (A)=ADRESSE DU REGISTRE 'RYL',
         BSR         APWCDA          < ENVOI DES POIDS FAIBLES DE 'Y'.
STORP5:  EQU         $
         IF          XXNOIR-I,XWOR%,,
         IF          ATTENTION : L'AIGUILLAGE SUIVANT VA MERDER !!!
XWOR%:   VAL         ENDIF
         CPZ         SNIVOP          < ALORS 'LOADP' OU 'STORP' ???
         JL          LOADP8          < 'LOADP'...
<
< PARTIE SPECIFIQUE 'STORP' :
<
STORPR:  LAI         RASTER
         STA         MCDAJ           < POUR METTRE EN MODE 'RASTER',
         LA          ARCMD           < (A)=ADRESSE DU REGISTRE DE COMMANDE,
         BSR         APWCDA          < TRACE DU POINT (X,Y) EN RASTER, C'EST-
                                     < A DIRE EN PETITS VECTEURS TELS QUE
                                     < DELTAX=DELTAY=0...
XWOR%8:  VAL         ENDIF
         IF          YYYIMA-YYYIM2,XWOR%8,,XWOR%8
         STA         MCDAJ           < MISE EN PLACE DU NIVEAU DE GRIS,
         BSR         AGCDA           < SELECTION DE LA PAGE COURANTE, ET DONNE :
                                     < (A)=ADRESSE DU POINT DANS LA PAGE
                                     <     COURANTE DE LA 'CDAJ',
         LB          AMCDAJ          < (B)=ADRESSE OU PRENDRE LE NIVEAU DE GRIS,
         LXI         LMCDAJ          < (X)=NOMBRE DE MOTS A TRANSFERER...
         WCDA
                                     < TRACE DU POINT (X,Y).
XWOR%8:  VAL         ENDIF
         PLR         A,B,X,Y         < RESTAURATIONS...
         RSR                         < ET RETOUR...
         IF          YYYIMA-YYYIM1,XWOR%8,,XWOR%8
<
< PARTIE SPECIFIQUE 'LOADP' :
<
LOADP8:  EQU         $
<*******************************************************************************
         LAI         XXNOIR          < P R O V I S O I R E ...
         JMP         LOADP7          < P R O V I S O I R E ...
<*******************************************************************************
         LA          ARNIVO          < (A)=ADRESSE DU REGISTRE DE NIVEAU DE
                                     <     GRIS,
         LB          AMCDAJ          < (B)=ADRESSE DU RECEPTEUR LOCAL,
         LXI         LMCDAJ          < (X)=NOMBRE DE MOTS A TRANSFERER,
         RCDA
                                     < ACCES A LA 'CDAJ'...
         IF          XTEMPO-K,,XWOR%,
         LXI         XTEMPO          < ATTENTION, ON DETRUIT 'X', MAIS IL N'EST
                                     < PLUS UTILISE...
PRCDA1:  EQU         $
         HALT                        < ET ON ATTEND QUELQUES MICRO-SECONDES...
         CPZR        X               < EST-CE FINI ???
         JNE         PRCDA1          < NON, ON ATTEND ENCORE...
XWOR%:   VAL         ENDIF
         LA          MCDAJ           < (A)=NIVEAU(X,Y),
         STA         SNIVOP          < POUR OPTIMISER LES 'STORP' SUIVANTS...
LOADP7:  EQU         $
         PLR         B,X,Y
         RSR                         < ET RETOUR...
XWOR%8:  VAL         ENDIF
<
< FIN DES MODULES SPECIFIQUES :
<
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXIMA-XXIMA4,XWOR%9,,XWOR%9
         LST
<
< ACCES AU 'CCI' INTERPRETATIF :
<
DEMCCI:  BYTE        K;FCCI          < DEMANDE D'ACCES,
         WORD        K               < ADRESSE-OCTET DE LA CARTE,
         WORD        LCCI            < ET SA LONGUEUR.
ASPCCI:  WORD        SPCCI           < SOUS-PROGRAMME D'ACCES AU 'CCI' INTER-
                                     < PRETATIF.
         NLS
XWOR%9:  VAL         ENDIF
         IF          XXXIMA-XXIMA5,XWOR%9,,XWOR%9
         LST
         PAGE
<
<
<        A C C E S   A U   ' C C I '   I N T E R P R E T A T I F  :
<
<
<        ARGUMENT :
<                    (A)=ADRESSE-MOT DE LA CARTE A ENVOYER.
<
<
SPCCI:   EQU         $
         PSR         A,X             < SAUVEGARDES.
         SLLS        NOCMO=K         < CONVERSION EN OCTETS,
         STA         DEMCCI+AMESC    < ET MISE DANS LA DEMANDE,
         LAD         DEMCCI
         SVC                         < QUE L'ON ENVOIE AU 'CCI'...
         PLR         A,X             < RESTAURATIONS...
         RSR                         < ET RETOUR AVEC LES INDICATEURS POSI-
                                     < TIONNES SUR 'CPZR X'.
         NLS
XWOR%9:  VAL         ENDIF
         LST



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