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#