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.