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'ASSEBLEUR SYMBOL EST EN FAIT L'ASSEMBLEUR ASM
< (ASM=ASSEMBLEUR SQUELETTIQUE MINABLE) PRODUIT
< PAR UNE USINE QUI S'EST LANCEE DANS L'INFORMATIQUE
< JE VEUX PARLER DE LA TELEMECANIQUE . DONC , CET
< ASM A ETE ADAPTE AUX BESOINS PREMIERS DU
< CLIENT (MOI EN L'OCCURENCE) , 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'.
WORD DITEM-ZERO*2
WORD DBCHIT-DITEM*2
WORD -1
STASS: WORD '8402 < GENERATION DE 'ASSY'.
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 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'.
LAD DELASS
SVC 0 < DELETE A PRIORI 'ASSY'.
LAD STASS
SVC 0 < GENERATION DE 'ASSY'.
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'.
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 :
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
<
<
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 "
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 (c) Jean-François Colonna, 2011-2013.
Copyright (c) CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2011-2013.