NMPROC: VAL "SA" < NOM DU PROCESSEUR.
IDP "SA - RELEASE 01/06/1979"
IDP "JOHN F. COLONNA"
EOT #SIP DEF PROCESSEUR#
PROG
WORD SAVE < ENTRY POINT DU PROCESSEUR.
WORD 0
PSAVE: EQU $ < P='12 !!!
LRP L
BR -2,L < ENTRY DANS LE PROCESSEUR.
EOT #SIP DEFINITION ITEM#
LNOM: VAL 10 < NBRE DE MOTS MAX D'UN NOM SGN.
PAGE
<
<
< L O C A L :
<
<
LOCAL
LOC: EQU $
<
< BUFFERS ET MESSAGES :
<
BUFFER: WORD 0 < BUFFER DE PUNCH UNE COLONNE ,
< ET DE LECTURE DES REPONSES
< DE L'UTILISATEUR.
CARTE: DZS 80 < BUFFER D'UNE CARTE BINAIRE.
MINT: BYTE '6D;">" < INVITATION UTILISATEUR.
MNOM: BYTE '6D;"N"
ASCI "OM> "
MLOC: BYTE '6D;" "
ASCI "NOM EN '"
WORD XWOR%B;XWOR%C;" ,"
ASCI " VALEUR EN '"
WORD XWOR%D;XWOR%E;" ."
MERR: BYTE "?";"?" < MESSAGE D'ERREUR.
<
< RELAIS DIVERS :
<
ANOM1: WORD NOM-1,X < RELAI DE RAZ DU BUFFFER SGN.
ANOM: WORD NOM,X < RELAI D'ACCES AU BUFFER SGN.
ACARTE: WORD CARTE,X < RELAI D'ACCES A UNE CARTE BIN.
APILE: WORD PILE-1 < INITIALISATION PILE SODOME.
AOVL: WORD OVL < CHARGEMENT DES OVERLAYS.
AGTNOM: WORD GETNOM < RECUPERATION NOM, ET CLEAR BUFFER
<
< CONSTANTES DIVERSES :
<
NGE: WORD "GE" < NOM DE L'OVERLAY 'GE'.
KIN: WORD -1 < POUR COMPTAGE DES ENTRIES.
XNOM: WORD 0 < NBRE DE MOTS A RAZER.
XCART: WORD 0 < INDEX DE L'OCTET COURANT LORS
< DU SAVE/RESTAURE UNE VALEUR.
NOCT: WORD 0 < NBRE D'OCTETS REELLEMENT
< OCCUPES PAR UN NOM+VALEUR ,
< ET RECUPERE LORS D'UN LOAD SGN.
<
< PILE DE TRAVAIL :
<
STACK: DZS 10
<
< DEMANDES A CMS4 :
<
DEMIN: WORD '0101 < LECTURE REPONSE UTILISATEUR.
WORD BUFFER-ZERO*2
WORD 1 < 1 CARACTERE A LIRE.
DEMSGN: WORD '0402 < DEMANDE SGN OVERLAY.
WORD BRANCH-ZERO*2
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1
RELMEM: WORD '0004 < DEMANDE DE RETOUR A 4K MOTS.
DEMMEM: WORD '0004 < DEMANDE MEMOIRE.
WORD '2000 < 4K MOTS.
WORD '2000 < 4K A PRIORI ..
SLEEP: WORD '0005 < DEMANDE MISE EN SOMMEIL.
DEMCCI: WORD '0001 < RETOUR AU CCI.
WORD 3 < 3 SECONDES.
DEMINT: WORD '0202 < ENVOI D'UNE INVITATION.
WORD MINT-ZERO*2
WORD 2
DNOM: WORD '0202 < EDITION DU MESSAGE 'NOM>'.
WORD MNOM-ZERO*2
WORD 5
DEMNOM: WORD '0101 < LECTURE DU NOM DE LA VALEUR
< A SAUVEGARDER.
WORD XWOR%A
WORD LNOM*2-1
DEMOUT: WORD '0202 < EDITION DU NOM D'UNE VALEUR
< RESTAUREE.
WORD XWOR%A
WORD LNOM*2
SGN: WORD '0002 < DEMANDE D'ACCES AU SGN POUR
< SAVE/RESTAURE LES VALEURS.
WORD XWOR%A
WORD 0 < LONGUEUR A CALCULER.
WORD 2*LNOM < DECALAGE DE LA VALEUR PAR
< RAPPORT A L'ORIGINE DU NOM.
DEMCR: WORD '0A08 < DEMANDE DE LECTURE BINAIRE
< SUR LE NVP='0A.
WORD CARTE-ZERO*2
WORD 2*80 < IL FAUT 1 MOT PAR COLONNE.
DEMPCH: WORD '0B02 < DEMANDE D'ECRITURE SUR LE
< NVP='0B.
WORD BUFFER-ZERO*2
WORD 2 < 1 COLONNE FAIT 2 OCTETS.
DEMLOC: WORD '0202 < ENVOI DU MESSAGE DE LOCATION.
WORD MLOC-ZERO*2
WORD 34
DEMERR: WORD '0202 < EDITION MESSAGE D'ERREUR.
WORD MERR-ZERO*2
WORD 2
PAGE
<
<
< S A V E E T R E S T A U R E T O U T E
< V A L E U R R A N G E E S O U S S G N :
<
<
< FONCTION :
< CE PROCESSEUR PERMET DE SAUVEGARDER
< ET DE RESTAURER TOUTE VALEUR
< ACCESSIBLE PAR UN NOM DU SGN ; IL
< CREE DES DECKS DE CARTES DONT LA
< FIN EST INDIQUEE PAR LA 1ERE COLONNE
< A 'SPACE' PARMI LES 16*2*2 PREMIERES
< D'UNE CARTE ...
< ON TROUVE DE PLUS EN TETE DU DECK ,
< LE NOM DE LA VALEUR.
< ON POURRA AINSI SAUVEGARDER LES
< IMAGES VIDEOS SYNTHETIQUES , AINSI
< QUE LES SIMULATIONS DE FLOPPY.
<
<
< COMMANDES RECONNUES :
< F : RETOUR A GE ,
< D : DELETE ,
< M : MODIFICATION ,
< S : SAVE ,
< R : RESTAURE.
<
<
< NVP UTILISES :
< NVP='0A : LECTURE BINAIRE SUR CR1 ,
< NVP='0B : PUNCH SUR CU1.
<
<
PROG
WORD LOC+'80
WORD BRANCH
SAVE: EQU $
LRP K
ADRI -1,K
PLR L,W < INITIALISATION DES BASES L ET W.
LAD STACK-1
LR A,K < INITIALISATION DE K SUR LA PILE
< DE TRAVAIL DU PROCESSEUR.
IC KIN < COMPTAGE DES ENTRIES...
JG GOGE < ABORT SI 1 ALT-MODE !!!
<
< INTERROGATION UTILISATEUR :
<
E100: EQU $
LAD RELMEM
SVC 0 < RETOUR A 4K A PRIORI.
LAD DEMINT
SVC 0 < ENVOI D'UNE INVITATION.
LAD DEMIN
SVC 0 < LECTURE DE LA REPONSE.
<
< ANALYSE DE LA REPONSE UTILISATEUR :
<
LBY BUFFER < A=REPONSE.
CPI "S"
JE PUNCH < DEMANDE DE SAVE VALEUR.
CPI "R"
JE READ < DEMANDE DE RESTAURATION.
CPI "D"
JE DELETE < DEMANDE DE DELETE VALEUR.
CPI "M"
JE MODIFY < DEMANDE DE MODIFICATION.
CPI "F"
JE GOGE < DEMANDE DE RETOUR A GE.
LAD DEMERR
SVC 0 < REPONSE INCOMPREHENSIBLE ,
< ENVOI D'UN MESSAGE D'ERREUR.
JMP E100 < ET NOUVELLE INTERROGATION.
PAGE
<
<
< M O D I F Y V A L E U R :
<
<
MODIFY: EQU $
BSR AGTNOM < RECUPERATION DU NOM, CLEAR
< LE BUFFER, PUIS LECTURE SGN.
LAI '03
STBY SGN < MISE EN PLACE DU NVP DE DELETE.
LAD SGN
SVC 0 < DELETE LE NOM-VALEUR SOUS SGN.
LAD DEMLOC < SI LO NOM EXISTE,
SVC 0 < ON ENVOIE UN MESSAGE DE LOCATION
< DU NOM ET DE LA VALEUR,
LAD DEMCCI < PUIS ON PASSE AU CCI,
SVC 0 < POUR FAIRE LES PATCHES DE LA
< VALEUR (ET DU NOM EVENTUELLEMENT...
LA NOCT < A=NBRE D'OCTETS A RESTAURER.
JMP RESTOR < PUIS VERS LA RESTAURATION.
PAGE
<
<
< S A U V E G A R D E V A L E U R :
<
<
PUNCH: EQU $
BSR AGTNOM < RECUPERATION DU NOM-VALEUR.
<
< OK , PUNCH LA VALEUR ET LE NOM :
<
STZ XCART < RAZ DE L'INDEX DE L'OCTET COURANT
< PUNCHE.
<
< BOUCLE DE PUNCH 1 CARTE :
<
E103: EQU $
LXI 16*2*2 < X=NBRE D'OCTETS SIGNIFICATIFS
< QUE L'ON MET PAR CARTE.
E104: EQU $
LBI 0 < CLEAR LE REGISTRE B A PRIORI.
LA XCART < A=NUMERO DE L'OCTET COURANT.
SLRS 6 < A=NUMERO DE LA CARTE COURANTE.
ANDI 16*2*2-1 < A=NUMERO DE LA CARTE COURANTE
< MODULO 64.
ADR X,A < A=NBRE DE COLONNES RESTANT A
< PUNCHER+NUMERO DE LA CARTE
< COURANTE MODULO 64.
CPI 16*2*2 < LE NBRE DE COLONNE RESTANT A
< PUNCHER EST-IL EGAL AU NUMERO
< DE LA CARTE COURANTE MODULO 64 ???
JNE E1000 < NON , B=0.
SBT 0+16 < OUI = B='8000.
E1000: EQU $
PSR X < SAVE LE NBRE DE COLONNES
< A PUNCHER.
LAI 0 < A PRIORI , ON A PUNCHE TOUS
< LES OCTETS SIGNIFICATIFS.
DC NOCT < DECOMPTE DES OCTETS PUNCHES.
JL E400 < ET OUI C'EST FINI , ON PUNCHE
< DONC UNE COLONNE 'SPACE'.
LX XCART < X=INDEX DE L'OCTET COURANT.
IC XCART < PREPARATION OCTET SUIVANT.
LBY &ANOM < A=OCTET COURANT A PUNCHER.
SLLS 6 < CADRAGE CORRECT.
ORI '21 < MISE EN PLACE DU CODE NUMERIQUE.
E400: EQU $ < CAS DES COMPLETIONS A 'SPACE'.
ORR B,A < POSITIONNEMENT EVENTUEL DU
< BIT0 DU MOT COURANT AFIN DE
< FAIRE UNE NUMEROATTION MODULO 64.
STA BUFFER < ET MISE DANS LE BUFFER DE PUNCH.
LAD DEMPCH
SVC 0 < PUNCH 1 COLONNE.
JE E105 < OK , PUNCH ACCEPTE.
<
< ERREURS D'ASSIGNATION :
<
ADRI -1,K < ANNULATION DE L'INSTRUCTION
< PSR X.
LAD DEMCCI
SVC 0 < ET RETOUR AU CCI POUR !ASSIGN.
JMP E100 < ET ON REPART.
<
< OK , PUNCH ACCEPTE :
<
E105: EQU $
PLR X < RESTAURE LE NBRE DE COLONNES.
JDX E104 < PASSAGE A LA COLONNE SUIVANTE.
<
< MISE DE 'SPACE' EN BOUT DE CARTES :
<
LXI -16*2*2+80 < X=NBRE DE COLONNES A RAZER.
STZ BUFFER < MISE D'UN 'SPACE' DANS LE
< BUFFER DE PUNCH.
LAD DEMPCH
E106: EQU $
PSR X < SAVE LE NBRE DE COLONNES.
SVC 0 < PUNCH UN 'SPACE'.
PLR X < RESTAURE LE NBRE DE COLONNES.
JDX E106 < PASSAGE A LA COLONNE SUIVANTE.
LAD SLEEP
SVC 0 < TEMPORISATION DE PUNCH.
CPZ NOCT < A-T'ON PUNCHE AU MOINS UNE
< COLONNE DE FIN DE DECK ('SPACE').
JL GOGE < ET OUI , ON ARRETE LA ....
JMP E103 < PASSAGE A LA CARTE SUIVANTE.
PAGE
<
<
< R E T O U R A G E :
<
<
GOGE: EQU $
<
< RERAZ DE L'ESPACE MEMOIRE (POUR 'GE') :
<
LX XNOM < X=NBRE DE MOTS A RAZER.
E110: EQU $
STZ &ANOM1 < ON ENLEVE LES COCHONNERIES
< QUE L'ON A MISES.
JDX E110
<
< LIBERATION DE L'ESPACE MEMOIRE :
<
LAD RELMEM
SVC 0 < RETOUR A 4K MOTS.
LA APILE
LR A,K < REINITIALISATION DE K AVEC
< LA PILE DE SODOME.
LA NGE
STA 0,W < MISE EN PLACE DU NOM DE 'GE'
< EN TETE DE LA BRANCHE.
LAI '06
STBY DEMSGN < MISE EN PLACE D'UN NVP DE
< LOAD SOUS :SYS.
LAD DEMSGN
E111: EQU $
BSR AOVL < TENTATIVE DE CHARGEMENT DE 'GE'.
LAD DEMCCI
SVC 0 < RETOUR AU CCI SI ERREUR DE
< CHARGEMENT.
JMP E111 < ET NOUVELLE TENTATIVE SI !GO.
PAGE
<
<
< D E L E T E V A L E U R :
<
<
DELETE: EQU $
<
< DEMANDE DU NOM DE LA VALEUR :
<
LAD DNOM
SVC 0 < ENVOI D'UNE INVITATION.
LAD DEMNOM
SVC 0 < ENTREE DU NOM.
<
< DELETE DE LA VALEUR DU NOM :
<
LAI LNOM*2+1 < PLACER LA LONGUEUR DE LA DEMANDE.
STA SGN+2
LAI '03
JMP E356 < VERS LA MISE EN PLACE D'UN
< NVP DE DELETE , PUIS LE DELETE.
PAGE
<
<
< R E S T A U R A T I O N V A L E U R :
<
<
READ: EQU $
LA RELMEM+2 < ON TRAVAILLE SUR 4K A PRIORI.
STA DEMMEM+2
STZ XCART < RAZ DE L'INDEX DE L'OCTET
< COURANT RESTAURE.
<
< BOUCLE DE LECTURE DES CARTES :
<
E123: EQU $
LAD DEMCR
SVC 0 < DEMANDE LECTURE UNE CARTE.
JE E125 < OK , LECTURE ACCEPTEE.
<
< ERREUR D'ASSIGNATION A LA LECTURE :
<
LAD DEMCCI
SVC 0 < RETOUR AU CCI , POUR FAIRE
< LES !ASSIGN MANQUANTES.
JMP E100 < VERS UNE NOUVELLE ENTREE
<
< OK , LECTURE BINAIRE ACCEPTEE :
<
E125: EQU $
LXI 16*2*2 < X=NBRE D'OCTETS SIGNIFICATIFS
< PAR CARTE LUE.
LYI 0 < INDEX D'ACCES AU BUFFER CARTE.
E126: EQU $
PSR X < SAVE X.
LA XCART < LA MEMOIRE EST-ELLE SUFFISANTE
ADRI 1,A < POUR PLACER LE CARACTERE ???
SLRS 1
LR A,X
LAD &ANOM
SLLS 1
AD DEMNOM+1
ADRI '22,A
CP DEMMEM+2
JLE E126A < OUI - OK.
SLRS 12 < NON - IL FAUT AUGMENTER LA MEMOIRE.
ADRI 1,A
SLLS 12
STA DEMMEM+2
LAD DEMMEM
SVC 0 < DEMANDE MEMOIRE.
JE E126A < OK - PARFAIT.
PLR X < RESTAURE X.
JMP ERREUR < PAS DE MEMOIRE - ERREUR.
E126A: EQU $
PLR X < RESTAURE X.
XR X,Y
LA XCART
SLRS 6
ANDI 16*2*2-1 < A=NUMERO DE LA CARTE COURANTE
< MODULO 64.
CPR X,A < EST-ON SUR LA COLONNE DEVANT
< CONTENIR LA NUMEROTATION
< MODULO 64 ???
LA &ACARTE < A=UNE COLONNE DE CARTE.
JNE E1001 < NON , ON CONTINUE ......
JAGE ERREUR < SI OUI , IL Y A ERREUR SI
< BIT0 N'EST PAS A 1 !!!
RBT 0 < OK , IL EST A 0 , ON LE ARZE ...
E1001: EQU $
JAL ERREUR < ERREUR SI LE BIT0=1 !!!
JAE E501 < CAS D'UNE FIN DE DECK.
ADRI 1,X < PROGRESSION DE L'INDEX CARTE.
XR X,Y
SLRS 6 < A=OCTET SIGNIFICATIF.
PSR X < SAVE LE NBRE DE COLONNES.
LX XCART < X=INDEX DE L'OCTET COURANT.
IC XCART < PREPARATION OCTET SUIVANT.
STBY &ANOM < ET RANGEMENT DE L'OCTET COURANT.
PLR X < RESTAURE LE NBRE DE COLONNES.
JDX E126 < VERS LA COLONNE SUIVANTE.
JMP E123 < VERS LA LECTURE DE LA CARTE
< SUIVANTE.
E501: EQU $ < CAS DES FINS DE DECK.
LA XCART < A=INDEX OCTET COURANT=NBRE
< D'OCTETS REELLEMENT OCCUPES
< PAR VALEUR+NOM.
RESTOR: EQU $ < ENTRY POUR MODIFY.
STA SGN+2 < QUE L'ON MET EN COMPTE D'OCTETS
< DE LA DEMANDE AU SGN.
ADRI 1,A < CALCUL DE LA LONGUEUR A RAZER.
SLRS 1
STA XNOM
<
< EDITION DU NOM DE LA VALEUR :
<
LAD DNOM
SVC 0 < EDITION DU MESSAGE 'NOM>'.
LAD DEMOUT
SVC 0 < EDITION DU NOM.
<
< RESTAURATION SGN DE LA VALEUR :
<
LAI '04
E356: EQU $ < ENTRY DE DELETE VALEUR.
STBY SGN < MISE EN PLACE D'UN NVP DE STORE.
LAD SGN
SVC 0 < APPEL DU SGN POUR CREER LA
< VALEUR SOUS LE NOM.
JE GOGE < OK , BONNE GEBERATION.
<
< T R A I T E M E N T D E S E R R E U R S :
<
ERREUR: EQU $
LAD DEMERR
SVC 0 < ENVOI D'UN MESSAGE D'ERREU.
JMP GOGE < VERS LE RETOU A GE.
PAGE
<
<
< A C C E S A U N N O M - V A L E U R :
<
<
< FONCTION :
< PERMET L'ENTREE D'UN NOM, LA
< LECTURE DE LA VALEUR CORRESPONDANTE
< SOUS SGN (AVEC CLEAR DU BUFFER
< PREPARE) , ET RECUPERATION DU
< NBRE D'OCTETS TOTAL.
<
<
GETNOM: EQU $
<
< NETTOYAGE PREALABLE DU NOM :
<
LXI LNOM < X=NBRE DE MOTS A RAZER.
E101: EQU $
STZ &ANOM1 < RAZ.
JDX E101
<
< MISE D'UN EOT EN FIN DE NOM PAR PRECAUTION.
<
LXI LNOM*2-1
LAI '04
STBY &ANOM
<
< ACCES AU NOM DE LA VALEUR :
<
LAD DNOM
SVC 0 < ENVOI D'UNE INVITATION.
LAD DEMNOM
SVC 0 < ENTREE DU NOM DE LA VALEUR.
<
< ACCES SGN A LA VALEUR DU NOM :
<
LAI '05
STBY SGN < MISE EN PLACE D'UN NVP DE LOAD
< SOUS L'<ACN>.
LAI 2*LNOM+1 < ON LIT UN OCTET DE VALEUR.
STA SGN+2
LAD SGN
SVC 0 < APPEL DU SGN.
JNE NOMERR < ERREUR : LE NOM EST SOIT IMPROPRE
< SOIT INCONNU.
<
< RECUPERATION DE L'OCCUPATION DE NOM+VALEUR :
<
WORD '1E35 < B=NBRE D'OCTETS REELLEMENT
< OCCUPES PAR LA VALEUR.
ADRI 2*LNOM,B < B=NBRE D'OCTETS REELLEMENT
< OCCUPES PAR NOM+VALEUR.
STB NOCT < ET SAVE DANS NOCT.
STB SGN+2 < MISE EN PLACE LONGUEUR NOM+VALEUR.
LR B,A < CALCUL DE LA LONGUEUR A RAZER.
ADRI 1,A
SLRS 1
STA XNOM
LR B,A < CALCUL DE LA MEMOIRE NECESSAIRE.
AD DEMNOM+1
ADRI '22,A
SLRS 12
ADRI 1,A
SLLS 12
STA DEMMEM+2
LAD DEMMEM
SVC 0 < DEMANDE MEMOIRE.
JNE NOMERR < ERREUR SI IMPOSSIBLE.
LAD SGN < CHARGEMENT COMPLET.
SVC 0
JNE NOMERR < ERREUR IMPOSSIBLE.
RSR
<
< ERREUR SUR LE NOM :
<
NOMERR: EQU $
ADRI -1,K < RATTRAPAGE DU BSR AGTNOM.
JMP ERREUR < ET ABORT...
PAGE
<
< B U F F E R S G N :
<
NOM: EQU $
XWOR%1: VAL NOM-ZERO*2
XWOR%A: EQU ZERO+XWOR%1
XWOR%1: VAL NOM-ZERO/256
XWOR%2: VAL XWOR%1='FA00
XWOR%B: EQU ZERO+XWOR%2
XWOR%2: VAL XWOR%1*256
XWOR%2: VAL NOM-ZERO-XWOR%2='FA00
XWOR%C: EQU ZERO+XWOR%2
VALEUR: EQU NOM+LNOM
XWOR%1: VAL VALEUR-ZERO/256
XWOR%2: VAL XWOR%1='FA00
XWOR%D: EQU ZERO+XWOR%2
XWOR%2: VAL XWOR%1*256
XWOR%2: VAL VALEUR-ZERO-XWOR%2='FA00
XWOR%E: EQU ZERO+XWOR%2
PAGE
<
<
< I M P L A N T A T I O N :
<
<
X12: EQU ZERO+PILE-LTNI-LTNI
X10: VAL X12-$
ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI MAUVAISE
< IMPLANTATION.
DZS X10+1
EOT #SIP GEN PROCESSEUR#
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.