< S I S C M S 5 15 PAGE PAGE < < < D C T D U N I V E A U 1 : < < CALL #SISP CMS5 DOL1# DCTBOT: DZS XLPSTS #@ASCI " BOT" < #SISP CMS5 ASCI# PAGE < < < T A I L L E R E E L L E D E L A P A R T I E < E N M E M O I R E B A S S E D U S Y S T E M E : < < TOP: EQU $+YY7 < CETTE ADRESSE EST CALCULEE DE < FACON A POUVOIR L'ARRONDIR AU < MULTIPLE DE YY7 IMMEDIATEMENT < INFERIEUR A L'INITIALISATION < DU SYSTEME (POUR LA MISE A < JOUR DE LA TABLE D'ALLOCATION < MEMOIRE). PAGE < < < ' D C T ' D ' I N I T I A L I S A T I O N D E ' C M S 5 ' : < < LOCAL DCTINI: EQU $ PSTINI: WORD K;K;K;K;COM+DEPCS;DCTINI;HORINI;PILINI;SYSINI;SMST;SO;SE #@ASCI " INI" < #SISP CMS5 ASCI# < < ALLOCATION MEMOIRE REELLE : < ATOP: WORD TOP-E < ADRESSE MAX +1 OCCUPEE PAR CMS5, < CALCULEE DE FACON A TOMBER A UNE < FRONTIERE DE BUFFER AU SYSINI. XWOR%1: VAL MEMORY/YY7*UMEM < NOMBRE TOTAL DE BUFFERS CONTENUS DANS LA < MEMOIRE BASSE. XWOR%2: VAL YY7=K XWOR%2: VAL -XWOR%2 XWOR%3: VAL TOP-E-ZERO>XWOR%2 < NOMBRE DE BUFFERS BLOQUES PAR LE SYSTEME < LUI-MEME (MEMOIRE DEBANALISEE, 'DCT', < GRAMMAIRE DU 'CCI',...). XWOR%4: VAL XWOR%1-XWOR%3 < NOMBRE MAXIMAL ET THEORIQUE DE BUFFERS < DISPONIBLES EN MEMOIRE BASSE. XWOR%5: VAL L2K*NL2KB < LONGUEUR PAR DEFAUT EN MOTS DES BLOCS DE < 2K RESERVES A L'ALLOCATION DES BUFFERS. NTRN XWOR%6: VAL TOP-E-ZERO+XWOR%5+L2K-E/L2K*L2K TRN XWOR%7: VAL XWOR%6/L2K < NOMBRE DE BLOCS DE 2K DANS LESQUELS ON < PEUT ALLOUER DES BUFFERS (Y COMPRIS < CEUX QUI NE SONT PAS DISPONIBLES PUIS- < QU'OCCUPER PAR LE BAS DU SYSTEME...). XWOR%8: VAL K < INITIALISATION DU CUMUL... XWOR%2: VAL COSBT?L=FMASK(K=FCINST < POUR FORCER LE BIT DE GAUCHE... XWOR%9: VAL -BIT < ET POUR DECALER A DROITE D'UN BIT... DO XWOR%7 XWOR%8: VAL XWOR%8>XWOR%9?XWOR%2 XXLBM: EQU ZERO+XWOR%8 < GENERATION DE LA LISTE DES BLOCS DE 2K < RESERVES AUX BUFFERS (Y COMPRIS CEUX < DEJA BLOQUES PAR LE BAS DU SYSTEME...). XWOR%8: VAL XWOR%8)MMOT < ET ON COMPLEMENTE... IF OPMEM4?XWOR%8-OPMEM4,,XEIF%, IF ATTENTION : LE COMPLEMENT DE 'XXLBM' DOIT ETRE IF INCLUS DANS 'OPMEM4' POUR QUE L'ALLOCATTION MEMOIRE IF FONCTIONNE CORRECTEMENT !!! XEIF%: VAL ENDIF XXLNBM: EQU ZERO+XWOR%8 < GENERATION DE LA LISTE DES BLOCS DE 2K < INACCESSIBLES A L'ALLOCATION DES BUFFERS < ET CECI POUR EVITER DES INTERBLOCAGES... < < INITIALISATION DE LA RACINE DE L'ARBRE DU SYSTEME : < ACALLW: WORD CALLW < APPEL DE CHAND AVEC SIMULATION < D'ATTENTE DE FIN DE SERVICE. <******************************************************************************* ACSYS: BYTE SPLUS;XK1;XK2;XK3;XK4;EON;EON;K XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LACSYS:: VAL $-ACSYS*NOCMO+XWOR%1 IF LACSYS-XXSGN4,,XEIF%, IF ATTENTION : L'INSERTION DE L'<ACN> 'SYS' EST MAUVAISE !!! XEIF%: VAL ENDIF <******************************************************************************* ACSEC: BYTE SPLUS;XKSECE;XK2;XK3;XK4;EON;EON;K XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LACSEC:: VAL $-ACSEC*NOCMO+XWOR%1 IF LACSEC-XXSGN4,,XEIF%, IF ATTENTION : L'INSERTION DE L'<ACN> 'SECRET' EST MAUVAISE !! XEIF%: VAL ENDIF <******************************************************************************* ACEAO: BYTE SPLUS;KDP;KE;KA;KO;EON;EON;K XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LACEAO:: VAL $-ACEAO*NOCMO+XWOR%1 IF LACEAO-XXSGN4,,XEIF%, IF ATTENTION : L'INSERTION DE L'<ACN> 'EAO' EST MAUVAISE !!! XEIF%: VAL ENDIF <******************************************************************************* ACUSE: BYTE SPLUS;KDP;KU;KS;KE;EON;EON;K XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LACUSE:: VAL $-ACUSE*NOCMO+XWOR%1 IF LACUSE-XXSGN4,,XEIF%, IF ATTENTION : L'INSERTION DE L'<ACN> 'USE' EST MAUVAISE !!! XEIF%: VAL ENDIF <******************************************************************************* ACJFC: BYTE SPLUS;XXK1;XXK2;XXK3;XXK4;EON;EON;K XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LACJFC:: VAL $-ACJFC*NOCMO+XWOR%1 IF LACJFC-XXSGN4,,XEIF%, IF ATTENTION : L'INSERTION DE L'<ACN> 'JFC' EST MAUVAISE !!! XEIF%: VAL ENDIF <******************************************************************************* ACSIM: BYTE SPLUS;XXXK1;XXXK2;XXXK3;XXXK4;EON;EON;K XWOR%1: VAL '000000000@@=FCSIGN-SIGNP <******************************************************************************* LACSIM:: VAL $-ACSIM*NOCMO+XWOR%1 IF LACSIM-XXSGN4,,XEIF%, IF ATTENTION : L'INSERTION DE L'<ACN> 'SIM' EST MAUVAISE !!! XEIF%: VAL ENDIF DEMSYS: BYTE NSPTRI;K < INSERTION DE L'ACN DU SYSTEME. WORD FGID < FONCTION INSERT/DELETE. WORD ACSYS-ZERO*NOCMO < :SYS WORD XXSGN4 < 7 CARACTERES +:SYS<EON><EON>. DZS LDEM0+DEMSYS-$ DEMSEC: BYTE NSPTRI;K < INSERTION DE L'ACN DU SECTEME. WORD FGID < FONCTION INSERT/DELETE. WORD ACSEC-ZERO*NOCMO < <SPACE>SYS WORD XXSGN4 < 7 CARACTERES +<SPACE>SYS<EON><EON>. DZS LDEM0+DEMSEC-$ DEMEAO: BYTE NSPTRI;K < INSERTION DE L'ACN DE SODOME. WORD FGID < FONCTION INSERT/DELETE. WORD ACEAO-ZERO*NOCMO < :EAO WORD XXSGN4 < 7 CARACTERES +:EAO<EON><EON>. DZS LDEM0+DEMEAO-$ DEMUSE: BYTE NSPTRI;K < INSERTION DE L'ACN DE TRAVAIL. WORD FGID < FONCTION INSERT/DELETE. WORD ACUSE-ZERO*NOCMO < :USE. WORD XXSGN4 < 7 CARACTERES +:USE<EON><EON>. DZS LDEM0+DEMUSE-$ DEMJFC: BYTE NSPTRI;K < INSERTION DE MON <ACN>... WORD FGID < FONCTION INSERT/DELETE. WORD ACJFC-ZERO*NOCMO < :JFC. WORD XXSGN4 < 7 CARACTERES +:JFC<EON><EON>. DZS LDEM0+DEMJFC-$ DEMSIM: BYTE NSPTRI;K < INSERTION DE L'ACN DE SIMULATION. WORD FGID < FONCTION INSERT/DELETE. WORD ACSIM-ZERO*NOCMO WORD XXSGN4 < 7 CARACTERES +:SIM<EON><EON>. DZS LDEM0+DEMSIM-$ NLS < < POUR MODIFIER EVENTUELLEMENT L'ACCES < AU TOM ED ESSAP DE ":SYS" : < AAN335: WORD AN335 < NOEUD D'ACCES AU TOM ED ESSAP, AN337X: WORD N337X < NOEUD DE MEMORISATION DE L'APPEL SOUS < LE NUMERO DE COMPTE ":SYS", QUI PRECEDE < L'INTERROGATION GENERALE... LST < < DONNEES DE RESTAURATION DU SYSTEME : < DCOPY1: BYTE NSPDKF;XDSYM?XTYPAD < DEMANDE DE RESTAURATION : WORD FGR < LECTURE. WORD BCOPY WORD LCOPY2 WORD SCOPY1 < PREMIERE ZONE DE 'COPY'. DZS LDEM0+DCOPY1-$ DCOPYV: BYTE NSPDKF;XDSYM?XTYPAD < DEMANDE DE VALIDATION : WORD FGR < LECTURE. WORD BCOPY WORD LCOPY2 WORD SCOPY2 < DEUXIEME ZONE DE 'COPY'. DZS LDEM0+DCOPYV-$ ACKCOP: WORD CKCOP < VALIDATION DU CHECKSUM DE LA COPY. < < DONNEES DE RATTRAPAGE DE FICHIERS < RESTES OUVERTS LORS DE L'ARRET < DU SYSTEME PRECEDENT (IL S'AGIT < ALORS D'UN PLANTAGE...) : < DRFILE: BYTE NSPDKB;XDSYM < ACCES A UN SECTEUR OU A UN Q-SECTEUR : WORD K < FONCTION (LECTURE/ECRITURE), WORD BRFIL2 < ADRESSE OCTET DU BUFFER, WORD YY8 < LONGUEUR OCTETS (YY8 OU YY8Q SUIVANT...), WORD NILS < ADRESSE DU SECTEUR... DZS LDEM0+DRFILE-$ ABRFIL: WORD BRFIL < RELAI D'ACCES AU PREMIER MOT DU BUFFER, ABRFIM: WORD BRFIL+DEPILE < RELAI D'ACCES AU MOT SUIVANT (ON UTILISE < 'DEPILE', CAR EN EFFET LORS DE 'CLOSK' < LE BUFFER EST LA PILE COURANTE ET EST < INITIALISE PAR DES 'PSR'...). < < RELAIS DIVERS : < <******************************************************************************* AGIDLE: WORD GIDLE FC7FFF: WORD '0000000@@@@ < AFIN DE CONNAITRE LA VALEUR QUI SERA < GENERE PAR L'ASSEMBLEUR POUR LES DEBUTS < DE LISTE DES BLOCS "ROM"-"RAM"... <******************************************************************************* < < DONNEES DE GENERATION DE LA TABLE "PRIME" < DE VIRTUALISATION DE 'DKM' : < BTVDKM: WORD TVDKM,X < ACCES A LA TABLE DE VIRTUALISATION < DU DISQUE 'DKM'... < < DONNEES NECESSAIRES A LA TENTATIVE DE < RESTITUTION DES SECTEURS HS DE 'DKM' : < BINIRL: WORD NILS < ADRESSE DU SECTEUR 'DKM' COURANT. IKQSHS: WORD KQSHS < RELAI VERS LE COMPTEUR DES SECTEURS HS. DINIRL: BYTE NSPREL;K < DEMANDE DE RELEASE DES SECTEURS 'HS'. WORD K WORD BINIRL < ADRESSE MOT DU BUFFER DE L'ADRESSE... WORD W < ON LES REND UN A UN... DZS LDEM0+DINIRL-$ PQSHSP: DZS XQSHS < PILE DESTINEE A DUPLIQUER 'PQSHS'. < < DONNEES DE GENERATION SYSTEMATIQUE DU NOYAU DE BOOTSTRAP : < DEMBOT: BYTE NSPDKF;XDSYM?XTYPAD WORD FGW < GENERATION=ECRITURE... WORD DBN00 WORD LDBN02 WORD XSBOOT < IMPLANTATION DU BOOTSTRAP... DZS LDEM0+DEMBOT-$ IF XSBOOT-K,,XEIF%, IF ATTENTION : CA VA MERDER !!! XEIF%: VAL ENDIF PAGE < < < B U F F E R D E R A T T R A P A G E < D E S F I C H I E R S O U V E R T S : < < BRFIL: EQU $ XWOR%2: VAL BRFIL-ZERO*NOCMO BRFIL2: EQU ZERO+XWOR%2 < POUR UNE REFERENCE EN AVANT... DZS YY7Q < (MAIS ON N'EN UTILISE QUE 'YY7' LORSQU'ON < LIT LES MORCEAUX DE LISTE DE CLEFS...) PAGE < < < I N I T I A L I S A T I O N : < < < FONCTION : < CETTE TACHE TRES SPECIALE EST < ARMEE PAR LE BOOTSTRAP. ELLE INI- < TIALISE EN GENERAL LES TABLES DU < SYSTEME A PARTIR D'UNE COPY, PUIS < INITIALISE L'HORLOGE ET L'IDLE... < DE PLUS EN FONCTION DE L'ETAT < REEL DES DISQUES DU SYSTEME, IL < MET A JOUR LEUR ALLOCATION, ET < PREPARE LA SIMULATION DES DISQUES < ABSENTS (OU HS)... < < < FONCTION DES CLEFS DU PUPITRE : < CLEF14=0 : NE PAS INITIALISER LA RACINE < DE L'ARBRE DU SYSTEME. < CLEF15=1 : NE PAS INITIALISER L'ARBRE < DU SYSTEME (RACINE), ET < DE PLUS RAZER TOSA1 ET TOSA2. < CLEF2 DOIT TOUJOURS ETRE A 1 ('DKM' PRESENT), < CLEF3=1 : 'DKF' PRESENT, < 0 : 'DKF' ABSENT SERA SIMULE SUR 'DKM'. < < SOIT : < 10 = ENTRY NEW SYSTEM, < 11 = ENTRY OLD SYSTEM. < < < A T T E N T I O N : < SI LES CLEFS SONT TOUTES RENTREES A < '0000, LE SYSTEME INITIALISE AUTOMA- < TIQUEMENT 'ETASYS' ET 'MEMV' AVEC LES < VALEURS LES PLUS PROBABLES... < < PROG USE L,DCTINI USE W,DEM0 SYSINI: EQU $ < < < G E N E R A T I O N D E S C H E C K - S U M S < D E S B L O C S " R O M " - " R A M " : < < PSR L < SAUVEGARDE DE LA BASE 'L' DU 'SYSINI'... LR L,Y < ET MISE DANS 'Y' POUR PERMETTRE L'ACCES < AU LIMITEUR DE FIN 'FC7FFF'... LRM W WORD CHAIN1 < (W)=ADRESSE DU PREMIER BLOC. GIDLY1: EQU $ LAI K < (A)=CUMUL DU CHECK-SUM, LR W,L < (L)=SAUVEGARDE DU BLOC COURANT, LB CHAINA,W < (B)=ADRESSE DU BLOC PRECEDENT. GIDLY2: EQU $ EOR O,W < CALCUL DU CHEK-SUM DU BLOC "RAM", ADRI -D,W < PASSAGE AU MOT PRECEDENT, CPR B,W < TOMBE-T'ON SUR LE BLOC PRECEDENT ??? JNE GIDLY2 < NON... STA CHAINX,L < OUI, ON MEMORISE LE CHECK-SUM DU BLOC < COURANT... LA CHAINA,W < AFIN DE SAUTER LE BLOC "RAM" QUI DOIT < PRECEDER... LR W,L < ET SAUVEGARDE DU 'W' ANTERIEUR... LR A,W < (W)=AINSI, 'W' BASE LE BLOC "ROM" PRE- < CEDENT, S'IL EXISTE... XR Y,L < RETABLISSEMENT TEMPORAIRE DE 'L'... CP FC7FFF < EST-ON ARRIVE EN DEBUT DE CHAINE ??? XR Y,L JNE GIDLY1 < NON, ALLONS CALCULER LA CHECK-SUM < DU BLOC "ROM" COURANT, LA INFINI < OUI : STA CHAINA,L < ON CHANGE L'INDICATEUR DE FIN DE CHAINE, < AFIN D'ETRE HOMOGENE... PLR L < ET RESTAURE 'L'... < < < I N I T I A L I S A T I O N ' E T A S Y S ' E T ' M E M V ' : < < SYSINJ: EQU $ LX ETASYS < SAUVEGARDE DANS X DE 'ETASYS', AU CAS < OU LA SEQUENCE DE BALAYAGE DE LA MEMOIRE < AURAIT DETECTEE L'ABSENCE DE LA MEMOIRE < DE LA TELEVISION NUMERIQUE... BSR ASMPUI < LECTURE DU PUPITRE DANS 'A' < DE ETAT DU PUPITRE DANS 'B' < ET CARY=INFORMATION VALIDE (1). JNC SYSINJ < INFORMATION NON VALIDE, RELECTURE STA ETASYS < SAUVEGARDE DES CLEFS (MODALITES DE < L'INITIALISATION) DANS ETASYS. JANE Z998XX < PUPITRE DIFFERENT DE '0000... XWOR%1: VAL NSPDKU-NSPDK?COSBT=FMASK(K=FCINST XWOR%1: VAL NSPDKM-NSPDK?COSBT=FMASK(K?XWOR%1=FCINST XWOR%1: VAL NSPDKF-NSPDK?COSBT=FMASK(K?XWOR%1=FCINST XWOR%1: VAL XXRACK?TVEXIS=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?BRCDKF=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?OTODLN=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?OTOCFM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?OTOCOP=FMASK(K?XWOR%1=FCINST XWOR%2: VAL MKCOP=K XWOR%3: VAL BIT>XWOR%2-N)MFFFF XWOR%4: VAL MKCOP)MFFFF(XWOR%3 XWOR%5: VAL XWOR%4=K XWOR%6: VAL NBITMO-XWOR%5 XWOR%6: VAL -XWOR%6 XWOR%7: VAL Q8000>XWOR%6(MKCOP < CADRAGE DE 'Q8000' SUIVANT 'MKCOP'. XWOR%1: VAL XWOR%1?XWOR%7 < CONSTANTE DE COPY... XWOR%1: VAL COSBT?XETAIR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?XETAIA=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?RECON=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?QSHS=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?BTRYDK=FMASK(K?XWOR%1=FCINST < VALEUR INITIALE DE 'ETASYS'. XWOR%2: VAL COSBT?MEMVO=FMASK(K=FCINST XWOR%2: VAL COSBT?MEMVN=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?MEMVF=FMASK(K?XWOR%2=FCINST XWOR%2: VAL CORBT?XSYNC0=FMASK(K?XWOR%2=FCINST XWOR%2: VAL CORBT?MEMXXX=FMASK(K?XWOR%2=FCINST XWOR%2: VAL CORBT?XXXJFC=FMASK(K?XWOR%2=FCINST XWOR%2: VAL CORBT?XBTOVI=FMASK(K?XWOR%2=FCINST XWOR%2: VAL CORBT?YBTOVI=FMASK(K?XWOR%2=FCINST < VALEUR INITIALE DE 'MEMV'. LRM A,B ITASYS: EQU $ WORD XWOR%1 < FUTUR 'ETASYS', BYTE XMAXIO+I;XWOR%2 < FUTUR 'MEMV'. STB MEMV < MISE EN PLACE DE 'MEMV'... LR X,B < (B)='ETASYS' AVANT SA GENERATION, TBT NBITMO+TVEXIS < LA MEMOIRE DE LA TELEVISION EST-ELLE LA ? JC Z998YX < OUI, APPAREMMENT... RBT TVEXIS < NON, ON SUPPRIME 'TVEXIS' DANS < 'ETASYS' DEFINITIF... Z998YX: EQU $ STA ETASYS < MISE EN PLACE DE 'ETASYS'... JMP Z998XY < ET VERS LE RECOVERY... Z998XX: EQU $ TBT NSPDKM-NSPDK < A-T'ON INDIQUE 'DKM' ??? JNC SYSINJ < NON, ON REDEMANDE... BSR ASMPUO < AFFICHE Z998X: EQU $ BSR ASMPUI < D'ACCORD? < CARY=INFORMATION VALIDE (1). JNC Z998X JANE SYSINJ < NON Z998XY: EQU $ < < < E S P A C E M E M O I R E R E E L : < < LA ATOP < (A)=NBRE DE MOTS +1 OCCUPES PAR < SYSTEME, ET ARRONDI AU MULTIPLE < DE YY7 IMMEDIATEMENT SUPERIEUR. SLRS YY7=K < (A)=NBRE DE BUFFERS DE YY7 MOTS < OCCUPES PAR LE SYSTEME, ET DONC < A RETIRER A L'ALLOCATION MEMOIRE. LR A,X LYI FONRB0 < FONCTION RESET BIT A 0. LAD ATOM < RELAI VERS LA TABLE D'ALLOCATION < MEMOIRE A ADRESSAGE MOT. E727: EQU $ ADRI -I,X CPZR X JL E726 < OK, FINI... BSR ATMOBT < LES BUFFERS OCCUPES PAR LE < SYSTEME SONT RECUPERES 1 A 1. JMP E727 < AU SUIVANT. < < VALIDATION DES ESPACES MEMOIRE : < CES VALIDATIONS APPARTIENNENT < NORMALEMENT A 'SVCMEM', MAIS < MALHEUREUSEMENT 'XXLBM' Y EST < ENCORE INCONNU...) < XWOR%6: VAL LK*NOCMO=K < LK*NOCMO EST LA TAILLE OCTET MINIMALE < DISPONIBLE POUR L'UTILISATEUR. XWOR%3: VAL UMEM2K*LK*NOCMO=K XWOR%3: VAL -XWOR%3 < POUR UN DECALAGE A DROITE... XWOR%4: VAL MXMEME>XWOR%3 < NOMBRE MAX DE UMEM2K-BLOCS ALLOUABLES < A UN UTILISATEUR... XWOR%1: VAL XXLBM-ZERO XWOR%1: VAL XWOR%1)MMOT < LISTE DES UMEM2K-BLOCS ALLOUABLES, XWOR%5: VAL K < ET INITIALISATION DE LEUR CUMUL. XWOR%2: VAL BIT>NBITCX-BIT < MASQUE D'UN CHIFFRE HEXA-DECIMAL. DO NBITMO XWOR%1: VAL XWOR%1=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%2+CORBT=FMASK+XWOR%1=FCINST DO NBITMO XWOR%5: VAL K=FCPULL-NBITMO=FCSIGN+XWOR%5 XWOR%5: VAL -XWOR%5 IF XWOR%5-XWOR%4,,,XEIF% IF ATTENTION : LE PLUS GRAND ESPACE POSSIBLE DES IF UTILISATEURS NE POURRA JAMAIS ETRE ALLOUE !!! XEIF%: VAL ENDIF XWOR%7: VAL COSCLS+NBITMO-B-XWOR%6=FMASK(K?MXMEME=FCINST XWOR%8: VAL OPMEM4 XWOR%9: VAL BIT>NBITCX-BIT < MASQUE D'UN CHIFFRE HEXA-DECIMAL. DO NBITMO XWOR%8: VAL XWOR%8=K=FCPUSH-NBITMO+B)MMOT+N(XWOR%9+CORBT=FMASK+XWOR%8=FCINST XWOR%8: VAL K < INITIALISATION DU COMPTAGE... DO NBITMO XWOR%8: VAL K=FCPULL-NBITMO=FCSIGN+XWOR%8 XWOR%8: VAL -XWOR%8 < NOMBRE DE BITS A 1 DANS 'OPMEM4'... IF XWOR%7-XWOR%8,XEIF%,XEIF%, IF ATTENTION : LA LISTE DES BLOCS DE 2K UTILISEE IF PAR 'AL4'/'RL4' N'EST PAS COMPATIBLE AVEC LES IF DEMANDES POTENTIELLES DES UTILISATEURS !!! XEIF%: VAL ENDIF IF XWOR%5-XWOR%8,XEIF%,XEIF%, IF ATTENTION : 'OPMEM4' NE SUFFIT PAS POUR CORRESPONDRE IF AVEC LES BLOCS DE 2K ALLOUABLES !!! XEIF%: VAL ENDIF <******************************************************************************* E727X1: CPI XWOR%7 < POUR VALIDER LE 'COESC' DE 'SVCMEM'... XWOR%7: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* CPIMEM: EQU ZERO+XWOR%7 < DEFINITION D'UNE INSTRUCTION EN AVANT < POUR LE 'SVCMEM'... $EQU E727X1 < ET ANNULATION DU CODE GENERE... < < FIN DU CALCUL DE L'ESPACE MEMOIRE REEL : < E726: EQU $ < < < L A N C E M E N T D U S Y S T E M E : < < SYSRUN: EQU $ < < ARMEMENT DE LA TACHE SOFT INEXISTANTE : < ARM NSNSP0+NSPTSI < HDLTSI SE MET EN ATTENTE D'UN < APPEL DE TACHE SOFT INEXISTANTE. < < ARMEMENT DU RUNNER DES ESCLAVES : < ARM NSNSP0+NSPRUN < < ARMEMENT DE LA TACHE DE TRAITEMENT DES SVC ESCLAVES : < ARM NSNSP0+NSPSVC < < ARMEMENT DE END-JOB : < ARM NSNSP0+NSPEJ < < ARMEMENT DU RELEASEUR DES CLEFS D'UN FICHIER DELETE : < ARM NSNSP0+NSPRCF < LA TACHE HDLRCF PREND LA MAIN, < MAIS NE VA PAS TARDER A LA < RENDRE, CAR IL N'Y A ENCORE < AUCUN FICHIER A DELETER. < < TRANSFERT DE LA ZONE DE SIMULATION DE 'DKF' < SUR 'DKM' AU MILIEU DE 'DKM' : < NOTA : CECI EST FAIT SYSTEMATIQUEMENT < AFIN QUE SI L'ON DESIRE RELIRE LA COPY < LES ADRESSES SOIENT BONNES ( A MOINS < QUE DES MODIFICATIONS SOIENT A APPORTER < A LA TABLE DE VIRTUALISATION DE 'DKM' < PAR LE 'BSR ASYSER'... < XWOR%1: VAL IJIJDX < NUMERO DU 'GB0', XWOR%2: VAL NBGB-XWOR%1/XXXMOY < NUMERO APPROXIMATIF DU 'GB' CENTRAL, XWOR%3: VAL NBSPGB*QUANTA < NOMBRE DE SECTEURS PHYSIQUES PAR 'GB', XWOR%4: VAL XDKMSP*XDKMPC*CAXCYL < NOMBRE DE SECTEURS PHYSIQUES PAR < GROUPE DE CYLINDRES. NTRN XWOR%5: VAL XWOR%3+XWOR%4-E/XWOR%4 TRN < NOMBRE PAR EXCES DE GROUPES DE CYLINDRES < PAR 'GB'. XWOR%6: VAL XWOR%1-IJIJDX*XWOR%5 XWOR%7: VAL XWOR%2-IJIJDX*XWOR%5 LXI XWOR%5 < (X)=NOMBRE D'ECHANGES A FAIRE, LYI XWOR%6 < (Y)=INDEX DU 'GB0', LBI XWOR%7 < (B)=INDEX DU 'GB' CENTRAL. GIDLF1: EQU $ XR X,Y LBY &BTVDKM < ACCES A UN GROUPE DU 'GB0', XR X,B LR A,W < (W)=SAUVEGARDE D'UN GROUPE DU 'GB0', LBY &BTVDKM < ACCES A UN GROUPE DU 'GB' CENTRAL, XR A,W STBY &BTVDKM < ET ECHANGE, LR W,A < (A)=GROUPE DU 'GB' CENTRAL, ADRI I,X XR X,B STBY &BTVDKM < GENERATION D'UN GROUPE DE 'GB0'. ADRI I,X XR X,Y JDX GIDLF1 < AU GROUPE SUIVANT... NLS < < INVERSION DE LA TABLE DE < VIRTUALISATION DE 'DKM' < AFIN D'EMPECHER UNE RE- < LECTURE STRUCTUREE (C'EST-A < DIRE EN UTILISANT LES CHAINAGES < LOGIQUES COMME DES ADRESSES < PHYSIQUES : < LXI GAXCYL < (X)=NOMBRE DE BLOCS DE VIRTUALISATION, GIDM1: EQU $ ADRI -I,X < AU BLOC PRECEDENT, LBY &BTVDKM < (A)=BLOC COURANT, PSR A < QUE L'ON EMPILE DANS UN SENS... CPZR X JG GIDM1 < AU PRECEDENT... LXI GAXCYL < (X)=NOMBRE DE BLOCS DE VIRTUALISATION, GIDM2: EQU $ ADRI -I,X < AU BLOC PRECEDENT, PLR A < ET ON DEPILE A L'ENVERS, STBY &BTVDKM < ET ON INVERSE DONC 'TVDKM'... CPZR X JG GIDM2 < AU PRECEDENT... LST < < PATCH MANUEL DE 'TVDKM' : < BSR ASYSER < POUR PATCHER EVENTUELLEMENT LA < TABLE DE VIRTUALISATION DE 'DKM'... < < < I N I T I A L I S A T I O N D E L ' A R B R E : < < LA ETASYS < RECUPERATION DES L'ETAT DU < SYSTEME, CORRESPONDANT EN < PARTIE AUX CLEFS LUES AU < PUPITRE. TBT XETAIR < FAUT-IL INITIALISER LA RACINE < DU SYSTEME ??? JNC GIDLE < NON, RIEN DU TOUT... TBT XETAIA < FAUT-IL INITIALISER L'ARBRE JC NTRINI < NON PAS DE RACINE, ET DE PLUS, < ALLONS FAIRE LA REINITIALISATION... JMP $ < ON N'EST JAMAIS ASSEZ PRUDENT... < GRACE A CE 'JMP''$', ON PEUT ENCORE < CHANGER D'AVIS, ET RECHARGER LE SYS- < TEME AVEC LA COPY ANTERIEURE EN LE < RE-BOOTSTRAPANT... NLS < < DANS LE CAS D'UNE INITIALISATION < GENERALE, ON VA AUTORISER L'ACCES < A ":SYS" SANS TOM ED ESSAP POUR < LE PREMIER LOGIN, AFIN DE PERMETTRE < LE DEMARRAGE SI JE NE SUIS PAS LA... < LA AN337X STA &AAN335 < ET VOILA LE TRAVAIL ??!?!?! LST < < INITIALISATION DE LA RACINE PAR (:SYS,:EAO,:USE,:JFC) : < LAD DEMSYS LR A,W BSR ACALLW < INSERTION DE L'ACN DU SYSTEME. ADRI DEMSEC-DEMSYS,W BSR ACALLW < INSERTION DE L'ACN SECRET (!!!). ADRI DEMEAO-DEMSEC,W BSR ACALLW < INSERTION DE L'ACN DE 'SMC'... ADRI DEMUSE-DEMEAO,W BSR ACALLW < INSERTION D'UN ACN DE TRAVAIL. ADRI DEMJFC-DEMUSE,W BSR ACALLW < INSERTION DE MON <ACN>... ADRI DEMSIM-DEMJFC,W BSR ACALLW < INSERTION DE L'ACN DE SIMULATION. < < < I N I T I A L I S A T I O N D E L A < T E L E V I S I O N N U M E R I Q U E : < < < NOTA : < BIEN QUE CELA SOIT FAIT DANS LE < RESTART, ON LE FAIT DE NOUVEAU AUSSI, < EN EFFET : < 1 - DANS LE RESTART, LA REINITIALISATION < SERA UTILE A LA SUITE D'UN DEFAUT SECTEUR; < 2 - DANS LE SYSINI, C'EST A LA SUITE < D'UN RECHARGEMENT DU SYSTEME; IL FAUT DONC < ATTENDRE QUE LA COPIE AIT ETE RESTAUREE... < < GIDLE: EQU $ LRM A,B WORD GOCOL < (A)=ADRESSE DU MODULE D'INITIALISATION, WORD RETCOM < (B)=ADRESSE DE RETOUR DU MODULE... PSR A RSR < 'GOTO' VERS 'GOCOL' POUR FAIRE COMME < DANS LE 'RESTART'... RETCOM: EQU $ BSR ASYSER < E N T R E E D E L A D A T E E T < D ' E V E N T U E L S P A T C H E S... < < COMPTABILISATION, ET VALIDATION < DE L'ESPACE DISQUE DISPONIBLE : < LBI K < (B)=VALEUR INITIALE DU CUMUL, LXI NBGB < (X)=INDEX COURANT DES 'GB'. GIDLE3: EQU $ LA &ANSLGB < (A)=OCCUPATION DU 'GB'(X), JALE GIDLE4 < IL EST VIDE (A=K), OU BIEN INACCESSIBLE < (XXINGB=1) A L'ALLOCATION. IF XXINGB-BITSIG,,XEIF%, IF ATTENTION : LE TEST PRECEDENT EST MAUVAIS !!! XEIF%: VAL ENDIF ADR A,B < CUMUL DU 'GB' COURANT S'IL EST UTILISABLE GIDLE4: EQU $ JDX GIDLE3 < AU 'GB' PRECEDENT... LR B,A < (A)=NOMBRE DE Q-SECTEURS DISPONIBLES < REELLEMENT POUR L'ALLOCATION, JAE $ < 2 POSSIBILITES : < 1- L'ESPACE DISQUE EST ENTIEREMENT < ALLOUE, < 2- LE CUMUL NE TIENT PAS SUR 16 BITS, < VOIR ALORS "MANUELLEMENT" LA < TABLE 'NSLGB'... CP NSL < EST-IL EGAL AU NOMBRE DE Q-SECTEURS < THEORIQUEMENT LIBRES ??? JNE $ < NON : CE N'EST PAS FORCEMENT UNE ERREUR < DU SYSTEME, EN EFFET ON A PU RENTRER < DES PATCHES INHIBANT DES 'GB' POUR < SIMULER 'DKU' SUR 'DKM' PAR EXEMPLE... STA NSL < (A)=NOMBRE DE Q-SECTEURS REELLEMENT < DISPONIBLES. < < MISE A JOUR DE LA TABLE DE VIRTUALISATION < DE 'DKM' POUR LE BOOTSTRAP 'DKM' : < LRM A,B,X WORD TVDKM < (A)=EMETTEUR : TABLE DE VIRTUALISATION < DE 'HDLDKM' QUI VIENT D'ETRE EVENTUEL < LEMENT REINITIALISE PAR LA COPY.. WORD TVDKMP < (B)=RECEPTEUR DANS LE BOOTSTRAP 'DKM', NTRN WORD GAXCYL+NOCMO-E/NOCMO TRN < (X)=NOMBRE DE MOTS A DEPLACER... MOVE < ET VOILA... < < GENERATION SYSTEMATIQUE DU BOOTSTRAP : < LRM W WORD DEMBOT < (W)=ADRESSE DE LA DEMANDE DE GENERATION < DU NOYAU DE BOOT-STRAP, BSR ACALLW < QUE L'ON ENVOIE, AVEC ATTENTE... < < INITIALISATION DE L'HORLOGE : ON LE FAIT < APRES L'INITIALISATION DU SYSTEME, AFIN < DE NE PAS MODIFIER EVENTUELLEMENT LA ZONE < DE COPY DU SYSTEME... < LRM W WORD HORINI < (W)=ADRESSE D'INITIALISATION, BSR ACHAND < QUE L'ON ENVOIE A L'HORLOGE... < < ARMEMENT DU HANDLER MULTIPLEXEUR : < ARM NSNSP0+NSPMUL < CET ARMEMENT EST PLACE APRES < L'ENTREE DES NUMEROS DE COMPTE < AFIN D'EVITER DES PROBLEMES AU < NIVEAU DE L'ACCES A LA DCT DE < GESTION DE L'ABRE DU SYSTEME !!! < < < A R M E M E N T D E L ' I D L E : < < LRM W WORD BCOPY STZ SYNCOP,W < DEVERROUILLAGE DU BUFFER DE COPY A < L'USAGE DU PROCESSEUR ESCLAVE... ARM NSNSP0+NSPIDL < LA TACHE IDLE PREND LA MAIN. < PRIORITES ). JMP $ < JE VOUDRAIS BIEN SAVOIR QUAND EST-CE QUE < L'ON PASSERA ICI ?!???!!??!... < < < R E I N I T I A L I S A T I O N D U S Y S T E M E : < < NTRINI: EQU $ LAD DCOPY1 GIDLEB: EQU $ < POINT D'ITERATION DANS LE CAS D'UN < CHECKSUM MAUVAIS SUR UNE COPY. LR A,W < (W)=ADRESSE DE LA DEMANDE DE LECTURE 'DKF BSR ACALLW < ENVOI DE LA DEMANDE DE LECTURE AVEC < ATTENTE ACTIVE DE FIN DE SERVICE... PSR L LXI NSPSAV BSR ACADCT < RENVOIE : (L)=ADRESSE DE LA LISTE DES < RESTAURATIONS. LR L,W < (W)=ADRESSE DE LA LISTE DES RESTAURATIONS PLR L LRM Y WORD BCOPY < (Y)=ADRESSE DU BUFFER. PSR Y,W < SAUVEGARDE DE L'ADRESSE DU BUFFER DE < 'COPY' ('Y') ET DE L'ADRESSE DE LA < LISTE DES RESTAURATIONS ('W'). NTRINJ: EQU $ LA XCOPAD,W < (A)=ADRESSE DE L'ELEMENT COURANT. JAE GIDLE1 < C'EST LA FIN DE LISTE... LR A,B < (B)=ADRESSE DE L'ELEMENT COURANT. LR Y,A < (A)=ADRESSE COURANTE DU BUFFER. LX XCOPLO,W < (X)=NOMBRE DE MOTS A RESTAURER. CPZR X < EST-CE UNE INFORMATION A VALIDER ??? JGE GIDLE7 < OUI, (X)>=K... NGR X,X < NON, (X)<0... GIDLE7: EQU $ ADR X,Y < PREPARATION DE L'ADRESSE BUFFER SUIVANTE. MOVE < RESTAURATION... ADRI XLCOPY,W < PASSAGE A L'ELEMENT SUIVANT... JMP NTRINJ < < < T E S T D ' U N M A U V A I S A R R E T < D U S Y S T E M E P R E C E D E N T : < < GIDLE1: EQU $ < < VALIDATION DU CHEKSUM DE LA COPY : < BSR ACKCOP < CALCUL ET VALIDATION DU CHECKSUM... JE GIDLEA < OK, LE CHECKSUM EST OK... MAIS ATTENTION, < IL SE PEUT QUE CE SOIT LA DEUXIEME < COPY 'DCOPYV' QUE L'ON VIENNE DE VALIDER, < AUQUEL CAS LE TEST DE COHERENCE QUI < VA SUIVRE EST FORCEMENT POSITIF, PUIS- < QU'ON VA COMPARER LA DEUXIME COPY < AVEC ELLE-MEME !!! JMP $ < AVERTISSEMENT D'UNE MAUVAISE COPY !!! PLR Y,W < RATTRAPAGE DE LA PILE... LAD DCOPYV < POUR LIRE LA DEUXIEME COPY... JMP GIDLEB < VERS LA RESTAURATION A PARTIR DE < DEUXIEME COPY... GIDLEA: EQU $ < < VALIDATION MOT A MOT DE LA 'COPY' : CETTE < RESTAURATION EST FAITE MOT A MOT, ET NON < PAS GLOBALEMEMT, A L'AIDE D'UN DEUXIEME < BUFFER 'BCOPY', AFIN DE SAVOIR FACILEMENT < OU SE SITUENT LES DIFFERENCES : < (NOTA : RAPPELONS QU'IL EST POSSIBLE < QUE L'ON SOIT EN TRAIN DE COMPARER < LA DEUXIEME COPY AVEC ELLE-MEME...) < LAD DCOPYV LR A,W < (W)=ADRESSE DE LA DEMANDE DE VALIDATION, BSR ACALLW < ENVOI DE LA DEMANDE DE VALIDATION, AVEC < ATTENTE ACTIVE DE FIN DE SERVICE. BSR ACKCOP < CALCUL DU CHEKSUM, ET VALIDATION... JNE $ < AVERTISSEMENT D'UNE MAUVAISE COPY !!! PLR Y,W < RESTAURE : < (Y)=ADRESSE DU BUFFER DE VALIDATION, < (W)=ADRESSE DE LA LISTE DES ELEMENTS. PSR L NTRINK: EQU $ LA XCOPAD,W < (A)=ADRESSE DE L'ELEMENT COURANT, JAE GIDLE5 < C'EST FINI... LR A,L < (L)=ADRESSE DE L'ELEMENT COURANT, LX XCOPLO,W < (X)=NOMBRE DE MOTS LE COMPOSANTS. CPZR X < EST-CE UNE INFORMATION A VALIDER ??? JGE NTRINM < OUI, (X)>=K... SBR X,Y < OUI, (X)<0, DANS CES CONDITIONS, ON NE < VALIDE PAS, ET ON FAIT PROGRESSER 'Y' < SUR LE BLOC SUIVANT DE VALIDATION... JMP GIDLE8 < A LA VALIDATION SUIVANTE... NTRINM: EQU $ NTRINL: EQU $ XR Y,L LA O,L < (A)=VALEUR DE VALIDATION (DEUXIEME < ZONE DE 'COPY'), XR Y,L CP O,L < EST-ELLE EGALE A LA VALEUR RESTAUREE < (DEUXIEME ZONE DE 'COPY') ??? JNE $ < NON, INCOHERENCE, EN TOUT CAS : < (W)=ADRESSE DU DESCRIPTEUR DE L'ELEMENT < EN CAUSE, < (L)=BASE LE MOT COURANT DE L'ELEMENT < COURANT, < (A)=VALEUR DE VALIDATION DE CE DERNIER... JMP GIDLE6 < EN GENERAL... STA O,L < MAIS DE TEMPS EN TEMPS, ON CORRIGE < LA RESTAURATION... GIDLE6: EQU $ ADRI P,L < PASSAGE AU MOT SUIVANT DE L'ELEMENT < COURANT ('W'), ADRI P,Y < PASSAGE AU MOT SUIVANT DE VALIDATION... JDX NTRINL < AU MOT SUIVANT S'IL EXISTE... GIDLE8: EQU $ ADRI XLCOPY,W < NON, PASSONS A L'ELEMENT JMP NTRINK < SUIVANT ('W'), S'IL EXISTE... GIDLE5: EQU $ PLR L < < TEST DE FICHIERS 'SGF' OUVERTS : < LRM X,W WORD UDE*NMDE < (X)=NOMBRE DE MOTS OCCUPES PAR LES < DESCRIPTEURS D'ENREGISTREMENT 'SGF'. WORD TDE < (W)=ADRESSE DE CES DESCRIPTEURS... LAI K < CLEAR DU CUMUL... GIDLE2: EQU $ OR O,W < AFIN DE SAVOIR SI AU MOINS UN MOT < EST NON NUL... ADRI P,W < AU MOT SUIVANT, JDX GIDLE2 < S'IL EXISTE... JANE $ < ON SE BLOQUE SI (A)#0 : EN EFFET, CELA < SIGNIFIE QUE LE SYSTEME PRECEDENT A < ETE ARRETE ALORS QUE DES ENREGISTREMENTS < ETAIENT OUVERTS ; IL CONVIENT DONC DE < NOTER ICI (SUR UN MORCEAU DE PAPIER) < LES NOMS INTERNES DES FICHIERS EN CAUSE, < AINSI QUE LES TETES ET QUEUES DES < ENREGISTREMENTS POUR ESSAYER DE REPARER < MANUELLEMENT LES DOMMAGES... JAE GIDLF7 < OK, TOUS LES FICHIERS SONT FERMES... < < TENTATIVE DE RECUPERATION DES < FICHIERS MALHEUREUSEMENT OUVERTS : < LRM X,Y,W WORD NMDE < (X)=NOMBRE DE DESCRIPTEURS D'ENREGIS- < TREMENT, WORD DRFILE < (Y)=ADRESSE DE LA DEMANDE D'ACCES A LA < MEMOIRE VIRTUELLE, WORD TDE < (W)=ADRESSE DU PREMIER DESCRIPTEUR < D'ENREGISTREMENT. GIDLF9: EQU $ PSR X < SAVE LE DECOMPTAGE DES DESCRIPTEURS < D'ENREGISTREMENT... LAI K < CLEAR LE REGSITRE 'A', DO UDE OR K=FCDO,W < LE DESCRIPTEUR (W) EST-IL OCCUPE ??? JAE GIDLF2 < NON, AU SUIVANT... < < VALIDATION DU DESCRIPTEUR : < CPZ DEMO0,W < TETE DE L'ENREGISTREMENT : JE $ < PUIS ALLER EN 'GIDLF2'... CPZ DEMO1,W < QUEUE DE L'ENREGISTREMENT : JE $ < PUIS ALLER EN 'GIDLF2'... CPZ DENI,W < NOM INTERNE DU FICHIER : JLE $ < PUIS ALLER EN 'GIDLF2'... CPZ DEMO2,W < MAIS EN FAIT, EST-CE UN FICHIER 'OLD' < OU 'NEW' ??? JE GIDLF2 < LES FICHIERS 'NEW' SONT MALHEUREUSEMENT < IRRECUPERABLES !!! < < CAS OU ON A DECOUVERT UN DESCRIPTEUR < OCCUPE CORRESPONDANT A UN FICHIER OCCUPE : < LAI FGR < (A)=FONCTION DE LECTURE, LB DEMO2,W < (B)=ADRESSE DU SECTEUR DE LA LISTE DES < CLEFS CONTENANT LA CLEF COURANTE. XR Y,W < (Y)=ADRESSE DU DESCRIPTEUR COURANT, < (W)=ADRESSE DE LA DEMANDE D'ACCES 'DKB'. STA ARGDEM+OPDEM < MISE DE LA DEMANDE D'ACCES A 'DKB' EN STB ARGDEM+ASDEM < LECTURE DU SECTEUR (DEMO2). BSR ACALLW < ENVOI DE LA DEMANDE, ET ATTENTE... LR W,X < SAVE L'ADRESSE DE LA DEMANDE : < (X)=ADRESSE DE LA DEMANDE A 'DKB'. LRM W WORD BRFIL+XXSFL < (W)=ADRESSE DU PREMIER DESCRIPTEUR DE < CLEF DU SECTEUR (DEMO2). GIDLF3: EQU $ LA XXKE1,W < ACCES A LA 'PEK' : JAE GIDLF4 < CAS DE LA PREMIERE CLEF ("BIDON") D'UNE < LISTE SEQUENTIELLE... TBT BXKE0 < CETTE CLEF EST-ELLE LIBRE ??? JC GIDLF4 < OUI, A LA SUIVANTE... TBT BXKE1 < EST-ELLE EN DEBORDEMENT ??? JC GIDLF4 < OUI, A LA SUIVANTE... LA XXKE2,W < ACCES A LA 'PDK' : TBT BXKE4 < CETTE CLEF EST-ELLE "IN-USE" ??? JNC GIDLF4 < NON, ELLE EST "IDLE", A LA SUIVANTE... < < CAS OU ON A TROUVE LA CLEF "IN USE" : < RBT BXKE4 < ON LA MET "IDLE"... STA XXKE2,W XR Y,W < (Y)=ADRESSE DU DESCRIPTEUR DE LA CLEF < COURANTE DANS LA LISTE DE CLEFS, < (W)=ADRESSE DU DESCRIPTEUR DE L'EN- < REGISTREMENT ASSOCIE. LA DEMO0,W < (A)=ADRESSE DU PREMIER SECTEUR DE < L'ENREGISTREMENT, LB DEMO1,W < (B)=ADRESSE DU DERNIER... XR Y,W < (Y)=ADRESSE DU DESCRIPTEUR D'ENREGISTRE- < MENT, < (W)=ADRESSE DU DESCRIPTEUR DE LA CLEF. STA XXKE3,W < MISE A JOUR DE LA TETE DE L'ENREGISTRE- STB XXKE4,W < MENT ET DE SA QUEUE... LR X,W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE D'ACCES 'DKB' : LAI FGW STA ARGDEM+OPDEM < QUE L'ON MET EN ECRITURE, BSR ACALLW < ET ON REECRIT LE SECTEUR COURANT DE LA < LISTE DES CLEFS DE CE FICHIER. LR B,A < (A)=ADRESSE DU DERNIER SECTEUR DE < L'ENREGISTREMENT : CP INFINI < EXISTE-T'IL ??? JE GIDLF8 < NON, RIEN A FAIRE... STA ARGDEM+ASDEM < OUI, IL FAUT VERIFIER LA FIN DE CHAINE : LRM A WORD YY8Q STA ARGDEM+CODEM < ON VA MANIPULER 'YY8Q' OCTETS, LAI FGR STA ARGDEM+OPDEM < EN LES LISANT... BSR ACALLW < LECTURE DU SECTEUR (B) AVEC ATTENTE... LA INFINI STA &ABRFIL < ON MET L'INDICATEUR 'INFINI' DE FIN < DE CHAINE, LAI KEOF < ET L'INDICATEUR 'KEOF'... STA &ABRFIM STBY &ABRFIM < 2 FOIS... LAI FGW STA ARGDEM+OPDEM < MISE DE LA DEMANDE EN ECRITURE, BSR ACALLW < QUE L'ON ENVOIE... AVEC ATTENTE... LRM A WORD YY8 STA ARGDEM+CODEM < ET ON RESTAURE 'YY8'... GIDLF8: EQU $ < < FERMETURE DU FICHIER : < XR Y,W < (W)=ADRESSE DU DESCRIPTEUR D'ENREGIS- < TREMENT, < (Y)=ADRESSE DE LA DEMANDE 'DKB'... LX DENI,W < (X)=NOM INTERNE DU FICHIER... CPZR X < VALIDATION ??? JLE $ < E R R E U R S Y S T E M E... LAI MCFS BSR AMTEDF < DEMANDE DE FERMETURE EN MODE 'SAVE' DE < CE FICHIER. JMP GIDLF5 < ET VERS LE PASSAGE AU FICHIER SUIVANT... < < PASSAGE A LA CLEF SUIVANTE : < GIDLF4: EQU $ LA XXKE1,W < (A)='PEK' DE LA CLEF : TBT BXKE2 < EST-CE LA DERNIERE ??? JC GIDLF6 < OUI ?!???!? ADRI LXKE,W < PASSE AU DESCRIPTEUR SUIVANT... JMP GIDLF3 < < CAS OU L'ON N'A TROUVE AUCUNE < CLEF "IN USE" : < GIDLF6: EQU $ JMP $ < E R R E U R S Y S T E M E... LR X,W < RESTAURE : (W)=ADRESSE DE LA DEMANDE < D'ACCES A 'DKB', ET XR Y,W < (Y)=ADRESSE DE LA DEMANDE 'DKB', < (W)=ADRESSE DU DESCRIPTEUR D'ENREGIS- < TREMENT COURANT. < < PASSAGE AU DESCRIPTEUR D'ENREGISTREMENT SUIVANT : < GIDLF5: EQU $ GIDLF2: EQU $ ADRI UDE,W < PASSAGE AU DESCRIPTEUR SUIVANT, PLR X < RESTAURE LE DECOMPTAGE DES DESCRIPTEURS < D'ENREGISTREMENT... JDX GIDLF9 < S'IL EXISTE... GIDLF7: EQU $ < < TENTATIVE DE RECUPERATION DES < SECTEURS HS DE 'DKM' ; MAIS < ATTENTION, CELA N'EST FAIT < QUE SI LES FONCTIONS DANGE- < REUSES SONT AUTORISEES : < LA MEMV TBT MEMXXX < LES FONCTIONS DANGEREUSES SONT-ELLES < AUTORISEES ??? JNC GIDLX5 < NON, ON NE TENTE RIEN, CELA EVITERA DE < FAIRE DU BRUIT (AVEC LES 'RETURNS TO < ZERO TRACK') !!! LRM A,B,X WORD PQSHS < (A)=ADRESSE DE LA PILE REELLE, WORD PQSHSP < (B)=ADRESSE DE SA COPIE, WORD XQSHS < (X)=NOMBRE DE MOTS A DUPLIQUER. MOVE < COPIE PQSHS --> PQSHSP. STZ &IKQSHS < A PRIORI, PLUS DE SECTEURS HS, LRM A,X,Y,W BYTE LQSHS;K < (A)=POINTEUR DE PILE INITIAL, WORD XQSHS < (X)=NOMBRE DE MOTS A RAZER... WORD PQSHSP < (Y)=ADRESSE DE LA COPIE DE LA PILE, WORD PQSHS+XQSHS < (W)=ADRESSE COURANTE DANS 'PQSHS'. GIDLX1: EQU $ ADRI -P,W < PASSAGE AU MOT PRECEDENT, STZ O,W < ET ON LE RAZE... JDX GIDLX1 STA O,W < INITIALISATION DU POINTEUR DE PILE. LAD DINIRL LR A,W < (W)=ADRESSE DE LA DEMANDE DE 'REL'... GIDLX2: EQU $ PULL < RECUPERATION DU SECTEUR COURANT (A). JV GIDLX3 < 'PQSHSP' EST VIDE, C'EST FINI... STA BINIRL < (A)=ADRESSE DU SECTEUR COURANT, BSR ACHAND < ON ESSAYE DE LE RENDRE... GIDLX4: EQU $ LA WEIO ANDI MBETA JAE GIDLX4 < ON ATTEND LA FIN DE RELEASE... < ON NE PEUT UTILISER 'CALLW' CAR IL TESTE < 'ETADEM' !!! JMP GIDLX2 < AU SUIVANT... GIDLX3: EQU $ GIDLX5: EQU $ BR AGIDLE < ET PUIS, ON CONTINUE... PAGE < < < V E R I F I C A T I O N D U C H E C K S U M < D E L A C O P Y : < < < FONCTION : < CE SOUS-PROGRAMME EST CHARGE DE < CALCULER LE CHECKSUM DE LA COPY < COURANTE ET DE DIRE S'IL EST BON... < < < RESULTAT : < LES INDICATEURS POUR UN TEST EN RETOUR. < < CKCOP: EQU $ PSR X,W < PAR PRUDENCE... LRM X,W WORD LCOPY1-D < (X)=NOMBRE DE MOTS SUR LESQUELS PORTENT < LE CALCUL DE CHECKSUM, WORD BCOPY < (W)=ADRESSE DU BUFFER DE COPY. LAI K < (A)=CUMUL DU CHEKSUM... CKCOP1: EQU $ EOR O,W < CUMUL DU CHECKSUM, ADRI D,W < AU MOT SUIVANT, JDX CKCOP1 < S'IL EXISTE... CP O,W < ALORS CE CHEKSUM, IL EST BON ??? PLR X,W RSR < ET VOILA LE TRAVAIL... PAGE < < < A P P E L C H A N D A V E C < S I M U L A T I O N D ' A T T E N T E < D E F I N D E S E R V I C E : < < < FONCTION : < CETTE ROUTINE PERMET D'APPELER CHAND, < ET ENSUITE DE SIMULER L'ATTENTE DE FIN < DE SERVICE : < EN EFFET : < 1- D'UNE PART INI NE PEUT LANCER < SUMULTANEMENT PLUSIEURS DEMANDES SUR < LA MEME DCT CAR ON AURAIT ALORS DES < PROBLEMES DE PHASES CRITIQUES SUR LA < DCT DEMANDEES QUI NE POURRAIENT < S'EXCLURE PAR SPHEX, CAR LES SPHEX N'ONT < PAS DE FILES D'ATTENTE SUFFISAMMENT < LONGUES POUR CONTENIR INI ; < 2- D'AUTRE PART, INI NE PEUT EXECUTER < L'INSTRUCTION WAIT, CAR IL N'Y < A PAS ENCORE DE TACHE IDLE, QU'ON NE < PEUT ENCORE ARMER, SOUS PEINE < DE PERDE LA MAIN !!! < < < ARGUMENT : < (W)=ADRESSE DE LA DEMANDE A TRANSMETTRE A CHAND. < < CALLW: EQU $ < < ENVOI DE LA DEMANDE : < BSR ACHAND < ENVOI DE LA DEMANDE (W). < < BOUCLE D'ATTENTE DE FIN DE SERVICE : < Z1400: EQU $ LA WEIO < (A)=WEIO(DEMANDE(W)). ANDI MBETA < (A)=BETA(WEIO). JAE Z1400 < TANT QUE BETA(WEIO) EST NUL < (REMIS A 0 PAR CHAND), C'EST < QUE LE SERVICE N'EST PAS RENDU ; < EN CONSEQUENCES, ON BOUCLE... CPZ ARGDEM+ETADEM < ALORS COMMENT CELA S'EST-IL PASSE ??? JE Z1400X < TRES BIEN... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < CONTINUER EN PAS A PAS, ET FAIRE TRES < ATTENTION EN PARTICULIER S'IL S'AGIT DE < LA LECTURE DU BLOC DE COPY !!! < Z1400X: EQU $ RSR < ON REND LA MAIN, LORSQUE < BETA(WEIO)=1>0 : SERVICE < RENDU (MIS A 1 PAR HANDLR). PAGE < < < P I L E D ' I N I T I A L I S A T I O N : < < PILINI: EQU $-DEPILE XWPILE: VAL LPILEH+GAXCYL+2 < (+GAXCYL POUR PERMETTRE L'INVERSION < DE LA TABLE 'TVDKM'...) CALL #SISP CMS5 GENPIL2# PAGE < < < B O O T S T R A P S D E C M S 5 : < < XWOR%1: VAL $-ZERO < $ COURANT IF XWOR%1-DOLA2,XEIF%2,, CALL #SISP CMS5 DOL1# < POUR CONNAITRE DOLAR1... CALL #SISP CMS5 DOL2# < POUR CONNAITRE DOLAR2... XEIF%2: VAL ENDIF IF XWOR%1-DOLA2,,XEIF%2,XEIF%2 CALL #SISP CMS5 DOL2# < POUR CONNAITRE DOLAR2... CALL #SISP CMS5 DOL1# < POUR CONNAITRE DOLAR1... DZS DOLA2-DOLAR1 < NETTOYAGE DE L'ESPACE LIBRE... < (MAIS ATTENTION, LE 'SYSINI' LUI N'EST < PAS REMIS A '0000...) $EQU ZERO+DOLA2-Z < POUR REVENIR EN MEMOIRE BASSE... XEIF%2: VAL ENDIF NTRN BLONG1:: VAL DOLAR1-DOLA1+YM7/YY7*YY7 < LONGUEUR DU DEBUT DE 'CMS5'. BLONG2:: VAL DOLAR2-DOLA2+YM7/YY7*YY7 < LONGUEUR DE LA FIN DE 'CMS5', < NON COMPRIS LES BOOT-STRAPS... TRN BLONGS:: VAL BLONG1+BLONG2 < LONGUEUR TOTALE DE 'CMS5' : < C'EST TOUJOURS UTILE DE LA CONNAITRE PAGE < < < I M P L A N T A T I O N F I X E D E S B O O T S T R A P S : < < XZBOOT:: VAL 'FD00 < ADRESSE ABSOLUE A LAQUELLE ON VA < IMPLEMENTER LES BOOT-STRAPS. XWOR%2: VAL -S < POUR FAIRE UN DECALAGE A DROITE. XWOR%3: VAL XZBOOT>XWOR%2 < ADRESSE DOUBLE-MPOT DES BOOT-STRAPS. XWOR%4: VAL DOLAR2+2>XWOR%2 < ADRESSE DOUBLE-MOT DOLAR2 COURANT. IF XWOR%4-XWOR%3,XEIF%,, IF A T T E N T I O N : LA VALEUR DU IF DOLAR2 EXCEDE CELLE PREVUE POUR IF L'ADRESSE DES BOOT-STRAPS !!! XEIF%: VAL ENDIF DOLAR4:: VAL DOLAR1 < SAUVEGARDE DU 'DOLAR1' FINAL... CALL #SISP CMS5 DOL2# XZFREE:: VAL XZBOOT-DOLAR2 < ESPACE HAUT ENCORE DISPONIBLE... DOLA3:: VAL XX64K-Z*LK-Z+LK < DERNIERE ADRESSE MEMOIRE DISPONIBLE. DZS XZFREE < NETTOYAGE D'UN RESIDU D'ESPACE HAUT. XX16K:: VAL 8 < LONGUEUR D'UN ECHANGE... < ATTENTION A CETTE TRAITRISE (LE 16 QUI < DEVIENT 8...). IF XX16KK-XX16K,,,XEIF% IF ATTENTION : LE BOOTSTRAPPING VA MAL SE PASSER !!! XEIF%: VAL ENDIF PAGE < < < L O C A L D E S B O O T S T R A P S : < < CALL #SISP CMS5 CHECK# LOCAL BLOCAL: EQU $ < LOCAL DU BOOTSTRAP < < < B O O T S T R A P ' D K F ' : < < < < ADRESSE DU COUPLEUR 'DKF' : < ACDKB:: VAL ACDKF < ADRESSE COUPLEUR DU DISQUE UTILISE PAR < LE BOOTSTRAP 'FHD'. BSIOEA: WORD ACDKB?FPHETA < OPERANDE SIO ENTREE ETAT A. BSIOEB: WORD ACDKB?FPHETB < OPERANDE SIO ENTREE ETAT B. BSIOCD: WORD ACDKB?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BSIOSA: WORD ACDKB?FPHCME < OPERANDE SIO SORTIE ADRESSE SECTEUR. BSIOSC: WORD ACDKB?FPHSAD < OPERANDE SIO SORTIE COMPTE DE SECTEURS. < < 'CCB' DU 'DKF' : < BCCB0: WORD K < MOT0. XXDK50:: VAL K < JEU DE REGISTRES 'HDC' POUR 'DKF', XXDK51:: VAL XXDK50+I < JEU DE REGISTRES 'HDC' POUR 'DKM'. BYTE CCBHDC?XSNDKF;XXDK50 < MOT1. BCCB2: WORD NIL < MOT2 : ADRESSE-MOT DU BUFFER. BCCB3: WORD XX16K*LK < MOT3 : LONGUEUR-MOT DU BUFFER. BCCB4: WORD ACDKB?FPHIN < MOT4 : OPERANDE DE 'SIO' D'ENTREE INFO. < < ADRESSE DES SOUS-PROGRAMMES : < BABECH: WORD BECHAN < RELAI D'ACCES AU MODULE D'ECHANGE. BABIPI: WORD BIPI < RELAI D'ACCES AU MODULE D'ENVOI 'IPI'. XWOR%1: VAL LK/YY7 < NOMBRE DE SECTEURS PAR K. BADERS: WORD XX64K*XWOR%1+LOCSYS-Z < ADRESSE SECTEUR DU DERNIER < SECTEUR ECHANGE ; CETTE ADRESSE EST < UTILISEE POUR FAIRE UN CONTROLE < EN FIN DE BOOTSTRAP FHD. BASSY: WORD LOCSYS < ADRESSE SECTEUR DU SYSTEME, MAIS < A T T E N T I O N : ELLE N'A RIEN A VOIR < AVEC 'SECTSY'. BC0800: WORD MIPM < POUR MASK/DEMASK 'IPI' DANS 'ST'... < < < B O O T S T R A P ' D K M ' : < < < ADRESSE DU COUPLEUR 'DKM' : < BACDKM:: VAL ACDKM < ADRESSE COUPLEUR DU DISQUE AMOVIBLE < UTILISE PAR LE BOOTSTRAP 'DKM'. BMSEA: WORD BACDKM?FPHETA < OPERANDE SIO ENTREE ETAT A. BMSEB: WORD BACDKM?FPHETB < OPERANDE SIO ENTREE ETAT B. BMSSA: WORD BACDKM?FPHCME < OPERANDE SIO SORTIE ADRESSE. BMSCD: WORD BACDKM?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BMPUP: WORD ACPUP?FPHOUT < VISUALISATION AU PUPITRE... < < 'CCB' DE 'DKM' : < BMCCB0: WORD COSBT?CCBDKM=FMASK(K=FCINST < MOT0 : < BIT 6=DK TETES MOBILES. BYTE CCBHDC?XSNDKM;XXDK51 < MOT1 : < BITS 0-1=MODE HDC. < BITS 2-7=NIVEAU IT NORMALE. < BITS 11-15=NUMERO DU JEU DE < REGISTRES CANAL UTILISES. BMCCB2: WORD NIL < MOT2 : ADRESSE-MOT DU BUFFER. BMCCB3: WORD NILK < MOT3 : LONGUEUR-MOT DU BUFFER. BMCCB4: WORD BACDKM?FPHIN < MOT4 : OPERANDE DE 'SIO' D'ECHANGE. BMCCB5: WORD NILK < MOT5 : 'HEADER 1' DU PREMIER SECTEUR < A ECHANGER. < < ADRESSE DES SOUS-PROGRAMMES : < BABMEC: WORD BMECH < RELAI D'ACCES AU MODULE D'ECHANGE. < < IMPLANTATION DU SYSTEME SUR DISQUE : < BMASSY: WORD LOCSYS < ADRESSE A PRIORI D'IMPLANTATION < DU SYSTEME SUR 'DKM'. CETTE ADRESSE < EST PATCHABLE PAR L'UTILISATEUR. < < DEFINITION DE 'DKM' : < BMNSPP: WORD XDKMSP < NOMBRE DE SECTEURS PAR PISTE. BMNPPC: WORD XDKMPC < NOMBRE DE PISTES PAR CYLINDRE. BMSECT: WORD NILK < NUMERO DE SECTEUR. BMPIST: WORD NILK < NUMERO DE PISTE. BMCYL: WORD NILK < NUMERO DE CYLINDRE. BMCNT: WORD YY7 < COMPTE DE MOTS D'UN ECHANGE. BMNECH: WORD LK/YY7*XX64K < NOMBRE D'ECHANGES NECESSAIRES. < < < B O O T S T R A P ' C R 1 ' : < < < ADRESSE DU COUPLEUR 'CR1' : < ACCRB:: VAL ACCR1 < ADRESSE COUPLEUR DU LECTEUR DE CARTES < UTILISE PAR LE BOOTSTRAP CARTES. BCETA: WORD ACCRB?FPHETA < OPERANDE SIO ENTREE MOT D'ETAT. BCCDE: WORD ACCRB?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BCDATA: WORD ACCRB?FPHIN < OPERANDE SIO DATA IN. < < ADRESSE DE SOUS-PROGRAMMES : < BCASP1: WORD BCSP1 < RELAI D'ACCES AU MODULE 'SP1'. BCASP2: WORD BCSP2 < RELAI D'ACCES AU MODULE 'SP2'. < < DEFINITION DE 'DKF' : < XXDK70:: VAL 'FFFF < SECTEUR INEXISTANT DE 'DKF'... BCADRS: WORD XXDK70 < INITIALISATION DE L'ADRESSE SECTEUR < SUR UN SECTEUR INEXISTANT, AFIN DE < FORCER SA DEFINITION... < < 'CCB' DE 'DKF' : < BCCB0C: WORD K < MOT0. BYTE CCBHDC?XSNDKF;XXDK50 <MOT1. WORD BBUFS < MOT2 : ADRESSE-MOT DU BUFFER. WORD YY7 < MOT3 : LONGUEUR-MOT DU BUFFER. WORD ACDKB?FPHOUT < MOT4 : OPERANDE 'SIO' D'ENTREE. PAGE PROG CALL #SISP CMS5 CHECK# < < < E N V O I D E S ' I P I ' : < < OU : < < M O I , J E F A I S ' I P I ' O U O N < M E D I T D E F A I R E ... < < < FONCTION : < CE PETIT SOUS-PROGRAMME < EST CHARGE D'EMETTRE LES < 'IPI' DES BOOT-STRAPS SUR < LE PROCESSEUR QUI FAIT LE < BOOTSTRAPPING... < < < ARGUMENTS: < (A)=ADRESSE DU CCB. < (C)=ADRESSE DE LA 'BOX'. < < < A T T E N T I O N : < DETRUIT LE REGISTRE 'A' !!! < < BIPI: EQU $ < < MISE EN PLACE DU 'CCB' : < STA O,C < STOCKAGE ADRESSE CCB DANS 'BOX' < < AVERTISSEMENT DE L''IOP' : < IPI < < ET ATTENTE DE FIN DE < PRISE EN COMPTE : < LA BC0800 < POUR DEMASK DES 'IPI' RST < DEMASK 'IPI'. BIPI1: EQU $ CPZ O,C < TEST 'BOX'=K. JNE BIPI1 < ATTENTE. LA BC0800 < POUR MASK 'IPI'. SST < MASK 'IPI'. RSR XXBOOT:: VAL DEPBAS < DEPLACEMENT DES BASES L.. PAGE < < < B O O T S T R A P ' D K F ' : < < < FONCTION : < IL S'AGIT DU BOOTSTRAP < DE BASE DE 'CMS5', PUISQUE < C'EST CELUI QUI PERMET DE < CHARGER LE SYSTEME A PARTIR < DU DISQUE FIXE 'FHD'. < ON DISPOSE DE 2 MODES D'UTILISATION < DE CE BOOTSTRAP DISQUE : < < 1- M O D E ' R E A D ' : < < POINT D'ENTREE: ' B T F H D R ' < < 2- M O D E ' W R I T E ' : < < POINT D'ENTREE: ' B T F H D W ' < < < NOTA: < CE BOOTSTRAP ECHANGE TOUJOURS 64 K MOTS. < < < A T T E N T I O N : < L'ADRESSE SECTEUR DU SYSTEME EST 'LOCSYS'. < ELLE N'A PLUS RIEN A VOIR AVEC LA CONTANTE < 'SECTSY'; CETTE DERNIERE DOIT ETRE MAINTENUE < A SA VALEUR ACTUELLE, DONT DEPENDENT LES < IMPLANTATIONS DES SWAPPINGS ET PROCESSEURS DE BASE. < < < ON DOIT AVOIR A L'ENTREE DU BOOTSTRAP: < < I O M = I P M = 1 ( FAIRE 'INI' ) < < XXBOOR:: VAL K < MODE 'READ'. XXBOOW:: VAL XXBOOR)BIT < MODE 'WRITE'. < < POINT D'ENTREE 'LECTURE' : < BTFHDR: EQU $ <<<<< POINT D'ENTREE MODE: <<<<< R E A D LBI XXBOOR < (B)=0 : MODE R E A D , JMP BOTFHD < ALLONS-Y... < < POINT D'ENTREE 'ECRITURE' : < BTFHDW: EQU $ <<<<< POINT D'ENTREE MODE: <<<<< W R I T E LBI XXBOOW < (B)=1 : MODE W R I T E. < < POINT COMMUN 'LECTURE'/'ECRITURE' : < BOTFHD: EQU $ < < INITIALISATIONS : < LRM C,L,W,K WORD BOXIPI < (C)=ADRESSE DE 'BOX', WORD BLOCAL+XXBOOT < (L)=ADRESSE DU LOCAL DES BOOTSTRAPS, WORD ABOX < (W)=ADRESSE DE L'ADRESSE DE 'BOX', WORD XXKBOT < (K)=ADRESSE DE LA PILE DES BOOTSTRAPS. LR C,A STA O,W < GENERATION DU RELAI DES BOITES... RDSI ANDI MNUBUS?MNUPRO < (A)=NUMERO DU PROCESSEUR, ADR A,C < < BOUCLE D'ECHANGES : < LXI XX64K/XX16K < (X)=NOMBRE D'ECHANGES A REALISER. BTFHD2: EQU $ LRM A,Y,W BTFHLA: EQU $ < ADRESSE DU 'LAI'... <******************************************************************************* LAI MOMSTR?MOMINT XWOR%1: VAL '0000000@@@@ < CODE DU 'LAI'... <******************************************************************************* $EQU BTFHLA WORD XWOR%1 < "LAI MOMSTR?MOMINT", WORD ACDKB?FPHIN < OPERANDE DE 'SIO' D'ENTREE INFORMATION, WORD BECH2 < ADRESSE DU "LAI...". IF XXBOOR-K,,XEIF%, IF ATTENTION : CE QUI SUIT EST MAUVAIS !!! XEIF%: VAL ENDIF CPZR B < QUEL EST LE SENS DE L'ECHANGE ??? JE BTFHD1 < UNE ENTREE... SBT COMRW < UNE SORTIE, ON MODIFIE LE "LAI...", ADRI FPHOUT-FPHIN,Y < ET ON PASSE EN 'SIO' DE SORTIE... BTFHD1: EQU $ STA O,W < MISE EN PLACE DU "LAI...", STY BCCB4 < ET DE L'OPERANDE DE 'SIO' DANS 'CCB4'... LRM A WORD XX16K*LK STA BCCB3 < RESTAURATION A PRIORI DE 'BCCB3' A < CAUSE DE L'ENTREE DU COMPTE-RENDU... LAI XX64K/XX16K SBR X,A < (A)=NUMERO DE L'ECHANGE COURANT (0-3). PSR B MP BCCB3 < (NUMERO D'ECHANGE)*(COMPTE DE MOTS), QUE STB BCCB2 < L'ON MET EN ADRESSE DE BUFFER... LR B,A PLR B SLRS YY7=K AD BASSY < (A)=ADRESSE DU PREMIER SECTEUR, BSR BABECH < ET ECHANGE... JDX BTFHD2 < AU BLOC SUIVANT... < < POUR EVITER LA MONTEE D'UNE IT EXCEPTION LORS D'UN DEMASQUAGE < ULTERIEUR, ON LIT LES MOTS D'ETAT ET ON FAIT UN 'RESET' < AU PASSAGE ON CONTROLE L'ADRESSE DU DERNIER SECTEUR ECHANGE : < SIO BSIOEB < ENTREE DU MOT D'ETAT 'B', LR A,B < (B)=MOT D'ETAT 'B', SIO BSIOEA < (A)=MOT D'ETAT 'A'. PSR A LAI MOMINI SIO BSIOCD < 'SIO' DE COMMANDE 'RESET'... PLR A < (A,B)=MOTS D'ETAT 'A' ET 'B'... XXDK60:: VAL 5 < DECALAGE DE RECUPERATION DU NUMERO < DE SECTEUR DANS LE MOT D'ETAT. SLRS XXDK60 ANDI BIT>XXDK60-BIT XR A,B < B(BITS 11-15)=NUMERO DE SECTEUR, ANDI MOCD SLLS XXDK60 < A(BITS 3-10)=NUMERO DE PISTE, ORR B,A < A(BITS 3-15)=ADRESSE SECTEUR, < DU DERNIER SECTEUR ECHANGE CP BADERS < VERIFICATION... JNE $ < E R R E U R S Y S T E M E ... LAI K SBT STOP SST < ON ARRETE LE SYSTEME, C'EST FINI... BTFHD3: EQU $ HALT JMP BTFHD3 < < < S O U S - P R O G R A M M E D ' E C H A N G E < E L E M E N T A I R E D E ' D K F ' : < < < ARGUMENT : < (A)=ADRESSE DU PREMIER SECTEUR A ECHANGER. < < BECHAN: EQU $ PLR Y < SAUVEGARDE DANS 'Y' DE L'ADRESSE < DE RETOUR: LA PILE PEUT EN EFFET < ETRE PERDUE EN COURS D'ECHANGE !!! PSR A < SAUVEGARDE DE L'ADRESSE SECTEUR... BECH4: EQU $ SIO BSIOEA < (A)=MOT D'ETAT 'A', TBT ETAOPE < 'DKF' EST-IL PRET ??? JNC BECH4 < SI NON, ATTENDRE... < < ENVOI DES ARGUMENTS : < PLR A < RECUPERATION ADRESSE SECTEUR, ET SIO BSIOSA < SORTIE DE L'ADRESSE SECTEUR (A)... LA BCCB3 < (A)=COMPTE DE MOTS, ADRI YM7,A ANDI YM7)MFFFF < (A)=NOMBRE DE SECTEURS NECESSAIRES, SIO BSIOSC < SORTIE COMPTE DE SECTEURS SUR LES < BITS 1-8. LAD BCCB0 < (A)=ADRESSE DU 'CCB', BSR BABIPI < ET ENVOI A L''IOP'... BECH2: LAI MOMSTR+MOMINT < I N S T R U C T I O N V A R I A B L E. SIO BSIOCD < LANCEMENT DE L'ECHANGE AVEC LES < INTERRUPTIONS VALIDEES... LR X,A < SAUVEGARDE DE 'X', HALT < TEMPORISATION COURTE... HALT < TEMPORISATION LONGUE ((X)=0)... LR A,X < RECUPERATION DE 'X'. < < ENTREE DU COMPTE-RENDU (CE QUI < PERMET ENTRE AUTRES CHOSES, < L'ENTREE DU DERNIER MOT...) : < LA BCCB0 SBT BCCBCR < MISE EN MODE COMPTE-RENDU STA BCCB0 < DU 'CCB', LAD BCCB0 < (A)=ADRESSE DU 'CCB', BSR BABIPI < QUE L'ON ENVOIE POUR OBTENIR LE COMPTE- < RENDU DE FIN D'ECHANGE, ET SURTOUT ECHAN- < GER LE DERNIER MOT (!???!???!). LA BCCB3 < (A)=NOMBRE DE MOTS RESIDUELS, JANE $ < BERKKKK !???!!!?! LA BCCB0 RBT BCCBCR STA BCCB0 < ET ENFIN, ON REMET LE 'CCB' EN MODE < ENTREE-SORTIE... < < RETOUR : < PSR Y < RESTAURATION DE L'ADRESSE DE RETOUR, RSR < ET RETOUR... PAGE < < < B O O T S T R A P D K M : < < < FONCTION : < CE BOOTSTRAP A LES MEMES < FONCTIONNALITES QUE CELUI < DE 'DKF', SI CE N'EST QU'IL < GERE LE DISQUE 'DKM'. < ON DISPOSE DE 2 MODES D'UTILISATION < DE CE BOOTSTRAP DISQUE : < < 1- M O D E ' R E A D ' : < < POINT D'ENTREE: ' B T D K M R ' < < 2- M O D E ' W R I T E ' : < < POINT D'ENTREE: ' B T D K M W ' < < < NOTA: < CE BOOTSTRAP ECHANGE TOUJOURS 64 K MOTS. < < < A T T E N T I O N : < L'ADRESSE SECTEUR DU SYSTEME EST PRISE PAR < CE BOOTSTRAP DANS LE MOT 'BMASSY' DU LOCAL 'BLOCAL'. < ET NON PAS DANS LE MOT 'BASSYS' ! < < < ON DOIT AVOIR A L'ENTREE DU BOOTSTRAP: < < I O M = I P M = 1 ( FAIRE 'INI' ) < < < < POINT D'ENTREE 'LECTURE' : < BTDKMR: EQU $ <<<<< POINT D'ENTREE MODE: <<<<< R E A D LBI XXBOOR < (B)=K : MODE R E A D , JMP BOTDKM < ALLONS-Y... < < POINT D'ENTREE 'ECRITURE' : < BTDKMW: EQU $ <<<<< POINT D'ENTREE MODE: <<<<< W R I T E LBI XXBOOW < (B)=1 : MODE W R I T E. < < POINT COMMUN LECTURE/ECRITURE : < BOTDKM: EQU $ < < INITIALISATIONS : < LRM C,L,W,K WORD BOXIPI < (C)=ADRESSE DE 'BOX', WORD BLOCAL+XXBOOT < (L)=BASE DU LOCAL DES BOOTSTRAPS, WORD ABOX < (W)=ADRESSE DE L'ADRESSE DE 'BOX', WORD XXKBOT < (K)=PILE DES BOOTSTRAPS. LR C,A STA O,W < MISE EN PLACE DU RELAI DES 'BOX'. LR B,W < (W)=0 : MODE 'READ', < (W)#0 : MODE 'WRITE'. RDSI ANDI MNUBUS?MNUPRO < 'A'=NUMERO DU PROCESSEUR. ADR A,C < D'OU L'ADRESSE DE 'BOX'... < < BOUCLE D'ECHANGE : < LX BMNECH < (X)=NOMBRE D'ECHANGES NECESSAIRES. BTDKM2: EQU $ LA BMNECH < (A)=NOMBRE D'ECHANGES. SBR X,A < (A)=NUMERO DE L'ECHANGE COURANT (0 A N). MP BMCNT < (NUMERO D'ECHANGE)*(COMPTE DE MOTS), STB BMCCB2 < D'OU L'ADRESSE MEMOIRE COURANTE... LR B,A < (A)=ADRESSE MEMOIRE COURANTE, SIO BMPUP < QUE L'ON VISUALISE AU PUPITRE... LA BMCNT < COMPTE DE MOTS. STA BMCCB3 < COMPTE DE MOTS A ECHANGER. LR B,A SLRS YY7=K < (A)=ADRESSE RELATIVE SECTEUR COURANT. AD BMASSY < (A)=ADRESSE SECTEUR COURANT. BSR BABMEC < ECHANGE DU SECTEUR COURANT (YY7 MOTS)... JDX BTDKM2 < VERS L'ECHANGE SUIVANT... < < POUR EVITER LA MONTEE EVENTUELLE D'UNE INTERRUPTION < LORS D'UN DEMASQUAGE ULTERIEUR, ON LIT LES MOTS D'ETAT A ET B < ET ON FAIT UN 'RESET' DE 'DKM' : < SIO BMSEA < ENTREE DU MOT D'ETAT 'A', SIO BMSEB < ENTREE DU MOT D'ETAT 'B', LAI MOMINI SIO BMSCD < ET ENVOI D'UNE COMMANDE DE 'RESET'... < < FIN NORMALE : < LAI K SBT STOP SST < ET ON ARRETE LE SYSTEME... BTDKM7: EQU $ HALT JMP BTDKM7 < < < E C H A N G E D ' U N S E C T E U R ' D K M ' : < < < ARGUMENTS : < (A)=ADRESSE DU SECTEUR COURANT, < (W)=0 : LECTURE, < #0 : ECRITURE. < < BMECH: EQU $ PSR A < SAUVEGARDE ADRESSE SECTEUR (INITIALE OU < DE REPRISE SUR FIN DE CYLINDRE). < < TEST DE L'ETAT DE 'DKM' : < BME1: EQU $ SIO BMSEA < (A)=MOT D'ETAT 'A', TBT ETAOPE < 'DKM' EST-IL PRET ??? JC BME2 < OUI, OK... LAI MOMINI < NON, SIO BMSCD < ON ENVOIE UNE FONCTION DE 'RESET'... JMP BME1 < ET ON BOUCLE. < < CALCUL DE L'ADRESSE PHYSIQUE : < BME2: EQU $ LAI K PLR B < (B)=ADRESSE SECTEUR (ANCIEN (A)). DV BMNSPP JV $ < E R R E U R S Y S T E M E ... STB BMSECT < NUMERO DE SECTEUR. LR A,B LAI K DV BMNPPC JV $ < E R R E U R S Y S T E M E ... STB BMPIST < NUMERO DE PISTE. STA BMCYL < NUMERO DE CYLINDRE. < < SELECTION DE L'UNITE ET POIDS < 1, 2 ET 3 DE L'ADRESSE DE TETE : < LA BMPIST < NUMERO DE PISTE (OU TETE). RBT NBITMO-XXDK10 SLLS NBITMO-XXDK12-XXDK10 SLRS NBITMO-XXDK12-XXDK10-XXDK11 < POIDS 1 A 3 DE L'ADRESSE TETE SBT XXDK13 < MISE EN PLACE DU NUMERO D'UNITE, SIO BMSSA < ET SORTIE ADRESSE... LAI XXDK30 SIO BMSCD < ET ENVOI DE LA FONCTION "UNIT SELECT"... < < POSITIONNEMENT DES TETES : < LBI K JMP BME10 < VERS LA DEVIRTUALISATION... < ON FAIT AINSI UN 'JMP' ET NON PAS UNE < INSERTION DE CODE AFIN DE NE PAS CHANGER < LE DEBUT DU CODE DES BOOTSTRAPS !!! BME11: EQU $ SLLS XXDK14 LR A,Y LA BMPIST < NUMERO DE PISTE. ANDI XXDK20 < SELECTION BITS DE POIDS 0 ET 4 SLRD XXDK10 < DE L'ADRESSE TETE. SLLS NBITMO-XXDK12-XXDK10-XXDK15-XXDK10 SLLD XXDK15+XXDK10 ORR Y,A SIO BMSSA < ET SORTIE D'ADRESSE... AD BMSECT < (A)='HEADER 1' DU PREMIER SECTEUR A < ECHANGER, STA BMCCB5 < QUE L'ON MET DANS LE MOT5 DU 'CCB', LAI XXDK31 SIO BMSCD < ET ENVOI DU 'SEEK'... PSR X < SAUVEGARDE DE 'X'. HALT < ATTENDONS QUE LES TETES... HALT < ...SOIENT POSITIONNEES. JMP $+1 < PATCH EVENTUEL. PLR X < RESTAURATION DE 'X'. < < FIN DE GENERATION DU 'CCB', ET < LANCEMENT DE L'ECHANGE : < LA BMCCB0 RBT BCCBCR STA BMCCB0 < RAZ DU MODE COMPTE-RENDU A PRIORI... LRM A WORD BACDKM?FPHIN < (A)=MODE 'SIO''IN' A PRIORI... IF XXBOOR-K,,XEIF%, IF ATTENTION : CE QUI SUIT EST MAUVAIS !!! XEIF%: VAL ENDIF CPZR W < ALORS QUEL EST LE SENS DE L'ECHANGE ??? JE BME5 < ENTREE, (A) EST BON... ADRI FPHOUT-FPHIN,A < SORTIE... BME5: EQU $ STA BMCCB4 < MISE DU MOT4 DU 'CCB' DANS LE BON MODE... LAD BMCCB0 < (A)=ADRESSE DU 'CCB', BSR BABIPI < ET ENVOI DU 'CCB' A L''IOP'... PLR Y < SAUVEGARDE DE L'ADRESSE DE RETOUR < CAR L'ECHANGE PEUT DETRUIRE LA PILE !!! LAI XXDK32 SIO BMSCD < ET LANCEMENT DE L'ECHANGE... LR X,A < SAUVEGARDE DE 'X'. HALT < ATTENTE DE LA FIN... HALT < ...D'ECHANGE. LR A,X < RECUPERATION DE 'X'. PSR Y < ET ON RE-EMPILE L'ADRESSE DE RETOUR. < < TEST DU MOT D'ETAT : < SIO BMSEA < (A)=MOT D'ETAT 'A' : JAGE BME3 < OK, ALLONS AU COMPTE RENDU... < < CAS D'UNE ERREUR : < TBT ETACAD < ERREUR DE CADENCE ??? JC $ < E R R E U R S Y S T E M E ... TBT ETAPAR < ERREUR DE CHECKSUM ??? JC $ < E R R E U R S Y S T E M E ... TBT ETAVIO < TENTATIVE DE VIOL ??? JC $ < E R R E U R S Y S T E M E ... TBT ETADOG < CHIEN DE GARDE ??? JC $ < E R R E U R S Y S T E M E ... TBT ETAOPE < 'DKM' EST-IL PRET ??? JNC $ < E R R E U R S Y S T E M E ... TBT ETABRK < EST-ON SUR UNE FIN DE CYLINDRE ??? JNC $ < E R R E U R S Y S T E M E ... < < COMPTE-RENDU D'ECHANGE : < BME3: EQU $ LA BMCCB0 SBT BCCBCR STA BMCCB0 < MISE DU 'CCB' EN MODE "COMPTE-RENDU"... LAD BMCCB0 < (A)=ADRESSE DU 'CCB', BSR BABIPI < ET DEMANDE DE COMPTE-RENDU A L''IOP'... LA BMCCB3 < (A)=COMPTE-RENDU : JANE $ < E R R E U R S Y S T E M E ... RSR < < DEVIRTUALISATION DES GROUPES DE CYLINDRES : < BME10: EQU $ LA BMCYL < (A)=NUMERO DE CYLINDRE. PSR W XWOR%1: VAL CAXCYL=K XWOR%2: VAL NOCMO=K SLRD XWOR%1+XWOR%2 < DECONCATENATION : < (A) ET LE BIT0(B) = NUMERO DE GROUPE... LRM W WORD TVDKMP < W BASE LA TABLE "PRIME" DE 'DKM'... ADR A,W < (W)=ADRESSE DU MOT CONTENANT LE GROUPE < RECHERCHE... LA O,W < ACCES, TBT NBITMO-B+XWOR%2 < EST-CE L'OCTET DROIT OU GAUCHE ??? JC BME12 < DROIT : OCTET IMPAIR, SWBR A,A < GAUCHE : OCTET PAIR, ON LE MET A DROITE. BME12: EQU $ ANDI MOCD < (A)=NUMERO DE GROUPE REEL, SLLD XWOR%2 SLRS XWOR%2 < ON EFFACE LE BIT DE DISCRIMINATION < OCTET DROITE/GAUCHE... SLLD XWOR%1 < ET ON RECONCATENE... PLR W JMP BME11 < ET VOILA... PAGE < < < B O O T S T R A P C A R T E S < < < FONCTION : < CE BOOTSTRAP CHARGE LE SYSTEME A PARTIR DE < CARTES TRAITEES PAR GROUPE DE 4, UN GROUPE DE CARTES < CONTENANT YY7 MOTS=YY8 OCTETS, AVEC 1 OCTET PAR COLONNE. < IL Y A: < - SUR LA 1ERE CARTE : 79 COLONNES UTILES < - SUR LA 2EME CARTE : 79 COLONNES UTILES < - SUR LA 3EME CARTE : 79 COLONNES UTILES < - SUR LA 4EME CARTE : 19 COLONNES UTILES < SOIT AU TOTAL 'YY8' OCTETS... < DES QUE 'YY' MOTS SONT LUS, IL SONT ECRITS < SUR DISQUE 'FJD', A PARTIR D'UNE ADRESSE SECTEUR < 'BCADRS' A INITIALISER PAR L'UTILISATEUR < < < A T T E N T I O N : < A L'ENTREE IL FAUT: I O M = I P M = 1 (FAIRE 'INI') < IL FAUT DE PLUS INITIALISER BCADRS L'ADRESSE < SECTEUR INITIALE POUR LE CHARGEMENT SUR DISQUE < < BOTCRT: EQU $ < POINT D'ENTREE DU BOOTSRAP CARTES CALL #SISP CMS5 W ZERO# < (W)=BASE LA MEMOIRE DEBANALISEE. LRM A WORD BOXIPI STA ABOX-ZERO,W LRM Y,C,L,K < INITIALISATIONS : WORD K < (Y)=REGISTRE DE TRAVAIL, WORD W < (C)=NUMERO DE LA CARTE EN COURS : < VARIE DE 1 A 63 PUIS DE 0 A 63 WORD BLOCAL+XXBOOT < (L)=LOCAL DU BOOTSTRAP, WORD XXKBOT < (K)=PILE DES BOOTSTRAPS. < < NOTA: < LE BIT15 DU REGISTRE 'IM' < EST UTILISE COMME INDICATEUR < DES OCTETS LUS : < - BIT15=0 : ON A LU 1 OCTET, < - BIT15=1 : ON A LU 2 OCTETS, IL FAUT < STOCKER LE MOT EN MEMOIRE. < LBI K XIMR B < INITIALISATION 'IM' (1 OCTET)... BCART0: EQU $ < TRAITEMENT D'UN GROUPE DE 4 CARTES. < QUAND ON LIT UNE CARTE PAR 'BCSP1', < ON SAIT SI C'EST UNE CARTE 19/79 < COLONNES EN FONCTION DE 'C' : < 19 COLONNES SI (C) EST MULTIPLE DE 4, < 79 COLONNES SINON. LRM W WORD BBUFS < (W)=ADRESSE MEMOIRE DU BUFFER. XXLCCI:: VAL LCCI-Z < ON IGNORERA LA DERNIERE COLONNE... XWOR%1: VAL XXLCCI < ON N'UTILISE PAS LA DERNIERE COLONNE. NTRN DO YY8+XWOR%1-E/XWOR%1 BSR BCASP1 < LECTURE DE LA CARTE COURANTE (19 OU 79). TRN < < ECRITURE SUR 'DKF' DU SECTEUR < QUE L'ON VIENT D'ASSEMBLER : < LAI MOMINI SIO BSIOCD < ENVOI DE LA FONCTION DE "RESET"... BCARTX: EQU $ SIO BSIOEA < (A)=MOT D'ETAT 'A' : TBT ETAOPE < 'DKF' EST-IL PRET ??? JNC BCARTX < NON, ON ATTEND QU'IL LE SOIT... < < PREPARATION DES ARGUMENTS : < LA BCADRS SIO BSIOSA < SORTIE DE L'ADRESSE SECTEUR... LAI YY7 < A(BIT1 A 8)=COMPTE DE SECTEURS, SIO BSIOSC < SORTIE DU COMPTE DE SECTEURS... LRM W WORD BOXIPI RDSI ANDI MNUBUS?MNUPRO < (A)=NUMERO DU PROCESSEUR, ADR A,W < (W)=RELAI D'ACCES A 'BOX' POUR L''IOP'... IF MNUBUS?MNUPRO=K-K,,XEIF%, IF ATTENTION : LE CALCUL PRECEDENT EST FAUX !!! XEIF%: VAL ENDIF < < ECHANGE PROPREMENT DIT : < LAD BCCB0C < (A)=ADRESSE DU 'CCB', XR C,W < POUR 'BIPI'... BSR BABIPI < ENVOI DU 'CCB' A L''IOP'... XR C,W < RESTAURATION DE 'C' ET 'W'. LAI MOMRW?MOMSTR?MOMINT SIO BSIOCD < LANCEMENT DE L'ECRITURE, AVEC LES < INTERRUPTIONS VALIDEES. LXI K HALT < ET ATTENTE DE FIN D'OPERATION... IC BCADRS < ADRESSE DU SECTEUR SUIVANT, JMP BCART0 < ET PASSAGE A LA CARTE SUIVANTE... < < < S O U S - P R O G R A M M E D E L E C T U R E < D ' U N E C A R T E : < < BCSP1: EQU $ SIO BCETA < (A)=MOT D'ETAT : TBT ETAOPE < LE LECTEUR EST-IL PRET ??? JC BCSP11 < OUI, OK... LAI MOMINI < NON, SIO BCCDE < ON FAIT UN 'RESET', JMP BCSP1 < ET ON RETESTE... < < LE LECTEUR EST PRET, < LANCONS L'ECHANGE : < BCSP11: EQU $ LAI MOMSTR SIO BCCDE < LANCEMENT DE LA LECTURE AVEC LES < INTERRUPTIONS NON VALIDEES... < < BOUCLE DE LECTURE COLONNE PAR COLONNE : < LXI LCCI < (X)=NOMBRE DE COLONNES A LIRE. BCSP31: EQU $ BSR BCASP2 < LECTURE ET TRAITEMENT D'UNE COLONNE, JDX BCSP31 < ET PASSAGE A LA COLONNE SUIVANTE... < < FIN DE LA LECTURE DE LA CARTE : < LAI MOMFBK SIO BCCDE < ENVOI DE LA COMMANDE "FIN DE BLOC"... LR C,A ADRI I,A < ET INCREMENTER LE NUMERO DE CARTE... XWORK1: VAL 64 < POUR LE COMPTAGE DES CARTES... ANDI XWORK1-N < MODULO 64... LR A,C RSR < < < S O U S - P R O G R A M M E D E L E C T U R E < D ' U N E C O L O N N E : < < BCSP2: EQU $ SIO BCETA < (A)=MOT D'ETAT : TBT ETANXT < Y-A-T'IL UNE 'DATA VALID' ??? JNC BCSP2 < NON, ON L'ATTEND... < < LECTURE D'UNE COLONNE : < SIO BCDATA < OUI : BITS 4-15(A)=COLONNE LUE, LR A,B < (A)=(B)=COLONNE LUE. JAE BCARTF < COLONNE NULLE : C'EST LA FIN... LAI LCCI+E SBR X,A < (A)=1 A 79=NUMERO DE COLONNE EN COURS, CPI XWORK1-N JG BCSP21 < PAS DE NUMEROTATION SUR CETTE COLONNE... CPZR C < EST-CE UNE CARTE DE NUMERO 0 ??? JE BCSP21 < PAS DE NUMEROTATION SUR CETTE COLONNE... < (EN FAIT SUR AUCUNE COL. DE CETTE CARTE) CPR A,C < TEST DU NUMERO DE LA CARTE EN COURS : JNE BCSP21 < PAS DE NUMEROTATION SUR CETTE COLONNE... XWORK2: VAL NBITMO-XXCRNL < LIGNE DE COMPTAGE DES CARTES. IBT NBITMO+XWORK2 < IL DOIT Y AVOIR NUMEROTATION SUR CETTE < COLONNE : ON INVERSE LE BIT ET ON VA LE < TESTER A 0... BCSP21: EQU $ < ICI ON DOIT TOUJOURS AVOIR: TBT NBITMO+XWORK2 < LIGNE 12 DE COLONNE LUE=0 : JC $ < ERREUR DE NUMEROTATION : < ON A TROUVE 0 (OU 1) AU LIEU < DE 1 (OU 0) !!! PSR A LR C,A XWOR%1: VAL BIT>2 < LES CARTES VONT PAR PAQUETS DE 4... ANDI XWOR%1-N CPI K PLR A JNE BCSP22 < SI C N'EST PAS MULTIPLE DE 4, C'EST UNE < CARTE 79 COLONNES ; ON PREND DONC LA COLO < EN COURS... XWOR%2: VAL XXLCCI < ON N'UTILISE PAS LA DERNIERE COLONNE. NTRN XWOR%3: VAL YY8/XWOR%2 < NOMBRE DE CARTES PLEINES. TRN XWOR%1: VAL XWOR%2*XWOR%3 XWOR%1: VAL YY8-XWOR%1 < NOMBRE D'OCTETS RESIDUELS... CPI XWOR%1 < CARTE 79 COLONNES, JG BCSP23 < ON NE PREND QUE LES 19 PREMIERES... < < EXPLOITATION DE LA COLONNE LUE : < BCSP22: EQU $ CPI LCCI < EST-CE LA DERNIERE COLONNE ??? JE BCSP23 < OUI, C'EST FINI... LR B,A < NON, (A)=(B)=COLONNE LUE (BITS 4-15) : XWOR%7: VAL 2 < ???!?! SLRS XWOR%7 < CADRAGE A DROITE DE L'OCTET, ANDI MOCD < ET NETTOYAGE... SWBR Y ORR A,Y < (Y)=OCTET LU... XIMR B TBT NBITAB-B < AVONS-NOUS 2 OCTETS ??? IBT NBITAB-B XIMR B JNC BCSP23 < NON, ON SORT... STY O,W < OUI, ON STOCKE LE MOT COURANT A L'ADRESSE < COURANTE (W), ADRI D,W < QUE L'ON FAIT PROGRESSER... LYI K < ET REINITIALISATION DE 'Y'... < < ET RETOUR : < BCSP23: EQU $ RSR < < FIN D'ECRITURE SUR 'DKF', < ON VA FAIRE EN SORTE QU' < AUCUNE INTERRUPTION NE < MONTE APRES DEMASQUAGE : < BCARTF: EQU $ SIO BSIOEA < EN LISANT LE MOT D'ETAT 'A', LAI MOMINI < ET SIO BSIOCD < EN ENVOYANT UN "RESET"... LAI XXDK70 < ET ON MET UNE ADRESSE DE STA BCADRS < SECTEUR INEXISTANT POUR EVITER < D'EVENTUELLES ERREURS. JMP $ < FIN DE CHARGEMENT... PAGE < < < N O Y A U D E B O O T S T R A P < < < FONCTION : < CE BOOTSTRAP CHARGE EN MEMOIRE DU CODE BINAIRE < A PARTIR DE CARTES ; IL PRESENTE LA PARTICULA- < RITE D'ETRE BOOTSTRAPPABLE PAR LA TOUCHE 'LOAD', < A PARTIR DE 'DKM' COMME 'DKF'... ENFIN, IL < POSITIONNE LE MOT 'INI' AVANT DE LIRE LE < DECK DE CARTES ; CE POSITIONNEMENT A LIEU < SUR LE BOOTSTRAP 'DKF' OU 'DKM' SUIVANT LA < POSITION DU COMMUTATEUR PUPITRE... < < < FORMAT DES CARTES : < < - 'BNNMPC' MOTS PAR CARTES. < - UN OCTET PAR COLONNE. < - FORMAT BINAIRE, COLONNES 0 A 7. < - LA FIN DES DONNEES EST INDIQUEE PAR < BIT 12 DE LA COLONNE A 1. < < < ARGUMENTS : < - PLACER DANS 'W' L'ADRESSE MEMOIRE < A LAQUELLE ON VEUT FAIRE LE CHARGEMENT. < - METTRE LE LECTEUR SOUS TENSION. < - FAIRE 'INI'. < < < POINT D'ENTREE : < 'BN00'. < < WZBOOT:: VAL XZBOOT < DEBUT DE CHARGEEMNT PREVU POUR LE < DECK DE CARTES... DBN00: LRP A < ATTENTION : CE MODULE EST CHARGE < AILLEURS PAR 'LOAD'... < (A)=ADRESSE DE CHARGEMENT. LRM B,X,Y,W,K WORD DBN00 < (B)=ADRESSE D'EXECUTION DE CE MODULE, WORD LDBN00 < (X)=LONGUEUR DU MODULE, WORD BN00 < (Y)=ADRESSE DU NOYAU DE BOOTSTRAP, WORD WZBOOT < (W)=ADRESSE PREVUE DU DECK DE CARTES. WORD XXKBOT < POUR FAIRE LE 'PSR'/'RSR'... CPR A,B < EST-ON BIEN IMPLANTE ??? JE XBN00 < OUI... MOVE < NON, ON SE TRANSLATE... XBN00: EQU $ PSR Y < FUTUR ADRESSE DE BRANCHEMENT... RDSI ANDI MSBOOT XWOR%1: VAL MSBOOT=K SLRS XWOR%1 < (A)=SELECTION DU SELECTEUR DE BOOSTRAP : XXBDKM:: VAL XXBMHD < SUR LE DISQUE AMOVIBLE, XXBDKF:: VAL XXBFHD < SUR LE DISQUE FIXE... LRM X,Y,L WORD BTFHDR < CAS DU DISQUE FIXE, WORD BTDKMR < CAS DU DIQSUE AMOVIBLE, WORD INICMS < ADRESSE DU MOT 'INI'... CPI XXBDKF < DISQUE FIXE ??? JE XBN01 < OUI, OK... CPI XXBDKM < DISQUE AMOVIBLE ??? JNE $ < NON, ON SE BLOQUE... XR X,Y < OUI... XBN01: EQU $ STX O,L < MISE EN PLACE DU BOOTSTRAP DISQUE < CHOISI AU SELECTEUR... LAI K SBT STOP SST < DEMANDE D'ARRET DU PROCESSEUR... LXI K HALT < ET ATTENTE DE HALT < DE L'ARRET EFFECTIF... RSR < 'GOTO BN00' SI ACTION SUR 'RUN'... < < < N O Y A U P R O P R E M E N T D I T : < < LOCAL BNLOC: EQU $ < LOCAL DU "NOYAU" DES BOOTSTRAPS. < (D'OU LE PREFIXE 'BN' UTILISE.) BNAC:: VAL ACCR1 < ADRESSE COUPLEUR DU LECTEUR UTILISE. BNNMPC:: VAL LCCI/NOCMO < NOMBRE DE MOTS PAR CARTE A RAISON < D'UN OCTET PAR COLONNE. BNETA: WORD BNAC?FPHETA < OPERANDE SIO ENTREE ETAT. BNCDE: WORD BNAC?FPHCMD < OPERANDE SIO SORTIE COMMANDE. BNDATA: WORD BNAC?FPHIN < OPERANDE SIO ENTREE INFORMATION. PROG BN00: EQU $ <<<<< POINT D'ENTREE DU NOYAU. LRM Y,C,L WORD K < (Y)=BASCULE PERMETTANT DE SAVOIR SI < L'ON A UN MOT COMPLET. WORD W < (C)=1, POUR FAIRE BASCULER 'Y'. WORD BNLOC+XXBOOT < (L)=BASE DU LOCAL DES BOOTSTRAPS. < <LECTURE D'UNE CARTE : < BN01: EQU $ < LECTURE CARTE. SIO BNETA < (A)=MOT D'ETAT : TBT ETAOPE < LE LECTEUR EST-IL PRET ??? JNC BN01 < NON, ON ATTEND... LAI MOMSTR < OUI : SIO BNCDE < LANCEMENT DE LA LECTURE D'UNE CARTE... < < LECTURE MOT A MOT : < LXI BNNMPC < INIT COUNT AVEC LE NOMBRE < DE MOTS PAR CARTE. BN02: EQU $ SIO BNETA < (A)=MOT D'ETAT : TBT ETANXT < Y-A-T'IL UNE INFORMATION VALIDE ??? JNC BN02 < NON, ON L'ATTEND... < < LECTURE COLONNE PAR COLONNE : < SIO BNDATA < (A)=INFORMATION LUE : XWOR%1: VAL '0A00 < LE PREMIER BIT A 1 DE 'XWOR%1' INDIQUE < LA POSITION DE LA LIGNE 12 DE LA CARTE < DANS LE MOT MACHINE, ALORS QUE LE < DEUXIEME, INDIQUE LE BIT0 DE L'OCTET < QUE L'ON INTRODUIT... XWOR%2: VAL CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1 < RECHERCHE DE LA LIGNE 12. XWOR%3: VAL CORBT?XWOR%2=FMASK(K?XWOR%1=FCINST XWOR%4: VAL CODBT=FMASK(K?XWOR%3=FCINST)XWOR%3 < RECHERCHE DU BIT0 DE L'OCTET. TBT XWOR%2 < FIN DES DONNEES ? JC $ < OUI, ON SE BLOQUE... SLLS XWOR%4 < CADRAGE A GAUCHE DANS 'A' DE < L'OCTET COURANT. SCLD NBITOC < STOCKAGE OCTET DANS 'B'. < < BOUCLAGE UN MOT=DEUX COLONNES : < EORR C,Y < BASCULEMENT DE 'Y'. CPZR Y < A-T-ON UN OCTET OU UN MOT ? JNE BN02 < ON N'A QU'UN OCTET. STB O,W < ON A UN MOT QU'ON STOCKE A L'ADRESSE < COURANTE (W), ADRI D,W < QUE L'ON FAIT ENSUITE PROGRESSER... JDX BN02 < ET PASSAGE A L'OCTET SUIVANT... < < FIN DE CARTE : < LAI MOMFBK SIO BNCDE < ENVOI DE LA COMMANDE "FIN DE BLOC"... JMP BN01 < CARTE SUIVANTE SVP. WORD XXCMS5 < NUMERO DU RELEASE DE 'CMS5'... < (AINSI, ON SAIT QUEL NOYAU DE BOOT-STRAP < ON VIENT DE CHARGER...) XWOR%1: VAL $-DBN00 < LONGUEUR EN MOTS DU MODULE, XWOR%2: VAL XWOR%1*NOCMO < LONGUEUR EN OCTETS DU MODULE. LDBN00: EQU ZERO+XWOR%1 < LONGUEUR EN MOTS DU MODULE, IF XWOR%1-XLBOOT,XEIF%,XEIF%, IF ATTENTION : LA LONGUEUR DU BOOTSTRAP REEL, OU IF BIEN SA LONGUEUR MAXIMALE PRESUMEE SONT MAUVAISES !!! XEIF%: VAL ENDIF LDBN02: EQU ZERO+XWOR%2 < LONGUEUR EN OCTETS DU MODULE. XWOR%3: VAL NUQFM/NBSPGB < NOMBRE DE 'GB' BLOQUES PAR LA SIMU- < LATION DE 'DKF' SUR 'DKM', XWOR%4: VAL XWOR%3*YY7 < SOIT EN MOTS... IF XWOR%1-XWOR%4,XEIF%,, IF ATTENTION : LE BOOTSTRAP EST TROP LONG !!! XEIF%: VAL ENDIF PAGE < < < C H O S E S D E V A N T S E T R O U V E R < T O U T E N H A U T D E L A M E M O I R E : < < CALL #SISP CMS5 CHECK# < < < V I R T U A L I S A T I O N " P R I M E " < D E ' D K M ' : < < NTRN XWOR%1: VAL GAXCYL+NOCMO-E/NOCMO TRN XWOR%2: VAL DOLA3-XWOR%1 IF XWOR%1-YY7,XEIF%,, IF ATTENTION : LA TABLE "PRIME" DE VIRTUALISATION IF DE 'DKM' DOIT EVIDEMMENT APPARTENIR AU DERNIER IF BLOC DE MEMOIRE ECHANGE !!! XEIF%: VAL ENDIF TVDKMP: EQU ZERO+XWOR%2 < IMPLANTATION DE LA TABLE DE VIRTUALISA- < TION PRIME DE 'DKM'... TVDKMR: EQU TVDKMP < A CAUSE DES REFERENCES EN AVANT... < < < P I L E S D E S B O O T S T R A P S : < < XLKBOT:: VAL '10 < LONGUEUR ARBITRAIRE DE LA PILE < COMMUNE A TOUS LES BOOTSTRAPS... XXKBOT: EQU TVDKMP-XLKBOT-DEPILE PAGE < < < V A L I D A T I O N D E L ' A L L O C A T I O N < M E M O I R E D E S U T I L I S A T E U R S : < < XWOR%1: VAL DOLA2-D < POUR AVOIR UN NOMBRE POSITIF... IF DOLAR4-K,,,XEIF% IF BIZARRE !!! XEIF%: VAL ENDIF XWOR%5: VAL NOCMO=K XWOR%5: VAL -XWOR%5 XWOR%2: VAL MXMEME>XWOR%5 < TAILLE EN MOTS DU PLUS GRAND ESPACE < MEMOIRE ALLOUABLE A UN UTILISATEUR... MARGEB:: VAL 7 < MAJORATION ARBITRAIRE EN NOMBRE DE < BUFFERS (NECESSAIRES POUR LES 'DCTESC', < ET AUTRES...). XWOR%2: VAL MARGEB*YY7+XWOR%2 IF XWOR%1-DOLAR4-XWOR%2,,,XEIF% IF ATTENTION : IL N'Y A PAS ASSEZ DE PLACE IF POUR LES UTILISATEURS !!! XEIF%: VAL ENDIF PAGE < < < G E N E R A T I O N D E L ' A R M E M E N T < D U S Y S I N I D A N S L E B O O T S T R A P : < < XINI: EQU ZERO+NSNSP0+NSPINI < CETTE CONSTANTE EST GENEREE < SOUS FORME 'EQU' ET NON < PAS 'VAL' CAR IL S'AGIT < D'UNE REFERENCE EN AVANT. PAGE < CALL #SISP CMS5 BOOT VISU# PAGE < < < P I L E S D U D E F A U T S E C T E U R < E T D U R E S T A R T : < < PLTH10: EQU $-DEPILE < PILE DU DEFAUT SECTEUR (ASCTUCE..?!??!). XWPILE: VAL 16 < ON FAIT COMME CA, POUR SAVOIR CE < QU'IL UTILISE REELLEMENT... CALL #SISP CMS5 GENPIL2# PILRES: EQU $-DEPILE < PILE DU RESTART. XWPILE: VAL 32 < (MEME REMARQUE...) CALL #SISP CMS5 GENPIL2# PAGE < < < P R O C E S S E U R S L I E S A C M S 4 : < < < NOTA : < UN CERTAINS NBRE DE PROCESSEURS DU < SYSTEME EXECUTENT DES ROUTINES EN < MODE MAITRE ET SONT DE CE FAIT LIES < A LA VERSION COURANTE DE CMS5 < (DEPLACEMENTS PAR RAPPORT A LA BASE < 'C' DE CMS5, 'NSP' DES HANDLERS, FORMAT < GENERAL ET PARTICULIERS DE 'DCT',...). < CES PROCESSEURS LIES A CMS5 SONT : < < !GE SOUS CCI, < !I SOUS CCI, < MASK SOUS !CALL, < TASK SOUS !CALL, < ETC,... < < PAGE < < < A D R E S S E S A C O N N A I T R E : < < WORD ZSYSER < BOUCLAGE SUR SYSER AVEC INTERRUPTIONS < MASQUEES. WORD YSYSER < 'SYSER' N'UTILISANT PAS LA 'SYSER' < NORMALE, LORSQUE 'SMIT' TROUVE IPM#IOM. WORD SYSEP2 < ADRESSE DE BOUCLAGE DES 'SYSERS' SUR < LE PROCESSEUR ESCLAVE... WORD PSTH00 < ADRESSE DE LA 'PSTH00'. WORD PILTH0+DEPILE < ADRESSE DE LA PILE DE 'TH0'. WORD ZRECOV < BOUCLAGE SUR SYSER AVEC INTERRUPTIONS < NON MASQUEES. WORD SYSCBM < SYSER DE DEFAUT SUR LE 'CBM' DE 'TV'... WORD SYSCBN < SYSER DE DEFAUT PERSISTANT ET RECAL- < CITRANT SUR LE 'CBM' DE 'TV'... WORD DEFCBM < DEFAUT SUR LE 'CBM' DE 'TV' LORS DU < PREMIER TOUR DE BALAYAGE DE LA MEMOIRE < AU RESTART DU SYSTEME. WORD DEFCBN < IDEM A 'DEFCBM' AU DEUXIEME TOUR... WORD SYSCBJ < SYSER DE DEFAUT SUR LE 'CBJ' DE 'TV'... WORD SYSCBK < SYSER DE DEFAUT PERSISTANT ET RECAL- < CITRANT SUR LE 'CBJ' DE 'TV'... WORD ZDKM < ADRESSE DE LA SYSER SUR DEMANDEUR < AU 'DKM' NON RECONNU. WORD ZZDKM < SYSER DE COMPTE DE MOTS RESIDUELS NON < NON NUL SUR 'DKM'/'DKU', ALORS QU'UNE < FIN DE CYLINDRE N'EST PAS ATTENDUE. WORD ZZZDKM < SYSER DE COMPTE DE MOTS DEJA ECHANGES < NON MULTIPLE D'UN SECTEUR LORS D'UNE < INTERRUPTION DE FIN DE CYLINDRE SUR < 'DKM'/'DKU'. WORD BTFHDR < POINT D'ENTREE DU BOOT-STRAP 'DKF' < EN MODE 'RECHARGEMENT DU SYSTEME'. WORD BXTIME < ZONE DE LA VALIDATION DE LA DATE DANS < LE BUFFER 'BCOPY', WORD LTIME < ZONE DE LA DATE COURANTE ; AVEC CES 2 < INFORMATIONS, ON PEUT CLASSER LES 2 < COPIES EN BASCULE... WORD ITASYS < ADRESSE DE LA VALEUR D'INITIALISATION < DE 'ETASYS'... WORD XZFREE < NOMBRE DE MOTS DISPONIBLES EN MEMOIRE < HAUTE DU SYSTEME (DOL2) AVANT LES < BOOTSTRAPS ; POUR AUGMENTER CETTE < VALEUR, IL SUFFIT DE REDUIRE LE < NOMBRE DE PAGES DE LA MEMOIRE VIRTUELLE < 'DKB' DE 'DKM'... WORD EDLLP5 < ADRESSE DE BOUCLAGE SUR UN DEFAUT DE < L'IMPRIMANTE ; AU CAS OU LE DEFAUT < SERAIT PERMANENT, IL FAUT FAIRE UN < POINT D'ARRET A CETTE ADRESSE, ET FAIRE < +1 SUR LE REGISTRE 'P'... WORD HDLCRH < IDEM SUR LES LECTEURS DE CARTES... WORD HDLCUC < IDEM SUR LE 'CU2' EN MODE CANAL... WORD HDLCUG < BOUCLAGE SUR UN MAUVAIS MOT D'ETAT < POUR LE 'CU2' EN MODE CANAL... WORD DKMBL1 < NOMBRE DE BLOCS A ENTRELACER LORS DES < TRANSFERTS 'DKU' --> 'MEMTV', WORD DKMBL2 < LONGUEUR DE CES MEMES BLOCS. WORD LINHIB+IJIJDX < ET ADRESSE DE LA LISTE CORRESPONDANTE < D'INHIBITION/AUTORISATION DES BLOCS, < SACHANT QUE CETTE LISTE EST A L'ENVERS... WORD AMEMQ < ADRESSE DE L'ADRESSE EN DADR-MOTS DE LA < ZONE 'TBMEMQ' MOTS DE LONG COPIEE EN PER- < MANENCE PAR 'IDLE' EN MEMOIRE BASSE, < ET PERMETTANT DONC UNE VISUALISATION < PAR "!ACTIVITE...". WORD BMEMQ < ADRESSE EN MEMOIRE BASSE DU BUFFER DE < COPIE UTILISE PAR 'IDLE' : < BMEMQ <-- (AMEMQ)... WORD CHEKPA < AFIN DE POUVOIR SUPRIMER LA 'SYSER' QUI < APPARAIT LORSQUE LES CHECK-SUMS "ROM"- < "RAM" SONT MAUVAIS ; EN EFFET, SI L'ON < FAIT DES PATCHES DU SYSTEME, LES CHECK- < SUMS CALCULES AU 'SYSINI' DEVIENNENT < INCOHERENTS... WORD AFRCHK < DONNE EN ARGUMENT D'UNE OPERATION DE < DECALAGE, LE LOGARITHME EN BASE 2 DE < LA FREQUENCE DES TESTS "ROM"/"RAM" < EXPRIMEE EN 2*65535 MICRO-SECONDES... WORD CPIB0 < TEST QUE L'ON PEUT MODIFIER (EN DIMI- < NUANT LE PARAMETRE 'NPREB0') AFIN DE < DEBLOQUER DES INTERBLOCAGES SUR ATTENTE < DE BUFFERS... NLS WORD GABUZO LST PAGE < < < B U F F E R D ' E C H A N G E ' C R 1 ' --> ' D K F ' : < < BBUFS: EQU $ < < NOTA : < 'BBUFS' NECESSITE 'YY7' < MOTS CE QUI CORRESPOND A < LA TAILLE D'UN SECTEUR DE < 'DKF'... < XWOR%1: VAL ZERO+DOLA3-$ IF XWOR%1-YY7,,,XEIF% IF ATTENTION : IL N'Y A PAS ASSEZ IF DE PLACE POUR 'BBUFS' !!! XEIF%: VAL ENDIF < < < G E S T I O N D E S C H A I N A G E S < D E S B L O C S " R O M " - " R A M " : < < IF ICHAIN-EXIST,,XEIF% IF ATTENTION : LE NOMBRE DE #SISP CMS5 CHECK# IF DOIT ETRE PAIR, TEMOIGANT AINSI PARTIELLE- IF MENT QUE L'ON COMMENCE ET FINIT PAR <ROM> !!! XEIF%: VAL ENDIF WORD CHAINK < AFIN DE RECUPERER LE DEBUT DU CHAINAGE... XWOR%1: VAL '0000000@@@@ CHAIN1: EQU ZERO+XWOR%1 < POUR LE TEST DES CHECK-SUMS, CHAIN2: EQU ZERO+XWOR%1 < ET POUR LEUR GENERATION... CHAINK: @ XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1 XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2 XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE 'CHAINK'... XWOR%4: VAL K XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL?XWOR%4 XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4 XWOR%5: VAL XWOR%4=FCSYMT < ACCES A L'ETAT DU SYMBOLE 'CHAINK'... XWOR%6: VAL MSYMBC=K XWOR%6: VAL NBITMO-B-XWOR%6 XWOR%5: VAL CORBT?XWOR%6=FMASK(K?XWOR%5=FCINST < CLEAR DU BIT 'MSYMBC' DANS L'ETAT... XWOR%6: VAL MSYMBN=K XWOR%6: VAL NBITMO-B-XWOR%6 XWOR%5: VAL CORBT?XWOR%6=FMASK(K?XWOR%5=FCINST < CLEAR DU BIT 'MSYMBN' DANS L'ETAT... XWOR%9: VAL XWOR%5?MSYMBM=FMASK+XWOR%5=FVAL(K?XWOR%4=FCSYMM < < < F I N D E C M S 5 : < < IF XWOR%1-YY7+Z,XEIF%,XEIF%, DZS XWOR%1-YY7+Z < NETTOYAGE DE LA MEMOIRE HAUTE... < (-YY7+Z A CAUSE DE 'LKSYS'...) XEIF%: VAL ENDIF $EQU ZERO PAGE < < < T A B L E D E S S Y M B O L E S : < <