IDP         "PUNCH BOOT"
         IDP         "RELEASE 21/03/79"
         IDP         "P. FRANCONNET"
         PROG
ZERO:    EQU         $
<
<        P R O G R A M M E   D E   P U N C H   U T I L I S E
<
<        P O U R   P U N C H E R   U N E   Z O N E   M E M O I R E
<
<        D A N S   U N   F O R M A T   C O M P A T I B L E   A V E C
<
<        L E   " N O Y A U   D E   B O O T S T R A P "   D U
<
<        S Y S T E M E   C M S 5.
<
<
<        PARAMETRES
<
LCCI:    VAL         80              < COMPATIBLE CMS5.
NOCMO:   VAL         2               < COMPATIBLE CMS5. (NOMBRE D'OCTETS
                                     < PAR MOT)
BNNMPC:  VAL         LCCI/NOCMO      < NOMBRE DE MOTS PAR CARTE, A RAISON
                                     < DE 1 OCTET PAR COLONNE.
<        FORMAT DES CARTES:
<
<                    - 'BNNMPC' MOTS PAR CARTE A RAISON DE 1 OCTET
<                      PAR COLONNE.
<                    - CHAQUE OCTET EST RANGE EN COLONNES 0 A 7.
<                    - FIN DES DONNEES INDIQUEE PAR UN BIT
<                      A 1 EN COLONNE 12.
<
         DZS         '10             < INTERFACE AVEC LE SYSTEME.
         WORD        BN00
         WORD        BN01
BN00:    EQU         $
         LRP         L
         BR          -1,L
<
<        PILE
<
PILE:    DZS         20
<
<        BUFFER PUNCH
<
BP:      DZS         80
FBP:     EQU         $
         PAGE
<
<        MESSAGES A ENVOYER PAR LE S/P 'ENVOI'
<
M:       EQU         $+128
MADEB:   BYTE        '6D;"A"
         ASCI        "DRESSE DEB="
         WORD        0
MAFIN:   BYTE        '6D;"A"
         ASCI        "DRESSE FIN="
         WORD        0
MASCU:   BYTE        '6D;"A"
         ASCI        "SSIGNATION CU IMPOSSIBLE..."
         WORD        0
MPBP:    BYTE        '6D;"P"
         ASCI        "ROBLEME PERFO."
         WORD        0
<
<        DIVERS
<
ASU1:    ASCI        "!ASSIGN B=CU"
         BYTE        "1";'04
ASU1F:   EQU         $
ASU2:    ASCI        "!ASSIGN B=CU"
         BYTE        "2";'04
ASU2F:   EQU         $
DESAS:   ASCI        "!ASSIGN B="
         BYTE        "S";'04
DESASF:  EQU         $
         COMMON
COM:     EQU         $
<
<        RELAIS ET ZONES DE TRAVAIL
<
ADRDEB:  WORD        0               < ADRESSE DE DEBUT COURANTE.
ADRFIN:  WORD        0               < ADRESSE DE FIN.
Q8000:   WORD        '8000           < LES ADRESSES COMPRISES ENTRE '8000
Q8080:   WORD        '8080           < ET '8080 BORNES INCLUSES, SERONT REFUSEES
PBP:     WORD        0               < POINTEUR BUFFER PUNCH.
ABP:     WORD        BP              < ADRESSE BUFFER PUNCH.
AFBP:    WORD        FBP             < ADRESSE FIN BUFFER PUNCH.
AFBP1:   WORD        BNNMPC*2+BP     < POUR LE TEST 'FIN DE CARTE', EN
                                     < FONCTION DU NOMBRE DE MOTS PAR
                                     < CARTE : 'BNNMPC' QUI EST UN PARAMETRE.
AXTRAV:  WORD        ZERO,X          < RELAI D'INDEXATION.
AM:      WORD        M               < POUR LE S/P 'ENVOI'.
<
<        RELAIS DE SOUS-PROGRAMMES.
<
ARAZBP:  WORD        RAZBP           < REMISE A ZERO BUFFER PUNCH.
APC1M:   WORD        PC1M            < PUNCH 1 MOT.
APC1O:   WORD        PC1O            < PUNCH 1 OCTET.
ACONVH:  WORD        CONVH           < CONVERSION ASCI --> HEXA.
ACONVA:  WORD        CONVA           < CONVERSION HEXA --> ASCI.
AENVOI:  WORD        ENVOI           < ENVOI MESSAGE.
AVALID:  WORD        VALID           < VALIDATION ADRESSE.
<
<        DEMANDES
<
ADEB:    DZS         2               < ADRESSE DEBUT EN ASCI.
DMADEB:  WORD        '0101           < LECTURE ADRESSE DEBUT.
AOADEB:  WORD        ADEB-ZERO*2
         WORD        4
AFIN:    EQU         $               < ADRESSE FIN, EN RECOUVREMENT.
DMAFIN:  EQU         DMADEB          < LECTURE ADRESSE DE FIN.
AOAFIN:  EQU         AOADEB

DMASU1:  WORD        '0002           < ASSIGNATION 'B <--> CU1.
         WORD        ASU1-ZERO*2
         WORD        ASU1F-ASU1*2
DMASU2:  WORD        '0002           < ASSIGNATION 'B <--> CU2.
         WORD        ASU2-ZERO*2
         WORD        ASU2F-ASU2*2
DMCCI:   WORD        '0001           < RETOUR AU CCI.
DMDSAS:  WORD        '0002           < DESASSIGNATION DE L'UL 'B.
         WORD        DESAS-ZERO*2
         WORD        DESASF-DESAS*2
DMPCH:   WORD        '0B02           < PUNCH COLONNE.
         WORD        0
         WORD        2
DMTMPO:  WORD        '0005           < TEMPORISATION.
         WORD        0
         WORD        3               < SECONDES.
DMOUT:   WORD        '0202           < ENVOI MESSAGE PAR S/P 'ENVOI'.
         WORD        0
         WORD        0
MNBM:    BYTE        '6D;"N"
         ASCI        "OMBRE DE MOTS= '"
NBM:     DZS         2               < NOMBRE DE MOTS EN ASCI.
MNBMF:   EQU         $
DMNBM:   WORD        '0202           < EDITION NOMBRE DE MOTS.
         WORD        MNBM-ZERO*2
         WORD        MNBMF-MNBM*2
         PAGE
         PROG
BN01:    EQU         $
<
<        I N I T I A L I S A T I O N S
<
<
<        'K' DE PILE
<
         LRM         C,K
         WORD        COM+'80
         WORD        PILE-1
<
<        ADRESSE DEBUT
<
BN02:    EQU         $
         LAI         MADEB-M         < POUR ENVOI QUESTION.
         BSR         AENVOI
         LAD         DMADEB          < DEMANDE DE L'ADRESSE.
         SVC         0
         LA          AOADEB          < ADRESSE OCTET DE L'ADRESSE EN ASCI.
         BSR         AVALID          < CONVERSION ET VALIDATION.
         JNE         BN02            < ADRESSE INACCEPTABLE.
         STA         ADRDEB          < STOCKAGE ADRESSE DEBUT.
<
<        ADRESSE DE FIN
<
BN03:    EQU         $
         LAI         MAFIN-M         < POUR ENVOI QUESTION.
         BSR         AENVOI
         LAD         DMAFIN          < DEMANDE DE L'ADRESSE.
         SVC         0
         LA          AOAFIN          < ADRESSE OCTET DE L'ADRESSE DE FIN.
         BSR         AVALID          < CONVERSION ET VALIDATION.
         JNE         BN03            < ADRESSE INACCEPTABLE.
         STA         ADRFIN          < STOCKAGE ADRESSE DE FIN.
<
<        VALIDATION GLOBALE:
<
<                      LES DEUX ADRESSES DOIVENT ETRE DE MEME SIGNE,
<                    PUISQU'ON SAIT QUE L'INTERVALLE ('8000 '8080) EST INTERDIT,
<                    ET L'ADRESSE FIN > ADRESSE DEBUT.
<
         LA          ADRDEB
         EOR         ADRFIN
         TBT         0
         JC          BN02            < SIGNES DIFFERENTS.
         LA          ADRFIN
         SB          ADRDEB
         JAL         BN02            < FIN < DEBUT.
<
<        EDITION DU NOMBRE DE MOTS.
<
         LRM         Y
         WORD        NBM-ZERO*2
         ADRI        1,A             < NOMBRE DE MOTS.
         BSR         ACONVA          < EDITION NOMBRE DE MOTS.
         LAD         DMNBM           < ENVOI NOMBRE DE MOTS.
         SVC         0
<
<        DESASSIGNATION DE L'UL 'B
<
         LAD         DMDSAS
         SVC         0
<
<        ASSIGNATION DE 'CU1' OU 'CU2' A L'UL 'B.
<        SI C'EST IMPOSSIBLE, RETOUR AU CCI ET BOUCLE.
<
BN05:    EQU         $
         LAD         DMASU1          < TENTATIVE ASSIGNATION CU1.
         SVC         0
         JE          BN04
         LAD         DMASU2          < TENTATIVE ASSIGNATION CU2.
         SVC         0
         JE          BN04
         LAI         MASCU-M         < ASSIGNATION IMPOSSIBLE,
         BSR         AENVOI          < ON PREVIENT,
         LAD         DMCCI           < ET ON REVIENT AU CCI.
         SVC         0
         JMP         BN05            < ... ET BOUCLE.
<
<        INITIALISATION BUFFER PUNCH ET POINTEUR BUFFER PUNCH.
<
BN04:    EQU         $
         BSR         ARAZBP
<
<        B O U C L E   D E   L E C T U R E   E T   D E   P U N C H
<
BN07:    EQU         $
         LA          ADRDEB          < ADRESSE DEBUT COURANTE.
         WORD        '1E15           < 'B' RECOIT LE MOT D'ADRESSE (A).
         LR          B,A             < POUR LE S/P 'PC1M'
         BSR         APC1M           < PUNCH DU MOT COURANT.
         LA          ADRDEB
         CP          ADRFIN          < FIN ?
         JE          BN06
         IC          ADRDEB          < ADRESSE SUIVANTE
         JMP         BN07            < ET BOUCLE.
<
<        O P E R A T I O N S   D E   F I N
<
BN06:    EQU         $
<
<        PUNCH DELIMITEUR DE FIN
<
         LRM         A
         WORD        'C000           < DELIMITEUR DE FIN.
         BSR         APC1O           < PUNCH OCTET.
<
<        PUNCH DERNIERE CARTE
<
         LXI         BNNMPC*2-1
         LAI         0
         BSR         APC1O           < PUNCH OCTET 'BNNMPC'-1 FOIS POUR
         JDX         $-1             < PROVOQUER A COUP SUR LE PUNCH
                                     < DE LA CARTE EN COURS. BESTIAL NON ?
<
<        DESASSIGNATIONS ET RETOUR CCI
<
         LAD         DMDSAS          < DESASSIGNATION DE L'UL 'B.
         SVC         0
         LAD         DMCCI           < RETOUR CCI.
         SVC         0
         JMP         BN01            < VERS NOUVELLE EXECUTION DU PROGRAMME.
         PAGE
<
<        R E I N I T I A L I S T I O N   B U F F E R   P U N C H
<
<        E T   P O I N T E U R   B U F F E R   P U N C H
<
RAZBP:   EQU         $
         PSR         A,X,Y,L
<
         LRM         A,X,Y,L
         WORD        0               < REINIT A ZERO.
         WORD        FBP-BP          < LONGUEUR EN MOTS.
         WORD        BP              < VALEUR DE REINITIALISATION DE 'PBP'.
         WORD        BP              < ADRESSE BUFFER PUNCH.
<
RAZBP1:  EQU         $
         STA         0,L
         ADRI        1,L
         JDX         RAZBP1
         STY         PBP
<
         PLR         A,X,Y,L
         RSR
         PAGE
VALID:   EQU         $
<
<        C O N V E R S I O N   E T   V A L I D A T I O N
<
<        D ' U N E   A D R E S S E   E X P R I M E E   E N   A S C I
<
<        ARGUMENT:
<                    - 'A' = ADRESSE OCTET DE L'ADRESSE EXPRIMEE
<                            EN ASCI.
<
<
<        RESULTAT:
<
<                    - 'A' = ADRESSE CONVERTIE.
<                    - CODE CONDITION POSITIONNE PAR CPZR, IN
<                      DIQUANT LA VALIDITE DE L'ADRESSE. TESTER
<                      EN RETOUR PAR 'JE    OK'.
<
         PSR         B
         BSR         ACONVH          < CONVERSION
         JNE         VALID2          < ADRESSE INVALIDE.
         CP          Q8080
         JG          VALID1
         CP          Q8000
         JL          VALID1
VALID2:  EQU         $               < ADRESSE INACCEPTABL ('8000 A
         LBI         1               < '8080 SONT INTERDITES A CAUSE
                                     < DU '1E15)
VALID1:  EQU         $
         CPZR        B
         PLR         B
         RSR
PC1M:    EQU         $
<
<        P U N C H   U N   M O T   C O N T E N U   D A N S   ' A '
<
         PSR         B
         LBI         0
         SLRD        8
         SLLS        2+4
         BSR         APC1O           < PUNCH PREMIER OCTET.
         LAI         0
         SLLD        8
         SLLS        2+4
         BSR         APC1O           < PUNCH SECOND OCTET.
         PLR         B
         RSR
PC1O:    EQU         $
<
<        P U N C H   U N   O C T E T
<
         PSR         A,X,Y,L
         LR          A,Y             < OCTET A PUNCHER.
<
         LA          PBP             < POINTEUR BUFFER PUNCH
         CP          AFBP1           < FIN DE CARTE ?
         JL          PC1O1
         LRM         X,L
         WORD        80              < NOMBRE DE COLONNES.
         WORD        BP              < ADRESSE MOT COURANT.
PC1O2:   EQU         $
         LR          L,A
         SLLS        1
         STA         DMPCH+1
         LAD         DMPCH           < PUNCH COLONNE.
         PSR         X               < A CAUSE DU SVC.
         SVC         0
         PLR         X
         JE          PC1O3
         LAI         MPBP-M          < PROBLEME PERFO, ON PREVIENT.
         BSR         AENVOI
         WORD        '1E05           < ET ON TRAPPE.
PC1O3:   EQU         $
         ADRI        1,L
         JDX         PC1O2
         LAD         DMTMPO          < TEMPORISATION
         SVC         0
         BSR         ARAZBP          < REINITIALISATION BUFFER PUNCH
                                     < ET POINTEUR BUFFER PUNCH.
PC1O1:   EQU         $
         LX          PBP
         LR          Y,A             < OCTET A PUNCHER
         STA         &AXTRAV         < STORE OCTET A PUNCHER
         IC          PBP             < POUR OCTET SUIVANT
<
         PLR         A,X,Y,L
         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
         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
         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.