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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.