IF XXXSGN-0,XWOR%,,XWOR% ORDI: VAL "S" < TOUJOURS LE SOLAR... XSTATS: VAL 0 XWOR%: VAL 0 IF XXXSGN-1,XWOR%,,XWOR% XXXSGN: VAL 1 < DU SGN TOUJOURS... XWOR%: VAL 0 IDP "ASSEMBLEUR SOLAR 64K - RELEASE 08/12/1977" IF ORDI-"T",XWOR%,,XWOR% IDP "VERSION EXECUTABLE SOUS CMS4 - T1600" QUANTA: VAL 1 < UNITE D'ALLOCATION DISQUE. XXXSGN: VAL 1 < TOUJOURS LE 'SGN' SUR T1600, XSTATS: VAL 0 < ET PAS DE PLACE POUR LES STATISTIQUES. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% IDP "VERSION EXECUTABLE SOUS CMS5 - SOLAR" QUANTA: VAL 3 < UNITE D'ALLOCATION DISQUE. IF XXXSGN-0,XWOR%,,XWOR% IDP "VERSION SUPER RAPIDE SUR CDA" XWOR%: VAL 0 LLLBUF: VAL 128*QUANTA < NOMBRE DE MOTS OCCUPES PAR LES < BUFFERS DU SGF. < < < A S S E M B L E U R S Y M B O L : < < < NOTA : < L'ASSEMBLEUR SYMBOL EST EN FAIT L'ASSEMBLEUR < ASM FOURNI PAR LA TELEMECANIQUE ET QUI A ETE < ADAPTE AUX BESOINS PREMIERS DU CLIENT , EN < RESPECTANT L'INTERFACE AVEC UCPRS-CMS4 , < ET LES FABULEUX SERVICES QU'IL MET A LA < DISPOSITION DES UTILISATEURS... < < < < < FORMAT DES DESCRIPTEURS DE SECTIONS: < < - 'PROCESSEUR DE BASE' (DANS DECSEC) : < MOT1 = N0 SECTION < MOT2 = @ DEBUT < MOT3 = @ FIN < < < FORMAT DES DESCRIPTEURS DE SYMBOLES : < MOT1 = BIT 0 = INDEXATION RENCONTREE SUR UNE < ADRESSE NON ENCORE DEFINIE. < BIT 1 = 1 SIGNIFIE PREMIER CHAINAGE SUR CE < SYMBOLE, ALORS QUE 0 SIGNIFIE DEU- < XIEME CHAINAGE ET SUIVANTS. IF XXXSGN-1,XWOR%,,XWOR% < BITS 2-7 = NUMERO DE SECTION (<64 !!!). XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% < BIT 2 = 1 : LE SYMBOLE A ETE DEFINI, MAIS JAMAIS REFERENCE, < BITS 3-7 = NUMERO DE SECTION (<32 !!!). XWOR%: VAL 0 < BIT 8 = NON DEFINI < BIT 9 = ABSOLU < BIT 10 = EXT < BIT 11 = DSEC < BIT 12 = DEJA CHAINE < BIT 13 = ENT IF XXXSGN-1,XWOR%,,XWOR% < BIT 14-15 = LG EN MOTS XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% < BIT 14 = SYMBOLE COMPACTE < BIT 15 = LONGUEUR : 0 POUR 1,2 OU 3 CARACTERES < 1 POUR 4,5 OU 6 CARACTERES XWOR%: VAL 0 < MOT2 = @ PROG DE DEFINITION < MOT3(-4-5)= SYMBOLE EVENTUELLEMENT COMPACTE < < < FORMAT DES DESCRIPTEURS DE DEPLACEMENTS (DECROISSANTS) : < < MOT1 = @ DU DESCRIPTEUR DU SYMBOLE < MOT2 = VALEUR DU DEPLACEMENT < MOT3 = @ PROG DU DEPLACEMENT < < < FORMAT DES DESCRIPTEURS DE PAGE < < BIT 0 = MODIFIEE < BIT 1 = NON PLEINE < BIT 2-3 = LG SYMBOLES < BIT 4-7 = N0 PAGE RESIDENTE < BIT 8 = NON RESIDENTE < BIT 9-15 = N0 PAGE < < PAGE < < < B U F F E R S : < < TABLE ZERO: EQU $ < ZERO RELATIF DU PROGRAMME. DZS 'C < INTERFACE AVEC CALL DITEM: EQU $ IF XXXSGN-1,XWOR%,,XWOR% ASCI "ASSY" BYTE "S";'04 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% ASCI "SUPE" BYTE "R";'04 XWOR%: VAL 0 DBCHIT: EQU $ WORD SIZE < TAILLE EN OCTETS WORD ASM < ADRESSE DE RUN DE SYMBOL. PROG WORD 0 < POUR FAIRE $=$+1. PSYMB: EQU $ LRP L BR -2,L < ENTRY DANS SYMBOL. < < BUFFERS DE TRAVAIL DE SYMBOL : < ABSIML: WORD SIML < BUFFER SIMULATION LECTURE 'EDITS'. ABSIME: WORD SIME < BUFFER SIMULATION ECRITURE 'EDITS'. ABORT: WORD NDS < LORS DE LA RENCONTRE D'UN < ERREUR '17' DANS LA VERSION < PROCESSEUR DE BASE DE CMS4 , < ON EDITE LES SYMBOLES NON DEFINIS < PUIS ON ABORTE L'ASSEMBLEUR. ZACQN: ASCI " " < NUMERO LIGNE FICHIER ZACQQ: DZS 4 < POUR NUMEROTATION ZACQ1: EQU $ < BUFFER DE SORTIE DU LISTING. ASCI "000000000000000000" ZACQ: DZS 41 < BUFFER D'ENTREE UNE LIGNE IF ORDI-"T",XWOR%,,XWOR% NZACQ: VAL 2 < NOMBRE DE CARTES DYNAMIQUES. YNZACQ: VAL 40*NZACQ ZZACQ: DZS YNZACQ < CARTES DYNAMIQUES... XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% NZACQ: VAL 3 < NOMBRE DE CARTES DYNAMIQUES. XNZACQ: VAL 128 < ON RESERVE 128 MOTS POUR LES CARTES < DYNAMIQUES ; AINSI L'INDEX OCTET D'ACCES < TIENT SUR UN OCTET. YNZACQ: VAL 40*NZACQ PZZACQ: BYTE XNZACQ;YNZACQ < POINTEUR DE LA PILE DU CODE GENERE... ZZACQ: DZS YNZACQ < CARTES DYNAMIQUES, DZS XNZACQ-YNZACQ < PILE DU CODE GENERE, ACCESSIBLE PAR < LES FONCTIONS DES CARTES DYNAMIQUES. XWOR%: VAL 0 LXZACQ: VAL ZZACQ-ZACQ*2 < POUR PASSER DE ZACQ A ZZACQ. MCLOSE: ASCI "!CLOSE" BYTE '04;0 IF ORDI-"S",XWOR%,,XWOR% SAVEC: DZS 2+XSTATS < SAUVEGARDE DIRECTIVE COURANTE. SAVEP: DZS 2+XSTATS < SAUVEGARDE DIRECTIVE PRECEDENTE. XWOR%: VAL 0 PAGE < < < C O M M O N D E S Y M B O L : < < COMMON COMMUN: EQU $+128 DZS 1 < POUR FLOTTANT COMM1: EQU COMMUN+256 COM1: WORD COMM1 < < < C O N S T A N T E S F L O T T A N T E S : < < ZCDF: WORD 0 ACDF: WORD CDF ACOMFL: WORD COMFL CEFLT: WORD TFLOAT+1 M3800: WORD '3800 ZFLOAT: DZS 6 AZFL: WORD ZFLOAT+1,X ARETD: WORD RETDIR < < < R E L A I S S O U S - P R O G R A M M E S : < < SORSYM: WORD PSOSYM < SORTIE D'UN SYMBOLE. CALEX: WORD PCALEX < CALCUL D'UNE EXPRESSION. MACQ: WORD PMACQ < MODULE D'ACQUISITION. INSET: WORD PINSET < INSERTION D'UN SYMBOLE DANS LA < TABLE DES SYMBOLES TSYMB. RETIQ: WORD PRETIQ < RECHERCHE D'UN SYMBOLE DANS < LA TABLE DES SYMBOLES TSYMB. INSDEP: WORD PINSDP < INSERTION DEPLACEMENT DANS TDEP. IUSY: WORD SPIUSY < REPERAGE SYMB. POUR SUP. SUSY: WORD SPSUSY < SUPPRESSION SYMBOLES VERPA: WORD VERPAS < TEST DEPASSEMENT 32K. SPTAS: WORD PTAS < TRANSFERT SYMBOLE DANS BUF. PSORTQ: WORD SORTQ < SORTIE QUADRUPLET IDP. SPJUMP: WORD PJUMP < VERIFICATION PORTEE DES JUMPS. CONVER: WORD PCONV < CONVERSION 4 CHIFFRES. HEXA2: WORD PHEXA < CONVERSION 2 CHIFFRES. BSUPL: WORD SUPL < TRAITEMENT BITS 9,8,10 SPSAV: WORD PSAV < SAVE POUR LES CAS D'ERREUR. ASPSO1: WORD SPSO1 < SORTIE 1 QUADRUPLET. ASPSO2: WORD SPSO2 < SORTIE 2 QUADRUPLETS. SORSEC: WORD PSORC < EDITION SECTION COMPLETE. SYMUL: WORD PSYMUL < RECHERCHE PROCHAIN SYMBOLE < DE TSYMB. SORMES: WORD PSORM < SORTIE MESSAGE. TRASYM: WORD PTRAS < TRANSFERT DE TSYMB DANS SYMBOL. SPLIST: WORD PLIST < SORTIE LISTING. SORCLF: WORD PSORCL < SORTIE RC-LF. SPLIS1: WORD PLIS1 < SORTIE LISTING (DZS,EQU). CONV10: WORD PCOV10 < CONVERSION DECIMALE. PAGE: WORD PPAGE < SAUT DE PAGE. PAGIN: WORD PPAGIN < PAGINATION. APAGEN: WORD PAGENE < SORTIE LISTING (DIRECTIVES). IF ORDI-"S",XWOR%,,XWOR% ASISVC: WORD SISVC < SIMULATION DES 'SVC' DE LISTING. XWOR%: VAL 0 PAGE < < < C O N S T A N T E S A D R E S S E : < < AC44: WORD C44 ATABLG: WORD TABLG,X ATABTY: WORD TABTY,X XWOR%1: VAL 0 < SGN UTILISE A PRIORI... IF XXXSGN-0,XWOR%,,XWOR% XWOR%1: VAL '800 < ET BIEN NON, PAS DE SGN... XWOR%: VAL 0 ATDEP: WORD '97EF+XWOR%1 ATDEP1: WORD '97EE+XWOR%1 ATDEP2: WORD '97ED+XWOR%1 ATABDR: WORD TABDIR,X AZACQ: WORD ZACQ,X AZACQX: WORD ZACQ+40,X ABFSG0: WORD BUFSGF ABFSGF: WORD BUFSGF+1,X ABRAN: WORD BRAN+2,X ABASC: WORD BASC+1,X ATABCO: WORD FINTAB,X ATACAT: WORD TACAT,X ATACLE: WORD TACLE,X ATALON: WORD TALON,X ATALIG: WORD TALIG,X ATATYP: WORD TATYP,X ATABRG: WORD TABRG,X ADLAN: WORD DEBLAN,X ATSYMB: WORD ZONSYM,X SYMBIN: WORD TABINI,X INCALE: WORD DEBCAL,X INMACQ: WORD DEBMAC,X ATARUP: WORD TARUP,X ASYMB: WORD SYMBOL-1,X ASYMB1: WORD SYMBO1-1,X ASYMB2: WORD SYMBO2-1,X ATBINF: WORD TABINF,X ATBSUP: WORD TABSUP,X AIGET: WORD TABEXT,X LIMINF: WORD ZONBAS,X LIMSUP: WORD ZONBAS+3,X SECBAS: WORD ZONSEC,X VALBAS: WORD ZONBAS+6,X LIMIN1: WORD ZONBA1,X LIMSU1: WORD ZONBA1+2,X SECBA1: WORD ZONSEC+3,X VALBA1: WORD ZONBA1+4,X ASAVE: WORD DEBSAV,X ADINI: WORD DEBIN,X AREST: WORD DEBRES,X ABUF: WORD BUF+2,X ABUFBN: WORD BUFBIN+1,X < +1 A CAUSE DE L'INTERFACE SGF. ACARSP: WORD CARSP+1,X ACOT: WORD COTROU AFINF: WORD FINFRA ATESTF: WORD TESTF ANOCON: WORD NOCONF ADEP: WORD DEPART BRAN: WORD PADIF RETER: WORD EOTIMP WORD PADET ASORLI: WORD SORLIS WORD DOLLAR RETEQ1: WORD C93 ZACQ10: WORD ZACQ1+0 ZACQ11: WORD ZACQ1+1 ZACQ12: WORD ZACQ1+2 ZACQ13: WORD ZACQ1+3 ZACQ14: WORD ZACQ1+4 ZACQ15: WORD ZACQ1+5 ZACQ16: WORD ZACQ1+6 ZACQ17: WORD ZACQ1+7 ZACQ18: WORD ZACQ-1 PAGE < < DEFINITION DU NVP DE SORTIE IMPLICITE : < NVPO: VAL '0402 < VALEUR IMPLICITE SI 'SYMBOL'. KNVPO: VAL 0 < < < Z O N E D E T R A V A I L : < < IOCB4: WORD NVPO+KNVPO < SORTIE DU LISTING. WORD ZACQQ-ZERO*2 WORD 0 DEBCAL: EQU $-1 < ZONE INITIALISEE PAR CALEX. RANG: WORD 0 RANG1: WORD 0 SOM: WORD 0 NSEC: WORD 0 INDSEC: WORD 0 SIGMA: WORD 0 COMDE: WORD 0 NIV: WORD 0 FINCAL: EQU $-1 IOCB3: WORD NVPO < SORTIE MESSAGE. WORD ADSY1 < @ OCTET DE 'SYMBOL'. DEBMAC: EQU $-1 < ZONE INITIALISEE PAR MACQ. SIGNE: WORD 0 SIGN1: WORD 0 ETAT: WORD 0 LG: WORD 0 INDICA: WORD 0 COND: DZS 2 SYMBOL: DZS 3 ADSY0: VAL SYMBOL-ZERO*2 ADSY1: EQU ZERO+ADSY0 VALEUR: EQU SYMBOL INDHEX: EQU SYMBOL+1 CSTE: EQU SYMBOL+2 FINMAC: EQU $-1 NIVSYM: WORD 0 CLE: WORD 0 MOTINF: WORD 0 MOTSUP: WORD 0 IOCB1: WORD NVPO < SORTIE CARTE ERRONNEE. < NVP=4. WORD ZACQ-ZERO*2 WORD 80 BUF: DZS 4 IOCB2: WORD NVPO < MESSAGES D'ERREUR. WORD ADSY3 < @ OCTET DE 'SYMBO2'. VALEQU: WORD 22 < CE MOT DONNE D'UNE PART LE COMPTE < D'OCTETS DES MESSAGES D'ERREUR, ET D'AUTR < D'AUTRE PART UN INDICATEUR RELATIF AU < TRAITREMENT DES "::", < 0 : MODE NORMAL (":"), < +2 : VAL::, < -2 : EQU::. < LES AUTRES VALEURS DOIVENT ETRE CONSI- < DEREES COMME UN VAL:... NELT: WORD 0 NLIG: WORD 0 IOCB5: WORD '0302 < SORTIE BINAIRE. WORD BUFBI2 WORD LLLBUF*2 DEBIN: EQU $-1 < DONNEES INITIALISEES AU LANCEMENT. DZS 2 DEBSAV: EQU $-1 < DONNEES SAUVEGARDEES EN < DEBUT DE PHRASE. SECOUR: WORD 0 PAS: WORD 0 NDEP: WORD 0 ETATS: WORD 0 SECMAX: WORD 0 FINSAV: EQU $-1 INDEND: WORD 0 ZONSEC: EQU $-1 DZS 5 < NUMEROS SECTIONS POINTEES < PAR BASES. LIST2: WORD 0 CHECK: WORD 0 SYMBO1: DZS 3 NACQ1: WORD 0 LIMSU2: WORD 0 SAUVPA: WORD 0 DEBSEC: WORD 0 FINSEC: WORD 0 INDZS: WORD 0 BASCUL: WORD 0 NBLIG: WORD 0 SITUAT: WORD 0 < 0 : LOCAL, COMMON, TABLE. < 1 : DSEC. <-1 : PROG. DEPLA2: WORD 0 IBUFBN: WORD 0 SYMBO2: DZS 3 ADSY2: VAL SYMBO2-ZERO*2 ADSY3: EQU ZERO+ADSY2 FININ: EQU $-1 WORD '2B WORD 0 RCLF: WORD '0D0A ASCI "ERA " ZTR: WORD 0 RC: WORD '0D00 LF: WORD '0A00 ATSYM0: WORD ZONSYM+1 MOTEST: WORD '09A0 OUVR: WORD '2028 < '('. FERM: WORD '2920 < ')'. CARSP: WORD 'A0A5 WORD " " WORD 'A0AA M10: WORD 10 SAUPAG: WORD '0D50 M3277: WORD 3277 IOCB6: WORD 0 IOCB7: WORD 0 DEBLAN: EQU $-1 < DONNEES INITIALISEES EN < DEBUT DE CARTE. INBRE: WORD 0 SINGER: WORD 0 VALDIR: WORD 0 NR: WORD 0 SIGNIF: EQU $ TRANS: WORD 0 INDASC: WORD 0 MOT1: WORD 0 PVIR: WORD 0 MOT2: WORD 0 ETAPH: WORD 0 BINARY: WORD 0 NACQ: WORD 0 CARLU: WORD 0 INDREG: WORD 0 NREG: WORD 0 NETIQ: WORD 0 INBYTE: WORD 0 MOBYTE: WORD 0 INACTD: WORD 0 INFL: WORD 0 FINLAN: EQU $-1 KSTOR: WORD AKSTOR KSTOR3: WORD AKSTOR+3 DEBRES: EQU $-1 DZS FINSAV-DEBSAV < ZONE DE SAUVEGARDE. OPNBO: WORD '0304 < OPEN-NEW ENREGISTREMENT. WORD 1 < CLEF=1.0. WORD 0 CCI: WORD '0001 < APPEL DU CCI. PAGE < < < A D R E S S E S D ' E R R E U R S : < < MERR: WORD ERR < 1 ERREUR D'ECRITURE. < 2 ERREUR DANS UNE EXPRESSION. < 3 ETIQUETTE INTERDITE OU MANQUANTE. < 4 SYMBOLE INCORRECT. < 5 EXPRESSION INTERDITE. < 6 EXPRESSION NON DEFINIE. < 7 DEPLACEMENT HORS-LIMITES. < 8 DOUBLE DEFINITION. < 9 SATURATION DES TABLES. < 10 CHAINAGE INCORRECT < 11 ADRESSE INACCESSIBLE. < 12 PASSAGE D'UNE ADRESSE AU DELA DE 64K. < 13 CONTEXTE IMPROPRE. < 14 ADRESSE SUPERIEURE A 32K SUR LAQUELLE < UNE INDEXATION A ETE DEMANDEE. < 15 LIMITE DE SECTION 'PROG' NON ATTEINTE. < 16 ENCHAINEMENT DES SECTIONS INCORRECT. < 17 SYMBOLE(S) NON DEFINI(S) LORS DE LA RENCONTRE DU 'END'. < 18 DEBORDEMENT SUR UN 'WORD' PARAIT-IL... < 19 LE SYMBOLE TRANSLATABLE DEFINI VAUT '7FFF, OR < CETTE VALEUR INDIQUE UNE FIN DE CHAINAGE. < 20 CHAINAGE SUPERIEUR A 32K, LORS DE LA RENCONTRE < D'UNE REFERENCE EN AVANT SUR LAQUELLE UNE < INDEXATION EST DEMANDEE; LORSQU'UNE REFERENCE < EN AVANT INDEXEE SERA FAITE AU DELA DE 32K, < (PORTANT EVIDEMMENT SUR UNE VALEUR INFERIEURE < A 32K DEFINIE PAR EXEMPLE PAR UN RETOUR ARRIERE < DU $), ON CREERA AUTANT DE SYMBOLES DIFFERENTS < QU'IL Y AURA DE REFERENCES INDEXEES; TOUS CES < SYMBOLES AYANT BIEN ENTENDU LA MEME VALEUR... < 21 SATURATION DE LA TABLE DES SYMBOLES (FAUT LE FAIRE !!!) < 22 LORS D'UNE REFERENCE EN AVANT, UN CHAINAGE>32K < EST SUIVI D'UN CHAINAGE<32K : ON INTERDIT AINSI < DES SYMBOLES<32K DEFINIS APRES AVOIR ETE REFE- < RENCES AU-DELA DES 32K (IL Y AURAIT ALORS POUR < POUR L'EDITEUR DE LIENS UNE AMBIGUITE ENTRE < LES CHAINAGES>32K, ET LES CHAINAGES<32K INDEXES!!!); < LA SOLUTION POUR PASSER OUTRE CETTE POSSIVBILITE < EST DE CREER AUTANT DE SYMBOLES EQUIVALENTS < QUE NECESSAIRES... < 23 ETIQUETTE SUR UNE INSTRUCTION DE L'OPTION CDA. < (INTERDITE POUR UNE RAISON LIEE A LA < COMPLEXITE MERDIQUE DE CET ASSEMBLEUR). < 24 ERREUR D'ACCES A UN FICHIER SUR 'EOT'. < 25 'ED' ALORS QU'IL Y A UN 'EOT' EN COURS. PAGE < < < O P E R A T I O N S S U R F I C H I E R < D ' E N T R E E : < < NBPASS: WORD -1 < EVITE UN ALT-MODE AEOT: WORD EOT LCNF: WORD SPLCNF < SP DE LECTURE SUR FICHIER MODSB: WORD SPMDSB ATSYM1: WORD ZONSY1 ATSYM2: WORD ZONSY1+1 ATSY11: WORD ZONSY2 ATSY12: WORD ZONSY2+1 PTSECT: WORD 2 ADSECT: WORD DECSEC,X BATCH: WORD 0 < 0 : TS, 1 : BATCH. KLIST: WORD 0 < KLIST=0 : EDITION LISTING, < KLIST>0 : PAS DE LISTING (SUR < IOCB3 ET IOCB4). MTABCO: WORD NTABCO < COMPLEMENT PAR RAPPORT A 0 DE LA < LONGUEUR DE LA TABLE DES DIRECTIVES. < < DEBUT DE LA ZONE EMPILEE PAR 'EOT' : < SAVEDK: EQU $ INDO: WORD 0 < LE COMPTEUR/INDICATEUR DES < DO EN COURS FAIT PARTIE DU < CONTEXTE DES FICHIERS. IOCB: WORD '0101 < ENTREE CARTE. WORD ZACQ-ZERO*2 WORD 80 INDIN: WORD 0 < INDEX DE DECOMPACTAGE SGF. OPEN5O: WORD '3405 < OPEN OLD 5,6,7,... LE '3X SERT < EN FAIT A GENERER DES CHIFFRES < DECIMAUX ASCI POUR LA GENERATION < DYNAMIQUE DE SYMBOLES RECURSIFS... WORD 2;0 < SUR LA CLEF 2.0 SINDO: WORD 0 < 'INDO' SPECIAL POUR 'EOT'. CLOS5S: WORD '0407 < CLOSE SAVE 5, 6, 7,... WORD 2 WORD 0 MASS5S: ASCI "!ASSIGN " MASS4S: BYTE "4";"=";"S";'04 MASS5O: ASCI "!ASSIGN " MASS4O: BYTE "4";"=";"O";"," IF ORDI-"T",XWOR%,,XWOR% XXXLFC: VAL 20 < LONGUEUR MOT NOM FICHIER XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% XXXLFC: VAL 10 XWOR%: VAL 0 NOMFIC: DZS XXXLFC+1 < NOM DU FICHIER 'EOT'. LGNMFC: EQU NOMFIC+XXXLFC < LONGUEUR DU FICHIER 'EOT'. NOMF2: DZS XXXLFC+1 < NOM DU FICHIER COURANT. LF2: EQU NOMF2+XXXLFC < LONGUEUR DE FICHIER COURANT. SZACQN: DZS ZACQQ-ZACQN < ZONE DE SAVE NUMERO DE LIGNE. < < FIN DE LA ZONE EMPILEE PAR 'EOT' : < FAVEDK: EQU $ ANOMF1: WORD NOMFIC ANOMF2: WORD NOMF2 AIOCB: WORD IOCB < PARCQUE JE NE PEUX PAS APEN5O: WORD OPEN5O < FAIRE AUTREMENT... AINDO: WORD INDO < IDEM... DEMMEM: WORD '0004 < DEMANDE MEMOIRE WORD 0 IF XXXSGN-1,XWOR%,,XWOR% WORD '3000 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% WORD '4000 XWOR%: VAL 0 MAXMEM: WORD '4000 < NB MAX OCTETS MEMOIRE IF ORDI-"T",XWOR%,,XWOR% MAXPAR: WORD '6000 < 12K MAXIMUM XWOR%: VAL 0 ADPAGE: WORD TOP,X < TABLE SYMB. RESIDENTE NSYMB: WORD 0 < PT D'OCCUPATION ADTBPG: WORD TBPAGE,X < RELAI VERS DESC. PAGES NBPAGE: WORD -1 < NB PAGES - 1 NBPGRS: WORD -1 < NB PAGES RESIDENTES - 1 XLGPAG: VAL 512 < LONGUER EN MOT DES PAGES. LGPAGE: WORD XLGPAG-1 < LONGUEUR DES PAGES -1. XWOR%1: VAL XLGPAG=0 IF 1>XWOR%1)XLGPAG,,XWOR%, IF ATTENTION, XLGPAG DOIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 IF XXXSGN-1,XWOR%,,XWOR% XWOR%1: VAL 3*4*5 < PPCM LONGUEUR D'UNE ENTREE XWOR%2: VAL 5 < NOMBRE DE FOIS CETTE LG EN HASH XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% XWOR%1: VAL 3*4 < PPCM LONGUEUR D'UNE ENTREE XWOR%2: VAL 25 < NOMBRE DE FOIS CETTE LG EN HASH XWOR%: VAL 0 LGH: WORD XWOR%1*XWOR%2 < LG ZONE HASH DANS UNE PAGE ONZE: WORD 11 < CSTE IF ORDI-"T",XWOR%,,XWOR% DEUX41: WORD 29 < CONSTANTE NOMBRE PREMIER. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% DEUX41: WORD LTBBIT < POUR ACCES AUX TABLES DE BITS. XWOR%: VAL 0 MASKRP: WORD '0F80 < MASQUE POUR ISOLER N0 RES. MASKRM: WORD 'F07F < MASQUE POUR ELIM. N0 RES. RESERV: DZS 1 < SAUVEGARDE X RESERY: DZS 1 < SAUVEGARDE Y SAUVX: DZS 1 < SAUVEGARDE X LG1: DZS 1 < LG SYMBOLE(MOTS) COEF: DZS 1 < COEF POUR HASH LG2: DZS 1 < LG DESC. SYMBOLE(MOTS) ATBBT1: WORD TBBIT1,X < RELAIS TABLE BITS ATBBT2: WORD TBBIT2,X LIRP: WORD SPLIRP < RELAIS SS-PROG TTPL: WORD SPTTPL LEPG: WORD SPLEPG ECRP: WORD SPECRP CALH: WORD SPCALH RCPG: WORD SPRCPG PLMM: WORD SPPLMM CHSB: WORD SPCHSB INVP: WORD SPINVP DRPR: WORD SPDRPR RCAD: WORD SPRCAD INSY: WORD SPINSY ELPG: WORD SPELPG ADDSYM: WORD ZONSYM < RELAIS ADDSY1: WORD ZONSY2 ANIVSY: WORD NIVSYM ADRDEP: DZS 1 ANIV: WORD NIV RELAD: WORD SYMBOL,X IF XXXSGN-0,XWOR%,,XWOR% LG3: DZS 1 < POUR LA GENERATION DES SYMBOLES SYMCOM: DZS 3 < EN COMPACTE ASMCOM: WORD SYMCOM,X AZNSYM: WORD ZONSYM+2,X M40: WORD 40 ADRDP1: DZS 1 < SAUVERGARDE DE PT HASH BASCH: WORD 0 < BASCULE DU HASH CPSY: WORD SPCPSY CPS3: WORD SPCPS3 DCSY: WORD SPDCSY DCS3: WORD SPDCS3 XWOR%: VAL 0 PTFINP: DZS 1 < FIN ZONE DEBOR. PAGE PTSYMU: DZS 1 < PT POUR PSYMUL PGSYMU: DZS 1 LGSYMU: DZS 1 PRSYMU: DZS 1 AZAQC: WORD ZACQ,X < RELAI POUR EOT AZACQN: WORD ZACQN < RELAI NUMERO DE LIGNE. AASS5S: WORD '0002 < DEMANDE AU CCI WORD MASS5S-ZERO*2 WORD 80 AASS5O: WORD '0002 WORD MASS5O-ZERO*2 WORD 80 ANOMF: WORD NOMFIC,X < RELAI < < ACCES ZONE SCRATCH DISQUE : < IF FAVEDK-SAVEDK-128,XWOR%,, IF A T T E N T I O N : LA ZONE DES CONSTANTES IF SGF NE DOIT PAS EXCEDER UN SECTEUR SCRATCH !!! XWOR%: VAL 0 WDK1: WORD '0C02 < SAVE BUFFER SGF. WORD BUFSG2 WORD LLLBUF*2 WORD 0 RDK1: WORD '0C00 < RESTAURE BUFFER SGF. WORD BUFSG2 WORD LLLBUF*2 WORD 0 WDK2: WORD '0C02 < SAVE CERTAINES CONSTANTES. WORD SAVEDK-ZERO*2 WORD FAVEDK-SAVEDK*2 XWOR%1: VAL '09-'05+4*QUANTA < CALCUL MAJORE DE NOMBRE DE SECTEURS < OCCUPES PAR LA SAUVEGARDE DES BUFFERS < DU SGF (LES NVP UTILISES PAR LE SGF < ALLANT DE '05 A '09). WORD XWOR%1 < PREMIER SECTEUR. RDK2: WORD '0C00 < RESTAURE CERTAINES CONSTANTES. WORD SAVEDK-ZERO*2 WORD FAVEDK-SAVEDK*2 WORD XWOR%1 < PREMIER SECTEUR. IF ORDI-"S",XWOR%,,XWOR% ASASGF: WORD SASGF < SAUVEGARDE DES INFOS SGF. ARESGF: WORD RESGF < RESTAURATION DES INFOS SGF. XWOR%: VAL 0 < < ACCES SGN POUR LA TABLE DES SYMBOLES : < RECPAG: WORD '8502 < LECTURE PAGE DETPAG: WORD '8302 < DESTRUCTION PAGE CREPAG: WORD '8402 < CREATION PAGE IDESC: BYTE 0;'04 < N0 UTILISATEUR COMPAG: WORD '8200 < COMMANDE AU SGN WORD 0 < @ A CALCULER WORD 1024 < LG EN BYTES DE LA PAGE WORD -1 < DEPLACEMENT NUL AA: WORD "AA" < PREMIER NOM PTSASY: DZS 1 < POUR EFFACER SYMBOLES SASYMB: WORD SAUVSY,X SAUVSY: DZS 5 ZONSYM: DZS 5 < DESC. SYMBOLE ZONSY1: DZS 5 ZONSY2: DZS 2 < < APPEL DE L'OVERLAY 'EDITS' : < LOADED: WORD '8602 < CHARGEMENT DE 'EDITS'. WORD DITEM-ZERO*2 WORD 0 < GENEREE AU CHARGEMENT. WORD -1 NOMED: ASCI "EDIT" < NOM DE L'OVERLAY. BYTE "S";'04 NOMAS: ASCI "ASSY" BYTE "S";'04 ALOAD: WORD 8 < ADRESSE DU PROGRAMME DE < CHARGEMENT DES OVELAYS < GENERE PAR L'APPEL !CALL. DELASS: WORD '8302 < DELETE 'ASSY'<IDESC>. WORD DITEM-ZERO*2 WORD DBCHIT-DITEM*2 WORD -1 STASS: WORD '8402 < GENERATION DE 'ASSY'<IDESC>. WORD DITEM-ZERO*2 WORD 0 < GENERE AU CHARGEMENT. WORD -1 SAVEK: WORD 0 < SAUVEGARDE DE (K) EN COURS < D'EXECUTION DE L'OVERLAY. ANOMA: WORD DITEM+2 < POUR METTRE <IDESC> DANS 'ASSYS'. ARUN1: WORD ASM < ENTRY POINT DE 'ASSYS', ARUN2: WORD EX310 < ENTRY POINT AU RETOUR DE 'EDITS'. ARUN: WORD '10 < ADRESSE DU MOT OU METTRE < L'ADRESSE DE L'ENTRY POINT. AARSR: WORD ARSR < POUR ALLER CHERCHER UN 'RSR', AGO: WORD '000A < ET OU LE METTRE... DCLOSE: WORD '0002 < DEMANDE DE CLOSE DE TOUTES WORD MCLOSE-ZERO*2 < LES ASSIGNATIONS. WORD 80 < < COMPTAGE DES ERREURS : < KERROR: WORD 0 < SERA EDITE SUR LA CARTE 'END'. IF ORDI-"S",XWOR%,,XWOR% < < COMPTAGE DES PAGES IMPRIMEES : < NUMPAG: WORD 0 XWOR%: VAL 0 < < DEFINITION DES MASQUES ET VALEURS DE 'CALEX'. < FLOMAS: EQU ZFLOAT+0 FLOVAL: EQU ZFLOAT+1 IF ORDI-"S",XWOR%,,XWOR% FLORES: EQU ZFLOAT+2 < POUR LE RESTE D'UNE DIVISION. XWOR%: VAL 0 < < NOMBRE DE SECTIONS AUTORISE : < IF XXXSGN-1,XWOR%,,XWOR% NBRSEC: VAL 50 < NBRE MAX DE SECTIONS. XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% NBRSEC: VAL 32 < NOMBRE DE SECTIONS AUTORISEES... IF NBRSEC-'20,XWOR%5,XWOR%5, IF ATTENTION : A CAUSE DU BIT 2 (SYMBOLE NON UTILISE) IF LE NUMERO DE SECTION DOIT TENIR SUR 5 BITS !!! XWOR%5: VAL 0 XWOR%: VAL 0 PAGE < < < T A B L E D E R E C O N N A I S S A N C E < D E S D I R E C T I V E S : < < < FORMAT : < TABCO CONTIENT SUR 1 OU 2 MOTS LES < DIRECTIVES CODEE DE LA FACON SUIVANTE : < BIT0(TABCO)=0 SI LONGUEUR=1 MOT, < 1 SI LONGUEUR=2 MOTS. < BIT1-5(TABCO)=BIT3-7(CARACTERE1) < BIT6-10(TABCO)=BIT3-7(CARACTERE2) < ( BIT11-15(TABCO)=BIT3-7(CARACTERE3) < ( BIT16-20(TABCO)=BIT3-7(CARACTERE4) < ) < ) < < TABCO: EQU $ WORD 'DDF2 < WORD. BYTE '20;156 DZS XSTATS WORD '582C;152 < VAL. DZS XSTATS WORD '1635;151 < EQU. DZS XSTATS WORD '24C0;150 < IF. DZS XSTATS WORD '11E0;155 < DO. DZS XSTATS WORD '15F4;146 < EOT. DZS XSTATS WORD '3274;184 < LST. DZS XSTATS WORD '3993;185 < NLS. DZS XSTATS WORD '1353;153 < DZS. DZS XSTATS WORD '8B34 < BYTE. BYTE '28;154 DZS XSTATS WORD '3020;16 < LA. DZS XSTATS WORD '3029;80 < LAI. DZS XSTATS WORD '4E81;13 < STA. DZS XSTATS WORD '3309;81 < LXI. DZS XSTATS WORD '0A72;6 < BSR. DZS XSTATS WORD '4272;90 < PSR. DZS XSTATS WORD '4192;91 < PLR. DZS XSTATS WORD '0E09;85 < CPI. DZS XSTATS WORD '2898;89 < JDX. DZS XSTATS WORD '2938;88 < JIX. DZS XSTATS WORD '3329;86 < LYI. DZS XSTATS WORD '3049;87 < LBI. DZS XSTATS WORD '8492 < ADRI. BYTE '48;79 DZS XSTATS WORD '3E49;82 < ORI. DZS XSTATS WORD '85C4 < ANDI. BYTE '48;83 DZS XSTATS WORD '95F2 < EORI. BYTE '48;84 DZS XSTATS WORD 'C027 < PAGE. BYTE '28;159 DZS XSTATS WORD '14A0;187 < EE. DZS XSTATS IF ORDI-"S",XWOR%,,XWOR% WORD '8C2C < CALL (SYNONYME DE 'EOT'). BYTE '60;146 DZS XSTATS XWOR%: VAL 0 WORD '29B0;32 < JMP. DZS XSTATS WORD '2860;76 < JC. DZS XSTATS WORD '29C3;72 < JNC. DZS XSTATS WORD '28E5;128 < JGE. DZS XSTATS WORD '29C5;129 < JNE. DZS XSTATS WORD '28E0;130 < JG. DZS XSTATS WORD '2980;132 < JL. DZS XSTATS WORD '28A0;133 < JE. DZS XSTATS WORD '2985;134 < JLE. DZS XSTATS WORD 'A827 < JAGE. BYTE '28;33 DZS XSTATS WORD 'A82E < JANE. BYTE '28;34 DZS XSTATS WORD '2827;35 < JAG. DZS XSTATS WORD '282C;37 < JAL. DZS XSTATS WORD '2825;38 < JAE. DZS XSTATS WORD 'A82C < JALE. BYTE '28;39 DZS XSTATS WORD '3024;29 < LAD. DZS XSTATS WORD '3059;0 < LBY. DZS XSTATS WORD 'CE82 < STBY. BYTE 'C8;1 DZS XSTATS WORD '4E9A;30 < STZ. DZS XSTATS WORD '0E1A;4 < CPZ. DZS XSTATS WORD '8663 < ASCI. BYTE '48;158 DZS XSTATS WORD '3E40;18 < OR. DZS XSTATS WORD '05C4;19 < AND. DZS XSTATS WORD '15F2;20 < EOR. DZS XSTATS WORD '0E00;21 < CP. DZS XSTATS WORD '6240;54 < XR. DZS XSTATS WORD '3240;55 < LR. DZS XSTATS WORD '0492;56 < ADR. DZS XSTATS WORD '4C52;57 < SBR. DZS XSTATS WORD '3E52;58 < ORR. DZS XSTATS WORD '95F2 < EORR. BYTE '90;59 DZS XSTATS WORD '85C4 < ANDR. BYTE '90;60 DZS XSTATS WORD '38F2;64 < NGR. DZS XSTATS WORD '8E1A < CPZR. BYTE '90;65 DZS XSTATS WORD 'CEE2 < SWBR. BYTE '90;68 DZS XSTATS WORD '4854;40 < RBT. DZS XSTATS WORD '4C54;41 < SBT. DZS XSTATS WORD '2454;42 < IBT. DZS XSTATS WORD '5054;43 < TBT. DZS XSTATS IF ORDI-"S",XWOR%,,XWOR% WORD '35F4;152 < MOT (EQUIVAUT A VAL...). DZS XSTATS XWOR%: VAL 0 WORD 'CD92 < SLRS. BYTE '98;44 DZS XSTATS WORD 'CD8C < SLLS. BYTE '98;46 DZS XSTATS WORD 'CC72 < SCRS. BYTE '98;48 DZS XSTATS WORD 'CC6C < SCLS. BYTE '98;50 DZS XSTATS WORD 'CC6C < SCLD. BYTE '20;51 DZS XSTATS WORD 'CC72 < SCRD. BYTE '20;49 DZS XSTATS WORD 'CD8C < SLLD. BYTE '20;47 DZS XSTATS WORD 'CD92 < SLRD. BYTE '20;45 DZS XSTATS WORD '4E82;12 < STB. DZS XSTATS WORD '4E99;10 < STY. DZS XSTATS WORD '4E98;11 < STX. DZS XSTATS WORD '0A40;5 < BR. DZS XSTATS WORD '2460;24 < IC. DZS XSTATS WORD '1060;25 < DC. DZS XSTATS WORD '3040;23 < LB. DZS XSTATS WORD '3300;17 < LX. DZS XSTATS WORD '3320;22 < LY. DZS XSTATS WORD '4A72;98 < RSR. DZS XSTATS WORD '0480;9 < AD. DZS XSTATS WORD '4C40;8 < SB. DZS XSTATS WORD '12C0;15 < DV. DZS XSTATS WORD '3600;14 < MP. DZS XSTATS WORD '4EC3;92 < SVC. DZS XSTATS WORD '324D;93 < LRM. DZS XSTATS WORD 'CA33 < RQST. BYTE 'A0;26 DZS XSTATS WORD 'C993 < RLSE. BYTE '28;27 DZS XSTATS WORD 'DC29 < WAIT. BYTE 'A0;31 DZS XSTATS WORD '0474;28 < ACT. DZS XSTATS WORD '4D2F;7 < SIO. DZS XSTATS WORD '8E02 < CPBY. BYTE 'C8;2 DZS XSTATS WORD '61A0;3 < XM. DZS XSTATS WORD '0E12;67 < CPR. DZS XSTATS WORD '8492 < ADRP. BYTE '80;70 DZS XSTATS WORD '8483 < ADCR. BYTE '90;62 DZS XSTATS WORD 'CC43 < SBCR. BYTE '90;63 DZS XSTATS WORD '3250;71 < LRP. DZS XSTATS WORD '5665;142 < USE. DZS XSTATS WORD '046B;109 < ACK. DZS XSTATS WORD '064D;95 < ARM. DZS XSTATS WORD '0471;96 < ACQ. DZS XSTATS WORD 'A02C < HALT. BYTE 'A0;97 DZS XSTATS WORD 'E12D < XIMR. BYTE '90;69 DZS XSTATS WORD '8D93 < CLSR. BYTE '90;61 DZS XSTATS WORD '0DB2;66 < CMR. DZS XSTATS WORD 'B5F6 < MOVE. BYTE '28;105 DZS XSTATS WORD '4C53;106 < SBS. DZS XSTATS WORD '8DED < COMMON : REDUIT A COMM.. BYTE '68;135 DZS XSTATS WORD 'B1E3 < LOCAL : REDUIT A LOCA. BYTE '08;136 DZS XSTATS WORD 'C24F < PROG. BYTE '38;137 DZS XSTATS WORD 'D022 < TABLE : REDUIT A TABL. BYTE '60;138 DZS XSTATS WORD '9265 < DSEC. BYTE '18;139 DZS XSTATS WORD 'C2B3 < PUSH. BYTE '40;107 DZS XSTATS WORD 'C2AC < PULL. BYTE '60;108 DZS XSTATS WORD '8474 < ACTD. BYTE '20;101 DZS XSTATS WORD '1984;160 < FLD. DZS XSTATS WORD '1824;161 < FAD. DZS XSTATS WORD '19B0;162 < FMP. DZS XSTATS WORD '1896;163 < FDV. DZS XSTATS WORD '1A74;164 < FST. DZS XSTATS WORD '1A62;165 < FSB. DZS XSTATS WORD '986D < FCMZ. BYTE 'D0;166 DZS XSTATS WORD '9861 < FCAM. BYTE '68;167 DZS XSTATS WORD '99C5 < FNEG. BYTE '38;168 DZS XSTATS WORD '9822 < FABS. BYTE '98;169 DZS XSTATS WORD '1938;170 < FIX. DZS XSTATS WORD '1994;171 < FLT. DZS XSTATS WORD 'B9F2 < NORM. BYTE '68;172 DZS XSTATS WORD '9861 < FCAZ. BYTE 'D0;173 DZS XSTATS WORD '998F < FLOAT : REDUIT A FLOA. BYTE '08;174 DZS XSTATS WORD '4D91;175 < SLQ. DZS XSTATS WORD '4CD1;176 < SFQ. DZS XSTATS WORD 'CEB0 < SUPQ. BYTE '88;177 DZS XSTATS WORD 'A5D3 < INSQ. BYTE '88;178 DZS XSTATS WORD 'C854 < RBTM. BYTE '68;179 DZS XSTATS WORD 'CC54 < SBTM. BYTE '68;180 DZS XSTATS WORD '9242 < DRBM. BYTE '68;181 DZS XSTATS WORD 'C864 < RCDA. BYTE '08;182 DZS XSTATS WORD 'DC64 < WCDA. BYTE '08;183 DZS XSTATS WORD 'C893 < RDSI. BYTE '48;121 DZS XSTATS WORD '3032;122 < LAR. DZS XSTATS WORD 'C88F < RDOE. BYTE '28;123 DZS XSTATS WORD 'B6D4 < MVTM. BYTE '68;124 DZS XSTATS WORD 'CE81 < STAR. BYTE '90;125 DZS XSTATS WORD '5DE5;126 < WOE. DZS XSTATS WORD 'B6D4 < MVTS. BYTE '98;127 DZS XSTATS WORD '48A6;140 < REF (EX. EXT='1714). DZS XSTATS WORD '10A6;141 < DEF (EX. ENT='15D4). DZS XSTATS WORD '2609;120 < IPI. DZS XSTATS WORD 'C888 < RDHV. BYTE 'B0;119 DZS XSTATS WORD '4E74;117 < SST. DZS XSTATS WORD '4A74;118 < RST. DZS XSTATS WORD '1134;115 < DIT. DZS XSTATS WORD '1534;116 < EIT. DZS XSTATS WORD '4A76;110 < RSV. DZS XSTATS WORD 'C9ED < ROMB. BYTE '10;111 DZS XSTATS WORD '1050;112 < DBP. DZS XSTATS WORD '4C50;113 < SBP. DZS XSTATS WORD '4850;114 < RBP. DZS XSTATS WORD '1054;99 < DBT. DZS XSTATS WORD 'CE85 < STEP. BYTE '80;100 DZS XSTATS WORD 'C6A9 < QUIT. BYTE 'A0;102 DZS XSTATS WORD '4C79;104 < SCY. DZS XSTATS WORD '4299;103 < PTY. DZS XSTATS WORD '29D6;73 < JNV. DZS XSTATS WORD 'A9C3 < JNCV. BYTE 'B0;74 DZS XSTATS WORD '2AC0;77 < JV. DZS XSTATS WORD '2876;78 < JCV. DZS XSTATS WORD 'CC32 < SARS. BYTE '98;52 DZS XSTATS WORD 'CC32 < SARD. BYTE '20;53 DZS XSTATS WORD '39F0;36 < NOP. DZS XSTATS WORD '1274;143 < DST. DZS XSTATS WORD '1674;144 < EST. DZS XSTATS WORD '3893;145 < NDS. DZS XSTATS WORD '2490;157 < IDP. DZS XSTATS WORD '1480;186 < ED. DZS XSTATS IF ORDI-"S",XWOR%,,XWOR% WORD '1714;140 < EXT. DZS XSTATS WORD '15D4;141 < ENT. DZS XSTATS XWOR%: VAL 0 WORD '15C4;147 < END. DZS XSTATS WORD '0C69;148 < CCI. DZS XSTATS IF ORDI-"S",XWOR%,,XWOR% WORD '9034 < DATE. BYTE '28;188 DZS XSTATS WORD '524E;189 < TRN. DZS XSTATS WORD 'BA92 < NTRN. BYTE '70;190 DZS XSTATS IF XXXSGN-0,XWOR%7,,XWOR%7 WORD '08A4;191 < BED. WORD '0A12;192 < BPR. XWOR%7: VAL 0 XWOR%: VAL 0 FINTAB: EQU $ BASC: EQU $ WORD '0101 < ENTREE CARTE SUR NVP=1 WORD '0101 < ENTREE CARTE SUR NVP=1 TACAT: BYTE 32;4;1;3;14;8;2;1;1;3;3;7 BYTE 1;8;2;2;1;1;2;5;2;25;5;1 BYTE 1;1;1;1;2;1;1;1;1;1 BYTE 4;1;2 TALON: BYTE 0;'21;3;'21;'22;5;6;5;6;5 BYTE 6;'21;'C4;'87;'21;'31;'A7;'31;'62;3;'22;3 BYTE '2E;'90;'B0;'CB;'12;'E;3;'EC;'67;'E7 BYTE 7;'61;'47;'48;3 TALIG: WORD 'A202;'1200;'8A01;'0200 WORD 'C200;'4201;'4200;'8200 WORD '8202;'1201;'0A00;'2201 WORD '1202;'0200;'0602;'0200 WORD '1204;'4204;'0600 TABINI: WORD '8000;0 WORD 6;0;"OF";'C600 TABINF: WORD -256;-128;0 TABSUP: WORD 7;31;127;255 TACLE: WORD '3030;'0AC9;'0002;'0853 WORD '001C;'005D;'8036;'0047 TABRG: WORD '2041;'4258;'5943;'4C57 WORD '4B00 TATYP: WORD EXPA WORD REGIS WORD BASE WORD EXPT WORD INDEX WORD NOMSEC TABEXT: WORD REFMEM WORD JUMP WORD WORD WORD EQU WORD EXT WORD ENT WORD USE WORD END TABLG: BYTE 0;64;61;59;58;48;47;46;45;44 BYTE 40;35;34;33;32;27;1 TABTY: BYTE 0;2;0;6;4;2;7;2;3;2 BYTE 7;1;7;3;7;5;5 TARUP: WORD FINPH WORD CHAIN WORD CSIGNE WORD NEWCAR WORD DECIM WORD SUILT WORD EMACQ WORD EMACQ WORD FSUILT WORD EMACQ WORD FSUILT WORD FSUIL1 WORD SUILT1 WORD SUILT WORD ETIQ WORD EMACQ WORD FNBRE WORD EMACQ WORD FNBRE WORD FNBR1 WORD CNBRE WORD CNBR1 WORD EMACQ WORD EMACQ WORD EXCLAM WORD FCHAIN TABDIR: EQU $-1 WORD COMMON WORD LOCAL WORD PROG WORD TABLE WORD DSEC WORD EXT1 WORD ENT1 WORD USE1 WORD DST WORD EST WORD NDS WORD EOT WORD END1 WORD PSTS WORD PSTH WORD 0 < LIMITE DIRECTIVES ETIQUETABLES. WORD EQU1 WORD VAL WORD DZS WORD BYTE WORD DO WORD WORD1 WORD IDP WORD ASCI ZONBAS: EQU $-1 DZS 9 ZONBA1: EQU $-1 DZS 6 PAGE < < < S Y M B O L E S A B S O L U S : < < LGLAN: VAL FINLAN-DEBLAN < LONGUEUR ZONE A INITIALISER < PAR CARTE. LCALEX: VAL FINCAL-DEBCAL LMACQ: VAL FINMAC-DEBMAC LTABCO: VAL FINTAB-TABCO < LONGUEUR TABLE DES CODES < OPERATION. NTABCO: EQU ZERO-LTABCO LTABTY: VAL 16 LSAV: VAL FINSAV-DEBSAV < LONGUEUR ZONE SAUVEGARDEE. PAGE PROG IF ORDI-"T",XWOR%,,XWOR% SVC 0 < CODE DU 'SVC'. LISTIN: VAL '0000000@@@@ $EQU $-1 < ANNULATION DU 'SVC'. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR ASISVC < CODE DE LA SIMULATION 'SVC'. LISTIN: VAL '0000000@@@@ $EQU $-1 XWOR%: VAL 0 < < < E X T E N S I O N S O P T I O N C D A : < < EXTEND: EQU $ PLR A PSR A CPI 184 < EST-CE 'LST' OU 'NLS' ??? JGE EX2 < OUI, ELLES PEUVENT SE SITUER < PARTOUT DANS UN PROGRAMME... CPZ SITUAT < OU EST-ON ??? JL EX2 < DANS UNE SECTION 'PROG', OK... LAI 13 < PAS 'PROG', ERREUR... EX3: EQU $ ADRI -1,K < RATTRAPAGE DE LA PILE. EX4: EQU $ BR MERR < ABORT ERREUR. < < CAS OU L'ON EST DANS UNE SECTION 'PROG' : < EX2: EQU $ CPZ NETIQ < Y-A-T'IL UNE ETIQUETTE ??? LAI 23 < ERREUR A PRIORI... JNE EX3 < ET OUI, ON L'INTERDIT, CAR < SA VALEUR NE PEUT ETRE CORRECTE- < MENT EVALUEE QU'AU PRIX DE < COMPLICATIONS TERRIBLES !!! LX NACQ LBY &AZACQ < ACCES AU CARACTERE COURANT. PLR Y < Y=CODE DE L'INSTRUCTION DEMANDEE. CPI '0D JE EX5 < OK, FIN DE PHRASE. CPI "<" JE EX5 < OK, FIN DE PHRASE. < < CAS OU LA ZONE ARGUMENT EST LA : < LR Y,A CPI 179 < VALIDATION FONCTION. JE EX6 < OK, RBTM. CPI 180 < VALIDATION FONCTION. JE EX6 < OK, SBTM. EX8: EQU $ LAI 1 JMP EX4 < VERS L'ABORT... < < TRAITEMENT DE RBTM/SBTM : < EX6: EQU $ PSR Y < SAVE LE CODE-OP. BSR CALEX < EVALUATION DES ARGUMENTS. PLR Y < RESTAURE LE CODE-OP. CPZ SIGMA JNE EX8 < ERREUR, ARGUMENT TRANSLATABLE. EX7: EQU $ LA SOM JAL EX8 < ERREUR, ARGUMENT<0. LX NACQ LBY &AZACQ < ACCES AU CARACTERE COURANT. CPI '0D JE EX9 < FIN DE PHRASE. CPI "<" JE EX9 < FIN DE PHRASE. CPI "X" JNE EX8 < ERREUR, ON N'A PAS RECONNU 'X'. ADRI -1,X LBY &AZACQ < A=CARACTERE PRECEDANT LE "X". CPI "," JNE EX8 < ERREUR, CE N'EST PAS ",X". < < CAS DE L'INDEXATION SUR RBTM/SBTM : < LA SOM SBT 0 < BIT D'INDEX. STA SOM JMP EX9 < VERS L'EDITION... < < CAS DES AUTRES INSTRUCTIONS : < EX5: EQU $ STZ SOM < MOT2=0 A PRIORI. LR Y,A CPI 184 < EST-CE 'LST' OU 'NLS' ??? JE EX20 < 'LST'. CPI 185 JE EX50 < 'NLS'. JG EX300 < 'ED'. CPI 183 JNE EX9 IC SOM < MOT2=1 POUR WCDA. < < EDITION BINAIRE ET LISTING : < EX9: EQU $ LR Y,A ADRI -127,A ADRI -56,A JAE EX10 < CAS DE WCDA. ADRI 1,A EX10: EQU $ NGR A,A SWBR A,A ORI '3F < INSERTION DU CODE-OPERATION. SWBR A,B < B=MOT1 DU BINAIRE. IC PAS < PROGRESSION COMPTEUR ORDINAL. LAI '24 < CHARGER SANS TRANSLATER. BSR SPLIST < BINAIRE ET LISTING. LB SOM < B=MOT2 DU BINAIRE. IC PAS < PROGRESSION COMPTEUR ORDINAL. IC DEBRES+2 < IL LE FAUT BIEN, PUISQUE SANS < LUI CELA NE MARCHE PAS !!! LAI '24 < CHARGER SANS TRANSLATER. BSR SPLIST < BINAIRE ET LISTING. BR ADEP < VERS L'INSTRUCTION SUIVANTE. < < < O P T I O N ' L S T ' < L I S T I N G : < < EX20: EQU $ DC KLIST JG EX51 < KLIST>0 : RIEN A FAIRE... JE EX52 < KLIST PASSE PAR 0 : IL FAUT RETABLIR < LA SORTIE DU LISTING... STZ KLIST < KLIST=0 SI DEVIENT NEGATIF... JMP EX51 < PUIS RIEN A FAIRE... < < RETABLISSEMENT DU LISTING : < EX52: EQU $ LA IOCB4 EORI '000D < MISE DE '02 A LA PLACE DE '0F. STA IOCB4 LA IOCB3 EORI '000D < MISE DE '02 A LA PLACE DE '0F. STA IOCB3 EX51: EQU $ BR ADEP < VERS L'INSTRUCTION SUIVANTE... < < < O P T I O N ' N L S ' < P A S D E L I S T I N G : < < EX50: EQU $ IC KLIST < KLIST>0. LA IOCB4 ORI '000F < MISE DE '0F A LA PLACE DE '02. STA IOCB4 LA IOCB3 ORI '000F < MISE DE '0F A LA PLACE DE '02. STA IOCB3 JMP EX51 < VERS LA SORTIE... < < < A P P E L D E ' E D I T S ' : < < EX300: EQU $ BSIML: VAL 1 < ADRESSE DU MOT TRANSMETTANT L'ADRESSE < DU BUFFER DE LECTURE. BSIME: VAL 2 < ADRESSE DU MOT TRANSMETTANT L'ADRESSE < DU BUFFER D'ECRITURE. ALSIM: VAL 0 < ADRESSE DU MOT TRANSMETTANT LA < LONGUEUR DU BUFFER SI 'EE', ET 0 SI 'ED'. EORR W,W < W BASE LE 'ZERO' DE 'ASSYS'. CPI 187 < 'ED' OU 'EE' ??? JL EX300X < 'ED'... IF ORDI-"S",XWOR%,,XWOR% CPI 188 JGE EX301X < 'DATE' OU BIEN 'TRN'/'NTRN'... XWOR%: VAL 0 < < PREPARATION DE 'EE' : < LBY IOCB ANDI '0F NVPF:: VAL '08 < PREMIER 'NVP' DU 'SGF' UTILISE PAR < L'EDITEUR DE TEXTES 'EDITS'. CPI NVPF < NVPO OU 3 PREMIERS 'EOT' ??? JGE EX4X < NON AU DELA, ERREUR !!! LAI 2*YNZACQ STA ALSIM,W < LONGUEUR OCTET DES BUFFERS (#0). LB ABSIML-ZERO,W STB BSIML,W < ADRESSE DU BUFFER DE LECTURE. LA ABSIME-ZERO,W STA BSIME,W < ADRESSE DU BUFFER D'ECRITURE. LA AZACQ RBT 0 ADRI LXZACQ/2,A < A=ADRESSE CARTE DYNAMIQUE. LXI YNZACQ MOVE < MOVE CARTE DYNAMIQUE VERS LE < BUFFER DE LECTURE. JMP EX320 < < PREPARATION DE 'ED' : < EX300X: EQU $ STZ ALSIM,W < POUR DISCRMINER 'ED' DE 'EE'. ADRI 1,W < ET (W)#0 POUR 'ED'. LBY IOCB CPI 1 < QUELLE EST L'UNITE D'ENTREE ??? JE EX320 < 'IN' C'EST BON... EX4X: EQU $ LAI 25 < NON, IL Y A DONC 'EOT' EN COURS, JMP EX4 < ERREUR.... < < TRONC COMMUN 'ED'/'EE' : < EX320: EQU $ PSR A,W LAD IOCB4 WORD LISTIN < EDITION DE 'ED'. BSR PAGIN < ET PAGINATION... PSR C LA COM1 LR A,C < CHANGEMENT DE BASE C. USE C,COMM1 IF XXXSGN-0,XWOR%7,,XWOR%7 CPZ LOADED < 'ED'/'EE' SONT-ILS AUTORISES ??? JE EX301D < NON, INHIBES... XWOR%7: VAL 0 LR K,A STA SAVEK < SAVE LE REGISTRE K D'APPEL. LAI 2 LR A,K < UTILISATION D'UNE PILE BASSE < RESISTANT AUX APPELS D'OVERLAY. LA ARUN2 STA &ARUN < CHANGEMENT DE L'ENTRY POINT. LAD NOMAS LBI DITEM-ZERO LXI 3 MOVE < MISE EN PLACE DE 'ASSYS'. LBY IDESC STBY &ANOMA < GENERATION DU NOM 'ASSY'<IDESC>. LAD DELASS SVC 0 < DELETE A PRIORI 'ASSY'<IDESC>. LAD STASS SVC 0 < GENERATION DE 'ASSY'<IDESC>. LAD NOMED LBI DITEM-ZERO LXI 6/2 MOVE < MISE EN PLACE DU NOM 'EDITS'. LA &AARSR < ON VA CHERCHER UN 'RSR', AFIN DE STA &AGO < SUPPRIMER LE RETOUR AU CCI < IMPLEMENTE PAR !CALL... LAI PSYMB-ZERO PSR A < EMPILEMENT DE L'ADRESSE DE < DEBUT DE 'EDITS' AFIN DE FAIRE < LE 'RSR' DE BRANCHEMENT. LAD LOADED < A=@DEMANDE DE CHARGEMENT 'EDITS'. BR ALOAD < CHARGEMENT DE 'EDITS'. < < < R E T O U R D E ' E D I T S ' : < < WORD COMM1 EX310: EQU $ LRP C LA -1,C LR A,C < REINITIALISATION DE C. USE C,COMM1 LA ARUN1 < RESTAURE L'ENTRY-POINT STA &ARUN < DE 'ASSYS'... LA SAVEK LR A,K < RESTAURATION REGISTRE K. LAD DELASS SVC 0 < DELETE DE 'ASSYS'<IDESC>. IF XXXSGN-0,XWOR%7,,XWOR%7 EX301D: EQU $ < CAS 'ED'/'EE' INHIBES... XWOR%7: VAL 0 PLR C < RESTAURE BASE C DE 'ASSYS'. USE C PLR B,W CPZR W < 'ED' OU 'EE' ??? JNE EX310X < 'ED'. LA ABSIME-ZERO,W < ADRESSE DU BUFFER D'ECRITURE. LXI YNZACQ MOVE < MOVE BUFFER D'ECRITURE VERS LES < CARTES DYNAMIQUES. EX310X: EQU $ BR ADEP < VERS L'INSTRUCTION SUIVANTE. IF ORDI-"S",XWOR%,,XWOR% < < < D A T E : < < MDATE: ASCI "!DAT" BYTE "E";'04 DMDATE: WORD '0002 < DEMANDE AU SYSTEME. WORD MDATE-ZERO*2 WORD 80 EX301X: EQU $ CPI 189 JE EX301Y < 'TRN'. CPI 190 JGE EX301Z < 'NTRN'. LRM A WORD DMDATE SVC 0 < ENVOI DE !DATE... BR ADEP < VERS L'INSTRUCTION SUIVANTE... < < < ' T R N ' : T E S T R E S T E # 0 : < ' N T R N ' : P A S D E T E S T ... < < EX301Y: EQU $ LRM A,B < 'TRN' : CPZR B < TEST DU RESTE, WORD FEALEX < 'GOTO' 'EEALEX' SI RESTE#0... JMP EX301T EX301Z: EQU $ IF XXXSGN-0,XWOR%7,,XWOR%7 CPI 191 < 'BED' ??? JGE EX301A < 'BED'... XWOR%7: VAL 0 LRM A,B < 'NTRN' : STB FLORES < ON MEMORISE LE RESTE... NOP EX301T: EQU $ LR K,X < SAUVEGARDE DE 'K' DANS 'X', LRM K WORD INDYN-1 < ET ON INITIALISE 'K' SUR LA ZONE < D'INSTRUCTIONS DYNAMIQUES... PSR A,B < MISE EN PLACE DES 2 INSTRUCTIONS... LR X,K < RESTAURATION DE 'K', IF XXXSGN-0,XWOR%7,,XWOR%7 EX301C: EQU $ XWOR%7: VAL 0 LAD IOCB4 WORD LISTIN BSR PAGIN < EDITION ET PAGINATION DE TRN-NTRN... BR ADEP < ET VERS L'INSTRUCTION SUIVANTE... IF XXXSGN-0,XWOR%7,,XWOR%7 < < < ' B E D ' : A U T O R I S A T I O N / I N H I B I T I O N < E N B A S C U L E D E ' E D ' / ' E E ' : < < EX301A: EQU $ CPI 192 < 'BPR' ??? JGE EZ301D < 'BPR'... PSR C LA COM1 LR A,C < CHANGEMENT DE BASE 'C'... USE C,COMM1 LRM A WORD '8602 CPZ LOADED < 'ED'/'EE' AUTORISES ??? JE EX301B < NON, (A)='8602, ON LES RE-AUTORISE... LAI 0 < OUI, (A)=0, ON LES INHIBE... EX301B: EQU $ STA LOADED < ET MEMORISATION DE 'BED'... PLR C < ET RESTAURE 'C'... USE C JMP EX301C < VERS LA SORTIE... < < < ' B P R ' : A U T O R I S A T I O N / I N H I B I T I O N < D E S A P P E L S D E P R O C E D U R E S E N < Z O N E C O M M A N D E : < < EZ301D: EQU $ LRM A,B WORD EOTIMP < AUTORISATION, WORD EOTINS < INHIBITION. CP RETER < EST-CE AUTORISE ??? JE EZ301E < OUI, ON L'INHIBE... STA RETER < NON, ON L'AUTORISE... JMP EX301C < ET ON SORT... EZ301E: EQU $ STB RETER < INHIBITION... JMP EX301C < ET ON SORT... XWOR%7: VAL 0 XWOR%: VAL 0 PAGE < < < I N S T R U C T I O N S D Y N A M I Q U E S : < < < FONCTION : < CE MODULE TESTE LA COLONNE 9 DE < CHAQUE CARTE; S'IL Y RENCONTRE '@', < IL LE REMPLACE PAR UNE CHAINE DE CARAC- < TERES CONTENANT L'INSTRUCTION DONT < LE NUMERO (DONNE PAR LA TABLE 'TABCO') < EST CONTENU EN ASCI DANS LES OCTETS < 0 ET 1 DE ZACQ1. < < EX138: EQU $ LXI 0+9 LBY &AZACQ < ACCES COLONNE 9 DE LA CARTE. CPI "@" < INSTRUCTION DYNAMIQUE ??? JNE EX130 < NON, ON SORT... < < GENERATION D'UN NUMERO DE DIRECTIVE : < LBI 0 ADRI -18-9+1,X < DEPART SUR L'OCTET 1 DE ZACQ1. LYI 2 < DECODAGE DE 2 OCTETS. EX131: EQU $ LBY &AZACQ < OCTET 1, PUIS OCTET 0 DE ZACQ1. ADRI -'30,A < DECODAGE BINAIRE. CPI 9 < CHIFFRE OU LETTRE ??? JLE EX132 < CHIFFRE. ADRI -'41+'39+1,A < LETTRE. EX132: EQU $ SLRD 4 < CONCATENATION A (B). ADRI -1,X < PASSAGE A L'OCTET 0. ADRI -1,Y < DECOMPTAGE. CPZR Y JG EX131 < PASSAGE A L'OCTET 0. SWBR B,A < A=NUMERO DE DIRECTIVE DEMANDEE. LX MTABCO LR A,B < SAUVEGARDE DU NUMERO DANS B... < < IDENTIFICATION DE LA DIRECTIVE : < EX133: EQU $ LR B,A < RESTAURE LE NUMERO DE DIRECTIVE... LR X,Y < Y=SAVE X. ADRI 1,X < X INDEXE LE NUMERO DE LA < DIRECTIVE COURANTE. EOR &ATABCO < DIRECTIVE DEMANDEE ??? ANDI '00FF < ON NE CONSERVE QUE LE NUMERO... JAE EX135 < OUI... IF XSTATS,XWOR%,XWOR%, ADRI XSTATS,X < ON SAUTE LE COMPTEUR... XWOR%: VAL 0 JIX EX133 < NON, A LA SUIVANTE... JMP EX130 < PAS TROUVEE : ON LAISSE '@'... < < GENERATION DYNAMIQUE DE L'NSTRUCTION : < EX135: EQU $ LR Y,X < X=INDEX DIRECTIVE. LA &ATABCO < 1ER MOT, LBI 0 < 2EME MOT NUL A PRIORI... JAGE EX136 < 1 SEUL MOT. ADRI 1,X < 2 MOTS EN FAIT... LB &ATABCO < 2EME MOT... SLRD 16-5 < SUPPRESSION DES BITS 5-15 DE 'B'. SLLD 16-5 EX136: EQU $ LXI 0+9 < INDEX DE GENERATION. EX137: EQU $ RBT 0 < ... JAE EX407 < C'EST FINI... PSR A SLRS 5+5 < ON ISOLE LE CARACTERE COURANT. SBT 1+8 < CONVERSION ASCI. STBY &AZACQ < GENERATION... ADRI 1,X < INDEX DU SUIVANT. PLR A SLLD 5 < PASSAGE AU CARACTERE SUIVANT. JMP EX137 < AU SUIVANT SI EXISTE... EX407: EQU $ LYI "@" < Y="@" CAR UNE INSTRUCTION DYNAMI- < QUE A ETE GENEREE... EX130: EQU $ < < < C A R T E S D Y N A M I Q U E S : < < < FONCTION : < NUMEROTANT LES COLONNES 0,1,... < SI ON PLACE UN CARACTERE 'A-ROND' < EN COLONNE 8 ET PAS EN COLONNE 7, < ALORS LA CARTE COURANTE EST RECOPIEE : < ZACQ --> ZZACQ, DE PLUS < SI LA COLONNE 7 CONTIENT UN "#", < ALORS ON FAIT DE PLUS UN APPEL < IMPLICITE DE FICHIER PAR 'EOT', < LE NOM DU FICHIER ENTRE "#" < DEVANT SE TROUVER AU DELA DE LA < COLONNE 38 (NUMEROTEES 0,1,2...), < SOIT DERRIERE LE ">" DES COMMENTAIRES... < PAR CONTRE SI LES 2 COLONNES 7 ET 8 < CONTIENNENT LE 'A-ROND', ALORS < C'EST LE MOUVEMENT INVERSE QUI A < LIEU. < ON UTILISERA CECI EN CONJONCTION < AVEC L'OPERATEUR '='. < < LXI 8 LBY &AZACQ < TEST DE LA COLONNE 8. CPI "@" JNE EX139 < PAS DE CARTES DYNAMIQUES... LAI " " STBY &AZACQ < EFFACEMENT DU "@" POUR SAUVEGARDE. LXI 7 LBY &AZACQ < TEST DE LA COLONNE 7. CPI "@" LA AZACQ RBT 0 < A=ADRESSE BUFFER CARTE A ASSEMBLER. LR A,B LXI LXZACQ-2/2-1 < X=NOMBRE DE MOTS A DEPLACER. JE EX331 < GENERATION D'UNE CARTE... < < SAUVEGARDE D'UNE CARTE : ZACQ --> ZZACQ < ADRI LXZACQ/2,B < B=ADRESSE DU RECEPTEUR. MOVE < SAUVEGARDE... LXI LXZACQ < INDEX 1ER CARACTERE DE ZZACQ. EX333: EQU $ LBY &AZACQ CPI " " JGE EX332 < OK, C'EST UN CARACTERE... LAI " " < ON REMPLACE TOUS LES STBY &AZACQ < 'CTRL' PAR DES 'SPACE'... < ET EN PARTICULIER R/C LF... EX332: EQU $ ADRI 1,X < AU SUIVANT, LR X,A CPI LXZACQ+80 < S'IL EXISTE... JL EX333 < ET OUI... LXI LXZACQ+7 LBY &AZACQ < ACCES A LA COLONNE 7 DE 'ZZACQ'. CPI "#" < EST-CE UN APPEL IMPLICITE ??? JNE EX710 < NON, UN SIMPLE MOUVEMENT... < < PREPARATION D'UN APPEL IMPLICITE DE FICHIER : < LAI " " STBY &AZACQ < ON ECRASE LE "#"... LXI 37+1 STX NACQ < ON SE PLACE AU NIVEAU DE LA ZONE < DES COMMENTAIRES... LAI ZZACQ-ZACQQ-1*2 < ON MET A JOUR BRUTALEMENT LA LONGUEUR STA IOCB4+2 < D'EDITION DE LA CARTE, MEME SI ELLE < EST EST ENTREE PAR LE TERMINAL, ET TER- < MINEE PAR UN 'R/C'. < < < N O T A I M P O R T A N T : < LA ZONE 'VALEUR HEXADECIMALE' DU LISTING < N'EST PAS REINITIALISEE LORS D'UN "EOT" < IMPLICITE ; CELLE-CI PEUT DONC ETRE RECUPEREE < DANS LE FICHIER APPELE, A CONDITION QUE CELUI-CI < SOIT APPELE PAR UN "EOT" IMPLICITE CONTENU < DANS UNE CARTE COMMENTAIRE UNIQUEMENT... < < BR AEOT < ET ON SIMULE UN 'EOT'... < < EDITION DES CARTES MISES EN DYNAMIQUES : < EX710: EQU $ LB IOCB4+1 < SAVE L'ADRESSE DU BUFFER D'EDITION, CAR LAI ZZACQ-ZERO*2 < ON VE VA EDITER QUE LA CARTE STA IOCB4+1 < SEULE... LAD IOCB4 WORD LISTIN < EDITION DE LA CARTE SAUVEGARDEE. STB IOCB4+1 < RESTAURE L'ADRESSE DU BUFFER. BSR SORCLF < ??? BSR PAGIN < PAGINATION. BR ADEP < ET C'EST TOUT, ON NE L'ASSEMBLE PAS. < < GENERATION D'UNE CARTE : ZACQ <-- ZZACQ < EX331: EQU $ ADRI LXZACQ/2,A < A=ADRESSE DE L'EMETTEUR. MOVE < GENERATION... LYI "@" < Y="@" CAR UNE INSTRUCTION DYNA- < MIQUE A ETE GENEREE. EX330: EQU $ JMP FX30 < VERS UN TEST DES SYMBOLES DYNAMIQUES... EX138X: JMP EX138 < RELAI VERS 'EX138'... < < < S Y M B O L E S D Y N A M I Q U E S : < < < FONCTION DU CARACTERE "@" : < CE MODULE TESTE LES COLONNES < 2 3 4 5 23 24 25 26 DE CHAQUE < CARTE; LORSQUE DANS L'UNE DE CES < POSITIONS IL RENCONTRE UN '@', < IL LE REMPLACE PAR LE CARACTERE < DE RANG 0 1 2 3 0 1 2 3 (RESPECTI- < VEMENT) DE ZACQ1; EN EFFET LES < OCTETS 0 1 2 3 DE ZACQ1 CONTIENNENT < LE CODE OU LA VALEUR BINAIRE GENEREE < A LA LIGNE PRECEDENTE. < DE PLUS, IL PERMET DE RECUPERER < LA NATURE TRANSLATABLE ('$'), OU < REFERENCE EN AVANT ('*'), AINSI QUE < LE BINAIRE GENERE A LA LIGNE PRECEDENTE < (ATTENTION AUX COMMENTAIRES TROP < LONGS !!!). < < < 2 ZACQ <-- 0 ZACQ1, < 3 1 < 4 2 < 5 3 < 23 0 < 24 1 < 25 2 < 26 3 < 27 4 < 28 5 < 29 6 < 30 7 < 31 8 < 32 9 IF ORDI-"S",XWOR%,,XWOR% < 33 CARACTERE "0" SI KLIST=0 (OPTION 'LST') < 34 CARACTERE 'ORDI' ("S" OU "T"). XWOR%: VAL 0 < < < EXEMPLE : <X: VAL 1 <X: VAL X+1 <YY@@A@: VAL '1234 < CECI EST EQUIVALENT A < < DEFINIR 'YY00A2'. < < < EXEMPLE : < PSR A,B,X,Y <XPSR: VAL '000000000@@ < XPSR VAUDRA '00F0, CAR LE 'PSR' < < A EMPILE LES REGISTRES A, B, X, Y. < < < FONCTION DU CARACTERE "POUR-CENT" : < LE CARACTERE "POUR-CENT" S'IL EST RENCONTRE < N'IMPORTE OU SUR LA CARTE (0 A 79), EST < REMPLACE PAR UN CARACTERE DE "4" A "9" < CALCULE EN FONCTION DE LA PROFONDEUR < D'IMBRICATION DES 'EOT' : < PAS D'EOT' "4", < PREMIER "EOT" "5",... < CELA PERMET EN FAIT DE GERER DES < SYMBOLES 'LOCAUX' AUX PROCEDURES... < < EX30: EQU $ LYI " " < Y=" " RIEN N'A ENCORE ETE GENERE... < < GENERATION DE "POUR-CENT" : < FX30: EQU $ < SUITE DES CARTES DYNAMIQUES... LXI -80 < POUR BALAYER TOUTE LA CARTE. EX302: EQU $ LBY &AZACQX < ACCES AU CARACTERE COURANT. CPI '25 < EST-CE LE POUR-CENT ??? JNE EX304 < NON... LBY OPEN5O < OUI, ON LE REMPLACE PAR UN CHIFFRE < ASCI CONTENU DANS 'OPEN5O'. STBY &AZACQX < QUE L'ON MET DANS LE BUFFER... LYI "@" < Y="@" : "POUR-CENT" GENERE... EX304: EQU $ JIX EX302 < AU SUIVANT... < < GENERATION DU "@" : < LXI 0+2 < COLONNE 2 DE LA CARTE. EX31: EQU $ LBY &AZACQ CPI "@" < EST-CE LE "@" ??? JNE EX32 < NON, ADRI -2-18,X < OUI, ACCES A ZACQ1, LBY &AZACQ < RECUPERATION 1 CARACTERE. ADRI 2+18,X EX301: EQU $ STBY &AZACQ < GENERATION DE LA CARTE. LYI "@" < Y="@" : "@" GENERE... EX32: EQU $ ADRI 1,X LR X,A CPI 4+2 < FIN ??? JL EX31 < NON, LXI 21+2 < OUI, PASSAGE COLONNE 23. EX33: EQU $ LBY &AZACQ CPI "@" < EST-CE LE "@" ??? JNE EX34 < NON, ADRI -2-18-21,X < OUI, ACCES A ZACQ1. LBY &AZACQ ADRI 2+18+21,X EX303: EQU $ STBY &AZACQ < GENERATION DE LA CARTE. LYI "@" < Y="@" : "@" GENERE... EX34: EQU $ ADRI 1,X LR X,A CPI 25+2+6 < FIN ??? JL EX33 < NON... IF ORDI-"S",XWOR%,,XWOR% LBY &AZACQ CPI "@" < "@" EN COLONNE 33 ??? JNE EX138Y < NON, VERS LA COLONNE SUIVANTE... LA KLIST < OUI, ON PREND KLIST, ADRI "0",A < QUE L'ON CONVERTIT EN ASCI., STBY &AZACQ < ET QUE L'ON MET DANS LE BUFFER. LYI "@" < Y="@" : "@" GENERE... EX138Y: EQU $ ADRI 1,X LBY &AZACQ < A=CARACTERE SUIVANT... CPI "@" < EST-CE "@" ??? JNE EX138X < NON, VER LES INSTRUCTIONS DYNAMIQUES... LAI ORDI < OUI, ON LE REMPLACE PAR LA NATURE STBY &AZACQ < DE L'ORDINATEUR-HOTE ('ORDI'). LYI "@" < Y="@" : "@" GENERE... XWOR%: VAL 0 JMP EX138X < VERS LES INSTRUCTIONS DYNAMIQUES. EX139: EQU $ LR Y,A LXI -20 STBY &AZACQ < MISE DE (Y) SUR LE LISTING AFIN < D'INDIQUER AU MOINS UNE GENERATION... JMP EX40 < OUI, VERS L'ANALYSE DE LA CARTE... EX30X: JMP EX30 < RELA VERS 'EX30'... PAGE < < < A S S E M B L E U R A S S Y S : < < < DEFINITION : < L'ASSEMBLEUR ASSYS EST LA VERSION < SOLAR 16.65 DE L'ASSEMBLEUR; CELUI-CI < CONTIENT L'EXTENSION CDA, ET L'ADRESSAGE < DES DONNEES SUR 64K. < DE PLUS IL PERMET L'IMBBRICATION < DES FICHIERS SYMBOLIQUES SUR 'EOT' < A CONCURRENCE DE 5. < < < NVP=3 : SORTIE DU BINAIRE , < NVP=4 : SORTIE LISTING ET MESSAGES , < NVP=A : ENTREE CARTES COMPRESSEES (EOT ##), < NVP=1 : ENTREE CARTES. < NVP=5, 6,...,9 : ENTREE CARTES SGF EN BASCULE < AVEC LE NVP=1. < < IF ORDI-"T",XWOR%,,XWOR% WORD LCLEAR < X=NOMBRE DE MOTS A RAZER. XWOR%: VAL 0 WORD COMMUN < BASE C. WORD FASSYS < ADRESSE DES MOTS A RAZER. ASM: EQU $ < ENTRY-POINT. LRP K IF ORDI-"S",XWOR%,,XWOR% PLR C,L,W XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% PLR X,C,L,W < INITIALSATION DE X, C ET L (W N'EST < ICI QU'A CAUSE DU 'LRP'...). CLEARX: EQU $ STZ 0,L < RAZ... ADRI 1,L < AU MOT SUIVANT... JDX CLEARX XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LPUSUL: VAL 80+8 < LONGUEUR DE LA PILE PUSH/PULL. XWOR%: VAL 0 IC NBPASS < EVITER UN ALT-MODE JLE CT100 LAI 17 BR MERR CT100: EQU $ LB KSTOR LR B,K < INITIALISATION DE LA PILE K. IC NBLIG SURCH: EQU $ < < RELEVER N0 UTILISATEUR < PSR C LA COM1 LR A,C USE C,COMM1 WORD '1E45 ORI '30 STBY IDESC LX COMPAG+2 < ON VA S'ARRANGER POUR AVOIR LAD &ADPAGE < L'ESPACE DE DEUX PAGES RESIDENTES ADRI '11,A < POUR POUVOIR LES EFFACER SLRS 11 ADRI 1,A SLLS 12 STA DEMMEM+2 LAD DEMMEM SVC 0 < < ELIMINER LES PAGES < BSR ELPG PLR C USE C < < TEST D'ASSIGNATION DU NVP 4 < LYI '81 < POUR TEST 'NVP NON ASSIGNE'. LBI 'F < 'F EST UNE FONCTION INEXISTANTE. SBT 5+16 < NVP=4. STB IOCB6 LAD IOCB6 SVC 0 < TEST D'ASSIGNATION DU NVP=4. CPR X,Y < TEST DES CONDITIONS DE RETOUR. JNE Z3 < OK , NVP=4 ASSIGNE. < < SI NVP=4 NON ASSIGNE , ON PREND NVP=2 POUR OUT : < LAI 2 < NVP=2=OUT. STBY IOCB1 STBY IOCB2 STBY IOCB3 STBY IOCB4 Z3: EQU $ BSR PAGE < < OUVERTURE EN MODE NEW DU FICHIER BINAIRE : < LAD OPNBO SVC 0 JE Z1 < L'OUVERTURE S'EST FAITE EN < NEW AVEC LA CLEF 1.0. IF ORDI-"S",XWOR%,,XWOR% STZ IOCB5 < MEMORISONS LA NON ASSIGNATION DE '03. XWOR%: VAL 0 CPR X,Y JE Z1 < NVP=3=BO N'EST PAS ASSIGNE < MAIS ON ASSEMBLE MALGRE TOUT. IF ORDI-"T",XWOR%,,XWOR% LAD CCI SVC 0 < ABORT DE L'ASSEMBLAGE DANS LE CAS < D'UNE OUVERTURE IMPOSSIBLE. JMP $-1 < CAS D'UN !GO. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% ACTD < T R A P P E VOLONTAIRE... XWOR%: VAL 0 Z1: EQU $ < < TEST DE FONCTIONNEMENT EN BATCH : < LB IOCB < ACCES A LA DEMANDE D'ENTREE < DES LIGNES A ASSEMBLER. ADRI 9,B < ON LA FAIT PASSER DE LA FONCTION < '01 A LA FONCTION '0A : < SUR CR : LA FONCTION '0A EST < INEXISTANTE (ERREUR < '11) , < SUR VISU : LA FONCTION '0A < (=ECRITURE GRAPHIQUE) < EST INACCESSIBLE A < A L'INSTANT (ERREUR < '03). STB IOCB LAD IOCB SVC 0 < ENVOI DE LA FONCTION '0A SUR < LE NVP D'ENTREE DES LIGNES. LR X,A < A=CODE ERREUR. CPI '03 < EST-CE FONCTION INACCESSIBLE ??? JE Z100 < OUI , C'EST DONC UN ASSEMBLAGE < DU TEMPS PARTAGE ... ADRI -1,B < AFIN DE METTRE LA FONCTION 0 < DANS IOCB CE QUI EVITERA QUE < LE HANDLER LECTEUR DE CARTES < NE FASSE SON PROPRE ECHO DE < LA CARTE LUE. IC BATCH < UTILISATION BATCH... Z100: EQU $ ADRI -9,B STB IOCB < RESTAURE LA DEMANDE IN SUR < LA FONCTION '01. LAI 'A3 < DECLARATION DE BINAIRE < TRANSLATABLE ASSEMBLEUR. LBI 0 BSR ASPSO1 STZ INDEND STZ BASCUL STZ INDO < ET C'EST PARTI ... < < < A S S E M B L A G E D E L A L I G N E C O U R A N T E : < < DEPART: EQU $ LXI LGLAN STZ &ADLAN JDX $-1 LA KSTOR LR A,K < INITIALISATION DE LA PILE K. STZ &ATSYM0 < POUR EVITER DES HYSTERESIES DE CARTE < A CARTE... IC DEPLA2 IC NLIG SVCTAP: EQU $ BSR SPSAV CPZ INDO JE NEWASK DC INDO < TRAITEMENT 'DO' EN COURS. JMP Z20 NEWASK: EQU $ BSR LCNF JAE Z20 BR AEOT Z20: EQU $ JMP EX30X < VERS LA GENERATION EVENTUELLE < D'ETIQUETTES DYNAMIQUES. EX40: EQU $ < RETOUR DE 'EX30'... LXI 79 < ELIMINER LES BLANCS C1200: EQU $ LBY &AZACQ ORI '20 CPI '20 JNE C1201 JDX C1200 C1201: EQU $ ADRI 1,X LAI '0D < RETOUR-CHARIOT. STBY &AZACQ < QUE L'ON MET EN BOUT DE CARTE. ADRI 1,X LAI '0A STBY &AZACQ LXI -18+4 < NETTOYAGE DE LA ZONE LISTING < (ZACQ1), SAUF LES 4 PREMIERS < CARACTERES UTILISES PAR LA < GENERATION DYNAMIQUE DES < SYMBOLES... LAI '20 STBY &AZACQ JIX $-1 LYI 0 < NETTOYAGE DU BUFFER. LXI -1 C2: EQU $ ADRI 1,X CARAC: EQU $ XR X,Y LBY &AZACQ XR X,Y ADRI 1,Y CPI '0A JE CARAC < LES LF SONT IGNORES. STBY &AZACQ CPI '0D JE RETURN CPI '04 JNE C2 < FIN DE CARTE ( R / C ) NON TROUVE. RETURN: EQU $ LAI '0D STBY &AZACQ ADRI 1,X LAI '0A STBY &AZACQ ADRI 1,Y STY IOCB1+2 < LONGUEUR NOUVELLE LIGNE. ADRI 1,X STX IOCB1+2 ADRI 26,X STX IOCB4+2 EOTIN4: EQU $ BSR MACQ CPI 2 JG BERA1 < 1ER ELEMENT INCORRECT. CPZ SYMBO1 JE NELIM CPI -1 JNE ETIQET < TRAITEMENT 'IF' EN COURS. CPZ BASCUL JE ETIQET NELIM: EQU $ LR A,X BR &ABRAN DOLLAR: EQU $ < COMPTEUR D'ASSEMBLAGE. IC ETAPH JMP C11 ETIQET: EQU $ < TRAITEMENT 'IF'. PSR A,X,Y LXI -18+4 < METTRE DES "-" (+4 POUR @@@@). LAI "-" STBY &AZACQ JIX $-1 LY IOCB4+2 < DECALER LA LIGNE LAI 26 STA IOCB4+2 LAD IOCB4 WORD LISTIN STY IOCB4+2 LXI -26+8+4 < (+8+4 POUR LES @@@@). LAI '20 STBY &AZACQ JIX $-1 LAD IOCB4 WORD LISTIN < EDITION DES CARTES RENCONTREES < DANS UNE SEQUENCE 'IF' , MAIS < A T T E N T I O N : LA CARTE < CONTENANT L'ETIQUETTE CHERCHEE < SERA EDITEE 2 FOIS .... BSR PAGIN PLR A,X,Y JAE PADET CPI -2 JNE DEPART LXI 3 < ETIQUETTE A VERIFIER. C6: EQU $ LA &ASYMB CP &ASYMB1 JNE DEPART < ETIQUETTE RECHERCHEE NON TROUVEE. JDX C6 STZ SYMBO1 PADIF: EQU $ LXI 3 < MEMORISATION DERNIER SYMBOLE. C7: EQU $ LA &ASYMB STA &ASYMB2 JDX C7 STZ DEPLA2 < < < A T T E N T I O N : < LES ETIQUETTES SONT AUTORISEES < APRES UN 'DO' DANS 'ASSYS'; ON < PEUT AINSI FAIRE DES CALCULS < ITERATIFS SUR UNE VARIABLE < AVEC DES 'VAL'... < < BSR RETIQ CPZ LIST2 JG JUSTIN < SECOND PASSAGE. JAE C10 < N'APPARTIENT PAS A TSYMB. TBT 10 JC FALSEX TBT 8 JC JUSTIN < PAS ENCORE DEFINI. TBT 9 JC C9Z < SYMBOLE ABSOLU. IF ORDI-"S",XWOR%,,XWOR% LXI 0 LA LG STA &ATSYMB < A PRIORI, ON REINITIALISE L'ETAT < DU SYMBOLE DEJA EXISTANT AFIN D'EVITER < AU CAS D'UNE REDEFINITION PAR "::" < D'AVOIR DES ENNUIS AVEC LE BIT 12... CPZ VALEQU < SYSMBOLE TRANSLATABLE ; REDEFINITION ??? JNE JUSTIN < OUI, ACCEPTE (::). C9X: EQU $ XWOR%: VAL 0 LAI 8 < SYMBOLE NON ABSOLU. BR MERR C9Z: EQU $ IF ORDI-"S",XWOR%,,XWOR% CPZ VALEQU < SYMBOLE ABSOLU ; REDEFINITION ??? JNE C9X < OUI, REFUSEE (::). C9Y: EQU $ XWOR%: VAL 0 C9: EQU $ DC ETAPH JMP JUSTIN C10: EQU $ BSR INSET JUSTIN: EQU $ LA NIVSYM < SAUVEGARDE NIVEAU SYMBOLE. STA NETIQ LXI 0 LAD &ATSYMB LB ATSYM1 LXI 5 MOVE C11: EQU $ BSR MACQ JANE BERA1 < PAS DE MOT CLE DANS LA CARTE. PADET: EQU $ CPZ INDICA JNE BERA1 < PAS DE MOT CLE DANS LA CARTE. LX MTABCO IF ORDI-"S",XWOR%,,XWOR% LYI 0 < Y=0 : PREMIERE DIRECTIVE. XWOR%: VAL 0 AVANT1: EQU $ IF ORDI-"S",XWOR%,,XWOR% LR X,W < W=SAVE DIRECTIVE COURANTE. XWOR%: VAL 0 LBI 0 LA &ATABCO EOR COND SLRD 15 JAE C12 ADRI 1,X LA &ATABCO ADRI -1,X < LE NUMERO N'EST PAS A PART... C12: EQU $ EOR COND+1 SLRS 16-5 < ON NE CONSERVE QUE LES BITS 0-4, SLLS 16-5 < SOIT, 4 CARACTERES PAR DIRECTIVE... ORR B,A ADRI 1,X < PASSAGE SUR NUMERO DE DIRECTIVE. JAE COTRO < MOT CLE TROUVE !!! IF XSTATS,XWOR%,XWOR%, ADRI XSTATS,X < ON SAUTE LE COMPTEUR DE STATISTIQUES. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LR W,Y < Y=SAVE DIRECTIVE PRECEDENTE. XWOR%: VAL 0 JIX AVANT1 BERA1: EQU $ < PAS DE MOT CLE DANS LA CARTE. LAI 1 BR MERR COTRO: EQU $ IF ORDI-"S",XWOR%,,XWOR% CPZR Y JE COTRO4 < C'EST DEJA LA PREMIERE DIRECTIVE... XR W,X LAD &ATABCO < A=ADRESSE DIRECTIVE COURANTE. XR W,X LRM B,X WORD SAVEC < B=ADRESSE SAVE DIRECT. COURANTE. WORD 2+XSTATS < X=NOMBRE DE MOTS MAX... PSR B,X MOVE < SAVE LA DIRECTIVE COURANTE. XR Y,X LAD &ATABCO < A=ADRESSE DIRECTIVE PRECEDENTE. XR Y,X LRM B,X WORD SAVEP < B=ADRESSE SAVE DIRECT. PRECEDENTE. WORD 2+XSTATS < X=NOMBRE DE MOTS MAX... MOVE < SAVE LA DIRECTIVE PRECEDENTE. PLR B,X < X=NOMBRE DE MOTS MAX. XR A,B < A=ADRESSE SAVE DIRECT. COURANTE, < B=ADRESSE DIRECTIVE PRECEDENTE. MOVE < LA DIRECTIVE COURANTE REMPLACE LA < PRECEDENTE. COTRO5: EQU $ ADRI 1,Y < Y INDEXE LE NUMERO DE LA DIRECTIVE < COURANTE LA OU ELLE EST... ADRI 2+XSTATS,B < B=ADRESSE OU METTRE L'EX < DIRECTIVE PRECEDENTE... LXI 2+XSTATS LRM A WORD SAVEP < A=ADRESSE SAVE DIRECT. PRECEDENTE, < X=NOMBRE DE MOTS EXACT... MOVE < LA DIRECTIVE PRECEDENTE REMPLACE < LA DIRECTIVE COURANTE. LR Y,X < X=INDEX DU NUMERO DE LA NOUVELLE < DIRECTIVE COURANTE. COTRO4: EQU $ XWOR%: VAL 0 LA &ATABCO < A=NUMERO DE DIRECTIVE. ANDI '00FF < TIENT SUR 8 BITS... LR A,W < W=NUMERO DE DIRECTIVE. IF XSTATS,XWOR%,XWOR%, CPI 146 < "EOT" ??? LAI 1 < INCREMENT=1 A PRIORI. JNE COTRO3 < NON, CE N'EST PAS "EOT"... AD INDO < OUI, C'EST "EOT" F LE 'DO' SUR < "EOT" N'ETANT PAS GERE COMME < LES AUTRES 'DO', IL FAUT PRENDRE < EN COMPTE IMMEDIATEMENT UNE < ITERATION EVENTUELLE ; A NOTER < QUE SI L'"EOT" SORT EN ERREUR, < LE NOMBRE D'OCCURENCES SERA < MAUVAIS !!! COTRO3: EQU $ ADRI XSTATS,X < POUR ACCES AU COMPTEUR : LB &ATABCO < B=NOMBRE D'OCCURENCES COURANT. ADR B,A < ON FAIT DES STATISTIQUES... STA &ATABCO LA NACQ CPI 9 < LA DIRECTIVE EST-ELLE DANS LA < PREMIERE ZONE ??? JGE COTROU < NON, ON CONTINUE SON ASSEMBLAGE. < < < E D I T I O N D U N O M B R E < D E R E F E R E N C E S D I R E C T I V E : < < < FONCTION : < LORSQU'UNE DIRECTIVE FIGURE < DANS LA PREMIERE ZONE, ELLE < N'EST PAS ASSEMBLEE, ET L'ASSEM- < BLEUR SE CONTENTE D'INDIQUER < LE NOMBRE D'OCCURENCES DE CELLE-CI, < NON COMPRIS L'OCCURENCE PRESENTE... < < STB &ATABCO < DECOMPTAGE DE CETTE OCCURENCE... BSR CONVER < CONVERSION DU NOMBRE... STA &ZACQ11 < MISE EN PLACE STY &ZACQ10 < DANS LE LISTING, LAD IOCB4 < QUE L'ON EDITE, WORD LISTIN BSR PAGIN < ET L'ON PAGINE... BR ADEP < VERS LA CARTE SUIVANTE... XWOR%: VAL 0 IF XSTATS,,,XWOR% JMP COTROU XWOR%: VAL 0 DIRECT: EQU $ < DIRECTIVES. ADRI -118,A ADRI -16,A < LE REPERTOIRE SOLAR 16.65 < EST PLUS ETENDU QUE CELUI < DU PAUVRE T1600. STA VALDIR ADRI -7,W CPZ ETAPH JE C14 JG C13 ADRI -1,A < ETAPH=-1 : TEST SI A=18. C13: EQU $ ADRI -17,A < ETAPH=1 : TEST SI A=17. JANE C20 C14: EQU $ LA VALDIR CPI 12 < EOT? JNE C15B CPZ SYMBO1 < IF EN COURS ??? JE C15BB < NON... BR ADEP < OUI, 'EOT' IGNORE !!! C15BB: EQU $ BR AEOT C15B: EQU $ CPI 16 JG C15 CPZ NETIQ JE C15 BERA3: EQU $ < ETIQUETTE INTERDITE SUR DIRECTIVE LAI 3 BR MERR FALSEX: JMP FALSE < RELAI... C15: EQU $ ADRI -23,A JAL MOTCLE CPI 2 JNE C16 BSR PAGE < DIRECTIVE 'PAGE'. BR ADEP C16: EQU $ IC INDASC < DIRECTIVES 'ASCI' ET 'IDP'. BSR MACQ CPI 4 JE MOTCLE JMP BERA1 < CE N'EST PAS UNE CHAINE DE < CARACTERES. COTROU: EQU $ LR W,A PSR W < SAUVEGARDE W(WORD+BYTE). CPZ SYMBO1 JE C17 CPI 146 < TRAITEMENT IF EN COURS. JE DIRECT < DIRECTIVE 'EOT'. CPI 147 JE DIRECT < DIRECTIVE 'END'. BRADEP: EQU $ BR ADEP C17: EQU $ CPI 174 JNE C18 DC VALDIR BR ARETD < DIRECTIVE 'FLOAT'. C18: EQU $ CPI 134 JLE C19 CPI 160 JL DIRECT IC INFL C19: EQU $ CPZ ETAPH < INSTRUCTIONS T1600. JE C21 C20: EQU $ JG BERA1 < $ DEVANT UN AUTRE MOT CLE < QUE 'EQU'. FALSE: EQU $ < SYMBOLE INCORRECT. LAI 4 BR MERR C21: EQU $ CPI 174 JL EX1 PSR W LRP W LB 5,W PLR W PSR B RSR < VERS LE TRAITEMENT DE WORD EXTEND < L'OPTION CDA. EX1: EQU $ CPI 102 < QUIT ??? JE C22XX < OUI, TRAITE COMME 'ACTD' : QUIT N... CPI 101 < ACTD ??? JNE C22 C22XX: EQU $ IC INACTD < ACTD OU QUIT... C22: EQU $ CPZ SITUAT JL C23 LAI 13 < INSTRUCTIONS RENCONTREES HORS BR MERR < D'UNE SECTION 'PROG'. C23: EQU $ ADRI -127,A CPI 33 JL CEPAF ADRI -33,A < CAS DES CODES FLOTTANTS. CPI 8 JGE C25 SLLS 1 < CAS OU IL Y A OPERANDE. EORR W,W < W=0. JMP CLASS2 C25: EQU $ ADRI -8,A < CAS OU IL N'Y A PAS D'OPERANDE. SLLS 11 LBI 96 LR B,W JMP C27 CEPAF: EQU $ JALE C26 ADRI -56,W JMP CLASS2 C26: EQU $ ADRI 31,A JAGE CLASS4 ADRI 16,A JAGE CLASS3 ADRI 9,A JAG CLASS2 ADRI 31,A JAGE CLASS1 ADRI 40,A < 'LBY' A 'JALE'. JMP CLASS2 CLASS1: EQU $ < 'RBT' A 'LRP'. ORI 'A0 SLLS 6 JMP C27 CLASS3: EQU $ < 'LAI' A 'ARM'. ORI '10 JMP CLASS2 CLASS4: EQU $ < 'ACQ' A 'ROMB'. SLLS 8 ORI '1E CLASS2: EQU $ < 'JNC' A 'ADRI' , 'JGE' A 'JLE'. SCLS 8 C27: EQU $ STA BINARY MOTCLE: EQU $ < RECHERCHE TYPE DANS TACAT. LXI 0 C28: EQU $ LBY &ATACAT SBR A,W CPZR W JL C29 < TROUVE. ADRI 1,X JMP C28 C29: EQU $ LBY &ATALON ANDI '1F STA NLIG < NUMERO DE LIGNE DANS NLIG. LBY &ATALON SLRS 5 LR A,X LA &ATACLE STA CLE C30: EQU $ STZ NELT C31: EQU $ LX NLIG LA &ATALIG STA ZTR NEWELT: EQU $ DBT RBT 0,X STA ZTR LB NACQ < SAUVEGARDES. LA CARLU < DANS KSTORE. PSR A,B LBI 0 BSR IUSY LBI 6 CPR B,X JNE C32 BR AFINF < FIN DE CARTE. C32: EQU $ CPZ NELT JE C33 CPI '2C < TEST ','. JNE NOCONF C33: EQU $ LBI -1 BR &ATATYP REGIS: EQU $ ADRI 1,B BASE: EQU $ ADRI 1,B INDEX: EQU $ STB INDREG BSR MACQ LXI 8 C34: EQU $ LBY &ATABRG SLLS 8 CP SYMBOL JE C35 JDX C34 JMP NOCONF < CE N'EST PAS UN NOM DE REGISTRE. C35: EQU $ LR X,A CPZ INDREG JG REGIS1 JE BASE1 CPI 3 < INDEX ??? JNE NOCONF CPZ SITUAT < EST-ON DANS UNE DSEC ??? JG C35C < OUI, DONC LE SYMBOLE VIENT D'ETRE < SUPPRIME DE LA TABLE DES SYMBOLES < (VOIR A L'ETIQUETTE 'WORD'), IL NE < FAUT DONC PAS MODIFIER LA TABLE DES < SYMBOLES... CPZ NIV < SYMBOLE DEJA DEFINI ??? JE C35B < OUI... C35A: EQU $ CPZ BINARY < TEST DE LA VALEUR DU CHAINAGE ??? JGE C35E < OK, INFERIEUR A 32K... LAI 20 < C'EST BIEN DOMMAGE, MAIS ON BR MERR < NE PEUT PAS FAIRE AUTREMENT !!! C35E: EQU $ LA &ATSY11 < SYMBOLE NON DEFINI, ET INDEXATION SBT 0 < DEMANDEE DESSUS, ON MEMORISE CE STA &ATSY11 < FAIT DANS LE BIT0, AFIN QUE LORS < DE SA DEFINITION, ON REGARDE S'IL < NE DEPASSE PAS 32K !!! BSR MODSB JMP C35C C35B: EQU $ CPZ &ATSYM0 < INDEXATION DEMANDEE SUR UN SYMBOLE < DEJA DEFINI; CELUI-CI N'EST-IL < PAS SUPERIEUR A 32K ??? JGE C35C < NON, OK... C35D: EQU $ LAI 14 < OUI >32K, ERREUR !!! BR MERR C35C: EQU $ LBY CLE ANDI 'F C36: EQU $ LR A,X C37: EQU $ LA BINARY SBT 0,X C38: EQU $ STA BINARY TESTF: EQU $ < POINT DE RETOUR. IC NELT ADRI -2,K < ELIMINATION SAUVEGARDES LA ZTR JMP NEWELT BASE1: EQU $ < BASE. ADRI -4,A JALE NOCONF CPI 4 JE NOCONF SCRS 2 C39: EQU $ OR BINARY JMP C38 REGIS1: EQU $ < REGISTRE. LBY BINARY CPI '1A JE INSPSR < 'PSR'. CPI '1B JE INSPLR < 'PLR'. CPI '1D JE INSPSR < LRM TRAITE COMME UN PSR. LBY CLE SLRS 4 ADRI -1,X XR A,X < A=REGISTRE , B=NBRE DE DECALGES. CPZ NREG JG C40 SLLS 0,X C40: EQU $ IC NREG JMP C39 INSPSR: EQU $ < INSTRUCTION 'PSR'. ADRI 7,X JMP C37 INSPLR: EQU $ < INSTRUCTION 'PLR'. LAI 16 SBR X,A JMP C36 NOCONF: EQU $ < NON CONFORMITE. BSR SUSY PLR A,B STA CARLU STB NACQ LA ZTR TBT 13 JC EVENT < CAS 'PSR'-'PLR','EXT'-'ENT'. LX NELT JDX C42 < AUCUNE AUTRE POSSIBILITE. TBT 15,X JNC C42 < AUCUNE AUTRE POSSIBILITE. IC NLIG JMP C31 EVENT: EQU $ CPZ LIST2 JE C41 CPZ VALDIR JE C41 BR ASORLI < 'EXT'-'ENT' AU SECOND PASSAGE. C41: EQU $ CPZ NELT JNE C30 C42: EQU $ LAI 1 < ERREUR AU 1ER ELEMENT BR MERR RTESTF: JMP TESTF < RELAI VERS TESTF EXPA: EQU $ < EXPRESSION ABSOLUE. BSR CALEX JANE NOCONF LBI -1 < MASQUE. LA VALDIR CPI 16 JE DIRIF < DIRECITIVE 'IF'. LA CLE CPI 2 JE RANGT < AUCUNE LIMITATION. SLRD 5 ANDI 3 LR A,X LA SOM SB &ATBINF JAGE C43 EREXPA: EQU $ < VALEUR HORS-LIMITES. LAI 7 BR MERR C43: EQU $ SLLD 2 ANDI 3 LR A,X LA &ATBSUP SB SOM JAL EREXPA LBI 'FF LA NLIG CPI 7 JNE RANGT SBT 18 < OPERANDE IMMEDIAT 9 BITS. RANGT: EQU $ LA SOM ANDR B,A C44: EQU $ CPZ INACTD < EST-CE UN ACTD ??? JE C39 < NON. CPI 15 < OUI, L'ARGUMENT DOIT ETRE DANS (0,15)... JG EREXPA SLLS 4 < CADRAGE SUIVANT '1EX5... JMP C39 DIRIF: EQU $ < DIRECTIVE 'IF'. LAD IOCB4 WORD LISTIN < EDITION DE LA CARTE 'IF'. BSR PAGIN CPZ SOM JL AVANTI JE C45 IC SIGNIF C45: EQU $ IC SIGNIF AVANTI: EQU $ < SIGNIF=0(<0),1(=0),2(>0). LA CARLU CPI '2C < TEST ','. JNE C42 < ERREUR DE SYNTAXE. BSR MACQ DC SIGNIF JGE AVANTI JANE C47 LXI 3 < SYMBO1=SYMBOLE A RECHERCHER. C46: EQU $ LB &ASYMB STB &ASYMB1 JDX C46 C47: EQU $ BR ADEP EXPT: EQU $ < EXPRESSION TRANSLATBLE. BSR CALEX LA VALDIR ADRI -22,A CPZ SIGMA JAE C48 < CAS 'WORD'. JL NOCONF C48: EQU $ JE NOCONF LA CLE ANDI 7 LR A,X CPZ NIV BR &AIGET END: EQU $ < DIRECTIVE 'END'. JNE C50 LA COMDE TBT 12 JC RTESTF < SOM=ADRESSE DE LANCEMENT C49: EQU $ LAI 6 < SYMBOLE N'APPARTIENT PAS A LA BR MERR < SECTION 'PROG'. USE: EQU $ JE C51 C50: EQU $ LAI 5 < EXPRESSION NON DEFINIE. BR MERR C51: EQU $ LA COMDE TBT 12 JC C49 < SYMBOLE D'UNE SECTION 'PROG'. CPZ SITUAT JL C52 LAI 13 < ON N'EST PAS DANS UNE BR MERR < SECTION 'PROG'. C52: EQU $ LA NSEC JAE C57 < 'OFF'. LXI -3 CEPACA: EQU $ ADRI 3,X CP &ADSECT JNE CEPACA ADRI 1,X LA &ADSECT LB SOM ADRI -128,B CPR A,B JLE C55 LR B,A C55: EQU $ STA MOTINF ADRI 1,X LA &ADSECT LB SOM LYI 128 ADR Y,B CPR A,B JGE C56 LR B,A C56: EQU $ STA MOTSUP C57: EQU $ BR ATESTF REFMEM: EQU $ < REFERENCE MEMOIRE NON DEFINIE. JNE C50 LXI 3 C58: EQU $ LA NSEC CP &SECBAS JNE APREF LA SOM CP &LIMINF JL APREF CP &LIMSUP JL C60 APREF: EQU $ JDX C58 C59: EQU $ LAI 11 < ACCES IMPOSSIBLE. BR MERR C60: EQU $ SB &VALBAS ANDI 'FF SLLS 2 < GENERATION INDICATION DE BASE. LR X,B SCRD 2 JMP C44 JUMP: EQU $ < SAUT CONDITIONNEL. JNE PLUTAR LA NSEC SB SECOUR JANE C59 < SYMBOLE N'APPARTIENT PAS < A SECOUR. LR A,W < W=/ LA SOM LY PAS BSR SPJUMP ANDI 'FF JMP C44 PLUTAR: EQU $ < SYMBOLE DEFINI ULTERIEUREMENT. LA SOM CPI -128 JL EREXPA < DEEPLACEMENT TROP IMPORTANT. CPI 127 JG EREXPA LA &ATSY11 ORI '90 STA &ATSY11 BSR MODSB BSR INSDEP < INSERTION CODE OPERATION ET < DEPLACEMENT DANS TDEP. LAI 0 JMP C65 WORD: EQU $ < DIRECTIVE 'WORD'. LA SITUAT JALE C61 BSR SUSY BR ATESTF C61: EQU $ JNE CHAINA < EXPRESSION NON DEFINIE. DC SINGER < INDICATEUR DE TRANSLATION. LA SOM LB COMDE TBT 27 JNC C62 LAI 10 < 'DSEC' INTERDIT. BR MERR C62: EQU $ IC TRANS < A CHAGER EN TRANSLATANT. BR AC44 CHAINA: EQU $ < CHAINAGE. CPZ SIGMA JL REFEXT < SYMBOLE EXTERNE. CPZ SOM JE C63 BSR INSDEP < INSERTYION DEPLACEMENT DANS TDEP. C63: EQU $ LA &ATSY11 RBT 1 < 2EME CHAINAGE ET SUIVANTS A PRIORI... STA &ATSY11 < MISE A JOUR A PRIORI... TBT 12 JC DEJCHA ORI '88 < DEBUT DE CHAINAGE. SBT 1 < C'EST LE PREMIER CHAINAGE. STA &ATSY11 LAI -1 RBT 0 < A='7FFF. C64: EQU $ SOWORD: EQU $ LB PAS STB &ATSY12 BSR MODSB C65: EQU $ IC SINGER < INDICATEUR DE CHAINGAE. BR AC44 DEJCHA: EQU $ < CHAINAGE EN COURS. IC TRANS LA &ATSY12 JAGE SOWORD < OK, L'ADRESSE DU CHAINAGE PRECEDENT < < EST INFERIEURE A 32K. CPZ PAS < SINON, EST-ON ACTUELLEMENT AU-DELA < DES 32K ??? JL SOWORD < OUI, C'EST BON, ON Y RESTE... LAI 22 < NON, ON EST OBLIGE D'INTERDIRE BR MERR < CETTE POSSIBILITE A CAUSE DE < DE L'EDITEUR DE LIENS... REFEXT: EQU $ CPZ SOM JNE DEPFAU < DEPLACEMENT ASSOCIE AU SYMBOLE. LAI 0 CPZ LIST2 JG C65 < SECOND PASSAGE. LA &ATSY11 TBT 12 JC DEJCHA ORI '88 DC TRANS < TRANS=-1. STA &ATSY11 BSR MODSB LAI 0 JMP C64 EQU: EQU $ < DIRECTIVE 'EQU'. JE C100 LAI 5 < SYMBOLE NON DEFINI. BR MERR C100: EQU $ JMP C69 ENT: EQU $ < DIRECTIVE 'ENT'. LBI '84 JMP C66 EXT: EQU $ < DIRECTIVE 'EXT'. LBI 'A0 C66: EQU $ CPZ LIST2 JG C69 < SECOND PASSAGE. CPZ NIV JNE C67 BERA6: EQU $ < SYMBOLE DEJA DEFINI. LAI 6 BR MERR C67: EQU $ LA &ATSY11 ANDI 'FC JANE BERA6 < SYMBOLE DEJA CHAINE. CPZ SOM JE C68 DEPFAU: EQU $ < DEPLACEMENT ASSOCIE AU SYMBOLE. LAI 1 BR MERR C68: EQU $ LA &ATSY11 ORR B,A STA &ATSY11 BSR MODSB C69: EQU $ BR ATESTF NOMSEC: EQU $ < NOM DE SECTION. LA VALDIR < DST? CPI 9 JNE $+2 BR ADEP BSR MACQ LB CLE TBT 24 JC DIRSEC < DIRECTIVE DE SECTIONNEMEMT. JANE C74 BSR RETIQ < AUTRES DIRECTIVES. JAGE BERA6 < NOM N'APPARTIENT PAS A TSYMB. SLRS 8 ANDI '7F BR AC44 DIRSEC: EQU $ CPZ LIST2 JE C70 IC SECMAX < SECOND PASSAGE. LA SECMAX STA SECOUR JMP C73 C70: EQU $ JANE C71 BSR RETIQ JAE C71 LAI 8 < APPARTIENT DEJA A TSYMB. BR MERR C71: EQU $ LX PTSECT < @ FIN SECTION PRECEDENTE LA PAS STA &ADSECT IC PTSECT IC SECMAX LA SECMAX STA SECOUR CPI NBRSEC JL C72 LAI 9 < NOMBRE DE SECTIONS>127. BR MERR C72: EQU $ LX PTSECT STA &ADSECT IC PTSECT BSR SPTAS < MEMORISATION NOM DANS BUF. C73: EQU $ CPZ LG JE C74 < PAS DE NOM DE SECTION. BR ATESTF FINFRA: EQU $ CPI '2C < TEST ','. JNE C75 C74: EQU $ BR ANOCON C75: EQU $ BSR MACQ CPI 1 JNE C74 CPZ TRANS JGE C76 LA BUF LB BUF+1 PSR A,B < SAUVEGARDE DE BUF,BUF+1. C76: EQU $ LA VALDIR NPVIRG: EQU $ < INSTRUCTIONS. JAE TRAREG CPI 19 JGE C78 LBI 0 LYI 0 C77: EQU $ LR A,X < DIRECTIVES DE SECTIONNEMENT. LA BINARY BR &ATABDR < 'EQU' ET 'VAL'. C78: EQU $ JG TRAREG LA BINARY < DIRECTIVE 'DZS'. C79: EQU $ AD PAS JNC TRAREG < OK... LAI 12 < DEPASSEMENT 64K !!! BR MERR TRAREG: EQU $ LA NREG CPI 1 JNE RETDIR LA CLE < EXCLUSION 'ADRI'. JAL RETDIR LA BINARY < DUPLICATION RS DANS RD. SLRS 3 ANDI 7 OR BINARY STA BINARY RETDIR: EQU $ CPZ NETIQ JE TRAREF < PAS D'ETIQUETTE. LA SECOUR < TRAITEMENT ETIQUETTE. JAG C80 LAI 3 < ETIQUETTE AVANT SECTION. BR MERR C80: EQU $ SLLS 8 CPZ SITUAT JLE C81 SBT 11 < SECTION 'DSEC'. C81: EQU $ JGE C82 SBT 12 < SECTION 'PROG'. C82: EQU $ LY PAS STY SOM < COMDE=MOT DE COMMANDE , < SOM=VALEUR. C93: EQU $ STA COMDE RETEQ: EQU $ CPZ LIST2 JG TRAREF < SECOND PASSAGE. LA &ATSYM1 ANDI 'E8 < BIT11=0 (DSEC), AFIN DE PERMETTRE LA < REDEFINITION DE SYMBOLE TRANSLATABLE < PAR '::' DANS UNE 'DSEC'... JAE NEWSYM < NOUVEAU SYMBOLE. CPZ SITUAT JLE C83 LAI 10 < SYMBOLE UTILISE AILLEURS. BR MERR C83: EQU $ LYI -1 LR Y,W RETW: EQU $ LXI 0 LY NDEP C84: EQU $ CPR X,Y JE C86 CPZ &ATDEP < MEMORISATION SIGNE. LA &ATDEP RBT 0 EOR NETIQ JANE FINDEP LA &ATDEP1 JG DEPWOR < BIT0=0. AD SOM LY &ATDEP2 BSR SPJUMP ANDI 'FF < ELIMINATION OCTET GUACHE. C85: EQU $ CPZR W JE PERFO FINDEP: EQU $ ADRI -3,X JMP RETW+1 C86: EQU $ CPZR W < X=NDEP. JE NEWSYM ADRI 1,W < AUCUNE ERREUR DETECTEE. LA &ATSYM1 TBT 12 JNC RETW LAI 'AA LB &ATSYM2 BSR ASPSO1 LAI '22 LB SOM BSR ASPSO1 JMP RETW DEPWOR: EQU $ < DEPLACEMENT SUR 'WORD'. AD SOM JNV C87 < OK... LAI 18 BR MERR C87: EQU $ LA &ATDEP1 JMP C85 PERFO: EQU $ < SORTIE DEPLACEMENT. LR A,Y LAI '2E LB &ATDEP2 LR X,L BSR ASPSO1 LAI '22 LR Y,B BSR ASPSO1 LR L,X LR X,B ADRI -3,X TASDEP: EQU $ < TASSEMENT DE TDEP. LY NDEP CPR Y,X JNE C88 LR B,X ADRI 3,Y STY NDEP JMP C84 C88: EQU $ LA &ATDEP ADRI 3,X STA &ATDEP ADRI -4,X JMP TASDEP CC77: JMP C77 < RELAI VERS C77 !!! < < < R E N C O N T R E D ' U N N O U V E A U S Y M B O L E : < < NEWSYM: EQU $ < NOUVEAU SYMBOLE. LA &ATSYM1 TBT 12 < LE NOUVEAU SYMBOLE EST-IL DEJA CHAINE ??? JNC C88E < NON, OK... CPZ &ATSYM2 < OUI, LE CHAINAGE PRECEDENT EST-IL < SUPERIEUR A 32K ??? JGE C88E < NON, OK... CPZ SOM < OUI, ALORS SA VALEUR ES-ELLE AUSSI < SUPERIEURE A 32K ??? JL C88E < OUI, OK... TBT 1 < PREMIER CHAINAGE ??? RBT 1 < OUI A PRIORI... JC C88E < ET OUI, C'EST BON... LAI 22 < NON, L'EDITEUR DE LIENS NE S'EN BR MERR < SORTIRA PAS, ABORT... C88E: EQU $ TBT 0 < L'INDEXATION A-T'ELLE ETE DEJA < DEMANDEE SUR CE SYMBOLE ??? ANDI 7 OR COMDE STA &ATSYM1 LA SOM STA &ATSYM2 LA NETIQ STA NIV LA &ATSYM1 JNC C88A < NON, OK... CPZ &ATSYM2 < OUI, ALORS EST-ON A UNE ADRESSE < SUPERIEURE A 32K ??? JGE C88A < NON, OK... LAI 14 < OUI, ERREUR !!! BR MERR C88A: EQU $ STA &ATSY11 TBT 9 < EST-CE UN SYMBOLE ABSOLU ??? LA &ATSYM2 STA &ATSY12 JC P7FFF < OUI, UN SYMBOLE ABSOLU PEUT < VALOIR '7FFF !!! IBT 0 CPI 'FFFF < LE NOUVEAU SYMBOLE DEFINI VAUT-IL < '7FFF ??? (CONFLIT AVEC FIN DE < CHAINAGE !!!) JNE E7FFF < NON, OK... LAI 19 < OUI, ON SE DOIT DE LE REFUSER !!! BR MERR < ERREUR !!! < < CAS DES SYMBOLES TRANSLATABLES : < E7FFF: EQU $ IF ORDI-"S",XWOR%,,XWOR% LXI LXZACQ-1 LAI YNZACQ STBY &AZACQ < A CHAQUE RENCONTRE D'UN SYMBOLE TRANS- < LATABLE ON REINITIALISE LA PILE DU < CODE GENERE EN BOUT DES CARTES < DYNAMIQUES... XWOR%: VAL 0 < < CAS DE TOUS LES SYMBOLES : < P7FFF: EQU $ BSR MODSB TRAREF: EQU $ < TRAITEMENT REFERENCE. LA VALDIR JAE INSTR JAG C89 BR CEFLT < CAS DU FLOTTANT. C89: EQU $ CPI 18 JG CC77 LB SOM < SORTIE LISTING ('EQU' ET 'VAL'). BSR CONVER < B=VALEUR CONVERSION. STY &ZACQ10 < POIDS FORTS VALEUR STA &ZACQ11 < POIDS FAIBLES VALEUR BR ASORLI WORD1: EQU $ < DIRECTIVE 'WORD'. INSTR: EQU $ < INSTRUCTION. LBI 'A6 LAI 1 CPZ TRANS JNE INCPAS C90: EQU $ LBI '24 < CHARGER SANS TRANSLATER. INCPAS: EQU $ AD PAS STA PAS CPZ TRANS JL TREXT < DEBUT CHAINAGE SUR 'EXT'. LR B,A SREXT: EQU $ LB BINARY CPZ INFL JE COMFL PSR B LB M3800 < POSITIONNEMENT DU CODE FLOTTANT. COMFL: EQU $ BSR SPLIST < SORTIE DU BINAIRE DU 1ER MOT < ET EDITION LISTING ... CPZ INFL JE COND3 IC PAS IC DEBRES+2 LAI '24 PLR B BSR SPLIST COND3: EQU $ CPZ PVIR JE NBRAN STZ TRANS < 'WORD' + POINT VIRGULE. STZ MOBYTE STZ SINGER RBYTE: EQU $ BSR SPSAV STZ BINARY STZ PVIR STZ NETIQ IC DEPLA2 ADRI -2,K < ELIMINATION SAUVEGARDES PLR W < RESTITUTION RANG DU MOT CLE. BR ACOT ELIMIN: EQU $ < ELIMINATION LG SYMBOLE EQUIVALENT. CPZ NETIQ JNE C92 C91: EQU $ LAI 3 < ETIQUETTE MANQUANTE. BR MERR RELNWS: JMP NEWSYM C92: EQU $ CPZ SECOUR JE C91 < ERREUR : AUCUNE SECTION < N'EST ENCORE DEFINIE !! LA COMDE SLRS 3 < AINSI QUE LE BIT13 ('ENT'). SLLS 3 BR RETEQ1 TREXT: EQU $ < SORTIE SYMBOLE EXTERNE. PLR A,B LAI -1 < DEBUT DE CHAINAGE EXT RBT 0 OR BINARY STA BINARY LAI '24 JMP SREXT EQU1: EQU $ < DIRECTIVE 'EQU'. CPZ ETAPH JE ELIMIN LA COMDE CPZ SITUAT < EST-ON DANS UNE 'DSEC' ??? JG EX700 < OUI, ATTENTION !!! LBY COMDE STA SECOUR < SECTION COURANTE... LA COMDE TBT 11 JC C94 TBT 12 JNC C95 ADRI -2,B < 'PROG'. C94: EQU $ ADRI 1,B < 'DSEC'. C95: EQU $ STB SITUAT EX700: EQU $ LB SOM STB PAS STB DEBRES+2 CPZ SITUAT JG C96 < 'DSEC'. LAI 'A0 BSR ASPSO1 C96: EQU $ BSR SPLIS1 < SORTIE LISTING. NBRAN: EQU $ BR ADEP BYTE: EQU $ < DIRECTIVE 'BYTE'. SLRD 8 < DECONCATENATION GAUCHE/DROITE... JANE ARASCI < ERREUR : (GAUCHE)#0... SLLD 8 < (A)=2 CHIFFRES HEXA-DECIMAUX... CPZ INBYTE JE BYTE1 < BYTE DE GAUCHE. OR MOBYTE < BYTE DE DROITE. STZ INBYTE C97: EQU $ STA BINARY JMP INSTR ARASCI: JMP ERASCI < RELAI... BYTE1: EQU $ SLLS 8 STA MOBYTE IC INBYTE CPZ PVIR JE C97 JMP RBYTE < 'BYTE' + POINT-VIRGULE. DZS: EQU $ < DIRECTIVE 'DZS'. JAE C96 LAI 'AC LB BINARY CPZ SITUAT JG C98 < ON EST DANS UN 'DSEC'. BSR ASPSO1 < REPEAT LOAD. C98: EQU $ LA BINARY STZ BINARY JMP C90 VAL: EQU $ < DIRECTIVE 'VAL'. CPZ NETIQ JE C91 < ETIQUETTE MANQUANTE. CPZ VALEQU < EST-ON EN FAIT EN PRESENCE DE LA SEQUENCE < SUIVANTE : < ETI: EQU $ PUIS < ETI::VAL 0 ??? JL C99XX < OUI, ERREUR !!! LA &ATSYM1 ANDI 'BC JAE C99 C99XX: EQU $ LAI 4 < SYMBOLE DEJA UTILISE. BR MERR C99: EQU $ LAI '40 STA COMDE JMP RELNWS COMMON: EQU $ < DIRECTIVE 'COMMON'. ADRI -1,Y LOCAL: EQU $ < DIRECTIVE 'LOCAL'. ADRI 2,Y TABLE: EQU $ < DIRECTIVE 'TABLE'. LR B,W CPI 3 JG NONVER < 'TABLE' OU 'DSEC'. AD ETATS < VERIFICATION DE L'ENCHAINEMENT < DES SECTIONS. LR A,X LA MOTEST TBT 0,X JNC C101 LAI 16 < ENCHAINEMENT INCORRECT. BR MERR C101: EQU $ LAI 3 MP VALDIR STB ETATS NONVER: EQU $ LR W,B LX LIMSU2 CPZR X JE NREGUL LA PAS < SORTIE 'COMMON' OU 'LOCAL'. CP &LIMSUP JGE C102 STA &LIMSUP STA &LIMSU1 C102: EQU $ STZ LIMSU2 NREGUL: EQU $ CPZ SITUAT JL FINPRO JE C103 LA SAUVPA < SORTIE 'DSEC'. STA PAS REPRO: EQU $ STZ SITUAT C103: EQU $ CPZR Y JE YNUL LR Y,X < 'COMMON' OU 'LOCAL'. LYI 128 LA PAS < POSITIONNEMT IMPLICITE C ET L. STA &LIMINF STA &LIMIN1 ADR Y,A STA &VALBAS STA &VALBA1 ADR Y,A STA &LIMSUP STA &LIMSU1 LA SECOUR STA &SECBAS STA &SECBA1 STX LIMSU2 YNUL: EQU $ CPZR B LY PAS JE TRACOM STB SITUAT < 'PROG' OU 'DSEC'. JL TRACOM < CAS DE 'PROG'. STZ PAS STY SAUVPA < 'DSEC'. LYI 0 JMP C104 TRACOM: EQU $ < SORTIE NOM DE SECTION. LAI '36 BSR ASPSO2 C104: EQU $ STY DEBSEC STY FINSEC IC INDZS CPZ LIST2 JG C105 < SECOND PASSAGE. LX PTSECT STY &ADSECT IC PTSECT C105: EQU $ BR ASORLI < SORTIE LISTING. PROG: EQU $ < DIRECTIVE 'PROG'. ADRI -2,B DSEC: EQU $ < DIRECTIVE 'DSEC'. ADRI 1,B JMP TABLE FINPRO: EQU $ < FIN DE SECTION 'PROG'. LAI 0 LR A,W BSR SYMUL C106: EQU $ LAI 1 BSR SYMUL JE SYMUL1 LXI 0 LA &ATSYMB < RECHERCHE DES JUMPS NON < SATISFAITS. ANDI '90 CPI '90 JNE MORE BSR SORCLF LAD &ATSYMB < 'JUMP' NON SATISFAIT. BSR SORSYM < EDITION SYMBOLE. ADRI 1,W MORE: EQU $ < APPEL SYMBOLE SUIVANT. JMP C106 SYMUL1: EQU $ CPZR W JE REPRO C107: EQU $ LAI 15 < LIMITE SECTION NON ATTEINTE. BR MERR USE1: EQU $ < DIRECTIVE 'USE'. SLRS 14 LR A,X CPZ INBRE JNE NIMPL < POSITIONNEMENT EXPLICITE. CPI 3 < RETOUR POSITIONNEMENT IMPLICITE. JNE C108 ERASCI: EQU $ LAI 1 < BASE W. BR MERR C108: EQU $ LY &SECBA1 STY &SECBAS LA &LIMIN1 LB &LIMSU1 LY &VALBA1 RUSE: EQU $ STA &LIMINF STB &LIMSUP STY &VALBAS BR ASORLI < SORTIE LISTING. EXT1: EQU $-1 ENT1: EQU $-1 NIMPL: EQU $ LY NSEC STY &SECBAS LA MOTINF LB MOTSUP LY SOM JMP RUSE NR13: EQU $ LAI 13 BR MERR < < < A P P E L D U C C I : < < PSTS: EQU $ PSTH: EQU $ LAD CCI SVC 0 < POUR DES PATCHES... BR ASORLI < ET C'EST TOUT... DO: EQU $ < DIRECTIVE 'DO'. STA INDO LAD IOCB4 WORD LISTIN < EDITION DE LA CARTE 'DO'. BSR PAGIN BSR LCNF JAE C1300 BR AEOT C1300: EQU $ BR ADEP ASCI: EQU $ < DIRECTIVE 'ASCI'. IF ORDI-"S",XWOR%,,XWOR% LBI '24 IC NACQ1 < PREMIER CARACTERE PRESUME DE LA CHAINE, LX NACQ1 LBY &AZACQ CPI "'" < EST-CE UNE ' DERRIERE " ??? JNE C111X < NON, VRAI ASCI... < < CAS D'UNE CHAINE HEXA-DECIMALE "'XXXXXXXX" : < C111Y: EQU $ LBI 1 < B=INDICATEUR DE COMPTAGE A 4... C111Z: EQU $ IC NACQ1 LX NACQ1 LBY &AZACQ < A=CARACTERE SUIVANT... CPI '0D < FIN DE CARTE ??? JE ERASCI < ERREUR DE SYNTAXE... CPI '22 < FIN DE CHAINE ??? JE FASCIX < OUI... ADRI -"0",A < DECODAGE, JAL ERASCI < ERREUR DE SYNTAXE... CPI 9 JLE C111R < CHIFFRE DECIMAL. ADRI -"A"+"9"+1,A CPI 'A JL ERASCI CPI 'F JG ERASCI < ERREUR DE SYNTAXE... C111R: EQU $ SCRS 4 SCLD 4 < CONCATENATION DANS B. JAE C111Z < ON BOUCLE TANT QUE (A)=0 : 4 FOIS... SASCIX: EQU $ IC PAS < PROGRESSION DU "$". LAI '24 < CODE DE CHARGEMENT, BSR SPLIST < LISTING + BINAIRE. IC DEBRES+2 CPZ INDASC < FINI ??? JNE C111Y < NON... C111T: EQU $ BR ADEP < CARTE SUIVANTE SVP... FASCIX: EQU $ STZ INDASC < INDICATEUR DE DERNIER MOT... LR B,A CPI 1 < MOT VIDE ??? JE C111T < OUI, RIEN A FAIRE... LAI 0 < CLEAR, C111S: EQU $ SCLD 4 JAE C111S < ON BOUCLE TANT QUE (A)=0... JMP SASCIX < VERS LA SORTIE DU DERNIER MOT. C107X: JMP C107 < RELAI... < < VRAI ASCI "YYYYYYYY" : < C111U: EQU $ XWOR%: VAL 0 LBI '24 C111: EQU $ IC NACQ1 LX NACQ1 LBY &AZACQ IF ORDI-"S",XWOR%,,XWOR% C111X: EQU $ XWOR%: VAL 0 CPI '0D < R/C ??? JE ERASCI < OUI, MANQUE LE " DE FIN DE ASCI... CPI '22 JE FASCI < FIN DE CHAINE. SLLS 8 SCLD 8 JAE C111 SASCI: EQU $ IC PAS BSR SPLIST < PERFO MOT + SORTIE LISTING. IC DEBRES+2 < INCREMENTATION ADRESSE. CPZ INDASC IF ORDI-"T",XWOR%,,XWOR% JNE ASCI XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JNE C111U XWOR%: VAL 0 BR ADEP FASCI: EQU $ STZ INDASC LAI 0 SCLD 8 JANE SASCI < ENCORE UN CARACTERE. BR ADEP IDP: EQU $ < DIRECTIVE 'IDP'. LAI 'B4 LB RCLF STA BUF STB BUF+1 BSR PSORTQ < SORTIE RC-LF DANS QUADRUPLET. IDP1: EQU $ LXI -2 STZ BUF < NETTOYAGE DE BUF. STZ BUF+1 C112: EQU $ LR X,Y IC NACQ1 LX NACQ1 LBY &AZACQ CPI '22 JE FIDP < FIN DE CHAINE. LR Y,X STBY &ABUF JIX C112 SIDP: EQU $ LAI 'B4 STA BUF BSR PSORTQ < SORTIE QUADRUPLET. CPZ INDASC JNE IDP1 BR ASORLI < SORTIE LISTING. FIDP: EQU $ STZ INDASC LAI -3 CPR A,X JNE SIDP SORLIS: EQU $ < SORTIE LISTING (ZACQ) BSR APAGEN BR ADEP END1: EQU $ < DIRECTIVE 'END'. IF ORDI-"S",XWOR%,,XWOR% CPZ KLIST < LISTING ??? JE FINAS1 < OUI, DEJA ON... STZ KLIST < NON, 'LST' IMPLICITE, LA IOCB4 < ET ON RESTAURE... EORI '000D STA IOCB4 LA IOCB3 EORI '000D STA IOCB3 FINAS1: EQU $ XWOR%: VAL 0 EORR L,L LAI 0 < RECHERCHE SYMBOLES NON DEFINIS BSR SYMUL C113A: EQU $ LAI 1 BSR SYMUL JE C113B LXI 0 LA &ATSYMB IF ORDI-"T",XWOR%,,XWOR% TBT 10 < ELIMINER EXT JC C113A TBT 8 ADCR L XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% ANDI 'A0 < UNDEF+REF... CPI '80 < UNDEF ??? JNE C113A ADRI 1,L XWOR%: VAL 0 JMP C113A C113B: EQU $ CPZR L JE C113 LAI 17 < ASSEMBLAGE INCORRECT. BR MERR C113: EQU $ CPZ SITUAT JGE C114 < LA SECTION EN COURS N'EST PAS < UNE SECTION 'PROG'. LA FINSEC CP PAS IF ORDI-"T",XWOR%,,XWOR% JG C107 < LIMITE DE SECTION NON ATTEINTE. XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JG C107X < LIMITE DE SECTION NON ATTEINTE... XWOR%: VAL 0 C114: EQU $ DC IOCB4+2 LAD IOCB4 < SORTIE LISTING. WORD LISTIN BSR PAGIN CPZ LIST2 JG FINASS < SECOND PASSAGE. LAI 0 BSR SYMUL CEND: EQU $ LAI 1 BSR SYMUL JE SYMUL2 LXI 0 LA &ATSYMB TBT 13 JC ENTENT < 'ENT'. ANDI '28 CPI '28 JE EXTEXT < 'EXT' CEND1: EQU $ JMP CEND SYMUL2: EQU $ LB SOM CPZR B JNE C115 SBT 16 < B='8000 C115: EQU $ LAI '28 BSR ASPSO1 < SORTIE DE L'ADRESSE DE LANCEMENT. LAI '30 LB CHECK BSR ASPSO1 < SORTIE CHECKSUM. IC INDEND STZ LIST2 STZ CHECK PAGE < < < F I N D ' A S S E M B L A G E : < < FINASS: EQU $ BSR SORCLF LA COM1 XR A,C < POUR ATTEINDRE 'KERROR'... USE C,COMM1 LB KERROR < B=NOMBRE D'ERREURS... IF ORDI-"S",XWOR%,,XWOR% LX NBPAGE ADRI 1,X < X=NOMBRE DE PAGES VIRTUELLES (RESI- < DENTES OU PAS) UTILISEES PAR LA < TABLE DES SYMBOLES. XWOR%: VAL 0 XR A,C USE C BSR CONVER < CONVERSION ASCI DE (B). STA &ZACQ11 < ET MISE DANS STY &ZACQ10 < LE LISTING, IF ORDI-"S",XWOR%,,XWOR% XWOR%1: VAL XLGPAG=0 XWOR%1: VAL 16-1-XWOR%1 LRM B WORD 1>XWOR%1>8 < NOMBRE MAX DE PAGES POUR LA TABLE < DES SYMBOLES. ORR X,B < QUE L'ON CONCATENE AU NOMBRE < REELLEMENT UTILISE. BSR CONVER STA &ZACQ14 < QUE L'ON INSERE DANS STY &ZACQ13 < LE LISTING DE 'END'... XWOR%: VAL 0 LAD IOCB4 < QUE L'ON EDITE... WORD LISTIN BSR PAGE IF ORDI-"T",XWOR%,,XWOR% LAI '6D < LIBERER L'IMPRIMANTE SWBR A ORI '0D XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A < LIBERER L'IMPRIMANTE WORD '6D0D XWOR%: VAL 0 STA SYMBOL LAD IOCB3 WORD LISTIN LAD IOCB5 < ECRIRE LE DERNIER BUFFER SVC 0 LA OPNBO ORI 3 < MISE EN MODE 'CLOSE-SAVE'. STA OPNBO LAD OPNBO SVC 0 < FERMETURE DE L'ENREGISTREMENT < BINAIRE. PSR C LA COM1 LR A,C USE C,COMM1 < < ELIMINER LES PAGES < BSR ELPG LAD DCLOSE < ON FERME TOUT SVC 0 < AVANT DE SORTIR... PLR C USE C LAD CCI SVC 0 < RETOUR AU CCI. JMP $-1 < CAS D'UN !GO. EOT: EQU $ < DIRECTIVE 'EOT'. BSR MACQ < VOIR CE QUI SUIT CPI 1 JE EOTBL < RIEN - RETOUR SUR NVPI CPI -1 JE EOTDS < DIESE - LECTURE SUR FICHIER EREOT: EQU $ LAI 24 < SINON, ERREUR. BR MERR CEND11: JMP CEND1 FNSFNS: JMP FINASS EOTBL: EQU $ LBY IOCB < REVENIR A NVPI SI NECESSAIRE CPI 1 JE AC3001 < < CAS D'UNE FIN DE FICHIER (OU ERREUR) : < LA NR < EST-CE UN 'EOT' SIMULE PAR < LE MODULE D'ERREUR ??? CPI 24 < EST-CE 'ERREUR FICHIER' ??? JE ET1701 < OUI, IL FAUT ANNULER LES < EFFETS DE L'EOT... JANE AC3001 < POUR LES AUTRES ERREURS, < ON CONTINUE SUR LE FICHIER... ET1701: EQU $ LB NR < B=CODE D'ERREUR EVENTUEL. PSR C LA COM1 LR A,C < CHANGEMENT BASE C. USE C,COMM1 LAD CLOS5S SVC 0 < FERMETURE CLEF 2.0. CPZR B < ERREUR EN COURS (24) ??? JNE ET1812 < OUI, PAS DE 'DO EOT'... DC SINDO < NON, DECOMPTAGE... JGE NEREOT < OK, IL EN RESTE... ET1812: EQU $ STZ SINDO < SINON, ON REINITIALISE... LAD AASS5S SVC 0 < DESASSIGNATION FICHIER. IF ORDI-"T",XWOR%,,XWOR% DC RDK1+3 < RETOUR ARRIERE. DC RDK2+3 DC WDK1+3 DC WDK2+3 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR ARESGF < RETOUR EN ARRIERE... XWOR%: VAL 0 LAD RDK1 SVC 0 < RESTAURATION BUFFER SGF. LAD RDK2 SVC 0 < RESTAURATION CONSTANTES. LXI ZACQQ-ZACQN LAD SZACQN LB AZACQN MOVE < RESTAURE LE NUMERO DE LIGNE. PLR C < RESTAURE LA BASE C. USE C STZ INDO < REINITIALISATION DE INDO. PSR A,C LA COM1 LR A,C USE C,COMM1 LAD NOMF2 LB ANOMF1 LXI XXXLFC+1 MOVE < RESTAURATION DU NOM DU FICHIER < COURANT ET DE LA LONGUEUR < LORSQU'IL N'Y A PLUSE DE < 'DO' SUR 'EOT'. PLR A,C USE C JMP C3002 EOTDS: EQU $ LX NACQ < Y-A-T'IL UN NOM DE FICHIER? LBY &AZACQ CPI '0D JNE EOTFIC LXI 0 < NON - FICHIER COURANT PSR C LA COM1 LR A,C USE C,COMM1 CPZ &ANOMF < A NOTER X=0 (MOVE), PLR C USE C JE EREOT < PAS DE FICHIER, ERREUR... LBY IOCB < OUI - INVERSER LECTURE CPI 1 JE C3002 JMP AC3001 ENTENT: JMP SYMENS EXTEXT: JMP SYMEXS < < APPEL FICHIER : < EOTFIC: EQU $ LAD IOCB4 WORD LISTIN < EDITION DE LA CARTE 'EOT'. BSR PAGIN < COMPTAGE 'EOT'... LB NACQ < IL Y A UN NOM DE FICHIER ET1704: EQU $ < A NOTER : B<0 S'IL S'AGIT D'UNE < ITERATION SUR 'EOT'. PSR C LA COM1 LR A,C USE C,COMM1 < < SAVE LE NOM COURANT : < PSR B LB ANOMF2 LAD NOMFIC LXI XXXLFC+1 MOVE < SAVE LE NOM COURANT ET LA LONGUEUR. PLR B < < A T T E N T I O N : X=0 APRES LE 'MOVE !!! < AUTCF: EQU $ XR X,B LBY &AZAQC ADRI 1,X XR X,B CPI "#" < FIN DE NOM? JE FINNMF STBY &ANOMF ADRI 1,X LR X,A CPI XXXLFC*2-1 < TRONCATION? JL AUTCF FINNMF: EQU $ LAI '04 < FIN NOM - PLACER EOT STBY &ANOMF STX LGNMFC IF ORDI-"S",XWOR%,,XWOR% LYI "#" LR B,X < X=INDEX BUFFER D'ENTREE... LBY &AZAQC < ACCES AU CARACTERE SUIVANT "#"... SBR A,Y < Y=0 : BOUCLAGE SUR OPEN EN ERREUR, < #0 : MESSAGE D'ERREUR SINON... XWOR%: VAL 0 ET1707: EQU $ < < EMPILEMENT DE L'ETAT SGF COURANT : < LXI ZACQQ-ZACQN LAD SZACQN LR A,B LA AZACQN MOVE < SAVE LE NUMERO DE LIGNE COURANT. LAD WDK1 SVC 0 < SAVE LE BUFFER SGF COURANT. LAD WDK2 SVC 0 < SAVE LES CONSTANTES. IF ORDI-"T",XWOR%,,XWOR% IC WDK1+3 < PROGRESSION EMPILEMENT. IC WDK2+3 IC RDK1+3 IC RDK2+3 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR ASASGF < PROGRESSION DE L'EMPILEMENT. XWOR%: VAL 0 LA &AINDO STA SINDO < 'DO' SPECIAL POUR 'EOT'. STZ &AINDO < REINITIALISATION DE INDO POUR < CHAQUE APPEL DE FICHIER. LAI 8 STA &AIOCB < LECTURE BINAIRE A PRIORI... LBY &APEN5O < PROGRESSION DE L'OPEN. ADRI 1,A STBY &AIOCB < POUR LA LECTURE SGF. CPZ LGNMFC < LE NOM DU FICHIER EST-IL VIDE ??? JE FCART1 < OUI, ALORS LE FICHIER VA ETRE LU < SUR CARTE EN COMPRESSE. STBY &APEN5O < NON, FICHIER... LBY CLOS5S < PROGRESSION DU CLOSE. ADRI 1,A STBY CLOS5S LBY MASS4S < PROGRESSION !ASSIGN SAVE. ADRI 1,A STBY MASS4S LBY MASS4O < PROGRESSION !ASSIGN OLD. ADRI 1,A STBY MASS4O IF ORDI-"S",XWOR%,,XWOR% TRYOPN: EQU $ XWOR%: VAL 0 LAD AASS5O < OUVRIR LE FICHIER SVC 0 FCART1: EQU $ JE NEREOT < OK, IL EXISTE... IF ORDI-"S",XWOR%,,XWOR% CPZR Y < BOUCLAGE SUR OPEN EN ERREUR ??? JE TRYOPN < OUI... XWOR%: VAL 0 PLR C JMP EREOT < VERS L'ERREUR... ASEND1: JMP CEND11 < RELAIS DE SAUTS AFINAS: JMP FNSFNS < SUPERIEURS A 128 MOTS !!! AC3001: JMP C3001 < RELAI DE JMP>128 MOTS... SYMENS: JMP SYMENT SYMEXS: JMP SYMEXT NEREOT: EQU $ PLR C USE C LAD OPEN5O SVC 0 STZ INDIN < FORCER LA LECTURE LXI 0 LAI 'FF STBY &ABFSGF LXI -32 < REMISE A ZERO NUMEROTATION C1114: EQU $ LAI " " STBY &AZACQ ADRI 1,X LR X,A CPI -26 JL C1114 C3002: EQU $ LA IOCB ET1700: EQU $ LXI -1 STA &ABASC LXI 0 STA &ABASC SLRS 10 < CHANGER LE DEBUT DES BUFFERS LB AZACQ < ET LE NOMBRE DE CARACTERES LYI 80 JAE C3000 LB ABFSG0 IF ORDI-"S",XWOR%,,XWOR% LRM Y WORD LLLBUF*2 XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% LYI LLLBUF*2-1 ADRI 1,Y XWOR%: VAL 0 C3000: EQU $ SLLD 1 STB IOCB+1 STY IOCB+2 C3001: EQU $ < < EDITION DU NOM DU FICHIER ACTIF : < LBY IOCB CPI 1 < FICHIER OU PAS ??? JE ET1709 < PAS FICHIER... LA IOCB4+1 < FICHIER, ALORS LB IOCB4+2 < ON SAVE L'IOCB4... PSR A,B,X PSR C LA COM1 LR A,C USE C,COMM1 LAD NOMFIC SLLS 1 < A=@OCTET DU NOM DE FICHIER. LB LGNMFC < B=LONGUEUR OCTET. PLR C USE C STA IOCB4+1 < MAJ DE L'IOCB4. STB IOCB4+2 LAD IOCB4 WORD LISTIN < EDITION DU NOM DE FICHIER. PLR A,B,X STA IOCB4+1 < RESTAURATION DE L'IOCB4. STB IOCB4+2 BSR SORCLF BSR PAGIN < PAGINATION. ET1709: EQU $ BR ADEP < < R E F / D E F : < SYMEXT: EQU $ < SYMBOLE EXT. LAI 'A5 JMP C116 SYMENT: EQU $ < SYMBOLE ENT. CPI 6 JE ASEND1 < 'OFF'. LAI '3A C116: EQU $ STX ZTR LR A,L < SAUVEGARDE DE A. LXI 0 LAD &ATSYMB < A=ADRESSE DU SYMBOLE. BSR TRASYM < TRANSFERT DANS SYMBOL. BSR SPTAS < PUIS DANS BUF. LR L,A < RESTAURATION DE A. BSR ASPSO2 LXI 1 LB &ATSYMB < MOT VALEUR. LAI '22 BSR ASPSO1 LX ZTR < RESTAURATION DE X. JMP ASEND1 NDS: EQU $ < DIRECTIVE 'NDS'. BSR SORCLF LAI 0 BSR SYMUL C117: EQU $ LAI 1 BSR SYMUL JE SYMUL3 LXI 0 LA &ATSYMB IF ORDI-"T",XWOR%,,XWOR% ANDI 'A0 CPI '80 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% ANDI 'A0 < UNDEF+REF... CPI '80 < UNDEF ??? XWOR%: VAL 0 JNE C118 < ELIMINATION EXT. LAD &ATSYMB < A=ADRESSE SYMBOLE. BSR SORSYM BSR SORCLF C118: EQU $ JMP C117 SYMUL3: EQU $ CPZ NR < EST-CE UNE VRAIE CARETE NDS , < OU UNE CARTE NDS SIMULEE SUITE < A UNE ERREUR '17' ??? JNE AFINAS < NON, ERREUR 17 : ABORT !!! BR ADEP EST: EQU $ < DIRECTIVE 'EST'. LB IOCB4 STB IOCB3 BSR SORSEC C119: EQU $ DST: EQU $ < 'DST' EST INEFFECTIVE... BR ADEP PAGE < < < T R A I T E M E N T D E S A P P E L S D E < P R O C E D U R E S I M P L I C I T E S : < < IF XXXSGN-0,XWOR%7,,XWOR%7 < I N H I B I T I O N : < < < FONCTION : < ON N'APPELLE PAS DE FICHIER < DE PROCEDURES, ET ON REMPLACE < #XXXXX# PAR XXXXX EN REMPLACANT < PAR DES BLANCS LES CARACTERES < DE CODE INFERIEUR A '40 ; AINSI < PAR EXEMPLE #/FLD# DEVIENT FLD... < < EOTINS: EQU $ LX NACQ < (X)=INDEX CARACTERE COURANT : IL POINTE < DERRIERE LE PREMIER '#', ADRI -1,X < RETOUR SUR LE PREMIER '#'... PSR X < ET SAVE... EOTIN1: EQU $ LBY &AZACQ < (A)=CARACTERE COURANT : CPI " " < EST-CE LE PREMIER 'SPACE' ??? JE EOTIN2 < OUI, ON S'ARRETE DESSUS... CPI '40 < EST-CE UNE LETTRE ??? JGE EOTIN3 < OUI, ON LA GARDE... LAI " " < NON : STBY &AZACQ < ON L'EFFACE... EOTIN3: EQU $ ADRI 1,X < AU SUIVANT... LR X,A CPI 80 < FIN DE CARTE ??? JL EOTIN1 < NON... EOTIN2: EQU $ LAI "@" LXI -20 STBY &AZACQ < MISE DE "A-ROND" SUR LE LISTING AFIN < D'INDIQUER AU MOINS UNE GENERATION... PLR X STX NACQ < AFIN DE SE POSITIONNER DEVANT LE MOT-CLEF < QUE L'ON VIENT DE CREER... LR X,Y < (X)=INDEX EMETTEUR, < (Y)=INDEX RECEPTEUR. EOTINA: EQU $ LBY &AZACQ CPI " " < RECHERCHE DU PREMIER CARACTERE (NON " ") < DU NOM DE LA PROCEDURE : JNE EOTIN5 < TROUVE EN (X)... ADRI 1,X < NON, LR X,A CPI 80 JE EOTIN6 < FIN DE CARTE, ON ABANDONNE... JMP EOTINA < PASSAGE AU CARACTERE SUIVANT... EOTIN5: EQU $ CPR X,Y < EMETTEUR=RECEPTEUR ??? JE EOTIN6 < OUI, RIEN A FAIRE... EOTIN7: EQU $ LBY &AZACQ < NON : XR X,Y STBY &AZACQ < ON DECALE LE NOM DE (X)-(Y)... XR X,Y ADRI 1,X ADRI 1,Y CPI " " < EST-ON AU BOUT DU NOM ??? JNE EOTIN7 < NON, ON CONTINUE... LR Y,X < OUI, ON VA ECRASER LES CARACTERES RESI- < DUELS : EOTIN8: EQU $ LBY &AZACQ CPI " " < A-T'ON FINI DE NETTOYER ??? JE EOTIN9 < OUI, ON ARRETE... LAI " " STBY &AZACQ < NON, ON EFFACE... ADRI 1,X JMP EOTIN8 EOTIN9: EQU $ EOTIN6: EQU $ LRM A WORD EOTIN4 PSR A RSR < ET ON VA EN 'EOTIN4' AFIN D'ANA- < LYSER LA COMMANDE... XWOR%7: VAL 0 < < < A U T O R I S A T I O N : < < < FONCTION : < ON SIMUL UN 'CALL', EN METTANT < AU PREALABLE LA CARTE COURANTE EN < CARTE DYNAMIQUE... < < EOTIMP: EQU $ < < MISE DE LA CARTE COURANTE EN DYNAMIQUE : < (ZACQ --> ZZACQ) < LA AZACQ RBT 0 < A=ADRESSE BUFFER CARTE A ASSEMBLER. LR A,B LXI LXZACQ-2/2-1 < X=NOMBRE DE MOTS A DEPLACER. ADRI LXZACQ/2,B < B=ADRESSE DU RECEPTEUR. MOVE < SAUVEGARDE... LXI LXZACQ < INDEX 1ER CARACTERE DE ZZACQ. EY333: EQU $ LBY &AZACQ CPI " " JGE EY332 < OK, C'EST UN CARACTERE... LAI " " < ON REMPLACE TOUS LES STBY &AZACQ < 'CTRL' PAR DES 'SPACE'... < ET EN PARTICULIER R/C LF... EY332: EQU $ ADRI 1,X < AU SUIVANT, LR X,A CPI LXZACQ+80 < S'IL EXISTE... JL EY333 < ET OUI... < < ET TRAITEMENT DES 'EOT' : < LRM A WORD EOTDS PSR A RSR < ET 'GOTO' 'EOTDS'... PAGE IF ORDI-"S",XWOR%,,XWOR% < < < E M P I L E M E N T / D E P I L E M E N T S G F : < < RESGF: EQU $ < DEPILEMENT. USE C,COMM1 LA RDK1+3 ADRI -QUANTA,A STA RDK1+3 DC RDK2+3 LA WDK1+3 ADRI -QUANTA,A STA WDK1+3 DC WDK2+3 RSR SASGF: EQU $ < EMPILEMENT. LA RDK1+3 ADRI QUANTA,A STA RDK1+3 IC RDK2+3 LA WDK1+3 ADRI QUANTA,A STA WDK1+3 IC WDK2+3 USE C RSR XWOR%: VAL 0 PAGE < < < S O U S - P R O G R A M M E S : < < < < < C A L C U L D ' U N E E X P R E S S I O N : < < < NOTA : < AVEC UN OPERATEUR BINAIRE .OP., CE < SOUS-PROGRAMME FAIT LE CALCUL SUIVANT : < SOM <-- (SOM).OP.(VALEUR) < < < NOUVEAUTES : < ON RAJOUTE LES OPERATEURS BINAIRES < SUIVANTS : < < ( .AND. < ? .OR. < ) .EOR. < > DECALAGE DE (SOM) A GAUCHE < SI (VALEUR)>0, ET A DROITE < SINON (PAR SLLS/SLRS) < = 1 - SI LE PREMIER CHIFFRE HEXADECIMAL < DE (VALEUR) EST DIFFERENT DE 'F : < DONNE DANS SOM, LE NOMBRE DE < DECALAGES A DROITE A FAIRE < SUR (SOM) POUR QU'IL N'Y < AIT PLUS DE BITS NULS A < DROITE; < PUIS FAIT : SOM <-- (SOM)+(VALEUR) < EXEMPLE : (SOM)='00E0 < DONNE : SOM <-- 5 < < <F1 GET CARACTERE : < 2 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F1 : SOM <-- CAR(SOM)+LE DEUXIEME < OCTET DE (VALEUR). < < <F2 STORE CARACTERE : < 3 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F2 : CAR(SOM) <-- LE DEUXIEME < OCTET DE (VALEUR), PUIS SOM <-- CAR(SOM). < EXEMPLE : 'CAR'=ABCDEF 1='F134 DONNERA < SOM="B"+'34, ET 2='F241 DONNERA < 'CAR'=ABADEF ET SOM="A"='41. < < <F3 MOVE CHAINE DE CARACTERES : < 4 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F3, ALORS LE DEUXIEME OCTET DE < (VALEUR) DONNE UNE LONGUEUR 'LONG' < EXPRIMEE EN OCTETS, LE PREMIER (RESPEC- < TIVEMENT LE SECOND) OCTET DE SOM < DONNANT L'INDEX D'UNE ZONE EMETTRICE < RESPECTIVEMENT RECEPTRICE) DANS 'CAR', < PUIS FAIT SOM <-- 0. < EXEMPLE : 'CAR'=ABCDEF ALORS '0003='F302 < DONNERA 'CAR'=ABCABF. < < <F4 RECHERCHE D'UN CARACTERE : < 5 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F4, ALORS LE DEUXIEME OCTET DE < (VALEUR) DONNE UN CARACTERE A RECHER- < CHER DANS UNE CHAINE DEFINIE PAR UN < INDEX DE PREMIER CARACTERE A TESTER < (PREMIER OCTET DE (SOM)), ET PAR UN < INDEX DE PREMIER CARACTERE A NE PAS < TESTER (DEUXIEME OCTET DE (SOM)) ; < LORSQUE LE CARACTERE N'EST PAS TROUVE < OU LORSQUE LES INDEX SONT DANS UN < MAUVAIS ORDRE, LE RESULTAT EST L'INDEX < DE FIN, SINON, C'EST L'INDEX DU CARAC- < TERE CHERCHE... < EXEMPLE : 'CAR'=ABCDEF, ALORS : < '0205='F444 DONNERA SOM=4. < < <F5 DEFINITION DU MASQUE COURANT : < 6 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F5, ALORS (SOM) DEVIENT LE < 'MASQUE' COURANT, PUIS SOM RECOIT < L'OCTET DROIT DE (VALEUR) ; < PAR EXEMPLE 'FF00='F501 FAIT : < MASQUE <-- 'FF00, ET SOM <-- '01. < < <F6 CADRAGE SUIVANT LE MASQUE COURANT : < 7 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F6, ALORS (SOM) CONTIENT UNE < VALEUR QUI VA ETRE CADREE DANS LE < MOT SUIVANT LE MASQUE COURANT POUR < DONNER 'V1', PUIS : < SOM <-- (V1)?(V2)+(OCTET DROIT DE Y) < PUIS V2 <-- (SOM) ; 'V2' EST DONC < UN CUMUL DES VALEURS CADREES SUIVANT < DES MASQUES DONNES ; < PAR EXEMPLE : < '0F00='F500+'0003='F600+'000F='F500 < +'0007='F600 DONNERA LA VALEUR FINALE < DANS SOM : '0307. < < <F7 ACCES TABLE DES SYMBOLES : < 8 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F7, ALORS LE PREMIER OCTET DE < (SOM) CONTIENT L'INDEX DU PREMIER < CARACTERE D'UN SYMBOLE DONT LA LONGUEUR < EST CONTENUE DANS LE DEUXIEME OCTET < DE (SOM) ; CE SYMBOLE ETANT EN GENERAL < DANS UNE CARTE DYNAMIQUE ; < <F700 ETAT D'UN SYMBOLE : < 8.1 - SI LE DEUXIEME OCTET DE (VALEUR) < VAUT '00, ELLE RENVOIE L'ETAT DU SYMBOLE < SUIVANT LE FORMAT PRESCRIT PAR LA ROUTINE < 'RETIQ', ET EN PARTICULIER '0000 S'IL < N'EXISTE PAS, ET ENFIN : < SOM <-- 'ETAT SYMBOLE'. < <F701 MODIFICATION DE L'ETAT D'UN SYMBOLE : < 8.2 - SI LE DEUXIEME OCTET DE (VALEUR) < VAUT '01, SI L'ON NOTE 'ES' L'ETAT < DU SYMBOLE, ON FAIT ALORS : < ES <-- (ES.AND.MASK).OR.VAL, OU 'MASK' < ET 'VAL' DESIGNENT RESPECTIVEMENT LE < MASQUE ET LA VALEUR DEFINIS PAR LES < FONCTIONS RESPECTIVES 'F5 ET 'F6. < ENFIN : SOM <-- NOUVEL 'ETAT SYMBOLE'. < < <F8 ACCES AU COMPTE D'ITERATION 'INDO' : < 9 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F8, ALORS : < SOM <-- (SOM)+(DEUXIEME OCTET DE < VALEUR)+(INDO). < < <F9 ACCES AU COMPTE D'ITERATION DES 'EOT' 'SINDO' : < 10 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'F9, ALORS : < SOM <-- (SOM)+(DEUXIEME OCTET DE < VALEUR)+(SINDO). < < IF ORDI-"S",XWOR%,,XWOR% <FA CONVERSIONS ASCI-BINAIRE ET ABSOLUE-TRANSLATABLE : XWOR%: VAL 0 < 11 - SI LE PREMIER COCTET DE (VALEUR) < VAUT 'FA, ALORS DES PROCESSUS DE < CONVERSION SONT DECLENCHES : < <FA00 CONVERSION BINAIRE --> ASCI HEXADECIMAL : < 11.1 - SI LE DEUXIEME OCTET DE (VALEUR) < VAUT '00, ALORS (SOM) EST CONVERTI SOUS < FORME DE 2 CARACTERES ASCI HEXA-DECIMAUX < SI CELA EST POSSIBLE. < <FA01 CONVERSION ASCI HEXADECIMAL --> BIANIRE : < 11.2 - SI LE DEUXIEME OCTET DE (VALEUR) < VAUT '01, ALORS (SOM) EST SUPPOSE CONTENIR < UN CARACTERE ASCI HEXA-DECIMAL QUI < EST ALORS CONVERTI EN BINAIRE. IF ORDI-"S",XWOR%,,XWOR% < <FA02 CONVERSION TRANSLATABLE-ABSOLUE : < 11.3 - L'EXPRESSION 'SOM' COURANTE < EST FORCEE EN MODE 'ABSOLU'. < <FA03 CONVERSION ABSOLUE-TRANSLATABLE : < 11.4 - L'EXPRESSION 'SOM' COURANTE < EST FORCEE EN MODE 'TRANSLATABLE'. XWOR%: VAL 0 < < <FB EXECUTION D'UNE INSTRUCTION : < 12 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'FB, ALORS : < A <-- (SOM), < Y <-- (DEUXIEME OCTET DE VALEUR), < B <-- 0, < X <-- 0, < PUIS ON EXECUTE LE CONTENU DU MASQUE < COURANT QUI EST SUPPOSE CONTENIR UNE < INSTRUCTION DONNANT SON RESULTAT DANS < LE REGISTRE A, PUIS FAIT : < A <-- (A).EORR.(B), < A <-- (A).EORR.(X), PERMETTANT AINSI < D'EXECUTER DES INSTRUCTIONS FOURNISSANT < LEUR RESULTAT DANS UN SEUL DES 3 REGISTRES < A, B OU X ; EXEMPLE : < '1E15='F500(0+'3000='FB00)'3000 DONNERA LE < CONTENU DE LA MEMOIRE D'ADRESSE < ABSOLUE '3000. < < <FC INTERPRETATION D'UNE SEQUENCE EN LANGAGE MACHINE : < 13 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'FC, ALORS : < A <-- SOM, < L'ASSEMBLEUR FAIT UN 'BSR' A UN SOUS- < PROGRAMME QU'IL SUPPOSE GENERE EN < BINAIRE DANS LA CARTE DYNAMIQUE PAR < LE PROGRAMME UTILISATEUR, ET DONT LE < POINT D'ENTREE SUPPOSE EST A L'ADRESSE < ADRESSE-CARTE-DYNAMIQUE A LAQUELLE < EST AJOUTEE LE DEUXIEME OCTET DE < (VALEUR). IF ORDI-"S",XWOR%,,XWOR% < < <FD RESTE D'UNE DIVISION ENTIERE : < 14 - SI LE PREMIER OCTET DE (VALEUR) VAUT < 'FD, ALORS : < A <-- (SOM)+(DEUXIEME OCTET DE VALEUR)+(R), < OU (R) VAUT 0 OU LE DERNIER RESTE DE < DIVISION ENTIERE DANS CETTE < EXPRESSION. < < <FE PUSH/PULL : < 15 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'FE, ALORS DES VALEURS DE (SOM) < PEUVENT ETRE EMPILEES/DEPILEES : < <FE00 PUSH : < 15.1 - LA PILE 'PUSPUL' <-- (SOM). < <FE01 PULL : < 15.2 - SOM <-- (LA VALEUR DEPILEE DE < LA PILE 'PUSPUL')+(SOM). < <FE02 PULL-EXU : < 15.3 - SOM RESTE SOM,... MAIS < LA VALEUR DEPILEE DEVIENT LA NOUVELLE < OPERANDE DROITE DE "=", ET ON RETRAITE < L'OPERATEUR "=" AVEC 'SOM'='VALEUR < DEPILEE'. < < <FF SIGNE D'UNE EXPRESSION : < 16 - SI LE PREMIER OCTET DE (VALEUR) < VAUT 'FF, ALORS : < SOM <-- (S)+(DEUXIEME OCTET DE < VALEUR), OU : < S=-1 SI (SOM)<0, < S=0 SI (SOM)=0, < S=+1 SI (SOM)>0. XWOR%: VAL 0 < < < < RECHERCHE DES SOUS-FONCTIONS DE 'F7 : < MEWOPA: EQU $ XR A,Y ANDI 'FF < ACCES A LA "SOUS-FONCTION"... CPI '00 XR A,Y < RESTAURE A=ETAT SYMBOLE... JE MEWOPB < SOUS-FONCTION '00, C'EST FINI... JAE NEWOPS < LE SYMBOLE N'EXISTANT PAS, ON REFUSE < TOUTE SOUS-FONCTION... LR Y,A CPI 1 JNE NEWOPS < ERREUR DE SOUS-FONCTION... < < MISE A JOUR DE L'ETAT D'UN SYMBOLE : < LA NIV < SAVE 'NIV'... PSR A,B,X LA NIVSYM < ADRESSE VIRTUELLE DU SYMBOLE. STA NIV LXI 0 FLD &ATSY11 PSR A,B < SAVE LE DEBUT DE 'ZONSYM1'. FLD &ATSYMB < ANCIEN ETAT... AND FLOMAS < APPLICATION DU MASQUE... OR FLOVAL < MISE A JOUR... FST &ATSY11 LR A,Y < SAVE LE NOUVEL ETAT. BSR MODSB < MISE A JOUR TABLE DES SYMBOLES... PLR A,B FST &ATSY11 PLR A,B,X STA NIV LR Y,A < A <-- NOUVEL ETAT. LYI 0 JMP MEWOPB < VERS SOM <-- NOUVEL ETAT. < < ACCES A L'ETAT D'UN SYMBOLE : < NEWOPV: EQU $ LA SOM ANDI 'FF < A=LONGUEUR PRESUMEE DU SYMBOLE. JAE NEWOPS < LONGUEUR NULLE : ERREUR... CPI 6 JG NEWOPS < TROP LONG : ERREUR... PSR X,Y,B < PRUDENCE... LR A,B < B=NOMBRE DE CARACTERES DU SYMBOLE. ADRI 1,A SLRS 1 STA LG < ARGUMENT DE 'RETIQ'. LXI 3 NEWOPY: EQU $ STZ &ASYMB < RAZ DE LA ZONE 'SYMB'. JDX NEWOPY LBY SOM LR A,X < X=INDEX DU PREMIER CARACTERE. ADRI LXZACQ,X < POUR ACCES A ZZACQ... LYI 2 < Y=INDEX DE LA ZONE 'SYMBOL'. NEWOPW: EQU $ LBY &AZACQ < TRANSFERT DU NOM DU SYMBOLE... XR X,Y STBY &ASYMB XR X,Y ADRI 1,X ADRI 1,Y ADRI -1,B CPZR B < EST-CE FINI... JG NEWOPW < NON, AU CARACTERE SUIVANT... BSR RETIQ < OUI, TEST DU SYMBOLE... (RESULAT < DANS LE REGISTRE A...) LXI 3 NEWOPX: EQU $ STZ &ASYMB < RAZ DE LA ZONE 'SYMB'. JDX NEWOPX PLR X,Y,B JMP MEWOPA < VERS LE TEST DES SOUS-FONCTIONS. MEWOPB: JMP NEWOPT NEWOPU: JMP NEWOPV < < MASQUES ET VALEURS : < NEWOPN: EQU $ < DEFINITION DU MASQUE COURANT. LA SOM STA FLOMAS < SAVE LE MASQUE COURANT. LAI 'FF ANDR A,Y < Y=OCTET DROIT DE 'VALEUR'. JMP NEWOPP < VERS SOM <-- 0+(OCTET DROIT DE Y). NEWOPO: EQU $ PSR X LA FLOMAS < A=MASQUE COURANT. LXI 16 < POUR TESTER LES 16 BITS DE (A). NEWOPQ: EQU $ TBT 32-1,X < TEST DE (A) PAR LA DROITE. JC NEWOPR < ON S'ARRETE SUR LE PREMIER A '1'. JDX NEWOPQ < PAS ENCORE TROUVE... NEWOPR: EQU $ ADRI -16,X NGR X,X < X=POSITION DU MASQUE A DROITE. SLRS 0,X < CADRAGE A DROITE DU MASQUE. EORI 'FFFF < ET ON PREND SON COMPLEMENT. AND SOM < TEST DE LA VALEUR PAR RAPPORT < AU MASQUE COURANT. JANE NEWOPS < ERREUR, LA VALEUR NE TIENT PAS DANS < LE MASQUE COURANT. LAI 'FF ANDR A,Y < ON NE CONSERVE QUE L'OCTET DROIT < DE LA VALEUR (Y). LA SOM SLLS 0,X < CADRAGE DE LA VALEUR SUIVANT LE MASQUE. OR FLOVAL < CUMUL PAR UN 'OU'. STA FLOVAL < 'A' CONTIENT LE NOUVEAU CUMUL. PLR X JMP NEWOPT < VERS : SOM <-- NOUVEAU CUMUL+OCTET < DROIT DE Y. NEWOPS: EQU $ LAI 2 BR MERR < < RECHERCHE D'UN CARACTERE : < NEWOPK: EQU $ PSR X LA SOM LBI 'FF ANDR A,B < B=INDEX DU 1ER OCTET A NE PAS TESTER. LBY SOM LR A,X < X=INDEX DU 1ER OCTET A TESTER. ADRI LXZACQ,X < POUR ATTEINDRE ZZACQ, ADRI LXZACQ,B < DE MEME... LAI 'FF ANDR Y,A < A=CARACTERE RECHERCHE... NEWOPL: EQU $ CPR B,X < EST-CE FINI ??? JGE NEWOPM < OUI, (X)>=(B), PAS TROUVE... CPBY &AZACQ < NON... JE NEWOPM < OK, ON L'A TROUVE... ADRI 1,X < NON, AU SUIVANT... JMP NEWOPL NEWOPM: EQU $ LYI 0 LR X,A ADRI -LXZACQ,A < FUTURE VALEUR DE 'SOM'. PLR X JMP C125 < POUR FAIRE SOM <-- (INDEX CARACTERE). < < MOUVEMENT DE CHAINE DANS 'CAR' : < NEWOPH: EQU $ PSR X LAI '00FF ANDR A,Y < Y=LONGUEUR DE LA CHAINE A DEPLACER. LA SOM LBI 0 SCLD 8 < B=INDEX ZONE EMETTRICE, SWBR A,X < X=INDEX ZONE RECEPTRICE. ADRI LXZACQ,X < POUR ATTEINDRE ZZACQ, ADRI LXZACQ,B < DE MEME... NEWOPI: EQU $ CPZR Y < FINI ??? JE NEWOPJ < OUI, A NOTER (Y)=0... XR B,X < NON, ON DEEPLACE... LBY &AZACQ < ACCES A L'EMETTEUR... XR B,X STBY &AZACQ < ET ENVOI AU RECEPTEUR... ADRI 1,X < PROGRESSION ADRI 1,B < DES INDEX, ADRI -1,Y < ET DECOMPTAGE. JMP NEWOPI < AU SUIVANT... NEWOPJ: EQU $ PLR X NEWOPP: EQU $ LAI 0 < POUR FAIRE SOM <-- 0. NEWOPT: EQU $ JMP C125 NEWOP2: EQU $ LA SIGN1 < DISCRIMINATION DE L'OPERATEUR... JAE NEWOP3 < 0 : MULTIPLICATION. CPI 1 JE NEWOP4 < 1 : DIVISION. CPI "(" JE NEWOP5 < ( : .AND. CPI "?" JE NEWOP6 < ? : .OR. CPI ")" JE NEWOP7 < ) : .EOR. CPI ">" JE NEWOP8 < > : DECALAGE. CPI "=" JE NEWOP9 < = : NOMBRE DE DECALAGE. ACTD < E R R E U R P R O G R A M M E !!! < < .AND. < NEWOP5: EQU $ LA SOM ANDR Y,A JMP C126 < SOM <-- (SOM).AND.(VALEUR) < < .OR. < NEWOP6: EQU $ LA SOM ORR Y,A JMP C126 < SOM <-- (SOM).OR.(VALEUR) < < .EOR. < NEWOP7: EQU $ LA SOM EORR Y,A JMP C126 < SOM <-- (SOM).EOR.(VALEUR) < < DECALAGE : < NEWOP8: EQU $ XR X,Y < X=(VALEUR) LA SOM CPZR X < A DROITE OU A GAUCHE ??? JL NEWOPA < A DROITE, SLLS 0,X < A GAUCHE. JMP NEWOPB NEWOPA: EQU $ NGR X,X < CALCUL DE ABS(X). SLRS 0,X < DECALAGE A DROITE. NGR X,X < RESTAURE X. NEWOPB: EQU $ XR X,Y < RESTAURE X ET Y. JMP C126 < SOM <-- (SOM) DECALE DE (VALEUR). < < GESTION DE CAR(SOM) : < NEWOPE: EQU $ NEWOPG: EQU $ < STORE 'CAR'. LAI 'FF ANDR Y,A < CARACTERE A METTRE EN CAR(SOM). LB SOM < INDEX DE RANGEMENT. XR B,X ADRI LXZACQ,X < PASSAGE A ZZACQ, STBY &AZACQ < MISE DANS ZZACQ. LYI 0 < AFIN DE FAIRE : SOM <-- CAR(SOM)+0. JMP C403 NEWOPF: EQU $ < GET 'CAR'. LAI 'FF ANDR A,Y < VALEUR <-- (VALEUR).AND.'00FF. LB SOM < INDEX DE LA CHAINE DE CARACTERES. XR B,X ADRI LXZACQ,X < PASSAGE A ZZACQ, LBY &AZACQ < ACCES A ZZACQ. C403: EQU $ ADRI -LXZACQ,X < RETOUR A ZACQ. XR B,X JMP C125 < VERS SOM <-- CAR(SOM)+(VALEUR), < AVEC (A)=CAR(SOM), (Y)=(VALEUR). < < CALCUL D'UN NOMBRE DE DECALAGES A FAIRE OU GESTION DE 'CAR' : < NEWOP9: EQU $ SWBR Y,A ANDI 'FF < POUR CHOISIR LA FONCTION... CPI 'F7 JE NEWOPU < VERS LE TEST 'SYMBOLE'... CPI 'F5 JE NEWOPN < DEFINITION DU MASQUE COURANT. CPI 'F6 JE NEWOPO < CADRAGE D'UNE VALEUR DANS < LE MASQUE COURANT. CPI 'F1 JE NEWOPF < GET 'CAR'. CPI 'F2 JE NEWOPG < STORE 'CAR'. CPI 'F3 JE NEWOPH < MOVE 'CAR'. CPI 'F4 JE NEWOPK < RECHERCHE CARACTERE. CPI 'F0 JGE EDALEX < ERREUR... PSR X LXI 16 < POUR TESTER LES 16 BITS. LA SOM NEWOPC: EQU $ TBT 32-1,X < TEST DU BIT (X)-1 DANS SOM. JC NEWOPD < ON S'ARRETE SUR LE 1ER '1'. JDX NEWOPC < BIT PRECEDENT... NEWOPD: EQU $ ADRI -16,X NGR X,X LR X,A < CE NOMBRE DE DECALAGE DEVIENT < LE SOM PROVISOIRE, PLR X JMP C125 < VERS SOM <-- (SOM)+(VALEUR) < < P O I N T D ' E N T R E E : < PCALEX: EQU $ < CALCUL D'EXPRESSION. STZ FLOMAS < INITIALISATIONS DU MASQUE ET DU STZ FLOVAL < CUMUL COURANT, EN PRIANT DIEU POUR < QU'ON N'AIT PAS SIMULTANEMENT DES < MASQUES ET DU FLOTTANT !!! MAIS POUR < CELA, IL FAUDRAIT ETRE VICIEUX... IF ORDI-"S",XWOR%,,XWOR% STZ FLORES XWOR%: VAL 0 LXI LCALEX STZ &INCALE JDX $-1 C123: EQU $ BSR MACQ JAL EEALEX STZ INDICA JAE TYPLET CPI 2 JE TIPCOM CPI 1 JE TYPFIN LY VALEUR < TERME ABSOLU. C124: EQU $ IC INBRE TYPABS: EQU $ LA SOM CPZ SIGNE JE MULTIP < MULTIPLICATION OU DIVISION. JG C125 NGR Y,Y C125: EQU $ ADR Y,A C126: EQU $ STA SOM SUIMUL: EQU $ LA CARLU CPI '20 JE C134 < 'ESPACE'. CPI '2C JE C134 < 'VIRGULE'. JMP C123 MULTIP: EQU $ CPZ INDICA JNE EEALEX < MULTIPLICATEUR OU DIVISEUR < NON ABSOLU. IF ORDI-"S",XWOR%,,XWOR% LRM A WORD 'FA02 CPR A,Y < EST-CE CONVERSION TRANSLATABLE --> < ABSOLU ??? JE NEWOP2 < OUI, ALORS LA PREMIERE PARTIE PEUT < ETRE TRANSLATABLE... XWOR%: VAL 0 CPZ SIGMA JNE EEALEX < MULTIPLICANDE OU DIVIDENDE < NON ABSOLU. STY VALEUR JMP NEWOP2 < VERS LA DISCRIMINATION DES < OPERATEURS. < < MULTIPLICATION : < NEWOP3: EQU $ LA SOM MP VALEUR JAE C127 CPI -1 GEALEX: JNE EEALEX < RESULTAT NON SUR 16 BITS. C127: EQU $ STB SOM JMP SUIMUL < < DIVISION : < NEWOP4: EQU $ LA SOM DIVIS: EQU $ SARD 16 < B=POIDS FAIBLES. DV VALEUR JV EEALEX < DIVISION IMPOSSIBLE (/0) !!! IF ORDI-"S",XWOR%,,XWOR% INDYN: EQU $ < ZONE D'INSTRUCTIONS DYNAMIQUES : CPZR B < CAS DE 'TRN'... JNE GEALEX < ERREUR, SI RESTE#0 !!! XWOR%1: VAL '0000000@@@@ FEALEX: EQU ZERO+XWOR%1 < POUR TRANSMETTRE LE CODE DU 'JNE' A < LA SEQUENCE DE 'TRN'... $EQU INDYN STB FLORES < MEMORISATION DU RESTE COURANT : C'EST NOP < L'OPTION IMPLICITE ET 'NTRN'... XWOR%: VAL 0 JMP C126 TYPLET: EQU $ < SUITE DE LETTRES. BSR RETIQ JAE C132 < LE SYMBOLE N'APPARTIENT PAS < A TSYMB. LXI 1 LY &ATSYMB < MOT VALEUR. ANDI 'FFFC JAE C138 < ETIQUETTE DE LA PHRASE EN COURS TBT 8 JC NONDEF < NON DEFINI. TBT 9 JC C124 < SYMBOLE ABSOLU. CPI 4 JNE C128 LX VALDIR < 'OFF'. ADRI -8,X CPZR X JNE EEALEX < NON UTILISE AVEC 'USE'. C128: EQU $ SLRD 8 XR A,B < B=NUMERO DE SECTION. COMAS: EQU $ CPZ RANG JNE PAPREM TBT 3 < 1ER ELEMENT. JNC C129 DC INDSEC < SYMBOLE APPARTIENT A 'DSEC'. C129: EQU $ STB NSEC < NSEC=NUMERO DE SECTION. PRESER: EQU $ SCRD 8 STA COMDE < COMDE=MOT DE COMMANDE. LA RANG < SAUVEGARDE RANG DE L'ELEMENT. STA RANG1 CPZ SIGNE REPAS: EQU $ JL ECALEX C130: EQU $ LA SIGNE AD SIGMA STA SIGMA IC INDICA IC RANG JMP C124 < < SUITE DE L'IDENTIFICATION DES FONCTIONS : < EDALEX: EQU $ CPI 'F8 JE NEVOP1 < ACCES A 'INDO'. CPI 'F9 JE NEVOP2 < ACCES A 'SINDO'. JG NEVOP4 < FONCTIONS SUPERIEURES A 'F9. EEALEX: JMP ECALEX < ERREUR, FONCTION NON RECONNUE... TIPCOM: JMP TYPCOM < RELAI... < < ACCES AU COMPTE D'ITERATIONS SUR 'EOT' : < NEVOP2: EQU $ LAI 'FF ANDR Y,A < A=2EME OCTET DE 'VALEUR'. PSR C LY COM1 LR Y,C < POUR BASER 'SINDO'... USE C,COMM1 AD SINDO PLR C USE C JMP NEVOP3 < VERS LA SUITE DU CALCUL... < < ACCES AU COMPTE D'ITERATIONS SUR INSTRUCTIONS AUTRES QUE 'EOT' : < NEVOP1: EQU $ LAI 'FF ANDR Y,A < A=2EME OCTET DE 'VALEUR'. AD INDO NEVOP3: EQU $ AD SOM < CUMUL... NEVOP8: EQU $ JMP C126 < VERS LA SORTIE... PAPREM: EQU $ < AUTRES ELEMENTS. TBT 3 JC C131 < APPARTIENT A 'DSEC'. CPZ INDSEC < MELANGES INTERDIT SI NEGATIF. JMP C130 < 'ASSYS' : MELANGES AUTORISES !!! C131: EQU $ LA NSEC CPR A,B JMP C130 C132: EQU $ BSR INSET LBI 1 BSR IUSY NONDEF: EQU $ < NON DEFINI. LA NIVSYM LXI 0 LB &ATSYMB CP NETIQ JE TYPCOM < ETIQUETTE DE LA PHRASE EN COURS. STA NIV < SAUVEGARDES. STB MOT1 STY MOT2 STB &ATSY11 LXI 1 LX &ATSYMB STX &ATSY12 CPZ RANG JNE ECALEX < CE N'EST PAS LE 1ER ELEMENT. TBT 26 JNC C133 IC INDSEC < REFERENCE EXTERNE. BSR SPTAS < MEMORISATION SYMBOLE DANS BUF. C133: EQU $ XR A,B LYI 0 JMP C129 TYPFIN: EQU $ < FIN DE PHRASE. DC NACQ C134: EQU $ LA SIGMA SLRS 1 JANE ECALEX < SIGMA DIFFERENT DE 0 ET 1. JC C137 CPZ NIV < SIGMA=0 JNE ECALEX C135: EQU $ LA SIGMA C136: EQU $ RSR ECALEX: EQU $ < EXPRESSION INCORRECTE. LAI 2 BR MERR C137: EQU $ CPZ RANG1 JNE ECALEX < ELEMENT TRANSLATABLE NON EN < TETE DE L'EXPRESSION. CPZ INDSEC < SIGMA=1. JLE C135 LAI -1 STA SIGMA JMP C136 TYPCOM: LAI 0 < COMPTEZUR D'ASSEMBLAGE. C138: EQU $ CPZ SITUAT JLE C139 SBT 3 < SECTION 'DSEC' EN COURS. C139: EQU $ JGE C140 SBT 4 < SECTION 'PROG' EN COURS. C140: EQU $ LB SECOUR LY PAS JMP COMAS < < SUITE DES FONCTIONS : < NEVOP4: EQU $ CPI 'FA JE NEVOP5 < CONVERSIONS ASCI <--> HEXA. CPI 'FB JE NEVOP9 < EXECUTION D'UNE INSTRUCTION. CPI 'FC JE NEVOPA < VERS L'INTERPRETATION SOUS-PROGRAMME. IF ORDI-"S",XWOR%,,XWOR% CPI 'FD JE NEVOPB < DERNIER RESTE DE DIVISION. CPI 'FE JE NEVOPC < PUSH/PULL. CPI 'FF JE NEVOPE < SIGNE D'UNE EXPRESSION. XWOR%: VAL 0 JMP ECALEX < ERREUR... < < CONVERSIONS ASCI <--> HEXA : < NEVOP5: EQU $ LR Y,A < A=FONCTION DEMANDEE, ANDI '00FF < A=SOUS-FONCTION DEMANDEE. JAE NEVOP6 < CONVERSION BINAIRE --> ASCI. IF ORDI-"S",XWOR%,,XWOR% CPI 2 JGE CONTA < PEUT-ETRE TRANSLATABLE-ABSOLU ??? XWOR%: VAL 0 < < CONVERSION ASCI --> BINAIRE (SUR 1 CHIFFRE) : < LA SOM < VALEUR A CONVERTIR. ADRI -"0",A < CONVERSION PRIMAIRE. JAL ECALEX < ERREUR... CPI 9 < CHIFFRE ??? JLE NEVOP7 < OUI... ADRI -"A"+"9"+1,A < LETTRE PEUT-ETRE... CPI 'A < VALIDATION. JL ECALEX < ERREUR... CPI 'F < VALIDATION. JG ECALEX < ERREUR... NEVOP7: EQU $ JMP NEVOP8 < OK, (A) EST LA VALEUR CONVERTIE. < < CONVERSION BINAIRE --> ASCI (2 CHIFFRES) : < NEVOP6: EQU $ LA SOM SLRD 8 < L'OCTET0 DE B RECOIT LES 2 CHIFFRES. JANE ECALEX < ERREUR, PLUS DE 2 CHIFFRES. PSR X LX ZTR < SAVE ZTR... BSR HEXA2 < CONVERSION DANS A. STX ZTR < RESTAURE ZTR... PLR X JMP NEVOP8 < OK, (A) EST LA VALEUR CONVERTIE. < < EXECUTION D'UNE INSTRUCTION SANS VERIFICATION : < NEVOP9: EQU $ PSR W LAI 'FF ANDR A,Y < Y <-- DEUXIEME OCTET DE (VALEUR). LBI 0 < POUR SAVOIR SI 'B', LXI 0 < OU 'X' SONT MODIFIES. LRPW: LRP W LA FLOMAS < A=INSTRUCTION PRESUMEE. WORD STA4W < MISE EN PLACE DE L'INSTRUCTION. LA SOM < A <-- (SOM). JMPDOL: JMP $ < I N S T R U C T I O N VARIABLE... ASTA4W: STA JMPDOL-LRPW,W < INSTRUCTION VARIABLE. STA4W: EQU ZERO+'00@@@@ < RECUPERATION DU CODE DU 'STA'. $EQU ASTA4W < QUE L'ON ANNULE... EORR B,A < ON SUPERPOSE 'B' ET 'X' A 'A', SUPPOSANT EORR X,A < QU'UN SEUL D'ENTRE-EUX A ETE MODIFIE. PLR W JMP NEVOP8 < OK, (A) EST PRESUME BON. < < EXECUTION D'UN SOUS-PROGRAMME GENERE DYNAMIQUEMENT < EN CARTE DYNAMIQUE PAR L'UTILISATEUR : < NEVOPA: EQU $ LXI 'FF ANDR Y,X < X=INDEX DU POINT D'ENTREE DU S/P < DANS LA CARTE DYNAMIQUE, ADRI LXZACQ/2,X < ET TRANSLATION D'ACCES A LA < CARTE DYNAMIQUE. LAD &AZACQ < A=ADRESSE DU POINT D'ENTREE, STA 'FF80,C < QUE L'ON MET DANS LE PREMIER DU < COMON RESERVE A L'OPERATEUR FLOTTANT. LA SOM < A=ARGUMENT DU SOUS-PROGRAMME. BSR 'FF80,C < ET ON Y VA... NEVOQ8: JMP NEVOP8 < OK, (A)=RESULTAT DU S/P. IF ORDI-"S",XWOR%,,XWOR% < < DERNIER RESTE DE DIVISION ENTIERE : < NEVOPB: EQU $ LAI 'FF ANDR Y,A < A=OCTET SUIVANT LA FONCTION. AD FLORES < AUQUEL ON AJOUTE LE RESTE COURANT OU 0. NEVOQ3: JMP NEVOP3 < VERS : SOM <-- (A)+(SOM). < < PUSH/PULL : < NEVOPC: EQU $ LR Y,A ANDI '00FF < A=FONCTION DEMANDEE. LRM Y WORD PUSPUL < Y=@DE LA PILE PUSH/PULL. JAE NEVOPD < UN 'PUSH' (0) EST DEMANDE. CPI 2 < EST-CE UN 'PULL' ??? LR A,B < SAVE LE CODE 1/2 DU 'PULL'. JG ECALEX < NON, ERREUR... PULL < EXECUTION D'UN 'PULL' DANS 'A'. JV ECALEX < ERREUR, LA PILE EST VIDE... XR A,B CPI 1 < EST-CE UN 'PULL' NORMAL ??? XR A,B JE NEVOQ3 < OUI, VERS SOM <-- (SOM)+(A). LR A,Y < NON, C'EST UN 'PULL-EXU', ALORS < LA VALEUR DEPILEE DEVIENT LA < NOUVELLE OPERANDE DROITE DE "=". LRM A WORD AAEXU AEXU: ADRP A < QUE NE FAUT-IL PAS FAIRE POUR < EXECUTER UN GRAND SAUT... XWOR%1: VAL NEWOP9-AEXU < AMPLITUDE DU SAUT... AAEXU: EQU ZERO+XWOR%1 < CAR REFERENCE EN AVANT... NEVOPD: EQU $ LA SOM PUSH < EXECUTION DE 'PUSH' (SOM). JV ECALEX < ERREUR, LA PILE EST PLEINE... JMP NEVOQ8 < OK, VERS SOM <-- (SOM). < < SIGNE D'UNE EXPRESSION : < NEVOPE: EQU $ LAI 'FF ANDR Y,A < A=DEUXIEME OCTET DE (VALEUR). CPZ SOM < TEST DU SIGNE... SBCR A < -1 SI (SOM)<0. CPZ SOM < RESTEST DU SIGNE A CAUSE DE 'SBCR'. JLE NEVOQ8 < VERS SOM <-- (A). ADRI 1,A < +1 SI (SOM)>0. JMP NEVOQ8 < VERS SOM <-- (A). IF ORDI-"S",XWOR%,,XWOR% < < CONVERSIONS TRANSLATABLE-ABSOLUE : < CONTA: EQU $ STZ SIGMA < SIGMA=0 : ABSOLU A PRIORI... JE CONTA1 < 2 ==> ABSOLU... CPI 3 JG ECALEX < ERREUR DE SOUS-FONCTION... IC SIGMA < 3 ==> SIGMA=1 : TRANSLATABLE... CONTA1: EQU $ LAI '0008 STA COMDE < "DEJA CHAINE"... LA SECOUR STA NSEC STBY COMDE < NUMERO DE SECTION... LA SOM JMP NEVOQ8 < VERS SOM <-- (SOM)... XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% CONTA: EQU ECALEX < ERREUR... XWOR%: VAL 0 XWOR%: VAL 0 PAGE < < < M O D U L E D ' A C Q U I S I T I O N : < < < < TRAITEMENT DES NOUVEAUX OPERATEURS BINAIRES : < NEWOP1: EQU $ STA SIGN1 < SIGN1=CODE ASCI DE L'OPERATEUR. LAI -2 STA SIGNE < SIGNE=-2 : * / ! ? @ > = JMP NEWCAR < AU CARACTERE SUIVANT. < < POINT D'ENTREE : < PMACQ: EQU $ LXI LMACQ STZ &INMACQ JDX $-1 LYI -2 PMACQ1: EQU $ LX NACQ LR X,A CPI 80 < FIN DE CARTE? JL C2200 LAI 0 < AFIN D'ALLER A 'FINPH'... JMP PHINPH C2200: EQU $ LBY &AZACQ C2201: EQU $ STA CARLU CPZ ETAT JNE APRES CPI "(" JE NEWOP1 < .AND. CPI "?" JE NEWOP1 < .OR. CPI ")" JE NEWOP1 < .EOR. CPI ">" JE NEWOP1 < DECALAGE CPI "=" JE NEWOP1 < NBRE DE DECALAGES CPI '3B < TEST ';'. JE POIVRE < POINT-VIRGULE RECONNU. CPI '26 < TEST '&'. JE INDIR < CARACTERE D'INDIRECTION RECONNU. CPI '27 < TEST ''' JE HEXA < INDICATIF NBRE HEXA RECONNU. CPI '24 < TEST DU "$" ??? JE COMPAS < COMPTEUR D'ASSEMBLAGE RECONNU. CPI '23 < TEST '#'. JE COMUT CPI '2C < TEST ','. JE FNBR1 < OMISSION DU CHIFFRE 0. CPI '2F < TEST DU '/'. JE SLASH < DIVISION RECONNUE. APRES: EQU $ SBT 8 CPI '8D < TEST R/C. JE C141 < R / C RECONNU. ANDI '3F C141: EQU $ LR A,B LXI LTABTY C142: EQU $ LBY &ATABLG SBR B,A JAG C143 JDX C142 C143: EQU $ LBY &ATABTY AD ETAT PHINPH: EQU $ CPI 25 LR A,X LA CARLU JG CCHAIN BR &ATARUP POIVRE: EQU $ < POINT-VIRGULE. LA VALDIR CPI 22 JE C144 < SUR 'WORD'. CPI 20 JNE EMACQ C144: EQU $ IC PVIR < OU SUR 'BYTE'. LA CARLU JMP APRES INDIR: EQU $ < INDIRECTION RECONNU. CPZ NLIG JNE EMACQ ADRI 1,X STX &KSTOR3 LA BINARY SBT 2 STA BINARY JMP NEWCAR DECIM: EQU $ < DEBUT NBRE DECIMAL. ANDI 'F STA VALEUR LAI 10 C145: EQU $ LBI 16 C146: EQU $ STA CSTE C147: EQU $ STB ETAT NEWCAR: EQU $ IC NACQ JMP PMACQ1 HEXA: EQU $ < DEBUT NBRE HEXADECIMAL. IC INDHEX LAI 16 JMP C145 CNBRE: EQU $ < CONTINUATION D'UN NBRE. ANDI 'F C148: EQU $ LR A,X LA CSTE CPI 10 LA VALEUR JNE C149 CP M3277 JGE EMACQ C149: EQU $ MP CSTE JANE EMACQ ADR X,B STB VALEUR JNV NEWCAR LIMDEC: EQU $ < TEST LIMITE SI DECIMAL. SLLD 19 JANE EMACQ < LIMITE (32.768) DEPASSEE. CPZ SIGNE JGE EMACQ < SIGNE PLUS. JMP NEWCAR CNBR1: EQU $ < CONTINUATION NBRE HEXA. CPZ INDHEX JE EMACQ ANDI '1F JAE EMACQ < CAS DU 'A-ROND'... CPI 6 JG EMACQ ADRI 9,A JMP C148 SUILT1: EQU $ < CHIFFRE DANS SUITE DE LETTRES. IC INDICA SUILT: EQU $ < SUITE DE LETTRES. LX LG ADRI 2,X LBI 8 CPR X,B JE EMACQ STBY &ASYMB ANDI '1F LR A,B SLLD 26 ADRI -2,X CPZR X JE C150 SLRD 5 JDX $-1 C150: EQU $ OR COND STA COND LA COND+1 ORR A,B STB COND+1 IC LG LBI 8 JMP C147 SLASH: EQU $ IC SIGN1 LAI 2 CSIGNE: EQU $ < SIGNE. CPZ SIGNE JNE EMACQ ANDI 3 ADRI -4,A STA SIGNE JMP NEWCAR EXCLAM: CPI '8D JE EMACQ CCHAIN: EQU $ CPZ INDASC JNE NEWCAR < DIRECTIVES 'ASCI' ET 'IDP'. JMP C148 < ELEMENT ABSOLU. FNBRE: EQU $ < FIN D'UN NBRE. DC NACQ JMP FNBR1 FSUILT: EQU $ < FIN D'UNE SUITE DE LETTRES. DC NACQ JMP FSUIL1 CHAIN: EQU $ < DEBUT CAHINE DE CARACTERES. LA NACQ STA NACQ1 LAI 0 SBT 7 < A=256 LBI 24 JMP C146 FCHAIN: EQU $ LA INDASC < Y=4 : CHAINE DE CARACTERES. ADR A,Y FNBR1: EQU $ ADRI 1,Y < Y=3 : ELEMENT ABSOLU. COMPAS: EQU $ ADRI 1,Y < Y=2 : $. FINPH: EQU $ ADRI 1,Y < Y=1 : FIN DE PHRASE. FSUIL1: EQU $ ADRI 1,Y < Y=0 : SUITE DE LETTRES. COMUT: EQU $ ADRI 1,Y < Y=-1 : #. IF ORDI-"S",XWOR%,,XWOR% JMP ETIQX ETIQ: EQU $ LX NACQ ADRI 1,X LBY &AZACQ < A=CARACTERE COURANT, STZ VALEQU < REDEFINITION A PRIORI... CPI ":" < EST-CE UN DEUXIEME ":" ??? JNE ETIQX < NON... IC VALEQU < OUI, PAS DE REDEFINITION POSSIBLE, IC NACQ < ET ON LE SAUTE... ETIQX: EQU $ XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% ETIQ: EQU $ XWOR%: VAL 0 LA LG < Y=-2 : ETIQUETTE. ADRI 1,A SLRS 1 STA LG IC NACQ CPZ SIGNE JE C151 IC SIGNE C151: EQU $ IC SIGNE < SIGNE=1(+),0,-1(-). LR Y,A RSR EMACQ: EQU $ < ERREUR DE SYNTAXE. LAI 1 BR MERR PAGE < < < INSERTION D'UN SYMBOLE < PARAM : LG,SYMBOL < RESUL : A=MOT DE COMMANDE < NIVSYM=@ VIRTUELLE < ZONSYM= DESCRIPTION DU SYMBOLE < < PINSET: EQU $ LY LG < RENDRE LA LONGUEUR ACCESSIBLE LX NDEP < RELAI VERS TABLE DEPLACEMENTS LAD &ATDEP LR A,X PSR C < CHANGEMENT DE BASE LA COM1 LR A,C USE C,COMM1 STY LG2 STX ADRDEP IF XXXSGN-0,XWOR%,,XWOR% BSR CPSY < COMPACTER LE SYMBOLE XWOR%: VAL 0 LXI -1 < INDEX DESC. PAGES INSET1: EQU $ ADRI 1,X < RECHERCHE PAGE NON PLEINE LA NBPAGE CPR A,X < AUTRE PAGE? JG INSET9 LA &ADTBPG < OUI - PLEINE? TBT 1 JNC INSET1 SLRS 12 < NON - LONGUEUR CORRECTE? IF XXXSGN-1,XWOR%,,XWOR% ANDI 3 CP LG2 JNE INSET1 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% EOR LG3 ANDI 3 JANE INSET1 XWOR%: VAL 0 INSET2: EQU $ LA &ADTBPG < @ MEMOIRE PAGE AND MASKRP SLLS 1 STA RESERY TBT 7 < PAGE TROUVEE - RESIDENTE? JNC INSET3 STX RESERV < NON - ECRIRE DERNIERE LX NBPGRS BSR ECRP LX NBPGRS < LIRE LA PAGE BSR LIRP LX RESERV INSET3: EQU $ BSR TTPL < AMENER EN TETE DE PILE BSR CALH < CALCUL HASH LA RESERY < PLACE OCCUPEE? ADR A,X CPZ &ADPAGE JNE INSET6 INSET4: EQU $ STX RESERV < NON- LE PLACER INSET8: EQU $ IF XXXSGN-1,XWOR%,,XWOR% LA LG2 < PLACEMENT DESC. SYMBOLE XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA LG3 < PLACEMENT DESC. SYMBOLE XWOR%: VAL 0 STA &ADPAGE ADRI 2,X IF XXXSGN-1,XWOR%,,XWOR% LBI 0 INSET5: EQU $ XR X,B LA &RELAD ADRI 1,X XR X,B STA &ADPAGE ADRI 1,X LR B,A CP LG2 JL INSET5 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA SYMCOM STA &ADPAGE ADRI 1,X LA LG3 TBT 15 JNC INSET5 LA SYMCOM+1 STA &ADPAGE INSET5: EQU $ XWOR%: VAL 0 LX RESERV < PLACER DESC. DANS ZONSYM LAD &ADPAGE LB ADDSYM IF XXXSGN-1,XWOR%,,XWOR% LXI 5 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LXI 2 XWOR%: VAL 0 MOVE IF XXXSGN-0,XWOR%,,XWOR% LXI 0 LAD &RELAD ADRI 2,B LXI 3 MOVE XWOR%: VAL 0 LA RESERV < NIVSYM=@ VIRTUELLE SB RESERY SLLS 7 LXI 0 LB &ADTBPG SBT 0+16 < INDICATEUR DE MISE STB &ADTBPG < A JOUR DE CETTE PAGE !!! SCRD 7 STA &ANIVSY IF XXXSGN-1,XWOR%,,XWOR% LA LG2 < A=MOT DE COMMANDE XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA LG3 < A=MOT DE COMMANDE XWOR%: VAL 0 PLR C RSR INSET6: EQU $ IF XXXSGN-0,XWOR%,,XWOR% BSR CALH < LA PLACE EST OCCUPEE LA RESERY < ON ESSAYE LA DEUXIEME FORMULE ADR A,X CPZ &ADPAGE JE INSET4 < YOUPIE. LA PLACE EST LIBRE XWOR%: VAL 0 LA LGPAGE < IL Y A DEBORDEMENT AD RESERY < TROUVER LA PLACE LR A,X LA &ADPAGE AD RESERY STA RESERV IF XXXSGN-1,XWOR%,,XWOR% LA LG1 < NOUVEAU PT DEBORDEMENT XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LB LG3 < NOUVEAU PT DE DEBORDEMENT RBT 16+14 ADRI 3,B LR B,A XWOR%: VAL 0 AD &ADPAGE STA &ADPAGE IF XXXSGN-1,XWOR%,,XWOR% AD LG1 < RESTE-T-IL DE LA PLACE? XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% ADR B,A XWOR%: VAL 0 CP LGPAGE JLE INSET7 STZ &ADPAGE < NON -L'INDIQUER LXI 0 LA &ADTBPG RBT 1 STA &ADTBPG INSET7: EQU $ LX RESERV < ALLER PLACER SYMBOLE JMP INSET8 INSET9: EQU $ < PLUS DE PAGE LIBRE < IL FAUT EN CREER UNE LA NBPGRS < PEUT-ON EN CREER UNE RESIDENTE? CPI 15 JL INSE12 INSE13: EQU $ IC NBPAGE < CREER LA PAGE LA NBPAGE XWOR%: VAL XLGPAG=0 XWOR%: VAL 16-1-XWOR% CPI 1>XWOR%-1 < PLUS DE PLACE ??? JLE INSE10 DC NBPAGE < ANNULE L'IC... PLR C USE C LAI 21 BR MERR USE C,COMM1 INSE10: EQU $ LR A,X < CONSTRUIRE DESC. PAGE IF XXXSGN-1,XWOR%,,XWOR% LA LG2 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA LG3 XWOR%: VAL 0 SLLS 4 OR NBPGRS SLLS 1 LR A,B < RESIDENTE? LA NSYMB TBT 0 RBT 0 STA NSYMB JC INSE14 SBT 31 INSE14: EQU $ LR B,A SLLS 7 OR NBPAGE SBT 0 SBT 1 STA &ADTBPG JMP INSET2 INSE12: EQU $ < PAGE RESIDENTE POSSIBLE LA NSYMB < Y-A-T'IL DE LA PLACE? AD LGPAGE ADRI 1,A LR A,X LA ADPAGE RBT 0 ADR X,A CP ADRDEP JL INSE11 BSR PLMM < NON - AUGMENTER MEMOIRE JANE INSE13 INSE11: EQU $ LA NBPAGE < CREER SON NOM ADRI 1,A SCLS 1 OR NSYMB SCRS 1 LR A,B BSR RCPG LA NSYMB < CREER LA PAGE RESIDENTE STA RESERV AD LGPAGE LR A,X STZ &ADPAGE ADRI 1,A STA NSYMB LX RESERV < MISE A ZERO LAD &ADPAGE ADRI 3,A LR A,B ADRI 1,A LX LGPAGE ADRI -3,X MOVE LX NSYMB < PT DE DEBORDEMENT ADRI -1,X LA LGH STA &ADPAGE IC NBPGRS LA NSYMB < PAGE SERA RESIDENTE SBT 0 STA NSYMB JMP INSE13 USE C PAGE < < < RECHERCHE D'UN SYMBOLE < PARAM : LG,SYMBOL < RESUL : ABSENT, A=0 < SINON, A=MOT DE COMMANDE < NIVSYM=@ VIRTUELLE < ZONSYM= DESC. DU SYMBOLE < < PRETIQ: EQU $ LB LG < RENDRE LG ACCESSIBLE PSR C < CHANGER LA BASE LA COM1 LR A,C USE C,COMM1 STB LG2 PSR W,L < CALCUL DES FORMULES POUR EORR Y < VERIFIER L'ABSENCE D'UN EORR W < SYMBOLE PAR TABLE DE BIT LXI 0 < CALCUL PAR CARACTERE RTIQ10: EQU $ LBY &RELAD JAE RTIQ12 < REDUCTION CARACTERE ADRI -'30,A CPI 9 JLE RTIQ11 ADRI -7,A RTIQ11: EQU $ LR A,L < PRESERVER CARACTERE XR A,Y < L'INCORPORER DANS 1ERE FORMULE MP ONZE ADR B,Y LR L,A < RESTAURER CARACTERE XR A,W < L'INCORPERER DANS 2EME FORMULE MP ONZE ADR B,W NGR W ADRI 1,X < CARACTERE SUIVANT LR X,A SLRS 1 CP LG2 JL RTIQ10 RTIQ12: EQU $ CPZR Y < SI LES RESULTATS SONT NEGATIFS, JGE RTIQ13 NGR Y RTIQ13: EQU $ CPZR W < LES RENDRE POSITIFS JGE RTIQ14 NGR W RTIQ14: EQU $ LAI 0 < LA 1ERE FORMULE SERT A INDEXER LR Y,B < UN BIT DANS LA 1ERE TABLE DV DEUX41 < SI CE BIT EST A ZERO, LE LAI 0 < SYMBOLE EST ABSENT. SINON, SCRD 4 < IL PEUT ETRE PRESENT SLRS 12 XR A,B LYI 0 LR A,X LA &ATBBT1 XR X,B TBT 0,X ADCR Y SBT 0,X XR X,B STA &ATBBT1 LAI 0 < IL FAUT TRAVAILLER SUR LES 2 LR W,B < TABLES. ON APPLIQUE DV DEUX41 < LA 2EME FORMULE SUR LA 2EME LAI 0 < TABLE DE LA MEME FACON SCRD 4 SLRS 12 XR A,B LR A,X LA &ATBBT2 XR X,B TBT 0,X ADCR Y SBT 0,X XR X,B STA &ATBBT2 PLR W,L LR Y,A < SI L'UN DES BITS EST A ZERO, CPI 2 < LE SYMBOLE EST ABSENT JNE RETIQ5 CPZ NBPAGE < AUCUNE PAGE? JL RETIQ5 IF XXXSGN-0,XWOR%,,XWOR% BSR CPSY < COMPACTER LE SYMBOLE XWOR%: VAL 0 BSR CALH < CALCUL HASH STX ADRDEP < PROTEGER X IF XXXSGN-0,XWOR%,,XWOR% BSR CALH < CALCUL DE LA 2EME FORMULE STX ADRDP1 XWOR%: VAL 0 LXI 0 < RECHERCHE D'UNE PAGE AVEC LG RETIQ4: EQU $ LA &ADTBPG < AFIN DE TESTER LA LONGUEUR SLRS 12 < DES SYMBOLES QU'ELLE CONTIENT... IF XXXSGN-1,XWOR%,,XWOR% ANDI 3 CP LG2 < EST-CE LA BONNE LONGUEUR ??? JNE RTIQ15 < NON, INUTILE DE LA LIRE.... XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% EOR LG3 ANDI 3 JANE RTIQ15 XWOR%: VAL 0 STX RESERV LA &ADTBPG < PAGE RESIDENTE? AND MASKRP SLLS 1 STA RESERY TBT 7 JNC RETIQ1 LXI 0 < NON - ECRIRE PAGE 0 BSR ECRP LXI 0 < LIRE LA PAGE BSR LIRP RETIQ1: EQU $ BSR INVP < INVERSER LES DESCRIPTEURS LA RESERY < RECHERCHE DANS ZONE HASH AD ADRDEP LR A,X CPZ &ADPAGE IF XXXSGN-1,XWOR%,,XWOR% JE RETIQ3 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% JE RRTIQ4 < ESSAYER L'AUTRE FONCTION... XWOR%: VAL 0 BSR CHSB JAE RETIQ7 IF XXXSGN-0,XWOR%,,XWOR% RRTIQ4: EQU $ LA RESERY < ESSAI DE LA 2EME FONCTION AD ADRDP1 LR A,X CPZ &ADPAGE JE RETIQ3 BSR CHSB JAE RETIQ7 < YOUPIE. LE VOILA XWOR%: VAL 0 LA RESERY < RECHERCHE ZONE DEBORDEMENT AD LGH LR A,Y LA RESERY AD LGPAGE LR A,X LA &ADPAGE JANE RETIQ9 LA LGPAGE RETIQ9: EQU $ AD RESERY STA PTFINP LR Y,A RETIQ2: EQU $ LR A,X CP PTFINP JGE RETIQ3 CPZ &ADPAGE < SYMBOLE PRESENT? JE RETIQ8 BSR CHSB JAE RETIQ7 RETIQ8: EQU $ LR X,A AD LG1 JMP RETIQ2 RETIQ3: EQU $ LX RESERV < ABSENT DE LA PAGE RTIQ15: EQU $ ADRI 1,X < VOIR PAGE SUIVANTE? LR X,A CP NBPAGE JLE RETIQ4 RETIQ5: EQU $ LAI 0 < SYMBOLE ABSENT JMP RTIQ22 < VERS LA SORTIE... RETIQ7: EQU $ LR X,A < TROUVE - @ VIRTUELLE SB RESERY SLLS 7 LXI 0 LB &ADTBPG SCRD 7 STA &ANIVSY LB ADDSYM < SYMBOLE DANS ZONSYM LX SAUVX LAD &ADPAGE IF XXXSGN-1,XWOR%,,XWOR% LXI 5 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LXI 2 XWOR%: VAL 0 MOVE IF XXXSGN-0,XWOR%,,XWOR% LXI 0 LAD &RELAD ADRI 2,B LXI 3 MOVE LA &ADDSYM TBT 2 < EST-CE UN SYMBOLE JAMAIS REFERENCE ??? JNC RTIQ59 < NON... RBT 2 < OUI, STA &ADDSYM < ON MEMORISE CETTE PREMIERE REFERENCE... LA ADDSYM LB ADDSY1 LY SAUVX PLR C < RESTAURE 'C' PROVISOIRE... USE C LX NIV PSR X,Y < SAUVEGARDE DE 'NIV' ET DE 'SAUVX'... LX NIVSYM STX NIV < TRANSMISSION DE L'ADRESSE VIRTUELLE... LXI 2 MOVE < DEPLACEMENT : ZONSYM --> ZONSY2... BSR MODSB < ET ON INDIQUE AINSI QUE LE SYMBOLE < EST UTILISE AU MOINS UNE FOIS (BIT 2). PLR X,Y STX NIV < RESTAURATION DE 'NIV'... PSR C < ET RE-SAUVEGARDE DE 'C'... LA COM1 LR A,C USE C,COMM1 STY SAUVX < RESTAURATION DE 'SAUVX'... RTIQ59: EQU $ XWOR%: VAL 0 LX SAUVX < A=MOT DE COMMANDE LA &ADPAGE RTIQ22: EQU $ PLR C USE C PSR A LA VALEQU AD VALEQU < ON COMPTABILISE LES PASSAGES DANS < LE MODULE 'RETIQ'... STA VALEQU PLR A JAE RTIQ20 < CAS D'UN SYMBOLE INEXISTANT... TBT 9 < EST-CE UN SYMBOLE TRANSLATABLE ??? JC RTIQ20 < NON, ABSOLU... PSR A < OUI (OU UNDEFINED...), LA VALEQU CPI 2 < EST-CE LE PREMIER PASSAGE DANS 'RETIQ' ? JG RTIQ21 < NON, ON LAISSE 'VALEQU'... CPI -2 < ??? JLE RTIQ21 < NON... NGR A,A STA VALEQU < ON FAIT : VALEQU < 0... RTIQ21: EQU $ PLR A RTIQ20: EQU $ RSR PAGE < < < MODIFICATION D'UN SYMBOLE < PARAM : NETIQ = @ VIRTUELLE < ZONSY1 = NOUVEAU DESC. < < SPMDSB: EQU $ PSR A,B,C LA COM1 LR A,C USE C,COMM1 LA &ANIV < CALCUL @ REELLE BSR RCAD LA &ADTBPG < PAGE MODIFIEE SBT 0 STA &ADTBPG LA RESERY OR SAUVX LR A,X LAD &ADPAGE < MODIFICATIONS IF XXXSGN-0,XWOR%,,XWOR% PSR A,W LB &ADDSY1 < (B)=NOUVELLE LISTE DES INDICATEURS, LR A,W LA 0,W < (A)=ANCIENNE LISTE DES INDICATEURS... ANDI 'FFFC < ON Y SUPPRIME LA LONGUEUR, RBT 16+2 < FOIS SUIVANTES A PRIORI... JANE SPMDS1 < ET OUI... SBT 16+2 < ET NON, PREMIERE FOIS... SPMDS1: EQU $ STB &ADDSY1 < ET ON MET A JOUR LA NOUVELLE LISTE... PLR A,W XWOR%: VAL 0 LR A,B LA ADDSY1 LXI 2 MOVE PLR A,B,C ARSR: RSR < < < RECHERCHE ADRESSE REELLE < < SPRCAD: EQU $ LBI 0 SCLD 7 SLRS 7 STA SAUVX < @ DANS LA PAGE LXI 0 < RECHERCHE DESC. PAGE RCAD1: EQU $ LA &ADTBPG ANDI '7F CPR A,B JE RCAD2 ADRI 1,X JMP RCAD1 RCAD2: EQU $ LA &ADTBPG < PAGE TROUVEE - RESIDENTE? AND MASKRP SLLS 1 STA RESERY TBT 7 JNC RCAD3 STX RESERV < NON - ECRIRE DERNIERE LX NBPGRS BSR ECRP LX NBPGRS < LIRE LA PAGE BSR LIRP LX RESERV RCAD3: EQU $ BSR TTPL < AMENER EN TETE DESC. RSR USE C PAGE < < < REPERAGE SYMBOLE POUR SUPPRESSION < < SPIUSY: EQU $ PSR X,C < CHANGER DE BASE LX COM1 LR X,C USE C,COMM1 CPZR B JNE IUSY1 STZ PTSASY < INITIALISATION PLR X,C RSR IUSY1: EQU $ LX PTSASY < EMPILER @ VIRTUELLE LB &ANIVSY STB &SASYMB IC PTSASY PLR X,C RSR USE C < < < SUPPRESSION DE SYMBOLES < < SPSUSY: EQU $ PSR X,C < CHANGER DE BASE LA COM1 LR A,C USE C,COMM1 SUSY1: EQU $ CPZ PTSASY JLE SUSY3 DC PTSASY < SYMBOLE SUIVANT LX PTSASY < @ VIRTUELLE LA &SASYMB BSR RCAD < @ REELLE LA SAUVX < DANS LE DEBOR.? CP LGH JL SUSY2 LA RESERY < OUI - DECREMENTER PT AD LGPAGE LR A,X CPZ &ADPAGE < PLUS DE PLACE? JNE SUSY4 PSR X < OUI - DIRE QU'IL Y EN A LXI 0 LA &ADTBPG SBT 1 STA &ADTBPG PLR X SUSY4: EQU $ LA SAUVX STA &ADPAGE SUSY2: EQU $ LA RESERY < ENLEVER LE SYMBOLE OR SAUVX LR A,X STZ &ADPAGE JMP SUSY1 SUSY3: EQU $ PLR X,C RSR USE C PAGE < < < RECHERCHE SYMBOLE SUIVANT < < PSYMUL: EQU $ PSR B,Y,C LB COM1 LR B,C USE C,COMM1 JANE MULSY1 <EST-CE L'INITIALISATION? STZ PGSYMU < OUI - INIT. N0 PAGE BSR INSY < INITIALISATION PAGE PLR B,Y,C RSR MULSY1: EQU $ LA PTSYMU < FIN DE PAGE? CP PTFINP JL MULSY5 IC PGSYMU < OUI - PAGE SUIVANTE? LA PGSYMU CP NBPAGE JG MULSY3 LR A,X < OUI - RESIDENTE? STX RESERV LA &ADTBPG TBT 8 JNC MULSY2 LXI 0 BSR ECRP LXI 0 < LIRE LA PAGE BSR LIRP MULSY2: EQU $ BSR INVP < INVERSER DESC. BSR INSY < INITIALISATION PAGE JMP MULSY1 MULSY3: EQU $ BSR DRPR < FIN - RAMENER DERNIERE PAGE LAI 0 < INDIC FIN MULSY4: EQU $ CPZR A < POSITIONNER CC PLR B,Y,C RSR MULSY5: EQU $ AD PRSYMU < SYMBOLE POINTE? LR A,X LA PTSYMU AD LGSYMU STA PTSYMU CPZ &ADPAGE JE MULSY1 LB ADDSYM < DESC. DANS ZONSYM LAD &ADPAGE LXI 5 MOVE IF XXXSGN-0,XWOR%,,XWOR% LR A,B LAD SYMCOM XR A,B ADRI 2,A LXI 2 MOVE BSR DCSY XWOR%: VAL 0 LAI 1 JMP MULSY4 < < < INITIALISATION POUR RECHERCHE SYMBOLE SUIVANT < LORS D'UN CHANGEMENT DE PAGE < < SPINSY: EQU $ LXI 0 < @ MEMOIRE PAGE LA &ADTBPG AND MASKRP SLLS 1 STA PRSYMU AD LGPAGE < @ FIN DE PAGE LR A,X LA &ADPAGE CPI 0 JNE INSY1 LA LGPAGE INSY1: EQU $ STA PTFINP LXI 0 < LG POUR CETTE PAGE LA &ADTBPG IF XXXSGN-1,XWOR%,,XWOR% SLLS 2 SLRS 14 ADRI 2,A XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% SLLS 3 SLRS 15 ADRI 3,A XWOR%: VAL 0 STA LGSYMU STA PTSYMU < PT DANS LA PAGE(0+NOM) RSR USE C PAGE < < < INSERTION D'UN DEPLACEMENT < < PINSDP: EQU $ LX NDEP < ADRESSE DEP LAD &ATDEP LR A,B PSR C < CHANGER LA BASE LA COM1 LR A,C USE C,COMM1 LX NSYMB < TEST PLACE LAD &ADPAGE SBR A,B ADRI -2,B CPZR B JGE IDEP1 BSR PLMM < NON - AUGMENTER MEMOIRE? JAE IDEP1 LA NSYMB < DIMINUER LIMITE MEMOIRE SB LGPAGE ADRI -1,A STA NSYMB LXI 0 < TROUVER DERNIRE PAGE MEMOIRE IDEP2: EQU $ LA &ADTBPG AND MASKRP SLLS 1 CP NSYMB JE IDEP3 ADRI 1,X JMP IDEP2 IDEP3: EQU $ STX SAUVX LX NBPGRS < ECRIRE PAGE MOINS UTILISEE BSR ECRP LA NBPGRS < EST-CE LA MEME? CP SAUVX JE IDEP4 LR Y,X < NON - TRANSFERER PAGE MEMOIRE LAD &ADPAGE LR A,B LX NSYMB LAD &ADPAGE LX LGPAGE ADRI 1,X MOVE LX SAUVX < MISE-A-JOUR DESC. LA &ADTBPG AND MASKRM SCLS 1 ORR Y,A SCRS 1 STA &ADTBPG LY NSYMB IDEP4: EQU $ LX LGPAGE < REMETTRE MEMOIRE A ZERO ADR Y,X STZ &ADPAGE LR Y,X LAD &ADPAGE LR A,B ADRI 1,A LX LGPAGE MOVE LX NBPGRS < RENDRE NON RESIDENTE LA &ADTBPG SBT 8 STA &ADTBPG DC NBPGRS JGE IDEP1 PLR C < PLUS DE PAGE RESIDENTE USE C LAI 21 BR MERR IDEP1: EQU $ PLR C LX NDEP < PLACEMENT CPZ BINARY < BINARY=0 SI 'WORD' LA NIV JE INSDP1 SBT 0 INSDP1: EQU $ STA &ATDEP LA SOM STA &ATDEP1 LA PAS STA &ATDEP2 ADRI -3,X STX NDEP RSR USE C,COMM1 PAGE < < < AUGMENTER LA MEMOIRE DE 2K < < SPPLMM: EQU $ LA DEMMEM+2 < EST-ON A 8K? IF ORDI-"S",XWOR%,,XWOR% JAL PLMM2 < RIEN A FAIRE, ON A DEJA LE MAX... XWOR%: VAL 0 CP MAXMEM JGE PLMM1 LAI 1 < NON - 2K DE PLUS SLLS 12 AD DEMMEM+2 IF ORDI-"S",XWOR%,,XWOR% PLMM03: EQU $ XWOR%: VAL 0 STA DEMMEM+2 LAD DEMMEM SVC 0 IF ORDI-"S",XWOR%,,XWOR% JNE PLMM2 < BIZARRE !!! XWOR%: VAL 0 LR K,A < RESTAURER C ADRI -1,A < POUR DEPLACER TDEP LR A,C LA 0,C LR A,C USE C LX NDEP LAD &ATDEP ADRI 1,A LR A,B LAI 1 SLLS 11 ADR B,A XR A,B NGR X MOVE LB ATDEP < DPLACER LES POINTEURS LAI 1 SLLS 11 ADR B,A STA ATDEP ADRI -1,A STA ATDEP1 ADRI -1,A STA ATDEP2 LX NDEP < REMETTRE A ZERO LAD &ATDEP LB COM1 LR B,C USE C,COMM1 STA ADRDEP STZ &ADRDEP LX NSYMB LAD &ADPAGE LR A,B SB ADRDEP LR A,X LR B,A ADRI 1,A MOVE PLMM01: EQU $ LA NSYMB < RESTE-T'IL DE LA PLACE? LR A,Y AD LGPAGE ADRI 1,A LR A,X LAD &ADPAGE CP ADRDEP JGE PLMM2 LA NBPGRS < OUI - PAGES NON RESIDENTES? CP NBPAGE JGE PLMM02 STX NSYMB < OUI - RESERVER LA PLACE IC NBPGRS < UNE PAGE RESIDENTE DE PLUS LX NBPGRS < @ MEMOIRE DANS DESCRIPTEUR LA &ADTBPG AND MASKRM SCLS 1 ORR Y,A SCRS 1 STA &ADTBPG BSR LEPG < LIRE LA PAGE ET SUIVANTE JMP PLMM01 PLMM02: EQU $ LAI 0 RSR PLMM1: EQU $ LA NBPAGE SB NBPGRS NPNR: VAL 0 < SEUIL D'ALLOCATION MEMOIRE. CPI NPNR JL PLMM2 LAI 1 < SI PLUS DE NPNR PAGES NON SLLS 12 < RESIDENTES, ESSAYER D'AUGMENTER AD DEMMEM+2 IF ORDI-"T",XWOR%,,XWOR% CP MAXPAR < LA TAILE MEMOIRE JG PLMM2 XWOR%: VAL 0 STA MAXMEM IF ORDI-"T",XWOR%,,XWOR% JMP SPPLMM XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JMP PLMM03 XWOR%: VAL 0 PLMM2: EQU $ LAI 1 RSR PAGE < < < LECTURE UNE PAGE (X = N0 DESC.) < < SPLEPG: EQU $ LB &ADTBPG < LIRE LA PAGE BSR RCPG IF XXXSGN-0,XWOR%,,XWOR% LBI 0 < CLEAR... LA &ADTBPG ANDI '3F SCLD 16-4 < B=NUMERO DE MOT, SLRS 16-4 PSR X,W LR A,X < X=NUMERO DE BIT. LRM W WORD PAGEX < LISTE D'EXISTENCE DES PAGE. ADR B,W < W=ADRESSE DU MOT CONCERNE... LA 0,W TBT 0,X < LA PAGE DEMANDEE EXISTE-T'ELLE ??? PLR X,W JNC LEPG2 < NON... XWOR%: VAL 0 LA RECPAG STA COMPAG IF XXXSGN-1,XWOR%,,XWOR% LAD COMPAG SVC 0 JE LEPG1 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA &ADTBPG ANDI '3F < A=NUMERO DE PAGE VIRTUELLE. SLLS XLGPAG*2=0 < A=ADRESSE OCTET VIRTUELLE. LB COMPAG+1 < B=ADRESSE OCTET REELLE. SLRD 1 < CONVERSION EN ADRESSES MOTS. LRM X WORD XLGPAG < X=LONGUEUR MOT D'UNE PAGE. RCDA JMP LEPG1 < ET C'EST FINI... LEPG2: EQU $ XWOR%: VAL 0 LX LGPAGE < PAGE INEXISTANTE ADR Y,X LA LGH < PT DE DEBORDEMENT STA &ADPAGE ADRI -1,X < MISE A ZERO STZ &ADPAGE LR Y,X LAD &ADPAGE ADRI 3,A LR A,B ADRI 1,A LX LGPAGE ADRI -4,X MOVE LEPG1: EQU $ RSR PAGE < < < ECRITURE UNE PAGE (X = N0 DESC.) < < SPECRP: EQU $ LB &ADTBPG < @ PAGE BSR RCPG LB &ADTBPG < MODIFIEE? TBT 16 JC ECRP1 RSR < NON ECRP1: EQU $ RBT 16 < OUI - RESET STB &ADTBPG BSR RCPG < NOM DE PAGE LA DETPAG < DETRUIRE STA COMPAG IF XXXSGN-1,XWOR%,,XWOR% LAD COMPAG SVC 0 XWOR%: VAL 0 LA CREPAG < ECRIRE STA COMPAG IF XXXSGN-1,XWOR%,,XWOR% LAD COMPAG SVC 0 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% PSR X LA &ADTBPG ANDI '3F < A=NUMERO DE PAGE VIRTUELLE. SLLS XLGPAG*2=0 < A=ADRESSE OCTET VIRTUELLE. LB COMPAG+1 < B=ADRESSE OCTET REELLE. SLRD 1 < CONVERSION EN ADRESSES MOTS. LRM X WORD XLGPAG < X=LONGUEUR MOT D'UNE PAGE. WCDA PLR X LA &ADTBPG ANDI '3F < A=NUMERO DE PAGE VIRTUELLE... LR A,X LRM A WORD PAGEX SBTM 0,X < LA PAGE EXISTE MAINTENANAT... XWOR%: VAL 0 RSR PAGE < < < CALCUL HASH (RESUL DANS X) < < SPCALH: EQU $ IF XXXSGN-1,XWOR%,,XWOR% LA LG2 < CALCUL LG OCCUPEE ADRI 2,A STA LG1 LAI 3 < CALCUL COEF SB LG2 SLLS 3 ADRI 2,A STA COEF EORR Y < RESUL=0 LXI 0 < 1ER CARAC CALH1: EQU $ LBY &RELAD < FIN SI CARAC NULL JAE CALH3 ADRI -'30,A < VALEUR ENTRE 0 ET 35 CPI 9 JLE CALH2 ADRI -7,A CALH2: EQU $ XR A,Y < INTEGRER AU RESUL MP COEF ADR B,Y ADRI 1,X < CARAC SUIVANT LR X,A < FIN? SLRS 1 CP LG2 JL CALH1 CALH3: EQU $ LA LG2 < LG=2? CPI 2 JNE CALH4 LR Y,B < OUI - TRAITER EN DECALAGE CAR LAI 0 < NB PEUT ETRE > 32000 SLLD 2 JMP CALH5 CALH4: EQU $ LR Y,A MP LG1 CALH5: EQU $ XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA LG3 < LONGUEUR D'UNE ENTREE ANDI 1 ADRI 3,A STA LG1 LA BASCH < INVERSION DE LA BASCULE EORI -1 STA BASCH EOR SYMCOM < INTEGRATION DU SYMBOLE EOR SYMCOM+1 LR A,B LAI 0 DV LG1 < TRANSFORMER EN ENTREE POSSIBLE MP LG1 XWOR%: VAL 0 DV LGH LR B,X RSR PAGE < < < RENDRE UNE PAGE RESIDENTE < < SPLIRP: EQU $ LA &ADTBPG < @ MEMOIRE AND MASKRP SLLS 1 LR A,Y LA &ADTBPG < RENDRE NON RESIDENTE SBT 8 STA &ADTBPG LX RESERV < RENDRE RESIDENTE LA &ADTBPG AND MASKRM SCLS 1 ORR Y,A SCRS 1 STA &ADTBPG BSR LEPG < LIRE STY RESERY RSR < < < AMENER UN DESC. EN TETE DE PILE < < SPTTPL: EQU $ CPZR X < PREMIERE? JE TTPL1 STX RESERV < NON - PRELEVER DESC. LY &ADTBPG LXI 0 < DEPLACER LES AUTRES LAD &ADTBPG LR A,B ADRI 1,B LX RESERV MOVE LXI 0 < REMETTRE DESC. STY &ADTBPG TTPL1: EQU $ RSR < < < COMPARER SYMBOLE FOURNI AVEC SYMBOLE TROUVE < < SPCHSB: EQU $ STX SAUVX ADRI 2,X IF XXXSGN-1,XWOR%,,XWOR% LY LG2 XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% LA LG3 ANDI 1 ADRI 1,A LR A,Y XWOR%: VAL 0 LBI 0 CHSB1: EQU $ LA &ADPAGE < COMP. MOT A MOT XR X,B IF XXXSGN-1,XWOR%,,XWOR% CP &RELAD XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% CP &ASMCOM XWOR%: VAL 0 XR X,B JNE CHSB3 ADRI 1,X < MOT SUIVANT ADRI 1,B ADRI -1,Y CPZR Y < FIN? JNE CHSB1 LAI 0 < TROUVE CHSB2: EQU $ LX SAUVX RSR CHSB3: EQU $ LAI 1 < DIFFERENT JMP CHSB2 < < < INVERSION DE DEUX DESCRIPTEURS PAGE < < SPINVP: EQU $ CPZ RESERV JE INVP1 LX RESERV LYI 0 LA &ADTBPG LR A,B XR X,Y LA &ADTBPG XR X,Y STA &ADTBPG XR X,Y STB &ADTBPG INVP1: EQU $ RSR < < < RELIRE LA DERNIERE PAGE SI INSUCCES RECH. SYMBOLE < < SPDRPR: EQU $ LXI 0 LY &ADTBPG LX NBPAGE < @ FIN TABLE+1 ADRI 1,X LAD &ADTBPG SBT 0 < INDEXATION STA SAUVX NGR X DRPR1: EQU $ JIX DRPR2 LX NBPAGE < FIN - PLACER LE DERNIER STY &ADTBPG LA NBPAGE < RELIRE DERNIERE SI NECESSAIRE CP NBPGRS JLE DRPR3 LX NBPGRS STX RESERV LX NBPAGE BSR LIRP DRPR3: EQU $ RSR DRPR2: EQU $ LA &SAUVX < TRANSF. UN DESC. ADRI -1,X STA &SAUVX ADRI 1,X JMP DRPR1 < < < CALCUL NOM PAGE ET @ MEMOIRE(Y) < < SPRCPG: EQU $ PSR X LR B,A < @ MEMOIRE AND MASKRP SLLS 1 LR A,Y LR A,X LAD &ADPAGE < DANS LA COMMANDE SLLS 1 STA COMPAG+1 IF ORDI-"T",XWOR%,,XWOR% LAI "@" < NOM SWBR A ORI "@" XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A < NOM WORD '4040 XWOR%: VAL 0 STA &ADPAGE ADRI 1,X SCRD 4 SLRS 4 SCRD 3 SLRS 5 AD AA STA &ADPAGE ADRI 1,X LA IDESC STA &ADPAGE PLR X RSR < < < ELIMINATION DES PAGES < < SPELPG: EQU $ < < RAZ DE LA 1ERE PAGE, CAR SINON.... < LX COMPAG+2 < X=LONGUEUR DES 2 PREMIERES < PAGES... ET1702: EQU $ STZ &ADPAGE JDX ET1702 < < ELIMINATION DES PAGES : < LXI 0 < SE SERVIR DE LA PREMIERE LAD &ADPAGE < @ DANS COMMANDE SLLS 1 STA COMPAG+1 IF ORDI-"T",XWOR%,,XWOR% LAI "@" SWBR A ORI "@" XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A < NOM WORD '4040 XWOR%: VAL 0 STA &ADPAGE < NOM ADRI 1,X LA AA STA &ADPAGE ADRI 1,X LA IDESC STA &ADPAGE LA DETPAG < COMMANDE DETRUIRE STA COMPAG LXI 64 < NB MAX PAGES LYI 17 < NB MAX PAGES ABSENTES CONSECUT. ELPG1: EQU $ PSR X < DETRUIRE IF XXXSGN-1,XWOR%,,XWOR% LAD COMPAG SVC 0 XWOR%: VAL 0 PLR X JE ELPG4 ADRI -1,Y < PAGE ABSENTE CPZR Y JLE ELPG3 JMP ELPG5 ELPG4: EQU $ LYI 17 < PAGE PRESENTE ELPG5: EQU $ PSR X LXI 1 < NOM DE LA PAGE SUIVANTE LA &ADPAGE ADRI 1,A STA &ADPAGE ANDI 'FF CPI "P" JLE ELPG2 LA &ADPAGE SLRS 8 ADRI 1,A SLLS 8 ORI "A" STA &ADPAGE ELPG2: EQU $ PLR X JDX ELPG1 ELPG3: EQU $ RSR IF XXXSGN-0,XWOR%,,XWOR% < < COMPACTION D'UN SYMBOLE < SPCPSY: EQU $ PSR A,B,X,W STZ SYMCOM+1 LBI 0 < CALCUL DE LA NOUVELLE LONGUEUR < UN MOT A PRIORI NON COMPACTE LA LG2 < SI LA LONGUEUR EST 1 OU 2 CARACTERES CPI 1 < ELLE RESTERA A UN MOT NON COMPACTE JE CPSY2 LBI 1 < LONGUEUR A PRIORI DE 1 POUR < 4,5 OU 6 CARACTERES CPI 3 < SI ELLE EST DE 5 OU 6, JE CPSY1 < LA LONGUEUR EST DE 1 EN COMPACTE LXI 3 < DISCRIMINATION DES 3 OU 4 CARACTERES LBY &RELAD JANE CPSY2 LBI 0 < 3 CARACTERES - 1 MOT COMPACTE CPSY1: EQU $ SBT 16+14 < SYMBOLE COMPACTE CPSY2: EQU $ PSR B LAD SYMCOM < TRANSFERT DU SYMBOLE LR A,B LXI 0 LAD &RELAD LXI 3 MOVE PLR B TBT 16+14 < SI LE SYMBOLE N'EST PAS COMPACTE, JNC CPSY3 < C'EST FINI LXI 0 < COMPACTAGE DES 3 PREMIERS CARACTERES BSR CPS3 STA SYMCOM TBT 16+15 < EST-CE FINI? JNC CPSY3 < OUI BSR CPS3 < NON - COMPACTAGE DU RESTE STA SYMCOM+1 CPSY3: EQU $ STB LG3 < FIN PLR A,B,X,W RSR < < COMPACTAGE DE 3 CARACTERES < SPCPS3: EQU $ PSR B,Y EORR W < RESULTAT=0 LYI 3 < NB DE CARACTERES A TRAITER CPS31: EQU $ LBY &RELAD < RAMENER LE CARACTERE ENTRE 0 ET 39 JAE CPS32 ADRI -'2F,A CPI 'A JLE CPS32 ADRI -6,A CPS32: EQU $ XR A,W < L'INTEGRER AU RESULTAT MP M40 ADR B,W ADRI 1,X < PASSER AU CARACTERE SUIVANT ADRI -1,Y CPZR Y JG CPS31 LR W,A < RESULTAT PLR B,Y RSR < < DECOMPACTAGE D'UN SYMBOLE < SPDCSY: EQU $ PSR A,B,X LB &ADDSYM < LE SYMBOLE EST-IL COMPACTE? TBT 16+14 JNC DCSY1 < NON - C'EST FINI LA SYMCOM < OUI - DECOMPACTER LE PREMIER MOT LXI 2 BSR DCS3 LXI 3 < RAZ DU 4EME CARACTERE LAI 0 STBY &AZNSYM TBT 16+15 < EST-CE FINI? JNC DCSY1 < OUI LA SYMCOM+1 < NON - FINIR LXI 5 BSR DCS3 DCSY1: EQU $ LA &ADDSYM < RENDRE LA BONNE LONGUEUR TBT 14 JC DCSY2 ADRI 1,A DCSY2: EQU $ STA &ADDSYM PLR A,B,X RSR < < DECOMPACTAGE D'UN MOT < SPDCS3: EQU $ PSR A,B,Y LYI 3 < NOMBRE DE CARACTERES LR A,B DCS31: EQU $ LAI 0 < EXTRAIRE UN CARACTERE DV M40 XR A,B JAE DCS33 CPI 'A < LE REFORMER JLE DCS32 ADRI 6,A DCS32: EQU $ ADRI '2F,A DCS33: EQU $ STBY &AZNSYM ADRI -1,X < ET SUIVANT ADRI -1,Y CPZR Y JG DCS31 PLR A,B,Y RSR XWOR%: VAL 0 USE C PAGE IF ORDI-"S",XWOR%,,XWOR% < < < S I M U L A T I O N S V C L I S T I N G : < < < ARGUMENT : < A=ADRESSE DEMANDE (IOCB3/IOCB4). < < SISVC: EQU $ CPZ KLIST < LISTING EN COURS ??? JG SISVC1 < NON, RIEN A FAIRE... JL $ < ERREUR PROGRAMME !!! SVC 0 < OUI, ON EDITE... SISVC1: EQU $ RSR XWOR%: VAL 0 PAGE < < < E D I T I O N D U B I N A I R E : < < SPSO1: EQU $ < SORTIE UN QUADRUPLET. ANDI 'FF STA BUF STB BUF+1 JMP C1620 SORTQ: EQU $ LXI -3 C161: EQU $ LBY &ABUF < ELIMINATION DES NULLS. JAG C162 LAI " " < ON MET DES 'SPACE' A LA PLACE... STBY &ABUF C162: EQU $ JIX C161 C1620: EQU $ IF ORDI-"S",XWOR%,,XWOR% CPZ IOCB5 < ASSIGNATION DU BINAIRE ??? JE SPERFO < NON, RIEN A FAIRE... XWOR%: VAL 0 CPZ IBUFBN JNE C160 IF ORDI-"T",XWOR%,,XWOR% LXI LLLBUF-1/3*3 < NOMBRE DIVISIBLE PAR 3 !!! XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM X WORD LLLBUF-1/3*3 < NOMBRE DIVISIBLE PAR 3 !!! XWOR%: VAL 0 STZ &ABUFBN JDX $-1 C160: EQU $ LX IBUFBN < RANGEMENT DANS BUFBIN. LA BUF STBY &ABUFBN ADRI 1,X LBY BUF+1 STBY &ABUFBN ADRI 1,X LA BUF+1 STBY &ABUFBN ADRI 1,X STX IBUFBN LBY BUF CPI '30 JE PERBIN < COMMANDE 'EOF'. LA CHECK < CALCUL DU CHECKSUM. AD BUF ADCR A AD BUF+1 ADCR A STA CHECK IF ORDI-"T",XWOR%,,XWOR% LAI LLLBUF-1/3*3 < NOMBRE DIVISIBLE PAR 3 !!! XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A WORD LLLBUF-1/3*3 < NOMBRE DIVISIBLE PAR 3 !!! XWOR%: VAL 0 ADR A,A CPR A,X JNE SPERFO < NON. PERBIN: EQU $ CPZ LIST2 JG C163 < SECOND PASSAGE. LAD IOCB5 SVC 0 < SORTIE BINAIRE SUR SGF. C163: EQU $ STZ IBUFBN SPERFO: EQU $ RSR < < < SPSO2: EQU $ < SORTIE 2 QUADRUPLETS. IF ORDI-"S",XWOR%,,XWOR% CPZ IOCB5 < ASSIGNATION DU BINAIRE ??? JE SPERFO < NON, RIEN A FAIRE... XWOR%: VAL 0 STBY BUF PSR B,Y LY BUF+1 LA BUF LR Y,B SLRD 8 STA BUF STB BUF+1 BSR PSORTQ LAI '22 STA BUF LR Y,B LA BUF+2 SLLS 8 SCLD 8 STB BUF+1 BSR PSORTQ LA BUF+3 STA BUF+1 PLR B,Y JMP SORTQ < < < PSOSYM: EQU $ < SORTIE SYMBOLE DONT A=ADRESSE. BSR TRASYM LAI 6 BSR SORMES RSR < < < PSORM: EQU $ < SORTIE MESSAGES NON ERREUR. STA IOCB3+2 PSR X LAD IOCB3 WORD LISTIN PLR X RSR < < < PSORCL: EQU $ < SORTIE RC-LF. LA RCLF STA SYMBOL LAI 2 BSR SORMES RSR PAGE < < < C O N V E R S I O N S N U M E R I Q U E S : < < PCONV: EQU $ < CONVERSION HEXADECIMALE 4 < CHIFFRES. BSR HEXA2 LR A,Y < Y=POIDS FORTS. BSR HEXA2 RSR < A=POIDS FAIBLES. < < < PHEXA: EQU $ < CONVERSION HEXADECIMALE 2 < CHIFFRES. LAI 0 STZ ZTR SLLD 4 BSR BSUPL STBY ZTR LAI 0 SLLS 4 SLLD 4 BSR BSUPL OR ZTR RSR < < < PCOV10: EQU $ < CONVERSION DECIMALE 2 CHIFFRES. ANDI '3F SLRD 16 DV M10 BSR BSUPL < CHIFFRE DES DIZAINES. XR A,B BSR BSUPL < CHIFFRE DES UNITES. SLLS 8 SCRD 8 RSR < < < SUPL: EQU $ < TRAITEMENT DES BITS 8,9,10. CPI 9 JLE C164 < CHIFFRE. ADRI -9,A < LETTRE. ORI '40 JMP C165 C164: EQU $ ORI '30 C165: EQU $ RSR < LE CALCUL DE PARITE A ETE SUPPRME. PAGE PTRAS: EQU $ < TRANSFERT DANS SYMBOL. PSR X LXI 3 < NETTOYAGE SYMBOL. STZ &ASYMB JDX $-1 STA NIVSYM < A=ADRESSE DU SYMBOLE. LA &NIVSYM ANDI 3 < A=LONGUEUR. JAE LONUL < LONGUEUR NULLE. LXI 1 IC NIVSYM C166: EQU $ IC NIVSYM LB &NIVSYM STB &ASYMB ADRI 1,X ADRI -1,A JAG C166 LONUL: EQU $ < RESTAURATION DE X. IF ORDI-"S",XWOR%,,XWOR% LXI 7 < MISE A BLANC FIN NOM C1660: EQU $ LBY &ASYMB JANE C1661 LAI '20 STBY &ASYMB JDX C1660 C1661: EQU $ XWOR%: VAL 0 PLR X RSR < SAVE X DANS ZTR. < < < PTAS: EQU $ < TRANSFERT SYMBOLE DANS BUF. LA SYMBOL LB SYMBOL+1 SLRD 8 STA BUF STB BUF+1 LA SYMBOL+1 STA BUF+2 LA SYMBOL+2 STA BUF+3 LAI '22 STBY BUF+2 RSR PAGE PSORC: EQU $ < EDITION SECTION. IF ORDI-"T",XWOR%,,XWOR% BSR SORCLF BSR PAGIN LYI -1 LR Y,W XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR PAGE < SAUT DE PAGE LRM W WORD "@"-1 STZ ZFLOAT < NOMBRE DE SYMBOLE PAR LIGNE=8 XWOR%: VAL 0 C167: EQU $ LAI 0 BSR SYMUL ADRI 1,W < LETTRE SUIVANTE (1ERE LETTRE < EST 'A'. PSORC1: EQU $ LAI 1 BSR SYMUL JE SYMUL4 IF ORDI-"S",XWOR%,,XWOR% CPZ ZFLOAT JG C1677 BSR PAGIN BSR SORCLF LAI 8 STA ZFLOAT C1677: EQU $ XWOR%: VAL 0 LXI 0 IF ORDI-"S",XWOR%,,XWOR% LAD &ATSYMB BSR TRASYM XWOR%: VAL 0 LA &ATSYMB SLRD 8 CPI '80 < ELIMINATION ADRESSE DE FIN < DE SECTION. JE NEDIT IF ORDI-"S",XWOR%,,XWOR% LBY SYMBOL < SI LE SYMBOLE NE COMMENCE PAS CPR A,W < PAR LA BONNE LETTRE JNE NEDIT < ON NE L'EDITE PAS XWOR%: VAL 0 TBT 16 IF ORDI-"T",XWOR%,,XWOR% JC NEDIT < ELIMINATION SYMBOLE NON DEFINI. LAD &ATSYMB BSR TRASYM XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JC SBNDF < SYMBOLE NON DEFINI XWOR%: VAL 0 CPZ &ATSYMB IF ORDI-"T",XWOR%,,XWOR% JG EDITER CPZR W JNE NEDIT < NOM DEJA EDITE. LA RCLF+1 < PARCEQUE 'LIBSEC' A DISPARU !!!!!! STA SYMBOL LA RCLF+2 < PARCEQUE 'LIBSEC' A DISPARU !!!!! STA SYMBOL+1 LAI 4 JMP EDNOM XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% JLE NEDIT XWOR%: VAL 0 EDITER: EQU $ IF ORDI-"T",XWOR%,,XWOR% LBY SYMBOL ANDI '1F CPR A,W JNE NEDIT < LETTRE NON CONFORME. XWOR%: VAL 0 ADRI 1,X LB &ATSYMB < MOT VALEUR. IF ORDI-"T",XWOR%,,XWOR% LA CARSP+1 STA SYMBOL+2 XWOR%: VAL 0 BSR CONVER < CONVERSION HEXADECIMALE. IF ORDI-"T",XWOR%,,XWOR% STA SYMBOL+1 STY SYMBOL ADRI -1,X LAI 6 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% ADRI -1,X XWOR%: VAL 0 EDNOM: EQU $ IF ORDI-"S",XWOR%,,XWOR% STY SYMBOL STA SYMBOL+1 LA CARSP+1 STA SYMBOL+2 LAI 5 XWOR%: VAL 0 BSR SORMES IF ORDI-"S",XWOR%,,XWOR% LA &ATSYMB < SORTIE DES BITS ORDONNES IF XXXSGN-0,XWOR%9,,XWOR%9 LYI " " TBT 2 < LE SYMBOLE A-T'IL ETE UTILISE ??? JNC SUSED < OUI, (Y)=" "... RBT 2 LYI "*" < NON, (Y)="*"... SUSED: EQU $ XWOR%9: VAL 0 SLRD 3 < DSEC, ABS, EXT, ENT SCRS 2 SLRD 2 SCLS 3 SLLD 3 ANDI 'F CPI 9 JLE XX167 ADRI 7,A XX167: EQU $ ADRI '30,A SWBR A IF XXXSGN-1,XWOR%9,,XWOR%9 ORI '20 XWOR%9: VAL 0 IF XXXSGN-0,XWOR%9,,XWOR%9 ORR Y,A < CONCATENATION DE " " OU "*", SUIVANT QUE < LE SYMBOLE A ETE UTILISE OU PAS... XWOR%9: VAL 0 STA SYMBOL LAI 2 BSR SORMES XWOR%: VAL 0 LAD &ATSYMB < A=ADRESSE SYMBOLE. BSR TRASYM LAI 6 BSR SORMES IF ORDI-"T",XWOR%,,XWOR% BSR SORCLF < RC-LF. BSR PAGIN XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LA CARSP+1 < TROIS BLANCS STA SYMBOL STA SYMBOL+1 LAI 3 BSR SORMES DC ZFLOAT XWOR%: VAL 0 NEDIT: EQU $ JMP PSORC1 SYMUL4: EQU $ IF ORDI-"T",XWOR%,,XWOR% LAI 26 XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LAI "Z" XWOR%: VAL 0 CPR A,W JNE C167 < LETTRE 'Z' NON ATTEINTE. IF ORDI-"T",XWOR%,,XWOR% BSR SORCLF BSR PAGIN XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR SORCLF BSR PAGE XWOR%: VAL 0 RSR IF ORDI-"S",XWOR%,,XWOR% SBNDF: EQU $ < SYMBOLE NON DEFINI TBT 18 JNC SBNDF1 LRM A,Y < EXTERNE WORD "T " WORD "EX" JMP EDNOM SBNDF1: EQU $ TBT 20 JC SBNDF2 TBT 19 < 'DSEC' ??? JC SBNDF2 < 'DSEC'+'UNDEF'='JMP EN AVANT' !!! LRM A,Y < ELEMENT DE LISTE WORD "ST" WORD "LI" JMP EDNOM SBNDF2: EQU $ LRM A,Y < REFERENCE EN AVANT WORD "AN" WORD "AV" JMP EDNOM XWOR%: VAL 0 PAGE < < < E D I T I O N L I S T I N G : < < PLIST: EQU $ < SORTIE LISTING (ZACQ1). STB BINARY CPZ SITUAT JG C168 < ON EST DANS UNE DSEC. BSR ASPSO1 < SORTIE MOT BINAIRE. C168: EQU $ BSR VERPA < VERIFICATION DEPASSEMENT 32K. IF ORDI-"S",XWOR%,,XWOR% LA BINARY LRM Y WORD PZZACQ PUSH < ON EMPILE EN CARTE DYNAMIQUE LE CODE < GENERE ; ON NOTERA QUE DANS LE CAS DES < 'DZS', ON N'EMPILE QU'UNE FOIS '0000... XWOR%: VAL 0 LBY BUF CPI 'AC JE PLIS1 < 'DZS'. LX SINGER < CARACTERE SPECIAL. LA &ACARSP STA &ZACQ12 LB BINARY < B=MOT. BSR CONVER < CONVERSION. STY &ZACQ13 < POIDS FORTS DU MOT. STA &ZACQ14 < POIDS FAIBLES DU MOT. PLIS1: EQU $ < SORTIE LISTING ('DZS' + 'EQU'). LB DEBRES+2 BSR CONVER LR A,L LA VALDIR CPI 17 JE ADCOMP < '$EQU'. LR L,A STZ INDZS ADCOMP: EQU $ LR L,A < POIDS FORT DE L'ADRESSE. C169: EQU $ STY &ZACQ10 STA &ZACQ11 < POIDS FAIBLES DE L'ADRESSE. LAI "$" STBY &ZACQ12 < INDICATEUR 'CODE GENERE'... CPZ LIMSU2 JE PAGENE < PAS DE GENERATION DE DEPLACEMENT. CPZ ETAPH JG PAGENE < PAS DE GENERATION DE DEPLACEMENT < ('$EQU'). LA DEBRES+2 < A=PAS SAUVEGARDE. SB DEBSEC ADRI -128,A CPI 127 JG PAGENE < DEPLACEMENT SUPERUEUR A 127. LR A,B BSR CONVER STA &ZACQ16 < POIDS FAIBLES DU DEPLACEMENT. LA OUVR STA &ZACQ15 LA FERM STA &ZACQ17 PAGENE: EQU $ < SORTIE DU LISTING. LAD IOCB4 WORD LISTIN BSR PAGIN LAI 26 < PLUS DE SORTIE SYMBOLIQUE STA IOCB4+2 LA RCLF STA &ZACQ18 LA VALDIR CPI 19 JNE C170 IC INDZS < PHRASE EST 'DZS'. C170: EQU $ RSR < < BUFP9: WORD 0 < BUFFER BIDON, IOCBP9: WORD '0401 < DEMANDE DE LECTURE D'UN CARACTERE WORD BUFP9-ZERO*2 WORD 1 < BIDON, POUR BLOQUER L'UNITE 4... PPAGE: EQU $ < SAUT DE PAGE. PSR X,Y IF ORDI-"S",XWOR%,,XWOR% LR A,Y < Y=2 SI CET APPEL A LIEU POUR < LA DIRECTIVE 'PAGE'... XWOR%: VAL 0 LRM A WORD IOCBP9 WORD LISTIN < ON FAIT UNE LECTURE SUR L'UNITE 4 ; < SI C'EST L'IMPRIMANTE OU NON ASSIGNEE, < CELA NE FAIT RIEN, MAIS SI C'EST LA < VISU, ON SE BLOQUE (ON A ALORS LE TEMPS < DE FAIRE UN HARD-COPY...). LA SYMBOL PSR A LAI 2 STA IOCB3+2 IF ORDI-"T",XWOR%,,XWOR% LAI '0D SWBR A ORI "@" XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A WORD '0D40 XWOR%: VAL 0 STA SYMBOL LAD IOCB3 WORD LISTIN IF ORDI-"S",XWOR%,,XWOR% CPZ KLIST < LISTE EN COURS ??? PSR C LA COM1 LR A,C USE C,COMM1 JG PPAGE1 < NON, DONC PAS DE COMPTAGE... IC NUMPAG < COMPTAGE DE LA PAGE. PPAGE1: EQU $ LB NUMPAG < POUR LA CONVERSION. PLR C USE C LR Y,X < X=2 SI DIRECTIVE 'PAGE'. BSR CONVER < CONVERSION DANS (Y,A). XR A,X CPI 2 < DIRECTIVE 'PAGE' ??? XR A,X JNE PAPAGE < NON... STY &ZACQ10 < OUI, INSERTION DANS LE LISTING STA &ZACQ11 < POUR LES SYMBOLES DYNAMIQUES. PAPAGE: EQU $ STY SYMBOL < DEBUT DU NUMERO DE PAGE, LR A,Y < ET SAUVEGARDE DE LA SUITE... LAD IOCB3 WORD LISTIN < EDITION DEBUT DU NUMERO DE PAGE. STY SYMBOL < PRISE EN COMPTE DE LA SUITE, WORD LISTIN < QUE L'ON EDITE... LBI " " SBT 16+2 < B=" ". STB SYMBOL WORD LISTIN < QUE L'ON EDITE... XWOR%: VAL 0 LA IOCB < SORTIR LE NOM SI FICHIER SLRS 8 CPI 1 JE ENMFC LA IOCB3+1 PSR A PSR C LA COM1 LR A,C USE C,COMM1 LAD NOMFIC SLLS 1 LX LGNMFC PLR C USE C STA IOCB3+1 STX IOCB3+2 LAD IOCB3 WORD LISTIN PLR A STA IOCB3+1 IF ORDI-"T",XWOR%,,XWOR% LAI '0D SWBR A ORI '0A STA SYMBOL LAI 2 STA IOCB3+2 LAD IOCB3 WORD LISTIN XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% BSR SORCLF XWOR%: VAL 0 WORD LISTIN ENMFC: EQU $ PLR A STA SYMBOL PLR X,Y STZ NBLIG RSR < < < PPAGIN: EQU $ < MISE EN PAGE. CPZ KLIST < 'LST' EN COURS ??? JG NPPAGE < NON, DONC PAS DE COMPTAGE... IC NBLIG LA NBLIG CPI 55 JE PPAGE < SAUT DE PAGE EN BAS. NPPAGE: EQU $ RSR PAGE < < < T R A I T E M E N T D U J U M P : < < PJUMP: EQU $ C171: EQU $ SBR Y,A CPI -128 JL C172 < HORS D'ATTEINTE. CPI 127 JG C172 < HORS D'ATTEINTE. RSR C172: EQU $ LAI 11 < HORS-LIMITE DE SECTION. BR MERR < < < VERPAS: EQU $ < VERIFICATION DU PAS. RSR C173: EQU $ LAI 12 < PASSAGE AU-DELA DE 32K. BR MERR < < < PSAV: EQU $ < SAVE POUR LES CAS D'ERREURS. LXI LSAV C174: EQU $ LA &ASAVE STA &AREST JDX C174 RSR PAGE < < < T R A I T E M E N T D E S E R E U R S : < < ERR: EQU $ STA NR LAI 22 STA IOCB2+2 < LONGUEUR DES MESSAGES D'ERREUR... LA COM1 XR A,C < POUR ATTEINDRE 'KERROR'. USE C,COMM1 IC KERROR < COMPTAE DES ERREURS... XR A,C USE C NR0: LXI LSAV < RESTORE VALEURS SAUVEGARDEES. C175: EQU $ LA &AREST STA &ASAVE JDX C175 LA MOT1 JAE C176 STA &ATSY11 LA MOT2 STA &ATSY12 BSR MODSB C176: EQU $ CPZ SYMBO1 < 'IF' EN COURS ??? JNE E21947 < OUI, ON IGNORE CETTE ERREUR... LA DEPLA2 < PREPARTION MESSAGE D'ERREUR. BSR CONV10 STA SYMBO2+4 < DEPLACEMENT. LA NR BSR CONV10 STA ZTR < NUMERO D'ERREUR. CPZ BATCH < BATCH OU TS ??? JNE E51947 < BATCH... LB IOCB2 < OUI - ECRIRE SUR VISU LAI '02 STBY IOCB2 LAD IOCB2 SVC 0 STB IOCB2 BSR PAGIN < PAGINATION. JMP E61947 E51947: EQU $ BSR SORCLF LAD IOCB2 SVC 0 BSR PAGIN < PAGINATION. BSR PAGIN BSR PAGIN E61947: EQU $ STZ BASCUL < CHANGEMENT DU NVP D'ENTREE. LA NR < TEST DE L'ERREUR PRODUITE ??? CPI 17 < EST-CE LA FATALE ERREUR '17' ??? IF XXXSGN-0,XWOR%,,XWOR% JE E1947E CPI 21 < ET L'ERREUR 21 XWOR%: VAL 0 JNE E1947 < NON , L'ASSEMBLAGE PEUT SE < POURSUIVRE .... < < CAS DE LA FATALE ERREUR '17' : < E1947E: EQU $ LAI '02 < MESSAGES SUR UNITE '02 STBY IOCB3 EORR W,W < RAZ DE LA BASE W. BR ABORT-ZERO,W < VERS L'EDITION DES SYMBOLES < NON DEFINIS , PUIS L'ABORT.... < < CAS DES AUTRES ERREURS. < E1947: EQU $ CPZ BATCH < BATCH OU TS ??? JNE E11947 < BATCH... LB IOCB1 < SORTIE SUR VISU LAI 2 STBY IOCB1 LAD IOCB1 SVC 0 STB IOCB1 BSR PAGIN < PAGINATION. LX BASCUL < FAIRE COMME UN EOT CMR X STX BASCUL STZ INDO BSR SUSY < SUPPRIMER SYMBOLES OPERANDES CPZ NETIQ JE E21947 LA NETIQ < SUPPRIMER ETIQUETTE STA NIVSYM LBI 0 BSR IUSY LBI 1 BSR IUSY BSR SUSY E21947: EQU $ LBY IOCB < LECTURE FICHIER? CPI 1 < LECTURE REELLE CARTE ??? JE E11947 < OUI... LAI 80 < SIMULATION FIN DE CARTE... STA NACQ BR AEOT E11947: EQU $ BR ADEP PAGE < < < T R A I T E M E N T D E S C O N S T A N T E S < F L O T T A N T E S : < < TFLOAT: EQU $ IC NACQ < < ENTRY DU MODULE : < LAI -1 LR A,W LYI 0 LBI "+" < SIGNE DE LA MANITISSE PAR DEFAUT. LX NACQ LBY &AZACQ CPI '20 JE TFLOAT < ELIMINATION DES 'SPACE'. IF ORDI-"S",XWOR%,,XWOR% CPI "<" < EST-CE "<" EN TETE ??? JNE C177X < NON, MODE NORMAL (PARTIE ENTIERE < SUIVIE D'UNE EVENTUELLE PARTIE < DECIMALE). LXI 0 LAI 0 STBY &AZFL < ZFL(0)='00 (MODE PARAMETRABLE). LXI 2 STZ &AZFL < AU CAS OU LA PARTIE DECIMALE SERAIT < ABSENTE... IC NACQ LA FLOMAS LY FLOVAL LX FLORES PSR A,X,Y BSR CALEX < OUI, IL N'Y A ALORS QU'UNE PARTIE < ENTIERE PARAMETRABLE... CPI 0 < ERREUR ??? PLR A,X,Y STX FLORES STY FLOVAL STA FLOMAS JNE NFLOAT < ERREUR... LA SOM LXI 1 STA &AZFL < ZFL(2,3)=VALEUR PARTIE ENTIERE. LX NACQ LBY &AZACQ CPI "<" < "<" (=INTRODUCTEUR DECIMALE) ??? JNE NFLOAT < NON, ERREUR... IC NACQ LA FLOMAS LY FLOVAL LX FLORES PSR A,X,Y BSR CALEX < OUI, IL N'Y A ALORS QU'UNE PARTIE < DECIMALE PARAMETRABLE... CPI 0 < ERREUR ??? PLR A,X,Y STX FLORES STY FLOVAL STA FLOMAS JNE NFLOAT < ERREUR... LA SOM LXI 2 STA &AZFL < ZFL(4,5)=VALEUR PARTIE DECIMALE. LYI 6 < Y=INDEX DE L'EXPOSANT... LX NACQ LBY &AZACQ CPI "<" < "<" (=INTRODUCTEUR D'EXPOSANT) ??? JNE NFLOAT < NON, ERREUR... JMP EXPOS < OUI... C177X: EQU $ XWOR%: VAL 0 CPI "+" JE C177 CPI "-" JNE C178 C177: EQU $ LR A,B < SAUVEGARDE DU SIGNE DE LA < MANTISSE DANS B. MANTIS: EQU $ IC NACQ C178: EQU $ LX NACQ LBY &AZACQ CPI "." JNE C179 LR Y,W < ON A TROUVE UN 'POINT'. JMP MANTIS C179: EQU $ CPI "E" JE EXPOS < ON A TROUVE LE DEBUT DE < L'EXPOSANT. IF ORDI-"S",XWOR%,,XWOR% CPI "<" < COMMENTAIRE ??? JE C180 < OUI... CPI " " JE C180 XWOR%: VAL 0 CPI '0D JE C180 < FIN DE CARTE SANS EXPOSANT. RBT 8 CPI '30 < TEST PAR RAPPORT A '0'. JL NFLOAT < ERREUR. CPI '39 < TEST PAR RAPPORT A '9'. JG NFLOAT < ERREUR. LBY &AZACQ LR Y,X STBY &AZFL LR X,A CPI 8 < LA MANTISSE COMPORTE-T'ELLE < PLUS DE 8 CHIFFRES ??? JE NFLOAT < OUI , ERREUR. ADRI 1,Y JMP MANTIS < AU CHIFFRE SUIVANT. < < CAS OU ON A TROUVE LA FIN DE LA MANTISSE : < EXPOS: EQU $ IC NACQ < PASSAGE AU CARACTERE SUIVANT. C180: EQU $ PSR Y SLLD 8 ORR Y,B STB ZFLOAT CPZR W JGE C181 < CORRECTION DE L'EXPOSANT. LR Y,W < PAS DE '.' : LA DIFFERENCE=0. C181: EQU $ SBR Y,W LB FLOMAS < SAUVEGARDE A CAUSE LY FLOVAL < DE CALEX, ET IF ORDI-"T",XWOR%,,XWOR% PSR B,Y < DE SES MASQUES/VALEURS... XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LX FLORES < A CAUSE DU RESTE DE DIVISION... PSR B,X,Y XWOR%: VAL 0 BSR CALEX < CALCUL DE L'EXPOSANT. IF ORDI-"S",XWOR%,,XWOR% PLR B,X,Y STX FLORES XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% PLR B,Y XWOR%: VAL 0 STY FLOVAL STB FLOMAS JAE C182 < OK. < < ERREURS FLOTTANTES : < NFLOAT: EQU $ LAI 1 BR MERR < < CAS DES BONS NBRES FLOTTANTS : < C182: EQU $ LA SOM ADR W,A < CORRECTION DE L'EXPOSANT. PLR X STBY &AZFL LAD ZFLOAT LR A,Y LXI 0 STZ ZCDF BSR ACDF < CONVERSION ... CPZ ZCDF < COMMENT CELA S'EST-IL PASSE ??? JNE NFLOAT < MAL , ERREUR. PSR B < BIEN OK. IC PAS LR A,B LAI '24 IC INFL BR ACOMFL < C'EST TOUT ... PAGE < < < LECTURE D'UNE CARTE SUR LECTEUR OU SUR FICHIER. < < SPLCNF: EQU $ LXI -82 < ET NON PAS -80, A CAUSE DU BINAIRE... LAI " " FCART9: EQU $ STBY &AZACQX < MISE A 'SPACE' DE LA CARTE. JIX FCART9 LA RCLF < ON MET A PRIORI UN STA &AZACQX < 'R/C7-'LF' EN BOUT DE CARTE. LAI 80 STA IOCB4+2 < A CAUSE DES CARTES DYNAMIQUES... LXI -26 < MISE A BLANC NUMEROTATION NMBLAN: EQU $ LAI " " STBY &AZACQ ADRI 1,X LR X,A CPI -18 JL NMBLAN LA IOCB < LECTURE FICHIER? SLRS 8 CPI 1 JNE C1100 LA SYMBOL PSR A LA IOCB3 PSR A LAI 2 STA IOCB3 < CAS OU 'LST' EST ACTIVE... STBY IOCB3 IF ORDI-"T",XWOR%,,XWOR% LAI ">" SWBR A ORI '07 < BELL XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A < BELL WORD '3E07 XWOR%: VAL 0 STA SYMBOL LAI 2 STA IOCB3+2 LAD IOCB3 SVC 0 < DANS TOUS LES CAS ON EDITE ">"... PLR A STA IOCB3 PLR A STA SYMBOL LAD IOCB SVC 0 LAI 0 RSR C1100: EQU $ LBI -80 < INDEX OUT DE DECOMPACTAGE. LX INDIN < LECTURE SUR FICHIER LBY &ABFSGF < FIN DE SECTEUR? CPI 'FF JNE C1101 PSR C LA COM1 LR A,C USE C,COMM1 CPZ LGNMFC < LE NOM DU FICHIER COURANT < EST-IL VIDE ??? PLR C USE C JNE FCART2 < NON, VRAI FICHIER SGF. < < CAS DES FICHIERS DE NOM VIDE, < IL S'AGIT DE L'ENTREE DE CARTES < COMPRESSEES SUR NVP='0A. < FCART8: EQU $ < ENTRY : CARTE SYMBOLIQUE A < CHEVAL SUR 2 CARTES COMPRESSEES. LAI '0A STBY IOCB < LECTURE SUR LE NVP '0A. LYI 2*80 STY IOCB+2 < LECTURE DES CARTES EN BINAIRE. LAD IOCB SVC 0 < LECTURE 1 CARTE COMPRESSEE. IF ORDI-"T",XWOR%,,XWOR% ADRI -80+LLLBUF*2,Y XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% LRM A WORD -80+LLLBUF*2 ADR A,Y XWOR%: VAL 0 STY IOCB+2 < RESTAURE IOCB. CPZR X < ERREUR DE LECTURE CARTE ??? JNE C1108 < DANS LE CAS D'UNE ERREUR DE < LECTURE (!ASSIGN ABSENT ???), < ON FAIT COMME S'IL Y AVAIT UNE < FIN DE FICHIER. LAI -2 STA INDIN < EN EFFET DANS LE CAS DES CARTES < COMPRESSEES, LE 1ER MOT DU < BUFFER EST SIGNIFICATIF < CONTRAIREMENT AU SGF... < < TEST DE FIN DE FICHIER CARTE : < LAI '20 SBT 4 < A=":" EN BINAIRE, CP &ABFSG0 < LA CARTE LUE EST-ELLE ":F" ??? JNE FCART3 < NON, LAI '80 < PEUT-ETRE... SBT 0 < A="F" EN BINAIRE. LXI 0 CP &ABFSGF < LA CARTE LUE EST-ELLE ":F" ??? JE C1108 < OUI, FIN DE FICHIER... < < DECODAGE PRIMAIRE D'UNE CARTE : < FCART3: EQU $ PSR B < SAVE INDEX OUT (-80, OU BIEN < UNE VALEUR SUPERIEURE A -80 < DANS LE CAS DES CARTES SYMBO- < LIQUES A CHEVAL... LXI -1 LYI -2 < INDEX DE RANGEMENT OCTET. FCART4: EQU $ LA &ABFSGF < MOT COURANT, ADRI 1,X LB &ABFSGF < MOT SUIVANT. ADRI 1,X SLRS 4 < ELIMINATION DES BITS 12-15. SLRD 4 < ELIMINATION DES BITS 12-15. FCART6: EQU $ JAE FCART5 < ELIMINATION DES NULLS ('0). XR X,Y STBY &ABFSGF < RANGEMENT OCTET COURANT. XR X,Y ADRI 1,Y FCART5: EQU $ CPZR B < TEST DE FIN DE TRAITEMENT < DES 2 MOTS COURANTS ??? JE FCART7 < OUI, AUX SUIVANTS. LAI 0 < NON, ON DECONCATENE... SLLD 8 JMP FCART6 FCART7: EQU $ LR X,A CPI 80-4-1 < TEST DE FIN DE CARTE ??? JL FCART4 < NON, ON CONTINUE... XR X,Y LAI 'FF < ON MET UNE FAUSSE FIN DE STBY &ABFSGF < SECTEUR EN FIN DE CARTE. PLR B JMP C1101 < VERS LA DECOMPRESSION... < < CAS DES VRAIS FICHIERS SGF : < FCART2: EQU $ LAD IOCB < OUI - RELORE SVC 0 JNE C1108 CPZ &ABFSG0 JL C1108 STZ INDIN < INDEX A ZERO C1101: EQU $ LX INDIN < INDEX IN C1102: EQU $ LBY &ABFSGF < RELEVER UN CARACTERE ADRI 1,X CPI 'FE < FIN DE CARTE JE C1107 CPI 'FF < EST-CE UN FIN DE SECTEUR : CE < TEST EST DESTINE AUX CARTES < SYMBOLIQUES A CHEVAL SUR 2 < CARTES COMPRESSEES. JE FCART8 < OUI, IL FAUT LIRE LA CARTE < SUIVANTE... TBT 8 < EST-CE REPETITION /TABULATION? JC C1103 XR X,B < NORMAL - LE PLACER STBY &AZACQX ADRI 1,X XR X,B JMP C1102 C1103: EQU $ RBT 8 CPI 80 < REPETITION OU TABULATION? JGE C1104 ADRI -80,A LR A,B JMP C1102 C1104: EQU $ ADRI -80,A < REPETITION LR A,Y LBY &ABFSGF < CARACTERE A REPETER ADRI 1,X XR X,B < LE PLACER C1105: EQU $ STBY &AZACQX ADRI 1,X CPZR Y < FINI? JE C1106 ADRI -1,Y < NON - CONTINUER JMP C1105 C1106: EQU $ XR X,B JMP C1102 C1107: EQU $ STX INDIN LXI -27 < AUGMENTER LA NUMEROTATION C1110: EQU $ LBY &AZACQ CPI " " < BLANC? JE C1112 ADRI 1,A CPI "9" < DEPASSE 9? JG C1111 STBY &AZACQ < NON - FIN JMP C1113 C1111: EQU $ LAI "0" < 10 - METTRE 0 ET PRECEDENT STBY &AZACQ ADRI -1,X JMP C1110 C1112: EQU $ LAI "1" < BLANC - METTRE 1 STBY &AZACQ C1113: EQU $ LXI -16 < LA TRANSFERER DANS LA LIGNE LA &AZACQ ADRI 3,X STA &AZACQ ADRI -2,X LA &AZACQ ADRI 3,X STA &AZACQ ADRI -2,X LA &AZACQ ADRI 3,X STA &AZACQ LAI 0 < CODE DE RETOUR RSR C1108: EQU $ LAI 80 < SIMUL. FIN DE CARTE STA NACQ LAI 1 RSR PAGE < < CONVERSION DES NOMBRES FLOTTANTS < ON A DANS ZFLOAT(EN BYTES) < LE SIGNE(+ OU -), UN POINTEUR SUR LA FIN DE LA ZONE, < PUIS LES CARACTERES DU NOMBRE, ET L'EXPOSANT EN BINAIRE < LOCAL LOC1: EQU $ NBFLT: DZS 2 < NB FLOTTANT DE TRAVAIL FL10: WORD '5004;'0000 < NB 10 EN FLOTTANT PROG USE L,LOC1+'80 WORD LOC1+'80 < RELAI VERS LE LOCAL CDF: EQU $ PSR L < POSITIONNER LA BASE L LRP L LA -2,L LR A,L IF ORDI-"S",XWOR%,,XWOR% LXI 0 LBY &AZFL JANE CDF1X < MODE NORMAL... LXI 1 LA &AZFL < MODE PARAMETRE... FLT < (A,B)=PARTIE ENTIERE. FST NBFLT < SAVE LA PARTIE ENTIERE... LXI 2 LA &AZFL FLT < (A,B)=PARTIE DECIMALE... CDF1Y: EQU $ PSR A,B FIX CPI 0 < INFERIEURE A 1 ??? PLR A,B JE CDF1Z < OUI (FIX=0)... FDV FL10 < NON, ON REDUIT PAR 10... JMP CDF1Y CDF1Z: EQU $ FAD NBFLT < CONCATENATION ENTIERE-DECIMALE... LXI 6 < INDEX DE L'EXPOSANT... JMP CDF3X CDF1X: EQU $ XWOR%: VAL 0 LAI 0 < NB FLOTTANT RESULTAT=0.0 STA NBFLT+1 SBT 8 STA NBFLT LA ZFLOAT < PRELEVER POINTEUR DE FIN ANDI 'FF LR A,Y CDF1: EQU $ CPR Y,X JGE CDF2 FLD NBFLT < CALCUL DE LA MANTISSE FMP FL10 JCV CDF9 FST NBFLT LBY &AZFL ADRI -'30,A FLT FAD NBFLT JCV CDF9 FST NBFLT ADRI 1,X JMP CDF1 CDF2: EQU $ LBY ZFLOAT < METTRE LE SIGNE CPI "-" JNE CDF3 FLD NBFLT FNEG IF ORDI-"S",XWOR%,,XWOR% CDF3X: EQU $ XWOR%: VAL 0 FST NBFLT CDF3: EQU $ LBY &AZFL < PRELEVER L'EXPOSANT SWBR A SARS 8 LYI 0 < RELEVER SON SIGNE JAGE CDF4 NGR A LYI 1 CDF4: EQU $ LR A,W < VALEUR ABSOLUE EXPOSANT FLD NBFLT CDF5: EQU $ CPZR W < APPLIQUER L'EXPOSANT JLE CDF8 CPZR Y < SUIVANT SON SIGNE JNE CDF6 FMP FL10 JMP CDF7 CDF6: EQU $ FDV FL10 CDF7: EQU $ JCV CDF9 ADRI -1,W JMP CDF5 CDF8: EQU $ PLR L < RETOUR - VALEUR DANS A-B RSR CDF9: EQU $ IC ZCDF < ERREUR JMP CDF8 PAGE < < < F I N D E A S S Y S : < < IF ORDI-"T",XWOR%,,XWOR% FASSYS: EQU $ XWOR%: VAL 0 < < < D E S C R I P T E U R S D E L A < T A B L E D E S S Y M B O L E S : < < TBPAGE: DZS 64 < DESC. PAGES IF XXXSGN-0,XWOR%,,XWOR% PAGEX: DZS 64/16 < LISTE D'EXISTENCE DES PAGES. XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% TBBIT1: DZS 2 < TABLE BITS POUR ABSENCE DE TBBIT2: DZS 2 < SYMBOLES LORS DES RECHERCHES. XWOR%: VAL 0 < < < D E S C R I P T I O N D E S S E C T I O N S : < < DECSEC: DZS 3*NBRSEC < DESCRIPTEURS DE SECTIONS. IF NBRSEC-'3F,XWORK1,XWORK1, IF ATTENTION : LE NUMERO DE SECTION DOIT IF TENIR SUR 6 BITS !!! XWORK1: VAL 0 < < < B U F F E R B I N A I R E : < < BUFBIN: DZS LLLBUF X100: VAL BUFBIN-ZERO*2 < ADRESSE OCTET DU BUFFER BINAIRE. BUFBI2: EQU ZERO+X100 < < < B U F F E R S G F : < < BUFSGF: DZS LLLBUF X100: VAL BUFSGF-ZERO*2 < ADRESSE OCTET DU BUFFER SGF. BUFSG2: EQU ZERO+X100 < < < B U F F E R S S I M U L A T I O N ' E E ' : < < SIML: EQU $ DZS YNZACQ < SIMULATION LECTURES 'EDITS'. SIME: EQU $ DZS YNZACQ < SIMULATION ECRITURES 'EDITS'. < < < P I L E D E T R A V A I L : < < AKSTOR: EQU $-1 DZS 24 IF ORDI-"S",XWOR%,,XWOR% < < < P I L E P U S H / P U L L : < < PUSPUL: EQU $ BYTE LPUSUL;0 < DESCRIPTEUR DE LA PILE. DZS LPUSUL < PILE... < < < A C C E L E R A T E U R D ' A C C E S < A L A T A B L E D E S S Y M B O L E S : < < XWOR%1: VAL $-ZERO XWOR%2: VAL XLGPAG-1)'FFFF XWOR%3: VAL XWOR%1+XLGPAG-1(XWOR%2 XWOR%4: VAL XWOR%3-XWOR%1-'10-'10/2 IF XWOR%4-64,,XWOR%5,XWOR%5 XWOR%4: VAL XLGPAG/2+XWOR%4 < ON ASSURE UNE LONGUEUR MINI. XWOR%5: VAL 0 XWOR%4: VAL XLGPAG/2+XWOR%4 < ON AGRANDIT... IF XXXSGN-0,XWOR%9,,XWOR%9 XWOR%4: VAL XLGPAG/2+XWOR%4 < ET ENCORE... XWOR%9: VAL 0 TBBIT1: DZS XWOR%4 TBBIT2: DZS XWOR%4 XWOR%6: VAL XWOR%4*16-1 < LONGUEUR-1 EN BITS DE CES TABLES. LTBBIT: EQU ZERO+XWOR%6 < AFIN D'INDEXER EN BITS CES TABLES. XWOR%: VAL 0 < < < T O P U T I L E D E S Y M B O L : < < TOP: EQU $ IF XXXSGN-1,XWOR%,,XWOR% IF ORDI-"S",XWOR%,,XWOR% DZS 1000 < A PRIORI... XWOR%: VAL 0 IF ORDI-"T",XWOR%,,XWOR% XWOR%1: VAL TOP-FASSYS < NOMBRE DE MOTS LCLEAR: EQU ZERO+XWOR%1 < A RAZER... XWOR%: VAL 0 IF ORDI-"S",XWOR%,,XWOR% IF XXXSGN-0,,XWOR%1, DZS '400 < ?!?!?!?? XWOR%1: VAL 0 FASSYS: EQU $ XWOR%: VAL 0 PAGE < < < GENERATION EN TANT QU'ITEM. < < FITEM: EQU FASSYS LGIT: VAL FITEM-DBCHIT*2 IF ORDI-"T",X100,,X100 IF '2B-1*128+80*2-LGIT,,,X100 IF A S S Y S T R O P G R A N D !!! X100: VAL 0 IF XXXSGN-1,XWOR%,,XWOR% SIZE: EQU ZERO-LGIT < SIZE<0 ==> (SIZE)+2K LORS DE !CALL. XWOR%: VAL 0 IF XXXSGN-0,XWOR%,,XWOR% SIZE: EQU ZERO+LGIT XWOR%: VAL 0 LOCAL LONGR: VAL FITEM-DITEM DEMITE: WORD '8402 < DEMANDE DE GENERATION WORD DITEM-ZERO*2 WORD LONGR*2 WORD -1 ASTASS: WORD STASS+2 < POUR METTRE LA LONGUEUR ALOAED: WORD LOADED+2 < REELLE DE 'ASSYS'. PROG USE L,DEMITE+'80 WORD DEMITE+'80 WORD COMMUN GENERE: EQU $ LRP L LR L,C LA -2,L LR A,L LA -1,C LR A,C LA KSTOR X200: VAL 0 LR A,K LA DEMITE+2 < LONGUEUR REELLE DE 'ASSYS'. STA &ASTASS STA &ALOAED ITEDEM: EQU $ LAD DEMITE SVC 0 JE FINGEN LAD CCI SVC 0 JMP ITEDEM FINGEN: EQU $ LAD CCI SVC 0 JMP FINGEN X100: VAL 0 END GENERE