IDP         "FORMATU: FORMATAGE DKU"
         IDP         "RELEASE 03/09/80"
         IDP         "P. FRANCONNET"
         PROG
ZERO:    EQU         $
         DZS         '10             < INTERFACE AVEC LE SYSTEME.
         WORD        RUN
         WORD        ENTRY
RUN:     EQU         $
         LRP         L
         BR          -1,L
<
<          CE PROGRAMME FORMATE LE DISPACK PLACE SUR L'UNITE DE DISQUE 'DKU'
<        EN FAISANT DES DEMANDES D'ECRITURE, PISTE PAR PISTE.
<
<        CHAQUE  ECRITURE SE FAIT AVEC LA FONCTION '6 ,  C'EST-A-DIRE
<        "SYNCHRONISATION SECTEUR 0" ET ECRITURE.
<
<          ERREURS POSSIBLES:
<
<        - ERREUR D'ECRITURE.
<        - ERREUR DE LECTURE ( CAR ON RELIT POUR VERIFICATION).
<        - ERREUR VALIDITE PISTE (PISTE RELUE # PISTE ECRITE).
<
QUANTA:  VAL         3               < QUANTA UTILISE.
NBMPS:   VAL         128             < NOMBRE DE MOTS PAR SECTEUR.
NBSPP:   VAL         24              < NOMBRE DE SECTEURS PAR PISTE.
PILE:    DZS         10              < PILE POUR 'K'
BUDKU:   DZS         NBMPS*NBSPP     < BUFFER DKU (UNE PISTE ENTIERE)
BUDKUF:  EQU         $               < FIN BUFFER DKU
<
<        MESSAGES A ENVOYER PAR LE S/P 'ENVOI'
<
M:       EQU         $
MIMP:    BYTE        '6D;"D"
         ASCI        "KU INACCESSIBLE !!!"
         WORD        0
MDEBF:   BYTE        '6D;"D"
         ASCI        "EBUT FORMATAGE DKU"
         WORD        0
MFINF:   BYTE        '6D;"F"
         ASCI        "IN FORMATAGE DKU"
         WORD        0
MABC:    BYTE        '6D;"B"
         ASCI        "LOC COURANT="
MABC1:   DZS         2
         WORD        0
MERRE:   BYTE        '6D;"E"
         ASCI        "RREUR ECRITURE DKU"
         WORD        0
MERRL:   BYTE        '6D;"E"
         ASCI        "RREUR LECTURE DKU"
         WORD        0
MERRV:   BYTE        '6D;"E"
         ASCI        "RREUR VALIDITE PISTE DKU"
         WORD        0
         COMMON
COM:     EQU         $
AM:      WORD        M               < POUR LE S/P 'ENVOI'.
AXTRAV:  WORD        '8000           < RELAI DE TRAVAIL.
ABUDKU:  WORD        BUDKU           < ADRESSE MOT BUFFER DKU.
AXBUDK:  WORD        BUDKU-1,X       < RELAI INDEXE MOT SUR BUFFER DKU.
LBUDKU:  WORD        BUDKUF-BUDKU    < LONGUEUR MOTS BUFFER DKU.
<
AENVOI:  WORD        ENVOI           < ENVOI D'UN MESSAGE STANDARD.
ACONVA:  WORD        CONVA           < CONVERSION HEXADECIMAL --> ASCI.
<
DMOUT:   WORD        '0202           < ENVOI MESSAGE.
         WORD        0
         WORD        0
DMCCI:   WORD        '0001           < RETOUR CCI.
DMWDKU:  WORD        '8A02           < WRITE DKU AVEC SYNCHRO SECTEUR 0.
         WORD        BUDKU-ZERO*2
         WORD        BUDKUF-BUDKU*2
ABC:     WORD        0               < ADRESSE BLOC COURANT.
ABCD:    WORD        '0000           < ADRESSE BLOC DEBUT.
ABCF:    WORD        'FA00-1         < ADRESSE BLOC FIN.
DMRDKU:  WORD        '8A00           < READ DKU.
         WORD        BUDKU-ZERO*2
         WORD        BUDKUF-BUDKU*2
         WORD        0
<
< DEMANDES CCI :
<
MON:     ASCI        "!DK S0 O"
         BYTE        "N";'04
MOFF:    ASCI        "!DK S0 OFF"
         BYTE        '04;0
MASS:    ASCI        "!ASSIGN A=DK"
         BYTE        "U";'04
MDASS:   ASCI        "!ASSIGN A="
         BYTE        "S";'04
DON:     WORD        '0002           < "!DK S0 ON"
         WORD        MON-ZERO*2
         WORD        80
DOFF:    WORD        '0002           < "!DK S0 OFF"
         WORD        MOFF-ZERO*2
         WORD        80
DASS:    WORD        '0002           < "!ASSIGN A=DKU"
         WORD        MASS-ZERO*2
         WORD        80
DDASS:   WORD        '0002           < "!ASSIGN A=S"
         WORD        MDASS-ZERO*2
         WORD        80
         PROG
         PAGE
ENTRY:   EQU         $
<
<        INITIALISATIONS
<
         LRM         C,K
         WORD        COM+'80         < COMMON.
         WORD        PILE-1          < PILE.
         LA          ABCD            < ADRESSE BLOC DEBUT.
         STA         ABC             < ADRESSE BLOC COURANT.
         LAD         DASS
         SVC         0               < "!ASSIGN A=DKU"...
         JE          E1              < OK, ON L'A...
         LAI         MIMP-M
         BSR         AENVOI          < ET BIEN NON, ON LE DIT...
         JMP         E2              < ET ON SORT...
E1:      EQU         $
         LAD         DON             < OK,
         SVC         0               < "!DK S0 ON"...
         JNE         $               < !?!???!
         LAI         MDEBF-M         < MESSAGE 'DEBUT DE FORMATAGE'.
         BSR         AENVOI
<
<        BOUCLE DE LECTURE-ECRITURE-VALIDATION-INCREMENTATION.
<
FU1:     EQU         $
         LA          ABC
         STA         DMRDKU+3        < ADRESSE BLOC POUR LECTURE FUTURE.
         LRM         Y
         WORD        MABC1-ZERO*2
         BSR         ACONVA          < CONVERSION ASCI BLOC COURANT.
         SLLS        8               < ON N'EDITERA LE NUMERO DE BLOC COURANT
         JANE        FU11            < QUE DE TEMPS EN TEMPS.
         LAI         MABC-M          < EDITION NUMERO BLOC COURANT.
         BSR         AENVOI
FU11:    EQU         $
<
< RAZ BUFFER DKU.
<
         LX          LBUDKU          < LONGUEUR MOTS BUFFER DKU.
         STZ         &AXBUDK         < RAZ MOT COURANT.
         JDX         $-1
<
<        WRITE AVEC SYNCHRONISATION SECTEUR 0.
<
         LAD         DMWDKU
         JMP         $+1             < POUR '1E16 EVENTUEL.
         SVC         0
         JE          FU2
         LAI         MERRE-M         < MESSAGE ERREUR LECTURE.
         JMP         FUER            < VERS TRAITEMENT D'ERREUR.
<
<        LECTURE.
<
FU2:     EQU         $
         LAD         DMRDKU
         JMP         $+1             < POUR '1E16 EVENTUEL.
         SVC         0
         JE          FU3
         LAI         MERRL-M         < MESSAGE ERREUR LECTURE.
         JMP         FUER            < VERS TRAITEMENT D'ERREUR.
<
<        VALIDATION.
<
FU3:     EQU         $
         LAI         0
         LX          LBUDKU          < LONGUEUR BUFFER.
FU4:     EQU         $
         OR          &AXBUDK
         JDX         FU4
         JAE         FU5
         LAI         MERRV-M         < MESSAGE ERREUR VALIDATION PISTE.
         JMP         FUER            < VERS TRAITEMENT D'ERREUR.
<
<        INCREMENTATION.
<
FU5:     EQU         $
         LAI         NBSPP/QUANTA    < PAS D'INCREMENTATION ADRESSE SECTEUR.
         AD          ABC
         STA         ABC             < NOUVEAU BLOC COURANT.
         EOR         ABCF
         TBT         0
         LA          ABC
         JC          FU7
< DE MEME SIGNE.
         JAL         FU6
< TOUS DEUX POSITIFS.
         CP          ABCF
         JLE         FU1             < OK.
         JMP         FUF             < FIN.
FU6:     EQU         $
< TOUS DEUX NEGATIFS.
         CP          ABCF
         JLE         FU1             < OK.
         JMP         FUF             < FIN.
FU7:     EQU         $
< DE SIGNES DIFFERENTS.
         JAGE        FU1             < OK.
<
FUF:     EQU         $
<
<        FIN DE FORMATAGE.
<
         LAI         MFINF-M         < MESSAGE DE FIN DE FORMATAGE.
         BSR         AENVOI
         LAD         DOFF
         SVC         0               < "!DK S0 OFF"...
         JNE         $               < ??!???!
         LAD         DDASS
         SVC         0               < "!ASSIGN A=S"...
         JNE         $               < ??!??!
E2:      EQU         $
         LAD         DMCCI           < RETOUR CCI
         SVC         0
         JMP         ENTRY           < VERS NOUVELLE EXECUTION.
FUER:    EQU         $
< TRAITEMENT D'ERREUR; ICI 'A' = ARGMENT D'APPEL S/P 'ENVOI' (MESSAGE).
         BSR         AENVOI          < MESSAGE D'ERREUR.
         LAI         MABC-M          < ENVOI NUMERO BLOC COURANT.
         BSR         AENVOI
         WORD        '1E16           < POUR DEBUGGING...
         JMP         FU1             < VERS NOUVELLE TENTATIVE.
         PAGE
CONVA:   EQU         $
<
<        S/P DE CONVERSION D'UN MOT EN ASCI
<
<        ARGUMENT:
<                    A = MOT A TRADUIRE
<                    Y = ADRESSE OCTET DE RANGEMENT DU RESULTAT
<
         PSR         A,B,X,Y         < SAUVEGARDES
<
         ADRI        3,Y             < ADRESSE OCTET DERNIER CHIFFRE
         PSR         A
         LXI         4               < INIT COUNT
CONVA1:  EQU         $
         PLR         A
         SLRD        4
         PSR         A
         SLLD        4
         ANDI        'F              < RECUPERATION CHIFFRE HEXA
         CPI         '9
         JLE         $+2
         ADRI        7,A
         ADRI        '30,A           < CARACTERE ASCI
         PSR         X               < SVG COUNT
         LR          Y,X             < INDEX CHIFFRE EN COURS
         STBY        &AXTRAV
         ADRI        -1,Y            < INDEX CHIFFRE SUIVANT
         PLR         X               < RECUPERATION COUNT
         JDX         CONVA1
<
         PLR         A               < A NE PAS OUBLIER !
         PLR         A,B,X,Y         < RESTAURATIONS
         RSR
         PAGE
ENVOI:   EQU         $
<
<        ENVOI D'UN MESSAGE SUR UL '02
<
<        EN ENTREE
<
<        A=DEPLACEMENT MOTS DU MESSAGE A ENVOYER PAR RAPPORT
<          A M. TOUT MESSAGE EST DELIMITE PAR '00
<
<
<        NOTA: ON A
<                    EN TABLE:     M:    EQU    $+128
<                                  MES1: ASCI   "TEXTE..."
<                                        WORD   0
<                    EN COMMON:    AM:  WORD   M
<                    APPEL PAR:          LAI    MESI-M
<                                        BSR    AENVOI
<
         PSR         A,X
         AD          AM              < @ MOT MESSAGE
         ADR         A,A             < @ OCT MESSAGE
         STA         DMOUT+1
         STZ         DMOUT+2
         LR          A,X
ENV1:    EQU         $               < BOUCLE JUSQU'A DELIM '00
         LBY         &AXTRAV
         JAE         ENV2
         IC          DMOUT+2         < LONGUEUR='+1
         ADRI        1,X
         JMP         ENV1
ENV2:    EQU         $
         LAD         DMOUT
         SVC         0
         PLR         A,X
         RSR
         LST
         NDS
         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.