< S I S C M S 5 4 PAGE PAGE < < < D C T H A N D L E R V I D E : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTVID: EQU $ PSTVID: WORD K;K;K;K;COM+DEPCS;DCTVID;NIL;PILVID;HANDLR;SMST;SO;SE #@ASCI " VID" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR < FILTRE. WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLVID WORD HDLVID < LA ROUTINE D'INTERRUPTION DE < HDLVID EST AUSSI VIDE QUE < HDLVID LUI-MEME... WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XADCTF < TOUTES LES FONCTIONS SONT RECONNUES. WORD XFONBA < ET TOUTES DOIVENT SE DEROULER EN BAS, < AFIN D'ASSURER UN MAXIMUM DE COMPATI- < BILITE... < < ZONE VARIABLE ET INEXISTANTE... < VARVID: EQU $ IF VARVID-DCTVID-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < PILE : < CALL #SISP CMS5 DOL2# PILVID: EQU $-DEPILE XWPILE: VAL LPILEH+0 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R V I D E : < < < FONCTION : < COMME SON NOM L'INDIQUE, CE < HANDLER NE FAIR RIEN DU TOUT ; < C'EST LA FONCTION "VIDE". BIEN < QUE JE PENSE QU'IL NE SOIT JAMAIS < UTILISE, ON POURRAIT L'UTILISER < POUR PAR EXEMPLE LANCER DES DEMAN- < DONT ON NE VOUDRAIT PAS QU'ELLES < S'EXECUTENT (PAR EXEMPLE POUR < FAIRE LES "!ASSIGN" VIDES...). < < USE L,DCT0 USE W,DEM0 HDLVID: EQU $ RSR < NOTA : ETAT0=K... PAGE < < < A L L O C A T I O N D E L ' E S P A C E M E M O I R E : < < < PHILOSOPHIE : < LA MEMOIRE MAITRE ALLOUABLE EST < DECOUPEE EN "PAGES", OU "BUFFERS" < (OU ENCORE "SECTEURS") DE 'YY7' < MOTS (SOIT LA TAILLE D'UN SECTEUR < REEL DISQUE). < LE "BUFFER" EST L'UNITE PRIMAIRE < DE L'ALLOCATION MEMOIRE ; LES BLOCS < ALLOUES DE TAILLES SUPERIEURES < SERONT COMPOSES D'UN NOMBRE ENTIER < DE BUFFERS ; ON TROUVERA TROIS TYPES < D'ALLOCATION (EN PLUS DE CELLE DES < "BUFFERS") : < < 'B1' : TAILLE=1K MOTS, < 'B2' : TAILLE=2K MOTS, < 'B4' : TAILLE=4K, 8K, 10K, 12K, 16K MOTS. < < < PRIORITES : < A CHAQUE UNITE D'ALLOCATION < ("BUFFERS", 'B1', 'B2', 'B4') < CORRESPOND UNE TACHE, DE MEME < QUE POUR LA DESALLOCATION (OU < 'RELEASE') ; ON RESPECTERA LES < REGLES SUIVANTES : < < PRIORITE(RELEASE) > PRIORITE(ALLOCATION), < PRIORITE(BUFFER) > PRIORITE(B1), < PRIORITE(B1) > PRIORITE(B2), < PRIORITE(B2) > PRIORITE(B4). < < CES REGLES SIGNIFIENT, QU'IL < EST TOUJOURS PLUS URGENT DE RENDRE < QUE D'EMPRUNTER, ET QUE LES PETITES < DEMANDES SONT PLUS FACILES A SATIS- < FAIRE (DE PLUS LES GROSSES ONT TEN- < DANCE A ETRE BLOQUANTES...). < < < TABLE D'ALLOCATION 'TOM' : < L'ALLOCATION MEMOIRE SE FAIT A < L'AIDE D'UNE TABLE DE BITS, CHAQUE < BITS ETANT ASSOCIE A UN "BUFFER", < DONC : < < 1 BIT =UN BUFFER, < 1 OCTET=UN 'B1', < 1 MOT =UN 'B2,... < < PAGE < < < D C T A L L O C A T E U R B U F F E R : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTALB: EQU $ PSTALB: WORD K;K;K;K;COM+DEPCS;DCTALB;NIL;PILALB;HANDLR;SMST;SO;SE #@ASCI " ALB" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR < FILTRE. WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES DEMANDES DE < DEMANDES DE BUFFER (YY7 MOTS). WORD NIL < QUEUE. WORD XXCHV0 < SCHVID DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MALOC < ADRESSE DE LA ROUTINE COMMUNE A < TOUS LES ALLOCATEURS. WORD MALOCB < DANS 'RIT' ON TROUVE L'ADRESSSE < D'UNE ROUTINE SPECIFIQUE A < LA TAILLE TRAITEE. WORD K;K < ETAT. XBITS9:: VAL '0009 < SEUIL POUR 'ALB' : WORD XBITS9 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARALB: EQU $ IF VARALB-DCTALB-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NIL AZONA:: VAL $-D-VARALB < ADRESSE DE LA ZONE OU METTRE LES < ADRESSES OCTETS DES BLOBCS MEMOIRE < ALLOUES. CE SYMBOLE N'EST DEFINIT < QU'AVEC 'DCTALB', IL A LA < MEME VALEUR DANS LES AUTRES DCT < D'ALLOCATEURS. < < PILE DE 'ALB' : < XWPILE: VAL LPILEH+8 PILALB:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T A L L O C A T E U R B 1 : < < DCTAL1: EQU $ PSTAL1: WORD K;K;K;K;COM+DEPCS;DCTAL1;NIL;PILAL1;HANDLR;SMST;SO;SE #@ASCI " AL1" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES < DEMANDES DE BLOC D'1K. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID DZS LSEM WORD XXSIT0 < SIT (INUTILISE) DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MALOC WORD MALOC1 < ROUTINE SPECIFIQUE D'ALLOCATION < DE BLOC TYPE B1. WORD K;K < ETAT. XBITS4:: VAL '0004 < SEUIL POUR 'AL1' : WORD XBITS4 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DE FINITION DE LA ZONE VARIABLE : < VARAL1: EQU $ IF VARAL1-DCTAL1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NIL < < PILE DE 'AL1' : < XWPILE: VAL LPILEH+3 PILAL1:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T A L L O C A T E U R B 2 : < < DCTAL2: EQU $ PSTAL2: WORD K;K;K;K;COM+DEPCS;DCTAL2;NIL;PILAL2;HANDLR;SMST;SO;SE #@ASCI " AL2" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES BLOCS MEMOI < MEMOIRE DE TYPE B2. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MALOC WORD MALOC2 < ROUTINE SPECIFIQUE D'ALLOCATION < DE TYPE B2. WORD K;K < ETAT. XBITS3:: VAL '0003 < SEUIL POUR 'AL2' : WORD XBITS3 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARAL2: EQU $ IF VARAL2-DCTAL2-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NIL < < PILE DE 'AL2' : < XWPILE: VAL LPILEH+3 PILAL2:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T A L L O C A T E U R B 4 : < < DCTAL4: EQU $ PSTAL4: WORD K;K;K;K;COM+DEPCS;DCTAL4;NIL;PILAL4;HANDLR;SMST;SO;SE #@ASCI " AL4" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES < DEMANDES DE BLOCS MEMOIRE B4. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MALOC WORD MALOC4 < ROUTINE SPECIFIQUE D'ALLOCATIOM < DE TYPE B4. WORD K;K < ETAT. XBITS2:: VAL '0002 < SEUIL POUR 'AL4' : WORD XBITS2 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARAL4: EQU $ IF VARAL4-DCTAL4-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NIL < < PILE DE 'AL4' : < CALL #SISP CMS5 DOL2# PILAL4: EQU $-DEPILE XWPILE: VAL LPILEH+3 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R G E N E R A L D ' A L L O C A T I O N < M E M O I R E : < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' DE L'ALLOCATEUR DEMANDE, < (W)=ADRESSE DE LA DEMANDE ARGUMENT, AVEC : < (AMDEM)=ADRESSE-MOT DE LA ZONE OU STOCKER LES < ADRESSES-OCTETS DU OU DES BLOCS ALLOUES. < (CODEM)=NOMBRE DE BLOCS DE MEME TYPE A ALLOUER. < (ASDEM)=UNIQUEMENT POUR 'AL4' : NOMBRE DE K-MOTS < DEMANDES DIVISE PAR 2 : < < =2 : 4K-MOTS, < =3 : 6K-MOTS, < =4 : 8K-MOTS, < =5 : 10K-MOTS, < =6 : 12K-MOTS, < =7 : 14K-MOTS, < =8 : 16K-MOTS. < < < RESULTATS : < (ETAT0)=NOMBRE DE BLOCS ENCORE A ALLOUER, < ((AMDEM))=LISTE DES ADRESSES-OCTETS DES < BLOCS DE MEME TYPE ALLOUES. < < < A T T E N T I O N : < LES UNITES UTILISEES SONT < UN PETIT PEU INCOHERENTES, ON < TROUVE AINSI : < < (AMDEM)=ADRESSE-MOT, < (CODEM)=NOMBRE DE BLOCS, < ((AMDEM))=LISTE D'ADRESSES-OCTETS. < < USE L,DCT0 USE W,DEM0 MALOC: EQU $ LA ARGDEM+AMDEM < A <-- ADRESSE MOT DE LA LISTE. LX ARGDEM+CODEM < X <-- NOMBRE D'UNITES DESIREES. < (A)=@ZONE DE RANGEMENT, < (X)=NBRE DE BLOCS DEMANDES DANS < DANS LE TYPE. STA VAR+AZONA < CONSTITUTION DU RELAI D'INDIRECTION. E100: EQU $ PSR X < SAVE LE NBRE DE BLOCS ENCORE < A ALLOUER. RQST &ASEXAR <<<<PHASE CRITIQUE ENTRE TOUS LES < ALLOCATEURS/RELEASEURS DE MEMOIRE. BSR ARIT < APPEL DE LA ROUTINE SPECIFIQUE < DU TYPE DE BLOC DEMANDE. < ON A AU RETOUR : < - SI (X)#0 : (A)=ADRESSE-OCTET DU BLOC ALLOUE, < - SI (X)=K : ALLOCATION IMPOSSIBLE. PSR A LAD &ASEXAR BSR ARLSE <<<< PHASE CRITIQUE ENTRE TOUS LES PLR A CPZR X < TEST DU RESULTAT DE L'ALLOCATION < SPECIFIQUE... PLR X < RESTAURE NBRE DE BLOCS ENCORE < A ALLOUER+1. JE E101 < CAS OU L'ALLOCATION DEMANDEE < EST IMPOSSIBLE. < < CAS D'UNE ALLOCATION POSSIBLE : < STA &VAR+AZONA < RANGEMENT CHEZ LE DEMANDEUR < DE L'ADRESSE OCTET DU BLOC ALLOUE. IC VAR+AZONA < POUR RANGER L'EVENTUEL BLOC < SUIVANT... JDX E100 < ALLOCATION BLOC SUIVANT (EVENTUEL). E166: EQU $ STX ETAT0 < ON RENVOIE DANS ETAT0, LE < NBRE DE BLOCS ENCORE A < ALLOUER (K SI OK...) RSR < C'EST TOUT... < < CAS D'UNE ALLOCATION IMPOSSIBLE : < < PHILOSOPHIE : DANS LE CAS D'UNE ALLOCATION IMPOSSIBLE, < UN ALLOCATEUR SE BLOQUE SUR UN SEMAPHORE COMMUN A TOUS < LES ALLOCATEURS/RELEASEURS. DES QU'UN RELEASE SERA FAIT (QUEL- < QUE SOIT LE TYPE DES/DU BLOC RELEASE, ON REVEILLERA TOUS < LES ALLOCATEURS EN ATTENTE PAR ORDRE DE LEURS PRIORITE...CE QUI < EST EXCELLENT AU POINT DE VUE POLITIQUE DU SYSTEME. < E101: EQU $ HWAIT: EQU $ < NOTA : < LE CODE QUI SUIT, DE 'PSR' A 'PLR', < SUIVIT PAR UN 'RSR' MANQUANT CORRES- < POND A L'ANCIEN SOUS-PROGRAMME APPELE < 'HWAIT', ET SUPPRIME POUR GAGNER UN < MOT DANS LE 'COMMON'... PSR A LA ARGDEM+OPDEM < ACCES A L'OPERANDE DE LA < DEMANDE. TBT WAITB < TEST DU BIT D'ATTENTE. PLR A JC E166 < NON, LE DEMANDEUR PREFERE NE < PAS ETRE SATISFAIT QUE < D'ATTENDRE. RQST &ASMMEM < ATTENTE D'UN RELEASE QUELCONQUE. JMP E100 < UN RELEASE VIENT D'ETRE FAIT, < TRY AGAIN. PAGE < < < H A N D L E R S S P E C I F I Q U E S < D ' A L L O C A T I O N M E M O I R E : < < < ARGUMENTS : < NEANT... < < < RESULTATS : < (X)=0 : ALLOCATION IMPOSSIBLE, < #0 : L'ALLOCATION A ETE REALISEE, ET : < (A)=ADRESSE-OCTET DU BLOC ALLOUE (A UNE < FRONTIERE DE "BUFFER"). < < < A T T E N T I O N : < L'EXCLUSION DES PHASES < CRITIQUES ENTRE LES DIFFE- < RENTS ALLOCATEURS ET RELEA- < SEURS EST REALISEE PAR 'MALOC' < ET 'MREL', QUI A LEUR TOUR < APPELLENT LES MODULES SPECI- < FIQUES... < < < A T T E N T I O N : < LES MODULES SPECIFIQUES < DETRUISENT LES REGISTRES < 'A', 'B' ET 'X' !!! < < PAGE < < < H A N D L E R A L L O C A T I O N B U F F E R : < < < PHILOSOPHIE : < CONTRAIREMENT AUX AUTRES ALLOCATEURS < MEMOIRE, L'ALLOCATEUR DE BUFFERS PARCOURT < LA TABLE D'OCCUPATION MEMOIRE (TOM) PAR < ADRESSES CROISSANTES, ET CHERCHE LE BLOC < DE 2K-MOTS LE PLUS OCCUPE POUR Y PRENDRE < UN BUFFER. SI 2 OU PLUS, ONT LE MEME NBRE < MINI DE BUFFERS LIBRES ON PREND CELUI < DONT L'ADRESSE EST LA PLUS BASSE. AINSI < ON RECUPERE LA MEMOIRE LIBRE DERRIERE LE < SYSTEME, ET ON NE CONTRARIE PAS LE FONC- < TIONNEMENT DES 3 AUTRES ALLOCATEURS !!!! < < < RESULTAT : < - SI (X)#0 : (A)=ADRESSE OCTET DU BUFFER ALLOUE. < - DE PLUS, SI (X)#0, LA TABLE 'TOMP' EST MISE A JOUR, < INVALIDANT LE BLOC DE 'PLK' K-MOTS AUQUEL APPARTIENT < LE BUFFER ALLOUE. < < MALOCB: EQU $ LXI IJIJDX < DEPART SUR LE MOT0 DE TOM. LBI IJIJDX-I < INITIALISATION FARFELUE DU < NUMERO DU MOT DE TOM CONTENANT < LE BUFFER CHERCHE. LAI NBITMO+Z < INITIALISATION FARFELUE DU COMPTE < MINI DE BUFFERS LIBRES DANS < LE MOT TROUVE DANS TOM. Z200: EQU $ PSR A,B,X LYI K < INITIALISATION A 0 DU COMPTEUR < DE BUFFER LIBRE DANS LE MOT < COURANT (X) DE TOM. LA BUINT TBT NBITAB-B,X < LE BLOC DE 2K DE RANG (X) EST- < IL AUTORISE POUR L'IMPLANTATION < DE BUFFERS ????? JNC Z202 < NON, ON L'IGNORE (Y=K). LA &ATOM < ACCES A UN MOT DE TOM. Z201: EQU $ JAE Z202 < ON A EXPLORE TOUS LES BUFFERS < LIBRES DU MOT COURANT DE TOM(X). DBT < RECHERCHE D'UN BUFFER LIBRE. RBT L,X < OCCUPATION FACTICE POUR COMPTAGE. ADRI I,Y < COMPTE DES BUFFERS LIBRES DNAS < LE MOT COURANT TOM(X). JMP Z201 < AU SUIVANT... Z202: EQU $ PLR A,B,X < RESTAURE LE MIN COURANT, < LE NUMERO DE TOM CHERCHE ET < LE NUMERO DU MOT COURANT DE TOM. CPZR Y JE Z203 < LE MOT COURANT DE TOM N'AVAIT < AUCUN BUFFERS DE LIBRES, < ON L'IGNORE DONC. CPR A,Y JGE Z203 < LE NBRE DE BUFFERS LIBRES < DANS LE MOT COURANT EST SUPERIEUR < OU EGAL AU MIN COURANT, < TOM(X) EST DONC IGORE. < < CAS OU LE NBRE DE BUFFERS LIBRES DANS TOM(X) < EST STRICTEMENT INFERIEUR AU MIN COURANT, < MAIS POSITIF : IL DEVIENT LE MIN COURANT : < LR Y,A < NOUVEAU MIN. LR X,B < NUMERO DU MIN COURANT. Z203: EQU $ ADRI I,X < NUMERO DU MOT SUIVANT DE TOM. XR X,A CPI MEMORY/YY7/NBITMO*UMEM XR X,A JLE Z200 < ACCES AU MOT SUIVANT DE TOM. < < FIN DE RECHERCHE DU MIN : < LR B,X < (X)=NUMERO DU MIN (>0) OU 0 S'IL < N'EXISTE PAS. CPZR X < TEST D'EXISTENCE DU MIN. JE Z204 < IL N'Y A PAS DE BUFFER LIBRE, < RETOUR AVEC (X)=K. < < CAS OU ON A TROUVE UN BUFFER LIBRE : OCCUPATION : < LAD ATOM < (A)=ADRESSE DU RELAI VERS 'TOM' PAR < RAPPORT A 1. BSR ASOBT < OCCUPATION PAR SOBT ; A NOTER < A NOTER QUE L'INDEX (X) INITIAL < DE RECHERCHE EST LE NUMERO DU < MIN, ON S'ARRETERA DONC EN FAIT < DES LE 1ER TOUR... SLLS YY8=K < CONVERSION DU NUMERO DU BUFFER < ALLOUE EN UNE ADRESSE OCTET. PSR A,X SLRS PLK*NOCMO=K LR A,X < (X)=NUMERO PAR RAPPORT A 0 DU BLOC DE < 'PLK' K-MOTS AUQUEL APPARTIENT LE < BUFFER TROUVE. LAI XXTOMP STA &ATOMP < ET INVALIDATION DE CELUI-CI (PLUS DE < PROPRIETAIRE 'UTILISATEUR'...). PLR A,X Z204: EQU $ RSR < RETOUR (X)=K OU #0 SI BUFFER ALLOUE. PAGE < < < H A N D L E R A L L O C A T I O N 1 K : < < < RESULTAT : < - SI (X)#0 : (A)=ADRESSE OCTET DU 'B1' ALLOUE. < < MALOC1: EQU $ LXI MEMORY/YY7/NBITOC*UMEM < PARCOURS OCTET DE 'TOM'. LB K2INT < ACCES A LA LISTE DES BLOCS < DE 2K INTERDITS A L'ALLOCATION. E114: EQU $ CPZR X < A-T'ON PARCOURU TOUTE TOM. JE E115 < OUI, L'ALLOCATION EST DONC < IMPOSSIBLE. ADRI -I,X < ACCES OCTET SUIVANT < < NOTA : < UN OCTET DE 'TOM' REPRE- < SENTE L'OCCUPATION D'UN < 'B1'. < LR X,A < (X)=INDEX DU BLOC 1K=A. SLRS UMEM2K=K XR A,X < (A)=SAVE (X)=INDEX 1K, (X)=INDEX 2K. TBT NBITMO+L,X < LE BLOC DE 2K CONTENANT LE BLOC < COURANT DE 1K EST-IL AUTORISE ??? LR A,X < RESTAURE (X)=INDEX 1K. JNC E114 < LE BLOC DE 1K EST INTERDIT !!! LBY &ATOMB < PARCOURS PAR OCTET. CPI MOCD < TOUS LES BUFFERS DE CE B1 SONT < ILS LIBRES... JNE E114 < ET NON PASSONS AU B1 SUIVANT. < < CAS OU ON A TROUVE UN B1 LIBRE : < LA NSMGB < NSMGB N'A RIEN A VOIR AVEC L'ALLOCATION M < MEMOIRE, MAIS SA VALEUR EST-ELLE < QU'ELLE REMET A 0 LES BITS8-15, < TOUT EN LAISSANT A (FUTUR X) #0... STBY &ATOMB < MAJ DE TOM PAR OCCUPATION DU B1. XR X,A < (A)=NUMERO DU B1, < (X)#0 (ASTUCE...) SLLS YY8*NBITOC=K < CONVERSION DU NUMERO DE B1 < EN UNE ADRESSE D'OCTET. E115: EQU $ RSR PAGE < < < H A N D L E R A L L O C A T I O N 2 K : < < < RESULTAT : < - SI (X)#0 : (A)=ADRESSE OCTET DU B2 ALLOUE. < < MALOC2: EQU $ LXI MEMORY/YY7/NBITMO*UMEM < PARCOURS MOT DE 'TOM'. LB K2INT < ACCES A LA LISTE DES BLOCS < DE 2K INTERDITS A L'ALLOCATION. E116: EQU $ TBT NBITMO-B,X < LE BLOC COURANT DE 2K EST-IL < AUTORISE ??? JNC Z1990 < NON... LA &ATOM < ACCES A UN MOT DE TOM. A NOTER < QU'UN MOT DE TOM REPRESENTE L'ETAT < D'OCCUPATION EN BUFFER D'UN B2. CPI MMOT < TOUS LES BUFFERS DE CE B2 SONT- < ILS LIBRES... JE E117 < OUI, ON A DONC TROUVE UN B2 LIBRE. Z1990: EQU $ JDX E116 < NON PASSGE AU B2 SUIVANR. < < CAS OU L'ON A TROUVE AUCUN B2 LIBRE : (X)=K. < E118: EQU $ RSR < < CAS OU ON A TROUVE UN B2 LIBRE : < E117: EQU $ STZ &ATOM < OCCUPATION DU B2. LR X,A ADRI -IJIJDX,A < (A)=NUMERO DU B2 ALLOUE. SLLS YY8*NBITMO=K < CONVERSION EN ADRESSE D'OCTETS. JMP E118 < PAR ICI LA SORTIE. IF UMEM2K-2,,XEIF%, IF ATTENTION : L'ALLOCATION 2K, 4K,... EST MAUVAISE !!! XEIF%: VAL ENDIF PAGE < < < H A N D L E R A L L O C A T I O N < 4 K , 6 K , 8 K , 1 0 K , 1 2 K : < 1 4 K , 1 6 K : < < < FONCTION : < CE HANDLER EST CHARGE D'ALLOUER < LES TAILLES MEMOIRES SUPERIEURES < OU EGALES A 4K SANS PRIORITES < RELATIVES. < < < ARGUMENT : < (ASDEM)=2 : 4K DEMANDES, < =3 : 6K, < =4 : 8K. < =5 : 10K, < =6 : 12K. < =7 : 14K, < =8 : 16K. < < < RESULTAT : < - SI (X)#0 : (A)=ADRESSE OCTET DU BLOC ALLOUE. < OPMEM4(OPDEM)=MASQUE DESTINE AU RELEASE, < ET INDIQUANT LA POSITION DES BLOCS < DE 2K COMPOSANT L'ESPACE ALLOUE < DANS LA MEMOIRE. < - SI (X)=K : ALLOCATION IMPOSSIBLE. < < MALOC4: EQU $ E120X: EQU $ LA ARGDEM+CODEM < VALIDATION DU CODEM. CPI W < DANS LE CAS DE MALOC4, < L'ALLOCATION NE PEUT PORTER < QUE SUR UN BLOC !!!! < (A CAUSE DU POSITIONNEMENT < DE ASDEM) JE SYSR21 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE RESSAYE AU CAS OU < 'OPDEM' AURAIT ETE MODIFIE A < LA MAIN ; FAIRE ALORS 'JMP E120X'... < SYSR21: EQU $ < < GENERATION D'UNE TABLE D'OCCUPATION < DES BLOCS DE 2K-MOTS (REGISTRE B) : < LBI K < CLEAR TABLE D'OCCUPATION < DES BLOCS DE 2K-MOTS. LXI MEMORY/YY7/NBITMO*UMEM < POUR UN PARCOURS MOT DE 'TOM'. E120: EQU $ LA K2INT < ACCES A LA LISTE DES BLOCS < DE 2K INTERDITS A L'ALLOCATION. TBT NBITAB-B,X < LE BLOC COURANT DE 2K EST-IL < AUTORISE ??? JNC E121 < NON... LA &ATOM < ACCES A L'OCCUPATION D'UN BLOC < DE 2K-MOTS. CPI MMOT < EST-IL ENTIEREMENT LIBRE ???? JNE E121 < NON, IGNORE. SBT NBITMO-B,X < OUI, ON LE MEMORISE DANS B. E121: EQU $ JDX E120 < ENTREE PRECEDENTE DE TOM. < < RECHERCHE DE N BLOCS CONTIGUS DE 2K-MOTS < DANS LA MEMOIRE A L'AIDE DE LA TABLE < D'OCCUPATION (REGISTRE B) : < (N=(ASDEM)) < LX ARGDEM+ASDEM < (X)=2, 3, 4,... < ((X)=NBRE DE BLOCS DE 2K CONTIGUS) LAI BIT < (A)=1. SLLS L,X < (A)=4, 8, 16,..., SOIT : < (A)=2 PUISSANCE (ASDEM). ADRI -N,A < (A)=3, 7, 15,..., SOIT : < (A)=MASQUE CONTENANT AUTANT < DE BITS A 1, QUE L'ON DEMANDE < DE BLOCS DE 2K-MOTS CONTIGUS. ADRI -MEMORY/YY7/NBITMO*UMEM,X < (X)=-14, -13, -12,... SOIT : < -(X)=NBRE DE TESTS MAXIMUM < A EFFECTUER POUR L'ALLOCATION. E122: EQU $ LR A,Y < (Y)=MASQUE COURANT. ANDR B,Y < REGARDONS SI L'ON PEUT TROUVER < A L'EMPLACEMENT COURANT LES < N BLOCS CONTIGUS DE 2K-MOTS. CPR A,Y < A-T'ON TROUVE LES N BLOCS < CONTIGUS DE 2K-MOTS ??? JE E123 < ET OUI... C'EST FINI... SLLS S < DANS LE CAS OU L'ON N'A PAS < TROUVE, ON DEPLACE LE MASQUE < D'UN BIT A GAUCE, SOIT DE 2K < DANS LA TABLE D'OCCUPATION DES < BLOCS DE 2K-MOTS (REGISTRE B). JIX E122 < ET ON RECOMMENCE... < < SORTIE DU HANDLER : < E124: EQU $ < < ON A ICI : < (X)=K : LA RECHERCHE A ECHOUEE (CF. 'JIX'), < (X)#0 : LA RECHERCHE A ABOUTI. < RSR < < CAS OU ON A TROUVE SON BONHEUR : < E123: EQU $ STA ARGDEM+OPDEM < MEMORISONS L'ETAT DU MASQUE < COURANT EN VUE DE RELEASE. < < BOUCLE D'OCCUPATION DES BLOCS DE 2K : < Z741: EQU $ JAE Z740 < FIN DE L'OCCUPATION. DBT < RECHERCHE D'UN BLOC DE 2K-MOTS < A OCCUPER. RBT L,X < MEMORISONS QU'ON L'A OCCUPE. STZ &ATOMB < ET MAJ DE TOM (INDEXE A < PARTIR DE 0). JMP Z741 < BLOC DE 2K SUIVANT. < < CALCUL DE L'ADRESSE-OCTET DU BLOC ALLOUE : < Z740: EQU $ LR Y,A < RESTAURE (A)=MASQUE COURANT. DBT < RECHERCHE DU NUMERO DU 1ER < BLOC DE 2K COMPOSANT LE < BLOC ALLOUE (NUMERO A PARTIR < DE 0). XR X,A < (A)=NUMERO DU 1ER BLOC DE 2K, < ET (X)#0 (!!!!). SLLS YY8*NBITMO=K < CONVERSION EN UNE ADRESSE-OCTET. JMP E124 < VERS LA SORTIE... PAGE < < < D C T R E L E A S E U R B U F F E R : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTRLB: EQU $ PSTRLB: WORD K;K;K;K;COM+DEPCS;DCTRLB;NIL;PILRLB;HANDLR;SMST;SO;SE #@ASCI " RLB" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES < DEMANDES DE RELEASE DE BUFFER. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MREL < ADRESSE DE LA ROUTINE COMMUNE < A TOUS LES RELEASEURS MEMOIRE. WORD MRELB < ROUTINE SPECIFIQUE AU RELEASE < D'UN TYPE DONNE (ICI BUFFER). WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARRLB: EQU $ IF VARRLB-DCTRLB-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NILX AZONR:: VAL $-D-VARRLB < RELAI D'INDIRECTION VERS LA < ZONE OU LE DEMANDEUR A MIS < LA LISTE DE BLOCS A RELEASER. CE < SYMBOLE N'EST DEFINI QUE DANS < LA DCTRLB, IL AURA LA MEME < VALEUR DANS LES AUTRES DCT RELEASEURS. < < PILE DE 'RLB' : < XWPILE: VAL LPILEH+3 PILRLB:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T R E L E A S E U R B 1 : < < DCTRL1: EQU $ PSTRL1: WORD K;K;K;K;COM+DEPCS;DCTRL1;NIL;PILRL1;HANDLR;SMST;SO;SE #@ASCI " RL1" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MREL WORD MREL1 < ADRESSE DE LA ROUTINE SPECIFIQUE < DES RELEASES DE B1. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARRL1: EQU $ IF VARRL1-DCTRL1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NILX < < PILE DE 'RL1' : < XWPILE: VAL LPILEH+3 PILRL1:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T R E L E A S E U R B 2 : < < DCTRL2: EQU $ PSTRL2: WORD K;K;K;K;COM+DEPCS;DCTRL2;NIL;PILRL2;HANDLR;SMST;SO;SE #@ASCI " RL2" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MREL WORD MREL2 < ROUTINE SPECIFIQUE DES RELEASES < DE TYPE B2. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARRL2: EQU $ IF VARRL2-DCTRL2-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NILX < < PILE DE 'RL2' : < XWPILE: VAL LPILEH+3 PILRL2:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T R E L E A S E U R B 4 : < < DCTRL4: EQU $ PSTRL4: WORD K;K;K;K;COM+DEPCS;DCTRL4;NIL;PILRL4;HANDLR;SMST;SO;SE #@ASCI " RL4" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD MREL WORD MREL4 < ROUTINE SPECIFIQUE DES RELEASES < DE TYPE B4. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < DEFINITION DE LA ZONE VARIABLE : < VARRL4: EQU $ IF VARRL4-DCTRL4-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NILX < < PILE DE 'RL4' : < CALL #SISP CMS5 DOL2# PILRL4: EQU $-DEPILE XWPILE: VAL LPILEH+4 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R G E N E R A L D E < R E L E A S E M E M O I R E : < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' DE DESALLOCATION CORRESPONDANTE, < (W)=ADRESSE DE LA DEMANDE COURANTE, AVEC : < (AMDEM)=ADRESSE DE LA LISTE DES ADRESSES-MOTS < DES BLOCS A DESALLOUER, < (CODEM)=LONGUEUR DE LA LISTE PRECEDENTE (NOMBRE < DE BLOCS DE MEME TYPE), < (OPMEM4(OPDEM))=UNIQUEMENT POUR 'RL4', DONNE UN < MASQUE DEFINISSANT LES BLOCS DE < 2K A RENDRE. < < < A T T E N T I O N : < (AMDEM) DONNE UNE ADRESSE- < MOT, (CODEM) UN NOMBRE DE BLOCS, < ET ((AMDEM)) UNE SUITE D'ADRES- < SES-OCTETS !!! < < USE L,DCT0 USE W,DEM0 MREL: EQU $ LA ARGDEM+AMDEM < A <-- ADRESSE MOT DE LA LISTE. LX ARGDEM+CODEM < X <-- NOMBRE D'UNITES A RENDRE. < (A)=ADRESSE-MOT DE LA LISTE, < (X)=NBRE DE BLOCS A RELEASER. STA VAR+AZONR < GENERATION DU RELAI D'INDIRECTION. E104: EQU $ PSR X < SAVE NBRE DE BLOCS ENCORE A RE- < LEASER. RQST &ASEXAR <<<<PHASE CRITIQUE AVEC LES ALLO- < CATEURS/RELEASEURS DE MEMOIRE. LA &VAR+AZONR < ACCES A L'ADRESSE OCTE DE LA 1ERE < BLOC A RELEASER. BSR ARIT < APPEL DE LA ROUTINE SPECIFIQUE < DU RELEASE DDMANDE. LAD &ASEXAR BSR ARLSE < < TEST DE DEBLOCAGE D'ALLOCATEUR EN ATTENTE DE MEMOIRE : < E105: EQU $ < < TEST DU 'BETA' DE 'SEMMEM' : < LA &ASMMEM < TEST DU 'BETA' DE 'SEMMEM' : JAE E106 < 'BETA'=K. TBT XMBETA < TEST BIT DE SIGNE DE 'BETA'. JC E106 < 'BETA'<0. < ON CONSIDERE QUE S'IL EST NEGATIF < OU NUL, IL Y A AU MOINS UN < ALLOCATEUR EN ATTENTE. < < CAS OU IL N'Y A PAS OU PLUS D'ALLOCATEUR EN ATTENTE : < PLR X < RESTAURE NBRE DE BLOCS ENCORE A < RELESAER+1. IC VAR+AZONR < POUR RECUPERER L'EVENTUEL < BLOC SUIVANT. JDX E104 < RELEASE SUIVANT (EVENTUEL). RSR < C'EST TOUT... < < PHILOSOPHIE DU DEBLOCAGE DES ALLOCATEURS : < ILS SONT DEBLOQUES PAR ORDRE DE PRIORITE < DECROISSANTE, DONC LA PLUS PETITE DEMANDE < SERA LA 1ERE SERVIE (CF. ALLOCATION MEMOIRE ET < PHILOSOPHIE PAR LE MEME AUTEUR...) < < NOTA : < ON FAIT UN RLSE MEME SI 'BETA'=K, CAR ON PEUT SE TROUVER < A LA SUITE D'UNE MALENCONTREUSE INTERRUPTION, ENTRE < L'INSTANT OU UNE ALLOCATION A ETE REFUSEE A 'MALOC', ET < L'INSTANT OU IL VA FAIRE SON RQST. (VOIR LE JEU DES < PRIORITES MALOC/MREL). < E106: EQU $ LAD &ASMMEM BSR ARLSE < DEBLOCAGE DE L'ALLOCATEUR DE PLUS < HAUTE PRIORITE EN ATTENTE. < < REMARQUE : CE DEBLOCAGE PEUT TRES BIEN NE MENER A RIEN : IL SE < PEUT TRES BIEN QUE L'ALLOCATEUR NE TROUVE PAS SON BONHEUR AVEC < CE QUI VIENT D'ETRE RELEASE. < JMP E105 < ALLOCATEUR SUIVANT (EVENTUEL). PAGE < < < M O D U L E S S P E C I F I Q U E S < D E R E L E A S E - M E M O I R E : < < < ARGUMENTS : < - (A)=ADRESSE OCTET DU BLOC MEMOIRE A RENDRE. < < < RESULTATS : < NEANT... < < < A T T E N T I O N : < LES EXCLUSIONS DE PHASES CRI- < TIQUES SONT A LA CHARGE DE 'MALOC' < ET 'MREL' ET NON PAS DES MODULES < SPECIFIQUES !!! < < < A T T E N T I O N : < LES MODULES SPECIFIQUES < DETRUISENT LES REGISTRES < 'A', 'B' ET 'X' !!! < < PAGE < < < H A N D L E R R E L E A S E B U F F E R : < < < ARGUMENT : < - (A)=ADRESSE OCTET DU BUFFER A RELEASER. < < < N O T A : < ON NE VERIFIE PAS LORS DU 'RELB' < LA TABLE 'BUINT' ; CECI PERMET DONC UNE < MODIFICATION DYNAMIQUE DE CELLE-CI. < < MRELB: EQU $ LBI K < NETTOYAGE DE B. SCLD NBITMO=K < (B)=NUMERO DU B2 PAR RAPPORT A 0 < AUQUEL APPARTIENT LE BUFFER. ADRI IJIJDX,B < CONVERSION EN UN NUMERO DE B2. XWOR%1: VAL YY8=K < DECALAGE D'ACCES A UN NUMERO BUFFER. SLRS NBITMO=K+XWOR%1 < (A)=NUMERO DE BUFFER DANS B2. LR B,X < (X)=NUMERO DU B2. LB &ATOM < ACCES A LA TABLE D'OCCUPATION < DU B2. XR A,X < (X)=NUMERO DU BUFFER DANS B2. TBT NBITMO+L,X < TEST DU BUFFER RENDU... JNC SYSR22 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... SYSR22: EQU $ SBT NBITMO+L,X < RELEASE DU BUFFER. XR A,X < (X)=NUMERO DU B2. STB &ATOM < MAJ DE TOM. RSR PAGE < < < H A N D L E R R E L E A S E 1 K : < < < ARGUMENT : < - (A)=ADRESSE OCTET DU B1 A RELEASER, < < MREL1: EQU $ XWOR%1: VAL YY8=K < POUR LES ADRESSES OCTETS... SLRS NBITOC=K+XWOR%1 < CONVERSION EN UN NUMERO DE < B1 PAR RAPPORT A 0. LR A,X < (X)=NUMERO DE B1/0. LBY &ATOMB < TEST DU B1 RENDU... JAE SYSR23 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS EN TOUT < CAS IL FAUT ETRE PRUDENT AFIN < DE NE PAS RENDRE DES BUFFERS < OCCUPES EN CONTINUANT EN SEQUENCE... < SYSR23: EQU $ LAI MOCD STBY &ATOMB < RELEASE DU B1. RSR PAGE < < < H A N D L E R R E L E A S E 2 K : < < < ARGUMENT : < - (A)=ADRESSE OCTET DU B2 A RELEASER. < < MREL2: EQU $ XWOR%1: VAL YY8=K < POUR LES ADRESSES OCTETS... SLRS NBITMO=K+XWOR%1 < CONVERSION EN UN NUMERO DE B2 PAR < RAPPORT A 0. ADRI IJIJDX,A < CONVERSION EN UN NUMERO DE B2. LR A,X < (X)=NUMERO DU B2 A RELEASER. LA &ATOM < TEST DU B2 RENDU... JAE SYSR24 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS EN TOUT < CAS, IL FAUT ETRE TRES PRUDENT, < AFIN DE PAS RENDRE DE LA MEMOIRE < OCCUPEE, CE QUI SE PASSERA SI L'ON < CONTINUE EN SEQUENCE... < SYSR24: EQU $ LBI MMOT < TOUS BUFFERS DE B2 RELEASES. STB &ATOM < MAJ DE TOM. RSR PAGE < < < H A N D L E R R E L E A S E < 4 K , 6 K , 8 K , 1 0 K , 1 2 K : < 1 4 K , 1 6 K : < < < ARGUMENT : < (OPDEM)=MASQUE INDIQUANT LES BLOCS DE 2K-MOTS < COMPOSANT L'ESPACE MEMOIRE A RELEASER. < < MREL4: EQU $ LA ARGDEM+CODEM < VALIDATION DU CODEM. CPI W < DANS LE CAS DE MREL4, ET PAR < SYMETRIE AVEC MALOC4, ON NE < PEUT QUE RELEASER QU'1N BLOC !!! JNE Z744 < E R R E U R S Y S T E M E ... LBI MMOT < INDICATEUR 'BLOC DE 2K LIBRE'. LA ARGDEM+OPDEM < RECUPERATION DU MASQUE GENERE < PAR MALOC4, ET INDIQUANT LES < BLOCS DE 2K COMPOSANT L'ESPACE < A RELEASER. < < BOUCLE DE RELEASE : < Z742: EQU $ JANE Z743 < IL RESTE AU MOINS UN BLOC DE 2K < A RELEASER. RSR < SINON, RETOUR. Z743: EQU $ DBT < RECHERCHE D'1N BLOC DE 2K. RBT L,X < MEMORISATION DE LA DESOCCUPATION < DU BLOC DE 2K (X). CPZ &ATOMB < VALIDATION DU RELEASE. JE SYSR25 < OK. Z744: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS LA PLUS < GRANDE PRUDENCE S'IMPOSE, CAR SI < ON CONTINUE EN SEQUENCE, ON RISQUE < DE RENDRE DE LA MEMOIRE OCCUPEE... < SYSR25: EQU $ STB &ATOMB < LIBERATION DU BLOC DE 2K. JMP Z742 < VERS LA LIBERATION DE L'EVENTUEL < BLOC DE 2K SUIVANT. PAGE < < < D C T M E M O I R E : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTMEM: EQU $ PSTMEM: WORD K;K;K;K;COM+DEPCS;DCTMEM;NIL;PILMEM;HANDLR;SMST;SO;SE #@ASCI " MEM" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES < DEMANDES SUR LEPERIPHERIQUE < MEMOIRE... WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLMEM < ADRESSE DU HANDLER MEMOIRE. WORD NIL < PAS DE RIT. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE DE LA DCT : < VARMEM: EQU $ IF VARMEM-DCTMEM-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD NILX EMEMEM:: VAL $-D-VARMEM < RELAI INDIRECT VERS LA < ZONE EMETTRICE. WORD NILX RECMEM:: VAL $-D-VARMEM < RELAI INDIRECT VERS LA < ZONE RECEPTRICE. < < PILE DE 'MEM' : < CALL #SISP CMS5 DOL2# PILMEM: EQU $-DEPILE XWPILE: VAL LPILEH+2 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R M E M O I R E : < < < FONCTION : < CETTE TACHE SIMULE UN PERI- < PHERIQUE QUI EST EN FAIT LA < MEMOIRE MAITRE DU SYSTEME ; < IL PERMET DONC DE FAIRE DES < MOUVEMENTS DE MEMOIRE A ME- < MOIRE, L'UNE DES ZONES MEMOI- < RE SIMULANT UN PERIPHERIQUE... < < < ARGUMENTS : < - (L)=ADRESSE DCT, < - (W)=ADRESSE DEMANDE. < - (AMDEM)=ADRESSE OCTET DU BUFFER, < - (ASDEM)=ADRESSE OCTET DU PERIPHERIQUE, < - (CODEM)=NBRE D'OCTETS A TRANSFERE. < < < NOTA IMPORTANT : < LE PASSAGE DU SYSTEME AU-DELA DE 32K < IMPLIQUE QUELQUES MODIFICATIONS, AINSI : < < SI TYPAD(NSPTYP)=1, ALORS UNE DES 2 ADRESSES < AMDEM OU ASDEM EST UNE ADRESSE DE MOT, ET PEUT < DONC ETRE SUPERIEURE A 32K, MAIS NE PEUT PAS < POINTER SUR UN OCTET DE RANG IMPAIR... LA < DISCRIMINATION AMDEM/ASDEM SE FAIT PAR LE < WHOMEM(OPDEM) : WHOMEM:: VAL NBITMO-B < BIT DISCRIMINANT AMDEM ET ASDEM. < BIT15=K : AMDEM=ADRESSE DE MOT, < ASDEM=ADRESSE D'OCTET. < BIT15=1 : AMDEM=ADRESSE D'OCTET, < ASDEM=ADRESSE DE MOT. < < < FONCTIONNEMENT DU PERIPHERIQUE MEMOIRE : < < - EN LECTURE (K): L'EMETTEUR EST ASDEM, < LE RECEPTEUR EST LE BUFFER AMDEM : < (ASDEM) --> (AMDEM). < < - EN ECRITURE (1):L'EMETTEUR EST LE BUFFER AMDEM, < LE RECEPTEUR EST ASDEM : < (AMDEM) --> (ASDEM). < < < A T T E N T I O N : < LE HANDLER MEMOIRE, POUR ETRE UTILISE < A LA PLACE DE N'IMPORTE QUEL AUTRE HANDLER < PERIPHERIQUE NE TESTE PAS LES SENS < INEXISTANTS. < (ETAT0 TOUJOURS A 0). < < USE L,DCT0 USE W,DEM0 HDLMEM: EQU $ TBT TYPAD < Y-A-T'IL UNE ADRESSE DE MOT ??? JC MEM10 < ET OUI... < < < C A S D E 2 A D R E S S E S D ' O C T E T : < < LA ARGDEM+CODEM JAE Z41 < RIEN A FAIRE, LE COMPTE D'OCTETS < EST NUL. < < ACCES AUX OPERANDES DU TRANSFERT : < < < TEST LECTURE/ECRITURE : < LA ARGDEM+OPDEM < ARGUMENT DE LA DEMANDE. XWOR%1: VAL FGW=K < ACCES A LA FONCTION 'ECRITURE'. TBT NBITMO-B-XWOR%1 < TEST DU BIT LECTURE/ECRITURE. LA ARGDEM+AMDEM < (A)=@BUFFER CLASSIQUE. LB ARGDEM+ASDEM < (B)=@PERIPH. CLASSIQUE. JNC E140 < IL S'AGIT D'UNE LECTURE 0 < (PERIPHERIQUE VERS BUFFER), < L'EMETTEUR EST DONC LE PERIPH. B, < ET LE RECEPTEUR EST LE BUFFER A. < < CAS D'UNE ECRITURE 1 (BUFFER VERS PERIPHERIQUE). L'EMETTEUR EST < LE BUFFER A, ET LE RECEPTEUR EST LE PERIPH. B. < XR A,B E140: EQU $ < < ON A DONC ICI : < - (A)=ADRESSE DU RECEPTEUR, < - (B)=ADRESSE DE L'EMETTEUR. < PSR B < SAVE EMETTEUR BSR AMEM STA VAR+RECMEM < GENERATION DU RELAI INDIRECT < INDEXE VERS LE RECEPTEUR. LR X,Y < (Y)=INDEX INITIAL RECEPTEUR. PLR A < RESTAURE EMETTEUR DANS A. BSR AMEM STA VAR+EMEMEM < GENERATION DU RELAI INDIRECT < VERS LA ZONE EMETTRICE. LB ARGDEM+CODEM < ACCES AU COMPTE D'OCTETS A TRASFERER. < < ON A DONC ICI : < - (X)=INDEX EMETTEUR INITIAL, < - (Y)=INDEX RECEPTEUR INITIAL, < - (B)=COMPTE D'OCTETS A TRANSFERE. < E130: EQU $ LBY &VAR+EMEMEM < ACCES A UN OCTET A EMETTRE. XR X,Y < ACCES A L'INDEX DU RECEPTEUR. STBY &VAR+RECMEM < RANGEMENT DE L'OCTET DANS < LE RECEPTEUR. XR X,Y < RESTAURE INDEX EMETTEUR. ADRI I,X < PROGRESSION INDEX EMETTEUR. ADRI I,Y < PROGRESSION INDEX RECEPTEUR. ADRI -I,B < DECOMPTE DES OCTETS A TRANSFERER. CPZR B < TEST D'ARRET SUR COMPTE < D'OCTETS NUL. JG E130 < IL Y A ENCORE DES OCTETS < A TRANSFERE. Z41: EQU $ RSR < < < C A S O U I L Y A U N E A D R E S S E - M O T : < < MEM10: EQU $ LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS A DEPLACER. JAE Z41 < IL EST NUL, RIEN A FAIRE... PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE. LA ARGDEM+OPDEM TBT WHOMEM < QUI EST MOT : ASDEM OU AMDEM ??? LA ARGDEM+AMDEM LB ARGDEM+ASDEM LXI K < INDEX DE AMDEM, LYI K < INDEX DE ASDEM. JC MEM11 < AMDEM EST UNE ADRESSE D'OCTET. < < CAS OU ASDEM EST UNE ADRESSE D'OCTET : < XR A,B SLRS NOCMO=K < CONVERSION EN UNE ADRESSE DE MOT, ADCR Y < ET MISE A JOUR DE L'INDEX. XR A,B JMP MEM12 < < CAS OU AMDEM EST UNE ADRESSE DE MOT : < MEM11: EQU $ SLRS NOCMO=K < CONVERSION EN UNE ADRESSE DE MOT, ADCR X < ET MISE A JOUR DE L'INDEX. < < CHOIX DU SENS DE L'OPERATION : < MEM12: EQU $ PSR A LA ARGDEM+OPDEM < ACCES A LA FONCTION DEMANDEE ??? XWOR%1: VAL FGW=K < ACCES A LA FONCTION 'ECRITURE'... TBT NBITMO-B-XWOR%1 < LECTURE OU ECRITURE ??? PLR A JNC MEM13 < 0 : LECTURE (ASDEM --> AMDEM). XR A,B < 1 : ECRITURE (AMDEM --> ASDEM), XR X,Y < ET ON PERMUTE... MEM13: EQU $ STA VAR+RECMEM < DEFINITION DE L'EMETTEUR, STB VAR+EMEMEM < ET DU RECEPTEUR. LB ARGDEM+CODEM < (B)=NOMBRE D'OCTETS A DEPLACER... < < BOUCLE D'ECHANGE DES OCTETS : < MEM14: EQU $ PSR B < SAUVEGARDE DU DECOMPTE... LA VAR+EMEMEM LR A,W < (W)=ADRESSE MOT DE L'EMETTEUR. LR Y,A < INDEX DE L'EMETTEUR, TBT NBITMO-B < EST-CE UN OCTET PAIR ??? JC MEM15 < NON, IMPAIR... LBY O,W < ACCES DIRECT A UN OCTET PAIR. JMP MEM16 MEM15: EQU $ IC VAR+EMEMEM < PROGRESSION DE L'ADRESSE DE L'EMETTEUR < LORSQU'ON PASSE SUR UN OCTET IMPAIR. LA O,W ANDI MOCD < (A)=OCTET DEMANDE. MEM16: EQU $ LB VAR+RECMEM LR B,W < (W)=ADRESSE MOT DU RECEPTEUR. LR X,B < INDEX DU RECEPTEUR, TBT NBITAB-B < EST-CE UN OCTET PAIR ??? JC MEM17 < NON, IMPAIR... STBY O,W < FACILE POUR LES OCTETS PAIRS... JMP MEM18 MEM17: EQU $ IC VAR+RECMEM < LORSQU'ON PASSE SUR UN OCTET IMPAIR, < ON FAIT PROGRESSER L'ADRESSE < DU RECEPTEUR... LR A,B < SAUVEGARDE DE L'OCTET DANS B. LA O,W ANDI MOCG < NETTOYAGE PRELIMINAIRE... ORR B,A < ET INSERTION DE L'OCTET, STA O,W < PUIS RANGEMENT... < < PASSAGE A L'OCTET SUIVANT : < MEM18: EQU $ ADRI I,X ADRI I,Y PLR B < RESTAURE LE DECOMPTE... ADRI -I,B < DECOMPTE DES OCTETS... CPZR B < EN RESTE-T'IL ??? JG MEM14 < OUI... PLR W < RESTAURE L'ADRESSE DE LA DEMANDE. JMP Z41 < ET NON... PAGE < < < G E N E R A T I O N D ' U N R E L A I - M E M O I R E : < < < FONCTION : < CE SOUS-PROGRAMME DONNE A < PARTIR D'UNE ADRESSE-OCTET < UN RELAI-MOT INDEXE VERS LA < ZONE MEMOIRE CORRESPONDANTE, < AINSI QUE LE NUMERO (0 OU 1) < DU PREMIER OCTET SIGNIFICA- < TIF. < < < ARGUMENTS : < - (A)=ADRESSE OCTET DU BUFFER. < < < RESULTATS : < - (A)=RELAI INDIRECT & INDEXE EN MOT DU BUFFER, < - (X)=K SI LE 1ER OCTET EST A GAUCHE, < - (X)=1 SI LE 1ER OCTET EST A DROITE. < < MEM: EQU $ SCRS NOCMO=K < CONVERSION EN UNE ADRESSE DE < MOT ET MISE DU NUMERO DU 1ER < OCTET EN BIT0 DE A. < NUMERO DU 1ER OCTET DE L'ECHANGE. < BIT0=K SI OCTET GAUCHE, < BIT0=1, SI OCTET DROIT. LXI K < INITIALISATION DE X. ADCR X < ON A DONC AINSI DANS X LE < NUMERO DU 1ER CARACTERE A ECHANGER < DANS LE BUFFER DONT L'ADRESSE < DE MOT EST DANS A. SBT BITX < L'ADRESSE DU BUFFER EST TRANSFORMEE EN < UN RELAI INDEXE. RSR PAGE < < < D C T D E T R A I T E M E N T D E S S V C : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTSVC: EQU $ PSTSVC: WORD K;K;K;K;COM+DEPCS;DCTSVC;XXDISW;PILSVC;DISPAT;SMST;SO;SE #@ASCI " SVC" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR < FILTRE. WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL WORD NIL WORD XXCHV0 DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD RUNSVC < ES. WORD NIL WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... XWOR%1: VAL XFONBA < INITIALISATION DE L'ALTITUDE D'EXECU- < TION DES SERVICES IMMEDIATS... WORD XWOR%1 < DCTFUP (POUR LES SERVICES IMMEDIATS). < < < Z O N E V A R I A B L E : < < VARSVC: EQU $ IF VARSVC-DCTSVC-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < RELAIS DIVERS : < WORD TXQUIT,X AXQUIT:: VAL $-D-VARSVC < RELAI VERS LA TABLE D'EXECUTION < DES QUIT (DE '1E06 A '1EF6). WORD DCTEJ+LSIT SEJ:: VAL $-D-VARSVC < SYNCHRONISATION DE RUN-SVC ET < DE END JOB, LORS D'UNE DEMANDE < END JOB. WORD E741X AE741X:: VAL $-D-VARSVC < RELAI D'ACCES AU MODULE DU HANDLER TRAI- < TANT LA DISCRIMINATION DE LA MEMOIRE < HAUTE/BASSE, ET L'ALLOCATION DU NIVEAU < DE SERVICE. WORD SVCDKU ASVCDK:: VAL $-D-VARSVC < MODULE MIS EN SOUS-PROGRAMME A CAUSE DE < CES MAUDITS SAUTS SUPERIEURS A 128 MOTS, < DESTINE A GENERER LE 'NSPTYP' DE LA < DEMANDE COURANTE, DE PLUS IL EST < DESTINE A PRENDRE EN COMPTE LES DEMANDES < A 'DKU' ET AU 'SGN' LORSQU'IL Y A UN < VOLUME POUR CET UTILISATEUR... WORD PSVC1 APSVC1:: VAL $-D-VARSVC < MODULE MIS EN SOUS-PROGRAMME A CAUSE < DES SAUTS SUPERIEURS A 128 MOTS, ET < DESTINE A VERIFIER EXAUSTIVEMENT LE < 'COESC' ET 'AMESC' DE LA DEMANDE < ARGUMENT... < < DEMANDE ARGUMENT DE L'ESCLAVE : < DESCAR:: VAL $-VARSVC DZS LFDESC < ZONE DE RECOPIE DE LA DEMANDE ARGUMENT DE < L'ESCLAVE ; ON PREPARE AINSI L'ACCES A < DEMANDES DANS LES ESPACES DE SWAPPING... < < LISTE DES AUTOMATES DE SERVICES IMMEDIATS : < WORD NIL OTOACT: EQU $-D < CAS D'UN SERVICE IMMEDIAT (SANS < NSP) ; IL Y AURA JUSTE UNE < DEMANDE DE REACTIVATION. OTOAMF:: VAL $-D-VARSVC < MEMOIRE FREE EOTO1: WORD SWAPO;RLMESC;RUNO;ALMESC;SWAPI;ISLOE;EOTO1-$ OTOAMO:: VAL $-D-VARSVC < MEMOIRE OCCUPEE < < LISTE DES AUTOMATES DE SERVICES ESCLAVES NON SWAPPABLES : < EOTO2: WORD SERESC;EOTO2-$ OTOSNP: EQU $-D < SERVICE DE NSP>=(HINSP). OTOMF:: VAL $-D-VARSVC < AUTOMATE 'MEMOIRE FREE'. EOTO3: WORD SERESC;SWAPO;RLMESC;RUNO;ALMESC;SWAPI;ISLOE;EOTO3-$ OTOMO:: VAL $-D-VARSVC < AUTOMATE 'MEMOIRE OCCUPEE'. < < LISTE DES AUTOMATES DE SERVICES ESCLAVES SWAPPABLES : < EOTO4: WORD OMOV1;SWAPO;RLMESC;SERESC;ALMESC WORD SWAPI;ISLOE;OMOV2;EOTO4-$ OTOSP: EQU $-D < SERVICE DE NSP<(HINSP). < < LISTE DES AUTOMATES D'ACCES AU CCI : < EOTO6: WORD SWAPOP;RLMESC;RUNCCI;ALMESC;SWAPI;ISLOE;EOTO6-$ CCISP: EQU $-D < DEMANDE DE CCI AVEC : < MIN(NSPIN,NSPOUT)<(HINSP). CCISNP: EQU CCISP < QUELQUE SOIT LE NSPIN DE < L'ESCLAVE, ON SWAPPERA OUT < AVANT LE RUNCCI. < < LISTE DE LA LISTE DES AUTOMATES : < LOTO:: VAL $-VARSVC < RELAI DES AUTOMATES DE SERVICE. WORD LLOTO,X LLOTO: EQU $ < DEBUT DE LA LISTE DES AUTOMATES : XOTIM:: VAL $-LLOTO < 'SERVICES IMMEDIAT'. WORD OTOACT XOTNP:: VAL $-LLOTO < 'SERVICE NON PRIORITAIRE'. WORD OTOSNP XOTP:: VAL $-LLOTO < 'SERVICE PRIORITAIRE'. WORD OTOSP XOTCNP:: VAL $-LLOTO < 'CCI NON PRIORITAIRE'. WORD CCISNP XOTCP:: VAL $-LLOTO < 'CCI PRIORITAIRE'. WORD CCISP IF XOTP-XOTNP-BIT,,XEIF%, IF ATTENTION : IL FAUT XOTP=XOTNP+CARY !!! XEIF%: VAL ENDIF IF XOTCP-XOTCNP-BIT,,XEIF%, IF ATTENTION : IL FAUT XOTCP=XOTCNP+CARY !!! XEIF%: VAL ENDIF < < DONNEES DE VALIDATION < DE 'COESC' ET 'AMESC' : < WORD NILK ADINEX:: VAL $-D-VARSVC < ADRESSE DU PREMIER OCTET AU-DELA DE < L'ESPACE UTILISATEUR... < < POUR GERER LES EXTENSIONS < 'CDA' DE 'DKU' : < WORD OCDA SVCDO:: VAL $-D-VARSVC < PSEUDO-REGISTRE DONNANT L'ORIGINE DE < LA 'CDA' COURANTE, WORD ECDA SVCDE:: VAL $-D-VARSVC < PSEUDO-REGISTRE DONNANT LA FIN DE < LA 'CDA' COURANTE. WORD MEMTV0 SVCDIO:: VAL $-D-VARSVC < ORIGINE DE LA 'CDAI', WORD MEMTVR-Z SVCDIE:: VAL $-D-VARSVC < FIN DE LA 'CDAI'. XWOR%4: VAL LK>DADR*IMCDAJ=K XWOR%4: VAL PAGEIJ>XWOR%4 < DEPLACEMENT D'ACCES A LA PAGE D'EMULATION < DE LA 'CDAI' DANS LA 'CDAJ' LORSQU'IL Y < A UNE COMMANDE "!CDAI=J" ACTIVE... WORD MCDAJO+XWOR%4 SVCDJO:: VAL $-D-VARSVC < ORIGINE DE LA 'CDAJ+4', WORD MCDAJE+XWOR%4 SVCDJE:: VAL $-D-VARSVC < FIN DE LA 'CDAJ+4'. < < < P I L E D E ' H D L S V C ' : < < XWPILE: VAL LPILED+20 PILSVC:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < T A B L E D E S F O N C T I O N S I M M E D I A T E S < O U P S E U D O - I M M E D I A T E S D U S V C : < < TRSIM: EQU $ < TABLE DES RELAIS DES FONCTIONS. WORD E743 < END-JOB INACCESSIBLE DIRECTEMENT < MEME SOUS :SYS !!!!!! FONEJ:: VAL $-D-TRSIM WORD SVCCCI < APPEL CCI. FONCCI:: VAL $-D-TRSIM WORD SVCCIM < APPEL CCI NON INTERACTIF : LE < MESSAGE A ANLYSER EST ARGUMENT < DU SVC. FOCCIM:: VAL $-D-TRSIM < FOCCIM DOIT ETRE UN CODE < DE FAUX SERVICE IMMEDIAT ET < ECRITURE ('02), AFIN QU'UN < OMOV1 DEPLACE LE MESSAGE A < ANALYSER VERS BUFESC. WORD SVCNSP < CONNEXION DE :SYS A UN NSP. FONNSP:: VAL $-D-TRSIM WORD SVCMEM < CHANGEMENT DE LA TAILLE DE < L'ESPACE MEMOIRE D'UN ESCLAVE. FONMEM:: VAL $-D-TRSIM WORD SVCDOR < MISE EN SOMMEIL D'UN ESCLAVE < POUR UN TEMPS DETERMINE, SANS < REVEIL POSSIBLE. FONDOR:: VAL $-D-TRSIM WORD Z67 FONSCH:: VAL $-D-TRSIM < FONCTION DE PASSAGE DE MAIN < D'UN ESCLAVE. WORD E743 < 7 : FONCTION INEXISTANTE. WORD SVCZDC FONFR:: VAL $-D-TRSIM < FAUSSE LECTURE A PARTIR DE BUFESC < (ET ACCES EVENTUEL A ZDC) WORD E743 < 9 : FONCTION INEXISTANTE. WORD SVCZDC FONFW:: VAL $-D-TRSIM < FAUSSE ECRITURE DANS BUFESC. < (ET MAJ EVENTUELLE DE ZDC) < < < A T T E N T I O N : < IL FAUT FONMEM>2 & #'A, A CAUSE DES < TESTS FAITS EN 'E744' SUR LA NATURE DE < L'OPERATION DEMANDEE. < DE MEME FONDOR>2 & #'A. < < IL FAUT FOCCIM=2 : C-A-D UN CODE D'ECRITURE... < IL FAUT FONFR=8 : C-A-D UN CODE DE LECTURE... < IL FAUT FONFW=A : C-A-D UN CODE D'ECRITURE... < < XWOR%1: VAL MKESEF+N < BIT DISCRIMINANT CERTAINES E/S. IF FONMEM-FGX,,,XEIF% IF ATTENTION : 'FONMEM' EST MAUVAIS !!! XEIF%: VAL ENDIF IF FONMEM-FGX-XWOR%1,XEIF%,,XEIF% IF ATTENTION : 'FONMEM' EST MAUVAIS !!! XEIF%: VAL ENDIF IF FONDOR-FGX,,,XEIF% IF ATTENTION : 'FONDOR' EST MAUVAIS !!! XEIF%: VAL ENDIF IF FONDOR-FGX-XWOR%1,XEIF%,,XEIF% IF ATTENTION : 'FONDOR' EST MAUVAIS !!! XEIF%: VAL ENDIF IF FOCCIM-FGX,,XEIF%, IF ATTENTION : 'FOCCIM' EST MAUVAIS !!! XEIF%: VAL ENDIF IF FONFR-FGR-XWOR%1,,XEIF%, IF ATTENTION : 'FONFR' EST MAUVAIS !!! XEIF%: VAL ENDIF IF FONFW-FGX-XWOR%1,,XEIF%, IF ATTENTION : 'FONFW' EST MAUVAIS !!! XEIF%: VAL ENDIF NFON:: VAL $-TRSIM < LONGUEUR DE LA TABLE = NBRE DE < FONCTIONS IMMEDIATES. WORD E741X8 FONHAU:: VAL $-D-TRSIM < FAUSSE FONCTION IMMEDIATE UTILISEE < LORSQU'UN ESCLAVE DOIT PASSER DE LA < MEMOIRE HAUTE A LA MEMOIRE BASSE POUR < SERVICE IMMEDIAT... <******************************************************************************* XWOR%F: VAL FONCCI FONCCI: @VAL '0@@@@ < FONCTION D'APPEL DU 'CCI' PAR 'SVC'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FOCCIM FOCCIM: @VAL '0@@@@ < FONCTION D'APPEL DU 'CCI' INTERPRETATIF. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FONMEM FONMEM: @VAL '0@@@@ < FONCTION CHANGEMENT DE LA TAILLE MEMOIRE. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FONDOR FONDOR: @VAL '0@@@@ < FONCTION MISE EN SOMMEIL DE L'ESCLAVE. CALL #SISP CMS5 GEN CTE# <******************************************************************************* PAGE < < < T A C H E D E P R E - T R A I T E M E N T < D E S S V C E S C L A V E S : < < < FONCTION : < CETTE TACHE SYNCHRONISE PAR 'SVCESC' EST < CHARGEE DE RECUPERER LES ARGUMENTS DE < LA SVC ESCLAVE, DE TRANSFORMER < CES ARGUMENTS DANS LE FORMAT < COMPATIBLE AVEC CHAND, DE CHOISIR < L'AUTOMATE DE SERVICE (EN FONCTION < DE LA POSITION DU NSPXXX DEMANDE < PAR RAPPORT A HINSP), ET ENFIN DE < DEMANDER L'ALLOCATION D'UN HANDLER DE < SERVICE... < < < N O T A : < POUR SAVOIR SI UN NVP EST ASSIGNE OU PAS, < IL SUUFIT D'ENVOYER UNE FONCTION INEXISTANTE < SUR LUI (PAR EXEMPLE 'F), ET DE TESTER < LE CODE ERREUR AU RETOUR : < - '81 : LE NVP N'EST PAS ASSIGNE, < - '83 : LE NVP EST ASSIGNE. < < CALL #SISP CMS5 DOL2# CALL #SISP CMS5 CHECK# RUNSVC: EQU $ < < < R E C U P E R A T I O N D E L ' E S C L A V E : < < LR L,Y < (Y)=@DCT-SVC LXI NSPACT < NSP DU NIVEAU ESCLAVE. BSR ACADCT < (L)=@DCT-ESCLAVE. STZ &ADCTSY < CE RAZ EST DESTINE A HDLHOR. IC COMPT0-DCTESC,L < COMPTABILISATION DES SVC. < (EXECUTES PAR CET ESCLAVE) LA PSTESC-DCTESC+RSLO,L < (A)=(SLO), LB PSTESC-DCTESC+RSLE,L < (B)=(SLE). WOE < WRITE SLO,LE < < < P R E P A R A T I O N D E S T E S T S < D E V I O L A T I O N M E M O I R E : < < LA DEMSWP-DCTESC+T+CODEM,L ADRI -SLOESC*NOCMO,A < (A)=TAILLE EN OCTETS DE L'ESPACE MEMOIRE < REEL DE L'UTILISATEUR ; NE PAS OU- < BLIER QU'IL DIFFERE DE L'ESPACE < SWAPPE PAR 'SLOESC'... XR Y,L < POUR ATTEINDRE 'DCTSVC', STA VAR+ADINEX < ON MEMORISE AINSI L'ADRESSE DU PREMIER < OCTET INACCESSIBLE LORS D'UNE ENTREE- < SORTIE ; CETTE VALEUR SERA DECREMENTEE < D'UNE UNITE DANS LE CAS DE 'NSPNXS' ET < DE 'NSPNXP'... XR Y,L < RESTAURATIONS... JAG Z1960E < OK, CETTE ADRESSE EST CORRECTE... XWOR%1: VAL SLOESC*NOCMO IF MXMEME-XWOR%1-K,,,XEIF% IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!! XEIF%: VAL ENDIF BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ON A PU < CALCULER UNE ADRESSE NEGATIVE !!! < IL FAUDRA CORRIGER 'ADINEX' A LA < MAIN... < Z1960E: EQU $ < < < P R I S E E N C O M P T E D E L ' E T A T < D ' A L L O C A T I O N M E M O I R E : < < < FONCTION : < CE MODULE EST EXECUTE SYSTEMATIQUEMENT < LORSQU'ON RENTRE EN 'RUNSVC'; IL TESTE < LE NOMBRE D'ALLOCATEUR MEMOIRE EN < ATTENTE DE MEMOIRE, ET S'IL Y EN A TROP, < ON CHANGE L'AUTOMATE DES SERVICES NON < IMMEDIATS, EN FORCANT ALORS DU SWAPP OU. < < LA OTOSM < (A)=(OTOSM), AFIN DE FORCER L'EXECUTION < DU 'JGE Z1960', AU CAS OU (HORESC)>0. DC HORESC-DCTESC,L < DECREMENTATION DE L'HORLOGE... XR Y,L < (L)=ADRESSE DCT-SVC, (Y)=SAVE DCTESC. JG Z1960A < (HORESC)>0 : MEMOIRE 'FREE'... JE Z1960B < PASSAGE A 0 DE 'HORESC'. BSR ASYSER < E R R E U R S Y S T E M E ... Z1960B: EQU $ XR Y,L < (L)=ADRESSE DCTESC, (Y)=SAVE DCT-SVC. LBY DEMSWP-DCTESC+T+CODEM,L XWOR%1: VAL LK*NOCMO=K-NBITOC SLRS NOCMO=XWOR%1 < NOMBRE DE K-MOTS OCCUPES PAR L'ESCLAVE LR A,X < DECALE D'UNE POSITION A DROITE. LA IDDESC-DCTESC,L TBT IDESC6 < EST-CE LA PRIORITE NORMALE OU LA < PRIORITE INFERIEURE ??? LAI W < INFERIEURE A PRIORI (ON INITIALISE 'A' < AINSI, AFIN DE FAIRE LE SWAPPING OUT < SYSTEMATIQUEMENT...). JC Z1960D < INFERIEURE... ('A'=1) LA &ATHESC < SUPERIEURE : (X) DONNE LA VALEUR INITIALE Z1960D: EQU $ STA HORESC-DCTESC,L < DE L'HORLOGE ESCLAVE. XR Y,L < (L)=ADRESSE DCT-SVC, (Y)=SAVE DCTESC. LA &ASMMEM BSR ABETA < RENVOIE : < < (A)=BETA(SEMMEM), < ON A DONC AINSI, LE NOMBRE D'ALLO- < CATEURS MEMOIRE EN ATTENTE. Z1960A: EQU $ CP OTOSM < COMPARAISON PAR RAPPORT AU SEUIL. LAD VAR+OTOAMF LR A,B < (B)=ADRESSE AUTOMATE DE REACTIVATION < SANS SWAP A PRIORI LAD VAR+OTOMF < (A)=@AUTOMATE SANS SWAPPING < A PRIORI (MEMOIRE 'FREE'). JGE Z1960 < EFFECTIVEMENT, IL Y A PEU OU < PAS D'ALLOCATEUR EN ATTENTE... LAD VAR+OTOAMO LR A,B < ADRESSE AUTOMATE DE REACTIVATION < AVEC SWAP LAD VAR+OTOMO < C'EST TRES MAUVAIS, ON PREND : < (A)=@AUTOMATE AVEC SWAPPING. < (MEMOIRE 'OCCUPEE') Z1960: EQU $ LXI XOTNP < (X)=INDEX DES SERVICES NON IMME- < DIATS : NSP>=(HINSP). STA &VAR+LOTO < CHANGEMENT DE LA LISTE DES < AUTOMATES DE SERVICE... LXI XOTIM STB &VAR+LOTO XR Y,L < (L)=ADRESSE DCTESC, (Y)=SAVE DCT-SVC. < < DISCRIMINATION DES APPELS PAR QUIT DE CEUX PAR SVC : < CPZ PSTESC-DCTESC+RS,L < TEST DU REGISTRE S(ESCLAVE) : < MAITRE : APPEL PAR SVC, < ESCLAVE : APPEL PAR QUIT. JL Z863 < L'ESCLAVE ETANT EN MODE MAITRE, < L'APPEL A EU LIEU PAR 'SVC'... < < < P R E - T R A I T E M E N T D E S Q U I T : < < PSR Y < SAUVEGARDE DE L'ADRESSE DE 'DCTSVC'. LY PSTESC-DCTESC+RP,L ADRI -D,Y < (Y)=ADRESSE RELATIVE A 'SLO' DE L'INSTRUC < TION 'QUIT', LAR < QUE L'ON RECUPERE DANS 'A'... PLR Y < RESTAURATION DE (Y)=ADRESSE DE 'DCTSVC'. XXZOP:: VAL '00F0 < MASQUE D'ACCES A L'ARGUMENT DE CERTAINES < "PSEUDO-INSTRUCTIONS" ACCESSIBLES AUX < UTILISATEURS. XWOR%1: VAL XXZOP < ZONE OPERANDE DU 'QUIT'. ANDI XWOR%1 < (A)=OPERANDE DU QUIT. SLRS XWOR%1=K LR A,X < (X)=NATURE DU QUIT (DE '0 < A 'F). XR Y,L < (L)=@DCT-HDLSVC. LA &VAR+AXQUIT < ACCES A LA TABLE D'EXECUTION < DES QUIT. XR Y,L < (L)=@DCT-ESCLAVE. JAE Z861 < LE QUIT EST ASSIMILE < A UN VRAI 'SVC'. JAG Z864 < LE QUIT EST UN 'SVC' SIMULE. < ((A)=ADRESSE ABSOLUE DE LA TABLE DES < ARGUMENTS). BSR ASYSER < E R R E U R S Y S T E M E ... Z863: EQU $ < < < A P P E L P A R ' S V C ' O U P A R < ' Q U I T ' A S S I M I L E : < < Z861: EQU $ < < RECUPERATION DE L'ADRESSE DES ARGUMENTS ESCLAVE : < LA RA+XXPSTD,L < (A)=ADRESSE TRANSLATABLE DES ARGUMENTS, JAL Z100Z < ERREUR, ELLE EST NEGATIVE... LA RSLE+XXPSTD,L < (A)=(SLE), SB RSLO+XXPSTD,L < (A)=(SLE)-(SLO), SLLS -DADR < QUE L'ON CONVERTIT EN UNE LONGUEUR-MOTS. XWOR%1: VAL LFDESC-Z < POUR PRENDRE EN COMPTE LA LONGUEUR < MAXIMALE D'UNE DEMANDE ESCLAVE. XWOR%2: VAL FADR-Z < POUR PRENDRE EN COMPTE EN FAIT QUE 'SLE' < NE DONNE QU'A FADR-MOTS PRES L'ADRESSE < DU DERNIER MOT ACCESSIBLE... ADRI -XWOR%1+XWOR%2,A < (A)=ADRESSE MAXIMALE POSSIBLE POUR LE < PREMIER MOT D'UNE DEMANDE ESCLAVE, CP RA+XXPSTD,L < ALORS Y-A-T'IL VIOLATION ??? JL Z100Z < LES 'LFDESC' MOTS MAX D'UNE DEMANDE SONT < A CHEVAL SUR 'SLE', ERREUR... < NOTA : CE TEST BRUTAL EST FAIT MEME SI < LA DEMANDE FAIT MOINS DE 'LFDESC' < MOTS !!! PSR B,X LA RA+XXPSTD,L < (A)=RELATIVE A 'SLO' DES ARGUMENTS, LRM B WORD VARSVC+DESCAR < (B)=ADRESSE ABSOLUE OU STOCKER LES 'LFDES < MOTS A PRIORI DE LA DEMANDE, LXI LFDESC < (X)=NOMBRE DE MOTS MAX D'UNE DEMANDE < EMANANT D'UN ESCLAVE... MVTM < DUPLICATION DE LA DEMANDE DE L'ESCLAVE < DANS L'ESPACE MAITRE DU SYSTEME ; ON < PEUT AINSI L'ATTEINDRE OU QU'ELLE SOIT... LR B,A < (A)=ADRESSE ABSOLUE DE LA DEMANDE DE < CE PAUVRE ESCLAVE... PLR B,X Z864: EQU $ < CAS DES QUIT DE SIMULATION < DE SVC. LR A,W < (W)=@ABSOLUE DES ARGUMENTS ESCLAVE. < < ON A ICI : < (L)=ADRESSE DCT(ESCLAVE). < (W)=ADRESSE ABSOLUE DES ARGUMENTS ESCLAVE. < (Y)=ADRESSE DCT(SVC). < PAGE < < < P R E - T R A I T E M E N T : < R E C U P E R A T I O N E T V A L I D A T I O N < D E L A D E M A N D E : < < USE W,NVPFON < < NETTOYAGE DE 'DEMESC' : < STZ DEMESC-DCTESC+LDEM0-Z,L < RAZ DU DERNIER MOT DE DEMESC. LAD DEMESC-DCTESC+XXNSP,L LR A,B < (B)=ADRESSE('DEMESC')=RECEPTEUR, ADRI D,A < (A)=ADRESSE('DEMESC')+D=EMETTEUR, LXI LDEM0-Z < (X)=NOMBRE DE MOTS RESTANT A RAZER... MOVE < RAZ DE DEMESC. < < ACCES AU NVP DEMANDE : < LBY NVPFON TBT XASSIM+NBITOC < DISCRIMINATION DES ASSIGN < EXPLICITES (K) / IMPLICITES (1). XWOR%1: VAL -NBITOC < POUR UN DECALAGE A DROITE... XWOR%2: VAL MASSIM>XWOR%1 < A CAUSE DU 'LBY' DE CHARGEMENT. ANDI XWOR%2 < (A)=NVP REFERENCE DANS LA DEMANDE. IF LIMPAS-XWOR%2,XEIF%,XEIF%, IF LA VALEUR DE 'LIMPAS' EST MAUVAISE !!! XEIF%: VAL ENDIF IF NVPSER-K,,XEIF%, IF ATTENTION : LE 'JAE' SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF JAE SERVIN < DANS TOUS LES CAS : NVP=K < REFERENCE LES SERVICES IMMEDIATS. JNC Z1940 < BIT0=K : ASSIGN EXPLICITES. < < A S S I G N I M P L I C I T E S : < CPI LIMPAS-I < VALIDATION SUPERIEURE DU NVP. JG EE742 < ERREUR : NVP INEXISTANT. LR A,X < OK, LA &IMPASS < (A)=ENTREE COURANTE DE 'TIMPASS' : ANDI XXPAS1 < (A)='NSP'/'NVP' ASSIGNE AU 'NVP', IF XYPAS1-K,,XEIF%, SLRS XYPAS1 XEIF%: VAL ENDIF TBT XYPASI < DISCRIMINATION 'NSP'/'NVP' : JNC Z1941 < CAS DES 'NSP', RBT XYPASI < CAS DES 'NVP', JMP Z1940 < ON Y VA... SERVIN: JMP SERVIM < RELAI... Z100Z: JMP Z100 < RELAI VERS 'Z100'... < < A S S I G N E X P L I C I T E S : < Z1940: EQU $ CPI NOCMO*LTASGN < VALIDATION DU NVP. EE742: JG E742 < NVP INVALIDE. < (ET RELAI VERS 'E742') JL Z962 < OK, NVP ASSIGNE. < < < N V P = 2 * L T A S G N : < A C C E S D I R E C T A U D K S : < < < FONCTION : < LE NVP=2*LTASGN PERMET D'ATTEINDRE < EN ADRESSAGE DIRECT-RELATIF LE < DISQUE DE SWAPPING; A CET EFFET < TZSCRA SECTEURS SONT RESERVES DERRIERE < LA ZONE DE SWAPPING DE CHAQUE ESCLAVE. < < < ARGUMENT : < (AMESC)=ADRESSE OCTET DU BUFFER, < (COESC)=COMPTE D'OCTETS A ECHANGER: < DOIT ETRE INFERIEUR OU EGAL < A ('QUANTA' * TAILLE OCTETS SECTEUR) < (ARGESC)=NUMERO DU SECTEUR DESIRE: < DOIT ETRE SUPERIEUR OU EGAL A 0 ET < INFERIEUR OU EGAL A ('TZSCRA' - 'QUANTA') < POUR EVITER UNE VIOLATION DISQUE < < < NOTA : < LES FONCTIONS 0/1 (LECTURE) < ET 2 (ECRITURE) SONT AUTORI- < SEES. < < LA AMESC < (A)=ADRESSE-OCTET DE L'ECHANGE : TBT NBITMO-B < EST-ELLE PAIRE (ADRESSE DE MOTS) ??? JC AE745 < NON, ERREUR... XWOR%2: VAL MSPTYP=K XWOR%1: VAL NSPDKS>XWOR%2 XWOR%1: VAL COSBT?VBOX=FMASK(K?XWOR%1=FCINST LRM A WORD XWOR%1 < 'NSPTYP' POUR L'ACCES A 'DKS' EN MODE < SYMBOLIAUQE, ET VALIDATION SYSTEMATI- < DE LA 'BOX' DE 'DEMESC'. STA DEMESC-DCTESC+XXNSP,L < MISE EN PLACE DU NSPTYP D'ACCES < AU DISQUE DE SWAPPING. LRM A < COMPTE D'OCTETS MAXIMUM ECHANGEABLES WORD YY8Q CP COESC < VALIDATION COMPTE D'OCTETS DEMANDE JL AE745 < ERREUR : COMPTE D'OCTETS TROP GRAND LB COESC < (B)=CODEM(DEMESC) : NE PAS DETRUIRE. STB DEMESC-DCTESC+T+CODEM,L LA NVPFON ANDI MASSFO < (A)=FONCTION DEMANDEE. CPI FGX < VALIDATION DE LA FONCTION. JG E743 < FONCTION INEXISTANTE POUR < L'ACCES DIRECT AU DISQUE. STA DEMESC-DCTESC+T+OPDEM,L LA ARGESC < (A)=NUMERO RELATIF DU SECTEUR. JAL AE745 < ERREUR : SECTEUR DE NUMERO<0 !!! CPI TZSCRA-QUANTA < LE SECTEUR DEMANDE EST-IL ADMISSIBLE < COMPTE TENU DU FAIT QU'ON PEUT < ECHANGER 'QUANTA' SECTEURS ? JG AE745 < NON, ERREUR : VIOLATION DISQUE ! XWOR%2: VAL XXXMOY XWOR%1: VAL TZSWAP-TZSCRA/XWOR%2 IF XWOR%1*XWOR%2-TZSWAP+TZSCRA,,XEIF%, IF ATTENTION : TZSWAP-TZSCRA NON DIVISIBLE PAR 2 !!! XEIF%: VAL ENDIF DO XWOR%2 ADRI XWOR%1,A < ACCES AL AZONE DE SCRATCH RELA- < TIVEMENT A L'ESPACE UTILISATEUR. AD DEMSWP-DCTESC+T+ASDEM,L < (A)=ADRESSE ABSOLUE DU SECTEUR SCRATCH < DEMANDE. STA DEMESC-DCTESC+T+ASDEM,L LA AMESC < (A)=@OCTET DU BUFFER. < < ON A ICI : < (A)=ADRESSE OCTET DU BUFFER. < (B)=COMPTE D'OCTETS. < JMP Z1213 < VERS LA SUITE DE LA VALIDATION < DES ARGUMENTS. < < < C A S D E S N V P A S S I G N E S : < < Z962: EQU $ < ENTRY POUR LES NVP ASSIGNES < A PHIN OU PHOUT PAR !ASSIGN I/O. LR A,X < (X)=NVP. < < ACCES AU NSP ASSIGNE AU NVP : < LBY &TASSGN-DCTESC,L Z1941: EQU $ < TRONC COMMUN ASSIGN IMPLICITES < ET ASSIGN EXPLICITES. JAE E739 < ERREUR : LE NVP N'EST PAS < ASSIGNE. XWOR%1: VAL PHOUT < MAXIMUM A PRIORI... IF PHIN-PHOUT,XEIF%,XEIF%, XWOR%1: VAL PHIN < ET NON, C'ETAIT LUI... XEIF%: VAL ENDIF IF PHIN-PHOUT,XEIF%,,XEIF% IF ATTENTION : PHIN=PHOUT !!! XEIF%: VAL ENDIF CPI XWOR%1 < LE NVP EST-IL ASSIGNE A I/O ??? JLE Z962 < OUI, ON RECUPERE LE NVP REEL < AU 2EME NIVEAU (PAR PHIN/PHOUT). < < OK : ON A DANS A LE NSP ASSIGNE AU NVP < ANDI XNVPF)MOCD JAE E740 < NSP=NSPDUM ; LE NVP EST ASSIGNE < AU NSP DUMMY ; ON FAIT DONC UNE < SORTIE IMMEDIATE ; A NOTER QUE < L'ON A (A)=K : LA SORTIE EST < DONC OK !!! XR Y,L < (L)=ADRESSE DE 'DCTSVC', < (Y)=ADRESSE DE 'DCTESC'. BSR VAR+ASVCDK < GENERATION DU 'NSPTYP' DE LA DEMANDE ET < TRAITEMENT PARTICULIER DES DEMANDES A < 'DKU' ET AU 'SGN' LORSQU'IL Y A UN < VOLUME POUR CET UTILISATEUR, < AU RETOUR, ON A : < (L)=ADRESSE DE 'DCTESC', ET < (Y)=ADRESSE DE 'DCTSVC'... < < < F O N C T I O N S R E C O N N U E S : < < < 0000 LECTURE, < 0001 LECTURE AVEC ECHO, OU CONTROLE (DK), < 0010 ECRITURE, < 0011 OPEN NEXT RECORD, OU OPEN GRAPHIQUE, < 0100 OPEN NEW RECORD, OU CLOSE GRAPHIQUE, < 0101 OPEN OLD RECORD, OU ERASE SCREEN, < 0110 CLOSE-RELEASE RECORD, OU CURSEUR GRAPHIQUE, < 0111 CLOSE-SAVE RECORD, OU ECRITURE DIRECTE, < 1000 LECTURE RECORD, OU LECTURE CURSEUR ALPHA-NUMERIQUE, < 1001 LECTURE-DELETE RECORD, OU LECTURE GRAPHIQUE, < 1010 ECRITURE GRAPHIQUE. < (EN 2 : LES VISUS). < < < NOTA : < EN FORMANT (FONCTION).AND.'MASSFF', < ET EN TESTANT LA POSITION DU RESULTAT < OBTENU PAR RAPPORT A 'FGX', ON PEUT < SAVOIR S'IL S'AGIT D'UNE ENTREE-SORTIE < EFFECTIVE OU PAS... < < < RAPPEL : < (OPDEM).AND.'MASSFF < FGX : OPERATION DE LECTURE, < = FGX : OPERATION D'ECRITURE, < > FGX : IL NE S'AGIT PAS D'UNE ENTREE- < SORTIE EFFECTIVE. < < < NOTA : < IL EXISTE DES OPERATIONS SUR 'DKU' QUI < SE FAISANT DIRECTEMENT ENTRE 'DKU' ET LA < MEMOIRE 'MEMTV' ('FONTVR' ET 'FONTVW') NE < SONT PAS CONSIDEREES COMME E/S EFFECTIVES, < AFIN DE NE PAS VALIDER SOUS 'SVC' L'ARGUMENT < 'AMDEM'... < < < < RECUPERATION DE LA FONCTION DEMANDEE : < LA NVPFON ANDI MASSFO < (A)=FONCTION DEMANDEE SUR CE NVP. CPI FINEX < VALIDATION ??? JGE E743 < ERREUR, LA FONCTION N'EXISTE PAS... < < E N T R Y F A U X S E R V I C E S I M M E D I A T S : < Z61: EQU $ < < DANS LE CAS OU LA FONCTION EST VALIDEE ON LA MET EN < OPDEM DE DEMESC : < STA DEMESC-DCTESC+T+OPDEM,L < < TRANSMISSION A PRIORI ET SANS VALIDATION DE ARGESC : < LB ARGESC < TRANSMISSION A PRIORI. STB DEMESC-DCTESC+T+ASDEM,L < < PRISE EN COMPTE DE COESC ET AMESC : < LB COESC STB DEMESC-DCTESC+T+CODEM,L < < ON A ICI : < (A)=FONCTION DEMANDEE. < (B)=COESC. < (X)=NVP. A NOTER QUE (X) EST DIFFERENT < DE 0, PUISQUE LE SERVICE N'EST PAS < IMMEDIAT (UTILISER PAR LA SUITE POUR < DETERMINER LES CONDITIONS DE SWAP). < ='FONCTION' DANS LE CAS DES 'SVC' < MEMOIRE OU BIEN DODO (ENFIN TOUT < CEUX QUI ARRIVENT EN 'Z61'...). < < < NOTA : < LA FONCTION DEMANDEE PERMET < DE SAVOIR SI (AMESC) DONNE UNE < ADRESSE MEMOIRE OU PAS... < < < TEST DE LA NATURE DE LA FONCTION : < ANDI MASSFF < (A)=BITS13-15 DE LA FONCTION < DEMANDEE. CPI FGX < LA FONCTION DEMANDEE EST-ELLE < UNE E/S EFFECTIVE... LA AMESC < MISE DANS A DE AMESC... JG E744 < CE N'EST PAS UNE E/S EFFECTIVE, < AMESC N'A PAS A ETRE TRANSLATEE. < < CAS D'UNE E/S EFFECTIVE : VALIDATION ET TRANSLATION < DE AMESC ET VALIDATION DE COESC : < Z1213: EQU $ < ENTRY 'ACCES DIRECT A DKS1'. XR Y,L < POUR ATTEINDRE 'DCTSVC'... BSR VAR+APSVC1 < VALIDATION DE : < (A)='AMESC', < (B)='COESC'. < A NOTER QU'AU RETOUR ON A : < (L)=ADRESSE DE 'DCTESC', ET < (Y)=SAUVEGARDE DE L'ADRESSE DE 'DCTSVC'. JNE E745 < ET BIEN VOILA, C'EST TRES MAUVAIS : < SOIT 'AMESC', SOIT 'COESC', SOIT ENFIN < LEUR COMBINAISON SONT MAUVAISES !!! LXI K < MEMORISONS QUE L'E/S EST < EFFECTIVE PAR (X)=K. DANS LE < CAS CONTRAIRE, RAPPELONS < QUE L'ON A : (X)=NVP#0 !!!! < < ON A ICI : < (A)=ADRESSE OCTET TRANSLATABLE DU BUFFER ESCLAVE. < (B)=COMPTE D'OCTETS. < (X)=K. < PSR B PSR A LA RSLO+XXPSTD,L < (A)=SLO XWOR%3: VAL FADR*NOCMO=K < POUR CONVERTIR UNE FADR-ADRESSE, EN UNE < ADRESSE D'OCTETS... XWOR%4: VAL NBITMO-XWOR%3 IF XSLO32-XWOR%4,,XEIF%, IF ATTENTION : LE CALCUL DES ADRESSES DITES ABSOLUES IF DES BUFFERS ESCLAVES EST INCOMPATIBLE AVEC LA TAILLE IF DES PAGES D'APPARTENANCE DES 'SLO' !!! XEIF%: VAL ENDIF SLLS XWOR%3 < (A)=SLO EN ADRESSE OCTETS LR A,B < (B)=SLO EN ADRESSE OCTETS PLR A ADR B,A < (A)=ADRESSE OCTETS ABSOLUE < DU BUFFER ESCLAVE ; MAIS ATTENTION !! < C'EST ADRESSE N'EST QU'ABSOLUE RELA- < TIVEMENT A DES PAGES DE 32K MOTS (CF. < 'XSLO32') AUXQUELLES APPARTIENNENT LE < 'SLO' DE L'ESCLAVE. < AINSI ON DECOUPE 'SLO' EN 2 PARTIES : < SLO32=NUMERO DE PAGE DE 32K, < SLOD=DEPLACEMENT DANS CETTE PAGE ; < 'SLO32' EST TRANSMIS VIA 'HDLSER', A LA < TACHE DEMANDEE PAR LE MOYEN DU COUPLE < 'XMDSLO'/'SLO' (VOIR 'CHAND' ET 'HANDLR') < 'SLOD' EST UTILISE POUR TRANSLATER < L'ADRESSE DU BUFFER QUI DEVIENT ABSOLUE < DANS UNE PAGE DE 32K (OUF...). PLR B XR A,B < (A)=COMPTE OCTETS DE L'ECHANGE. < (B)=@OCTET DE DEBUT DU BUFFER. JMP Z1213Y < POUR SAUTER UN RELAI... AE745: JMP E745 < RELAI VERS 'E745'... Z1213Y: EQU $ ADRI -NOCMO+E,A < POUR ADRESSER LE DERNIER OCTET, ADR B,A < (A)=ADRESSE-OCTET DE FIN DU BUFFER. JC E746 < LE RESULTAT EST EN DEBORDEMENT, < L'ADRESSE OCTET OBTENUE EST < DONC REPASEE PAR LE 0, ET ON < EST RENTRE DANS LE SYSTEME !!!! < D'OU L'ABORT POUR VIOLATION < MEMOIRE (DEPASSEMENT DE SLE). < < LE CODE SUIVANT EST APPAREMMENT < INUTILE (D'OU LA 'SYSER' IMPLANTEE < A LA SUITE DE 'E746'...) : < PSR B < SAUVEGARDE DE L'ADRESSE ABSOLUE (DANS < UNE PAGE DE 32K) DU DEBUT DU BUFFER (IL < S'AGIT DE PLUS D'UNE ADRESSE-OCTETS). XWOR%1: VAL NOCMO=K SLRD NBITMO+XWOR%1 < QUE L'ON CONVERTIT EN UNE ADRESSE-MOTS : < (B)=ADRESSE-MOTS DU DERNIER MOT DU BUFFER < (DANS UNE PAGE DE 32K...) LA RSLO+XXPSTD,L < (A)=(SLO), SLLS XWOR%3 < ET CONVERSION EN UNE ADRESSE-OCTET. ADRI -SLOESC-Z*NOCMO,A AD DEMSWP-DCTESC+T+CODEM,L SLRS XWOR%1 < (A)=ADRESSE DU DERNIER MOT DE L'ESPACE < UTILISATEUR (DANS UNE PAGE DE 32K). JNC E744X1 < OK, IL S'AGIT D'UN NOMBRE ENTIER DE MOTS. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LA LONGUEUR < D'UN SWAPPING PEUT ETRE UN NOMBRE < IMPAIR D'OCTETS !!! < E744X1: EQU $ CPR A,B < ALORS, Y-A-T'IL VIOLATION ??? < (A)=ADRESSE-MOT DU DERNIER MOT DE < L'ESPACE MEMOIRE UTILISATEUR, < (B)=ADRESSE-MOT DU DERNIER MOT DU < BUFFER ARGUMENT. PLR B < RESTAURATION DE (B)=ADRESSE OCTETS ABSO- < LUE RELATIVEMENT A UNE PAGE DE 32K DU < BUFFER UTILISATEUR... JG E746 < ET OUI, IL Y A VIOL (OH...) : ERREUR !!! LR B,A < (A)=ADRESSE OCTETS ABSOLUE (RELATIVEMENT < A UNE PAGE DES 32K) DU BUFFER DE L'UT < LISATEUR... < < POURSUITE DE LA GENERATION DE 'DEMESC' : < E744: EQU $ STA DEMESC-DCTESC+T+AMDEM,L LA DEMESC-DCTESC+T+CODEM,L CPI NOCMO*LBUFES+NOCMO-Z < CARY=1 SI CODEM<"CONSTANTE"... < < RESTAURATION DANS A DU NSP DU SERVICE DEMANDE : < LBY DEMESC-DCTESC+XXNSP,L < < SUPPRESSION DU SWAPPING POUR LES DEMANDES < ESCLAVES PORTANT SUR DES LONGUEURS < D'ECHANGES SUPERIEURES A LA LONGUEUR < DU BUFFER DE DCTESC : < JC Z44 < NSP INCHANGE SI CODEM<2*LBUFES+1. CPZR X < L'E/S ETAIT-ELLE EFFECTIVE ??? JNE Z44 < NON, DONC LA VALEUR DU < CODEM EST IGNORE !!! < < CAS D'UNE E/S EFFECTIVE AVEC CODEM>2*LBUFES : < CPI NSPVIN+E < EST-ON SUR UN TERMINAL DE TYPE < VISU, ET DONC INTERACTIF ??? JL E745 < DANS LE CAS NSP<HINSP, ON LIMITE < LES COMPTES D'OCTETS A 2*LBUFES... XWOR%1: VAL NSPDUM=K SBT NBITMO-B-XWOR%1 < DANS LE CAS CODEM>2*LBUFES, < ON MAJORE LE NSP DEMANDE TEL < QUE NSP>HINSP, ET QU'AINSI, < IL N'Y AIT PAS DE SWAPPING. Z44: EQU $ < < < D I S C R I M I N A T I O N D E L A M E M O I R E < H A U T E E T D E L A M E M O I R E B A S S E , < E T C H O I X D ' U N N I V E A U D E S E R V I C E : < < < NOTA : < (A)=NSP DU SERVICE DEMANDE, < OU NEGATIF SI LE SERVICE EST IMMEDIAT < OU S'EST TERMINE IMMEDIATEMENT < POUR CAUSE D'ERREUR... < < E741: EQU $ XR Y,L < AFIN DE POUVOIR FAIRE LE 'BR' QUI SUIT... BR VAR+AE741X < LE MODULE CORRESPONDANT EST PLUS LOIN < A CAUSE DES SAUTS RELATIFS SUPERIEURS < A 128 MOTS !!! PAGE < < < T R A I T E M E N T D E S S E R V I C E S < I M M E D I A T S : < < < F O N C T I O N S I M M E D I A T E S : < < < FONCTION 0 : END-JOB, < (INACCESSIBLE DIRECTEMENT MEME < SOUS :SYS !!!). < FONCTION 1 : APPEL DU CCI INTERACTIF, < FONCTION 2 : APPEL DU CCI NON INTERACTIF, < FONCTION 3 : CONNEXION A UN NSP (RESERVE A :SYS), < FONCTION 4 : CHANGEMENT DE LA TAILLE DE < L'ESPACE MEMOIRE UTILOSATEUR, < FONCTION 5 : MISE EN SOMMEIL DE L'ESCLAVE, < FONCTION 6 : CETTE FONCTION EST VIDE, ET SE < CONTENTE DE DEMANDER AU SCHEDULER < UNE REACTIVATION DE L'ESCLAVE ; ELLE < PERMET DONC A UN ESCLAVE DE PASSER < LA MAIN PERIODIQUEMENT LORS DE < CALCULS LONGS ET PERIODIQUES !!! < FONCTION 8 : FAUSSE LECTURE ; PERMET DONC DE < RECUPERE LE CONTENU DE BUFESC, AVEC < ACCES EVENTUEL AU PREALABLE A LA ZONE < DE DONNEES COMMUNES ZDC. < FONCTION A : FAUSSE ECRITURE ; PERMET DONC DE < DE METTRE DE L'INFORMATION DANS < BUFESC, SUIVI D'UNE MISE A JOUR < EVENTUELLE DE LA ZDC. < < SERVIM: EQU $ LA NVPFON < RECUPERATION DE LA FONCTION. ANDI MASSFO CPI NFON < VALIDATION DE LA FONCTION. JGE E743 < FONCTION ERRONNEE. LR A,X < (X)=FONCTION DEMANDEE. PSR A,L LR Y,L < (L)=ADRESSE DE 'DCTSVC' : LA DCTFUP < (A)=LISTE DES ALTITUDES DES FONCTIONS < IMMEDIATES : TBT L,X < LA FONCTION (X) PEUT-ELLE S'EXECUTER < EN MEMOIRE HAUTE ??? PLR A,L < RESTAURATION DE : < (A)=FONCTION DEMANDEE, ET < (L)=ADRESSE DE 'DCTESC'. JC SERVIP < ET OUI, LA FONCTION (X) PEUT S'EXECUTER < EN MEMOIRE HAUTE, ALLONS-Y... BSR ADOWN < ET BIEN NON, IL FAUT FAIRE DESCENDRE < L'UTILISATEUR : JNE SERVIP < OK, IL EST DEJA EN BAS... LXI FONHAU < NON, IL FAUT ATTENDRE QU'IL SOIT EN < MEMOIRE BASSE, POUR CELA ON PREND UNE < FAUSSE FONCTION IMMEDIATE QUI SE CONTEN- < TE DE FAIRE SORTIR DE 'HDLSVC' EN RESTAU- < RANT 'L'... SERVIP: EQU $ < < ON A ICI : < (L)=ADRESSE DCT(ESCLAVE), < (W)=ADRESSE ABSOLUE DES ARGUMENTS ESCLAVE. < (Y)=ADRESSE DCT(SVC). < (A)=(X)=FONCTION ((A) EST UTILISE LORS DES FONCTIONS < FONFR ET FONFW QUI VONT DIRECTEMENT < EN Z69). < BR &ARSIM < EXECUTION SPECIFIQUE DES FONCTIONS. < ON NOTERA INTELLIGEMMENT QUE LA BASE < 'L' EST INDISPONIBLE POUR 'DCTSVC', < ET QUE DONC AINSI, LE RELAI 'ARSIM' < DOIT ETRE DANS LE COMMON... < < < A T T E N T I O N : < EN GENERAL, UNE FONCTION SE < TERMINERA PAR UN 'JMP E740', < AVEC : < < (A)=CONDITION DE L'EXECUTION DU SERVICE IMMEDIAT. < < < E R R E U R S I M M E D I A T E S : < < < CODE ERREURS IMMEDIATS : < < '81 : NVP NON ASSIGNE, < '82 : NVP INEXISTANT, < '83 : FONCTION INEXISTANTE, < '84 : 'COESC', 'AMESC' OU LES DEUX SONT MAUVAIS, < CE PEUT ETRE AUSSI L'ADRESSE SECTEUR SUR 'DKS1' MAUVAISE... < '85 : ERREUR NE POUVANT PLUS SE PRODUIRE ?!??!?! < '86 : ADRESSE DES ARGUMENTS ERRONNE (<0 OU >SLE). < < <******************************************************************************* ESNNA:: VAL '81 < NVP NON ASSIGNE, ESNI:: VAL '0@@@@+I < NVP INEXISTANT, ESFI:: VAL '0@@@@+I < FONCTION INEXISTANTE, ESCOE:: VAL '0@@@@+I < 'AMESC', 'COESC' OU LES 2 ERRONNES, ESVM:: VAL '0@@@@+I < ERREUR BIZARRE !??!?!?! ESAAE:: VAL '0@@@@+I < ADRESSE DES ARGUMENTS ERONEE. <******************************************************************************* < < Z100: EQU $ LAI ESAAE < @ARGUMENTS ERRONNEE. JMP E740 E739: EQU $ LAI ESNNA < NVP NON ASSIGNE. JMP E740 E742: EQU $ LAI ESNI < NVP INEXISTANT. JMP E740 E743: EQU $ LAI ESFI < FONCTION INEXISTANTE. JMP E740 E745: EQU $ LAI ESCOE < 'AMESC', 'COESC' OU ADRESSE SECTEUR < SUR 'DKS1' MAUVAISES... JMP E740 E746: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < THEORIQUEMENT, CETTE ERREUR < NE PEUT PLUS SE PRODUIRE, IL < FAUT DONC CORRIGER EN CONSEQUENCES !!! < LAI ESVM < VIOLATION DE SLE. < (ET DE SLO PAR LA MEME OCCASION) JMP E740 < < < N S P D U M M Y , O U < F I N D ' A C T I O N I M M E D I A T E < E T R E N V O I D E S C O N D I T I O N S < D ' E X E C U T I O N A L ' E S C L A V E D A N S X : < < < ON A ICI : < (A)=CONDITION D'EXECUTION IMMEDIATE. < E740: EQU $ <******************************************************************************* BSR ASTXES < EXECUTION DU STORE X(ESCLAVE) SUIVANT : STA RX+XXPSTD,L < LES CONDITIONS DE RETOUR SONT <******************************************************************************* < MISES DANS LE REGISTRE 'X' DE < L'ESCLAVE. LAI NSPVID-I < AFIN DE N'ACCEDER QU'A L'AUTOMATE < DE RE-ACTIVATION. JMP E741 < ALLONS REACTIVER L'ESCLAVE... ZZ61: JMP Z61 < RELAI D'ACCES A Z61... < (UTILISE PAR 'SVCMEM') PAGE < < < F O N C T I O N D ' A P P E L D E C C I : < < < FONCTION : < CE 'SVC' RECUPERE LES DEMANDES < ESCLAVE DESTINEE AU 'CCI' ; SON < SEUL TRAVAIL EST DE DETERMINER < L'AUTOMATE QUI REALISERA LE MIEUX < POSSIBLE CET APPEL, A MOINS QU'UN < 'LOGOUT' N'AIT ETE DEMANDE, AUQUEL < CAS, IL PASSE LA MAIN A 'EJ'... < < USE L,DCTESC SVCCCI: EQU $ LAI LCCI STA DEMESC-DCTESC+T+CODEM,L < MISE EN PLACE DE LA LONGUEUR MAXIMALE < DES MESSAGES AU 'CCI', EN VUE DE SA < MISE DANS 'MBUFGR' POUR 'CARAC'... < < TEST D'UN EVENTUEL LOG-OUT DEMANDE A L'APPEL PRECEDENT : < LA RECOTO < ACCES A L'INDEX COURANT DE < LA GRAMMAIRE DU CCI POUR CET < ESCLAVE. CP INFINI JE SVCEJ < EFFECTIVEMENT, UN LOG-OUT < EST DEMANDE. < < CAS D'UN APPEL STANDARD AU CCI : < CPZ RS+XXPSTD,L < DISCRIMINATION DE L'APPEL : < 1- PAR SVC : S(ESCLAVE) MAITRE, < 2- PAR QUIT : S(ESCLAVE) ESCLAVE. JL Z840 < L'ESCLAVE EST EN MODE MAITRE, < L'APPEL A DONC EU LIEU PAR SVC. < < CAS D'UN ESCLAVE EN MODE ESCLAVE ; < L'APPEL A DONC EU LIEU PAR QUIT : < DC RP+XXPSTD,L < ON DECREMENTE DIRECTEMENT LE < REGISTRE P DE L'ESCLAVE, AFIN < DE BOUCLER SUR L'APPEL AU CCI. JMP Z841 < < CAS D'UN ESCLAVE EN MODE MAITRE ; < L'APPEL A DONC EU LIEU PAR SVC : < Z840: EQU $ < LE REGISTRE P(ESCLAVE) DE RETOUR < EST DECREMENTE D'1 AFIN DE < BOUCLER SUR LE SVC CCI ; CE < BOUCLAGE A POUR EFFET DE LIBERER < A CHAQUE FOIS LE HANDLER DE SERVICE. PSR Y < SAUVEGARDE DE L'ADRESSE DE 'DCTSVC'... LY RK+XXPSTD,L < (Y)=POINTEUR DE PILE RELATIF, LAR < (A)=CONTENU DU SOMMET DE LA PILE, C'EST- < A-DIRE 'P' DE RETOUR D'UN 'SVC' < "NORMAL"... ADRI -D,A < AFIN DE BOUCLER SUR LE 'SVC' DU 'CCI'... STAR < ET MODIFICATION DE LA PILE 'K'... PLR Y < (Y)=ADRESSE DE 'DCTSVC'... Z841: EQU $ LXI PHIN LBY &TASSGN < ACCES A NSPIN DANS TASSGN. LR A,B < (B)=NSPIN DE L'ESCLAVE. LXI PHOUT LBY &TASSGN < (A)=NSPOUT DE L'ESCLAVE. LXI XOTCNP < PREPARATION DE L'INDEX D'ACCES < A LA TABLE DES AUTOMATES DE SVC. < < RECHERCHE DE MIN(NSPIN,NSPOUT) ; EN EFFET C'EST CE < MIN QUI DECIDE DU SWAPPING OUT A PRIORI DE L'ESCLAVE < DEMANDEUR DE CCI. SI NSPIN ET NSPOUT SONT SUPERIEURS OU EGAUX < A HINSP, IL N'EST PAS NECESSAIRE DE SWAPPER, PAR < CONTRE SI UN UN SEUL DES 2 EST INFERIEUR A HINSP, < IL FAUT SWAPPER A PRIORI. < CPR B,A JLE AE776 < OK : (A)=NSPOUT=MIN(NSPIN,NSPOUT). XR A,B < (A)=NSPIN=MIN(NSPIN,NSPOUT). JMP AE776 < ALLONS SELECTER LE BON AUTOMATE. PAGE < < < F O N C T I O N E N D - J O B : < < < FONCTION : < CE 'SVC' SYNCHRONISE LE < DISPATCHER 'EJ' ; L'ADRESSE < DE LA 'DCTESC' A RELEASER EST < TRANSMISE PAR L'INTERMEDIAIRE < DE LA TABLE 'TBU' : L'ENTREE < CORRESPONDANTE VOIT SON BIT < 'BITX' MIS A 1... < < < ARGUMENT : < (L)=ADRESSE DCT(ESCLAVE). < < USE L,DCTESC SVCEJ: EQU $ LX IDESC LAI MKIDES ANDR A,X < (X)=ID. ESCLAVE. LA &ATBU < ACCES A L'ENTREE (ID) DE TBU. CPR A,L < VERIFICATION... JE SYSR26 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < JE NE SAIS PAS, MAIS ATTENTION, < DANS LE CODE QUI SUIT, IL Y A < UNE RESTAURATION DE LA BASE 'L' < PAR LE REGISTRE 'Y' QU'IL NE FAUDRAIT < PAS MANQUER !!! < SYSR26: EQU $ SBT BITX < POSITIONNEMENT DU BIT0 DE < TBU(ID) POUR HDLEJ. STA &ATBU < MAJ DE TBU. XR Y,L < RESTAURE (L)=ADRESSE DE 'DCTSVC'. USE L,DCT0 PSR A LAD &VAR+SEJ BSR ARLSE < SYNCHRONISATION DE HDLEJ PLR A JMP AE762 < ET C'EST TOUT. A T T E N T I O N < DANS LE CAS DE END-JOB, ON N' < N'ALLOUE PAS DE HANDLER DE SERVICE < A L'ESCLAVE DANS RUN-SVC, ET < SURTOUT, ON NE LE RACTIVE PAS... PAGE < < < C H A N G E M E N T D E L A T A I L L E < D E L ' E S P A C E M E M O I R E D E < L ' E S C L A V E : < < < FONCTION : < CE SVC EST EN GENERAL UN FAUX SERVICE < IMMEDIAT. IL RECOIT LES DEMANDES < DE CHANGEMENT DE TAILLE DE L'ESPACE < MEMOIRE ESCLAVE. C'EST UN FAUX SERVICE < IMMEDIAT, CAR ON NE PEUT CHANGER LA TAILLE < DE L'ESPACE MEMOIRE ESCLAVE, QU'APRES < QUE CET ESPACE AIT ETE RELEASE (SINON < GARE AU RECOVERY), C'EST A DIRE APRES QUE < LE SWAPPING OUT AIT ETE FAIT. LE SEUL < ENDROIT RAISONNABLE OU REALISER CE < CHANGEMENT EST DANS 'SERESC'. < DONC, LORSQUE SERESC RECONNAITRA UN < FAUX SERVICE IMMEDAIT (NSP DEMANDE < NUL), ELLE EXECUTERA ELLE-MEME CE < SERVICE ; L'OPDEM INDIQUE ALORS LE < SERVICE DEMANDE. < < < ARGUMENTS : < (COESC)=TAILLE EN OCTETS DEMANDEE, < (L)=ADRESSE DCT(ESCLAVE). < < SVCMEM: EQU $ LA COESC < (A)=NBRE D'OCTETS DEMANDES. CP DEMSWP-DCTESC+T+CODEM,L JE Z67 < ON LES POSSEDE DEJA, RIEN A < FAIRE. < < VALIDATION DE LA TAILLE DEMANDEE : < XWOR%6: VAL LK*NOCMO=K < LK*NOCMO EST LA TAILLE OCTET MINIMALE < DISPONIBLE POUR L'UTILISATEUR. SCLS NBITMO-B-XWOR%6 CP INFINI < EST-CE UNE DEMANDE '800 OCTETS ?? JE Z745 < OUI, OK. JAE E745 < ERREUR... A NOTER QU'ON FAIT D'ABORD < UN 'JAE', PUIS UN 'JAL' ET NON PAS < UN 'JALE', AFIN QUE LE 'JAL' QUI SUIT < PUISSE SERVIR DE RELAI !!! JAL745: JAL E745 < ERREUR... ET RELAI !!! WORD CPIMEM < VALIDATION DU COESC... JG E745 < ERREUR ; SEULES SONT AUTORISEES < LES TAILLES DE : < -'800 OCTETS (1K MOT), < -'1000 OCTETS (2K MOTS), < -'2000 OCTETS (4K MOTS). < -'3000 OCTETS (6K MOTS), < -'4000 OCTETS (8K MOTS). < -'5000 OCTETS (10K MOTS), < -'6000 OCTETS (12K MOTS). < -'7000 OCTETS (14K MOTS), < -Q8000 OCTETS (16K MOTS). Z745: EQU $ LA COESC SLRS NOCMO=K < CONVERSION EN UNE TAILLE-MOT. CPZ PSTESC-DCTESC+RS,L < DISCRIMINATION DES APPELS < PAR SVC, DES APPELS PAR QUIT. JL Z850 < L'ESCLAVE EST EN MODE MAITRE, < L'APPEL A DONC EU LIEU PAR SVC, < ET L'ADRESSE DE RETOUR EST DANS < LA PILE K. < < CAS D'UN ESCLAVE EN MODE ESCLAVE : L'APPEL < A EU LIEU PAR QUIT, ET LE P DE RETOUR < EST LE P DU CONTEXTE ESCLAVE : < CP PSTESC-DCTESC+RP,L JMP Z851 < VERS L'ERREUR EVENTUELLE. < < ESCLAVE EN MODE MAITRE:APPEL PAR SVC, < PSTESC CONTIENT LE 'P' DE RETOUR < Z850: EQU $ PSR A,B,Y LR A,B < (B)=TAILLE MEMOIRE DEMANDEE LY PSTESC-DCTESC+RK,L < Y RECOIT LE 'K' DE < L'ESCLAVE, RELATIF AU 'SLO' < DE L'ESCLAVE. LAR < 'SLO' EST BON CPR A,B < VALIDATION DE 'K' PLR A,B,Y < < BRANCHEMENT EN VIOLATION MEMOIRE EVENTUELLE : < Z851: EQU $ JLE E745 < LA TAILLE DEMANDEE EST INFERIEURE < AU REGISTRE P DE RETOUR, ON < COURT VERS UNE VIOLATION < MEMOIRE : ALLOCATION REFUSEE. < < OK, CAS OU COESC EST BON : < LAI FONMEM < (A)=FONCTION DEMANDEE, EN VUE DE < SA MISE EN PLACE EN OPDEM DE < DEMESC (POUR SERESC). < < F I N 1 E R E P A R T I E D ' U N < F A U X S E R V I C E I M M E D I A T : < Z69: EQU $ < < ON A ICI : < (A)=FONCTION DEMANDEE. < STZ DEMESC-DCTESC+XXNSP,L < MISE EN PLACE D'UN NSPTYP NUL < A DESTINATION DE SERESC. JMP ZZ61 < FAISONS COMME SI LE SERVICE < N'ETAIT PAS IMMEDIAT. < < A T T E N T I O N : < ICI, ON A (X)#0 (=NUMERO DE BIT : 2,3,4). CECI < EST PARFAIT A CAUSE DES TESTS QUI VONT < SUIVRE EN E754 (BLOCAGE SWAPPING A EVITER < DE TOUTE EVIDENCE!!!!). < PAGE < < < C O N N E X I O N A U N N S P : < < < FONCTION : < CE SVC PERMET, LORSQU'UN ESCLAVE < TRAVAILLE SOUS :SYS DE MODIFIER EN < COURS D'EXECUTION LA TABLE DES AS- < SIGNATIONS ('TASSGN') SANS VERIFICATION < D'ASSIGNATION PREALABLE ; ON PEUT < DONC AINSI FAIRE UNE DESASSIGNATION... < SI LE 'NSP' DEMANDE EST SUPERIEUR < A 'NSPINI', ALORS LA CONNEXION NE < SE FAIT PAS (ERREUR '83), ET DE PLUS < BOXESC <-- 'NSP' ASSIGNE AU 'NVP' < DEMANDE ; ON PEUT AINSI TESTER L'ETAT < DES ASSIGNATIONS... < < < ARGUMENT : < (L)=ADRESSE DCT(ESCLAVE), < (Y)=ADRESSE DCT(SVC). < < USE L,DCT0 SVCNSP: EQU $ XR Y,L < (L)=@DCT-SVC. LA ACNSYS < MOT0 DE L'ACN DU SYSTEME. LB ACNSYS+U < MOT1 DE L'ACN DU SYSTEME. XR Y,L < RESTAURE (L)=@DCT-ESCLAVE. < < VALIDATION DU DEMANDEUR : < CP ACNESC-DCTESC,L JNE E743 < ACN NON AUTORISE. LR B,A CP ACNESC-DCTESC+U,L JNE E743 < ACN NON AUTORISE. LA MEMV TBT MEMXXX < CE 'SVC' N'EST-IL PAS INHIBE ??? JNC E743 < ET OUI... < < OK, LE DEMANDEUR TRAVAILLE SOUS :SYS : < < < FORMAT AMESC : < OCTET0(AMESC)=NUMERO DE L'ENTREE DESIREE DANS < LA TABLE TASSGN (=NVP). < OCTET1(AMESC)=NSP DEMANDE, SOIT : < '00 : DISCONNEXION, < PHIN/PHOUT : !ASSIGN I/O, < DE PHIN+PHOUT+1/2+1 A NSPNINI : < !ASSIGN <NVP>=<NSP>. < < LBY AMESC < (A)=NUMERO DE L'ENTREE DE TASSGN. JAE E742 < ERREUR : NVP INEXISTANT. CPI NOCMO*LTASGN < VALIDATION. JGE E742 < ERREUR : NVP INEXISTANT. LR A,X < (X)=NUMERO DE L'ENTREE DANS TASSGN. LA AMESC ANDI MOCD < (A)='NSP' DEMANDE ; A NOTER QUE < LE NSP DEMANDE PEUT ETRE NUL, < ON FAIT DONC ALORS UNE DISCON- < NEXION !!!! CPI NSPINI < VALIDATION NSP DEMANDE. JG E743XY < ERREUR, RENVOYONS LE 'NSP' ASSIGNE < DEJA AU 'NVP' DEMANDE. JAE Z67X < CAS D'UNE DECONNEXION... PSR A,X,L LR A,X BSR ACADCT < (A)=L=ADRESSE DCT(X). LA DCTFON < ACCES A LA LISTE DES FONCTIONS < ACCESSIBLES... CPI XXDCTF < EST-CE UNE 'DCT' INACCESSIBLE ??? PLR A,X,L JE E742 < OUI, CONNEXION REFUSEE !!! Z67X: EQU $ LR A,B < SAUVEGARDE DU 'NSP' DEMANDE DANS 'B'... LBY &TASSGN-DCTESC,L < (A)='NSP' ANTERIEUR EVENTUEL, < (B)='NSP' DEMANDE... XR A,B < RESTAURE : < (A)='NSP' DEMANDE, < (B)='NSP' ANTERIEUR EVENTUEL... CPZR B < Y-AVAIT'IL UN 'NSP' ANTERIEUR ??? < A NOTER QU'ON FAIT CE TEST SUR 'B' < ET NON PAS AVANT LE 'XR' SUR 'A' < AFIN QUE LES REGISTRES SOIENT RETABLIS < AVANT L'EVENTUELLE 'SYSER'... JE Z67Y < OK, LE 'NVP' DEMANDE (X) N'ETAIT PAS < ASSIGNE... BSR ASYSER < A V E R T I S S E M E N T ... < < QUE FAIRE ??? < EXAMINER LE 'NSP' ANTERIEUR DANS < LE REGISTRE 'B' ; SI CELUI-CI EST < PAR EXEMPLE 'DKF', ON PEUT L'ECRA- < SER SANS PROBLEME, MAIS S'IL S'AGIT < D'UNE UNITE ASSIGNABLE PAR "!ASSIGN", < OU PIRE D'UN FICHIER, IL FAUT FAIRE < ATTENTION : ON POURRA PAR EXEMPLE < SAUTER EN 'Z67' POUR UN RETOUR OK, < OU EN 'E743XY' POUR UN RETOUR EN < ERREUR !!! < Z67Y: EQU $ < < OK, MODIFICATION DE TASSGN : < STBY &TASSGN-DCTESC,L < < F I N S E R V I C E I M M E D I A T O K , < O U P A S S A G E D E M A I N D E < L ' E S C L A V E : < Z67: EQU $ LAI K < RETOUR OK D'UN SERVICE IMMEDIAT. JMP E740 < < RENVOI DE L'ETAT D'UNE ASSIGNATION 'NVP' -->... < E743XY: EQU $ LBY &TASSGN-DCTESC,L STA BOXESC-DCTESC,L < ON RENVOIE LE 'NSP' ASSIGNE AU < 'NVP' ARGUMENT DANS 'BOXESC'. JMP E743 < VERS L'ERREUR 'NSP' INEXISTANT... PAGE < < < A P P E L D U C C I E N < M O D E N O N I N T E R A C T I F : < < < FONCTION : < CE SVC PERMET A UN PROGRAMME DE FAIRE < ANALYSER DES COMMANDES DESTINEE < A CCI QU'IL DONNE EN ARGUMENT DU SVC. < ON PEUT AINSI DANS UN PROGRAMME FAIRE DES < ASSIGN DYNAMIQUES, DU LANCEMENT DE JOB < PARALLELES... < < < ARGUMENTS : < (AMESC)=ADRESSE OCTET DE LA CARTE A ANALYSER, < (COESC)=LONGUEUR DE LA CARTE A ANALYSER. < (L)=ADRESSE DCT(ESCLAVE). < < < A T T E N T I O N : < CE 'SVC' EST EN FAIT UN FAUX SERVICE < IMMEDIAT. IL NECESSITE L'APPEL DE 'OMOV1' < AFIN DE TRANSPORTER LA CARTE < A ANLYSER DANS BUFESC. DONC LE CODE < DE SVC DOIT ETRE UNE ECRITURE ('02). < < SVCCIM: EQU $ LA RECOTO-DCTESC,L < TEST D'UN LOGOUT DEMANDE A < L'APPEL PRECEDENT. CP INFINI JE SVCEJ < OUI, DISCONNECT (END-JOB). < < VALIDATION PRIMAIRE DU COESC : < (AFIN QU'ON FASSE UN OMOV1) < LA COESC CPI LCCINT < VALIDATION... IF LBUFES*NOCMO-LCCINT,,XEIF%,XEIF% IF ATTENTION : IL RISQUE D'Y AVOIR DEBORDEMENT IF DES "CARTES" AU 'CCI' INTERPRETATIF AU-DELA IF DU BUFFER 'BUFESC' DE L'UTILISATEUR' !!! XEIF%: VAL ENDIF JGE745: JG E745 < ERREUR : COESC TROP GRAND. < (ET RELAI...) < < OK, MEMORISATION DE L'ETAT CCI NON INTERACTIF : < BSR ASMMK <<<< MASK IT LA IDESC-DCTESC,L TBT IDESCI < VALIDATION IDESC. JNC SYSR27 < OK. BSR ASYSER < E R R E U R S Y S T E M E .... SYSR27: EQU $ SBT IDESCI < MODE CCI NON INTERACTIF. STA IDESC-DCTESC,L < MAJ IDESC. BSR ASMDK <<<< DEMASK IT LAI FOCCIM < (A)=FONCTION DEMANDEE, EN VUE DE < SA MISE EN PLACE EN OPDEM DE < DEMESC (POUR SERESC). JMP Z69 < VERS LA FIN DE LA 1ERE PARTIE < D'UN FAUX SERVICE IMMEDIAT. PAGE < < < M I S E E N S O M M E I L P O U R U N T E M P S < D O N N E D ' U N E S C L A V E : < < < FONCTION : < 1 - 1<=(COESC)<=60 : < CE FAUX SERVICE IMMEDIAT MET EN SOMMEIL < L'ESCLAVE POUR UN TEMPS DETERMINE (DE 1 A 60 < SECONDES), SANS REVEIL POSSIBLE ; EN EFFET L'ALT < MODE SERA SANS EFFET (MAIS MEMORISE) JUSQU'A CE QUE < LE TEMPS SE SOIT ECOULE (CF. DODO). < 2 - (COESC)=0 : < CE FAUX SERVICE IMMEDIAT MET < L'UTILISATEUR EN ATTENTE DE SYN- < CHRONISATION SUR LE MOT 'CDAG0' < DE LA 'CDAG'. < < < ARGUMENT : < (COESC)=TEMPS EN SECONDES (1 A 60 SECONDES). < < SVCDOR: EQU $ DODCDA:: VAL K < VALEUR DE 'COESC' PERMETTANT DE DEMANDER < LA SYNCHRONISATION SUR 'CDAG0'... LA COESC < VALIDATION DE LA DUREE DE < SOMMEIL DEMANDEE. IF DODCDA-K,,XEIF%, IF ATTENTION : LA VALEUR DE 'DODCDA' EST INCOM- IF PATIBLE AVEC LE TEST CI-DESSOUS, ET AVEC IF LES DUREES AUTORISEES DE SOMMEIL (DE 1 A 60) !!! XEIF%: VAL ENDIF JAL JAL745 < ERREUR (<0) !!! CPI MINUTE JG JGE745 < ERREUR PLUS DE 60 SECONDES < DEMANDEES... < < CAS OU LA DUREE DEMANDEE EST BONNE (1 A 60 SECONDES) : < LAI FONDOR < (A)=FONCTION DEMANDEE, EN VUE DE SA < MISE EN OPDEM DE DEMESC, POUR < SERESC. JMP Z69 < VERS LA FIN DE LA 1ERE PARTIE < D'UN FAUX SERVICE IMMEDIAT. PAGE < < < F A U S S E S L E C T U R E S / E C R I T U R E S : < < < FONCTION : < 1- LA FONCTION '08, OU FAUSSE LECTURE PERMET < DE MODIFIER EVENTUELLEMENT QUELQUES UNS DES < 15 PREMIERS OCTETS DE BUFESC, A PARTIR DE CEUX < DE MEME RANG DE ZDC, PUIS DE RENVOYER BUFESC A < L'UTILISATEUR; < 2- LA FONCTION '0A OU FAUSSE ECRITURE PERMET A < L'UTILISATEUR DE POSITIONNER BUFESC, PUIS < EVENTUELLEMENT DE MODIFIER QUELQUES UNS DES < 15 PREMIERS OCTETS DE ZDC A PARTIR DE CEUX DE < MEME RANG DE BUFESC. < POUR LES 2 FONCTIONS, IL EST POSSIBLE < D'ETRE MIS EN ATTENTE 2 SECONDES AVANT < L'EXECUTION DE LA FONCTION ; C'EST TRES < UTILE POUR LES PROGRAMMES QUI COOPERENT < PAR CE MOYEN... < < < ARGUMENTS : < (W)=ADRESSE DEMANDE ESCLAVE. < (L)=ADRESSE DCT(ESCLAVE). < ARGESC(DEMANDE DE L'EDCLAVE)= < BITS 0-14 : LISTE DE BITS VALIDANT < LES OCTETS DE MEME RANG (X) < DE LA 'ZDC' ET DE 'BUFESC' ; < BIT 15 : INDICATEUR D'ATTENTE PREALABLE. < < < RESULTAT : < (A)=FONFR/FONFW. < < SVCZDC: EQU $ LB ARGESC < ACCES A LA LISTE DE VALIDATION < DES 15 PREMIERS OCTETS DE BUFESC < ET DE LA ZONE COMMUNE ZDC ET DE L'INDI- < CATEUR DE PRE-ATTENTE. STB ARGUM-DCTESC,L < ET TRANSMISSION A 'SERESC' PAR < LE MOT VARIABLE 'ARGUM' DE DCTESC JMP Z69 < VERS LA FIN DES FAUX SERVICES < IMMEDIATS. PAGE < < < O U E S T L ' E S C L A V E , E T < E N V O I D E L A D E M A N D E < D E S E R V I C E : < < < NOTA : < CE MODULE EST PLACE ICI, < MAINTENANT, PARCEQUE J'AI < DES PROBLEMES DE SAUTS RE- < LATIFS SUPERIEURS A 128 MOTS !!! < < AE776: JMP E776 < POINT DE PASSAGE DU 'CCI' INTERACTIF. AE762: JMP E762 < EN HAUT, IL FAUT LE FAIRE REDESCENDRE... < (ET RELAI POUR LE 'END-JOB'...). < < AUTRES CAS (QUE 'CCI' < INTERACTIF ET 'END-JOB') : < E741X: EQU $ XR Y,L < RESTAURE (Y)=ADRESSE DE 'DCTSVC', ET < (L)=ADRESSE DE 'DCTESC'. < < < P O S I T I O N D E L ' E S C L A V E : < < PSR A < SAUVEGARDE DU 'NSP' DU SERVICE DEMANDE, < OU BIEN D'UNE VALEUR NEGATIVE SI LE < SERVICE DEMANDE EST IMMEDIAT... LRM A WORD SLOM1N < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE < DE SWAPPING, CP PSTESC-DCTESC+RSLO,L < ALORS L'ESCLAVE EST-IL EN MEMOIRE BASSE, < OU EN MEMOIRE HAUTE (C'EST-A-DIRE DE < SWAPPING) ??? PLR A < RESTAURE : (A)=IDENTIFICATEUR ('NSP',...) < DU SERVICE DEMANDE... JG E741X5 < L'ESCLAVE EST EN BAS, ON PEUT ENVOYER LA < DEMANDE DE SERVICE IMMEDIATEMENT... < < CAS OU L'ESCLAVE EST EN HAUT : < PSR A < SAUVEGARDE DE L'IDENTIFICATEUR ('NSP', < ...) DU SERVICE DEMANDE. JAGE E741X1 < ET OUI, C'EST UN 'NSP'... LAI NSPSVC < LORSQU'IL S'AGIT D'UN SERVICE IMMEDIAT, < C'EST DIRECTEMENT 'DCTSVC' QUI VA DONNER < LA LISTE DES "ALTITUDES" 'DCTFUP'... E741X1: EQU $ ANDI XNVPF)MOCD < A CAUSE DES 'NSPSGF'... LR A,X < (X)='NSP' DU SERVICE DEMANDE (OU 'NSPSVC' < DANS LE CAS D'UN SERVICE IMMEDIAT). PSR L < SAUVEGARDE DE L'ADRESSE DE 'DCTESC'... BSR ACADCT < RENVOIE : (A)=(L)=ADRESSE DE DCT(X)... LA NVPFON ANDI MASSFO < RECALCUL DE (A)=FONCTION DEMANDEE, LR A,X < (X)=FONCTION DEMANDEE, LA DCTFUP < (A)=LISTE DES "ALTITUDES" DES FONCTIONS < ASSOCIEES AU SERVICE DEMANDE, PLR L < RESTAURE : (L)=ADRESSE DE 'DCTESC', TBT L,X < ALORS, LA FONCTION (X) DEMANDEE PEUT-ELLE < S'EXECUTER EN HAUT ??? JNC E741X2 < ET BIEN NON, LA FONCTION DEMANDEE DOIT < IMPERATIVEMENT ETRE EXECUTEE EN MEMOIRE < BASSE (C'EST DOMMAGE...). < < CAS D'UNE FONCTION POUVANT S'EXECUTER EN HAUT : < LA IDDESC-DCTESC,L < ACCES A LA LISTE DES INDICATEURS : TBT IDESC7 < VALIDATION ??? JNC E741X6 < OK, IDESC7=0... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE POURQUOI IDESC7=1, < ALORS QU'IL EST REMIS A 0 DANS < 'RUNO' !!! < E741X6: EQU $ SBT IDESC7 STA IDDESC-DCTESC,L < ON INDIQUE AINSI A 'DOWN' QU'EN FAIT < IL NE FAUT PAS REDESCENDRE L'ESCLAVE, < ET FAIRE UN 'SERESC'... < < CAS D'UNE FONCTION NE POUVANT QUE S'EXECUTER EN BAS : < E741X2: EQU $ BSR ADOWN < REVEIL DU NIVEAU DE SERVICE AUQUEL CET < ESCLAVE EST DEJA ATTACHE, AFIN DE : < - SOIT (SI IDESC7=0) FAIRE < DESCENDRE CET ESCLAVE EN MEMOIRE BASSE, < QUI EST MALHEUREUSEMENT SI RESTREINTE... < DE PLUS, 'DOWN' A PREPARE L'ITERATION < DE CETTE DEMANDE DE SERVICE ESCLAVE, AFIN < QU'ELLE SOIT REITERER ET DONC RECUE ALORS < QU'IL SERA EN MEMOIRE BASSE... < - SOIT (SI IDESC7=1) FAIRE UN 'SERESC'. PLR A < RESTAURE L'IDENTIFICATEUR ('NSP',...) DU < SERVICE DEMANDE... JE E741X8 < OK, L'ESCLAVE EST BIEN EN MEMOIRE HAUTE.. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE POURQUOI L'ESCLAVE A ETE < PRECEDEMMENT DETECTE EN MEMOIRE HAUTE, < ET QU'ON LE TROUVE MAINTENANT EN BAS !!! < < < CAS D'UN ESCLAVE SE TROUVANT EN MEMOIRE BASSE : < E741X5: EQU $ < < < A L L O C A T I O N D U N I V E A U D E S E R V I C E : < < LXI XOTIM < SERVICE IMMEDIAT A PRIORI... JAL E738 < EFFECTIVEMENT... LXI XOTNP < NON, ON A DANS 'A' UN 'NSP' E776: EQU $ < SORTIE RESERVEE AUX 'SVC CCI'. CPI HINSP < EST-CE UN NSP PRIORAITAIRE... ADCR X < ON A ICI : < (X)=1,3 : NSP>=(HINSP) : NON < PRIORITAIRE, < (X)=2,4 : NSP<(HINSP) : NSP < PRIORITAIRE. E738: EQU $ < < VALIDATION DE L'ESCLAVE : < LRM A WORD SLOM2N < (A)=PLUS PETIT 'SLO' POSSIBLE EN MEMOIRE < HAUTE, CP PSTESC-DCTESC+RSLO,L < ALORS OU EST L'ESCLAVE ??? JG E741X7 < OK, IL EST EN BAS... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ON ARRIVE ICI < AVEC UN UTILISATEUR EN MEMOIRE HAUTE ; < C'EST CERTAINEMENT, UN MODULE QUI SE < BRANCHE ICI DIRECTEMENT (CF. 'CCI') !!! < BSR ADOWN < ET BIEN FAISONS LE DESCENDRE... JE E741X8 < OK, IL ETAIT BIEN EN HAUT, ON RESSORT < DE 'HDLSVC'... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE QU'EST-CE QUE C'EST < QUE CE BORDEL !!! < E741X7: EQU $ < < TEST D'UN ACCES A 'DKU' : < (NOTA IMPORTANT : IL NE < FAUT PAS OUBLIER QUE L' < UTILISATEUR EST EN BAS, < ET QUE LES FONCTIONS < 'FONTV', 'FONTVR' ET < 'FONTVW' NE PEUVENT QUE < S'EFFECTUER EN BAS; EN < EFFET DANS LE CAS CONTRAI- < RE, LE HANDLER DE SERVICE < DEJA ALLOUE A L'UTILISA- < TEUR NE PEUT RECEVOIR LES < REFERENCES DE LA 'CDA' COU- < RANTE PAR 'OPDEM'...) < LBY DEMESC-DCTESC+XXNSP,L < (A)='NSP' DE LA DEMANDE UTILISATEUR < COURANTE, IF NSPSG0-NSPDKU,XEIF%,, IF ATTENTION : 'DKU' NE DOIT PAS ETRE AVANT LE IF 'SGN' SI L'ON VEUT QUE LA SUITE MARCHE BIEN !!! XEIF%: VAL ENDIF CPI NSPSG0 < EST-CE LE 'SGN' ??? JL E741XA < NON, ET DONC ENCORE MOINS 'DKU'... XWOR%1: VAL NSPNXS XWOR%2: VAL NSPNXP XWOR%3: VAL XWOR%1 < MIN(NXP,NXS) A PRIORI, XWOR%4: VAL XWOR%2 < MAX(NXP,NXS) A PRIORI. IF XWOR%2-XWOR%1,,XEIF%,XEIF% XWOR%3: VAL XWOR%2 < MIN(NXP,NXS), XWOR%4: VAL XWOR%1 < MAX(NXP,NXS). XEIF%: VAL ENDIF IF XWOR%4-XWOR%3-I,,XEIF%, IF ATTENTION : 'NXP' ET 'NXS' DOIVENT ETRE CONTIGUS !!! XEIF%: VAL ENDIF IF NSPSGN-XWOR%4,,XEIF%, IF ATTENTION : POUR QUE LES TESTS QUI SUIVENT IF FONCTIONNENT CORRECTEMENT, 'NXP' ET 'NXS' IF DOIVENT ETRE LES DERNIERS HANDLERS DU 'SGN' !!! XEIF%: VAL ENDIF CPI XWOR%3 < ALORS, EST-CE LE 'SGN' ??? JL E741XE < OUI, C'EST 'DLN', 'STN', 'LON', 'LNS' < OU 'LNU'... IF XWOR%4-NSPDKU,XEIF%,, IF ATTENTION : 'DKU' NE DOIT PAS ETRE AU MILIEU DU 'SGN' !!! XEIF%: VAL ENDIF CPI NSPDKU < EST-CE 'DKU' ??? JNE E741XA < NON... LA DEMESC-DCTESC+T+OPDEM,L < OUI : ANDI MKOPDM < (A)=FONCTION DEMANDEE, CPI FONTV < EST-CE L'INTERPOLATION BASSE DEFINITION ? JE E741XB < OUI... RBT XBITQ < SUPPRESSION DE LA DISCRIMINATION DES < QUANTA... WORD CPFTVW < EST-CE LE TRANSFERT : 'MEMTV' --> 'DKU' ? JE E741XB < OUI... WORD CPFTVR < EST-CE LE TRANSFERT : 'DKU' --> 'MEMTV' ? JNE E741XA < NON, IL NE S'AGIT NI DE 'FONTV', NI < DE 'FONTVW', NI DE 'FONTVR', ON LAISSE < DONC (SLO,SLE) INCHANGES... E741XB: EQU $ E741XE: EQU $ IF NSPSVC-NSPSCH,XEIF%,, IF ATTENTION : POUR QUE LA RECUPERATION DE LA IF 'CDA' DE L'UTILISATEUR COURANT PAR LES MOTS IF 'OCDA' ET 'ECDA' FONCTIONNE CORRECTEMENT, IF FAUT QUE 'SVC' SOIT PLUS PRIORITAIRE QUE IF 'SCH', AFIN QUE 'SCH' N'AILLE PAS LES MODI- IF FIER POUR LE COMPTE D'UN AUTRE UTILISATEUR IF AVANT QU'ON NE LES AIT RECUPERES ICI !!! XEIF%: VAL ENDIF XR Y,L < (L)=ADRESSE DE 'DCTSVC', < (Y)=ADRESSE DE 'DCTESC'. LA &VAR+SVCDO < (A)=ORIGINE DE LA 'CDA' COURANTE DE < L'UTILISATEUR COURANT : LR A,B < QUE L'ON SAUVEGARDE DANS 'B', SLRS XSLO32 < QUE L'ON RAMENE PAR DEFAUT A LA SLLS XSLO32 < PAGE DE 32K LA PLUS PROCHE... XWOR%1: VAL -XSLO32 IF MEMTV0>XWOR%1>XSLO32-MEMTV0,,XEIF%, IF ATTENTION : LA 'CDAI' N'EST PAS A UNE FRONTIERE DE 32K !!! XEIF%: VAL ENDIF IF MCDAJO>XWOR%1>XSLO32-MCDAJO,,XEIF%, IF ATTENTION : LA 'CDAJ' N'EST PAS A UNE FRONTIERE DE 32K !!! XEIF%: VAL ENDIF CPR A,B < LA 'CDA' COURANTE EST-ELLE A UNE FRON- < TIERE DE 32K ??? JNE E741XC < NON, DONC ON NE PEUT UTILISER LE MECA- < NISME DEFINI DANS 'CHAND' ET 'HANDLR' < POUR TRANSMETTRE LA 'CDA' COURANTE, < PUISQUE CE SONT DES NUMEROS DE PAGE < DE 32K QUI SONT TRANSMIS... LB &VAR+SVCDE < (B)=FIN DE LA 'CDA' COURANTE DE < L'UTILISATEUR COURANT, ET < (A)=ADRESSE DE DEBUT DE LA 'CDA'... CP VAR+SVCDIO < EST-CE LA 'CDAI' ??? JE E741XD < OUI... < NOTONS QUE SI LE TEST EST NEGATIF, CE < PEUT ETRE QUAND MEME LA 'CDAI', MAIS < ASSIGNEE A QUELQU'UN D'AUTRE, ET L'ON < SAIT QU'ALORS 'SCH' PERMUTE L'ORIGINE < ET L'EXTREMITE POUR PROVOQUER DES < TRAPPES... TBT BMCDAJ < EST-CE LA 'CDAJ' ??? JC E741XD < OUI... < (MEME REMARQUE QUE POUR LA 'CDAI' EN < CAS DE TEST NEGATIF...) E741XC: EQU $ < CAS DES 'CDA' NON SITUEES A DES FRON- < TIERES DE 32K, OU BIEN DES 'CDA' QUI NE < SONT PAS 'CDAI' OU 'CDAJ', OU BIEN QUI < SONT 'CDAI' OU 'CDAJ' MAIS ASSIGNEES < A UN AUTRE UTILISATEUR... < A NOTER QUE LE TEST DE FRONTIERE EST < ACTUELLEMENT INUTILE ET REDONDANT, MAIS < IL EST LA POUR LES EXTENSIONS FUTURES... < DANS CES CAS LA, ON VA FORCER L'UNE < DES 'CDA' D'IMAGE : 'CDAJ', OU 'CDAI' < SUIVANT QU'IL Y A OU PAS UN "!CDAI=J" < EN COURS... XR Y,L < POUR UN ACCES TEMPORAIRE A 'DCTESC'... LA IDDESC-DCTESC,L < (A)=LISTE 'IDDESC' D'INDICATEUR : TBT IDESCJ < Y-A-T'IL UN "!CDAI=J" EN COURS ??? XR Y,L < RESTAURE 'Y' ET 'L'... JNC E741XI < NON, ON VA FORCER LA 'CDAI'... LA VAR+SVCDJO < OUI, ON FORCE LB VAR+SVCDJE < LA 'CDAJ+0'... JMP E741XD < VERS LA MISE EN PLACE DE LA 'CDA'... E741XI: EQU $ LA VAR+SVCDIO < DANS CE CAS, LB VAR+SVCDIE < ON FORCE LA 'CDAI'... E741XD: EQU $ XR Y,L < RESTAURE : < (L)=ADRESSE DE 'DCTESC', < (Y)=ADRESSE DE 'DCTSVC'. PSR A < SAUVEGARDE DE L'ORIGINE DE LA 'CDA' < CHOISIE... LBY DEMESC-DCTESC+XXNSP,L < (A)='NSP' DE LA DEMANDE COURANTE : CPI NSPDKU < ALORS, EST-CE 'DKU' OU LE 'SGN' ??? JE E741XF < 'DKU'... < < DEFINITION DES MOYENS DE < TRANSMISSION DES EXTENSIONS < SUR VOLUME POUR LE 'SGN' : < MSGNU:: VAL MOCG < MASQUE POUR 'ASDEM' DE LA DEMANDE PER- < METTANT DE DISCRIMINER LES DEMANDES < DE TYPE CONVENTIONNEL, DES DEMANDES DE < TYPE EXTENSION... BSGNU:: VAL BITSIG < BIT DE DISCRIMINATION DANS 'MSGNU'. XWOR%1: VAL MSGNU=BSGNU ISGNU:: VAL COSBT?XWOR%1=FMASK(K?NSPDKG=FCINST < INDICATEUR QUE L'ON DOIT TROUVER DANS < LE CHAMP 'MSGNU' DE 'ASDEM' POUR LES < DEMANDES D'EXTENSION... XWOR%2: VAL MSGNU=K XWOR%3: VAL ISGNU>XWOR%2 IF XWOR%3-K,XEIF%,, IF ATTENTION : LE CHAMP DISCRIMINATEUR DOIT DONNER IF NAISSANCE A UN 'ASDEM' NEGATIF POUR EVITER DES IF CONFUSIONS ENTRE DES GRANDS DEPLACEMENT ENTRE IF <NOM> ET <VALEUR> ET DES DEMANDES D'EXTENSION !!! XEIF%: VAL ENDIF < < CAS DU 'SGN' (EN CAS D'ACCES < AUX VOLUMES D'EXTENSION, IL FAUT < TRANSMETTRE LA 'CDA' COURANTE) : < LA DEMESC-DCTESC+T+ASDEM,L < (A)='ASDEM' DE LA DEMANDE : XWOR%1: VAL MSGNU=K SLRS XWOR%1 < ET ACCES AU DISCRIMINATEUR DES ACCES < AUX EXTENSIONS SUR VOLUME... XWOR%1: VAL -XWOR%1 XWOR%2: VAL CODBT=FMASK(K?MSGNU=FCINST)MSGNU IF XWOR%2-L,,XEIF%, ANDI MSGNU>XWOR%1 < EXTRACTION DU CHAMP 'MSGNU'. XEIF%: VAL ENDIF IF XWOR%2-BSGNU,,XEIF%, IF ATTENTION : 'BSGNU' EST BIZARRE !!! XEIF%: VAL ENDIF CPI ISGNU < ALORS, EST-CE L'EXTENSION VOLUME ??? JNE E741XG < ET BIEN NON, IL N'Y A PAS D'EXTENSION... PLR A < IL Y A EXTENSION : < (A)=ADRESSE DE LA 'CDA' COURANTE DE < L'UTILISATEUR, OU DE LA 'CDAI' DANS < LES AUTRES CAS, SLRS XSLO32 < ET CONVERSION EN UN NUMERO DE PAGE < DE 32K, PSR A < QUE L'ON SAUVEGARDE... PAGSGN:: VAL MOCG < ON VA UTILISER MOCG(CODEM) POUR TRANS- < METTRE LE NUMERO DE LA PREMIERE PAGE < DE 32K DE LA 'CDA'... LA DEMESC-DCTESC+T+CODEM,L < PUISQU'ON UTILISE UNE PARTIE DU 'CODEM' < POUR TRANSMETTRE CE NUMERO DE PAGE, < VALIDONS-LE AU PREALABLE : CPI PAGSGN)MMOT < LORS DES ACCES AUX VOLUMES EXTENSION, < UNE SEULE VALEUR DE 'CODEM' EST AUTO- < RISEE... PLR A < (A)=NUMERO DE LA PREMIERE PAGE DE 32K < DE LA 'CDA'... JLE E741XH < OK, 'CODEM' EST BON... LAI XNDSLO+I < IL EST MAUVAIS, ON VA FORCER UN NUMERO < DE PAGE INEXISTANT (LA PREMIERE PAGE < INEXISTANTE). E741XH: EQU $ IF PAGSGN-MOCG,,XEIF%, IF ATTENTION : LES INSTRUCTIONS SUR OCTET SONT INVALIDES !!! XEIF%: VAL ENDIF STBY DEMESC-DCTESC+T+CODEM,L < LE NUMERO DE LA PREMIERE PAGE DE 32K < DE LA 'CDA' DE L'UTILISATEUR (OU DE < LA 'CDAI') EST TRANSMISE AU 'SGN' DANS < L'OCTET GAUCHE DU 'CODEM'... JMP E741XA < VERS L'ALLOCATION DU 'HDLSER'... E741XG: EQU $ PLR A JMP E741XA < LORSQU'IL N'Y A PAS D'EXTENSION < SION SUR VOLUME DU 'SGN', ON NE < FAIT RIEN... < < CAS DE 'DKU' (ON VA TRANSMETTRE < LORS DES ACCES A LA 'TV' BASSE- < DEFINITION LA 'CDA' COURANTE < DE L'UTILISATEUR, OU LA 'CDAI') : < E741XF: EQU $ PLR A < RESTAURE : < (A)=ADRESSE DE DEBUT DE LA 'CDA'... WOE < DANS LE CAS DE L'UNE DE3 3 FONCTIONS 'TV' < ON SE POSITIONNE SUR LA 'CDA' COURANTE, < AFIN QUE 'HDLDKU' AILLE Y TRAVAILLER... E741XA: EQU $ < < ALLOCATION DU NIVEAU DE SERVICE : < XR Y,L < RESTAURE (L)=ADRESSE 'DCTSVC'. LB &VAR+LOTO < ACCES A L'ADRESSE DE L'AUTOMATE < DE SERVICE. XR Y,L < RESTAURE (L)=ADRESSE DE 'DCTESC'. STZ DEMESC-DCTESC+T+ETADEM,L < RAZ DE L'ETADEM DE DEMESC. BSR AALOHS < ALLOCATION D'UN HANDLER DE SERVICE, < ET EXECUTION DU SERVICE, A < L'AIDE DE L'AUTOMATE (B). < < < S O R T I E D E ' H D L S V C ' : < < E741X8: EQU $ < SORTIE AVEC RESTAURATION DE 'L'... XR Y,L < RESTAURE (L)=ADRESSE DE 'DCTSVC'. E762: EQU $ < SORTIE RESERVEE A END-JOB, E741X4: EQU $ < CAS D'UNE FONCTION DEMANDEE EN MEMOIRE < HAUTE (SUIVANT 'IDESC7' ELLE Y SERA OU < PAS, EXECUTEE...). IF E741X4-E762-K,,XEIF%, IF ATTENTION : LES POINTS DE PASSAGE DU 'CCI' IF INTERACTIF ET DE 'END-JOB' EN 'AE776' ET IF 'AE762' SONT MAUVAIS !!! XEIF%: VAL ENDIF RSR PAGE < < < G E N E R A T I O N D U ' N S P T Y P ' < D E L A D E M A N D E C O U R A N T E : < < < FONCTION : < CE MODULE, IMPLANTE ICI SOUS < LA FORME D'UN SOUS-PROGRAMME A < CAUSE DE CES MAUDITS SAUTS SU- < PERIEURS A 128 MOTS, GENERE LA < 'NSPTYP' DE LA DEMANDE UTILISA- < TEUR COURANTE, ET DANS LE CAS < DES DEMANDES A 'DKU', OU BIEN < DES DEMANDES AU "SGN" LORSQU'IL < Y A UN VOLUME MONTE POUR CET < UTILISATEUR, TRANSMET A LA < TACHE DEMANDEE, VIA LA 'BOX', < SOIT LA LISTE DES GROUPES DE < CYLINDRES POSSEDES PAR CET UTI- < LISATEUR, SOIT L'EXISTENCE, OU < LA NON-EXISTENCE D'UN VOLUME < MONTE POUR CE DERNIER... < < < ARGUMENTS : < (A)='NSP' DE LA TACHE DEMANDEE, < (Y)=ADRESSE DE 'DCTESC', < (L)=ADRESSE DE 'DCTSVC'. < < < RESULTATS : < (Y)=ADRESSE DE 'DCTSVC', < (L)=ADRESSE DE 'DCTESC', < 'NSPTYP' DE LA DEMANDE GENERE, ET < 'BOX' EVENTUELLEMENT. < < SVCDKU: EQU $ XR Y,L < TOUT DE SUITE : < (L)=ADRESSE DE 'DCTESC', ET < (Y)=ADRESSE DE 'DCTSVC'. < < TEST D'UNE DEMANDE A 'DKU' OU AU "SGN" : < PSR X,W < SAUVEGARDE DU 'NSP' DEMANDE, ET DE < L'ADRESSE DES ARGUMENTS ESCLAVE... PSR A < SAUVEGARDE DU 'NSP'... LX LUDKU-DCTESC,L < (X)=LISTE DES GROUPES DE CYLINDRES POS- < SEDES PAR CET UTILISATEUR, A PRIORI.. IF NSPDKU-NSPDKG,,XEIF%, IF ATTENTION : LE 'CPI' QUI SUIVRA, ENTRE AUTRES, IF N'A PAS BEAUCOUP DE SENS !!! XEIF%: VAL ENDIF CPI NSPSG0 < EST-CE UN ACCES "SGN" ??? JL Z1941B < NON... CPI NSPSGN < EST-CE UN ACCES "SGN" ??? JG Z1941B < NON... < < CAS D'UNE DEMANDE ADRESSEE AU "SGN" : < CPI NSPNXS < EST-CE 'SUIVANT-SERIE' ??? JE Z1941E < OUI, MODIFICATION DE 'ADINEX'... CPI NSPNXP < EST-CE 'SUIVANT-PARALLELE' ??? JE Z1941E < OUI, MODIFICATION DE 'ADINEX'... Z1941F: EQU $ LA IDDESC-DCTESC,L < (A)=LISTE DES INDICATEURS D'ETAT DE < L'UTILISATEUR : TBT IDESC8 < A-T'IL UN VOLUME MONTE ??? LXI NSPDKG < (X)='NSPDKG' : OUI A PRIORI... JC Z1941C < ET OUI, L'UTILISATEUR A UN VOLUME MONTE, NGR X,X < DANS LE CAS OU IL N'Y A PAS DE VOLUME < MONTE, ON INVERSE 'X'... Z1941C: EQU $ LR X,A < DANS LE CAS D'UNE DEMANDE AU "SGN", ON < A ICI, EN POSITIF OU NEGATIF, LE 'NSP' < DU DISQUE SUPPORT DE VOLUME... JAGE Z1941D < ON PREND NGR A,A < LA VALEUR ABSOLUE DE 'NSPDKG'. Z1941D: EQU $ < < ALORS EST-CE 'DKU'/"SGN" OU LE RESTE ??? < Z1941B: EQU $ CPI NSPDKU < ON TESTE ICI 'NSPDKU' (QUI EST AUSSI < 'NSPDKG' !!!), C'EST-A-DIRE QU'ON REGAR- < AINSI SI LA DEMANDE S'ADRESSE A 'DKU' < OU AU "SGN", OU PAS... < < GENERATION DU 'NSPTYP' : < PLR A < RESTAURE : < (A)='NSP' DE LA TACHE DEMANDEE... SWBR A,A < GENERATION D'UN NSPTYP COMPA- < TIBLE AVEC CHAND. XWOR%7: VAL K XWOR%7: VAL COSBT?VBOX=FMASK(K?XWOR%7=FCINST ORI XWOR%7 < MISE DE 'DEMESC' EN MODE SYMBOLIQUE, ET < VALIDATION DE SA 'BOX'... STA DEMESC-DCTESC+XXNSP,L < MISE EN PLACE DU NSPTYP DE DEMESC. JNE Z1941A < CE N'EST PAS 'DKU', NI LE "SGN"... < < CAS DE 'DKU' (IL FAUT LUI TRANSMETTRE < LA LISTE DES GROUPES DE CYLINDRE POSSEDE < PAR L'UTILISATEUR) OU DU "SGN" (IL FAUT < LUI TRANSMETTRE S'IL Y A UN VOLUME MONTE) : < LR L,W < (W)=ADRESSE DE LA 'DCTESC', ADRI DEMESC-DCTESC,W < (W)=ADRESSE DE LA DEMANDE A 'DKU', BSR ASTBOX < ON TRANSMET (X) A LA TACHE DEMANDEE, < A SAVOIR : < (X)=LISTE DES GROUPES DE CYLINDRES POS- < SEDES PAR CET UTILISATEUR POUR 'DKU', < (X)=+NSPDKG, POUR LE "SGN" S'IL Y A UN < VOLUME DE MONTE, < (X)=-NSPDKG, POUR LE "SGN" S'IL N'Y A < PAS DE VOLUME MONTE... < < RETOUR DU MODULE : < Z1941A: EQU $ PLR X,W < RESTAURE : < (X)='NSP' DEMANDE, ET < (W)=ADRESSE DES ARGUMENTS ESCLAVE... RSR < < TRAITEMENT PARTICULIER DES < DEMANDES A 'NSPNXS' ET 'NSPNXP' : < Z1941E: EQU $ XR Y,L < AFIN D'ATTEINDRE 'DCTSVC' PAR (L)... DC VAR+ADINEX < EN EFFET, 'NSPNXS' ET 'NSPNXP' RAJOUTE < LORSQUE CELA EST POSSIBLE UN OCTET EN < BOUT DE BUFFER, IL FAUT DONC ABAISSER < D'UNE UNITE L'ADRESSE DU PREMIER OCTET < INACESSIBLE... XR Y,L < RESTAURATIONS... JG Z1941F < OK, 'ADINEX' EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT 'ADINEX' < A PU DEVENIR NEGATIF OU NUL !!! < JMP Z1941F < ET RETOUR A LA GENERATION DE 'DEMESC'... PAGE < < < V A L I D A T I O N D E ' A M E S C ' E T ' C O E S C ' : < < < FONCTION : < CE MODULE, MIS ICI POUR LES < RAISONS HABITUELLES (SAUT SUPE- < RIEUR A 128 MOTS...), EST RESPON- < SABLE DE VALIDER 'AMESC' ET 'COESC' < PAR RAPPORT A L'ESPACE MEMOIRE ALLOUE < A L'UTILISATEUR... < < < ARGUMENTS : < (A)='AMESC' (ADRESSE OCTET RELATIVE), < (B)='COESC' (LONGUEUR OCTET DE L'ECHANGE), < (Y)=ADRESSE DE 'DCTESC', < (L)=ADRESSE DE 'DCTSVC'. < < < RESULTATS : < 'A' ET 'B' INCHANGES, < (Y)=ADRESSE DE 'DCTSVC', < (L)=ADRESSE DE 'DCTESC', < INDICATEURS POSITIONNES POUR FAIRE UN 'JNE' SI LES < ARGUMENTS SONT MAUVAIS. < < PSVC1: EQU $ PSR A,B < SAUVEGARDE DES ARGUMENTS... JAL PSVC11 < ERREUR : (AMESC)<0... XWOR%1: VAL SLOESC*NOCMO IF MXMEME-XWOR%1-K,,,XEIF% IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!! XEIF%: VAL ENDIF CP VAR+ADINEX JGE PSVC11 < ERREUR : (AMESC)>='ADINEX'... XR A,B < PERMUTONS 'AMESC' ET 'COESC' : JALE PSVC11 < ERREUR : (COESC)<=0... CP VAR+ADINEX JG PSVC11 < ERREUR : (COESC)>'ADINEX'... ADR B,A < FORMONS : < (A)='AMESC'+'COESC'=ADRESSE DU PREMIER < OCTET SUIVANT LE BUFFER : JALE PSVC11 < ERREUR : (AMESC)+(COESC)<=0... CP VAR+ADINEX JG PSVC11 < ERREUR : (AMESC)+(COESC)>'ADINEX'... < < OK, 'AMESC' ET 'COESC' < PARAISSENT VALIDES : < LAI EXIST < (A)=CODE OK... < < RETOUR : < PSVC12: EQU $ CPI EXIST < POSITIONNEMENT DES INDICATEURS PERMETTANT < DE FAIRE UN 'JNE' SI LES ARGUMENTS SONT < INVALIDES... PLR A,B < RESTAURATIONS DE : < (A)='AMESC', < (B)='COESC'. XR Y,L < ET POSITIONNEMENT DES "BASES" : < (Y)=SAUVEGARDE DE 'DCTSVC', < (L)=ADRESSE DE 'DCTESC'. RSR < ET VOILA... < < TRAITEMENT DES ERREURS : < PSVC11: EQU $ LAI NEXIST < (A)=CODE D'ERREUR... JMP PSVC12 < VERS LA SORTIE... PAGE < < < E X E C U T I O N D E S Q U I T : < < < FONCTION : < LE FORMAT D'UN 'QUIT' EST '1EX6 ; < LA VALEUR DE 'X' DETERMINE L'ACTION A < ENTREPRENDRE A LA SUITE DU QUIT : < X=0 : LE 'QUIT' EST ASSIMILE A UN 'SVC', < DONT LES ARGUMENTS SONT < RELAYES PAR LE REGISTRE 'A' < EN ADRESSAGE RELATIF. < X=1 A 'F : LE 'QUIT' EST UN 'SVC' SIMULE, < DONT LES ARGUMENTS SONT < IMPLICITES ET RELAYES < PAR LA TABLE QUI SUIT EN < ADRESSAGE ABSOLU : < < X=1 : APPEL DIRECT DU 'CCI', PERMETTANT < DONC LA POSE DE 'BREAK-POINTS'... < < CALL #SISP CMS5 DOL1# TXQUIT: EQU $ WORD NIL < 1E06 : 'QUIT'='SVC'. WORD SIMCCI < 1E16 : APPEL DIRECT DU 'CCI'. IF $-TXQUIT-D-XXQUIT,,XEIF%, IF ATTENTION : 'SIMCCI' EST MAL PLACEE !!! XEIF%: VAL ENDIF WORD SIMERR < 1E26 : 'QUIT' NON RECONNU. WORD SIMERR < 1E36 : 'QUIT' NON RECONNU. WORD SIMERR < 1E46 : 'QUIT' NON RECONNU. WORD SIMERR < 1E56 : 'QUIT' NON RECONNU. WORD SIMERR < 1E66 : 'QUIT' NON RECONNU. WORD SIMERR < 1E76 : 'QUIT' NON RECONNU. WORD SIMERR < 1E86 : 'QUIT' NON RECONNU. WORD SIMERR < 1E96 : 'QUIT' NON RECONNU. WORD SIMERR < 1EA6 : 'QUIT' NON RECONNU. WORD SIMERR < 1EB6 : 'QUIT' NON RECONNU. WORD SIMERR < 1EC6 : 'QUIT' NON RECONNU. WORD SIMERR < 1ED6 : 'QUIT' NON RECONNU. WORD SIMERR < 1EE6 : 'QUIT' NON RECONNU. WORD SIMERR < 1EF6 : 'QUIT' NON RECONNU. < < < A R G U M E N T S I M P L I C I T E S : < < < NOTA : < ON TROUVE CI-DESSOUS UN < CERTAIN NOMBRE DE DEMANDES < TYPE (EN ADRESSAGE ABSOLU) < CORRESPONDANT A CE QUE L'ES- < CLAVE AURAIT PU LUI-MEME < ENVOYER... < < SIMCCI: BYTE K;FONCCI < APPEL DU 'CCI' SANS TOUCHER < NI AU REGISTRE 'A', NI AU < REGISTRE 'X', NI AU REGISTRE 'K'... SIMERR: BYTE K;NFON < FONCTION INEXISTANTE POUR LES < 'QUIT' NON RECONNUS. PAGE < < < C O N V E R S I O N E N U N E A D R E S S E < M O T D E ' S L O ' : < < < FONCTION : < CE SOUS-PROGRAMME EST RAJOUTE AVEC < LE RUN EN MEMOIRE HAUTE, AFIN D'ETRE < SUR QUE LORSQU'ON UTILISE 'SLO' ET < 'SLE' EN MEMOIRE BASSE, IL S'AGISSE < BIEN EFFECTIVEMENT D'ADRESSE BASSE < DONC CONVERTIBLE EN MOT... < < < ARGUMENT : < (A)=ADRESSE SUPPOSE EN DADR-MOTS < ET EN MEMOIRE BASSE. < < < RESULTAT : < (A)=ARGUMENT CONVERTI EN ADRESSE DE MOTS. < < CALL #SISP CMS5 DOL2# PDADR: EQU $ PSR B XWOR%1: VAL FADR/UMEM=K XWOR%1: VAL -XWOR%1 XWOR%2: VAL -SLOESC/UMEM+MEMORY>XWOR%1 LRM B WORD XWOR%2 < (B)=VALEUR QUE NE PEUT DEPASSER (A). CPR A,B < Y-A-T'IL VIOLATION ??? JGE PDADR1 < (B)>=(A), DONC L'ARGUMENT EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < MODIFIER LE SYSTEME CAR VISIBLEMENT < ON UTILISE UN (SLO,SLE) DE MEMOIRE HAUTE !!! < PDADR1: EQU $ SLLS -DADR < CONVERSION DE 'A' EN UNE ADRESSE < DE MOTS... PLR B RSR CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1#