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