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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.