PROG
ZERO:    EQU         $
         DZS         '10             < INTERFACE AVEC 'CMS5'...
         WORD        DEBUT
         WORD        CAMT            < POINT D'ENTREE...
DEBUT:   EQU         $
         LRP         L
         BR          -1,L            < ET ON RENTRE DANS LE PROGRAMME...
<
<
<        C O N S T A N T E S  :
<
<
LCARTE:: VAL         80              < NOMBRE DE CARACTERES PAR CARTE.
NOCMO::  VAL         2               < NOMBRE D'OCTETS PAR MOT.
CCI::    VAL         1               < 'QUIT' DE RETOUR AU CCI...
FCCI::   VAL         '02             < APPEL DU CCI INTERPRETATIF.
FWV::    VAL         '02             < ECRITURE SUR LA VISU.
FR::     VAL         '00             < LECTURE ASCI SUR CR1,
FW::     VAL         '02             < ECRITURE SEQUENTIELLE SUR MT1,
FTM::    VAL         '04             < ECRITURE D'UN TAPE-MARK.
VISU::   VAL         '02             < NVP DE LA VISU.
CR::     VAL         '0A             < NVP DU LECTEUR DE CARTES,
MT::     VAL         '0B             < NVP DU DEROULEUR DE BANDES.
FCBA::   VAL         'FA00           < CONVERSION BINAIRE --> ASCI.
MOCD::   VAL         '00FF           < ACCES A L'OCTET DROIT.
EOT::    VAL         '04             < CARACTERE DE FIN DE MESSAGE.
IJIJDX:: VAL         1
<
<
<        L O C A L
<
<
         LOCAL
LOC:     EQU         $
<
< BUFFERS ET MESSAGES :
<
BUFC:    DZS         LCARTE/NOCMO    < BUFFER CARTE COURANTE,
BUFCF:   DZS         LCARTE/NOCMO    < BUFFER DE LA CARTE FIN, QUI EST RENCONTRE
                                     < EN PREMIERE POSITION POUR IDENTIFICATION.
M1:      BYTE        19;'6D
         ASCI        "ASSIGN IMPOSSIBLE!"
ASSCR:   ASCI        "!ASSIGN "
         BYTE        CR=FCBA(MOCD;"=";"C";"R";"1";EOT
ASSMT:   ASCI        "!ASSIGN "
         BYTE        MT=FCBA(MOCD;"=";"M";"T";"1";EOT
ASSCL:   ASCI        "!CLOSE"
         BYTE        EOT;0
<
< DEMANDES A 'CMS5' :
<
DEMCF:   BYTE        CR;FR           < LECTURE DE LA CARTE DE FIN.
         WORD        BUFCF-ZERO*NOCMO
         WORD        LCARTE
DEMC:    BYTE        CR;FR           < LECTURE DE LA CARTE COURANTE.
         WORD        BUFC-ZERO*NOCMO
         WORD        LCARTE
DEMT:    BYTE        MT;FW           < ECRITURE DE LA CARTE COURANTE.
         WORD        BUFC-ZERO*NOCMO
         WORD        LCARTE
DEMTM:   BYTE        MT;FTM          < ECRITURE D'UN TAPE-MARK.
DEMASC:  BYTE        0;FCCI          < !ASSIGN A=CR1.
         WORD        ASSCR-ZERO*NOCMO
         WORD        LCARTE
DEMAST:  BYTE        0;FCCI          < !ASSIGN B=MT1.
         WORD        ASSMT-ZERO*NOCMO
         WORD        LCARTE
DEMCLO:  BYTE        0;FCCI          < !CLOSE
         WORD        ASSCL-ZERO*NOCMO
         WORD        LCARTE
DEMOUT:  BYTE        VISU;FWV        < ENVOI D'UN MESSAGE SUR LA VISU.
         WORD        0;0
<
< RELAIS :
<
ABUFC:   WORD        BUFC-IJIJDX,X   < RELAI VERS LE BUFFER COURANT,
ABUFCF:  WORD        BUFCF-IJIJDX,X  < RELAI VERS LE BUFFER DE FIN.
<
< SOUS-PROGRAMME :
<
APRINT:  WORD        PRINT           < EDITION D'UN MESSAGE.
<
< CONSTANTES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTRIES...
BLANC:   ASCI        "  "
<
< PILE :
<
PILE:    DZS         20
         PAGE
         PROG
<
<
<        C A R T E   A   B A N D E  :
<
<
CAMT:    EQU         $
         LRM         L,K
         WORD        LOC+128
         WORD        PILE-1
         IC          KIN
         JE          CAMT1           < PREMIERE FOIS...
<
< C'EST LA FIN :
<
CAMT2:   EQU         $
         LAD         DEMCLO
         SVC         0
         QUIT        CCI             < ET RETOUR AU CCI...
         STZ         KIN
         DC          KIN
         JMP         CAMT            < CAS D'UN !GO...
<
< SORTIE EN ERREUR :
<
CAMT3:   EQU         $
         LAD         M1
         BSR         APRINT          < EDITION D'UN MESSAGE...
         JMP         CAMT2           < ET ABORT...
<
< CAS DE LA PREMIERE FOIS :
<
CAMT1:   EQU         $
         LAD         DEMASC
         SVC         0               < TENTATIVE DE !ASSIGN A=CR1...
         JNE         CAMT3           < IMPOSSIBLE...
         LAD         DEMAST
         SVC         0               < TENTATIVE DE !ASSIGN A=MT1...
         JNE         CAMT3           < IMPOSSIBLE...
<
< LECTURE DE LA CARTE DE FIN :
<
         LAD         DEMCF
         SVC         0
<
< LECTURE DES CARTES COURANTES :
<
CAMT4:   EQU         $
         LA          BLANC
         LXI         LCARTE/NOCMO
CAMT7:   EQU         $
         STA         &ABUFC          < MISE A BLANC DU BUUFER CARTES AU
                                     < CAS OU IL Y AURAIT UN EOT...
         JDX         CAMT7
         LAD         DEMC
         SVC         0               < LECTURE DE LA CARTE COURANTE...
         LXI         LCARTE/NOCMO    < EST-CE LA CARTE DE FIN ???
CAMT5:   EQU         $
         LA          &ABUFC
         CP          &ABUFCF         < EST-CE LA DERNIERE ???
         JNE         CAMT6           < NON, IL FAUT L'ENREGISTRER...
         JDX         CAMT5           < OUI, PEUT-ETRE...
         LAD         DEMTM           < ET OUI,
         SVC         0               < ON ECRIT UN TAPE-MARK...
         JMP         CAMT2           < ET ON ARRETE...
CAMT6:   EQU         $
         ACTD        3               < B=NOMBRE D'OCTETS LUS...
         LR          B,A
         ADRI        NOCMO-1,A
         SLRS        NOCMO=0
         SLLS        NOCMO=0
         STA         DEMT+2          < AFIN DE N'ECRIRE QUE CE QUI A ETE
                                     < LU, MAIS SUR UNE LONGUEUR PAIRE...
         LAD         DEMT
         SVC         0               < ENREGISTREMENT DES CARTES SUR BANDE...
         JMP         CAMT4           < VERS LA CARTE SUIVANTE...
         PAGE
<
<
<        E D I T I O N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=ADRESSE DU MESSAGE.
<
<
PRINT:   EQU         $
         PSR         A,X,C
         LR          A,C             < C=ADRESSE DU MESSAGE...
         SLLS        NOCMO=0
         ADRI        NOCMO-1,A
         STA         DEMOUT+1        < ADRESSE OCTET DU MESSAGE,
         LBY         0,C
         STA         DEMOUT+2        < ET LONGUEUR...
         LAD         DEMOUT
         SVC         0               < EDITION DU MESSAGE...
         PLR         A,X,C
         RSR
         END



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.