NLS
         IDP         "SIP UTILITAIRES"
<
<
<        U T I L I T A I R E S  :
<
<
<        DEFINITIONS :
<                    XXXDEF=N : DEFINITION DE CONSTANTES,
<                    XXXLOC=N : DEFINITION DES DONNEES LOCALES,
<                    XXXTAB=N : DEFINITION DES TABLES,
<                    XXXPRO=N : DEFINITION DE SOUS-PROGRAMMES.
<
<                    'N' DEFINIT LA FONCTION DEMANDEE :
YYYINX:  VAL         -1              < AFIN DE NE PAS ASSEMBLER 2 FOIS DE SUITE
                                     < LE MEME MODULE...
YYYIFL:  VAL         1               < GENERATION DE L'INTERPRETEUR DE MODULES
                                     < FLOTTANTS.
YYYMES:  VAL         2               < GENERATION DE L'EDITEUR DE MESSAGES
                                     < D'ADRESSE DONNEE.
YYYCCI:  VAL         3               < GENERATION DE L'EXPEDITEUR DE CARTES
                                     < INTERPRETATIVE AU 'CCI'.
YYYHIN:  VAL         4               < GENERATION DES MODULES DE CONVERSION
                                     < HEXA-DECIMALE EN BINAIRE.
YYYFLO:  VAL         5               < SOUS-PROGRAMMES UTILES EN FLOTTANT...
YYYHEX:  VAL         6               < GENERATION DES MODULES DE CONVERSION
                                     < BINAIRE EN HEXA-DECIMAL 'ASCI'.
YYYDET:  VAL         7               < CALCULATEUR DE DETERMINANTS 3*3.
YYYCRA:  VAL         8               < RESOLUTION D'UN SYSTEME LINEAIRE 3*3
                                     < PAR LA METHODE DE CRAMER.
YYYGOT:  VAL         9               < SIMULATION DE 'GOTO' A LONGUE PORTEE...
YYYDEB:  VAL         10              < GENERATION DE CARTES DU TYPE "!M;!D...;"
                                     < QUI PERMETTENT DONC D'IMPLEMENTER DES
                                     < POINTS DE 'DEBUG' DANS UN PROGRAMME.
<
<
<===============================================================================
         IF          XXXDEF-YYYIFL,XEIF%9,,XEIF%9
         LST
<
< DEFINITION DES INSTRUCTIONS INTERPRETEES :
<
MINTCO:: VAL         'F000           < CODE DE L'OPERATION FLOTTANTE A REALISEE,
                                     < CEUX-CI SERONT DEFINIS AVEC LA TABLE DE
                                     < BRANCHEMENT 'LINT'.
MINTOP:: VAL         MINTCO)MMOT     < ADRESSE ABSOLUE DE L'OPERANDE.
LOLINT:: VAL         D               < LONGUEUR D'UNE INSTRUCTION INTERPRETA-
                                     < TIVE.
         NLS
XXXDEF:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYMES,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR L'EDITEUR DE MESSAGE D'ADRESSE DONNEE !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYCCI,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR L'EXPEDITEUR DE CARTES INTERPRETATIVE AU 'CCI' !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYHIN,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR LE CONVERTISSEUR HEXA-DECIMAL EN BINAIRE !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYFLO,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR LES SOUS-PROGRAMMES UTILES EN FLOTTANT !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYHEX,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR LE CONVERTISSEUR HEXA-DECIMAL EN 'ASCI' !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYDET,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR LE CALCULATEUR DE DETERMINANT 3*3 !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYCRA,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR LA METHODE DE CRAMER POUR LES SYSTEMES 3*3 !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYGOT,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE CONSTANTES
         IF          POUR LS SIMULATEUR DE 'GOTO' A LONGUE PORTEE !!!
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXDEF-YYYDEB,XEIF%9,,XEIF%9
         LST
KLIMIT:: VAL         ";"             < LIMITEUR REMPLACANT 'EOT' DANS LES
                                     < CARTES "!M...".
LREG:    VAL         K               < PAS DE REGISTRES A EDITER A PRIORI...
XAMOT0:  VAL         XUNDEF          < PAS DE DOUBLE-MOT '0' A PRIORI,
XAMOT1:  VAL         XUNDEF          < PAS DE DOUBLE-MOT '1' A PRIORI,
XAMOT2:  VAL         XUNDEF          < PAS DE DOUBLE-MOT '2' A PRIORI,
XAMOT3:  VAL         XUNDEF          < PAS DE DOUBLE-MOT '3' A PRIORI.
         NLS
XXXDEF:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<===============================================================================
         IF          XXXLOC-YYYIFL,XEIF%9,,XEIF%9
         LST
<
< DONNES D'INTERPRETATION DES
< MODULES FLOTTANTS :
<
AINTER:  WORD        INTER           < SOUS-PROGRAMME D'INTERPRETATION DES
                                     < CODES FLOTTANTS : LE MODULE INTERPRE-
                                     < TATIF SUIT LE 'BSR' D'APPEL...
ALINT:   WORD        LINT,X          < ADRESSE DE LA TABLE DES BRANCHEMENTS
                                     < SPECIFIQUES POUR CHAQUE CODE-OPERATION.
         IF          MINTOP=K-K,,XEIF%,
         IF          ATTENTION : LA METHODE DE DECONCATENATION
         IF          PAR DIVISION EST ABSURDE !!!
XEIF%:   VAL         ENDIF
CINTER:  WORD        MINTOP+N        < CONSTANTE DE DECONCATENATION.
FINTW1:  FLOAT       <NILK<NILK<NILK < VARIABLE DE MANOEUVRE FLOTTANTE.
         NLS
XXXLOC:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYMES,XEIF%9,,XEIF%9
         LST
<
< DONNEES D'ENVOI D'UN MESSAGE :
<
APRINT:  WORD        PRINT           < SOUS-PROGRAMME D'ENVOI D'UN MESSAGE
                                     < D'ADRESSE DONNEE.
DEMMES:  BYTE        NVPOUT;FAVW     < DEMANDE D'ECRITURE D'UN MESSAGE :
         WORD        NILK            < ADRESSE-OCTET DU MESSAGE,
         WORD        NILK            < LONGUEUR-OCTET DU MESSAGE.
         NLS
XXXLOC:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYCCI,XEIF%9,,XEIF%9
         LST
<
< DONNEES D'ENVOI DES CARTES
< INTERPRETATIVES AU 'CCI' :
<
ASPCCI:  WORD        SPCCI           < SOUS-PROGRAMME D'ENVOI DES CARTES INTER-
                                     < PRETATIVES D'ADRESSE DONNEE AU 'CCI'.
DEMCCI:  BYTE        NVPSER;FOCCIM   < DEMANDE D'INTERPRETATION D'UNE CARTE
                                     < PAR LE 'CCI' :
         WORD        NILK            < ADRESSE-OCTET DE LA CARTE,
         WORD        LCCINT          < LONGUEUR-OCTET DE LA CARTE.
         NLS
XXXLOC:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYHIN,XEIF%9,,XEIF%9
         LST
<
< DONNEE DU CONVERTISSEUR
< HEXA-DECIMAL --> BINAIRE :
<
AHEXIN:  WORD        HEXIN           < SOUS-PROGRAMME DE CONVERSION HEXA-DECIMAL
                                     < EN BINAIRE.
ABUFHI:  WORD        NILK            < RELAI INDEX VARIABLE POINTANT VERS LA
                                     < CHAINE 'ASCI' A TRANSCODER...
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYFLO,XEIF%9,,XEIF%9
         LST
<
< DONNEES POUR LES SOUS-PROGRAMMES
< UTILES EN FLOTTANT :
<
FWORK:   FLOAT       <NILK<NILK<NILK < VARIABLE DE MANOEUVRE FLOTTANTE.
F05:     FLOAT       <K<K+W*BASE10/XXXMOY<K
AFIX:    WORD        FIX             < 'FIX'.
AFLT:    WORD        FLT             < 'FLT'.
AFABS:   WORD        FABS            < 'FABS'.
AFNEG:   WORD        FNEG            < 'FNEG'.
AFCAZ:   WORD        FCAZ            < 'FCAZ'.
ASFWOR:  WORD        SFWOR           < RANGEMENT DE 'FWORK'.
APFWOR:  WORD        PFWOR           < CUMUL ET RANGEMENT DE 'FWORK'.
AROND:   WORD        ROND            < ARRONDI ET PASSAGE ENTIER D'UN FLOTTANT.
ARAC:    WORD        RAC             < EXTRACTION D'UNE RACINE CARREE.
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYHEX,XEIF%9,,XEIF%9
         LST
<
< DONNEE DU CONVERTISSEUR
< BINAIRE --> HEXA-DECIMAL 'ASCI' :
<
AHEXEX:  WORD        HEXEX           < SOUS-PROGRAMME DE CONVERSION BINAIRE EN
                                     < HEXA-DECIMAL 'ASCI'.
ABUFHE:  WORD        NILK            < RELAI INDEX VARIABLE POINTANT VERS LA
                                     < CHAINE 'ASCI' RESULTANTE...
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYDET,XEIF%9,,XEIF%9
         LST
<
< DONNEES DU CALCULATEUR
< DE DETERMINANT 3*3 :
<
ADETER:  WORD        DETER           < SOUS-PROGRAMME DE CALCUL D'UN DETERMI-
                                     < NANT 3*3.
AM:      EQU         $               < LISTE DES POINTEURS DES ELEMENTS DE
                                     < LA MATRICE M(I,J) :
AM11:    WORD        NILK            < ADRESSE DE M11,
AM12:    WORD        NILK            < ADRESSE DE M12,
AM13:    WORD        NILK            < ADRESSE DE M13,
AM21:    WORD        NILK            < ADRESSE DE M21,
AM22:    WORD        NILK            < ADRESSE DE M22,
AM23:    WORD        NILK            < ADRESSE DE M23,
AM31:    WORD        NILK            < ADRESSE DE M31,
AM32:    WORD        NILK            < ADRESSE DE M32,
AM33:    WORD        NILK            < ADRESSE DE M33.
LAM::    VAL         $-AM            < LONGUEUR DE LA LISTE DES POINTEURS...
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYCRA,XEIF%9,,XEIF%9
         LST
<
< DONNEES DE LA RESOLUTION DES
< SYSTEMES LINEAIRES 3*3 PAR LA
< METHODE BESTIALE DE CRAMER :
<
AVARX:   WORD        NILK            < ADRESSE DE LA PREMIERE VARIABLE,
AVARY:   WORD        NILK            < ADRESSE DE LA SECONDE VARIABLE,
AVARZ:   WORD        NILK            < ADRESSE DE LA TROISIEME VARIABLE.
ACRAMR:  WORD        CRAMER          < ADRESSE DU SOUS-PROGRAMME DE RESOLUTION
                                     < D'UN SYSTEME 3*3 PAR LA METHODE BES-
                                     < TIALE DE CRAMER...
SAM:     EQU         $               < LISTE DE SAUVEGARDE DES POINTEURS DES
                                     < ELEMENTS DE LA MATRICE M(I,J) :
SAM11:   WORD        NILK
SAM12:   WORD        NILK
SAM13:   WORD        NILK
SAM21:   WORD        NILK
SAM22:   WORD        NILK
SAM23:   WORD        NILK
SAM31:   WORD        NILK
SAM32:   WORD        NILK
SAM33:   WORD        NILK
         IF          $-SAM-LAM,,XEIF%,
         IF          ATTENTION : LA LISTE DES SAUVEGARDE DES
         IF          POINTEURS N'A PAS LA BONNE TAILLE !!!
XEIF%:   VAL         ENDIF
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYGOT,XEIF%9,,XEIF%9
         LST
<
< DONNEE DU SIMULATEUR DE
< 'GOTO' A LONGUE PORTEE :
<
AGOTO:   WORD        GOTO            < SOUS-PROGRAMME SIMULANT UN 'BR' ; L'AD-
                                     < RESSE ARGUMENT EST DERRIERE LE 'BSR'
                                     < D'APPEL...
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXLOC-YYYDEB,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DONNEES LOCALES
         IF          POUR LE MODULE DE 'DEBUG' !!!
         NLS
XXXLOC:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<===============================================================================
         IF          XXXTAB-YYYIFL,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        D E F I N I T I O N   D E S   C O D E S - O P E R A T I O N S
<        F L O T T A N T S   E T   T A B L E   D E S   M O D U L E S  :
<
<
LINT:    EQU         $
CFLD::   VAL         $-LINT          < INSTRUCTION DE 'LOAD' FLOTTANT.
         WORD        PFLD
CFST::   VAL         $-LINT          < INSTRUCTION DE 'STORE' FLOTTANT.
         WORD        PFST
CFAD::   VAL         $-LINT          < INSTRUCTION DE 'AD' FLOTTANT.
         WORD        PFAD
CFSB::   VAL         $-LINT          < INSTRUCTION DE 'SB' FLOTTANT.
         WORD        PFSB
CFMP::   VAL         $-LINT          < INSTRUCTION DE 'MP' FLOTTANT.
         WORD        PFMP
CFDV::   VAL         $-LINT          < INSTRUCTION DE 'DV' FLOTTANT.
         WORD        PFDV
CFABS::  VAL         $-LINT          < INSTRUCTION DE 'ABS' FLOTTANT.
         WORD        PFABS
CFNEG::  VAL         $-LINT          < INSTRUCTION DE 'NEG' FLOTTANT.
         WORD        PFNEG
CFIN::   VAL         $-LINT          < INSTRUCTION DE FIN D'UN MODULE.
         WORD        PFIN
<
< LISTE DES CODES INEXISTANTS :
<
XWOR%1:  VAL         $-LINT
XWOR%2:  VAL         MINTCO=K
XWOR%2:  VAL         -XWOR%2
XWOR%3:  VAL         MINTCO>XWOR%2+N < NOMBRE DE CODES POSSIBLES.
         DO          XWOR%3-XWOR%1
         WORD        PERROR
         NLS
XXXTAB:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYMES,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR L'EDITEUR DE MESSAGE D'ADRESSE DONNEE !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYCCI,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR L'EXPEDITEUR DE CARTES INTERPRETATIVE AU 'CCI' !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYHIN,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR LE CONVERTISSEUR HEXA-DECIMAL EN BINAIRE !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYFLO,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR LES SOUS-PROGRAMMES UTILES EN FLOTTANT !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYHEX,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR LE CONVERTISSEUR HEXA-DECIMAL EN 'ASCI' !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYDET,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR LE CALCULATEUR DE DETERMINANT 3*3 !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYCRA,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR LA METHODE DE CRAMER POUR LES SYSTEME 3*3 !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYGOT,XEIF%9,,XEIF%9
         LST
         IF          ATTENTION : PAS DE DEFINITIONS DE TABLES
         IF          POUR LE SIMULATEUR DE 'GOTO' A LONGUE PORTEE !!!
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXTAB-YYYDEB,XEIF%9,,XEIF%9
<
< PROCEDURE DE GENERATION
< DES CARTES "!M..." :
<
<        ARGUMENTS :
<                    (LREG)=LISTE DE BITS INDIQUANT LES REGISTRES A EDITER,
<                    (XAMOT0,1,2,3)=ADRESSE D'UN DOUBLE-MOT A EDITER (LA
<                                   VALEUR 'XUNDEF' (INITIALE) L'INHIBE...).
<
         LST
         BYTE        KCCI;"M";KLIMIT;KCCI;"D";KLIMIT
         NLS
         IF          COSBT?RA=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRA;KLIMIT      < EDITION DU REGISTRE 'A'.
         NLS
LREG:    VAL         CORBT?RA=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RB=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRB;KLIMIT      < EDITION DU REGISTRE 'B'.
         NLS
LREG:    VAL         CORBT?RB=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RX=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRX;KLIMIT      < EDITION DU REGISTRE 'X'.
         NLS
LREG:    VAL         CORBT?RX=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RY=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRY;KLIMIT      < EDITION DU REGISTRE 'Y'.
         NLS
LREG:    VAL         CORBT?RY=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RC=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRC;KLIMIT      < EDITION DU REGISTRE 'C'.
         NLS
LREG:    VAL         CORBT?RC=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RL=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRL;KLIMIT      < EDITION DU REGISTRE 'L'.
         NLS
LREG:    VAL         CORBT?RL=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RW=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRW;KLIMIT      < EDITION DU REGISTRE 'W'.
         NLS
LREG:    VAL         CORBT?RW=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RK=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRK;KLIMIT      < EDITION DU REGISTRE 'K'.
         NLS
LREG:    VAL         CORBT?RK=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RP=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRP;KLIMIT      < EDITION DU REGISTRE 'P'.
         NLS
LREG:    VAL         CORBT?RP=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          COSBT?RS=FMASK(K=FCINST(LREG,,XEIF%,
         LST
         BYTE        KRS;KLIMIT      < EDITION DU REGISTRE 'S'.
         NLS
LREG:    VAL         CORBT?RS=FMASK(K?LREG=FCINST
XEIF%:   VAL         ENDIF
         IF          LREG-K,,XEIF%,
         LST
         IF          ATTENTION : IL Y A DES REGISTRES INEXISTANTS !!!
LREG:    VAL         K               < ET ON VIDE LA LISTE...
         NLS
XEIF%:   VAL         ENDIF
         IF          XAMOT0-XUNDEF,,XEIF%,
         LST
         BYTE        KRAD;","
         NLS
XWOR%1:  VAL         XAMOT0
         LST
         ASCI         "@@@@"
         BYTE        KLIMIT;KRMEM;KLIMIT;KRMEM;KLIMIT;
         NLS
XAMOT0:  VAL         XUNDEF          < ET ON SUPPRIME CETTE ADRESSE...
XEIF%:   VAL         ENDIF
         IF          XAMOT1-XUNDEF,,XEIF%,
         LST
         BYTE        KRAD;","
         NLS
XWOR%1:  VAL         XAMOT1
         LST
         ASCI         "@@@@"
         BYTE        KLIMIT;KRMEM;KLIMIT;KRMEM;KLIMIT;
         NLS
XAMOT1:  VAL         XUNDEF          < ET ON SUPPRIME CETTE ADRESSE...
XEIF%:   VAL         ENDIF
         IF          XAMOT2-XUNDEF,,XEIF%,
         LST
         BYTE        KRAD;","
         NLS
XWOR%1:  VAL         XAMOT2
         LST
         ASCI         "@@@@"
         BYTE        KLIMIT;KRMEM;KLIMIT;KRMEM;KLIMIT;
         NLS
XAMOT2:  VAL         XUNDEF          < ET ON SUPPRIME CETTE ADRESSE...
XEIF%:   VAL         ENDIF
         IF          XAMOT3-XUNDEF,,XEIF%,
         LST
         BYTE        KRAD;","
         NLS
XWOR%1:  VAL         XAMOT3
         LST
         ASCI         "@@@@"
         BYTE        KLIMIT;KRMEM;KLIMIT;KRMEM;KLIMIT;
         NLS
XAMOT3:  VAL         XUNDEF          < ET ON SUPPRIME CETTE ADRESSE...
XEIF%:   VAL         ENDIF
         LST
         BYTE        KCCI;"G";"O";KLIMIT;KEOT
         NLS
XXXTAB:  VAL         YYYINX
XEIF%9:  VAL         ENDIF
<===============================================================================
         IF          XXXPRO-YYYIFL,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        S O U S - P R O G R A M M E   D ' I N T E R P R E T A T I O N
<                    D E   M O D U L E S   F L O T T A N T S  :
<
<
<        FONCTION :
<                      LES CODES FLOTTANTS MACHINES
<                    OCCUPENT MALHEUREUSEMENT 'DFLOT'
<                    MOTS MACHINE ; OR J'AI DES PRO-
<                    BLEMES DE PLACE, D'OU CETTE SOLUTION
<                    LES CALCULS LONGS D'EXPRESSION
<                    FLOTTANTE COMPLIQUEE SERONT DECRITS
<                    DANS UN LANGAGE INTERPRETATITIF DONT
<                    LE FORMAT EST DEFINIT PAR 'MINTCO'
<                    POUR LE CODE-OPERATION, ET 'MINTOP'
<                    POUR L'ADRESSE ABSOLUE DE L'OPERANDE,
<                    LES CODES OPERATIONS ETANT DEFINIS
<                    DANS LA TABLE 'LINT'.
<                      ON GENERERA LES MODULES INTERPRETATIFS
<                    A LA SUITE DE L'APPEL A CE SOUS-PROGRAMME
<                    ('INTER' DE LA FACON SUIVANTE :
<
<        WORD        MINTCO=FMASK?CFXX=FVAL?MINTOP=FMASK?XXAD=FVAL
<
<                    OU 'CFXX' DESIGNE L'UN DES CODES
<                    OPERATION INTERPRETATIF, ET 'XXAD'
<                    L'ADRESSE ABSOLUE DE L'OPERANDE OU,
<                    SI 'XXAD' EST UNE ADRESSE RELATIVE :
<
< WORD XXAD=FCTA=FCPUSH(K?MINTCO=FMASK?CFXX=FVAL?MINTOP=FMASK(K=FCPULL=FVAL
<
<
<        NOTA :
<                      POUR OPTIMISER LES TEMPS DE
<                    CALCUL, LES INSTRUCTIONS FLOTTANTES
<                    'FLD' ET 'FSB' SONT REMPLACEES
<                    RESPECTIVEMENT PAR LES COUPLES
<                    ('LA','LB') ET ('STA','STB')...
<
         IF          DFLOT-Z-D,,XEIF%,
         IF          ATTENTION : 'DFLOT-Z' EST DIFFERENT DE 'D', ET
         IF          DONC L'OPTIMISATION ANNONCEE EST MAUVAISE !!!
XEIF%:   VAL         ENDIF
<
<
<        ARGUMENTS :
<                    (A,B)=CONSTANTE FLOTTANTE INITIALE FACULTATIVE,
<                    ((K))=ADRESSE DE LA PREMIERE INSTRUCTION
<                          INTERPRETATIVE.
<
<
<        RESULTATS :
<                    (A,B)=VALEUR FLOTTANTE RESULTANTE.
<
<
INTER:   EQU         $
<
< SAUVEGARDES ET INITIALISATIONS :
<
         STA         FINTW1          < SAUVEGARDE TEMPORAIRE DE LA PREMIERE
                                     < PARTIE DE LA CONSTANTE FACULTATIVE...
         PLR         A               < RECUPERATION DU 'P' EMPILE PAR LE 'BSR'
                                     < D'APPEL,
         PSR         X,C,W           < SAUVEGARDES...
         LR          A,C             < (C)=ADRESSE DE LA PREMIERE INSTRUCTION
                                     <     A INTERPRETER.
         LA          FINTW1          < (A,B)=CONSTANTE FACULTATIVE INITIALE...
<
< BOUCLE D'INTERPRETATION :
<
INTER1:  EQU         $
         #/FST#      FINTW1          < SAUVEGARDE DU NOMBRE FLOTTANT COURANT.
         LAI         K
         LB          O,C             < (A,B)=INSTRUCTION COURANTE,
         DV          CINTER          < ET DECONCATENATION :
         LR          A,X             < (X)=CODE-OPERATION COURANT,
         LR          B,W             < (W)=ADRESSE ABSOLUE DE L'OPERANDE.
         ADRI        LOLINT,C        < ET PASSAGE SUR L'INSTRUCTION SUIVANTE...
         #/FLD#      FINTW1          < RESTAURATION DU NOMBRE FLOTTANT COURANT.
         BR          &ALINT          < VERS LE TRAITEMENT SPECIFIQUE DU CODE-
                                     < OPERATION (X)...
<
< CAS DES CODES INEXISTANTS :
<
PERROR:  EQU         $
         QUIT        XXQUIT          < ON RETOURNE AU 'CCI',
         JMP         INTER1          < PUIS A LA BOUCLE D'INTERPRETATION...
<
< CHARGEMENT D'UN NOMBRE FLOTTANT :
<
PFLD:    EQU         $
         #/FLD#      O,W             < (A,B)=OPERANDE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< RANGEMENT D'UN NOMBRE FLOTTANT :
<
PFST:    EQU         $
         #/FST#      O,W             < L'OPERANDE COURANTE RECOIT LA CONSTANTE
                                     < COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< ADDITION FLOTTANTE :
<
PFAD:    EQU         $
         FAD         O,W             < ON AJOUTE L'OPERANDE COURANTE A LA
                                     < CONSTANTE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< SOUSTRACTION FLOTTANTE :
<
PFSB:    EQU         $
         FSB         O,W             < ON RETRANCHE L'OPERANDE COURANTE A LA
                                     < CONSTANTE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< MULTIPLICATION FLOTTANTE :
<
PFMP:    EQU         $
         FMP         O,W             < ON MULTIPLIE LA CONSTANTE COURANTE PAR
                                     < L'OPERANDE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< DIVISION FLOTTANTE :
<
PFDV:    EQU         $
         FDV         O,W             < ON DIVISE LA CONSTANTE COURANTE PAR
                                     < L'OPERANDE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< VALEUR ABSOLUE FLOTTANTE :
<
PFABS:   EQU         $
         FABS                        < ON PREND LA VALEUR ABSOLUE DE LA CONS-
                                     < TANTE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< NEGATION FLOTTANTE :
<
PFNEG:   EQU         $
         FNEG                        < ON INVERSE LA CONSTANTE COURANTE.
         JMP         INTER1          < VERS LA BOUCLE D'INTERPRETATION...
<
< FIN D'INTERPRETATION :
<
PFIN:    EQU         $
         LR          C,A             < (A)=ADRESSE DE LA PROCHAINE INSTRUCTION
                                     <     A INTERPRETER, QUI N'EXISTE PAS, ET
                                     <     QUI EST DONC L'ADRESSE DE RETOUR DU
                                     <     SOUS-PROGRAMME 'INTER'.
         PLR         X,C,W           < RESTAURATIONS...
         PSR         A               < MISE EN PLACE DE L'ADRESSE DE RETOUR
                                     < AFIN QUE LE 'RSR' FONCTIONNE...
         LA          FINTW1          < (A,B)=VALEUR DE LA CONSTANTE COURANTE...
         RSR                         < ET RETOUR...
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYMES,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        E N V O I   D ' U N   M E S S A G E  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET
<                    L'ENVOI D'UN MESSAGE SUR
<                    L'UNITE 'NVPOUT', SE DONNANT
<                    SON ADRESSE ; LE PREMIER
<                    OCTET DU MESSAGE DONNE SA
<                    LONGUEUR.
<
<
<        ARGUMENT :
<                    (A)=ADRESSE-MOT DU MESSAGE.
<
<
PRINT:   EQU         $
         PSR         A,X,W           < SAUVEGARDES...
         LR          A,W             < (W)=ADRESSE-MOT DU MESSAGE.
<
< PREPARATION DE LA DEMANDE :
<
         SLLS        NOCMO=K
         ADRI        W,A             < (A)=ADRESSE-OCTET DU MESSAGE TENANT
                                     <     COMPTE DU PREMIER OCTET QUI DONNE
                                     <     SA LONGUEUR.
         STA         DEMMES+AMESC    < QUE L'ON MET DANS LA DEMANDE...
         LBY         O,W             < ACCES A LA LONGUEUR DU MESSAGE,
         STA         DEMMES+COESC    < QUE L'ON MET DANS LA DEMANDE...
<
< ENVOI DU MESSAGE :
<
         LAD         DEMMES
         SVC
<
< RETOUR :
<
         PLR         A,X,W           < RESTAURATIONS...
         RSR                         < ET RETOUR...
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYCCI,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        E N V O I   D ' U N E   C A R T E   I N T E R P R E T A T I V E
<                                    A U   ' C C I '  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME PERMET
<                    L'ENVOI AU 'CCI' INTERPRE-
<                    TATIF D'UNE CARTE DONT ON
<                    SE DONNE L'ADRESSE.
<
<
<        ARGUMENT :
<                    (A)=ADRESSE DE LA CARTE.
<
<
<        RESULTAT :
<                    LES CODES CONDITIONS SONT POSITIONNES PAR UN 'CPZR X'.
<
<
SPCCI:   EQU         $
         PSR         A,X
<
< PREPARATION DE LA DEMANDE :
<
         SLLS        NOCMO=K
         STA         DEMCCI+AMESC    < MISE EN PLACE DE L'ADRESSE-OCTET DE
                                     < LA CARTE DE LA DEMANDE.
<
< DEMANDE D'INTERPRETATION :
<
         LAD         DEMCCI
         SVC
<
< RETOUR :
<
         PLR         A,X             < RESTAURATIONS...
         RSR                         < ET RETOUR ; RAPPELONS QUE L'ON PEUT AU
                                     < RETOUR FAIRE UN 'JE'/'JNE' PERMETTANT LE
                                     < TEST DES CONDITIONS DE DEROULEMENT DE
                                     < L'INTERPRETATION...
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYHIN,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        C O N V E R S I O N   H E X A - D E C I M A L E
<        E N   B I N A I R E   I N T E R N E  :
<
<
<        FONCTION :
<                      CE MODULE ASSURE LA CONVERSION
<                    D'UNE CHAINE 'ASCI' HEXA-DECIMALE EN
<                    BINAIRE INTERNE, EN S'ARRETANT
<                    SOIT AU BOUT DE 4 CARACTERES, SOIT
<                    SUR LE PREMIER LIMITEUR ('EOT'
<                    OU 'RC') RENCONTRE.
<
<
<        ARGUMENT :
<                    (A)=ADRESSE-MOT DU BUFFER,
<                    (X)=INDEX DU PREMIER CARACTERE.
<
<
<        RESULTAT :
<                    (A)=VALEUR BINAIRE ATTENDUE,
<                    CODES-CONDITIONS POSITIONNES POUR FAIRE UN 'JE OK'.
<
<
HEXIN:   EQU         $
         PSR         B,X,Y
<
< INITIALISATIONS :
<
         SBT         BITX
         STA         ABUFHI          < GENERATION D'UN RELAI VERS LA CHAINE
                                     < A TRANSCODER...
         LYI         NBITMO/NBITCX   < (Y)=NOMBRE DE CHIFFRES ATTENDUS.
                                     < (X)=INDEX DU BUFFER.
         LBI         K               < CLEAR LE REGISTRE B.
<
< BOUCLE DE DECODAGE :
<
HEXIN1:  EQU         $
         LBY         &ABUFHI         < (A)=CARACTERE COURANT DU BUFFER.
         CPI         KEOT            < EST-CE UNE FIN DE MESSAGE ???
         JE          HEXIN5          < OUI...
         CPI         KCR             < EST-CE UNE FIN DE MESSAGE ???
         JE          HEXIN5          < OUI...
         ADRI        -HZERO,A
         JAL         HEXIN4          < ERREUR : CARACTERE NON RECONNU.
         CPI         BASE10          < EST-CE UN CHIFFRE ???
         JL          HEXIN2          < OUI , C'EST UN CHIFFRE.
         ADRI        -HA+HNEUF+Z,A   < NON.
         CPI         BASE10          < VALIDATION.
         JL          HEXIN4          < ERREUR : CARACTERE NON RECONNU.
         CPI         BASE16          < VALIDATION.
         JGE         HEXIN4          < ERREUR : CARACTERE NON RECONNU.
HEXIN2:  EQU         $
         SCRS        NBITCX          < MISE DES 4 BITS EN TETE DE A.
         SCLD        NBITCX          < ET CONCATENATION A B.
         ADRI        I,X             < PROGRESSION DE L'INDEX.
         CPR         X,Y             < EST-CE FINI ???
         JNE         HEXIN1          < NON , ON CONTINUE.
<
< CAS DES FINS DE NOMBRE HEXA-DECIMAL :
<
HEXIN5:  EQU         $
         LR          B,A             < (A)=VALEUR BINAIRE DE (REP).
         LBI         NEXIST          < (B)=0 : RETOUR OK...
<
< RETOURS :
<
HEXIN3:  EQU         $
         CPZR        B               < POSITIONNEMENT DES INDICATEURS AFIN DE
                                     < PERMETTRE DES TESTS EN RETOUR...
         PLR         B,X,Y           < RESTAURATIONS,
         RSR                         < ET RETOUR...
<
< RETOURS EN ERREUR :
<
HEXIN4:  EQU         $
         LR          B,A             < (A)=VALEUR COURANTE...
         LBI         EXIST           < (B)#0...
         JMP         HEXIN3          < VERS LA SORTIE ...
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE.
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYFLO,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        S O U S - P R O G R A M M E S   F L O T T A N T S  :
<
<
<        FONCTION :
<                      CES QUELQUES SOUS-PROGRAMMES
<                    SONT DEFINIS CAR ILS PERMETTENT
<                    LORSQU'ILS SONT SOUVENT REFERENCES
<                    D'ECONOMISER DE LA PLACE MEMOIRE ;
<                    TOUTES LES INSTRUCTIONS FLOTTANTES
<                    SANS ARGUMENT SONT REPRESENTEES...
<
<
<        ARGUMENT :
<                    (A,B)=UN NOMBRE FLOTTANT.
<
<
<        RESULTAT :
<                    (A,B)=UN NOMBRE FLOTTANT, OU
<                    (A)=UN NOMBRE ENTIER SUIVANT LES CAS...
<
<
FIX:     EQU         $
         FIX
         RSR
FLT:     EQU         $
         FLT
         RSR
FABS:    EQU         $
         FABS
         RSR
FNEG:    EQU         $
         FNEG
         RSR
FCAZ:    EQU         $
         FCAZ
         RSR
SFWOR:   EQU         $
         #/FST#      FWORK           < RANGEMENT DE 'FWORK'...
         RSR
PFWOR:   EQU         $
         FAD         FWORK           < CUMUL, ET
         #/FST#      FWORK           <           RANGEMENT DE 'FWORK'...
         RSR
<
<
<        A R R O N D I   F L O T T A N T  :
<
<
<        FONCTION :
<                      CE SOUS-PROGRAMME CALCULE
<                    SUIVANT LA POSITION DU NOMBRE
<                    ARGUMENT PAR RAPPORT A LA POSI-
<                    TION INTERMEDIAIRE ENTRE SA BORNE
<                    INFERIEURE ENTIERE ET SA BORNE
<                    SUPERIEURE ENTIERE, SA VALEUR
<                    ENTIERE PAR EXCES OU PAR DEFAUT...
<
<
<        ARGUMENT :
<                    (A,B)=UN NOMBRE FLOTTANT.
<
<
<        RESULTAT :
<                    (A)=LE NOMBRE ENTIER PAR EXCES OU PAR DEFAUT...
<
<
ROND:    EQU         $
         JAL         ROND1
         FAD         F05             < NOMBRE POSITIF...
         JMP         ROND2
ROND1:   EQU         $
         FSB         F05             < NOMBRE NEGATIF...
ROND2:   EQU         $
         BSR         AFIX            < ET ENFIN, CONVERSION ENTIERE...
         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         $
<
< VALIDATION DE L'ARGUMENT,
< ET INITIALISATIONS :
<
         BSR         AFCAZ
         JE          RAC2            < NOMBRE=0 ==> RACINE=0...
         JG          RAC3            < OK, NOMBRE>0...
         QUIT        XXQUIT          < ??!??!?!
RAC3:    EQU         $
         PSR         X,Y
         LR          A,X             < X ET
         LR          B,Y             < Y MEMORISENT LE NOMBRE ARGUMENT.
<
< BOUCLE D'APPROXIMATION :
<
RAC1:    EQU         $
         BSR         ASFWOR
         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...
<
< ET RETOUR :
<
         PLR         X,Y
RAC2:    EQU         $
         RSR
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE.
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYHEX,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        C O N V E R S I O N   B I N A I R E   E N
<        H E X A - D E C I M A L   ' A S C I '  :
<
<
<        FONCTION :
<                      CE MODULE ASSURE LA CONVERSION
<                    D'UN NOMBRE DE 16 BITS ARGUMENTS
<                    EN UNE CHAINE DE 4 CARACTERES
<                    HEXA-DECIMAUX 'ASCI'.
<
<
<        ARGUMENT :
<                    (A)=ADRESSE-MOT DU BUFFER,
<                    (B)=MOT DE 16 BITS A CONVERTIR,
<                    (X)=INDEX DU PREMIER CARACTERE A GENERER.
<
<
<        RESULTAT :
<                    LE BUFFER ARGUMENT CONTIENT UNE CHAINE DE 4 CARACTERES.
<
<
HEXEX:   EQU         $
         PSR         A,B,X,Y
<
< INITIALISATIONS :
<
         SBT         BITX
         STA         ABUFHE          < GENERATION D'UN RELAI VERS LA CHAINE
                                     < A GENERER...
<
< BOUCLE DE CODAGE :
<
         LYI         NBITMO/NBITCX   < (Y)=NOMBRE DE CHIFFRES A CODER,
                                     < (X)=INDEX COURANT DES CARACTERES,
                                     < (B)=NOMBRE DE 16 BITS A CODER.
HEXEX1:  EQU         $
         LAI         K               < CLEAR,
         SLLD        NBITCX          < DECONCATENATION,
         CPI         BASE10          < EST-CE UN CHIFFRE DECIMAL ???
         JL          HEXEX2          < OUI...
         ADRI        HA-HNEUF-Z,A    < NON, HEXA-DECIMAL...
HEXEX2:  EQU         $
         ADRI        HZERO,A         < CODAGE 'ASCI',
         STBY        &ABUFHE         < ET GENERATION DE LA CHAINE 'ASCI'...
         ADRI        I,X             < PASSAGE AU CARACTERE SUIVANT,
         ADRI        -I,Y
         CPZR        Y               < S'IL EXISTE ???
         JG          HEXEX1          < ET OUI...
<
< RETOUR :
<
         PLR         A,B,X,Y
         RSR
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE.
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYDET,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        C A L C U L   D ' U N   D E T E R M I N A N T   3 * 3  :
<
<
<        FONCTION :
<                      CE MODULE CALCULE UN
<                    DETERMINANT 3*3 PAR LA
<                    METHODE CLASSIQUE...
<
<
<        ARGUMENTS :
<                    (A,B)=0 : CALCULER LE DETERMINANT,
<                         #0 : (A,B) EST LE DETERMINANT CHERCHE NON NUL...
<                    M(I,J)=ADRESSE DE L'ELEMENT (I,J).
<
<
<        RESULTAT :
<                    (A,B)=VALEUR DU DETERMINANT,
<                    INDICATEURS POSITIONNES PAR UN TEST DE NULLITE DE (A,B).
<
<
DETER:   EQU         $
         BSR         AFCAZ           < FAUT-IL LE CALCULER ???
         JNE         DETER1          < NON, (A,B) EN DONNE LA VALEUR NON NULLE..
         FLD         &AM11           < M11,
         FMP         &AM22           < M11*M22,
         FMP         &AM33           < M11*M22*M33,
         BSR         ASFWOR
         FLD         &AM12           < M12,
         FMP         &AM23           < M12*M23,
         FMP         &AM31           < M12*M23*M31,
         BSR         APFWOR          < M11*M22*M33+M12*M23*M31,
         FLD         &AM13           < M13,
         FMP         &AM21           < M13*M21,
         FMP         &AM32           < M13*M21*M32,
         BSR         APFWOR          < M11*M22*M33+M12*M23*M31+M13*M21*M32,
         PSR         A,B             < ET SAVE...
         FLD         &AM13           < M13,
         FMP         &AM22           < M13*M22,
         FMP         &AM31           < M13*M22*M31,
         BSR         ASFWOR
         FLD         &AM11           < M11,
         FMP         &AM23           < M11*M23,
         FMP         &AM32           < M11*M23*M32,
         BSR         APFWOR          < M13*M22*M31+M11*M23*M32,
         FLD         &AM12           < M12,
         FMP         &AM21           < M12*M21,
         FMP         &AM33           < M12*M21*M33,
         BSR         APFWOR          < M13*M22*M31+M11*M23*M32+M12*M21*M33,
         PLR         A,B             < M11*M22*M33+M12*M23*M31+M13*M21*M32
         FSB         FWORK           < -M13*M22*M31-M11*M23*M32-M12*M21*M33.
         BSR         AFCAZ           < ET TEST DE LA VALEUR DU DETERMINANT...
DETER1:  EQU         $
         RSR                         < ET RENVOI DE (A,B)=DET(M(I,J)).
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE.
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYCRA,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        R E S O L U T I O N   D ' U N   S Y S T E M E
<        L I N E A I R E   3 * 3   P A R   L A
<        M E T H O D E   D E   C R A M E R  :
<
<
<        FONCTION :
<                      CE MODULE RECOIT COMME
<                    ARGUMENT LES ADRESSES DES
<                    COEFFICIENTS D'UN SYSTEME
<                    LINEAIRE, QU'IL RESOUT ENSUITE
<                    PAR LA METHODE DE CRAMER :
<
<                    M11*VARX+M12*VARY+M13*VARZ=M14,
<                    M21*VARX+M22*VARY+M23*VARZ=M24,
<                    M31*VARX+M32*VARY+M33*VARZ=M34.
<
<                    DONT LA SOLUTION EST :
<                                    VARX=DETER(4,2,3)/DETER(1,2,3),
<                                    VARY=DETER(1,4,3)/DETER(1,2,3),
<                                    VARZ=DETER(1,2,4)/DETER(1,2,3).
<                    (OU LES NUMEROS 1, 2, 3 ET 4 INDIQUENT
<                    LES NUMEROS DES COLONNES DU SYSTEME).
<
<
<        ARGUMENTS :
<                    (A,B)=0 : CALCULER LE DETERMINANT DU SYSTEME,
<                         #0 : (A,B) DONNE LA VALEUR NON NULLE (...) DU
<                              DETERMINANT DU SYSTEME...
<                    AMIJ=ADRESSES DES ELEMENTS 'MIJ',
<                    AVAR=ADRESSES DES VALEURS DES VARIABLES.
<
<
CRAMER:  EQU         $
<
< INITIALISATIONS :
<
         PSR         A,B,X
<
< SAUVEGARDE DES POINTEURS :
<
         PSR         A,B             < SAUVEGARDE DU DETERMINANT EVENTUEL DU
                                     < SYSTEME...
         LRM         A,B,X
         WORD        AM
         WORD        SAM
         WORD        LAM
         MOVE                        < (AM) --> SAM...
         PLR         A,B             < RESTAURE :
                                     < (A,B)=VALEUR EVENTUELLE DU DETERMINANT
                                     <       DU SYSTEME 3*3...
<
< CALCUL DU DETERMINANT DU SYSTEME :
<
         BSR         ADETER          < (A,B)=DETERMINANT DU SYSTEME,
                                     < ET VALIDATION :
         JNE         CRAMR1          < OK, IL N'EST PAS NUL...
         QUIT        XXQUIT          < E R R E U R   P R O G R A M M E ...
CRAMR1:  EQU         $
         #/FST#      FDETER          < ET MEMORISATION DU DETERMINANT...
<
< CALCUL DE LA PREMIERE VARIABLE :
<
         LAD         M14
         STA         AM11
         LAD         M24
         STA         AM21
         LAD         M34
         STA         AM31
         BSR         ADETER          < CALCUL DU DETERMINANT (4,2,3),
         FDV         FDETER
         FST         &AVARX          < VARX=DETER(4,2,3)/DETER(1,2,3).
<
< CALCUL DE LA DEUXIEME VARIABLE :
<
         LA          SAM11
         XM          AM11
         STA         AM12
         LA          SAM21
         XM          AM21
         STA         AM22
         LA          SAM31
         XM          AM31
         STA         AM32
         BSR         ADETER          < CALCUL DU DETERMINANT (1,4,3),
         FDV         FDETER
         FST         &AVARY          < VARY=DETER(1,4,3)/DETER(1,2,3).
<
< CALCUL DE LA TROISIEME VARIABLE :
<
         LA          SAM12
         XM          AM12
         STA         AM13
         LA          SAM22
         XM          AM22
         STA         AM23
         LA          SAM32
         XM          AM32
         STA         AM33
         BSR         ADETER          < CALCUL DU DETERMINANT (1,2,4),
         FDV         FDETER
         FST         &AVARZ          < FZSAB=DETER(1,2,4)/DETER(1,2,3).
<
< RESTAURATION DES ADRESSES :
<
         LA          SAM13
         STA         AM13
         LA          SAM23
         STA         AM23
         LA          SAM33
         STA         AM33
<
< ET RETOUR :
<
         PLR         A,B,X
         RSR
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE.
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYGOT,XEIF%9,,XEIF%9
         LST
         PAGE
<
<
<        S I M U L A T I O N   D ' U N   " G O T O "  :
<
<
<        FONCTION :
<                      ETANT DONNE QUE LE 'LOCAL'
<                    ET LE 'COMMON' SE SATURENT VITE
<                    ET QU'AVEC LES INSTRUCTIONS
<                    FLOTTANTES LES SAUTS SUPE-
<                    RIEURS A 128 MOTS SONT FACILES
<                    A FAIRE (...), L'INSTRUCTION
<                    'BR' BIEN QUE NECESSAIRE EST
<                    DONC INUTILISABLE ; D'OU CE
<                    SOUS-PROGRAMME QUI LA SIMULE
<                    EN RECEVANT COMME ARGUMENT
<                    L'ADRESSE A LAQUELLE ON DOIT
<                    SE BRANCHER.
<                      IL S'UTILISE AINSI QUE LE
<                    MONTRE L'EXEMPLE SUIVANT :
<
<        BSR         AGOTO
<        WORD        ETIQET          < SIMULE UN 'JMP ETIQET'...
<
<
<        ARGUMENT :
<                    LE MOT SUIVANT LE 'BSR' DONNE L'ADRESSE...
<
<
GOTO:    EQU         $
<*******************************************************************************
         PSR         A,W             < SAUVEGARDES DES REGISTRES DE TRAVAIL...
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DE L'INSTRUCTION PRECEDENTE.
<*******************************************************************************
XWOR%1:  VAL         XWOR%1(MOCD     < ON NE CONSERVE QUE LA LISTE DES
                                     < REGISTRES EMPILES...
XWOR%9:  VAL         K               < INITIALISATION DU CUMUL (NEGATIF) DU
                                     < NOMBRE DE REGISTRES EMPILES.
XWOR%2:  VAL         BIT>NBITCX-N    < MASQUE D'UN CHIFFRE HEXA-DECIMAL.
         DO          NBITMO
XWOR%1:  VAL XWOR%1=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%2+CORBT=FMASK+XWOR%1=FCINST
         DO          NBITMO
XWOR%9:  VAL         0=FCPULL-NBITMO=FCSIGN+XWOR%9
XWOR%9:  VAL         -XWOR%9         < NOMBRE DE REGISTRES EMPILES...
         LR          K,W             < (W) BASE LA PILE, ET VA DONC PERMETTRE
                                     < L'ACCES A L'ADRESSE A LAQUELLE SE
                                     < SE BRANCHER...
         LA          -XWOR%9,W       < (A)=ADRESSE DE RETOUR DU SOUS-PROGRAMME,
                                     <    =ADRESSE DE L'ADRESSE A LAQUELLE SE
                                     <     BRANCHER,
         PSR         W               < SAUVEGARDE DE LA BASE DE LA PILE...
         LR          A,W             < QUE L'ON MET DANS 'W'...
         LA          O,W             < (A)=ADRESSE A LAQUELLE SE BRANCHER (ON
                                     <     NE PEUT PAS FAIRE DE 'BR O,W', CAR
                                     <     EN EFFET 'W' ET 'K' SERAIENT
                                     <     MAUVAIS...).
         PLR         W               < RESTAURATION DE LA BASE DE LA PILE,
         STA         -XWOR%9,W       < ET L'ADRESSE A LAQUELLE SE BRANCHER
                                     < REMPLACE L'ADRESSE DE RETOUR DU
                                     < SOUS-PROGRAMME 'GOTO'...
<*******************************************************************************
         PLR         A,W             < RESTAURATION DES REGISTRES...
XWOR%1:  VAL         '0000000@@@@    < RECUPERATION DE L'INSTRUCTION PRECEDENTE.
<*******************************************************************************
XWOR%1:  VAL         XWOR%1(MOCD     < ON NE CONSERVE QUE LA LISTE DES
                                     < REGISTRES DEPILES...
XWOR%8:  VAL         K               < INITIALISATION DU CUMUL (NEGATIF) DU
                                     < NOMBRE DE REGISTRES DEPILES.
XWOR%2:  VAL         BIT>NBITCX-N    < MASQUE D'UN CHIFFRE HEXA-DECIMAL.
         DO          NBITMO
XWOR%1:  VAL XWOR%1=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%2+CORBT=FMASK+XWOR%1=FCINST
         DO          NBITMO
XWOR%8:  VAL         0=FCPULL-NBITMO=FCSIGN+XWOR%8
XWOR%8:  VAL         -XWOR%8         < NOMBRE DE REGISTRES DEPILES...
         IF          XWOR%8-XWOR%9,,XEIF%,
         IF          ATTENTION : ON NE DEPILE PAS LE MEME NOMBRE DE
         IF          REGISTRES QUE L'ON EN A EMPILES !!!
XEIF%:   VAL         ENDIF
         RSR                         < ET BRANCHEMENT A L'ADRESSE ARGUMENT...
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE.
XEIF%9:  VAL         ENDIF
<-------------------------------------------------------------------------------
         IF          XXXPRO-YYYDEB,XEIF%9,,XEIF%9
<
< GENERATION DU CODE
< D'ENVOI DE "!M;!D..." :
<
<        ARGUMENT :
<                    (XADMD)=ADRESSE DE LA CARTE "!M;!D;...".
<
         LST
         LRM         A
         WORD        XADMD           < (A)=ADRESSE DE LA CARTE "!M;!D;...",
         BSR         ASPCCI          < QUE L'ON ENVOIE AU CCI,
         QUIT        XXQUIT          < ET QUE L'ON EXECUTE...
         NLS
XXXPRO:  VAL         YYYINX          < AFIN DE NE PLUS REASSEMBLER CE MODULE...
XEIF%9:  VAL         ENDIF
<===============================================================================
         LST



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.