IDP         "DMPM : DUMP MEMOIRE SUR DKU"
         IDP         "RELEASE 25/10/79"
         IDP         "P. FRANCONNET"
         PROG
ZERO:    EQU         $
         DZS         '10             < INTERFACE AVEC LE SYSTEME.
<
<        P R O G R A M M E   D E   D U M P   D U   C O N T E N U   D E
<
<        L A   M E M O I R E   ( 0 - 64 K )   S U R   D K U.
<
<        (LE FORMAT DU DUMP EST QUANTA*128 MOTS PAR SECTEUR DKU).
<
<
<        PARAMETRES.
<
QUANTA:  VAL         3               < QUANTA DKU.
<
         WORD        RUN
         WORD        ENTRY
RUN:     EQU         $
         LRP         L
         BR          -1,L
PILE:    DZS         20              < PILE POUR 'K'.
BUDKU:   DZS         QUANTA*128      < BUFFER DKU.
BUDKUF:  EQU         $               < FIN BUFFER DKU.
REPONS:  DZS         2               < ZONE REPONSE.
<
<        MESSAGES A ENVOYER PAR LE S/P 'ENVOI'
<
M:       EQU         $+128
MASDEB:  BYTE        '6D;"A"
         ASCI        "DRESSE BLOC DEBUT="
         WORD        0
MASF:    BYTE        '6D;"D"
         ASCI        "ERNIER BLOC UTILISE="
MASFIN:  DZS         2
         WORD        0
MERDKU:  BYTE        '6D;"E"
         ASCI        "RREUR DKU"
         WORD        0
<
<        COMMON
<
         COMMON
COM:     EQU         $
AM:      WORD        M               < POUR LE S/P 'ENVOI'.
AXBUF:   WORD        BUDKU,X         < RELAI D'INDEXATION SUR BUFFER DKU.
AXTRAV:  WORD        '8000           < RELAI D'INDEXATION.
PBUDKU:  WORD        0               < POINTEUR COURANT SUR LE BUFFER DKU.
LBUDKU:  WORD        BUDKUF-BUDKU    < LONGUEUR MOTS BUFFER DKU.
<
AENVOI:  WORD        ENVOI           < ENVOI D'UN MESSAGE STANDARD.
ACONVA:  WORD        CONVA           < CONVERSION HEXA --> ASCI.
ACONVH:  WORD        CONVH           < CONVERSION ASCI --> HEXA.
ADMP1M:  WORD        DMP1M           < DUMP DE 1 MOT.
<
DMWDKU:  WORD        '8A02           < ECRITURE SUR DKU EN QUANTA 3.
         IF          QUANTA-1,XWORK,,XWORK
DMWDKU:  WORD        '8A0A           < ECRITURE SUR DKU EN QUANTA 1.
XWORK:   VAL         0
         WORD        BUDKU-ZERO*2
         WORD        QUANTA*128*2
ABC:     WORD        0               < ADRESSE BLOC COURANT.
DMOUT:   WORD        '0202           < ENVOI MESSAGE.
         WORD        0
         WORD        0
DMREP:   WORD        '0101           < DEMANDE REPONSE.
AOREP:   WORD        REPONS-ZERO*2
         WORD        4
DMCCI:   WORD        '0001           < RETOUR CCI.
         PAGE
         PROG
ENTRY:   EQU         $
<
<        INITIALISATIONS.
<
         LRM         C,K
         WORD        COM+'80         < COMMON.
         WORD        PILE-1          < PILE.
         STZ         PBUDKU          < POINTEUR BUFFER DKU.
<
<        ACQUISITION ADRESSE BLOC DEBUT.
<
DMPM1:   EQU         $
         LAI         MASDEB-M
         BSR         AENVOI
         LAD         DMREP
         SVC         0
         LA          AOREP
         BSR         ACONVH          < CONVERSION HEXA.
         JNE         DMPM1           < INCORRECT.
         STA         ABC             < ADRESSE BLOC COURANT.
         LAI         0               < ADRESSE MOT COURANT.
<
<        BOUCLE DE DUMP
<
DMPM2:   EQU         $
         WORD        '1E15           < 'B' RECOIT ('A') - SAUF ENTRE LES
                                     < ADRESSES '8000 A '8080...
         BSR         ADMP1M          < DUMP DU MOT COURANT.
         ADRI        1,A
         JANE        DMPM2           < AU MOT SUIVANT.
<
<        OPERATIONS DE FIN
<
<        ENVOI DE 'LBUDKU'-1 MOTS POR ETRE SUR QUE LE SECTEUR
<        EN COURS DE CONSTITUTION SOIT BIEN ECRIT.
<
         LBI         0               < MOT NUL.
         LX          LBUDKU
         ADRI        -1,X
DMPM3:   EQU         $
         BSR         ADMP1M          < DUMP MOT NUL.
         JDX         DMPM3
<
<        ON DIT QUEL EST LE DERNIER BLOC DKU UTILISE.
<
         LA          ABC
         ADRI        -1,A            < DERNIER SECTEUR AYANT ETE ECRIT.
         LRM         Y
         WORD        MASFIN-ZERO*2
         BSR         ACONVA          < COVERSION ASCI.
         LAI         MASF-M          < MESSAGE.
         BSR         AENVOI
<
         LAD         DMCCI           < RETOUR CCI
         SVC         0
         JMP         ENTRY           < VERS NOUVELLE EXECUTION.
         PAGE
DMP1M:   EQU         $
<
<        D U M P   D E   1   M O T   S U R   D K U
<
<        (QUAND LE BUFFER EST PLEIN, ON FAIT 1 ECHANGE)
<
<        ARGUMENT:   'B' = MOT A ECRIRE.
<
         PSR         A,B,X           < SAUVEGARDES.
<
         LX          PBUDKU          < VALEUR POINTEUR BUFFER.
         STB         &AXBUF          < STORE MOT.
         IC          PBUDKU
         LA          PBUDKU
         CP          LBUDKU          < TEST FIN DE BUFFER.
         JL          DMP1M1
<
<        BUFFER PLEIN.
<
         STZ         PBUDKU          < RAZ POINTEUR.
         LAD         DMWDKU          < DEMANDE WRITE DKU.
         JMP         $+1             < POUR POINT D'ARRET EVENTUEL.
         SVC         0
         JE          DMP1M2
         LAI         MERDKU-M        < MESSAGE ERREUR DKU.
         BSR         AENVOI
         ACTD
DMP1M2:  EQU         $
         IC          ABC             < INCREMENTATION ADRESSE BLOC COURANT.
DMP1M1:  EQU         $
         PLR         A,B,X           < 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
         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
<
<        CONVERSION EN BINAIRE D'UN NOMBRE HEXADECIMAL SAISI
<        EN ASCI (PAR EXEMPLE, NUMERO DE SECTEUR)
<
<        ARGUMENTS:
<                    'A' = ADRESSE OCTET DES 4 CARACTERES ASCI
<
<        RESULTAT:
<                    'A' = NOMBRE EN BINAIRE
<                    'B' = 0 SI CONVERSION OK
<        																# 0 SINON
<
<        NOTA:
<                    'B' EST TESTE A ZERO AVANT LE RETOUR (TESTER PAR JE/JNE)
<
CONVH:   EQU         $
         PSR         Y,W             < SAUVEGARDES
         LR          A,Y             < Y = ADRESSE CARACTERE EN COURS
         LXI         4               < INIT COUNT
CONVH1:  EQU         $
         LR          X,W             < SAUVEGARDE COUNT
         LR          Y,X             < INDEX CARACTERE
         LBY         &AXTRAV         < CARACTERE
         CPI         "0"
         JL          CONVH3          < ERREUR
         CPI         "9"
         JLE         CONVH2
         CPI         "A"
         JL          CONVH3          < ERREUR
         CPI         "F"
         JG          CONVH3          < ERREUR
         ADRI        -7,A
CONVH2:  EQU         $
         ADRI        -'30,A
         SLLS        12
         SCLD        4               < CHIFFRE HEXA DANS 'B'
         ADRI        1,Y             < CARACTERE SUIVANT
         LR          W,X             < RESTAURATION COUNT
         JDX         CONVH1          < AU SUIVANT
<
         SLLD        16              < CONVERSION OK
         JMP         CONVH9
<
CONVH3:  EQU         $
         LBI         1               < ERREUR
CONVH9:  EQU         $
         PLR         Y,W             < RESTAURATIONS
         CPZR        B               < POUR TEST AU RETOUR
         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.