<***********************************************************************
<*                                                                     *
<*                                                                     *
<*       L I N K - E D I T E U R   6 4 K  :
<*                                                                     *
<*       LKSYS CHARGE EN ABSOLU SUR LES DISQUES
<*       ELLE DEMANDE LE NUMERO DE DISQUE(2 OU 3),                     *
<*       L'ADRESSE DE DEBUT DE CHARGEMENT, L'ADRESSE DE FIN            *
<*       POUR VERIFICATION, ET UNE ADRESSE DE TRANSLATION              *
<*       PERMETTANT UN CHARGEMENT DECALE.                              *
<*       LES DEUX VERSIONS DEMANDENT LES NOMS DE FICHIERS A CHARGER    *
<*                                                                     *
<*       MESSAGES D'ERREURS :                                          *
<*           - 0X : ERREUR SYSTEME OU ASSEMBLEUR                       *
<*               - '01 : ERREUR LORS DE LA LECTURE DU BINAIRE          *
<*           - 1X : ERREURS DUES A L'ASSEMBLEUR                        *
<*               - '11 : NUMERO DE COMMANDE ERRONNEE                   *
<*               - '12 : COMMANDE ABSOLUE EN TRANSLATABLE              *
<*               - '13 : ERREUR DE CHECKSUM                            *
<*           - 2X : ERREUR DE PROGRAMMATION                            *
<*               -'21 : ADRESSE GENEREE DANS UNE INSTRUCTION > 32K     *
<*               - '22 : ADRESSE DE CHARGEMENT > 32K                   *
<*               - '23 : PROGRAMME DEPASSANT LA PARTITION MEMOIRE MAXI *
<*               - '24 : ENTRY DEJA DEFINI                             *
<*               - '25 : EXTERN NON DEFINI(S)                          *
<*               - '26 : DEBORDEMENT DE LA TABLE DE REFERENCES         *
<*           - 3X : ERREUR CHARGEMENT DISQUE                           *
<*               -'31 : DEPASSEMENT ADRESSE FIN CHARGEMENT             *
<*               -'32 : AUTO-CHAINAGE : LE SYSTEME N'A PU
<*                      DISCRIMINER UN BIT D'INDEXATION
<*                      DU BIT FORT D'UNE ADRESSE.
<*                                                                     *
<*                                                                     *
<***********************************************************************
         PAGE
         IDP         "LINK 64K DISQUE - RELEASE 12/12/1977"
         IF          ORDI-"T",XWOR%,,XWOR%
         IDP         "VERSION EXECUTABLE SOUS CMS4 - T1600"
QUANTA:  VAL         1               < UNITE D'ALLOCATION DISQUE.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         IDP         "VERSION EXECUTABLE SOUS CMS5 - SOLAR"
QUANTA:  VAL         3               < UNITE D'ALLOCATION DISQUE.
XWOR%:   VAL         0
         PAGE
<***********************************************************************
<*                                                                     *
<*       RESERVATION DE PLACE POUR LE PROGRAMME A CHARGER.             *
<*                                                                     *
<***********************************************************************
         TABLE
<***********************************************************************
<*                                                                     *
<*       INTERFACE AVEC CMS4.                                          *
<*                                                                     *
<***********************************************************************
ZERO:    EQU         $               <  ZERO TRANSLATABLE DU PROGRAMME
         DZS         'C
DITEM:   EQU         $
         ASCI        "LKSY"
         BYTE        "S";'04
DBCHIT:  EQU         $
         WORD        SIZE
         WORD        PLOAD
<***********************************************************************
<*                                                                     *
<*       ENTREE DANS LE PROCESSEUR.                                    *
<*                                                                     *
<***********************************************************************
         WORD        LOAD
         PROG
PLOAD:   EQU         $
         LRP         L
         BR          -1,L
BUFSOR:  DZS         128
TOUDEB:  EQU         $
BUFBIN:  DZS         128*QUANTA      < BUFFER D'ENTREE DU BINAIRE.
BUFREF:  DZS         128             < BUFFER POUR LES REFERENCES
         PAGE
<***********************************************************************
<*                                                                     *
<*       COMMON.                                                       *
<*                                                                     *
<***********************************************************************
M1K:     BYTE        17;" "
         ASCI        "MOINS D'1 K MOTS"
MK:      BYTE        7;" "
         ASCI        "K MOTS"
MSOIT:   BYTE        6;'6D
         ASCI        " SOIT "
MOK:     BYTE        45;'6D
         ASCI        "OK? (I=INITIALISER DK,O=NE PAS INITIALISER) "
MDK:     BYTE        9;'6D
         ASCI        "NSP DK ="
MAP:     BYTE        21;'6D
         ASCI        " A PARTIR DU SECTEUR"
MLON:    BYTE        21;'6D
         ASCI        " SUR UNE LONGUEUR DE "
         COMMON
COM:     EQU         $
SAVES:   BYTE        23;'6D
         ASCI        "ANOMALIE AVEC XXXXXX  "
KIN:     WORD        -1              < COMPTAGE DU PASSAGE SUR LA
                                     < DEMANDE DES INFOS DISQUES.
KEN:     WORD        -1              < COMPTAGE DES ENTREES DANS LKSYS.
BUFFER:  DZS         40              <  BUFFER D'ECRITURE DES MESSAGES
INDEX:   WORD        128*QUANTA-1/3*3*2 < INDEX DU BUFFER BINAIRE.
NBREF:   WORD        0               < NB DE REFERENCES
XBUFRF:  WORD        -128            < PT SUR LE BUFFER DES REFERENCES
NORFCP:  DZS         1               < COMPTAGE DES REFERENCES EXISTANTES
ECRREF:  WORD        '0C02           < ECRITURE REFERENCES EN SCRATCH
         WORD        BUFREF-ZERO*2
         WORD        256
         WORD        0
LECREF:  WORD        '0C00           < LECTURE
         WORD        BUFREF-ZERO*2
         WORD        256
         WORD        0
AM1K:    WORD        M1K
AMK:     WORD        MK
AMSOIT:  WORD        MSOIT
AMLON:   WORD        MLON
AMAP:    WORD        MAP
AMDK:    WORD        MDK
AMOK:    WORD        MOK
DEMOUT:  WORD        '0202           < EDITION DES MESSAGES.
         WORD        0
         WORD        0
APRINT:  WORD        PRINT           < EDITION DES MESSAGES SUR DEMOUT.
CHKSUM:  DZS         1               <  CHECKSUM
ABSMOD:  WORD        -1              <  INDICATEUR TRANSLATABLE-ABSOLU
ADSTOC:  DZS         2               <  QUADRUPLET 'AU FRAIS'
PAFINI:  DZS         1               <  RELAI POUR SUITE DE COMMANDE
FINMOD:  DZS         1               <  INDICATEUR DE FIN DE MODULE
CPTLOD:  DZS         1               <  COMPTEUR DE REPEAT LOAD
OPNBO:   WORD        '0305           <  OPEN-OLD ENREGISTREMENT
         WORD        1               <  CLE=1.0
         WORD        0
CCI:     WORD        1               <  RETOUR AU CCI SI  ERREUR
IOCBIN:  WORD        '0308           <  LECTURE MODE SAVE
         WORD        BUFBIN-ZERO*2
         WORD        128*QUANTA*2
IOCBL:   WORD        '0202           <  SORTIE LISTING
         WORD        BUFFER-ZERO*2
         WORD        0
MESDSK:  BYTE        '6D;"D"         < MESSAGE N0 DISQUE
         ASCI        "K="
MESAD1:  BYTE        '6D;'40         < MESSAGE ADRESSE DEBUT
         ASCI        " DEBUT ="
MESAD2:  BYTE        '6D;'40         < MESSAGE ADRESSE FIN
         ASCI        " FIN ="
MESTRA:  BYTE        '6D;"T"         < ADRESSE TRANS
         ASCI        "RANS ="
DSKMES:  WORD        '0202           < ENVOI DES MESSAGES
         WORD        MESDSK-ZERO*2
         WORD        4
AD1MES:  WORD        '0202
         WORD        MESAD1-ZERO*2
         WORD        10
AD2MES:  WORD        '0202
         WORD        MESAD2-ZERO*2
         WORD        8
TRAMES:  WORD        '0202
         WORD        MESTRA-ZERO*2
         WORD        8
RELBEN:  WORD        BUFFER+2,X
HEXDEC:  WORD        SPHEXA          < SP CONVERSION CARAC.-BINAIRE
DEMDSK:  WORD        '0101           < DEMANDE N0 DISQUE
         WORD        BUFFER-ZERO*2
         WORD        1
DEMADR:  WORD        '0101           < DEMANDE ADRESSE DISQUE
         WORD        BUFFER-ZERO*2
         WORD        4
ASSDSK:  WORD        '0003           < DEMANDE ASSIGNATION DISQUE
         WORD        '0400
DSKDEB:  WORD        0               < ADRESSE DEBUT
DSKFIN:  WORD        0               < ADRESSE FIN
ADDTRA:  WORD        0               < ADRESSE TRANS
UNFFF:   WORD        '1FFF
LIRDSK:  WORD        '0400           < LECTURE DISQUE
         WORD        BUFSOR-ZERO*2
         WORD        256
         WORD        0
ECRDSK:  WORD        '0402           < ECRITURE DISQUE
         WORD        BUFSOR-ZERO*2
         WORD        256
         WORD        0
ADISK:   WORD        BUFSOR,X        < RELAI VERS BUFFER
LIRMOT:  WORD        LECMOT          < SP DE LECTURE(DISQUE)
ECRMOT:  WORD        PLAMOT          < SP D'ECRITURE UN MOT(DISQUE)
SWRITE:  WORD        WRITED          < SP D'ECRITURE DISQUE
ADLANC:  WORD        DEBPG           <  DEBUT DU PROGRAMME CHARGE
RELBUF:  WORD        BUFBIN+1,X      <  RELAI BUFFER BINAIRE BIT INDEX
ABUFB:   WORD        BUFBIN
ABUFRF:  WORD        BUFREF+128,X
ABUFAB:  WORD        BUFREF+128-3,X  < POUR ACCES AU 1ER MOT D'UN
                                     < DESCRIPTEUR DE SYMBOLE REF/DEF.
SORMES:  WORD        ENTMOT          <  SP DE SORTIE QUESTIONS
MERCLF:  WORD        MSGRC           <  SP DE SORTIE DE CR-LF
MESER:   WORD        MSGERR          <  SP DE SORTIE D'ERREURS
BANDEF:  WORD        FINBAN
AFINT:   WORD        FINTOU
LITQ:    WORD        SPLITQ          <  SP DE LECTURE 1 QUADRUPLET
AUFRAI:  WORD        ADSTOC+2,X      <  QUADRUPLET 'AU FRAIS'
TABCDE:  WORD        TABAIG,X        <  AIGUILLAGE SUIVANT COMMANDE
TABAIG:  WORD        DEBUT           <  CHARGER EN
         WORD        SUITE           <  CHARGER A LA SUITE SANS TRANSL.
         WORD        LANCT           <  ADRESSE DE LANCEMENT
         WORD        REPEAT          <  REPEAT LOAD
         WORD        CHECK           <  FIN BANDE ET CHECKSUM
         WORD        COMENT          <  COMMENTAIRE
         WORD        PACDE           <  SUITE DE COMMANDE
         WORD        TRANSL          <  CHARGER A LA SUITE EN TRANS.
         WORD        REMADR          <  REMONTER CHAINE ADRESSES
         WORD        DEPADR          <  DEPLACEMENT SUR ADRESSE
         WORD        LECTUR          <  DEBUT DE PST
         WORD        NSECT           <  NOM DE SECTION
         WORD        ENT             <  ENTRY
         WORD        REMJMP          <  DEF. DE REF. AVANT RELATIVE
TRANSB:  WORD        BTRANS          <  SP DE TRANSLATION DE B
RANGB:   WORD        VERIFW          <  SP RANGE B EN VERIFIANT ADRESSE
NEWCHG:  WORD        AUTMOD          <  RELANCE DU MODULE
AREMA2:  WORD        REMAD2          <  SUITE DE COMMANDE CHAINE
ADEPA2:  WORD        DEPAD2          <  SUITE DE COMMANDE DEPLACEMENT
ADRFAT:  WORD        RFATAL          <  TRAITEMENT ERREUR FATALE
ADLECT:  WORD        LECTUR          <  LECTURE DE QUADRUPLETS
AREXT1:  WORD        REXT1           < SUITE DE COMMANDE EXT
AREXT2:  WORD        REXT2
AREXT3:  WORD        REXT3
ASECT1:  WORD        SECT1           < SUITE DE COMMANDE SECTION
ASECT2:  WORD        SECT2
ARENT1:  WORD        RENT1
ARENT2:  WORD        RENT2
ARENT3:  WORD        RENT3
ARJMP2:  WORD        REMJM2          <  SUITE DE COM. REF. AVANT REL.
CHAINE:  WORD        SPCHAI          < SP DE REMONTEE D'UNE CHAINE D'ADRESSE
CHREF:   WORD        SPCHRF          < SP DE RECHERCHE DE REFERENCE
PLNOM:   WORD        SPLNOM          < SP DE PLACEMENT NOM REFERENCE
SORCAR:  WORD        PRECAR          <  SORTIE DE 3 CARACTERES
SORC6:   WORD        SORTI6          < SORTIE DE 6 CARACTERES
SORADR:  WORD        ECRADR          <  SORTIE ADRESSE
SORHEX:  WORD        BUFFER+3,X      <  POUR ADRESSE RELATIVE
ADINIT:  DZS         1               <  DEBUT CHARGEMENT D'UN MODULE
RCLF:    WORD        '0D0A           <  CR-LF
ERREUR:  ASCI        "ERU "          <  MESSAGE D'ERREUR
START:   ASCI        "RUN "          <  MESSAGE RUN
TRENTE:  WORD        '3030
NB7FFF:  WORD        '7FFF
BLQ:     ASCI        " '"
DNMF:    BYTE        '6D;"F"         < DEMANDE DU NOM DE FICHIER
         ASCI        "ICH="
DEMNMF:  WORD        '0202
         WORD        DNMF-ZERO*2
         WORD        6
ASSO:    ASCI        "!ASSIGN 3=O,"
NMFC:    DZS         20              < NOM DU FICHIER
DEMASS:  WORD        '0002
         WORD        ASSO-ZERO*2
         WORD        80
LECNMF:  WORD        '0101           < LECTURE DU NOM
         WORD        NMFC-ZERO*2
         WORD        40
MCLOS:   ASCI        "!CLOSE"        < !CLOSE
         BYTE        '04;0
DEMCLO:  WORD        '0002           < DEMANDE DE "!CLOSE"
         WORD        MCLOS-ZERO*2
         WORD        80
LOCAL:   WORD        LOC+'80         < POUR INITIALISER L.
KSTORE:  DZS         20              < PILE DE TRAVAIL.
<
<
<        L O C A L  :
<
<
LSEND:   VAL         64              < NBRE D'OCTETS EMIS SIMULTANEMENT.
XWORK1:  VAL         256/LSEND*LSEND
XWORK1:  VAL         256-XWORK1
         IF          XWORK1,,XWORK,
         IF          ATTENTION : 'LSEND' DOIT DIVISER '256' !!!
XWORK:   VAL         0
BSEND:   DZS         LSEND/2         < BUFFER D'EMISSION SUR 'OB.
BSEND1:  BYTE        '40;0           < CARACTERE DE FIN D'EMISSION.
                                     < ("A-ROND")
         LOCAL
LOC:     EQU         $
ABSEND:  WORD        BSEND,X         < RELAI D'ACCES A 'BSEND'.
IBSEND:  WORD        0               < INDEX DE 'BSEND'.
KHORL0:  VAL         '1000           < ON SORTIRA L'ADRESSE COURANTE (W)
                                     < TOUS LES 'KHORL0' MOTS LORS DE
                                     < L'EMISSION SUR '0B.
KHORL:   WORD        KHORL0          < DECOMPTEUR DES MOTS EMIS.
IKHORL:  WORD        KHORL0          < POUR REINITIALISER KHORL.
DSEND:   WORD        '0B02           < DEMANDE D'EMISSION 'LSEND' CARACTERES.
         WORD        BSEND-ZERO*2
         WORD        LSEND
DSEND1:  WORD        '0B02           < ENVOI D'UNE FIN DE MESSAGE.
         WORD        BSEND1-ZERO*2
         WORD        1
MSEND:   BYTE        15;'6D
         ASCI        "SEND SUR '0B ?"
LONG:    WORD        0               < NBRE DE MOTS (0-64K) A EMETTRE.
MLONG:   BYTE        7;'6D
         ASCI        "#MOTS="
MFSEND:  BYTE        9;'6D
         ASCI        "FIN SEND"
MINIT:   BYTE        19;'6D
         ASCI        "INITIALISATION DK!"
         IF          ORDI-"S",XWOR%,,XWOR%
MCMS:    BYTE        7;'6D
         ASCI        "CMS5 ?"
XWOR%:   VAL         0
         PAGE
<***********************************************************************
<*                                                                     *
<*       C H A R G E U R .                                             *
<*                                                                     *
<*       INITIALISATION DU CHARGEUR.                                   *
<*                                                                     *
<***********************************************************************
         PROG
         WORD        COM+'80
LOAD:    EQU         $
         LRP         C               < INITIALISATION DE LA BASE C
         LA          -1,C
         LR          A,C
         LAD         KSTORE-1        <  INITIALISATION DE K
         LR          A,K
         LA          LOCAL
         LR          A,L             < INITIALISATION DE L.
         EORR        W               < ADRESSE DEBUT CHARGEMENT
         STZ         KIN             < REINITIALISATION DE KIN,
         DC          KIN             < A CAUSE DES ALT-MODES....
         BSR         MERCLF          <  ENVOI DE CRT CHARGEMENT
         LAD         DEMCLO          < !CLOSE
         SVC         0
         IC          KEN             < COMPTAGE DES ENTREES.
         JE          GOON            < C'EST LA 1ERE, OK..
<
< ABORT SUR LES ALT-MODES :
<
ABORT:   EQU         $
         LAD         CCI
         SVC         0
         JMP         ABORT           < ABORT DEFINITIF...
<
< CAS DE LA 1ERE ENTREE :
<
GOON:    EQU         $
         BR          BANDEF
<***********************************************************************
<*                                                                     *
<*       OUVERTURE DU FICHIER CONTENANT LE MODULE A CHARGER.           *
<*                                                                     *
<***********************************************************************
AUTMOD:  EQU         $
SUIVAN:  EQU         $
         LAD         DEMASS          < ASSIGN
         SVC         0
         LAD         OPNBO           <  OUVERTURE DU FICHIER BINAIRE
         SVC         0               <  DANS LE MODE OPEN-OLD-ENREGIS-
                                     <  TREMENT
         JE          RELANS          <  GO ON SI OPEN OK
<***********************************************************************
<*                                                                     *
<*       SORTIE EN ERREUR DU LOAD.                                     *
<*                                                                     *
<***********************************************************************
HORTEN:  EQU         $
         LBY         ASSDSK+1        < DESASSIGNER LE DISQUE
         STZ         ASSDSK+1
         STBY        ASSDSK+1
         LAD         ASSDSK
         SVC         0
         LAD         CCI             <  RETOUR AU CCI
         SVC         0
         JMP         $-1
<***********************************************************************
<*                                                                     *
<*       ERREUR FATALE.                                                *
<*                                                                     *
<***********************************************************************
RFATAL:  EQU         $
         XR          A,K             <  REINITIALISATION DE K
         LAD         KSTORE-1
         XR          A,K
         BSR         MESER           <  SORTIE DU MESSAGE D'ERREUR
         JMP         HORTEN
         PAGE
<***********************************************************************
<*                                                                     *
<*       DEBUT DU CHARGEMENT.                                          *
<*       COMMANDE 'A3 POUR TRANSLATABLE,                               *
<*       SINON, C'EST EN ABSOLU.                                       *
<*                                                                     *
<***********************************************************************
RELANS:  EQU         $
         BSR         LITQ            <  LECTURE 1ER QUADRUPLET
         CPI         'A3             <  MODULE TRANSLATABLE ?
         JNE         ANALIZ          <  SI ABSOLU, ABSMOD=-1
         IC          ABSMOD          <  SI TRANSLATABLE, ABSMOD=0
<***********************************************************************
<*                                                                     *
<*       LECTURE DES QUADRUPLETS ET ANALYSE D'UNE COMMANDE.            *
<*                                                                     *
<***********************************************************************
LECTUR:  EQU         $
         BSR         LITQ            <  LECTURE D'UN QUADRUPLET
ANALIZ:  EQU         $
         ANDI        3               <  COMMANDE ABSOLU OU TRANSLATABLE
         JAE         ABSOL
         CPI         2               <  COMMANDE TRANSLATABLE
         JNE         VOIEXT
         CPZ         ABSMOD
         JL          PATRAN
         LBY         ADSTOC          <  NUMERO DE LA COMMANDE
         ANDI        '1C
         ADRI        '18,A
NUMCDE:  EQU         $               <  AIGUILLAGE SUIVANT COMMANDE
         SLRS        2
         LR          A,X
         BR          &TABCDE
ABSOL:   EQU         $               <  COMMANDE ABSOLUE
         LBY         ADSTOC
         ANDI        '1C
         CPI         '14
         JLE         NUMCDE
ERCMDE:  EQU         $               <  NUMERO COMMANDE ERRONNE
         LAI         '11
         BR          ADRFAT
PATRAN:  EQU         $               <  COMMANDE ABSOLUE EN TRANSLATAB.
         LAI         '12
         BR          ADRFAT
VOIEXT:  EQU         $
         LBY         ADSTOC
         CPI         'A5             < EXT
         JNE         ERCMDE
         PAGE
<***********************************************************************
<*                                                                     *
<*       'A5 - REF
<*                                                                     *
<***********************************************************************
         STB         BUFFER          < PLACER 2 PREMIER CARAC. DU NOM
         LA          AREXT1          < ATTENDRE LA SUITE
         STA         PAFINI
         JMP         LECTUR
REXT1:   EQU         $               < SUITE
         STB         BUFFER+1        < 2 CARAC. SUIVANTS
         LA          AREXT2          < ATTENDRE LA SUITE
         STA         PAFINI
         JMP         LECTUR
REXT2:   EQU         $               < SUITE
         STB         BUFFER+2        < 2 DERNIER CARAC.
         LA          AREXT3          < ATTENDRE LA SUITE
         STA         PAFINI
         JMP         LECTUR
REXT3:   EQU         $               < FIN
         BSR         TRANSB          < ADRESSE RELATIVE DEBUT PARTITION
         BSR         CHREF           < CHERCHER LE REFERENCE
         JANE        EXTABS
         PSR         W               < ELLE EXISTE
         LR          B,W             < SAUVER VALEUR EXT
         LA          &ABUFRF         < VALEUR REF.
         CPZ         &ABUFAB         < TEST BIT0 DU MOT0 ???
         JL          DEJEXT          < BIT0=1 : DEJA REFERENCEE.
         LR          A,B             < DEFINI ENT
         BSR         CHAINE          < PLACER VALEUR DANS CHAINE
RETEXT:  EQU         $
         PLR         W
         JMP         LECTUR
DEJEXT:  EQU         $
         BSR         LIRMOT
         CP          NB7FFF          < POUR LA CHAINER AVEC LA PRECEDENTE
         JE          EXT10
         LR          A,W
         JMP         DEJEXT
EXT10:   EQU         $
         LA          &ABUFRF
         STB         &ABUFRF
         LR          A,B
         LA          0,W
         JAGE        $+2             < INDEXATION
         SBT         16
         BSR         ECRMOT
         LAD         ECRREF
         SVC         0
         JMP         RETEXT
EXTABS:  EQU         $
         BSR         PLNOM           < ABSENT - LA PLACER
         STB         &ABUFRF
         LA          &ABUFAB         < ACCES AU MOT0 DU DESCRIPTEUR,
         SBT         0               < BIT0=1 : INDICATEUR 'REF' REFERENCEE
         STA         &ABUFAB         < MAIS NON ENCORE DEFINI...
         ADRI        1,X
         STX         XBUFRF
         LAD         ECRREF
         SVC         0
         IC          NBREF
         JMP         LECTUR
         PAGE
<***********************************************************************
<*                                                                     *
<*       'A0 - CHARGER EN.                                             *
<*       POSITIONNER W.                                                *
<*                                                                     *
<***********************************************************************
DEBUT:   EQU         $
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         LR          B,W
         JMP         LECTUR
         PAGE
<***********************************************************************
<*                                                                     *
<*       '24 - CHARGER A LA SUITE SANS TRANSLATER.                     *
<*       RANGER A LA SUITE EN TENANT COMPTE DU REPEAT LOAD.            *
<*                                                                     *
<***********************************************************************
SUITE:   EQU         $
         BSR         RANGB           <  RANGEMENT DE L'INFORMATION
         ADRI        1,W
         DC          CPTLOD          <  REPEAT LOAD?
         JG          SUITE
         STZ         CPTLOD          <  REMISE A ZERO DU REPEAT LOAD
         JMP         LECTUR
         PAGE
<***********************************************************************
<*                                                                     *
<*       '28 - ADRESSE DE LANCEMENT.                                   *
<*       RELEVER L'ADRESSE.                                            *
<*                                                                     *
<***********************************************************************
LANCT:   EQU         $
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         STB         &ADLANC
         IC          FINMOD          <  FIN DE MODULE=1
         JMP         LECTUR
         PAGE
<***********************************************************************
<*                                                                     *
<*       'AC - REPEAT LOAD.                                            *
<*       POSITIONNER LE COMPTEUR.                                      *
<*                                                                     *
<***********************************************************************
REPEAT:  EQU         $
         STB         CPTLOD
         BR          ADLECT
         PAGE
<***********************************************************************
<*                                                                     *
<*       '30 - CHECKSUM ET FIN DE BANDE.                               *
<*       VERIFICATION DU CHECKSUM ET FIN DE CHARGEMENT.                *
<*                                                                     *
<***********************************************************************
CHECK:   EQU         $
         LA          CHKSUM          <  VERIFICATION
         CPR         B,A
         JE          BONSUM
         LAI         '13             < ERREUR DANS LE CHECKSUM
         BR          ADRFAT
BONSUM:  EQU         $
         LA          OPNBO           <  MISE EN MODE CLOSE-SAVE DE LE
         LR          A,Y             <  SAUVER L'ETAT ACTUEL
         ORI         2               <  DEMANDE 'OPNBO'
         STA         OPNBO
         LAD         OPNBO           <  FERMETURE EN SAVE DE
         SVC         0               <  L'ENREGISTREMENT
         STY         OPNBO           <  RESTAURER L'ETAT INITIAL
         CPZ         FINMOD          <  FIN DE MODULE?
         JE          FINBAN          <  FIN DE BANDE UNIQUEMENT
         LA          &ADLANC
         JAL         FINBAN          <  FIN DE MODULE SANS LANCEMENT
FINTOU:  EQU         $
         BSR         SWRITE          < ECRIRE DERNIER SECTEUR
         LAD         DEMCLO          < !CLOSE
         SVC         0
         LAD         START           <  IMPRESSION ADRESSE LANCEMENT
         BSR         SORMES
         LA          &ADLANC
         BSR         SORADR
<
< IMPRESSION TABLE LIENS ET EXTERNES NON DEFINIS
<
         LXI         0               < PT SUR BUFFER
         STZ         LECREF+3        < PREMIER SECTEUR
         DC          LECREF+3
         EORR        L               < CPTE D'ERREURS
REREXT:  EQU         $
         CPZ         NBREF           < Y-EN-A-T'IL ENCORE?
         JLE         FEREXT
         CPZR        X               < DOIT-ON RELIRE?
         JL          ENCEXT
         IC          LECREF+3
         LAD         LECREF
         SVC         0
         LXI         -128
ENCEXT:  EQU         $
         LR          X,Y             < IMPRESSION NOM
         BSR         MERCLF
         LR          Y,X
         LAD         BUFFER
         LR          A,B
         LAD         &ABUFRF
         LXI         3
         MOVE
         BSR         SORC6
         LR          Y,X
         ADRI        3,X             < ERREUR SI EXT NON DEFINI
         LA          &ABUFRF
         CPZ         &ABUFAB         < SYMBOLE DEFINI ???
         JGE         PAERXT          < OUI, OK...
         ADRI        1,L
         LA          NB7FFF
PAERXT:  EQU         $
         BSR         SORADR          < IMPRESSION ADRESSE
         LR          Y,X
         ADRI        4,X             < AUTRE REFERENCE
         DC          NBREF
         JMP         REREXT
FEREXT:  EQU         $
         CPZR        L               < ERREURS?
         JE          PASRXT
         LAI         '25
         BR          ADRFAT
PASRXT:  EQU         $
<
<
<        E M I S S I O N   S U R   ' 0 B  :
<
<
<        FORMAT DES CARACTERES EMIS :
<                    LES MOTS ENVOYES SONT CODES EN CARACTERES
<                    ASCI HEXADECIMAUX (0, 1,..., 9, A, B,...,F);
<                    LA FIN DE LA CHAINE TRANSMISE EST INDIQUEE
<                    PAR LE CARACTERE "A-ROND".
<
<
         LA          LOCAL
         LR          A,L             < RESTAURATION BASE L.
SEND1:   EQU         $
         LAD         MSEND
         BSR         APRINT
         LAD         DEMDSK
         SVC         0               < INTERROGATION UTILISATEUR ???
         LBY         BUFFER          < A=CARACTERE REPONSE.
         CPI         "N"
         JE          GOCCI           < NON, RETOUR AU CCI...
         CPI         "O"
         JNE         SEND1           < RIEN COMPRIS...
<
< OK, EMISSION DEMANDEE, INITIALISATION :
<
         EORR        W,W             < W=0 : DEPART SUR LE 1ER MOT.
         LA          DSKFIN
         SB          DSKDEB          < A=NBRE DE SECTEURS,
         SLLS        7               < A=NBRE DE MOTS.
         STA         LONG            < POUR LE TEST DE FIN SUR W.
         LAD         MLONG
         BSR         APRINT          < EDITION DU
         LA          LONG
         BSR         SORADR          < NBRE DE MOTS A ENVOYER...
<
< BOUCLE D'EMISSION PAR MOT :
<
SEND2:   EQU         $
         LR          W,A
         CP          LONG            < EST-CE FINI ???
         JE          FSEND           < OUI...
         BSR         LIRMOT          < NON, A=MOT A EMETTRE.
         LR          A,B             < B=MOT A EMETTRE,
         LXI         4               < SUR 4 CARACTERES ASCI-HEXA.
<
< ENVOI D'UN CARACTERE :
<
SEND3:   EQU         $
         LAI         0
         SLLD        4               < DECONCATENATION 1 CHIFFRE HEXA.
         CPI         9               < CHIFFRE DECIMAL ???
         JLE         SEND4           < OUI...
         ADRI        "A"-"9"-1,A     < NON, CHIFFRE HEXADECIMAL.
SEND4:   EQU         $
         ADRI        "0",A           < ET CODAGE ASCI...
         PSR         X
         LX          IBSEND          < X=INDEX COURANT DE 'BSEND'.
         STBY        &ABSEND         < INSERTION DU CARACTERE COURANT.
         IC          IBSEND          < PROGRESSION DE L'INDEX COURANT,
         LA          IBSEND          < ET TEST
         CPI         LSEND           < D'EMISSION ???
         JL          SEND6           < NON...

         STZ         IBSEND          < OUI, ON REINITIALISE L'INDEX.
SEND5:   EQU         $
         LAD         DSEND
         SVC         0               < TENTATIVE D'EMISSION...
         JE          SEND6           < OK, '0B ASSIGNE...
         LAD         CCI             < NON,
         SVC         0               < RETOUR AU CCI, POUR !ASSIGN...
         JMP         SEND5           < ET ON REESSAYE...
SEND6:   EQU         $
         PLR         X
         JDX         SEND3           < AU CARACTERE SUIVANT.
         DC          KHORL
         JG          SEND7           < PAS ENCORE...
         LA          IKHORL          < OUI, ON REINITIALISE D'ABORD.
         STA         KHORL
         LR          W,A
         BSR         SORADR          < ON EDITE (W).
SEND7:   EQU         $
         ADRI        1,W             < PUIS, AU MOT SUIVANT.
         JMP         SEND2
<
< FIN D'EMISSION :
<
FSEND:   EQU         $
         LAD         DSEND1
         SVC         0               < ENVOI D'UNE FIN DE MESSAGE.
         LAD         MFSEND
         BSR         APRINT          < ENVOI D'UN MESSAGE DE FIN...
<
<
<        R E T O U R   D E F I N I T I F   A U   C C I  :
<
<
GOCCI:   EQU         $
         LBY         ASSDSK+1
         STZ         ASSDSK+1
         STBY        ASSDSK+1
         LAD         ASSDSK
         SVC         0               < DESASSIGNATION DU DISQUE.
         LAD         CCI             < RETOUR CCI
         SVC         0
         JMP         $-2
<***********************************************************************
<*                                                                     *
<*       FIN DE BANDE - RETOUR AU MONITEUR.                            *
<*                                                                     *
<***********************************************************************
FINBAN:  EQU         $
         LR          W,A             <  DEBUT MODULE SUIVANT
         STA         ADINIT
<
<
<        D I S Q U E   D E   C H A R G E M E N T  :
<
<
         IC          KIN             < COMPTAGE DES PASSAGES...
         IF          ORDI-"T",XWOR%,,XWOR%
         JG          DKOK            < PASSAGES SUIVANTS...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         JG          ADKOK           < PASSAGE SUIVANTS...
XWOR%:   VAL         0
DDSK1:   EQU         $
<
< CAS DU 1ER PASSAGE : DEMANDE DES INFOS DISQUES :
<
         LBY         ASSDSK+1        < N0 DISQUE=0
         STZ         ASSDSK+1
         STBY        ASSDSK+1
         LAD         DSKMES          < N0 DISQUE
         SVC         0
         LAD         DEMDSK
         SVC         0
         LBY         BUFFER          < A=CARACTERE REPONSE...
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         '04             < VIDE ???
         JE          CMS51           < OUI...
         CPI         '0D             < VIDE ???
         JNE         CMS52           < NON...
CMS51:   EQU         $
         LAD         MCMS
         BSR         APRINT
         LAD         DEMDSK
         SVC         0
         LBY         BUFFER
         CPI         "N"             < ERREUR ???
         JE          DDSK1           < OUI, ON REMONTE...
         CPI         "O"             < EST-CE LE LINKAGE DE CMS5 ???
         JNE         CMS51           < NON, ERREUR...
         LRM         A,B,X,Y         < OUI :
         BYTE        '04;'25         < A=ASSIGNATION VERS 'DKF',
         WORD        '0680           < B=ADRESSE DE DEBUT,
         WORD        '087F           < X=ADRESSE DE FIN,
         WORD        '0000           < Y=TRANSLATION...
         STA         ASSDSK+1
         STB         DSKDEB
         STB         LIRDSK+3
         STB         ECRDSK+3
         STX         DSKFIN
         STY         ADDTRA
         JMP         CMS53           < ET ON SAUTE L'ENTREE...
ADKOK:   JMP         DKOK            < RELAI...
CMS52:   EQU         $
XWOR%:   VAL         0
         ADRI        -'30,A
         CPI         2
         JE          DDSK2
         CPI         3
         JNE         DDSK1
DDSK2:   EQU         $
         ADRI        '22,A           < PLACER
         AD          ASSDSK+1        < DANS ASSIGN DISQUE
         STA         ASSDSK+1
         LAD         AD1MES          < ADRESSE DEBUT
         SVC         0
         LAD         DEMADR
         SVC         0
         BSR         HEXDEC
         JANE        DDSK1
         LR          B,A             < VERIFICATION
         JAL         DDSK1
         CP          UNFFF
         JG          DDSK1
         STB         DSKDEB          < PLACER
         STB         LIRDSK+3
         STB         ECRDSK+3
         LAD         AD2MES          < ADRESSE FIN
         SVC         0
         LAD         DEMADR
         SVC         0
         BSR         HEXDEC
         JANE        DDSK1
         LR          B,A             < VERIFICATION
         JAL         DDSK1
         CP          UNFFF
         JG          DDSK1
         STB         DSKFIN
         LR          B,A             < VERIFICATION
         CP          DSKDEB
         JLE         DDSK1
         LAD         TRAMES          < ADRESSE TRANS
         SVC         0
         LAD         DEMADR
         SVC         0
         BSR         HEXDEC
         JANE        DDSK1
         STB         ADDTRA
<
< VERFICATION DES ARGUMENTS :
<
         IF          ORDI-"S",XWOR%,,XWOR%
CMS53:   EQU         $
XWOR%:   VAL         0
         LA          AMDK
         BSR         APRINT
         LA          ASSDSK+1
         ANDI        'FF             < SUPPRESSION DU NVP ASSOCIE AU NSP.
         BSR         SORADR          < EDITION DU NVP DU DISQUE.
         LA          AMAP
         BSR         APRINT
         LA          DSKDEB
         BSR         SORADR          < EDITION DU NUMERO 1ER SECTEUR.
         LA          AMLON
         BSR         APRINT
         LA          DSKFIN
         SB          DSKDEB
         PSR         A
         BSR         SORADR          < EDITION DU NBRE DE SECTEURS.
         LA          AMSOIT
         BSR         APRINT
         PLR         A
         ADRI        8-1,A           < POUR UN ARRONDI SUPERIEUR.
         SARS        3               < CALCUL DU NBRE DE KMOTS
                                     < IMMEDIATEMENT SUPERIEUR.
         JALE        EM1K            < BIZARRE !!!
         BSR         SORADR          < EDITION DU NBRE DE KMOTS.
         LA          AMK
         BSR         APRINT
         JMP         TOK             < VERS L'INTERROGATION...
EM1K:    EQU         $
         LA          AM1K
         BSR         APRINT
TOK:     EQU         $
         LA          AMOK
         BSR         APRINT
         LAD         DEMDSK          < L'UTILISATEUR EST-IL SATISFAIT
         SVC         0               < DES PARAMETRES ???
         LBY         BUFFER          < A=REPONSE...
<
<        REPONSES RECONNUES :
<                    N : ON REDEMANDE LES ARGUMENTS,
<                    I : OK, ON INITIALISE L'ESPACE DK,
<                    O : OK, ON N'INITIALISE PAS L'ESPACE DK.
<
         CPI         "N"
         JE          DDSK1           < NON, ON REDEMANDE...
         CPI         "O"
         JE          PINIT           < O : ON N'INITIALISE PAS L'ESPACE DK...
         CPI         "I"             < INITIALISATION ESPACE DK ???
         JNE         TOK             < RIEN COMPRIS...
<
<        I N I T I A L I S A T I O N   E S P A C E  :
<
         LAD         MINIT
         BSR         APRINT
         LAD         ASSDSK          < ASSIGNER LE DISQUE
         SVC         0
         LA          DSKDEB         < MISE A ZERO ESPACE DISQUE
         STA         ECRDSK+3
ECRZER:  EQU         $
         LAD         ECRDSK
         SVC         0
         IC          ECRDSK+3
         LA          ECRDSK+3
         CP          DSKFIN
         JL          ECRZER
         JMP         DKOK            < OK...
PINIT:   EQU         $               < PAS D'INITIALISATION DK.
         LAD         ASSDSK
         SVC         0               < ASSIGNATION DU DISQUE.
         LAD         LIRDSK
         SVC         0               < LECTURE DU 1ER SECTEUR, AU
                                     < CAS, OU IL N'Y AURAIT NI
                                     < INITIALISATION DISQUE, NI
                                     < EDITION DE LIENS...
DKOK:    EQU         $               < OK, ON Y VA...
RENMFC:  EQU         $
         LAD         DEMNMF          < NOM DU FICHIER
         SVC         0
         LAD         LECNMF
         SVC         0
         WORD        '1E35           < NOM VIDE?
         ADRI        -1,B
         CPZR        B
         JG          ETI10           < NON, ON CONTINUE...
         BR          AFINT           < OUI, FIN DE CHARGEMENT...
ETI10:   EQU         $
         STZ         CHKSUM          <  REINITIALISER LES VALEURS DE
         LAI         126
         ADR         A,A
         STA         INDEX
         LAI         -1
         STA         ABSMOD
         STZ         FINMOD
         STZ         CPTLOD
         BR          NEWCHG          <  TRAITER LE MODULE SUIVANT
         PAGE
<***********************************************************************
<*                                                                     *
<*       'B4 - COMMENTAIRE.                                            *
<*       L'ECRIRE.                                                     *
<*                                                                     *
<***********************************************************************
COMENT:  EQU         $
         BSR         SORCAR
         BR          ADLECT
         PAGE
<***********************************************************************
<*                                                                     *
<*       '22 - SUITE DE COMMANDE.                                      *
<*       SE REBRANCHER A LA COMMANDE CONCERNEE.                        *
<*                                                                     *
<***********************************************************************
PACDE:   EQU         $
         BR          PAFINI
         PAGE
<***********************************************************************
<*                                                                     *
<*       'A6 - CHARGER A LA SUITE EN TRANSLATANT.                      *
<*       TRANSLATER ET ALLER CHARGER.                                  *
<*                                                                     *
<***********************************************************************
TRANSL:  EQU         $
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         BR          TABAIG+1
         PAGE
<***********************************************************************
<*                                                                     *
<*       'AA - REMONTER UNE CHAINE D'ADRESSES.                         *
<*       MEMORISATION DE L'ADRESSE DE DEBUT DE CHAINE.                 *
<*                                                                     *
<***********************************************************************
REMADR:  EQU         $
         PSR         W               <  PROTEGER W
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         LR          B,W             <  MEMORISER L'ADRESSE
         LA          AREMA2          <  PREPARER LA SUITE DE COMMANDE
STAPAF:  EQU         $
         STA         PAFINI
         BR          ADLECT
<***********************************************************************
<*                                                                     *
<*       SUITE DE COMMANDE CHAINE.                                     *
<*       REMONTER LA CHAINE POUR Y PLACER LA VALEUR.                   *
<*                                                                     *
<***********************************************************************
REMAD2:  EQU         $
         BSR         TRANSB
         BSR         CHAINE
         JMP         PLRW
         PAGE
<***********************************************************************
<*                                                                     *
<*       '2E - DEPLACEMENT SUR ADRESSE.                                *
<*       MEMORISATION DE L'ADRESSE.                                    *
<*                                                                     *
<***********************************************************************
DEPADR:  EQU         $
         PSR         W               <  PROTEGER W
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         LR          B,W             <  PRELEVER L'ADRESSE A MODIFIER
         LA          ADEPA2          <  PREPARER LA SUITE DE COMMANDE
         JMP         STAPAF
<***********************************************************************
<*                                                                     *
<*       SUITE DE COMMANDE DEPLACEMENT.                                *
<*       MODIFICATION DE LA VALEUR.                                    *
<*                                                                     *
<***********************************************************************
DEPAD2:  EQU         $
         BSR         LIRMOT
         ADR         A,B             <  MODIFICATION
ADNORM:  EQU         $
         BSR         ECRMOT
<***********************************************************************
<*                                                                     *
<*       RESTAURER W.                                                  *
<*                                                                     *
<***********************************************************************
PLRW:    EQU         $
         PLR         W
         BR          ADLECT
         PAGE
<***********************************************************************
<*                                                                     *
<*       '36 - NOM DE SECTION.                                         *
<*       IMPRESSION DU DEBUT DU NOM.                                   *
<*                                                                     *
<***********************************************************************
NSECT:   EQU         $
         BSR         MERCLF          <  IMPRESSION DE CR-LF
         BSR         SORCAR          <  IMPRESSION DES TROIS PREMIERS
                                     <  CARACTERES DU NOM
         LA          ASECT1          < 1ERE SUITE DE NOM
         JMP         STAPAF
SECT1:   EQU         $
         BSR         SORCAR
         LA          ASECT2          <  PREPARER LA SUITE DE NOM
         JMP         STAPAF
<***********************************************************************
<*                                                                     *
<*       SUITE DE COMMANDE NOM.                                        *
<*       IMPRESSION DE LA FIN DE NOM ET DE L'ADRESSE DE DEBUT.         *
<*                                                                     *
<***********************************************************************
SECT2:   EQU         $
         BSR         SORCAR          <  IMPRESSION DE FIN DE NOM
         LR          W,A             <  IMPRESSION DE ADRESSE IMPLANTA.
         BSR         SORADR
         BR          ADLECT
         PAGE
<***********************************************************************
<*                                                                     *
<*       '3A - COMMANDE DEF.
<*                                                                     *
<***********************************************************************
ENT:     EQU         $
         STB         BUFFER          < PLACER 2 CARAC.
         LA          ARENT1          < SUITE
         STA         PAFINI
         BR          ADLECT
RENT1:   EQU         $
         STB         BUFFER+1        < PLACER 2 CARAC. A SUIVRE
         LA          ARENT2
         STA         PAFINI
         BR          ADLECT
RENT2:   EQU         $
         STB         BUFFER+2        < PLACER FIN NOM
         LA          ARENT3          < ATTENDRE ADRESSE
         STA         PAFINI
         BR          ADLECT
RENT3:   EQU         $
         BSR         TRANSB          < ADRESSE RELATIVE PARTITION
         BSR         CHREF           < RECHERCHE DANS TABLE
         JANE        ENTABS
         LA          &ABUFRF         < ELLE EXISTE
         CPZ         &ABUFAB         < TEST DU BIT0(MOT0) ???
         JL          VUEXT           < PAS ENCORE DEFINIE...
         LY          BUFFER          < ERREUR - DOUBLE DEFINITION
         BSR         MERCLF
         STY         BUFFER
         BSR         SORC6
         LAI         '24
         BSR         MESER
         BR          ADLECT
VUEXT:   EQU         $
         PSR         W               < ELLE EXISTE EN EXT
         LR          A,W
         BSR         CHAINE
         PLR         W
         STB         &ABUFRF         < MISE A JOUR TABLE
         LA          &ABUFAB         < ACCES AU MOT0 DU SYMBOLE COURANT,
         RBT         0               < ON MEMORISE AINSI QU'IL EST
         STA         &ABUFAB         < DEFINI MAINTENANT...
         LAD         ECRREF
         SVC         0
         BR          ADLECT
ENTABS:  EQU         $
         BSR         PLNOM           < ABSENTE- LA PLACER
         STB         &ABUFRF
         ADRI        1,X
         STX         XBUFRF
         LAD         ECRREF
         SVC         0
         IC          NBREF
         BR          ADLECT
         PAGE
<***********************************************************************
<*                                                                     *
<*       'BE - REFERENCE EN AVANT RELATIVE.                            *
<*       PRELEVER LE PREMIER MAILLON.                                  *
<*                                                                     *
<***********************************************************************
REMJMP:  EQU         $
         PSR         W               <  PROTEGER W
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         LR          B,W             <  RELEVER LE 1ER MAILLON
         LA          ARJMP2          <  PREPARER LA SUITE DE COMMANDE
         JMP         STAPAF
<***********************************************************************
<*                                                                     *
<*       SUITE DE REFERENCE AVANT RELATIVE.                            *
<*       MODIFICATION SUR LA CHAINE.                                   *
<*                                                                     *
<***********************************************************************
REMJM2:  EQU         $
         BSR         TRANSB          <  ADRESSE RELATIVE DEBUT PARTITIO
         LR          B,A             <  A=REF. EN AVANT
         SBR         W,A             <  DIFFERENCE D'ADRESSE
         PSR         A
         BSR         LIRMOT
         LR          A,B
         PLR         A
         SCRD        8               <  FABRICATION DU MOT DEFINITIF
         SWBR        B
         BSR         ECRMOT
         SWBR        A               <  AD. RELATIVE MAILLON SUIVANT
         SBR         A,W             <  AD. ABSOLUE DU MAILLON SUIVANT
         JANE        REMJM2          <  CHAINE FINIE PAR 0
         JMP         PLRW
         PAGE
<***********************************************************************
<*                                                                     *
<*       LECTURE D'UN QUADRUPLET.                                      *
<*                                                                     *
<***********************************************************************
SPLITQ:  EQU         $
         LYI         0               <  POUR SIGNALER 1ER CARACTERE
         LXI         -4              <  NB CARACTERE
         PSR         B,X,Y           <  PROTEGER LES REGISTRES DE TRAV.
         IF          ORDI-"T",XWOR%,,XWOR%
         LAI         128*QUANTA-1/3*3
         ADR         A,A
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LRM         A               < DOIT-ON RELIRE ???
         WORD        128*QUANTA-1/3*3*2
XWOR%:   VAL         0
         CP          INDEX
         JNE         PAVID
         LAD         IOCBIN          <  LECTURE
         SVC         0
         JNE         NOPAIR          <  ERREUR DANS LE SGF
         STZ         INDEX
PAVID:   EQU         $
         LX          INDEX           <  PRELEVER LE BYTE SUIVANT
         LBY         &RELBUF
         IC          INDEX
         PLR         B,X,Y           <  RESTAURER LES REGISTRES
         STBY        &AUFRAI
         CPZR        Y               <  1ER CARACTERE(COMMANDE)?
         JNE         STOCK
         ANDI        '60             <  SI BLANC, RELIRE
         CPI         '20
         JNE         SPLITQ+2
         ADRI        1,Y             <  1ER CARACTERE TROUVE
         ADRI        1,X
STOCK:   EQU         $
         JIX         SPLITQ+2        <  PRELEVER LES 3 AUTRES CARAC.
         LBY         ADSTOC
         CPI         '30             <  DOIT-ON LE RENTRER DANS CHECKSU
         JE          PACHEK
         LBY         ADSTOC          < CALCUL CHECKSUM
         AD          CHKSUM
         ADCR        A
         AD          ADSTOC+1
         ADCR        A
         STA         CHKSUM
PACHEK:  EQU         $
         LB          ADSTOC+1        < A=COMMANDE,B=VALEUR
         LBY         ADSTOC
         RSR
NOPAIR:  EQU         $               <  ERREUR DE PARITE
         LAI         '01
         BR          ADRFAT
         PAGE
<***********************************************************************
<*                                                                     *
<*       TRANSLATION DE L'ADRESSE CONTENUE DANS B.                     *
<*                                                                     *
<***********************************************************************
BTRANS:  EQU         $
         LR          B,A
         AD          ADINIT          <  TRANSLATION
         LR          A,B
         RSR
         PAGE
<***********************************************************************
<*                                                                     *
<*       RANGEMENT DE B AVEC DEPLACEMENT DU CHARGEUR SI NECESSAIRE.    *
<*                                                                     *
<***********************************************************************
VERIFW:  EQU         $
         LR          W,A             <  ADRESSE>32K?
WNORM:   EQU         $               <  ADRESSE DANS LE CHARGEUR?
         BSR         ECRMOT
         RSR
         PAGE
<***********************************************************************
<*                                                                     *
<*       LECTURE D'UN MOT POINTE PAR W DANS A.                         *
<*                                                                    *
<***********************************************************************
LECMOT:  EQU         $
         LR          W,A             < ADRESSE DANS SECTEUR
         AD          ADDTRA
         ANDI        '7F
         LR          A,X
         LR          W,A             < N0 SECTEUR
         AD          ADDTRA
         SLRS        7
         AD          DSKDEB          < VERIFICATION LIMITE
         JAL         ERRDSK          < ERREUR !!!
         CP          DSKFIN
         JGE         ERRDSK
         CP          LIRDSK+3        < RESIDENT?
         JNE         LRMT1
         LA          &ADISK          < OUI - LIRE LE MOT
         RSR
LRMT1:   EQU         $
         PSR         X               < NON - ECRIRE SECTEUR COURANT
         PSR         A
         BSR         SWRITE
         PLR         A               < LIRE BON SECTEUR
         STA         LIRDSK+3
         LAD         LIRDSK
         SVC         0
         PLR         X               < LIRE LE MOT
         LA          &ADISK
         RSR
<***********************************************************************
<*                                                                     *
<*       ECRITURE D'UN MOT POINTE PAR W CONTENU DANS B.                *
<*                                                                     *
<***********************************************************************
PLAMOT:  EQU         $
         PSR         A               < ADRESSE DANS SECTEUR
         LR          W,A
         AD          ADDTRA
         ANDI        '7F
         LR          A,X
         LR          W,A             < N0 SECTEUR
         AD          ADDTRA
         SLRS        7
         AD          DSKDEB          < VERIFICATION LIMITE
         JAL         ERRDSK          < ERREUR !!!
         CP          DSKFIN
         JGE         ERRDSK
         CP          LIRDSK+3        < RESIDENT?
         JNE         PLMT1
         STB         &ADISK          < OUI - PLACER LE MOT
         PLR         A
         RSR
PLMT1:   EQU         $
         PSR         X               < NON - ECRIRE SECTEUR COURANT
         PSR         A
         BSR         SWRITE
         PLR         A               < LIRE BON SECTEUR
         STA         LIRDSK+3
         LAD         LIRDSK
         SVC         0
         PLR         X               < PLACER LE MOT
         STB         &ADISK
         PLR         A
         RSR
ERRDSK:  EQU         $
         LAI         '31             < ERREUR DISQUE
         BR          ADRFAT
<***********************************************************************
<*                                                                     *
<*       CONVERSION DE 4 CARACTERES EN BINAIRE(DANS B)                 *
<*                                                                     *
<***********************************************************************
SPHEXA:  EQU         $
         LXI         -4
HEXA1:   EQU         $
         LBY         &RELBEN         < TRAITER UN CARACTERE
         ADRI        -'30,A
         CPI         9
         JLE         HEXA2
         ADRI        -7,A
HEXA2:   EQU         $
         JAL         HEXA3           < VERIFICADRESSEATION
         CPI         'F
         JG          HEXA3
         SLLS        12
         SCLD        4
         JIX         HEXA1
         LAI         0
         RSR
HEXA3:   EQU         $
         LAI         1
         RSR
<***********************************************************************
<*                                                                     *
<*       SP D'ECRITURE SUR DISQUE                                      *
<*                                                                     *
<***********************************************************************
WRITED:  EQU         $
         LA          LIRDSK+3
         STA         ECRDSK+3
         LAD         ECRDSK
         SVC         0
         RSR
         PAGE
<***********************************************************************
<*                                                                     *
<*       SP DE REMONTEE D'UNE CHAINE D'@ POUR Y PLACER LA VALEUR       *
<*       CONTENUE DANS B EN PARTANT A L'ADRESSE CONTENUE DANS W        *
<*                                                                     *
<***********************************************************************
SPCHAI:  EQU         $
         PSR         X
SPCH:    EQU         $
         BSR         LIRMOT
         PSR         B               < SAVE LA VALEUR !!!
         CPZR        B               < EST-CE UN SYMBOLE>32K ???
         JL          BIT00           < OUI, ON SAIT ALORS QU'IL NE
                                     < PEUT Y AVOIR AUSSI INDEXATION !!!
<
< CAS DES SYMBOLES<32K : ON SAIT QU'ALORS, SI LE
< BIT0 EST A 1, IL S'AGIT DE L'INDEXATION, CAR
< L'ASSEMBLEUR FAIT DES VERIFICATIONS ET IMPOSE
< DES CONTRAINTES SEVERES :
<
         JAL         BIT01           <  PRELEVER SON BIT D'INDEX
         RBT         16
         JMP         BIT00
BIT01:   EQU         $
         SBT         16
         RBT         0
BIT00:   EQU         $
         BSR         ECRMOT
         PLR         B               < RESATAURE LA VALEUR...
         CP          NB7FFF          <  FIN DE CHAINE?
         JE          RETCH
         CPR         A,W             < AUTO-CHAINAGE ???
         JNE         SPCH1           < NON, OK...
<
< ERREUR D'AUTO-CHAINAGE : ELLES SONT DUES
< AU FAIT QU'IL EST DES CAS OU L'ON NE
< PEUT DISTINGUER LE BIT D'INDEXATION
< DU BIT FORT D'UNE ADRESSE 32-64K, PAR
< EXEMPLE LORS DE LA TRANSLATION DES
< CHAINAGES DE REFERENCES EN AVANT
< LORS D'UNE EDITION DE PLUSIEURS
< MODULES, ALORS QUE LA TRANSLATION D'UN
< MODULE PEUT FAIRE FRANCHIR A DES ADRESSES
< LA FRONTIERE DES 32K !!!
<
         LAD         SAVES
         BSR         APRINT          < EDITION DU SYMBOLE PROBA-
                                     < BLEMENT EN CAUSE...
         LAI         '32
         BR          ADRFAT          < ABORT...
SPCH1:   EQU         $
         LR          A,W             <  NON - POURSUIVRE
         JMP         SPCH
RETCH:   EQU         $
         PLR         X
         RSR
         PAGE
<***********************************************************************
<*                                                                     *
<*       SP DE RECHERCHE D'UNE REFERENCE.                              *
<*                                                                     *
<***********************************************************************
SPCHRF:  EQU         $
         LA          BUFFER+0        < EN PREVISION D'UN
         STA         SAVES+8+0       < AUTO-CHAINAGE,
         LA          BUFFER+1
         STA         SAVES+8+1       < ON SAUVEGARDE LE
         LA          BUFFER+2
         STA         SAVES+8+2       < SYMBOLE COURANT...
         PSR         W
         LAI         -1              < N0 DE SECTEUR DE RECHERCHE
         STA         LECREF+3
         STZ         NORFCP          < N0 REFERENCE A COMPARER
         LXI         0               < PT DANS SECTEUR RECHERCHE
AUTREF:  EQU         $
         CPZR        X               < EN RESTE-T-IL DANS LE BUFFER?
         JL          RFNVID
         IC          LECREF+3        < NON - SECTEUR SUIVANT
         LA          LECREF+3
         CPI         32
         JL          OKSEC
         LAI         '26
         BR          ADRFAT
OKSEC:   EQU         $
         LAD         LECREF
         SVC         0
         LXI         -128
RFNVID:  EQU         $
         LA          NORFCP          < A-T-ON FINI?
         CP          NBREF
         JGE         ABSREF          < OUI - ABSENTE
         LA          &ABUFRF
         RBT         0               < RAZ DE L'INDICATEUR ''RENCONTRE
                                     < MAIS NON DEFINI'...
         EOR         BUFFER          < EST-CE LE BON ???
         LR          A,W
         ADRI        1,X
         LA          BUFFER+1
         EOR         &ABUFRF
         EORR        A,W
         ADRI        1,X
         LA          BUFFER+2
         EOR         &ABUFRF
         EORR        W,A
         ADRI        1,X
         JAE         REFVUE
         ADRI        1,X             < NON - SUIVANT
         IC          NORFCP
         JMP         AUTREF
REFVUE:  EQU         $
         LAI         0               < TROUVEE
         JMP         RETREF
ABSREF:  EQU         $
         LAI         1               < ABSENTE
RETREF:  EQU         $
         PLR         W
         LY          LECREF+3
         STY         ECRREF+3
         RSR
         PAGE
<***********************************************************************
<*                                                                     *
<*       SP DE PLACEMENT DU NOM D'UNE REFERENCE                        *
<*                                                                     *
<***********************************************************************
SPLNOM:  EQU         $
         LX          XBUFRF          < A-T-ON DE LA PLACE?
         CPZR        X
         JL          PLREF
         LXI         -128
PLREF:   EQU         $
         LA          BUFFER
         STA         &ABUFRF
         ADRI        1,X
         LA          BUFFER+1
         STA         &ABUFRF
         ADRI        1,X
         LA          BUFFER+2
         STA         &ABUFRF
         ADRI        1,X
         RSR
         PAGE
<***********************************************************************
<*                                                                     *
<*       IMPRESSION DU CONTENU DE A.                                   *
<*                                                                     *
<***********************************************************************
ECRADR:  EQU         $
         SLRD        16              <  PREPARER LE DECOUPAGE PAR 4 BIT
         LXI         -4
CARSUI:  EQU         $
         SLLD        4               <  ISOLER 4 BITS
         ADRI        '30,A           <  CARACTERE IMPRIMABLE
         CPI         '39
         JLE         $+2
         ADRI        7,A
         STBY        &SORHEX         <  MISE DANS LE BUFFER
         LAI         0
         JIX         CARSUI
         STZ         &SORHEX
         LA          BLQ             <  METTRE '
         STA         BUFFER
         JMP         SORTI6
<***********************************************************************
<*                                                                     *
<*       SORTIE DE TROIS CARACTERES.                                   *
<*                                                                     *
<***********************************************************************
PRECAR:  EQU         $
         LA          ADSTOC+1        < PLACER 2 CARAC. DANS BUFFER
         STA         BUFFER
         JMP         SORTI2
<***********************************************************************
<*                                                                     *
<*       SORTIE D'UN MESSAGE SUIVANT LE NOMBRE DE CARACTERES.          *
<*                                                                     *
<***********************************************************************
SORTI6:  EQU         $
         LXI         6               <  6 CARACTERES
         JMP         $+2
SORTI2:  EQU         $
         LXI         2               < 2 CARAC.
         STX         IOCBL+2
         LXI         0               <  X=0  LOG LISTING
         JMP         APIOCS
MSGRC:   EQU         $               <  SORTIE DE RC-LF
         LXI         2
         STX         IOCBL+2
         LXI         0
         JMP         RETLF
MSGERR:  EQU         $               <  SORTIE D'UN MESSAGE
         LXI         8
         STX         IOCBL+2
         LXI         1               <  X=1  ERROR LISTING
         SLRD        4               <  NUMERO ERREUR
         SLLS        4
         SLLD        4
         AD          TRENTE
         STA         BUFFER+3
         LAD         ERREUR
         JMP         INBUF4
ENTMOT:  EQU         $               <  PREPARATION DU MESSAGE
         LXI         6
         STX         IOCBL+2
         LXI         0
INBUF4:  EQU         $
         XR          A,W
         LB          0,W
         STB         BUFFER+1
         LB          1,W
         STB         BUFFER+2
         XR          A,W
RETLF:   EQU         $               <  CR-LF
         LA          RCLF
         STA         BUFFER
APIOCS:  EQU         $               <  IMPRESSION
         LAD         IOCBL
         SVC         0
         RSR
         PAGE
<
<
<        E D I T I O N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=ADRESSE MOT DU MESSAGE.
<                    OCTET0(MESSAGE)=LONGUEUR.
<
<
PRINT:   EQU         $
         PSR         L,X
         LR          A,L
         ADR         A,A
         ADRI        1,A
         STA         DEMOUT+1        < ADRESSE OCTET DU MESSAGE.
         LBY         0,L
         STA         DEMOUT+2        < LONGUEUR DU MESSAGE.
         LAD         DEMOUT
         SVC         0               < EDITION DU MESSAGE.
         PLR         L,X
         RSR
         PAGE
DEBPG:   WORD        0
         WORD        1               <  RETOUR AU CCI
FITEM:   EQU         $
LGIT:    VAL         FITEM-DBCHIT*2
SIZE:    EQU         ZERO+LGIT
         PAGE
<***********************************************************************
<*                                                                     *
<*       GENERATION DU CHARGEUR EN TANT QUE ITEM.                      *
<*                                                                     *
<***********************************************************************
         LOCAL
LONGR:   VAL         FITEM-DITEM
DEMSGN:  WORD        '8402           < DEMANDE GENERATION
         WORD        DITEM-ZERO*2
         WORD        LONGR*2
         WORD        6
         PROG
         WORD        DEMSGN+128
         WORD        COM+128
GENERE:  EQU         $
         LRP         L               < INITIALISATIONS DES BASES
         LR          L,C
         LA          -2,L
         LR          A,L
         LA          -1,C
         LR          A,C
         LAD         KSTORE-1
         LR          A,K
DEM:     EQU         $
         LAD         DEMSGN
         SVC         0
         JE          FIN
         LAD         CCI
         SVC         0
         JMP         DEM
FIN:     EQU         $
         LAD         CCI
         SVC         0
         JMP         FIN
         END         GENERE



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.