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