TABLE ZERO: EQU $ DZS '10 <POUR CMS4 WORD DEB WORD DEBEFF PROG DEB: EQU $ LRP L BR -1,L < PAGE < < < < E T A T S D E L ' A N A L Y S E < < EPO: VAL 0 <PARENTHES OUVRANTE OU DEB ANALYSE EPF: VAL 1 <PARENTHESE FERMANTE ECD: VAL 2 <CONSTANTE DECIMALE ECH: VAL 3 <CONSTANTE HEXA ECB: VAL 4 <CONSTANTE BINAIRE ECA: VAL 5 <CONSTANTE ASCI EV1: VAL 6 <VARIABLE 1ER MEMBRE EV2: VAL 7 <VARIABLE 2ND MEMBRE EOP: VAL 8 <OPERATEUR EF1: VAL 9 <FIN 1ER MEMBRE EPP: VAL 10 <POST O-PERATEUR EFT: VAL 11 <FIN DE TRAVAIL EER: VAL 12 <ERREUR < < NOTA: EPP EST PEU DIFFERENT DE EPO < < < T Y P E C A R A C T E R E E N C O U R S < AC: VAL '1 <CARACTERES A C BDF: VAL '2 <CARACTERES B D F LL: VAL '4 <CARACTERE L BA: VAL '8 <DELIMITEUR ASCI " BB: VAL '10 <BASE BINAIRE % BH: VAL '20 <BASE HEXA ' C01: VAL '40 <CHIFFRES 0 1 C29: VAL '80 <CHIFFRES 2 3 ... 9 EG: VAL '100 <SIGNE = EOT: VAL '200 <EOT (OU CTRLD) OP: VAL '400 <OPERATEUR PO: VAL '800 <PARENTHESE OUVRANTE PF: VAL '1000 <PARENTHESE FERMANTE SP: VAL '2000 <ESPACE AU: VAL '4000 <AUTRE CARACTERE < < < AF: VAL AC+BDF <CARACTERES A B C D E F ACL: VAL AC+LL <CARACTERS A C L C09: VAL C01+C29 <CHIFFRES 0...9 C0F: VAL C09+AF <CHIFFRES 0...F < < OPERATEURS < PLUS: VAL "+" <ADDITION MOINS: VAL "-" <SOUSTRACTION MULT: VAL "*" <MULTIPLICATION DIV: VAL "/" <DIVISION, QUOTIENT REST: VAL "\" <DIVISION, RESTE SHFTL: VAL "<" <SHIFT LEFT SHFTR: VAL ">" <SHIFT RIGHT OR: VAL "@" <OU LOGIQUE AND: VAL "&" <ET LOGIQUE EOR: VAL "#" <OU EXCLUSIF < < < < P A R A M E T R E S < NMNIV: VAL 10 <NB MAX NIVEAUX DE PARENTHESES LMVC: VAL 32 <LONGUEUR MAX VARIABLE OU CSTE < <EN FORMAT EXTERNE LMMSG: VAL 90 <LONGUEUR MAX MESSABE EN PROVE < <NANCE DE L'UTILISATEUR < LTBNV: VAL 90 <LONGUEUR MAX TABLR DES NOMS DE <VARIABLES, ELLE EST DE LA FORME: <"NOM1"'FF"NOM2"'FF... <..."NOMN"'FF'00 NMAXV: VAL 25 <NB MAX DE VARIABLES POUR LA TABLE <DES VALEURS: TVV PAGE TABLE < < TABLE DES ADRESSES DES TABLES POUR CHAQUE ETAT < TBET: EQU $ WORD TEPO <ETAT PRENTHESE OUVRANTE WORD TEPF <ETAT PARENTHESE FERMANTE WORD TECD <ETAT CSTE DECIMALE WORD TECH <ETAT CSTE HEXA WORD TECB <ETAT CSTE BINAIRE WORD TECA <ETAT CSTE ASCI WORD TEV1 <ETAT VARIABLE 1ER MEMBRE WORD TEV2 <ETAT VARIABLE 2ND MEMBRE WORD TEOP <ETAT OPERATEUR WORD TEF1 <ETAT FIN MEMBRE 1 WORD TEPP <ETAT POST O-PERATEUR < < TABLE DE BRANCHEMENT EN FONCTION DE L'ETAT ET DU < CARACTERE EN COURS < < CHAQUE POSTE DE LA TABLE CONTIENT ADRESSE DE < BRANCHEMENT ET TYPES DE CARACTERES ASSOCIES < < POUR CHAQUE ETAT LA TABLE SE TERMINE PAR UN MOT A ZERO < TEPO: EQU $ <ETAT PO (PARENTHESE OUVRANTE) WORD INOP;OP TEPP: EQU $ <ETAT PP (POST O-PERATEUR) WORD INV1;ACL+BDF+AU WORD INCA;BA WORD INCB;BB WORD INCH;BH WORD INCD;C09 WORD TRPO;PO WORD ANACAL;SP WORD -EPO TEPF: EQU $ <ETAT PF (PARENTHESE FERMANTE) WORD TRF1;EG WORD INOP;OP WORD TRPF;PF WORD ANACAL;SP WORD -EPF TECD: EQU $ <ETAT CD (CSTE DECIMALE) WORD TRCD;C09 WORD ECDEG;EG WORD ECDOP;OP WORD ECDPF;PF WORD ANACAL;SP WORD -ECD TECH: EQU $ <ETAT CH (CSTE HEXA) WORD TRCH;C0F WORD ECHEG;EG WORD ECHOP;OP WORD ECHPF;PF WORD ANACAL;SP WORD -ECH TECB: EQU $ <ETAT CB (CSTE BINAIRE) WORD TRCB;C01 WORD ECBEG;EG WORD ECBOP;OP WORD ECBPF;PF WORD ANACAL;SP WORD -ECB TECA: EQU $ <ETAT CA (CSTE ASCI) WORD ECABA;BA WORD TRCA;'FFFF TEV1: EQU $ <ETAT V1 (VAR MEMBRE 1) WORD TRV1;ACL+BDF+C09+AU WORD EV1EG;EG WORD EV1OP;OP WORD EV1PF;PF WORD ANACAL;SP WORD -EV1 TEV2: EQU $ <ETAT V2 (VAR MEMBRE 2) WORD TRV2;ACL+BDF+C09+AU WORD EV2CD;EOT WORD ANACAL;SP WORD -EV2 TEOP: EQU $ <ETAT OP (OPERATEUR) WORD EOPACL;ACL WORD ANACAL;SP WORD -EOP TEF1: EQU $ <ETAT F1 (FIN MEMBRE 1) WORD INV2;ACL+BDF+AU WORD TRFM;EOT WORD ANACAL;SP WORD -EF1 < < TABLE CORRESPONDANCE CARACTERES/TYPE UTILISEE < PAR LE SP TRCAR < TCAR: EQU $-" " WORD SP;AU;BA;OP < ESPACE ! " # WORD AU;BB;OP;BH < $ % & ' WORD PO;PF;OP;OP < ( ) * + WORD AU;OP;AU;OP < , - . / WORD C01;C01;C29;C29 < 0 1 2 3 WORD C29;C29;C29;C29 < 4 5 6 7 WORD C29;C29;AU;AU < 8 9 : ; WORD OP;EG;OP;AU < < = > ? WORD OP;AC;BDF;AC < @ A B C WORD BDF;BDF;BDF < D E F < < TABLES DES NOMS DE VARIABLES ET DES VALEURS DE VARIABLES < TNV: DZS LTBNV <TABLE DES NOMS DE VARIABLES <DE LA FORME: "NOM1"'FF"NOM2"'FF... <..."NOMN"'FF'00 TNVF: EQU $ <FIN TABLE TNV TVV: DZS NMAXV*2 <TABLE DES VALEURS (2 MOTS PAR VALEUR) < < < PILES < PREG: DZS 80 <REGISTRES (PAR K) PR: DZS NMNIV+1*2 <PILE DES RESULTATS POP: DZS NMNIV+4 <PILE DES OPERATEURS(PUSH/PULL) < < AUTRES ZONES < VCC: DZS LMVC/2+1 <VARIABLE OU CSTE EN COURS MSG: DZS LMMSG/2+1 <MESSAGE EN ENTRDEE < MESSAGE D'ERREUR ER: ASCI " ER " CODR: DZS 3 <CODE ERREUR < REPONSE REP: ASCI " " REPH: DZS 5 <RESULTAT EN HEXA ASCI " " BYTE '22 REPA: DZS 2 <RESULTAT EN ASCI BYTE '22;'0D;'0A REPB: DZS 20 <RESULTAT EN BINAIRE ASCI " " REPD: DZS 3 <RESULTAT EN DECIMAL ASCI " " LREPD: VAL $-REPD LREPF: VAL 8 REPF: DZS LREPF <RESULTAT EN FLOTTANT IREPDF: EQU $ < POUR REINITIALISER 'REPD' ET 'REPF'... DO $-REPD WORD " " LREPDF: VAL $-IREPDF < MES0: BYTE '0D;'0A;">" <DEMANDE A L'UTILISATEUR < PAGE COMMON COMCAL: EQU $ WORD 0 < POUR LE BLOC FLOTTANT... < < C O N S T A N T E S < < CONSTANTES DIVERSES < DIX: WORD 10 PDIX: DZS 1 <PUISSANCES DE 10 TEOT: WORD EOT <TYPE CARACT EOT TOP: WORD OP <TYPE OPERATEUR TLL: WORD LL <TYPE LL TAU: WORD AU <TYPE AUTRE LNF:: VAL 2 < LONGUEUR MOTS D'UN NOMBRE FLOTTANT. EFL10E: WORD 10 < DIX ENTIER. EFLDIX: FLOAT 10.0 EFL1SD: FLOAT 0.1 EFLUN: FLOAT 1.0 EFLT1: DZS LNF < ZONE DE TRAVAIL 1. EFLSDX: DZS 1 < SIGNE DE X ARGUMENT: < = 0 : X >= 0, < < 0 : X < 0. EFLPUI: DZS 1 < PUISSANCE DE 10 DU NOMBRE. EFLREL: DZS 1 < RELAI D'ACCES A LA ZONE D'EDITION. EFLX: WORD '8000 < RELAI D'ADRESSAGE OCT < < ARGUMENTS POUR SVC < DEM1: WORD '0202 <ENVOI CARACTERE ">" WORD MES0-ZERO*2 WORD 3 < DEM2: WORD '0101 <LECTURE EXPRESSION WORD MSG-ZERO*2 WORD LMMSG < DEM3: WORD '0001 <RETOUR CCI INTERACTIF < DEM4: WORD '0202 <ENVOI REPONSE UL 2 WORD REP-ZERO*2 WORD 0 < DEM5: WORD '0202 <ENVOI MESSAGE D'ERREUR WORD ER-ZERO*2 WORD 0 < < R E S E R V A T I O N S < PCC: DZS 1 <POINTEUR CARACT EN COURS NC: DZS 1 <NIVEAU PARENTHESES EN COURS PPR: DZS 1 <POINTEUR PILE DES RESULTATS ETAT: DZS 1 <ETAT DE L'ANALYSE PCVCC: DZS 1 <POINTEUR EN COUS VAR OU CSTE < <EN COURS LMVCC: DZS 1 <LONG MAX ..ETC... LVCC: DZS 1 <LONGUEUR COURANTE ...ETC... RGVC: DZS 1 <RANG VARIABLE EN COURS DANS TABLE <DES NOMS (TNV) TBLE DES VALEURS (TVV) PCTNV: DZS 1 <POINTEUR COURANT TABLE DES NOMS < < R E L A I S < AOCT: WORD ZERO,X <ADRESSE OCTET AOVCC: WORD VCC-ZERO*2 <ADR OCT VAR OU CSTE EN COUS AOCODR: WORD CODR-ZERO*2 <ADR OCTET CODE ERREUR AOREPH: WORD REPH-ZERO*2 <ADR OCT REPONSE HEXA AOREPB: WORD REPB-ZERO*2 <ADR OCT REPONSE BINAIRE AOREPD: WORD REPD-ZERO*2 <ADR OCT REPONSE DECIMALE AOREPF: WORD REPF-ZERO*2 <ADR OCTET REPONSE FLOTTANTE AOREPA: WORD REPA-ZERO*2 <ADR OCT REPONSE ASCI AXREPA: WORD REPA,X <REPONSE ASCI AOTNV: WORD TNV-ZERO*2 <ADR OCT TABLE NOMS DE VARIABLES AOTNVF: WORD TNVF-ZERO*2 <ADR OCT FIN DE CETTE TABLE AXTVV: WORD TVV,X <RELAI TABLE DES VALEURS ATBET: WORD TBET,X <TABLE BRANCH SELON ETAT EN COURS APREG: WORD PREG-1 <PILE UTILISABLE AVEC K APR: WORD PR,X <PILE DES RESULTATS APO: WORD POP <PILE DES OPERATEURS ATCAR: WORD TCAR,X <TAB DES CARACT (CF SP TRCAR) AANACA: WORD ANACAL AERR: WORD ERR ATRCAR: WORD TRCAR AINOP: WORD INOP ATRCA: WORD TRCA ATRCD: WORD TRCD ATRPF: WORD TRPF ATRF1: WORD TRF1 ATRFM: WORD TRFM ACDB: WORD CDB ACBD: WORD CBD AEFL: WORD EFL EFLADA: WORD EFLDA < EDITION DE L'EXPOSANT. EFLAST: WORD EFLST < STOCKAGE D'UN OCTET EN ZONE D'EDITION. ACHB: WORD CHB ACBB: WORD CBB ACADR: WORD CADR AOPER: WORD OPER ACLV1: WORD CLV1 ACLV2: WORD CLV2 AEDITR: WORD EDITR AEDHB: WORD EDHB ACLN: WORD CLN AV16: WORD V16 ARCHV: WORD RCHV <RECHERCHE VARIABLE AINSV: WORD INSV <INSTALLATION VARIABLE ADEB2: WORD DEB2 <ADR RETOUR SI ALT-MODE < PROG < < I N I T I A L I S A T I O N S G L O B A L E S < < BASE DU COMMON < WORD COMCAL+128 DEBEFF: EQU $ <POINT D'ENTREE EFFECTIF LRP C LY -1,C LR Y,C < < PILE GEREE PAR K < LA APREG LR A,K < < TABLE DES NOMS DE VARIABLES: ON MET LE DELIMITEUR DE FIN '00 < EN TETE < LAI 0 LX AOTNV STBY &AOCT < < ADRESSE BRANCHEMENT SI ALT-MODE < LA ADEB2 WORD '1EB5 < < INTERROGATION UTILISATEUR < DEB2: EQU $ LRM A,B,X WORD IREPDF WORD REPD WORD LREPDF MOVE < REINITIALISATION DE 'REPD' ET 'REPDF'... LAD DEM1 SVC 0 JE LEC LBI 1 ACTD < < LECTURE MESSAGE < LEC: EQU $ LAD DEM2 SVC 0 JE TSTFIN LBI 2 ACTD < < TEST FIN < TSTFIN: EQU $ LX DEM2+1 LBY &AOCT CPI '04 <1ER CARACT=EOT? JNE INIT LAD DEM3 <OUI, RETOUR CCI SVC 0 JMP DEB2 INIT: EQU $ < < INITIALISATIONS ANALYSE SYNTAXIQUE ET CALCUL < < ADRESSE CARACTERE EN COURS (ADR OCTET) < LA DEM2+1 ADRI -1,A STA PCC <POINTEUR CARACT EN COURS < < PILE DES OPERATEURS ET NIVEAU EN COURS < LAI NMNIV+3 SWBR A,A ORI 1 STA &APO <PILE UTILISANT PUSH/PULL LY APO LAI 0 PUSH <OPERATEUR NEUTRE AU NIVEAU <EN COURS (NIVEAU ZERO) < STZ NC <NIVEAU EN COURS = 0 < < PILE DES RESULTATS: DEUX MOTS PAR < POSTE DE LA TABLE (RESULT.SUR 2 MOTS) < LA APR STA PPR <POINTEUR PILE RESULTATS LXI 0 STZ &PPR <RAZ 1ER MOT NIVEAU 0 LXI 1 STZ &PPR <IDEM 2EME MOT NIVEAU ZERO < < REINIT K (ON PEUT ETRE SORTI EN ERREUR AVEC PILE NON VIDE) < LA APREG LR A,K < < ETAT ANALYSE: ETAT INITIAL=EPO (ETAT < PARENTHESE OUVRANTE) < LAI EPO STA ETAT PAGE < < < ANALYSE ET CALCUL < ANACAL: EQU $ LA ETAT CPI EFT <FIN DE TRAVAIL? JNE A01 LAD DEM4 <OUI,ENVOI REPONSE... SVC 0 JE DEB2 <...+ CARACTERE ">" LBI 4 ACTD A01: EQU $ CPI EER <ETAT ERREUR? JNE A02 LAD DEM5 <OUI, ENVOI MESSAGE... SVC 0 JE DEB2 <...+CARACTERE ">" LBI 5 ACTD A02: EQU $ <DERNIER CARACTERE ATTEINT? LA PCC <POINT. CAR. EN COURS SB DEM2+1 < - ADR. DEB CPI LMMSG <LONG MAX MSG JL A03 <PLUS PETIT? LBI 10 <NON, ERREUR BR AERR A03: EQU $ <CONTINUER ANALYSE IC PCC <POINTEUR CARACT EN COURS='+1 LX PCC LBY &AOCT <A=CARACT.EN COURS BSR ATRCAR <ET TYPE CARACTERE-->B LX ETAT LY &ATBET <ADR. TABLE ETAT EN COURS, <1ER POSTE A05: EQU $ <DETERMINATION DE L'DRESSE <A LAQUELLE ON DOIT SE BRANCHER <PAR BALAYAGE DE LA TABLE DE <L'ETAT EN COURS LR Y,W <ADR POSTE EN COURS LA 0,W JAG A04 <SI ADR <=0 , CAS ERREUR LR A,B <NUMERO MESS. D'ERREUR BR AERR < ---> ERREUR A04: EQU $ LA 1,W <TYPES CARACT. AUTORISES ANDR B,A <LE TYPE EN COURS CONVIENT? JAE A06 <NON, CONTINUER BALAYAGE BR 0,W <OUI, BRANCHEMENT A06: EQU $ ADRI 2,Y <POSTE SUIVANT JMP A05 <BOUCLE < PAGE < < ETAT=ECD(CSTE DECIMALE) ... < ECDEG: EQU $ <...ET SIGNE = BSR ACDB <CONV DECIM.-->BIN. ET OPERATION BR ATRF1 <TRAITEMENT FIN MEMBRE 1 < ECDOP: EQU $ <...ET OPERATEUR BSR ACDB <CONV. DEC.--->BIN. ET OPERATION BR AINOP <INIT OPERATEUR < ECDPF: EQU $ <...ET PARENTH. FERMANTE BSR ACDB <CONV DEC-->BIN ET OPERATION BR ATRPF <TRAITEMENT PARENTH. FERMANTE < < ETAT=ECH(CSTE HEXA) ... < ECHEG: EQU $ <...ET SIGNE = BSR ACHB <CONV HEXA-->BIN. ET OPER. BR ATRF1 <TRAIT. FIN 1ER MEMBRE < ECHOP: EQU $ <...ET OPERATEUR BSR ACHB <CONV HEXA-->BIN ET OPER. BR AINOP <INIT OPERATEUR < ECHPF: EQU $ <...ET PARENTH. FERMANTE BSR ACHB <CONV HEXA-->BIN. ET OPER. BR ATRPF <TRAIT. PARENTH. FERMANTE < < ETAT=ECB(CSTE BINAIRE) ... < ECBEG: EQU $ <...ET SIGNE = BSR ACBB <CONVERSION ET OPERATION BR ATRF1 <TRAIT. FIN MEMBRE 1 < ECBOP: EQU $ <...ET OPERATEUR BSR ACBB <CONVERSION ET OPERATION BR AINOP <INIT OPERATEUR < ECBPF: EQU $ <... ET PARENTHESE FERMANTE BSR ACBB <CONVERSION ET OPERATION BR ATRPF <TRAIT. PARENTH. FERMANTE < < < ETAT ECA(CSTE ASCI)... < ECABA: EQU $ <... ET DELIMITEUR " <PROBLEME DES DOUBLEMENTS <DE DELIMITEUR " LX PCC <POINTEUR CARACT. EN COURS ADRI 1,X LBY &AOCT CPI '22 <CARACT. SUIV. = " ? JNE A08 BR ATRCA <OUI, CARACT. EN COURS N'EST <PAS UN DELIMITEUR, IL EST PRIS <COMME CAR. ASCI A08: EQU $ ADRI -2,X LBY &AOCT CPI '22 <CARACT. PRECEDENT = " ? JE A09 <NON, DONC CAR. EN COURS EST <UN DELIMITEUR LAI EPF <ETAT=PARENTH. FERMANTE(FICTIF) STA ETAT BSR ACADR <CADRAGE+OPERATION A09: EQU $ BR AANACA <RETOUR ANALYSE < < ETAT EV1(VARIABLE 1ER MEMBRE)... < EV1EG: EQU $ <...ET SIGNE = BSR ACLV1 <CLOSE VAR. ET OPERATION BR ATRF1 <TRAIT. FIN 1ER MEMBRE < EV1OP: EQU $ <...ET OPERATEUR BSR ACLV1 <CLOSE VAR. ET OPERATION BR AINOP <INIT. OPERATEUR < EV1PF: EQU $ <...ET PARENTH. FERMANTE BSR ACLV1 <CLOSE VARIABLE ET OPERATION BR ATRPF <TRAIT. PARENTH. FERMANTE < < ETAT=EV2 (VARIABLE 2ND MEMBRE) ... < EV2CD: EQU $ <... ET CAR=EOT (CTRLD) BSR ACLV2 <CLOSE VAR 2ND MEMBRE BR ATRFM <TRAITEMENT FIN DE MESSAGE < < ETAT=EOP(OPERATEUR) ET CAR. = A,C,L < EOPACL: EQU $ LY APO <ADR. PILE OPERATEURS PULL <OPERATEUR EN COURS-->A XR A,B LX PCC <CARACT. EN COOURS... LBY &AOCT <...DANS A ORR B,A <OPERATEUR COMPLET-->A PUSH <STOCKAGE OPERATEUR LAI EPO <ETAT=PARENTH.OUVRANTE(FICTIF) STA ETAT BR AANACA <RETOUR ANALYSE < INCD: EQU $ <INIT CSTE DECIMALE LAI ECD <ETAT=ECD(CSTE DECIMALE) LXI 5 <LONGUEUR MAX JMP IN INCH: EQU $ <INIT CSTE HEXA LAI ECH <ETAT=ECH(CSTE HEXA) LXI 8 <LONGUEUR MAX JMP IN INCA: EQU $ <INIT CSTE ASCI LAI ECA <ETAT=ECA(CSTE ASCI) LXI 4 <LONGUEUR MAX JMP IN INCB: EQU $ <INIT CSTE BINAIRE LAI ECB <ETAT=CSTE BIN.) LXI 32 <LONGUEUR MAX JMP IN INV1: EQU $ <INIT VAR. 1ER MEMBRE LAI EV1 <ETAT=EV1(VAR.1ER MEMBRE) LXI LMVC <LONGUEUR MAX JMP IN INV2: EQU $ <INIT VAR. 2ND MEMBRE LAI EV2 <ETAT=EV2(VAR 2ND MEMBRE) LXI LMVC <LONGUEUR MAX IN: EQU $ STA ETAT <STOCKAGE ETAT STX LMVCC <STOCKAGE LONGUEUR MAX LXI 0 <INIT... STX LVCC <...LONG. VAR. OU CSTE EN COURS LA AOVCC <ADR OCT. ZONE DE STOCKAGE... STA PCVCC <..VAR/CSTE EN COURS->PCVCC LA ETAT <SI ETAT... CPI ECD <...=CSTE DECIMALE JE TRCD CPI EV1 <...OU VARIABLE 1ER MEMBRE JE TRV1 CPI EV2 <...OU VARIABLE 2ND MEMBRE JE TRV2 <ALORS ON STOCKE LE 1ER CARACTERE <SINON... BR AANACA <...RETOUR DIRECT A ANALYSE < INOP: EQU $ < INIT OPERATEUR:STIOCKAGE DANS LA PILE PO,AU NIVEAU EN COURS. < SI C'EST UN OPERATEUR A 2 CARACTERES (SHIFT), ALORS < ON RESTE EN ETAT OPERATEUR;SINON ON PASSE A L'ETAT EPP < LX PCC <CAR. EN COURS... LBY &AOCT <...DANS A SWBR A,B <..ET B (A GAUCHE) CPI SHFTL JE INOP2 CPI SHFTR JE INOP2 LAI EPP <ETAT=POST O-PERATEUR JMP INOP1 INOP2: EQU $ <OPERATEUR A 2 CARACTERES LAI EOP <ETAT=OPERATEUR INOP1: EQU $ STA ETAT <STOCKAGE ETAT < < STOCKAGE DE L'OPERATEUR AU NIV EN COURS < LR B,A LY APO PULL LR B,A PUSH BR AANACA <RETOUR ANALYSE PAGE < TRAITEMENT VARIABLE OU CONSTANTE EN COURS < (STOCKAGE CARACTERE EN COURS AVEC CONTROLE LONGUEUR < PAR RAPPORT A LA LONGUEUR MAX: LMVCC) < TRCD: EQU $ <CONSTANTE DECIMALE TRCH: EQU $ <CONSTANTE HEXA TRCA: EQU $ <CONSTANTE ASCI TRCB: EQU $ <CONSTANTE BINAIRE TRV1: EQU $ <VARIABLE 1ER MEMBRE TRV2: EQU $ <VARIABLE 2ND MEMBRE LX PCC <CARACTERE EN COURS... LBY &AOCT <...DANS A LX PCVCC <POINTEUR COURANT STBY &AOCT <STOCKAGE DANS VCC IC PCVCC <PCVCC='+1 LA PCVCC SB AOVCC <CALCUL LONGUEUR COURANTE CP LMVCC <LONGUEUR CORRECTE? JLE TRC1 LBI 30 <NON, ERREUR BR AERR TRC1: EQU $ <OUI, STA LVCC <STORE LONGUEUR.. BR AANACA <...ET RETOUR ANALYSE CLV1: EQU $ < < CLOSE VARIABLE 1ER MEMBRE ET OPERATION < BSR ARCHV <RECHERCHE VARIABLE CPZR W <ELLE EXISTE? JE CLV11 <NON, ERREUR BSR AOPER <OUI, VALEUR EST DANS A B <ON PEUT EFFECTUER L'OPERATION RSR <RETOUR CLV11: EQU $ <VARIABLE INEXISTANTE LBI 40 BR AERR <--->ERREUR CLV2: EQU $ < < CLOSE VARIABLE SECOND MEMBRE: < INSTALLATION SI ELLE N'EXISTE PAS ENCORE < ET AFFECTATION DE VALEUR < BSR ARCHV <RECHERCHE VARIABLE CPZR W <ELLE EXISTE? JNE CLV21 <OUI BSR AINSV <NON, ALORS ON L'INSTALLE CLV21: EQU $ <AFFECTATION DE VALEUR LA RGVC <RANG SLLS 1 <RANG*2... LR A,W <...DANS W LXI 0 LA &PPR <1ER MOT VALEUR... LR W,X STA &AXTVV <...>VALEUR(1) LXI 1 LA &PPR <1ER MOT VALEUR... ADRI 1,W LR W,X STA &AXTVV <...--->VALEUR(2) RSR <RETOUR < < TRAITEMENT PARENTHESE OUVRANTE < ETAT=PARENTHESE OUVRANTE < INCREMENTATION VERIF. NIVEAU EN COURS (NC) < EMPILEMT OPERATEUR NEUTRE DS PIL OPERAT. (PO) < EMPILEMENT RESULT. NUL DS PILE RESULTATS (PR) < TRPO: EQU $ LAI EPO STA ETAT <ETAT=EPO(PRENTH. OUVR.) < < PILE DES OPERATEURS < IC NC <NIVEAU EN COURS='+1 LA NC CPI NMNIV <NIVEAU MAX ATTEINT? JLE P01 <NON, EMPILER LBI 20 <OUI, ERREUR BR AERR P01: EQU $ LAI 0 LY APO PUSH <EMPILEMENT OPERATEUR NEUTRE < < PILE DES RESULTATS < IC PPR <POINT. PILE RESULT.='+! IC PPR < " " " '+1 <2 MOTS PAR NIVEAU! LXI 0 STZ &PPR <RESULTAT NUL 1ER MOT LXI 1 STZ &PPR <RESULTAT NUL 2ND MOT BR AANACA < < TRAITEMENT PARENTHESE FERMANTE < ETAT=PARENTHESE FERMANTE < DECREM. ET VERIF. NIVEAU EN COURS(NC) < OPERATION < TRPF: EQU $ LAI EPF STA ETAT <ETAT=PARENTH. FERMANTE < LA NC <NIVEAU EN COURS JAG PF1 <CORRECT? LBI 21 <NON, ERREUR BR AERR PF1: EQU $ LY APO <PASSAGE AU NIVEAU INFERIEUR... PULL <...SUR PILE DES OPERATEURS LXI 0 LA &PPR <CHARGEMENT A ET B AVEC LXI 1 <RESULTAT NIVEAU EN COURS LB &PPR DC PPR <DECREMENTATION DE 2... DC PPR <DU POINTEUR PILE RESUL. DC NC <NIVEAU EN COURS='-1 BSR AOPER <OPERATION BR AANACA <RETOUR ANALYSE < < TRAITEMENT FIN DE 1ER MEMBRE < ETAT=FIN 1ER MEMBRE < VERIF NIVEAU EN COURS (NC=0) < TRF1: EQU $ LAI EF1 STA ETAT <ETAT=FIN 1ER MEMBRE < LA NC <NIVEAU EN COURS... JAE F11 <..NUL? LBI 22 <NON, ERREUR BR AERR F11: EQU $ BR AANACA <RETOUR ANALYSE < < TRAITEMENT FIN DE MESSAGE < .... < .... TRFM: EQU $ LAI EFT STA ETAT <ETAT=FIN DE TRAVAIL BSR AEDITR <EDITION REPONSE EN DECIMAL HEXA. ET BIN. <T BINAIRE BR AANACA <RETOUR ANALYSE < PAGE < < S/P T R C A R TRAITEMENT CARACTERE < < CE S/P DETERMINE LE TYPE DU CARACTERE EN COURS < < EN ENTREE A=CARACTERE EN COURS < < EN SORTIE A=INCHANGE < B=TYPE CARACTERE < < LE TRAITEMENT UTILISE LA TACLE DE CORRESPONDANCE < CARACTERE/TYPE TCAR POUR LA PLUPART DES CARACTERES < TRCAR: EQU $ CPI '04 <EOT? JE T05 CPI '0D <OU RETURN ? JNE T01 T05: EQU $ <CTRLD OU RETURN LB TEOT <TYPE=EOT JMP T99 T01: EQU $ CPI "\" JNE T02 LB TOP <TYPE OPERATEUR JMP T99 T02: EQU $ CPI " " JL T03 CPI "F" JG T03 LR A,X LB &ATCAR <CHARGEMENT DU TYPE JMP T99 T03: EQU $ CPI "L" JNE T04 LB TLL <TYPE LL JMP T99 T04: EQU $ LB TAU <TYPE AUTRE T99: EQU $ RSR PAGE EDITR: EQU $ < < EDITION DU RESULTAT EN DECIMAL HEXADECIMAL BINAIRE ET ASCI < LXI 0 LA &PPR <1ER MOT RESULTAT STA &AXREPA <PREPARATION EDITION ASCI LXI 1 LB &PPR <2ND MOT RESULTAT STB &AXREPA <PREPARATION EDITION ASCI < < EN DECIMAL < LY AOREPD <ADR OCT REPONSE DECIMALE BSR ACBD <CONVERSION-EDITION ADRI REPD-REP+LREPF+LREPD*2,X <CALCUL LONGUEUR STX DEM4+2 < < EN FLOTTANT : < LY AOREPF <ADR OCT REPONSE FLOTTANTE BSR AEFL <CONVERSION-EDITION < < EN HEXADECIMAL < LY AOREPH <ADR OCT REPONSE HEXA STY PCVCC <...DANS POINTEUR LXI 4 <NB DE SHIFT POU EDHB LYI 4*2+1 <LONG. ZONE D'EDITION BSR AEDHB <CONVERSION-EDITION < < EN BINAIRE < LY AOREPB <ADR OCT. REPONSE BINAIRE... STY PCVCC <...DANS POINTEUR LXI 1 <NB DE SHIFT POUR EDHB LYI 4*8+7 <LONG. ZONE D'EDITION BSR AEDHB <CONVERSION-EDITION < < EN ASCI (LES CARACTERES NON-COMPRIS EMTRE < '20 ET '5F SOT REMPLACES PAR < DES BLANCS < LA AOREPA STA PCVCC <ADR OCT 1ER CAR LXI 4 <INIT COUNT CAA1: EQU $ LR X,W <SVG COUNT LX PCVCC LBY &AOCT <CAR EN COURS... CPI '20 JL CAA2 CPI '5F JLE CAA3 CAA2: EQU $ <...COMPRIS ENTRE '20 ET '5F LAI '20 <--->REMPLACE PAR BLANC STBY &AOCT CAA3: EQU $ IC PCVCC <CAR SUIVANT LR W,X <RESTAUR COUNT JDX CAA1 <BOUCLE RSR <RETOUR PAGE < < S/P C B D CONVERSION BINAIRE-->DECIMAL < < EN ENTREE A B NOMBRE A CONVERTIR < Y=ADR OCTETZONE DE STOKAGE RESULTAT < < EN SORTIE A B Y INCHANGES < X=LONGUEUR OCTETS RESULTAT < < NOTA: LE NOMBRE OBTENU EST PRECEDE D'UNE "*" S'IL ETAIT TROP GRAND CBD: EQU $ PSR A,B,Y EORR W,W CPI -1 <A='FFFF ? JE CBDN <OUI, VOIR SI B NEGATIF JANE CBDP <NON, PROBLEME XR A,B <B EST-IL ... JAGE CBDOK <...POSITIF?ALORS OK CBDP: EQU $ <PROBLEME, METTRE * DEVANT LE NOMBRE LAI "*" JMP CBDOK2 CBDN: EQU $ XR A,B <B EST-IL... JAL CBDOK <...NEGATIF? ALORS OK JMP CBDP <...PROBLEME CBDOK: EQU $ LAI " " <NE RIEN METTRE DEVANT LE NOMBRE CBDOK2: EQU $ LR Y,X <ADR OCT ZONE EDITION... ADRI -1,X <... -1 STBY &AOCT <STORE "*" 0U " " PLR A,B,Y PSR A,B,Y TBT 15+1 <NB NEGATIF? JNC CBD2 <NON ADRI 1,W <OUI, W POSITIONNE A 1 NGR B,B <INVERSION CBD2: EQU $ LXI 0 <COUNT NB CHIFFRES DECIMAUX CBD5: EQU $ <BOUCLE SUR DIVISIONS PAR 10 LAI 0 DV DIX JNV CBD3 <DIVISION IMPOSSIBLE? LBI 'D <OUI, RETOUR CCI ACTD CBD3: EQU $ PSR B <PUSH LE RESTE DE LA DIVISION ADRI 1,X <COUNT NB CIFFRES DECIMAUX JAE CBD4 <QUOTIENT NUL? XR A,B <NON, UN CONTINUE JMP CBD5 CBD4: EQU $ <STCKAGE NB DECIMAL DANS ZONE <D'ADRESSE OCTET (Y) LR X,B <SVG LONG. DANS B LR W,A <SIGNE JAE CBD6 <NB POSITIF, PAS DE SIGNE <NB NEGATIF, STOCKE SIGNE ADRI 1,B <LONGUEUR='+1 LAI "-" XR X,Y STBY &AOCT XR X,Y ADRI 1,Y <ADR STOCKAGE='+1 CBD6: EQU $ <BOUCLE DE STOCKAGE DES CHIFFRES <DECIMAUX PLR A <PULL CHIFFRE ORI '30 XR X,Y STBY &AOCT <STORE CHIFFRE ETENDU XR X,Y ADRI 1,Y <ADR=ADR+1 JDX CBD6 <BOUCLE STOCKAGE LR B,X <LONGUEUR-->X PLR A,B,Y <RESTAURATION RSR PAGE < < E F L : E D I T I O N D ' U N N O M B R E F L O T T A N T. < < ARGUMENT: < - 'A'-'B' = NOMBRE FLOTTANT A EDITER. < - 'Y' = ADRESSE OCTET D'EDITION. < < RESULTAT: < - LE NOMBRE EST EDITE SOUS LA FORME [-]0.XXXXXXX [-]ENN < < ATTENTION: < - PREVOIR PAS MAL DE MOTS DANS SA PILE ! < < < LA METHODE UTILISEE EST LA SUIVANTE: < < - ON TRAVAILLE AVEC LA VALEUR ABSOLUE DE X. < - ON DETERMINE SON ORDRE DE GRANDEUR, C'EST-A-DIRE QU'ON CHERCHE < N TEL QUE : 10**N <= X <= 10**(N+1) < - ON DIVISE X PAR 10**(N+1) --> U AVEC 0 <= U < 1, PUIS ON < DETERMINE LES DECIMALES DE U EN FAISANT DES MULTIPLICATIONS PAR 10 < AVEC ARRONDI PUIS SOUSTRACTION A U' DU CHIFFRE OBTENU..... < AUTANT DE FOIS QUE NECESSAIRE. < EFL: EQU $ < < SAUVEGARDES ET INITIALISATIONS. < PSR A,B,X,Y PSR W STY EFLREL < RELAI OCTET D'ACCES A LA ZONE D'EDITION. < SIGNE DE X ARGUMENT. STZ EFLSDX < X POSITIF OU NUL A PRIORI. FCAZ JGE EFL1 DC EFLSDX < X NEGATIF. LYI "-" < PLACER LE SIGNE MOINS. BSR EFLAST EFL1: EQU $ LYI "0" < PLACER LE ZERO. BSR EFLAST LYI "." < ET LE POINT DECIMAL. BSR EFLAST FABS < ON TRAVAILLE AVEC X > 0. STZ EFLPUI < PUISSANCE NULLE A PRIORI. FCAZ < ET ON ELIMINE TOUT DE SUITE LE NUL. JNE EFL7 LYI "0" BSR EFLAST JMP EFL9 EFL7: EQU $ LRM W < ON FERA DES MULTIPLICATIONS PAR 10 WORD EFLDIX < A PRIORI. LYI 1 < PUISSANCES POSITIVES A PRIORI. FCAM EFLUN JGE EFL2 ADRI EFL1SD-EFLDIX,W < MULTIPLICATIONS PAR 0.1. LYI -1 < PUISSANCES NEGATIVES... EFL2: EQU $ < < EVALUATION DE L'ORDRE DE GRANDEUR DU NOMBRE. < PSR A,B FLD EFLUN FST EFLT1 < TRAV1 = 1. PLR A,B LXI 0 < PUISSANCE DE 10 COURANTE. EFL4: EQU $ CPZR Y < PIUSSANCES POSITIVES / NEGATIVES ? JL EFL3 < ON TRAVAILLE EN PUISSANCES DE 10 POSITIVES. FCAM EFLT1 JL EFL5 < VU. EFL6: EQU $ < PASSER A LA PUISSANCE DE 10 SUIVANTE. PSR A,B FLD EFLT1 FMP 0,W JNCV $+2 ACTD FST EFLT1 PLR A,B ADR Y,X < NOUVELLE PUISSANCE COURANTE. JMP EFL4 EFL3: EQU $ < ON TRAVAILLE EN PUISSANCES DE 10 NEGATIVES. FCAM EFLT1 JL EFL6 < ESSAYER PLUS PETIT. PSR A,B FLD EFLT1 < REVENIR UN PEU EN ARRIERE... FMP EFLDIX FST EFLT1 ADRI 1,X < PUISSANCE DE 10 RETENUE. PLR A,B EFL5: EQU $ STX EFLPUI < PUISSANCE RETENUE. FDV EFLT1 < DIVISER X PAR 10 ** (N+1) --> U. FST EFLT1 < ON A ICI : 0 <= U < 1. < < DETERMINATION DES DECIMALES DE U. < LXI 8 < ON NE SORT QUE 8 DECIMALES. EFL8: EQU $ FCAZ JE EFL9 < TERMINE. FMP EFLDIX FST EFLT1 FIX LR A,Y ADRI "0",Y BSR EFLAST < STOCKER LA DECIMALE... FLT FNEG FAD EFLT1 JDX EFL8 < DECIMALE SUIVANTE SVP. EFL9: EQU $ < IL RESTE A EDITER L'EXPOSANT. LYI " " BSR EFLAST LYI "E" BSR EFLAST LY EFLREL LA EFLPUI BSR EFLADA < EDITION DES 2 CHIFFRES DE L'EXPOSANT. < < RETOUR : < PLR W PLR A,B,X,Y RSR < < S T O C K A G E D ' U N C A R A C T E R E E N Z O N E < < D ' E D I T I O N. < EFLST: EQU $ PSR A,X LX EFLREL LR Y,A STBY &EFLX IC EFLREL PLR A,X RSR PAGE < < C O N V E R S I O N - E D I T I O N E N D E C I M A L < < F O R M A T A S C I D ' U N N O M B R E B I N A I R E < < C O N T E N U D A N S ' A '. < < ARGUMENTS: < - 'A' = NOMBRE EN BINAIRE. < - 'Y' = ADRESSE OCTET D'EDITION DE CE NOMBRE < < ATTENTION: < CE S/P EST SPECIALISE DANS L'EDITION DE L'EXPOSANT < D'UN NOMBRE FLOTTANT, AUSSI N'ACCEPTE-T-IL QUE DES < NOMBRES TENANT SUR 2 CHIFFRES DECIMAUX AU MAXIMUM. < EFLDA: EQU $ CPI 99 < VALIDATION. JLE $+2 ACTD PSR A,B,X,Y < SAUVEGARDES. PSR W < XR Y,W LYI " " < SI POSITIF, PAS DE SIGNE. JAGE $+2 LYI "-" < NOMBRE NEGATIF, SIGNE MOINS. XR Y,W < 'W' CONTIENT LE SIGNE. < LXI 2 < 2 CHIFFRES MAXI. EFLDA1: EQU $ SARD 16 DV EFL10E CPZR B < TEST SIGNE DU RSTE. JGE $+2 NGR B < CHIFFRE POSITIF. ADRI "0",B < POUR EDITION FUTURE. PSR B < PUSH CHIFFRE COURANT. JDX EFLDA1 PSR W < PUSH SIGNE. < LXI 3 < SIGNE PLUS 2 CHIFFRES. EFLDA2: EQU $ LR X,W < SAVE COUNT. LR Y,X < INDEX COURANT. PLR A < PULL SIGNE / CHIFFRE COURANT. STBY &EFLX < STOCKAGE SIGNE / CHIFFRE. LR W,X < RECUPERATION COUNT. ADRI 1,Y < INDEX CHIFFRE SUIVANT. JDX EFLDA2 < PLR W < RESTAURATIONS. PLR A,B,X,Y RSR PAGE EDHB: EQU $ < EDITION RESULTAT EN FORMAT HEXADECIMAL OU BINAIRE < EN ENTREE A B RESULTAT A EDITER < X NOMBRE DE SHIFT < Y LONGUEUR TOTALE APRES CONVERSION (Y COMPRIS LES BLANCS < BLANC TOUS LES 4 CARACTERES) < PCVCC ADR.OCTET ZONE D'EDITION < < EN SORTIE A B X INCHANGES < Y DETRUIT < PCVCC,LVCC DETRUITS < STZ LVCC <RAZ LONG. COURANTE PSR A,B PSR X <NB DE SHIFT LR Y,X <INIT COUNT DE BOUCLE < EDHB1: EQU $ <BOUCLE LR X,Y <SVG. COUNT PLR X <LECT. ... PSR X <..ET SVG NB SHIFT SCLD 0,X XR A,B LR A,W <SVG. DE A LR X,A <NB DE SHIFT... CPI 1 <... =1 ? (BINAIRE) JE EDHB2 LXI '0F <NON,DONC GARDER 4 BITS JMP EDHB4 EDHB2: EQU $ <OUI,DONC BINAIRE... LXI '01 <GARDER 1 SEUL BIT EDHB4: EQU $ LR W,A <RECUP. DE A ANDR X,A <SELECT 1 OU 4 BITS CPI 9 <CHIFFRE>9 ? JLE EDHB3 ADRI '7,A <OUI, LUI AJOUTER 7(PUIS 30) EDHB3: EQU $ ADRI '30,A LX PCVCC <POINTEUR STBY &AOCT <STORE CARACT. IC PCVCC <POINTEUR='+1 IC LVCC <LONG.='+1 LA LVCC ANDI '03 JANE EDHB5 <LONG. MULTIPLE DE 4 ? LAI " " <OUI,INTERCALER UN BLANC LX PCVCC STBY &AOCT <STORE BLANC IC PCVCC <POINTEUR='+1 ADRI -1,Y <COUNT='-1 EDHB5: EQU $ LR W,A <RECUP. A XR A,B LR Y,X <RECUP COUNT JDX EDHB1 <BOUCLE < PLR X PLR A,B RSR <RETOUR < < < CONTROLE LONGUEUR VARIABLE OU CSTE NON-NULLE < CLN: EQU $ LA LVCC <LONG. VAR OU CSTE EN COURS JAG CLN1 LBI 31 <LONG. NULLE ERREUR BR AERR CLN1: EQU $ <LONGUEUR NON NULLE... RSR <...RETOUR < < < S/P E R R PREPARATION MESSAGE D'ERREUR < < EN ENTREE B=NUMERO MESSAGE D7ERREUR < < EN SORTIE MESSAGE D'ERREUR EN ZONE REPONSE < ETAT=ETAT ERREUR < ERR: EQU $ LAI EER STA ETAT <ETAT=EER (ERREUR) LAI 0 CPZR B <NUM. DE MESSAGE ... JGE ERR1 <...POSITIF OU NUL? LAI -1 <NON, A=-1 (POUR S/P CBD) ERR1: EQU $ LY AOCODR <ADR OCT CODE ERREUR APRES CONVERS. BSR ACBD <CONVERSION BIN-->DECIMAL ADRI CODR-ER*2,X <LONGUEUR DU MESSAGE STX DEM5+2 <STOCKAGE LONGUEUR BR AANACA <RETOUR ANALYSE < < < PAGE OPER: EQU $ < < OPERATION: <RESULT. NIV. NC>= ' .<OPERATEUR NIV. NC.>. <A B> < PSR A,B <SAUVEGARDE NOMBRE EN COURS LXI 1 LY &PPR <2ND MOT RESULTAT NIVEAU NC LXI 0 LX &PPR <1ER MOT RESULTAT NIVEAU NC < < SELECTION DE L'OPERATEUR < LR Y,W <SAUVEGARDE Y LY APO <PILE OPERATEURS PULL <OPERATEUR--->A PUSH LR W,Y <RESTAURATION Y JAE OPERN <OPERATEUR NEUTRE LR A,B SLRS 8 <CARACTERE GAUGHE DE L'OPERATEUR XR A,B ANDI 'FF <CARACTERE DROIT DE L'OPERATEUR XR A,B CPI PLUS JE OPLUS <ADDITION CPI MOINS JE OMOINS <SOUSTRACTION CPI SHFTL JE OSHFTL <SHIFT LEFT CPI SHFTR JE OSHFTR <SHIFT RIGHT CPI OR JE OOR <OU LOGIQUE CPI AND JE OAND <ET LOGIQUE CPI EOR JE OEOR <OU EXCLUSIF CPI MULT JE OMULT <MULTIPLICATION JMP ODR <DIVISION/RESTE < OPERN: EQU $ <OPERATEUR NEUTRE, SIMPLE STOCKAGE PLR A,B <RECUP NOMBRE EN COURS OPSTK: EQU $ <STOCKAGE RESULTAT EN PILE RESULT. (PR) LXI 0 STA &PPR <1ER MOT RESULTAT LXI 1 STB &PPR <2ND MOT RESULTAT RSR <RETOUR < < OOR: EQU $ <OPERATEUR OU LOGIQUE PLR A,B <RECUP NOMBRE EN COURS ORR X,A ORR Y,B JMP OPSTK <STOCKAGE < OAND: EQU $ <OPERATEUR ET LOGIQUE PLR A,B <RECUP NOMBRE EN COURS ANDR X,A ANDR Y,B JMP OPSTK <STOCKAGE < OEOR: EQU $ <OPERATEUR OU EXCLUSIF PLR A,B <RECUP NOMBRE EN COURS EORR X,A EORR Y,B JMP OPSTK <STOCKAGE OSHFTL: EQU $ <SHIFT LEFT LR B,W <SVG NATURE SHIFT (A,C,L) PLR A,B <RECUP NB EN COURS JAL SERR <NB SHIFT NEGATIF -->ERREUR PSR X,Y <SVG RESULT. NIV. NC LR B,X <NB DE SHIFT LR W,A <NATURE SHIFT... CPI "A" JE SAL <...ARITHMETIQUE CPI "C" JE SCL <...CIRCULAIRE CPI "L" JE SLL <...LOGIQUE ACTD SAL: EQU $ <SAL ASSIMILE A SLL SLL: EQU $ <LOGICAL LEFT PLR A,B <RECUP. XY--->AB SLLD 0,X JMP OPSTK <STOCKAGE SCL: EQU $ <CIRCULARY LEFT PLR A,B <RECUP. XY--->AB SCLD 0,X JMP OPSTK <STOCKAGE OSHFTR: EQU $ <SHIFT RIGHT LR B,W <SVG NATURE SHIFT (A,C,L) PLR A,B <RECUP NB EN COURS JAL SERR <NB SHIFT NEGATIF -->ERREUR PSR X,Y <SVG RESULT. NIV. NC LR B,X <NB DE SHIFT LR W,A <NATURE SHIFT... CPI "A" JE SAR <...ARITHMETIQUE CPI "C" JE SCR <...CIRCULAIRE CPI "L" JE SLR <...LOGIQUE ACTD SAR: EQU $ <ARITHMETICAL RIGHT PLR A,B <RECUP. XY--->AB SARD 0,X JMP OPSTK <STOCKAGE SCR: EQU $ <CIRCULARY RIGHT PLR A,B <RECUP. XY--->AB SCRD 0,X JMP OPSTK <STOCKAGE SLR: EQU $ <LOGICAL RIGHT PLR A,B <RECUP XY--->AB SLRD 0,X JMP OPSTK <STOCKAGE SERR: EQU $ <NOMBRE DE SHIFT NEGATIF: ERREUR LBI 34 BR AERR OPLUS: EQU $ <ADDITION AB=XY+AB PLR A,B <RECUP NB EN COURS ADR Y,B <POIDS FAIBLES JNC PL1 <CARRY? ADCR A <OUI,LE REPORTER JNV PL1 <PAS D'OVERFLOW APRES REPORT? JMP PLER <SINON, ERREUR PL1: EQU $ ADR X,A <POIDS FORTS JNV OPSTK <PAS D'OVERFLOW-->STOCKAGE JMP PLER <SINON, ERREUR OMOINS: EQU $ <SOUSTRACTION AB=XY-AB PLR A,B <RECUP NB EN COURS SBR B,Y <POIDS FAIBLES JNC MO1 <PAS DE CARRY? SBCR X <SI,LE REPORTER JNV MO1 <PAS D'OVERFLOW APRES REPORT? JMP MOER <OUI, ERREUR MO1: EQU $ SBR A,X <POIDS FORTS JV MOER <SI OVERFLOW -->ERREUR LR X,A <SINON, RESULTAT DANS A ... LR Y,B <...ET B JMP OPSTK <STOCKAGE PLER: EQU $ <ERREUR SUR ADDITION LBI 35 BR AERR MOER: EQU $ <ERREUR SUR SOUSTRACTION LBI 36 BR AERR < < < ODR: EQU $ <DIVISION,RESTE LR A,W <SVG. OPERATEUR BSR AV16 <VERIF NB EN COURS TIENT SUR 1 MOT <AV16 DEPILE A ET B CPZR B <DIVISEUR NUL ? JNE ODR1 LBI 38 <OUI,ERREUR BR AERR ODR1: EQU $ LR X,A <DIVIDENDE 1ER MOT LXI 0 STB &PPR <STORE DIVISEUR LR Y,B <DIVIDENDE 2ND MOT DV &PPR JNV ODR2 <OVERFLOW? LBI 39 <OUI,ERREUR BR AERR ODR2: EQU $ XR A,W <RECUP OPERATEUR CPI DIV <DIVISION? JNE OREST LR W,B <OUI, QUOTIENT-->B OREST: EQU $ <RESTE DANS B <IL FAUT ETENDRE LE SIGNE <DU RESULT. A A TBT 16 <RESULT. NEGATIF? JNC ODR3 LAI -1 JMP OPSTK <STOCKAGE ODR3: EQU $ LAI 0 <RESULT. POSITIF JMP OPSTK <STOCKAGE OMULT: EQU $ <MULTIPLICATION (AB=XY*AB) BSR AV16 <VERIFICATION : NB EN COURS <DOIT TENIR SUR 1 MOT <(V16 DEPILE A ET B) PSR A,B PSR X,Y <MULTIPLICANDE BSR AV16 <IDEM PLR A,B <MULTIPLICATEUR LR Y,A <MULTIPLICANDE LXI 0 STB &PPR <STORE MULTIPLCATEUR MP &PPR JMP OPSTK <STOCKAGE < CHB: EQU $ < CONVERSION NB EN HEXA ( 'AB4E.. ) EN BINAIRE DANS A B < ET OPERATION (SP OPER) < BSR ACLN <VERIF LONGEUR NON-NULLE LBI 4 <NB DE SHIFT POUR CVHB JMP CVHB CBB: EQU $ < CONVERSION DE NB BINAIRE ( %0110011....) EN BINAIRE < DANS A B ET OPERATION (SP OPER) < BSR ACLN <VERIF LONGUEUR NON NULLE LBI 1 <NB DE SHIFT POUR CVHB CVHB: EQU $ LA AOVCC <ADRESSE CONSTANTE... STA PCVCC <...DANS POINTEUR LX LVCC <LONGUEUR CSTE A CONVERTIR LAI 0 PSR A PSR A <INIT A ZERO CVHB1: EQU $ <BOUCLE TRAITEMENT 1 CARACT. LR X,Y <SVG COUNT POUR BOUCLE (JDX) LX PCVCC <CARACT. EN COURS... LBY &AOCT <...DANS A CPI "A" <CHIFFRE ... JL CVHB2 <...INFERIEUR A "A" ? ADRI 9,A <NON, AJOUTER 9 CVHB2: EQU $ ANDI '0F <ON GARDE LES 4 BITS DE DROITE LR A,W <SVG CHIFFRE EN COURS LR B,X <NB DE SHIFT PLR A,B SLLD 0,X <SHIFT XR A,B ORR W,A <INSERTION DU CHIFFRE XR A,B PSR A,B <STOCKAGE LR X,B <SVG NB DE SHIFT IC PCVCC <POINTEUR='+1 XR X,Y <RECUP COUNT JDX CVHB1 <BOUCLE < PLR A,B BSR AOPER <OPERATION RSR <RETOUR CDB: EQU $ < < CONVERSION NOMBRE DECIMAL EXTERNE--->BINAIRE DANS A B < LE NOMBRE DOIT TENIR DANS UN REGISTRE. IL EST PLACE DANS B < LE SIGNE EST ETENDU A A < DC PCVCC <POINTEUR-1... LX PCVCC <...DANS X (DERNIER CHIFFRE) LBY &AOCT <DERN. CHIFFRE, ON NE GARDE... ANDI '0F <...QUE LES 4 BITS DROITE... LR A,W <...DANS W LA LVCC <LONGUEUR... ADRI -1,A <... RESTANTE... JAE CDB3 <...NULLE? <NON,CONTINUER CONVERSION PAR <BOUCLE LX LVCC ADRI -1,X <INIT COUNT LAI 1 STA PDIX <INIT PUISSANCE CDB1: EQU $ <BOUCLE LR X,Y <SAUVEGARDE COUNT LA PDIX MP DIX <CALCUL PUISSANCE STB PDIX DC PCVCC <POINTEUR='-1 LX PCVCC <CHIFFRE EN COURS... LBY &AOCT < --->A ANDI '0F <4 BITS DE DROITE MP PDIX <ELEVATION PUISSANCE JANE CDB2 <DEPASSEMENT? XR A,B JAL CDB2 <DEPASSEMENT? ADR A,W <NON, CUMUL JCV CDB2 <DEPASSEMENT? LR Y,X <NON, RECUP. COUNT... JDX CDB1 <...ET BOUCLE CDB3: EQU $ <STOCKAGE RESULTAT LAI 0 <DANS A ET... LR W,B <B BSR AOPER <OPERATION RSR <RETOUR CDB2: EQU $ <DEPASSEMENT, ON VA EN ERREUR LBI 33 BR AERR CADR: EQU $ < < CADRAGE CSTE ASCI, STOCKAGE DANS AB (NOMBRE EN COURS) < ET OPERATION < BSR ACLN <VERIF LONGUEUR NON NULLE LAI 4 LY LVCC <LONGUEUR (NON NULLE) SBR Y,A SLLS 3 LR A,X <X=(4-LONGUEUR)*8 LA AOVCC <ADR. OCTET CSTE ASCI SLRS 1 <ADR MOT XR L,W LR A,L LA 0,L <CSTE ASCI NON CADREE... LB 1,L <...DANS AB XR L,W SLRD 0,X <CADRAGE BSR AOPER <OPERATION RSR <RETOUR V16: EQU $ < < VERIFICATION QU'UN NOMBRE SUR 2 MOTS PEUT TENIR < SUR 1 MOT; SINON, ERREUR < PLR L <ADRESSE RETOUR PLR A,B CPI -1 <A='FFFF ? JE AV2 <OUI, VOIR SI B NEGATIF JAE AV1 <A=0, VOIR SI B POSITIF JMP AVER <ERREUR AV1: EQU $ TBT 16 <B POSITIF? JNC AVOK <OUI, OK JMP AVER <NON, ERREUR AV2: EQU $ TBT 16 <B NEGATIF? JC AVOK <OUI, OK AVER: EQU $ <ERREUR LBI 37 BR AERR AVOK: EQU $ PSR L <ADRESSE RETOUR RSR <RETOUR PAGE RCHV: EQU $ < < RECHERCHE VARIABLE EN TABLE DES NOMS DE VAR. (TNV) < ET, SI ELLE EXISTE ON VA CHERCHER SA VALEUR EN TABLE < DES VALEURS (TVV) ET ON LA MET DANS A B < < EN ENTREE < < VCC/LVCC/PCVCC: VAR. EN COURS/LONGUEUR/POINTEUR COURANT < < EN SORTIE < < VCC/LVCC/PCVCC: INCHANGES < SI LA VARIABLE EXISTE: < W=1 < AB=SA VALEUR, RGVC=SON RANG (DE 0 A N) < PCTN, POINTEUR COURANT TABLE DES NOMS TNV POINTE < SUR LE DERN. CAR. DU NOM + 2 (C'EST '00 SI LA VAR. EST < EST LA DERNIERE DE LA TABLE) < SI LA VARIABLE N'EXISTE PAS < W=0 < PCTN POINTE SUR DELIMITEUR DE FIN DE TABLE '00 < < RAPPEL: LA TABLE A LA STRUCTURE SUIVANTE: < "NOM1"'FF"NOM2"'FF....."NOMN"'FF'00 < < < INITIALISATIONS < LX PCVCC PSR X <SAUVEGARDE POINTEUR DE VCC LAI 'FF <DELIMITATION... STBY &AOCT <..VAR. EN COURS STZ RGVC <RANG=0 LA AOTNV STA PCTNV <POINTEUR COURANT TABLE TNV RCHVT: EQU $ <BOUCLE RECHERCHE VARIABLE LX PCTNV LBY &AOCT JANE RCHVT1 <FIN DE TABLE? EORR W,W <OUI, RECHERCHE INFRUCTUEUSE JMP RCHVF <-->FIN RCHVT1: EQU $ < RECHERCHE VAR. PAR COMPARAISON VAR. VCC < AVEC VAR. EN COURS TABLE (TNV, POINTEUR PCTNV) LY PCTNV <SVG PCTNV LX LVCC ADRI 1,X <LONGUEUR COMPARAISON LA AOVCC STA PCVCC <POINTE SUR 1ER CAR. VARIABLE VCC RCHVT2: EQU $ <BOUCLE COMPARAISON NIV. CARACTERE LR X,W <SVG COUNT LX PCTNV LBY &AOCT LR A,B <CAR. EN COURS TNV LX PCVCC LBY &AOCT <CAR. EN COURS VCC CPR A,B <EGALITE CARACTERE? JNE RCHVT3 <NON,SORTIE BOUCLE CARACTERE IC PCVCC <CAR. SUIVANT IC PCTNV <CAR. SUIVANT LR W,X <RESTAUR. COUNT JDX RCHVT2 <BOUCLE CARACTERE < < EGALITE! RECHERCHE FRUCTUEUSE LAI 1 LR A,W <W=1 EXISTENCE JMP LOADV <LOAD VALEUR VAR. DANS A B RCHVT3: EQU $ <INEGALITE! STY PCTNV <RESTAUR. PCTNV RCHVT4: EQU $ <RECHERCHE DELIMITEUR 'FF ADRI 1,Y LR Y,X LBY &AOCT CPI 'FF JNE RCHVT4 STY PCTNV IC PCTNV <POINTE SUR 1ER CAR. DU NOM <SUIVANT (OU '00 SI FIN !) IC RGVC <RANG=+1 JMP RCHVT <BOUCLE RECHERCHE LOADV: EQU $ <LOAD VALEUR LA RGVC <RANG... SLLS 1 <... *2 LR A,X LA &AXTVV <1ER MOT VALEUR ADRI 1,X LB &AXTVV <2ND MOT VALEUR RCHVF: EQU $ <FIN DU S/P PLR X STX PCVCC <RESTAURATION PCVCC RSR <RETOUR PAGE INSV: EQU $ < < INSTALLATION VARIABLE DANS LA TABLE DES NOMS DE VAR. TNV < < EN ENTREE < < VCC/LVCC/PCVCC: VARIABLE/LONGUEUR/POINTEUR < PCTNV: POINTE SUR FIN TABLE TNV ('00) < RGVC: RANG DE LA DERN. VAR. DE TNV < < EN SORTIE < < VARIABLE INSTALLEE < PCVCC DETRUIT < PCTNV POINTE SUR FIN DE TNV ('00) < RGVC='+1 RANG DE LA VAR. QUE L'ON VIENT D'INSTALLER < < ERREURS: CAPACITE TNV/CAPACITE TVV < < < VERIF CAPACITE TABLES < < TABLE DES NOMS DE VAR. (TNV) < LA PCTNV <POINTEUR... AD LVCC <...+LONGUEUR... ADRI 2,A <...+DELIM'FF+DELIM'00... CP AOTNVF <... >ADR. FIN TNV ? JL INSV1 LBI 41 <OUI, ERREUR CAPACITE TNV BR AERR INSV1: EQU $ < < TABLE DES VALEURS (TVV) < LA RGVC ADRI 1,A <A=RANG+1 CPI NMAXV <RANG>= NB MAX VAR. ? JL INSV2 LBI 42 <OUI, ERREUR CAPACITE TVV BR AERR INSV2: EQU $ LA AOVCC STA PCVCC <1ER CAR. VAR. A INSTALLER LX LVCC <LONGUEUR DU NOM... ADRI 1,X <...+1 POUR DELIM. DE FIN 'FF INSV3: EQU $ <BOUCLE STOCKAGE LR X,W <SVG COUNT LX PCVCC LBY &AOCT <CARACT. EN COURS... LX PCTNV STBY &AOCT <...--->TABLE TNV IC PCVCC <CARACT. SUIV. IC PCTNV <CARACT. SUIV. LR W,X <RESTAUR. COUNT JDX INSV3 <BOUCLE LX PCTNV LAI 0 STBY &AOCT <DELIMITEUR DE FIN DE TABLE RSR <RETOUR END