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