< S I S C M S 5 2
PAGE
CALL #SISP CMS5 CHECK#
PAGE
<
<
< R E L E A S E S E M A P H O R E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EFFECTUE
< L'OPERATION 'RLSE' D'UN SEMA-
< PHORE, ET CE DE DEUX FACONS
< DIFFERENTES SUIVANT :
<
< 1 - SI LES INTERRUPTIONS SONT
< DEMASQUEES (IOM=IPM=0), ALORS
< ON EXECUTE L'INSTRUCTION 'RLSE'
< DE LA MICRO-MACHINE.
<
< 2 - SI LES INTERRUPTIONS SONT
< MASQUEES, ALORS ON EST OBLIGE
< D'EMULER L'INSTRUCTION 'RLSE',
< CAR EN EFFET, SINON, EXECUTEE
< TELLE QUELLE, ELLE DEMASQUERAIT
< LES INTERRUPTIONS...
<
<
< ARGUMENTS:
< (A)=ADRESSE DU SEMAPHORE.
<
<
< RESULTATS:
< EQUIVAUT DANS TOUS LES CAS
< A L'EXECUTION DE L'INSTRUC-
< TION 'RLSE' A CECI PRES :
< LORSQUE LES INTERRUPTIONS
< SONT MASQUEES, L'OCTET 0 DU
< COMPTEUR RESTE INCHANGE.
<
<
< A T T E N T I O N :
< CE SOUS-PROGRAMME DETRUIT 'A' !!!
<
<
RLSE: EQU $
USE W,SEMBET
PSR B,X,Y,W < SAUVEGARDES...
LR A,W < (W)=ADRESSE SEMAPHORE...
<
< TEST DES INTERRUPTIONS :
<
BSR ASMIT < ETAT DE MASQUAGE DES INTERRUPTIONS :
< RENVOIE DANS 'A' : 'IOM' ET 'IPM'.
< NOTA : SI IOM#IMP, 'SMIT' FAIT
< UNE SYSER...
JANE RLSE2 < IOM=IPM=1 : INTERRUPTIONS MASQUEES...
<
< CAS DES INTERRUPTIONS
< NON MASQUEES :
<
RLSE SEMBET < PUISQUE IOM=IPM=K, UTILISONS
< L'INSTRUCTION, TOUT BETEMENT...
JMP RLSE9 < ET C'EST TOUT...
<
< CAS DES INTERRUPTIONS
< MASQUEES :
<
RLSE2: EQU $ < IPM=IOM=1, FAIRE LE RLSE
< "A LA MAIN" POUR NE PAS DEMAS-
< QUER LES INTERRUPTIONS...
LA SEMBET < CHARGEMENT DU SEMAPHORE :
SCLD XMBETA < B (BITS8-15)=OCTET0(SEM),
SARS XMBETA < (A)=OCTET1(SEM), SIGNE ETENDU.
CPI MAXBET < VALIDATION DU COMPTEUR :
JL RLSE3 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX PARAIT DE FAIRE 'JMP RLSE9'...
<
RLSE3: EQU $
ADRI I,A < PROGRESSION DU COMPTEUR,
LR A,Y < (Y)=COMPTEUR(SEM),
SLLS XMBETA
SCRD XMBETA < (A)=NOUVELLE VALEUR DU SEMAPHORE,
STA SEMBET < ET MISE A JOUR DE CELUI-CI...
CPZR Y < COMPTEUR(SEM) > 0 ???
JG RLSE9 < OUI, COMPTEUR(SEM) > 0,
< NE RIEN FAIRE DE PLUS CAR
< AUCUNE TACHE N'EST EN ATTENTE...
<
< CAS OU AU MOINS UNE
< TACHE EST EN ATTENTE :
<
RLSE8: EQU $ < ICI, IL FAUT METTRE A 0 LE
< 1ER BIT A 1 DANS FILE(SEM)
< ET METTRE A 1 LE BIT CORRES-
< PONDANT DE ESTF :
LAD SEMWQ < (A)=ADRESSE DE LA LISTE DES TACHES,
LXI NTS0 < (X)=RANG DU PREMIER BIT A TESTER,
LYI LSEM*NBITMO < (Y)=RANG DU PREMIER BIT A NE PLUS
< TESTER.
DRBM
JNC RLSE1 < ON A TROUVE UN BIT A 1 DANS
< LA FILE(SEM), OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT LA FILE PEUT
< ETRE VIDE, ALORS QUE LE COMPTEUR
< N'EST PAS POSITIF !!!
<
JMP RLSE9
RLSE1: EQU $ < ICI, (X)=RANG DU BIT A METTRE
< A 1 DANS 'ESTF',
LAI ESTF-ZERO < (A)=ADRESSE DE LA FILE 'ESTF',
SBTM NTS0,X < SET BIT DE RANG (X) DE 'ESTF'...
<
< ET SORTIE :
<
RLSE9: EQU $
PLR B,X,Y,W < RESTAURATIONS
RSR
PAGE
<
<
< A D R E S S E D ' U N ' I C ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME PERMET
< DE CONNAITRE L'ADRESSE (B)
< DE L''IC' ASSOCIE A LA TACHE
< HARDWARE DONT LE NUMERO EST
< DONNE DANS 'A'.
<
< ARGUMENT:
< (A)=NIVEAU DE LA TACHE HARDWARE.
<
< RESULTAT:
< (B)=ADRESSE DE L''IC' DE LA TACHE HARDWARE.
<
<
SMIC: EQU $
PSR A,X < SAUVEGARDES...
MP LIC < (A)=NIVEAU HARD*LONGUEUR 'IC',
LR B,X < (X)=INDEX IC(I),
LB &AXIC < (B)=ADRESSE 'IC',
< NOTA : ON PEUT LE FAIRE, CAR (AXIC)
< =AXIC OU AUTREMENT DIT, LE 1ER MOT
< D'UN 'IC' POINTE SUR L''IC' LUI-MEME...
PLR A,X < RESTAURATIONS...
RSR
PAGE
<
<
< T E S T D E S I N T E R R U P T I O N S :
<
<
< FONCTION :
< CE SOUS-PROGRAMME PERMET DE
< SAVOIR SI LES INTERRUPTIONS
< (D'ENTREES-SORTIES, DE DEFAUT
< SECTEUR ET INTER-PROCESSEURS)
< SONT MASQUEES.
<
<
< RESULTAT :
< (A)=K : LES INTERRUPTIONS NE SONT PAS MASQUEES,
< #0 : ELLES SONT MASQUEES ('A' CONTIENT EN
< FAIT ALORS LES BITS 'IPM' ET 'IOM').
<
<
SMIT: EQU $
PSR B
CALL #SISP CMS5 RST#
LRM B
WORD MIPM?MIOM < MASQUE DE TEST DES BITS DE MASQUAGE
< DES INTERRUPTIONS ('IPM' ET 'IOM').
ANDR B,A < AFIN DE NE CONSERVER QUE LES BITS
< DE MASQUES DES INTERRUPTIONS A
< L'INTERIEUR DU REGISTRE 'ST'.
JAE SMIT1 < (A)=K : LES INTERRUPTIONS NE
< SONT PAS MASQUEES.
CPR A,B < ELLES SONT MASQUEES, MAIS LE SONT-ELLES
< TOUTES ('IPM' ET 'IOM') ???
JE SMIT1 < OUI, (A)#0...
<
< S Y S E R : ON A 'IPM'#'IOM' !!!
<
< (A)=BITS 'IPM' ET 'IOM' DU REGISTRE 'ST'.
<
SMIT2: EQU $
BSR ATDEFS < ON NE PEUT FAIRE APPEL A 'SYSER',
< CAR LUI-MEME FAIT APPEL A 'SMIT'...
YSYSER: EQU $ < ADRESSE DE BOUCLAGE DE CETTE FAUSSE
< E R R E U R S Y S T E M E ...
JMP SMIT2 < ET ON SE BLOQUE...
<
< RETOUR FACILE :
<
SMIT1: EQU $
PLR B
RSR
PAGE
<
<
< M A S Q U A G E / D E M A S Q U A G E
< G E N E R A L
< D E S I N T E R R U P T I O N S :
<
<
< FONCTION :
< LE SYSTEME DISPOSE DE 2 S/P
< LUI PERMETTANT DES DEMANDES
< IMBRIQUEES DE MASQUAGE/DEMASQUAGE
< SUIVANT LES 2 SCHEMAS INDIQUEES
< CI-DESSOUS :
<
< (MASK DEMASK)
< (MASK DEMASK)
< (MASK...DEMASK)
<
< OU PAR EXEMPLE :
<
< (MASK ACQ)
< (MASK )
< (MASK...DEMASK)
< (L'INSTRUCTION 'ACQ' DEMASQUANT TOUTES
< LES INTERRUPTIONS...)
<
<
< INTERRUPTIBILITE :
< EVIDEMMENT, TANT QUE LE MASQUAGE DU
< PROCESSEUR N'EST PAS EFFECTIF (ALORS
< QUE L'ETAT COURANT EST TEL QUE IPM=IOM=K)
< UNE OU PLUSIEURS INTERRUPTIONS PEUVENT
< VENIR INTERROMPRE LA SEQUENCE DE
< MASQUAGE; EN FAIT IL N'Y A PAS D'ALEA
< 'SMASK' ETANT TRANSFERE DANS LE REGISTRE
< 'Y', ET DONC PARTICIPANT AINSI AUX
< CHANGEMENTS DE CONTEXTES. LE SEUL RISQUE
< APPARAIT LORSQUE IPM#IOM; SI UNE INTER-
< RUPTION APPARAIT ENTRE CE TEST ET LA
< SYSER ON RISQUE :
< - SOIT DE FAIRE 2 SYSERS DE MEME CAUSE
< LORSQUE L'INTERRUPTION FAIT ELLE-MEME
< UN APPEL MASQUAGE,
< - SOIT DE FAIRE LA SYSER AVEC IPM=IOM=K,
< PARCE QUE L'INTERRUPTION PAR UN 'ACQ'
< AURA FAIT IPM=IOM=K...
<
<
< NOTA :
< CETTE SEQUENCE AYANT ETE EMPRUNTEE A 'CMS4-MP',
< IL NE FAUT PAS S'ETONNER QUE L'ON Y PARLE DE
< "PROCESSEUR COURANT" ALORS QUE CMS5 EST MONO-
< PROCESSEUR...
<
<
< M A S Q U A G E G E N E R A L :
<
<
SMMK: EQU $
PSR A,Y
LY SMASK < ACCES A L'ETAT DE MASQUAGE
< SUPPOSE COURANT DU PROCESSEUR
< (A CAUSE DES DEMASQUAGES IMPLI-
< CITES REALISES PAR LES INSTRUCTIONS
< PASSANT DANS LE MICRO-SCHEDULER :
< ACQ, WAIT, ACT, ACTD,...)
<
< TEST DE L'ETAT COURANT DU PROCESSEUR :
<
CALL #SISP CMS5 SST#
TBT IPM < INTERRUPTIONS INTER-PROCESSEURS
< MASQUEES ???
JC SMMK1 < ON SUPPOSE QUE LE PROCESSEUR
< COURANT EST DEJA MASQUE...
TBT IOM < INTERRUPTIONS D'ENTREES-SORTIES
< ET DE DEFAUT SECTEUR MASQUEES ???
JC SMMK2 < S Y S E R : IPM=K ET IOM=1 !!!
LYI SMASK0 < LE PROCESSEUR COURANT N'ETAIT PAS
< MASQUE : ON VA REINITIALISER SON
< ETAT DE MASQUAGE...
JMP SMMK3 < VERS LE MASQUAGE EFFECTIF.
SMMK1: EQU $
TBT IOM < INTERRUPTIONS D'ENTREES-SORTIES
< ET DE DEFAUT SECTEUR MASQUEES ???
JNC SMMK2 < S Y S E R : IPM=1 ET IOM=K !!!
SMMK3: EQU $
ADRI I,Y < MISE A JOUR DE L'ETAT DE MASQUAGE
< PAR COMPTAGE DES IMBRICATIONS.
JCV SMMK2 < S Y S E R : ETAT DE MASQUAGE
< IMPOSSIBLE !!!
<
< MASQUAGE EFFECTIF DU PROCESSEUR :
< (CE MASQUAGE EFFECTIF EST FAIT
< MEME SI IPM ET IOM SONT DEJA A 1)
<
LRM A
WORD MIPM?MIOM
SST < MASQUAGE DES INTERRUPTIONS INTER-
< PROCESSEURS (IPM) ET D'ENTREES-
< SORTIES/DEFAUT SECTEUR (IOM).
STY SMASK < MEMORISATION DE L'ETAT DE MASQUAGE
< DU PROCESSEUR.
PLR A,Y
RSR
<
< S Y S E R : LORS DU DEMASQUAGE D'UN PROCESSEUR :
<
< 1- IPM#IOM : VOIR LE CONTENU DE 'A',
< 2- DEBORDEMENT OU REPORT SUR 'SMASK' : ON
< TROUVERA DANS LE REGISTRE 'A' : IPM=IOM.
<
SMMK2: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
JMP SMMK3 < ET ON RESSORT PAR LE MASQUAGE
< GENERAL DU PROCESSEUR.
<
<
< D E M A S Q U A G E G E N E R A L :
<
<
SMDK: EQU $
PSR A
<
< TEST DE L'ETAT COURANT DU PROCESSEUR :
<
CALL #SISP CMS5 RST#
TBT IPM
JNC SMDK2 < S Y S E R : LES INTERRUPTIONS
< INTER-PROCESSEURS NE SONT PAS
< MASQUEES !!!
TBT IOM
JNC SMDK2 < S Y S E R : LES INTERRUPTIONS
< D'ENTREES-SORTIES/DEFAUT SECTEUR
< NE SONT PAS MASQUEES !!!
DC SMASK < DECOMPTAGE DES IMBRICATIONS DE
< MASQUAGE.
< (NOTA : CE 'DC' EST FAISABLE
< DIRECTEMENT SUR 'SMASK', CAR
< EN EFFET LES INTERRUPTIONS
< SONT MASQUEES : IPM=IOM=1,
< IL N'Y A DONC PAS DE PROBLEMES
< D'INTERRUPTIBILITE...)
JG SMDK1 < SMASK>0 : LE PROCESSEUR N'EST PAS
< ENCORE SORTI DE LA PHASE MASQUEE
< COURANTE, IL Y RESTE DONC...
JL SMDK2 < S Y S E R : SMASK<0; ON A ALORS
< LE 'CARY' A 1.
<
< DEMASQUAGE REEL DU PROCESSEUR :
<
SMDK3: EQU $
PSR A,B,X
IC KTDEFS < INHIBITION DES TESTS DE 'TDEFS'
< (CETTE INHIBITION DES DEFAUTS SECTEUR
< EN ATTENTE EST PLACEE ICI CAR 'SMASK'
< VIENT DE PASSER A 0, MAIS LES INTER-
< RUPTIONS NE SONT PAS EFFECTIVEMENT
< DEMASQUEES ; ON RISQUE DONC UNE SYSER
< AU 'RESTART'...)
BSR ASMWHO < QUI EST LA ???
DC KTDEFS < AUTORISATION DES TESTS DE 'TDEFS'
CPI TYPTH < EST-CE UN TACHE HARD?
JNE SMDK4 < OK, CE N'EST PAS UNE TACHE 'HARDWARE'...
<
< S Y S E R : UNE TACHE 'HARDWARE' VEUT DEMASQUER SES
< INTERRUPTIONS !!!
<
< (A)='TYPTH',
< (B)=NUMERO DE LA TACHE 'HARDWARE'.
<
BSR ASYSER < E R R E U R S Y S T E M E ...
PLR A,B,X
JMP SMDK1 < PUIS, ON IGNORE LE DEMASQUAGE...
SMDK4: EQU $
PLR A,B,X
LRM A
WORD MIPM?MIOM
RST < DEMASQUAGE DES INTERRUPTIONS
< INTER-PROCESSEURS (IPM) ET D'ENTREES-
< SORTIES/DEFAUT SECTEUR (IOM).
EIT < ET OUI, IL FAUT QUAND MEME EXECUTER
< L'INSTRUCTION 'EIT' DE DEMASQUAGE
< DU BIT 'IOM' CAR L'INSTRUCTION 'EIT'
< PERMET DE TESTER LES INTERRUPTIONS
< EN ATTENTE DEPUIS LE MASQUAGE,...
< BRAVO LA 'SEMS' !!!
ACQ < A T T E N T I O N : UNE TACHE 'HARD-
< WARE' NE DEMASQUE JAMAIS SES INTER-
< RUPTIONS EXPLICITEMENT ; EN CONSEQUENCES
< UNE TACHE 'HARDWARE' NE FERA JAMAIS CET
< 'ACQ' ; A QUOI SERT-IL ??? LORSQUE LES
< INTERRUPTIONS SONT MASQUEES, ON NE PEUT
< TOUCHER AUX DONNEES DU 'MICRO-SCHEDULER'
< QUE PAR PROGRAMME, ET NON EN UTILISANT
< LES INSTRUCTIONS DE SON OPTION ; LORSQUE
< LES INTERRUPTIONS SE DEMASQUENT, IL FAUT
< FAIRE PRENDRE EN COMPTE CES MODIFICATIONS
< EN FORCANT UN PASSAGE DANS LE 'MICRO-
< SCHEDULER' PAR CET 'ACQ'...
SMDK1: EQU $
PLR A
RSR
<
< S Y S E R : LORS DU DEMASQUAGE GENERAL :
<
< 1- IPM#IOM : LE 'CARY' VAUT ALORS 0,
< 2- SMASK<0 : LE 'CARY' VAUT ALORS 1.
<
SMDK2: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
JMP SMDK3 < ET ON RESSORT PAR UN DEMASQUAGE
< GENERAL.
PAGE
<
<
< A D R E S S E D ' U N E ' P S T H ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME RENVOIE
< L'ADRESSE DE LA 'PSTH' D'UNE
< TACHE HARDWARE DONT LE NIVEAU
< EST DONNE.
<
< ARGUMENT:
< (A)=NIVEAU DE LA TACHE HARDWARE.
<
< RESULTAT
< (B)=ADRESSE DE LA 'PSTH' ASSOCIEE.
<
<
SMTH: EQU $
PSR X < SAUVEGADE...
LR A,B < (A)=(B)=NIVEAU HARDWARE,
SLLS LPSTH=K < (A)=NIVEAU HARD*LPSTH,
LR A,X < (X)=INDEX PSTH(I),
LAD &AXPSTH < (A)=ADRESSE PSTH(I),
XR A,B < (A)=NIVEAU HARDWARE,
< (B)=ADRESSE PSTH(I).
PLR X < RESTAURATION...
RSR
PAGE
<
<
< I D E N T I F I C A T I O N D U
< D E M A N D E U R :
<
<
< FONCTION :
< CE SOUS-PROGRAMME PERMET DE
< CONNAITRE LE DEMANDEUR ET
< DE DISCRIMINER LES 'TACHES
< SOFTWARES' DES 'TACHES
< HARDWARES'...
< ON NOTERA A CE PROPOS QUE 'CMS5'
< ASSIMILE LE DEFAUT SECTEUR A UNE
< 'TACHE HARDWARE'...
<
<
< A T T E N T I O N :
< POUR DONNER UN RESULTAT CORRECT (DANS
< LA TACHE DEFAUT SECTEUR S'IL Y EST APPELE),
< CE SOUS-PROGRAMME DOIT ETRE UTILISE APRES
< LA MISE A JOUR DE 'ICSAV' INDIQUANT QUE
< LA SAUVEGARDE DES REGISTRES DE LA TACHE
< INTERROMPUE A ETE FAITE !!!
<
<
< RESULTAT :
< (A)=TYPE DISCRIMINANT UNE 'TACHE
< SOFTWARE' ('TYPTS') D'UNE
< 'TACHE HARDWARE' ('TYPTH'),
< (B)=NUMERO DE 'TACHE HARDWARE' SI
< 'TYPTH', OU 'NSP' SI 'TYPTS'.
<
<
SMWHO: EQU $
PSR X < SAUVEGARDE DE 'X'...
CALL #SISP CMS5 RST#
TBT WARNG < Y-A-T'IL UN DEFAUT SECTEUR ???
JNC SMWHO2 < NON...
<
< CAS OU IL Y A UN DEFAUT SECTEUR,
< MAIS IL FAUT D'ABORD SAVOIR S'IL
< EST ACTIF OU EN ATTENTE :
<
PSR W < SAUVEGARDE DE 'W'...
LAI NUMDEF < (A)=NUMERO DE LA TACHE 'DEFSEC',
BSR ASMIC < RENVOIE (B)=ADRESSE 'IC' DE LA
< TACHE 'HARD' DONT LE NUMERO
< EST DANS 'A'...
LR B,W
USE W,PSTH < POUR BASER L''IC' DU 'DEFSEC'...
CPZ ICSAV < INDICATEUR DE SAUVEGARDE DE
< LA TACHE 'DEFSEC' ELLE-MEME...
PLR W < RESTAURATION DE 'W'...
JE SMWHO2 < ET BIEN, ON N'EST PAS DANS LA
< TACHE DEFAUT SECTEUR, BIEN QUE
< CE DERNIER SOIT EN ATTENTE ; CELA
< SIGNIFIE QUE LES INTERRUPTIONS
< SONT MASQUEES !!!
<
< C A S D U ' D E F A U T S E C T E U R ' :
<
LAI TYPTH < (A)='TYPTH' MALGRE TOUT...
LBI NUMDEF < (B)=NUMERO DE LA 'TACHE DEFAUT
< SECTEUR'.
JMP SMWHO1 < ET C'EST TOUT...
<
< ' T H ' O U ' T S ' :
<
SMWHO2: EQU $
RDHV < POUR DISCRIMINER LES 'TH' DES 'TS',
< IL SUFFIT DE LIRE LE REGISTRE 'HV'
< DONNANT LES 'TACHES HARDWARES'
< EN COURS.
LBI K < CLEAR DU REGISTRE 'B', AFIN QUE
< L'INSTRUCTION 'DBT' FONCTIONNE BIEN...
DBT < RECHERCHE D'UNE 'TACHE HARDWARE' ACTIVE
< (LA PLUS PRIORITAIRE).
JC SMWHO3 < 'CARY'=1 : IL N'Y A PAS DE 'TACHES
< HARDWARES' ACTIVES...
<
< C A S D ' U N E ' T A C H E H A R D W A R E ' :
<
LAI TYPTH < (A)='TYPTH'.
LR X,B < LE 'DBT' A MIS LE NUMERO DE CETTE
< 'TACHE HARDWARE' DANS 'X', ON LE
< REMET DANS 'B'.
JMP SMWHO1 < ET C'EST TOUT...
<
< C A S D ' U N E ' T A C H E S O F T W A R E ' :
<
SMWHO3: EQU $
LB &ANS < (B)='NIVEAU SOFTWARE' DE CETTE 'TACHE
< SOFTWARE' DONNE PAR LE MOT 'NS'
< DE LA MEMOIRE DEBANALISEE.
ADRI -NSNSP0,B < TRANSLATION DU 'NS' POUR OBTENIR
< LE 'NSP'
LAI TYPTS < PUIS (A)=TYPTS...
<
< R E T O U R A U D E M A N D E U R :
<
SMWHO1: EQU $
PLR X < RESTAURATION DE 'X'...
RSR
PAGE
<
<
< L E C T U R E E T A F F I C H A G E P U P I T R E
<
<
SIOPUI: WORD ACPUP?FPHIN < OPERANDE 'SIO' ENTREE INFORMATION,
SIOPUE: WORD ACPUP?FPHETA < OPERANDE 'SIO' ENTREE ETAT,
SIOPUO: WORD ACPUP?FPHOUT < OPERANDE 'SIO' SORTIE INFORMATION,
SIOPUC: WORD ACPUP?FPHCME < OPERANDE SIO SORTIE VOYANTS SELECTION.
<
<
< FONCTION :
< CE S/P LIT DANS 'A' LE MOT ENTRE AU PUPITRE
< ET PLACE DANS 'B' LE MOT D'ETAT DU PUPITRE. LE
< PROGRAMME APPELANT DEVRA TESTER LE CONTENU DE
< 'B' POUR SAVOIR S'IL DOIT OU NON PRENDRE EN
< COMPTE LE CONTENU DE 'A', ENFIN, IL
< POSITIONNE LE CARRY 'C' PAR UN 'TBT'
< SUR LE BIT INFORMATION VALIDE, SOIT
< LE BIT 'ETAPIV' DE 'B'...
<
<
SMPUI: EQU $
BSR ATDEFS < AU CAS OU L'APPELANT FERAIT UN BOUCLAGE
< SUR CE SOUS-PROGRAMME, EN ATTENDANT
< DES INFORMATIONS VALIDES...
PSR L < SAUVEGARDE...
LRM L
WORD SIOPUI < (L)=ADRESSE DE L'OPERANDE D'ENTREE
< D'INFORMATION.
SIO SIOPUI-SIOPUI,L < LECTURE DANS 'A' DU PUPITRE,
LR A,B
SIO SIOPUE-SIOPUI,L < LECTURE DANS 'A' DU MOT D'ETAT,
XR A,B < (A)=MOT LU,
< (B)=MOT D'ETAT PUPITRE.
PLR L < RESTAURATION...
TBT NBITMO+PUPLOC < LE PUPITRE EST-IL LOCKE ???
JC SMPUI1 < NON, OK...
RBT NBITMO+ETAPIV < OUI, ON FAIT COMME S'IL N'Y AVAIT PAS
< D'INFORMATION VALIDE...
SMPUI1: EQU $
TBT NBITMO+PUSTEP < Y-A-T'IL EU ACTION SUR 'STEP' ???
JC SMPUI2 < OUI, OK...
RBT NBITMO+ETAPIV < NON, ON FAIT COMME S'IL N'Y AVAIT
< PAS D'INFORMATION VALIDE...
SMPUI2: EQU $
TBT NBITMO+ETAPIV < POUR PERMETTRE UN TEST AU RETOUR
< SUR "INFORMATION VALIDE"...
RSR
<
<
< V I S U A L I A T I O N P U P I T R E :
<
<
< FONCTION :
< CE S/P VISUALISE AU PUPITRE LE CONTENU
< DU REGISTRE 'A', SANS ATTENDRE LA FIN DE TRANSFERT
< DU REGISTRE 'DATA OUT' AU VOYANTS DU PUPITRE...
<
<
SMPUO: EQU $
PSR L
LRM L
WORD SIOPUO < (L)=ADRESSE DE L'OPERANDE DE SORTIE.
SIO SIOPUO-SIOPUO,L < ET AFFICHAGE DE L'INFORMATION (A)...
PLR L
RSR
PAGE
<
<
< S Y S E R - T R A I T E M E N T D E S E R R E U R S :
<
<
< FONCTION:
< CE S/P EST APPELE LORSQU'EST RENCONTREE
< UNE ERREUR SYSTEME. IL REGARDE SI L'ON EST EN
< PHASE MASQUEE OU NON, ET AGIT COMME SUIT :
< - SI L'ON EST EN PHASE MASQUEE,
< IL BOUCLE SUR UN APPEL A TDEFS OU
< BIEN A SMPUI SUIVANT LA VALEUR 0/1
< DE 'RECON' DANS 'ETASYS'.
< - SI L'ON N'EST PAS EN PHASE MASQUEE,
< IL FAIT 'ACTD'...
<
<
SYSER: EQU $
XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES.
#@PSR A,B,L < #SISP CMS5 KREG#
XWOR%1: VAL -XKREG < NOMBRE DE REGISTRES EMPILES.
LR K,L < 'L' BASE LA PILE 'K'...
LA -XWOR%1,L < (A)=VALEUR DU REGISTRE 'P' DE 'SYSER'.
LRM L
WORD SIOPUC < (L)=BASE DES ARGUMENTS DU PUPITRE.
SIO SIOPUC-SIOPUC,L < VISUALISATION DU REGISTRE 'P' DE
< 'SYSER' SUR LES VOYANTS 'SELECTION'.
BSR ASMIT < TEST MASQUAGE DES INTERRUPTIONS :
JANE SYSER1 < PHASE MASQUEE...
<
< P H A S E N O N M A S Q U E E :
<
ACTD
JMP SYSER2
SYSER1: EQU $
<
< P H A S E M A S Q U E E :
<
LA ETASYS
TBT RECON < QUEL EST LE TYPE DE BLOCAGE DE 'TH0' ???
JNC SYSER3 < BLOCAGE AVEC DEBLOCAGE MANUEL...
SYSER4: EQU $ < BLOCAGE AVEC DEBLOCAGE 'CLEAR'+'MEM'...
BSR ASMPUI < ET BIEN LISONS LE PUPITRE...
JNC SYSER4 < RIEN DE BIEN INTERESSANT...
JMP SYSER2 < ET OUI, C'EST FINI...
SYSER3: EQU $ < BLOCAGE AVEC DEBLOCAGE MANUEL...
BSR ATDEFS
ZSYSER: EQU $ < ADRESSE DE BOUCLAGE SUR SYSER
< AVEC INTERRUPTIONS MASQUEES.
JMP SYSER3
<
< ET RETOUR :
<
SYSER2: EQU $
LAI K
SIO SIOPUC-SIOPUC,L < NETTOYONS LES VOYANTS 'SELECTION'...
PLR A,B,L
RSR
PAGE
<
<
< D E T E C T I O N D E S D E F A U T S
< S E C T E U R E N A T T E N T E :
<
<
< FONCTION :
< LE DEFAUT SECTEUR EST MALHEUREU-
< SEMENT MASQUE PAR LE BIT 'IOM' ;
< EN CONSEQUENCE, PUISQUE LE SYSTEME
< CONTIENT DE TRES NOMBREUSES PHASES
< MASQUEES DE DUREE INDETERMINEE, IL
< FAUT POUVOIR AU COURS DE CES MASQUAGES
< DETECTER LES DEFAUTS SECTEURS EN
< ATTENTE, ET FAIRE QUELQUE CHOSE,
< CAR SI RIEN N'EST FAIT :
< 1 - LE DEFAUT SECTEUR NE SERA PAS
< TRAITE, ET LE 'RESTART' NE POURRA SE
< FAIRE,
< 2 - LA MACHINE N'ETANT PAS MISE
< EN 'HALT' AU MOMENT DE LA DISPARITION
< EFFECTIVE DU COURANT, LA MEMOIRE EXECUTERA
< DES CYCLES COMPLETEMENT FARFELUS
< LA RENDANT NON INTEGRE !!!
<
< AUSSI, CE PETIT SOUS-PROGRAMME
< MIRACLE SERA APPELE PARTOUT OU DES
< PHASES MASQUEES LONGUES SONT A
< PREVOIR (PAR EXEMPLE TEST DE VER-
< ROUILLAGES...). S'IL DETECTE UN DEFAUT SECTEUR
< EN ATTENTE, IL IDENTIFIERA L'APPELANT :
< 1 - S'IL S'AGIT DE LA TACHE 'DEFAUT
< SECTEUR ELLE-MEME, IL N'Y A RIEN A
< FAIRE,
< 2 - S'IL S'AGIT D'UNE 'TACHE SOFTWARE',
< ON DEMASQUE LE DEFAUT SECTEUR, QUI VA
< DONC PASSER ; VU QU'IL S'AGIT D'UN CHAN-
< GEMENT DE CONTEXTE ENTRE UNE 'TACHE
< SOFTWARE' ET UNE 'TACHE HARDWARE' (LE
< 'DEFAUT SECTEUR'), LA REPRISE ('RESTART')
< SE FERA BIEN : LA 'PSTS' SERA REGENEREE.
< 3 - S'IL S'AGIT D'UNE 'TACHE HARDWARE',
< LE PROBLEME EST PLUS CORSE ; IL FAUT
< D'ABORD SAUVEGARDER LES REGISTRES
< 'A', 'B', 'X', 'Y', 'L', 'W', 'SLO'
< ET 'SLE' DANS LA PILE, ET LES REGISTRES
< 'C', 'K', 'P' ET 'S' DANS UNE FAUSSE
< 'PSTH' ; IL FAUT ENSUITE RESTAURER
< LES REGISTRES DE LA TACHE INTERROMPUE
< PAR CETTE 'TACHE HARDWARE' PUIS
< FAIRE COMME SI ELLE S'ETAIT TERMINEE
< NORMALEMENT ('ACQ') ; C'EST A CE MOMENT
< LA QUE PASSERA LE DEFAUT SECTEUR, ET ON
< SERA AINSI RAMENE A L'INTERRUPTION
< D'UNE 'TACHE HARDWARE' ALORS QU'ELLE
< N'A ENCORE RIEN FAIT (JUSTE A SON
< POINT D'ENTREE) ; UNE TELLE 'TACHE
< HARDWARE' PEUT ENSUITE VOIR SA 'PSTH'
< REINITIALISEE BRUTALEMENT SANS
< PROBLEME... LORS DU 'RESTART' SI ON
< DETECTE UNE 'TACHE HARDWARE' INTERROMPUE
< PAR CE SOUS-PROGRAMME, ET BIEN ON
< REINITIALISE SA 'PSTH' AVEC LA
< FAUSSE 'PSTH' GENEREE AU MOMENT DU
< DEFAUT SECTEUR...
<
<
< ETAT DES INTERRUPTIONS :
< ON NOTERA AVEC PROFIT QUE SI
< 'TDEFS' ENTREPREND QUELQUE CHOSE
< LORSQU'IL A DETECTE UN DEFAUT SECTEUR,
< C'EST QUE LES INTERRUPTIONS ETAIENT
< MASQUEES, CAR SINON, ET BIEN LE PAUVRE,
< IL N'AURAIT RIEN VU...
< DANS CES CONDITIONS, IL N'Y A PAS POUR
< 'TDEFS' DE PROBLEMES DE REENTRANCE
< LORSQU'IL TRAVAILLE, MAIS UNIQUEMENT
< DES PROBLEMES DE RECURSIVITE (EN
< PARTICULIER S'IL EST APPELE PAR
< LE RECEPTEUR DES 'SVC' MAITRES, CAR
< LUI MEME FAIT DES 'SVC') ; CE PROBLEME
< EST RESOLU A L'AIDE D'UN COMPTEUR
< QUI N'A DONC PAS BESOIN D'ETRE "REEN-
< TRANT" ET QUI PERMET DE COMPTER LES
< IMBRICATIONS D'APPEL...
<
<
< NOTA :
< CE PROGRAMME EST EMPRUNTE A 'CMS4-MP'
< ET CERTAINS COMMENTAIRES PEUVENT PARAITRE
< DE CE FAIT ERRONES (ADRESSE DE 'IC' TRANSLATEE
< DE 'DEPLH'... PAR EXEMPLE).
<
TDEFS: EQU $
PSR A
CALL #SISP CMS5 RST#
TBT WARNG < Y-A-T'IL UN DEFAUT SECTEUR
< EN ATTENTE ???
JNC TDEFS1 < NON, DONC RIEN A FAIRE...
<
< APPAREMMENT, ON A TROUVE LE BIT 'WARNG'
< A '1' DANS LE REGISTRE 'A' MAIS CELA NE
< PROUVE PAS QU'IL SOIT TOUJOURS A '1' DANS
< LE REGISTRE 'ST' ; EN EFFET, SI LES INTER-
< RUPTIONS NE SONT PAS MASQUEES, UN DEFAUT
< SECTEUR A PU PASSER ENTRE LA LECTURE
< DE 'ST', ET LE TEST DE 'WARNG' ; EN
< CONSEQUENCES, 'TDEFS' NE DOIT ETRE
< FAIT QUE SI LES INTERRUPTIONS SONT
< MASQUEES ; SI ELLES NE SONT PAS, LE
< DEFAUT SECTEUR PASSERA TOUT SEUL...
<
< LES INTERRUPTIONS SONT-ELLES MASQUEES ???
< (ON NE PEUT UTILISER 'NSMIT', CAR LES
< 'SVC' MAITRES REFERENCENT 'TDEFS', ET ON
< N'A PAS ENCORE ELIMINER LES APPELS
< RECURSIFS...)
<
PSR B
XMASK: VAL MIPM?MIOM < GENERATION D'UN MASQUE DE TEST DES
< BITS 'IPM' ET 'IOM'.
LRM B
WORD XMASK < (B)='XMASK'.
ANDR B,A < (A)=K SI LES INTERRUPTIONS NE SONT
< PAS MASQUEES...
PLR B < RESTAURATION DES CONDITIONS DE RETOUR.
JAE TDEFS1 < LES INTERRUPTIONS N'ETANT PAS MASQUEES,
< IL EST INUTILE DE FAIRE 'TDEFS'...
<
< LORSQUE LES INTERRUPTIONS SONT MASQUEES :
<
<
< ELIMINATION DES APPELS RECURSIFS :
<
IC KTDEFS < INHIBITION DES TESTS DE 'TDEFS' PAR
< COMPTAGE DES ENTREES EMBOITEES DANS
< 'TDEFS' ET TRAITANT UN DEFAUT SECTEUR ;
< RAPPELONS QU'IL N'Y A PAS DE PROBLEMES
< DE REENTRANCE CAR ON EST SUR QUE LES
< INTERRUPTIONS SONT MASQUEES...
JG TDEFS7 < ELIMINATION DE TOUS LES APPELS,
< SAUF LE PREMIER ('KTDEFS'=K) BIEN
< ENTENDU !!!
<
< CAS OU UN DEFAUT SECTEUR EST DETECTE :
< EST-IL ACTIF OU BIEN EN ATTENTE ???
<
PSR B,X
BSR ASMWHO < QUI EST LA ??? QUI A APPELE
< CE SOUS-PROGRAMME.
< ON TROUVE DANS :
< 'A' : LE TYPE 'TYPTH'/'TYPTS',
< 'B' : L'IDENTIFICATEUR ('NSP' OU
< NUMERO DE 'TACHE HARDWARE').
JAE TDEFS2 < CAS DES TACHES SOFTWARES...
<
< C A S D E S ' T A C H E S H A R D W A R E S ' :
<
XR A,B < POUR TESTER L'IDENTIFICATEUR.
CPI NUMDEF
JE TDEFS3 < ET OUI, C'EST LE DEFAUT SECTEUR,
< IL FAUT LE LAISSER SE DEROULER
< NORMALEMENT...
<
< CAS DES 'TACHES HARDWARES' DE 'TH0' A 'TH0+NMTH-1' :
<
XR A,B
STA TYPDEF < SAUVEGARDE DU TYPE 'TYPTH',
STB IDEDEF < ET DE L'IDENTIFICATEUR...
LA SMASK < SAUVEGARDE DE L'ETAT D'IMBRI-
STA MKDEF < CATION DES INTERRUPTIONS.
< A T T E N T I O N :
< (A)='SMASK' !!!
< AINSI ON EMPILE LE 'SMASK' ACTIF
< AU MOMENT DU DEFAUT SECTEUR...
PSR A,B,X,Y < SAUVEGARDE DES REGISTRES N'APPARTE-
PSR C,L,W < AUX CONTEXTES PARTIELS AINSI QUE 'C'.
CALL #SISP CMS5 PSRSLO#
< LECTURE DES REGISTRES (SLO,SLE),
< ET EMPILEMENT DE SAUVEGARDE...
LRM W
WORD FPSTH < 'W' VA BASER UNE FAUSSE 'PSTH'
< DESTINEE A UNE SAUVEGARDE DU
< CONTEXTE PARTIEL DE LA TACHE.
USE W,PSTH
<
< A T T E N T I O N :
< LA BASE 'C' A ETE EMPILEE, ET CE QUE
< L'ON VA METTRE DANS LE MOT 'HC' DE LA
< 'PSTH' EST EN FAIT LE REGISTRE 'L' QUI
< CONTIENT L'ADRESSE DE 'IC'
<
< (ET CECI POUR EVITER DES ALEAS DUS
< AU DEFAUT SECTEUR...)
<
LR K,A
STA HK < SAUVEGARDE DU REGISTRE 'K'.
LRM A
WORD TDEFS5
STA HP < SAUVEGARDE DU REGISTRE 'P' A
< UTILISER LORS DE LA REAPPARITION
< DU SECTEUR.
LAI K < CLEAR DU REGISTRE A AFIN DE LIRE
RST < LE REGISTRE ST DANS A PAR RST
STA HS < SAUVEGARDE DU REGISTRE 'S' COMPLET...
<
< SAUVEGARDE DU CHAMP 'MALARM' DES 'PSTH' :
<
LA IDEDEF < (A)=NUMERO DE LA 'TACHE HARDWARE'.
SLLS LPSTH=K < (A)=NUMERO TH * LPSTH.
ADRI HS-PSTH,A < (A)=INDEX D'ACCES AU MOT HS DE
< LA "BONNE" PSTH
LR A,X < QU'ON PLACE DANS 'X'...
LA &AXPSTH < (A)=MOT 'HS' DE LA 'PSTH',
ANDI MALARM < RECUPERATION DU CHAMP 'MALARM'
STA ALADEF < QUE L'ON SAUVEGARDE, CE QUI EST
< BIEN UTILE SI L'ON EST DANS LA
< 'TACHE HARDWARE' 0...
<
< SIMULONS UNE FAUSSE FIN DE 'TACHE HARDWARE' :
<
LA IDEDEF < (A)=NUMERO DE LA 'TACHE HARDWARE' EN
< COURS.
BSR ASMIC < RENVOIE : (B)=ADRESSE DU 'IC' DE
< CETTE TACHE.
STB HC < LE MOT 'HC' VA MEMORISER LA
< BASE 'L', SOIT L'ADRESSE DE 'IC'
< TRANSLATEE DE 'DEPLH' (OU 'DEPCH').
LR B,L < (L)=ADRESSE DU 'IC' DE LA TACHE QUE
< L'ON DESIRE INTERROMPRE.
USE W,DEM0
USE L,PSTH < PUISQUE 'IC' ET 'PSTH' UTILISENT
< LA MEME 'DSEC'...
LA HK < (A)=VALEUR INITIALE DU REGISTRE 'K'
< DE LA 'TACHE HARDWARE' A INTER-
< ROMPRE.
WORD AREGTH < AFIN DE METTRE 'K' A LA VALEUR QU'IL
< AVAIT APRES LA SAUVEGARDE COMPLEMENTAIRE
< DES REGISTRES DE LA TACHE INTERROMPUE.
LR A,K < 'K' PREND LA VALEUR QU'IL DOIT
< AVOIR A L'ENTREE DE 'SISP CMS5 THDEB'.
<
< ET MAINTENANT NOUS POUVONS ENTREPRENDRE EN TOUTE
< TRANQUILLITE D'ESPRIT UN FAUX EPILOGUE DE VRAIE
< TACHE HARD, NON-PARAMETRE (ATTENTION AUX MODIFS !!)
< TERMINE PAR UN ACQ TRES ATTENDU PAR TOUT LE
< MONDE LIBRE, SURTOUT PAR DEFSEC QUI TREPIGNE D'IMPATIENCE...
<
XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES.
#@PLR L < #SISP CMS5 KREG# ADRESSE 'IC'...
#@PLR A,B < #SISP CMS5 KREG#
THDSL1:: VAL -XKREG < POUR CALCULER 'THDSLO' PLUS LOIN...
WOE < MISE EN PLACE DE (SLO,SLE) DE LA TACHE
< INTERROMPUE...
STZ ICSAV < INDICATEUR DE SAUVEGARDE...
LR L,C < EN PREVISION DE L'ACQ...
#@PLR L,W < #SISP CMS5 KREG#
#@PLR A,B,X,Y < #SISP CMS5 KREG#
LREGTH:: VAL -XKREG < NOMBRE DE REGISTRES DEPILES.
<*******************************************************************************
BREGTH: ADRI LREGTH,A < GENERATION D'UNE INSTRUCTION "EN AVANT".
XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE.
<*******************************************************************************
AREGTH: EQU ZERO+XWOR%1 < CODE GENERE DEFINI "EN AVANT"...
$EQU BREGTH < ANNULATION DU CODE GENERE.
ACQ < DESARMEMENT,
< LE DEFAUT SECTEUR PASSE DONC ICI !!!
<
< POINT DE RETOUR DE LA 'TACHE HARDWARE'
< INTERROMPUE : ON SUPPOSE EVIDEMMENT QUE
< 'C', 'K', 'P' ET 'S' ONT LA VALEUR
< QU'ILS AVAIENT DANS LA FAUSSE 'PSTH' :
<
TDEFS5: EQU $
CALL #SISP CMS5 FTHDEB# < COMME SON NOM L'INDIQUE,
< C'EST UN FAUX PROLOGUE DE
< TACHE HARD (ON NE GENERE PAS
< EN EFFET LE FAMEUX THXX: EQU $
< QUI DEROUTERAIT QUELQUE PEU
< L'ASSEMBLEUR...
<
< UTILISATION DES BASES :
< (C)=COM+DEPCS
< (L)=ICXX
<
<
< RESTAURATION DU CHAMP 'MALARM' DES 'PSTH' :
<
LA ICNUM < (A)=NUMERO DE LA 'TACHE HARDWARE'.
SLLS LPSTH=K < (A)=INDEX DE LA "BONNE" PSTH
ADRI HS-PSTH,A < POUR ACCES AU MOT 'HS',
LR A,X
LB &AXPSTH < CHARGEMENT DU MOT 'HS'.
LAI K < RECUPERATION DE LA VALEUR DU CHAMP
XM ALADEF < 'MALARM' ET REINITIALISATION ;
< ON NOTERA, QUE SI JE NE ME SUIS
< PAS TROMPE, LES INTERRUPTIONS SONT
< MASQUEES DEPUIS LE DEBUT DU 'RESTART',
< ET QU'IL N'Y A DONC PAS DE PROBLEMES
< QUAND A LA VALEUR DE 'ALADEF' PUISQUE
< LE DEFAUT SECTEUR EST MASQUE...
ANDI MALARM < PAR PURE PRUDENCE...
ORR B,A < POUR AVOIR LE 'ST' COMPLET
STA &AXPSTH < RESTAURATION DU CHAMP 'MALARM'
< DE LA 'PSTH' COURANTE.
<
< DEPLACEMENT DES REGISTRES DE LA 'TACHE
< SOFTWARE' INTERROMPUE PAR CETTE 'TACHE
< HARDWARE' AFIN D'EFFECTUER ULTERIEURE-
< MENT UNE SORTIE NORMALE DE CETTE 'TACHE
< HARDWARE' ; N'OUBLIONS PAS QUE L'ON EST
< ICI DANS 'TDEFS'...
<
LR K,A < 'A' CONTIENT L'ADRESSE DU MOT CON-
< TENANT LE DERNIER REGISTRE EMPILE.
ADRI -LREGTH+Z,A
< (A)=ADRESSE EMETTEUR=ADRESSE DU MOT
< CONTENANT LE PREMIER REGISTRE
< EMPILE PAR 'SI CMS5 THDEB'
USE L,PSTH < BASE 'IC'
LB HK < (B)=VALEUR INITIALE DU REGISTRE 'K'
< 'K' DE LA TACHE 'HARDWARE'
ADRI DEPILE,B < (B)=ADRESSE RECEPTEUR=ADRESSE DU
< MOT CONTENANT NORMALEMENT LE
< PREMIER MOT EMPILE PAR
< 'SI CMS5 THDEB'.
LXI LREGTH < (X)=NOMBRE DE REGISTRES EMPILES.
MOVE < REGENERATION DU DEBUT DE LA
< PILE DE LA 'TACHE HARDWARE' AFIN
< QUE SA SORTIE NORMALE SE FASSE
< BIEN...
ADRI -LREGTH,K < ANNULATION DES EMPILEMENTS FAITS.
<
< RESTAURATION DE LA 'TACHE HARDWARE' TELLE
< QU'ELLE ETAIT AU MOMENT DU DEFAUT SECTEUR :
<
< DEPILEMENT DE RESTAURATION ET
CALL #SISP CMS5 PLRSLO#
< REECRITURE DES REGISTRES (SLO,SLE)...
PLR C,L,W < PUIS ON RESTAURE LA VALEUR DES REGISTRES
PLR A,B,X,Y < N'APPARTENANT PAS AU CONTEXTE PARTIEL.
< AINSI QUE LA BASE 'C'...
< A T T E N T I O N :
< (A)='SMASK' : ON DEPILE AINSI LE
< 'SMASK' ACTIF AU MOMENT DU DEFAUT
< SECTEUR.
STA SMASK < ON TRICHE UN PEU, N'EST-IL PAS ?!?!!??
JMP TDEFS4 < ET C'EST PRESQUE FINI...
<
< C A S D E S ' T A C H E S S O F T W A R E S ' :
<
TDEFS2: EQU $
STA TYPDEF < SAUVEGARDE DU TYPE 'TYPTS', AINSI
STB IDEDEF < QUE L'IDENTIFICATEUR DE LA TACHE ('TN').
LA SMASK < SAUVEGARDE DE L'ETAT DES IMBRICATIONS
STA MKDEF < DE MASQUAGE DES INTERRUPTIONS.
LAI K
SBT IOM
RST < DEMASQUAGE DES INTERRUPTIONS D'ENTREES-
< SORTIES ET DEFAUT SECTEUR ; AINSI, LE
< DEFAUT SECTEUR VA PASSER ICI, ET LUI
< SEUL PUISQU'IL EST LE PLUS PRIORITAIRE.
<
< POINT DE RETOUR COMMUN AUX
< 'TACHES' 'HARDWARES' ET 'SOFTWARES' :
<
TDEFS4: EQU $
BSR ASMIT < LES INTERRUPTIONS SONT-ELLE MASQUEES ?
< RAPPELONS QUE C'EST LE 'RESTART' QUI
< DECIDE DE LAISSER LES INTERRUPTIONS
< MASQUEES, OU BIEN DE LES DEMASQUER...
JANE TDEFS3 < OK, ELLES SONT MASQUEES...
<
< S Y S E R : LES INTERRUPTIONS NE SONT PAS MASQUEES,
< ALORS QU'ETANT INTERROMPU DANS 'TDEFS',
< C'EST QUE LES INTERRUPTIONS ETAIENT MASQUEES !!!
<
< NS=NIVEAU DE LA TACHE 'SOFTWARE' SI ON
< EST BIEN DANS UNE TACHE 'SOFTWARE'...
< LE REGISTRE 'HV' DISCRIMINE LES TACHES
< 'HARDWARES' DES TACHES 'SOFTWARES'.
<
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX PARAIT DE FAIRE UN MASQUAGE
< DE 'IOM' ET 'IPM'...
<
TDEFS3: EQU $
PLR B,X
TDEFS7: EQU $
DC KTDEFS < AUTORISATION DES TESTS DE TDEFS
< DECOMPTAGE DES APPELS EMBOITES...
TDEFS1: EQU $
PLR A
RSR < OUF...
<
<
< F A U S S E ' P S T H ' :
<
<
CALL #SISP CMS5 CHECK#
FPSTH: EQU $
DZS LPSTH
CALL #SISP CMS5 CHECK#
PAGE
<
<
< T A C H E D E F A U T S E C T E U R :
<
<
< FONCTION :
< LA TACHE 'DEFAUT SECTEUR' EST DESTINEE
< A TRAITER L'APPARITION DES DEFAUTS D'ALI-
< MENTATION SECTEUR.
< CE TRAITEMENT EST RENDU FORT COMPLEXE
< PAR LA NOTION DE 'CONTEXTE PARTIEL' ; EN
< EFFET, SI LES CHANGEMENTS DE CONTEXTES
< RELATIFS AUX INTERRUPTIONS SE FAISAIENT
< COMME LES CHANGEMENTS DE CONTEXTE DES
< 'TACHES SOFTWARES' LES 'PSTS' ET LES
< 'PSTH' AURAIENT UN CONTENU INTEGRE ;
< MALHEUREUSEMENT CE N'EST PAS LE CAS.
< DONC, LORSQUE LE DEFAUT SECTEUR APPA-
< RAIT, IL S'AGIT DE :
< RECONSTITUER LA 'PSTS' DE LA 'TACHE
< SOFTWARE' DONT LE 'NIVEAU' EST CONTENU
< DANS 'NS' (ET DIEU SAIT QUE CELA N'EST
< PAS FACILE),
<
< CETTE TACHE EST EMPRUNTEE A 'CMS4-MP', EN
< MOINS ELEGANT... MOINS ELEGANT...
< PAR CONSEQUENT, CERTAINS COMMENTAIRES
< POURRONT IRRITER LE PROFANE...
<
<
CCBDEF: WORD COSBT?CCBDF=FMASK(K=FCINST
< CCB SPECIAL DE TRANSMISSION D'UN
< DEFAUT SECTEUR A UN IOP...
XWKNIV: VAL NUMDEF < PARAMETRE POUR 'SI CMS5 THDEB'
CALL #SISP CMS5 THDEB# < PROLOGUE TACHE HARD
<
<
< I N I T I A L I S A T I O N S :
<
<
LA DEFOK < ACCES AU 'DEFOK' COURANT,
JAE DEFS13 < OK, IL EST NUL...
JAL DEFS11 < ET BIEN NON, IL Y A DEJA DES ANOMALIES,
NGR A,A < ON INVERSE 'DEFOK' AFIN DE LE RENDRE
< NEGATIF, INDIQUANT AINSI UNE ANOMALIE...
DEFS11: EQU $
ADRI -I,A < ON COMPTE EN NEGATIF LES ANOMALIES,
STA DEFOK < DANS 'DEFOK'...
LXI K < (X)=INFINI DES 'HALT',
DEFS12: EQU $
HALT < ET ON BLOQUE L'UNITE CENTRALE,
JMP DEFS12 < CE 'JMP' NE SERVIRA JAMAIS ??!??!?!
DEFS13: EQU $
IC DEFOK < 'DEFOK'=I, MEMORISE AINSI QU'UN DEFAUT
< SECTEUR COMMENCE A ETRE TRAITE, POUR
< AVERTIR L'EVENTUEL PROCESSEUR ESCLAVE.
LR L,Y < SAUVEGARDE DANS Y DE L'ADRESSE DE
< 'IC' DU DEFAUT SECTEUR
<
< ARRET D'UN IOP EVENTUEL :
<
CALL #SISP CMS5 W ZERO#
< A PRIORI, 'W'='ZERO'...
IF BOXIPI-ZERO,XEIF%,,XEIF%
IF ATTENTION : CA VA MERDER !!!
XEIF%: VAL ENDIF
LXI PROIOP
LA &SYSPRO < (A)=NUMERO D'IOP, SI EXISTE...
JAL ZZ001 < ET BIEN NON, PAS D'IOP...
LXI PROMST
CP &SYSPRO < LE MAITRE SERAIT-IL L'IOP ???
JE ZZ001 < OUI, RIEN A FAIRE, LE MAITRE ETANT
< AUSSI L'IOP, IL CONNAIT LE DEFAUT
< SECTEUR...
LXI PROESC
CP &SYSPRO < L'ESCLAVE SERAIT-IL L'IOP ???
JE ZZ001 < OUI, RIEN A FAIRE, IL GERE LUI-MEME
< SES DEFAUTS SECTEURS...
LRM B,W
WORD CCBDEF < (B)=ADRESSE DU CCB DE DEFAUT SECTEUR.
WORD BOXIPI < (W)=ADRESSE DES BOITES AUX LETTRES.
ADR A,W < (W)=ADRESSE BOITE AUX LETTRES IOP.
LA O,W < (A)=SAUVEGARDE DE LA BOITE AUX LETTRES
< DE L'IOP AVANT..., EN NOTANT QUE
< (W) N'EST PLUS NUL...
STB O,W < MISE EN PLACE DU CCB DE DEFAUT SECTEUR,
IPI < ET AVERTISSEMENT IOP...
ZZ001: EQU $
PSR A,W < SI UN IOP A ETE ARRETE DANS SON ELAN,
< ON EMPILE L'ADRESSE DE SA BOITE AUX
< LETTRES ET SON CONTENU ; CETTE ADRESSE
< 'W' EST NULLE DANS LE CAS CONTRAIRE...
<
<
< I D E N T I F I C A T I O N D E L A ' T A C H E
< S O F T W A R E ' L A P L U S P R I O R I T A I R E :
<
<
LX &ANS < (X)=NIVEAU SOFTWARE DE LA TACHE ACTIVE
< OU DU MOINS INTEROMPUE SOIT PAR
< UNE 'TACHE HARDWARE', SOIT PAR LA
< TACHE 'DEFAUT SECTEUR' ELLE-MEME...
ADRI -NSNSP0,X < (X)=NSP TACHE SOFT DESIGNEE PAR 'NS'
LA &ADCTSY < ON RECUPERE L'ADRESSE DCT DE
< CETTE TACHE
LR A,W < (W)=ADRESSE DE LA 'PSTS' DE LA
< 'TACHE SOFTWARE' QUE L'ON VA
< RECONSTRUIRE
<
<
< E T A T D E S I N T E R R U P T I O N S :
<
<
RDHV < MISE DANS LE REGISTRE 'A' DE LA LISTE
< DES INTERRUPTIONS EN COURS DE TRAITE-
< MENT, C'EST-A-DIRE, LA LISTE DES 'TACHES
< HARDWARES' COMMENCEES ET NON ENCORE
< ACHEVEES.
STA SAVHV < SAUVEGARDE EN MEMOIRE DU REGISTRE 'HV'
< AFIN D'ASSURER ULTERIEUREMENT UN BON
< REDEMARRAGE DU SYSTEME.
IF TH0-K,,XEIF%,
IF A T T E N T I O N : 'TH0', POUR ETRE CONFORME
IF AUX CONVENTIONS DE LA MICRO-MACHINE DOIT ETRE NUL !!!
XEIF%: VAL ENDIF
LXI NUMDEF < ON SUPPOSE AINSI A PRIORI QU'IL N'Y
< A PAS DE 'TACHES HARDWARES' INTERROM-
< PUES PAR LE 'DEFAUT SECTEUR'.
LBI K < ON CLEAR LE REGISTRE 'B', AFIN QUE
< L'INSTRUCTION 'DBT' DONNE BIEN LES
< NUMEROS DE 'TACHES HARDWARES' QUI
< EXISTENT !!!
DEFS02: EQU $
DBT < RECHERCHE DE LA 'TACHE HARDWARE'
< COURANTE LA PLUS PRIORITAIRE (A
< L'EXCEPTION DU 'DEFAUT SECTEUR').
JC DEFS01 < ON NE L'A PAS TROUVE, ON A DONC DANS
< LE REGISTRE 'X' LE NUMERO DE LA 'TACHE
< HARDWARE' LA MOINS PRIORITAIRE, QUI
< PEUT ETRE 'NUMDEF' DANS LE CAS OU LE
< REGISTRE 'HV' EST NUL...
RBT TH0,X < DANS LE CAS OU CETTE 'TACHE HARDWARE'
< EXISTE, ON LA SUPPRIME DE LA LISTE
< AFIN DE PASSER A UNE 'TACHE HARDWARE'
< MOINS PRIORITAIRE, AFIN DE TROUVER
< LA TACHE LA MOINS PRIORITAIRE...
JMP DEFS02
DEFS01: EQU $
LR X,A < ON TROUVE DANS 'X' (ET DANS 'A')
< LE NUMERO DE LA 'TACHE HARDWARE'
< LA MOINS PRIORITAIRE (ELLE PEUT
< ETRE 'DEFSEC' ELLE-MEME...)
BSR ASMTH < RENVOIE DANS LE REGISTRE 'B'
< L'ADRESSE DE LA 'PSTH' DONT (A)
< EST LE NUMERO.
LR B,L < LA BASE 'L' VA ETRE UTILISEE
< POUR BASER LA 'PSTH' ACTIVE
< LA MOINS PRIORITAIRE.
USE W,PSTS < 'W' BASE LA 'PSTS' INTERROMPUE
< QUE L'ON CHERCHE A RECONSTITUER.
USE L,PSTH < 'L' BASE LA 'PSTH' LA MOINS
< PRIORITAIRE; CETTE 'PSTH' CON-
< TIENT LES REGISTRES 'C', 'K'
< ET 'P' (ET PEUT ETRE 'S') DE LA
< 'PSTS' BASEE PAR 'W'.
<
<
< R E S T A U R A T I O N D E S R E G I S T R E S
< ' C ' , ' K ' E T ' P ' :
<
<
LA HC
STA SC < RESTAURATION DU REGISTRE 'C'
< DE LA 'PSTS'.
LA HK
STA SK < RESTAURATION DU REGISTRE 'K'
< DE LA 'PSTS'.
LA HP
STA SP < RESTAURATION DU REGISTRE 'P'
< DE LA 'PSTS'.
<
<
< R E C H E R C H E D U R E G I S T R E ' S ' :
<
<
LAI K < CLEAR DU REGISTRE A AFIN DE LIRE
RST < LE REGISTRE ST DANS A PAR RST
TBT SCHED < TEST DU BIT 'SCHED'...
JC DEFS03 < 'SCHED'=1 : LA 'TACHE SOFTWARE'
< DONT ON A L'ADRESSE DE 'PSTS' DANS
< 'W' A ETE INTERROMPUE DANS LE
< MICRO-SCHEDULER...
<
< LA 'TACHE SOFTWARE' A ETE INTERROMPUE "NORMALEMENT" :
<
LA HS
STA SS < RESTAURATION DU REGISTRE 'S'
< DE LA 'PSTS'.
JMP DEFS04 < VERS LA RECHERCHE DES REGISTRES
<'SLO' ET 'SLE'...
<
< LA 'TACHE SOFTWARE' A ETE INTERROMPUE DANS
< LE MICRO-SCHEDULER :
<
DEFS03: EQU $
LA HS < ACCES AU REGISTRE 'S' DE LA 'TACHE
< HARDWARE' LA MOINS PRIORITAIRE,
TBT SAUV < TEST DU BIT 'SAUV'...
JNC DEFS05 < 'SAUV'=K : IL Y A EU UN CHANGEMENT
< DE CONTEXTE POUR LA 'TACHE SOFTWARE'
< QUE L'ON A TROUVE DANS 'NS'; SA
< 'PSTS' EST DONC BONNE...
LA &ASCHED < 'SAUV'=1 : LE REGISTRE 'S' DE LA
< 'TACHE SOFTWARE' EST DANS LA
< MEMOIRE DE TRAVAIL 'WSCHED' DU
< MICRO-SCHEDULER EN MEMOIRE DEBANA-
< LISEE.
STA SS < RESTAURATION DU REGISTRE 'S'
< DE LA 'PSTS'.
<
<
< R E S T A U R A T I O N D E S R E G I S T R E S
< ' S L O ' E T ' S L E ' :
<
<
DEFS04: EQU $
LR Y,L < (L)=ADRESSE DE 'IC' DU 'DEFAUT SECTEUR'
< EN EFFET, ETANT DONNE QUE
< LA SAUVEGARDE DES REGISTRES
< 'SLO' ET 'SLE' DANS LES 'TACHES
< HARDWARES' SUIT LE MASQUAGE DU
< PROCESSEUR, ON EST SUR QUE LA
< TACHE 'DEFAUT SECTEUR' A SAUVEGARDE
< DANS SA PILE LES REGISTRES 'SLO'
< ET 'SLE' DE LA 'TACHE SOFTWARE'
< INTERROMPUE...
LA HK < (A)=VALEUR INITIALE DU REGISTRE 'K'
< DE LA TACHE 'DEFAUT SECTEUR'.
THDSLO:: VAL LREGTH-THDSL1+DEPILE
< AFIN D'ALLER CHERCHER LES
< REGISTRES 'SLO' ET 'SLE' DANS LA
< PILE DU 'DEFAUT SECTEUR' (NOTONS
< D'AILLEURS QU'UNE "PILE" EST BIEN UTILE
< LORSQUE LE COURANT DISPARAIT,...
< OUAF..OUAF ?!!?!!!?!?).
LR A,L < LE REGISTRE 'L' BASE LA PILE (-DEPILE)
< DU DEFAUT SECTEUR.
LA SSLO-SSLO+THDSLO,L
STA SSLO < RESTAURATION DU REGISTRE 'SLO'
< DE LA 'PSTS'.
LA SSLE-SSLO+THDSLO,L
STA SSLE < RESTAURATION DU REGISTRE 'SLE'
< DE LA 'PSTS'.
<
<
< R E S T A U R A T I O N D E S R E G I S T R E S
< ' A ' , ' B ' , ' X ' , ' Y ' , ' L ' E T ' W ' :
<
<
LAI NUMDEF-Z < (A)=NUMERO DE LA DERNIERE 'TACHE
< HARDWARE' D'INTERRUPTION; CE QUI
< FAIT QUE LA SUITE DES OPERATIONS
< EST FAITE A PRIORITE CROISSANTE
< DES NIVEAUX D'INTERRUPTION...
DEFS06: EQU $
LX SAVHV
XR A,X < (A)=ETAT DU REGISTRE DES 'TACHES
< HARDWARES' ACTIVES AU MOMENT DU
< DEFAUT SECTEUR, ET
< (X)=NUMERO DE LA 'TACHE HARDWARE'
< COURANTE.
TBT TH0,X < LA TACHE COURANTE ETAIT-ELLE ACTIVE ???
XR A,X < RESTAURATION DES REGISTRES.
JNC DEFS10 < NON, DONC INUTILE D'ALLER VOIR SI
< ELLE A PU SAUVEGARDER LES REGISTRES
< QUE L'ON RECHERCHE...
BSR ASMIC < RENVOIE :
< (B)=ADRESSE DE L''IC' DE LA 'TACHE
< HARDWARE DONT LE NUMERO EST DANS 'A'.
LR B,L < (L)=ADRESSE DU 'IC' COURANT.
USE L,PSTH < PUISQUE 'IC' ET 'PSTH' UTILISENT
< LA MEME 'DSEC' (QUE D'ABREVIATIONS!)
LR A,B < SAVE LE NUMERO DE 'TACHE HARDWARE'
< COURANT DANS LE REGISTRE 'B'.
<
< RECHERCHE DE LA 'TACHE HARDWARE' LA MOINS PRIORITAIRE
< DONT 'ICSAV' SOIT DIFFERENT DE 'CICSAV' ; CELA
< SIGNIFIERA ALORS QU'ELLE A DANS SA PILE LES 6
< REGISTRES RECHERCHES :
<
LA ICSAV
JANE DEFS07 < OK,ON A TROUVE LA TACHE HARDWARE
< DONT LA PILE CONTIENT LES REGISTRES
< CHERCHES...
LR B,A < ET NON, RESTAURE (A)=NUMERO DE 'TACHE
< HARDWARE' COURANT,
DEFS10: EQU $
ADRI -P,A < ET PASSAGE A LA PRECEDENTE...
JAGE DEFS06 < VERS LE TEST DE LA TACHE HARDWARE
< DE PRIORITE IMMEDIATEMENT SUPERIEURE.
<
< LORSQU'ON N'A PU TROUVER AUCUNE 'TACHE HARDWARE'
< AYANT PU SAUVEGARDER LES REGISTRES CHERCHES,
< ON SAIT ALORS QUE CES DERNIERS SONT DANS LA
< PILE DU DEFAUT SECTEUR :
<
LR Y,L < ON MET DANS 'L' L'ADRESSE DE 'IC'
< DU DEFAUT SECTEUR...
<
< RECUPERATION DES REGISTRES 'A', 'B', 'X', 'Y',
< 'L' ET 'W' DANS LA PILE REFERENCEE PAR LE 'IC'
< DONT L'ADRESSE EST DANS LE REGISTRE 'L' :
<
DEFS07: EQU $
LA HK < (A)=VALEUR INITIALE DU REGISTRE 'K'
< DE LA 'TACHE HARDWARE' DONT LA
< PILE CONTIENT LES REGISTRES...
LR A,L < 'L' VA BASER CETTE PILE (-DEPILE).
J: VAL K < INITIALISATION...
LA DEPILE+J,L
J: VAL J+I
STA SA < RESTAURATION DU REGISTRE 'A'
< DE LA 'PSTS'.
LA DEPILE+J,L
J: VAL J+I
STA SB < RESTAURATION DU REGISTRE 'B'
< DE LA 'PSTS'.
LA DEPILE+J,L
J: VAL J+I
STA SX < RESTAURATION DU REGISTRE 'X'
< DE LA 'PSTS'.
LA DEPILE+J,L
J: VAL J+I
STA SY < RESTAURATION DU REGISTRE 'Y'
< DE LA 'PSTS'.
LA DEPILE+J,L
J: VAL J+I
STA SL < RESTAURATION DU REGISTRE 'L'
< DE LA 'PSTS'.
LA DEPILE+J,L
J: VAL J+I
STA SW < RESTAURATION DU REGISTRE 'W'
< DE LA 'PSTS'.
DEFS05: EQU $
<
<
< F I N D U D E F A U T S E C T E U R
< E T A T T E N T E :
<
<
PLR A,W
CPZR W < UN 'IOP' AT'IL ETE ARRETE ???
JE DEFS08 < NON...
STA O,W < OUI, ON RESTAURE LE CONTENU DE SA BOITE
< AUX LETTRES EN ESPERANT QU'IL A EU LE
< TEMPS DE PRENDRE EN COMPTE LE 'CCB'
< SPECIAL DEFAUT SECTEUR...
DEFS08: EQU $
IC DEFOK < 'DEFOK'=I+I,
< INDIQUE QUE TOUT A ETE FAIT !!!
DEFS09: EQU $
LXI K < CHARGEMENT DU REGISTRE 'X' AVEC
< L'"INFINI" DE LA MACHINE ; AINSI
< LE 'HALT' VA METTRE LA MACHINE
< EN ATTENTE POUR 65536*2 MICRO-
< SECONDES, ET AINSI ON EST SUR QUE
< LE SECTEUR DISPARAITRA PENDANT SON
< EXECUTION...
HALT < ET ON ATTEND QUE TOUT DISPARAISSE...
JMP DEFS09 < AU CAS OU ON ATTENDRAIT LONGTEMPS...
< MAIS A T T E N T I O N CE 'JMP' PEUT
< CREER S'IL ETAIT EXECUTE DES CYCLES
< MEMOIRE PARASITE, MAIS ON EST SUR
< D'APRES LA DUREE DU 'HALT' QU'IL NE
< SERA JAMAIS EXECUTE...
PAGE
<
<
< R E D E M A R R A G E D U S Y S T E M E :
<
<
< FONCTION :
< CE MODULE 'RESTAR' EST UTILISE
< A L'INITIALISATION ('INI') DU
< SYSTEME, AINSI QU'A LA REAPPARI-
< TION DU SECTEUR ELECTRIQUE APRES
< UN DEFAUT SECTEUR ('DEFSEC').
< ON NOTERA QUE L'ON A ICI :
< IOM=1 (DANS 'ST'),
< IPM=1 (DANS 'ST'),
< LCM=1 (DANS 'ST'), ET ENFIN
< LE REGISTRE 'IM' EST REMIS A 0 (TOUS LES
< NIVEAUX D'INTERRUPTIONS SONT DEMASQUES).
< LA PREMIERE CHSOE IMPORTANTE QUE
< FASSE 'RESTAR' EST DE REGENERER
< LES 'PSTH' AU CAS OU IL S'AGIRAIT
< D'UNE REAPPARITION DU SECTEUR
< ELECTRIQUE.
<
<
< SENSIBILITE AU DEFAUT SECTEUR :
< LE 'RESTART' A LIEU AVEC 'IOM'='IPM'=1,
< AINSI QUE LES A POSITIONNE LA MICRO-MACHINE.
< EN CONSEQUENCES TOUTES LES OPERATIONS SEN-
< SIBLES AU DEFAUT SECTEUR (REINITIALISATION
< DES 'PSTH',...) DOIVENT ETRE FAITES AVANT
< DE DEMASQUER LES INTERRUPTIONS...
<
<
< NOTA :
< CE PROGRAMME EST EMPRUNTE A 'CMS4-MP'
< TOUS LE COMMENTAIRES N'ONT PAS ETE ADAPTES
<
<
< Q U E F A I R E S I L E D E F A U T S E C T E U R
< N ' A P A S E T E P R I S E N C O M P T E
< S U I T E A U N E P A N N E H A R D W A R E :
<
<
< REALISER LES ACTIONS SUIVANTES :
<
< 1 - RELANCER 'PROMST' ; CELUI-CI
< SE PLANTERA A LA PREMIERE ENTREE-
< SORTIE UTILISANT LES CANAUX, LE
< PLANTAGE A LIEU SUR LA 'SYSER' DE
< TEST DE 'TIME-OUT' (BOUCLE D'ADRES-
< SE 'ZIPI4').
<
< 2 - BLOQUER 'PROMST' EN REMPLACANT
< L'INSTRUCTION 'BLOCK3' QUI SUIT LA 'SYSER'
< PAR UN 'JMP $', PUIS EN FAISANT 'STEP-
< STEP' AU PUPITRE.
<
< 3 - RECONSTITUER LA PILE 'PILPS1'
< DE 'PROESC' TELLE QU'ELLE EST A
< L'INITIALISATION DU SYSTEME (EN
< PARTICULIER 'PRESC2', ET 'COM'
< ONT DISPARUS...).
<
< 4 - BLOQUER 'PROMST' EN REMPLACANT
< L'INSTRUCTION 'BLOCK1' D'ANNULATION DU
< MODE 'DEBUG' QUI SUIT 'PQDEF8' PAR
< UN 'JMP $', PUIS EN METTANT 'PROMST'
< EN 'RUN'.
<
< 5 - VERIFIER QUE TOUT PARAIT CORRECT...
<
< 6 - DEBLOQUER 'PROMST' ET 'PROESC'
< EN ANNULANT LES 'JMP $' DE BLOQUAGE
< SITUES EN 'BLOCK3' ET 'BLOCK1'...
<
< 7 - LE SYSTEME DOIT ETRE REPARTI,
< MAIS LES VISUS DEMEURENT INACCES-
< SIBLES CAR LEURS COUPLEURS SONT
< DEPROGRAMMES...
<
< 8 - BLOQUER 'PROMST' EN 'BLOCK2'
< EN METTANT UN 'JMP $' ; NE PAS OUBLIER
< DE NOTER PRECISEMMENT L'ENSEMBLE DES
< REGISTRES DE L''IDLE'...
<
< 9 - APRES AVOIR MASQUEES TOUTES LES INTER-
< RUPTIONS DANS 'ST', FAIRE POUR CHAQUE
< VISU DU SYSTEME :
< P <-- 'INICV',
< L <-- 'DCTVIS' COURANTE,
< ET EXECUTER EN PAS A PAS LES DEUX
< INSTRUCTIONS DE 'INICV' QUI REINI-
< TIALISE CHAQUE VOIE.
<
< 10 - ENFIN, RESTAURER LES REGISTRES
< DE 'PROMST' TELS QU'ILS ONT ETE NOTES
< AU POINT "8", PUIS ANNULER LE BLOQUAGE
< 'BLOCK2', ET C'EST REPARTI...
<
< 11 - ON CONSEILLE ALORS D'ARRETER
< TOUS LES UTILISATEURS PROPREMENT
< PAR "!F", ET DE RECHARGER ENSUITE
< CALMEMENT LE SYSTEME...
<
<
< F A U S S E P S T H 0 D E M I S E S U R
< L E N I V E A U 0 D E L ' E S C L A V E :
<
<
PRTH0: EQU $
WORD COM+DEPCH < REGISTRE 'C'.
WORD PILRES < REGISTRE 'K'.
WORD RESPR1 < REGISTRE 'P'.
WORD SMST < REGISTRE 'S'.
<
<
< I N I T I A L I S A T I O N S :
<
<
RESTAR: EQU $
LAI MMOT
XIMR A < ON MASQUE TOUS LES NIVEAUX DANS 'IM' ;
< EN EFFET, 'IM' NE PARTICIPE PAS AUX
< CHANGEMENTS DE CONTEXTE, ET DE PLUS,
< S'IL N'Y A PAS DE PROCESSEUR ESCLAVE,
< ET MEME S'IL Y EN A UN, ON VA MODIFIER
< LE RELAI DES 'PSTH' NE PERMETTANT AUCUNE
< INTERRUPTIONS PARASITES (QUI PEUVENT
< PASSER, PAR EXEMPLE SI L'ESCLAVE N'EXISTE
< PAS AU RETOUR DE L'ACTD DE NETTOYAGE
< DE LA MEMOIRE)...
LRM A,C,W,K
WORD PSTH00 < A : POUR REINITIALISER LE RELAI
< DES 'PSTH'.
WORD COM+DEPCH < VALEUR INITIALE DE LA BASE 'C'.
WORD ZERO < 'W' BASE LA MEMOIRE DEBANALISEE.
WORD PILRES < VALEUR INITIALE DU REGISTRE 'K'.
STA ALPSTH-ZERO,W < REINITIALISATION A PRIORI DU RELAI
< DES 'PSTH'...
RDSI < LECTURE DE L'IDENTIFICATION...
ANDI MNUBUS?MNUPRO < (A)=NUMERO DU PROCESSEUR COURANT.
LXI PROESC
CP &SYSPRO < EST-ON SUR UN ESCLAVE ???
JNE RESTMA < NON...
<
<
< R E S T A R T D ' U N E S C L A V E :
<
<
RESTES: EQU $ < ENTRY DU MAITRE LORSQUE L'ESCLAVE
< N'EXISTE PAS, ET QU'IL FAUT QUAND
< MEME ALLER NETTOYER LA MEMOIRE
< HAUTE...
LA DEFOK < COMMENT CELA S'EST-IL PASSE ???
CPI DEFOK0 < 'DEFOK' DOIT VALOIR I+I...
JNE RESTES < ET BIEN NON, ON BOUCLE; LES RAISONS EN
< SONT PEUT-ETRE, UN 'INI' AU PUPITRE,
< DES DEFAUTS SECTEURS DANS LE 'RESTART',
< OU AUTRE CHOSE...
LRM A,B,X,Y,L
WORD COM+DEPCH < A : POUR INITIALISER C(PRTH0),
WORD PILRES < K : POUR INITIALISER K(PRTH0),
WORD RESPR1 < X : POUR INITIALISER P(PRTH0),
WORD SMST < Y : POUR INITIALISER S(PRTH0),
WORD PRTH0 < 'L' VA BASER LA FAUSSE 'PSTH0'...
USE L,PSTH
STA HC < INITIALISATION
STB HK < DE LA FAUSSE
STX HP < 'PSTH0' POUR PLACER
STY HS < L'ESCLAVE SUR LE NIVEAU 0...
LRM A,L
WORD PRTH0 < (A)=ADRESSE DE LA FAUSSE 'PSTH0'.
WORD DCTPP1 < (L)=ADRESSE DE LA DCT DE DIALOGUE
< MAITRE --> ESCLAVE.
< A NOTER QUE POUR DES RAISONS D'ASSEM-
< BLAGE, ET D'EDITION DE LIENS, ON
< N'UTILISE PAR 'DCTPR1', MAIS UN SYM-
< BOLE QUI LUI EST EQUIVALENT...
STA ALPSTH-ZERO,W < MISE EN PLACE DE LA FAUSSE 'PSTH0'...
<
<
< A T T E N T I O N :
< LA PILE 'PILRES' ETANT UTILISEE ICI,
< ET AU DEBUT DE LA FAUSSE 'TH0' NE PEUT
< ETRE UTILISEE POUR SAUVEGARDER DES
< REGISTRES !!!
<
<
ACTD < ET AINSI, LE PROCESSEUR ESCLAVE SE
< RETROUVE SUR LE NIVEAU 'TH0', ET
< DEVIENT ININTERRUPTIBLE...
XWOR%1: VAL COSBT?LCM=FMASK(K?MIPM?MIOM=FCINST
LRM A
WORD XWOR%1
SST < REMASQUONS TOUTES LES INTERRUPTIONS ;
< NOTONS QUE L'ON NE RISQUE RIEN, CAR
< EN EFFET 'IM' MASQUE TOUS LES NIVEAUX
< D'INTERRUPTION...
LRM A < RETOUR MAITRE, LORSQUE L'ESCLAVE
WORD PSTH00 < N'EXISTE PAS...
STA ALPSTH-ZERO,W < RESTAURATION DU RELAI DES 'PSTH',
JMP RESTMB < ET VERS LA SUITE DE LA RESTAURATION...
<
<
< R E S T A R T D U M A I T R E :
<
<
RESTMA: EQU $
LXI PROMST
CP &SYSPRO < MAIS, EST-ON BIEN SUR LE MAITRE ???
JE RESTMD < OUI...
<
< NON, MAIS OU EST-ON ALORS ???
< (PEUT-ETRE SUR LE PROCESSEUR
< ESCLAVE QUI AURA ETE DECLARE
< INEXISTANT...)
<
LAI K
SBT STOP
SST < ON L'ARRETE...
RESTME: EQU $
HALT
JMP RESTME < ON ATTEND L'ARRET EFFECTIF...
<
< CAS DU VRAI MAITRE :
<
RESTMD: EQU $
<
< ELECTION DE LA TACHE 'SOFTWARE' QUI
< VA ETRE RELANCEE : ON PEUT SE DEMANDER
< POURQUOI NE PAS UTILISER 'NS' : LA
< RAISON EST TOUTE BETE (COMME TOUT CE
< QUE FAIT LA 'SEMS'...) : LES INSTRUCTIONS
< DU MICRO-SCHEDULER SONT INTERRUPTIBLES
< PAR LES INTERRUPTIONS 'IPI' ET D'ENTREES-
< SORTIES, QUI PAR CE BIAIS PEUVENT
< DEROULER DU MICRO-CODE TESTANT LE
< DEFAUT SECTEUR QUI PEUT ALORS PASSER,
< L'INSTRUCTION 'MICRO-SCHEDULER' N'ETANT
< PAS ACHEVEE, ET PAR EXEMPLE, LE MOT 'NS'
< N'EST PAS ENCORE MIS A JOUR ; AINSI UN
< 'WAIT' METTANT UNE TACHE EN ATTENTE
< ('ESTF'(J)=K) PEUT ETRE TOUJOURS
< MEMORISEE DANS 'NS' AU MOMENT DU
< RESTART, ET DONC SE VOIR RELANCER !!!
<
LA &ANS
CPI NSPESC+NSNSP0 < LE 'NS' EST-IL UN FAUX 'NS' CORRES-
< PONDANT AU CAS OU 'TH0' FAIT UN
< 'DOWN' POUR DESCENDRE (???) UN ESCLAVE
< EN MEMOIRE BASSE ???
JGE REST13 < OUI, ON DOIT DONC LE CONSERVER !!!
LXI NMTS/NBITMO < (X)=LONGUEUR DES TROIS FILES DE
< BITS 'ASTF', 'ESTF' ET 'RSTF'.
LBI K < AFIN D'ASSURER UN FONCTIONNEMENT
< CORRECT DE L'INSTRUCTION 'DBT'.
REST10: EQU $
LA ASTF-ZERO,W < ACCES AU MOT COURANT DE 'ASTF',
AND ESTF-ZERO,W < AUQUEL ON AJOUTE 'ESTF',
AND RSTF-ZERO,W < ET 'RSTF'...
LR X,Y < SAUVEGARDE DU DECOMPTE COURANT
< DANS LE REGISTRE 'Y'.
DBT < RECHERCHE DE LA PREMIERE TACHE
< PRETE :
< 'C'=K : LE BIT DE RANG 'X' A ETE
< TROUVE A '1'...
JNC REST11 < CA Y EST, ON A TROUVE UNE TACHE...
ADRI P,W < ET NON, TANT PIS ON PASSE A LA
< SUITE DES TROIS LISTES DE BITS...
LR Y,X < RESTAURATION DU DECOMPTE.
JDX REST10 < AUX TROIS MOTS SUIVANTS...
<
< S Y S E R : AUCUNE TACHE N'EST ELIGIBLE !!!
<
BSR ASYSER
LA &ANS < ON FAIT COMME SI CE NUMERO ETAIT
< DEJA DANS 'NS', ET ETAIT BON...
JMP REST13 < VERS LA RELANCE...
REST11: EQU $
LR W,A < (A)=DEPLACEMENT EN MOTS DANS 'ASTF',
SBR A,W < ET RESTAURE : (W)='ZERO'...
SLLS NBITMO=K < (A)=DEPLACEMENT EN BITS DANS 'ASTF'.
ADR X,A < (A)=NUMERO DE LA TACHE 'SOFTWARE' ELUE,
STA &ANS < QUE L'ON MET DANS 'NS'...
REST13: EQU $
<
< BON, MAINTENANT QU'ON CONNAIT
< LE 'NS' SUR LE MAITRE, Y-A-T'IL
< UN ESCLAVE OU PAS ???
<
LXI PROESC
CPZ &SYSPRO < L'ESCLAVE EXISTE-T'IL ???
JGE RESTMC < OUI, DONC ON RESTE DANS LA SEQUENCE
< NORMALE DU MAITRE...
LAI NSPDKS < NON,
STA ANSPS < DONC, IL EST IMPOSSIBLE DE FAIRE LE
< SWAPPING SUR 'PR1', ON PREND LE DISQUE
< FIXE...
JMP RESTES < MAIS IL FAUT MALGRE TOUT ALLER
< NETTOYER LA MEMOIRE HAUTE...
RESTMC: EQU $
HALT < ON MINIMISE LES ACCES MEMOIRE DU MAITRE ;
< NOTONS QUE LA PREMIERE FOIS QUE CE 'HALT'
< EST FAIT, 'X' EST INDETERMINE...
CPZ DEFOK < OUI, ALORS ATTENDONS QU'IL AIT
< FINI SON PETIT CINEMA (VOIR LA 'PSTH0').
JNE RESTMC < TANT QUE DEFOK#0, ON BOUCLE...
RESTMB: EQU $
RDSI < ON EST OBLIGE DE RELIRE L'IDENTIFICA-
< TEUR DU SYSTEME A CAUSE DU PASSAGE
< DANS LA FAUSSE 'TH0' QU'ON A FAIT SI
< LE PROCESSEUR ESCLAVE N'EXISTE PAS...
ANDI MNUBUS?MNUPRO < (A)=NUMERO DU PROCESSEUR...
LXI PROMST
CP &SYSPRO < EST-ON BIEN SUR LE MAITRE ???
JNE $ < NON, BIZARRE...
< (A NOTER QU'ON NE FAIT PAS DE SYSER
< AFIN D'EVITER DES CHANGEMENTS DE
< CONTEXTES QUE SEUL LE MAITRE PEUT
< EXECUTER !!!)
<
< INHIBITION DU SOUS-PROGRAMME 'TDEFS' :
<
IC KTDEFS < INHIBITION DES TESTS DE TDEFS
< EN EFFET, TANT QUE LE 'RESTART' N'EST
< PAS TRAITE, IL NE FAUT PAS PRENDRE EN
< COMPTE DE NOUVEAUX DEFAUTS SECTEURS ;
< ON FAIT DONC COMME S'IL Y AVAIT DEJA
< UN APPEL EN COURS (RECURSIF...),
< D'AILLEURS C'EST PEUT-ETRE LE CAS SI
< C'EST 'TDEFS' QUI A DETECTE CELUI
< QUE L'ON TRAITE...
<
< NOTA :
< 'COMPTH' N'EST PAS REINITIALISE ; EN
< EFFET, OU BIEN ELLE VAUT DEJA 0, OU BIEN
< ELLE NE PEUT VALOIR QUE 1 : ALORS CELA
< SIGNIFIE QU'UNE TACHE HARDWARE A MASQUE
< LES INTERRUPTIONS, PUIS FAIT PASSER A
< 1 LA VARIABLE 'COMPTH', PUIS A DETECTE
< UN DEFAUT SECTEUR EN ATTENTE ; DANS CES
< CONDITIONS, CETTE TACHE HARDWARE VA ETRE
< RELANCEE, ET DONC RAZER ELLE-MEME 'COMPTH'
< DANS 'RRSTF'...
<
<
< MASQUAGE DU PUPITRE (SEUL LE SYSTEME
< Y AURA ACCES) :
<
BITPUP:: VAL L < NIVEAU DU PUPITRE DANS 'IM'.
LXI NSPPR1
BSR ACADCT < (L)=ADRESSE DU FUTUR REGISTRE 'IM' DU
< PROCESSEUR MAITRE...
WORD LAIMST < (A)=REGISTRE 'IM' DU PROCESSEUR MAITRE ;
< DANS CELUI-CI LE PUPITRE EST INHIBE,
< MAIS QUELQUEFOIS, LE NIVEAU DU
< 'CBJ' L'EST AUSSI (LORSQU'IL EST
< ABSENT EN PARTICULIER, OU EN DEFAUT).
XIMR A < MASQUAGE DU NIVEAU DU PUPITRE.
<
<
< R E I N I T I A L I S A T I O N D E S ' P S T H ' :
<
<
LAI NUMDEF < (A)=NUMERO DE LA PREMIERE 'PSTH'
< A REINITIALISER (ICI ON NE JOUE
< PLUS AVEC LEUR PRIORITE...).
<
< REINITIALISATION DE LA 'PSTH' COURANTE
< DONT LE NUMERO EST DANS LE REGISTRE 'A' :
<
REST01: EQU $
BSR ASMIC < RENVOIE :
< (B)=ADRESSE DE L''IC' DE LA 'TACHE HARD-
< WARE' DONT LE NUMERO EST DANS 'A'.
LR B,L < 'L' BASE LE 'IC' COURANT...
USE L,PSTH < ON SAIT QUE 'IC' ET 'PSTH'
< UTILISENT LA MEME DSEC...
BSR ASMTH < RENVOIE (B)=ADRESSE DE LA 'PSTH'
< DONT LE NUMERO EST DANS 'A'
PSR A < SAUVEGARDE DU NUMERO DE 'TACHE
< HARDWARE' COURANT.
LAD HC < (A)=ADRESSE ZONE DE 'IC' CONTENANT
< LES VALEURS DE REINITIALISATION
< DE 'PSTH'
LXI LPSTH < (X)=NOMBRE DE MOTS A REINITIALISER.
MOVE < REINITIALISATION DE LA 'PSTH' COURANTE.
<
< REINITIALISATION DE 'IC' :
<
STZ ICSAV < REINITIALISATION DE L'ETAT DE
< SAUVEGARDE DES REGISTRES
< INTERROMPUS...
<
< ACCES A LA 'TACHE HARDWARE' PRECEDENTE :
<
PLR A < RESTAURE LE NUMERO DE 'TACHE HARDWARE'
< COURANT DANS LE REGISTRE 'A'.
ADRI -P,A < PASSAGE A LA 'TACHE HARDWARE'
< PRECEDENTE...
JAGE REST01 < VERS LA TACHE HARDWARE PRECEDENTE
<
<
< I N I T I A L I S A T I O N :
<
<
LA TYPDEF < S'AGIT-IL D'UNE REAPPARITION
CPI TYPTH < DU SECTEUR SUITE A DEFSEC?
JNE REST02 < NON...
<
< "REPOSITIONNEMENT" D'UNE 'TACHE HARDWARE' INTERROMPUE
< PAR UN MECHANT 'DEFAUT SECTEUR' :
<
LA IDEDEF < (A)=NUMERO DE LA 'TACHE HARDWARE',
BSR ASMTH < RENVOIE :
< (B)=ADRESSE DE LA 'PSTH' DE CETTE TACHE.
LRM A < (A)=ADRESSE DE LA FAUSSE 'PSTH' DE
WORD FPSTH < REPRISE DE LA TACHE INTERROMPUE.
LXI LPSTH < (X)=NOMBRE DE MOTS D'UNE 'PSTH'.
MOVE < "REPOSITIONNEMENT" DE LA 'TACHE
< HARDWARE' INTERROMPUE.
REST02: EQU $
<
<
< R E L A N C E D E S T A C H E S B L O Q U E E S :
<
<
PSR L
USE L,DCT0
LXI NSPPER < (X)=NSP DE LA DERNIERE TACHE A TESTER.
E881: EQU $
LA &ADCTSY < (A)=ADRESSE DE LA DCT COURANTE.
JAE E882 < CAS DU 'SGF'...
LR A,L < (L)=ADRESSE DE LA DCT COURANTE.
LR X,A < (A)=NSP DE LA TACHE COURANTE.
CPI NSPVI0 < EST-CE UNE VISU ???
JL E882X < NON...
CPI NSPVIN < EST-CE UNE VISU ???
JG E882X < NON...
BSR AINICV < OUI, ON INITIALISE SON COUPLEUR !!!
E882X: EQU $
CPI NSPHOR < EST-CE L'HORLOGE ???
JE E881X < OUI, ON RELANCE A PRIORI...
LA SIT < NON,
TBT XMBETA < ALORS EST-ELLE EN ATTENTE SUR 'SIT' ???
JNC E882 < NON, RIEN A FAIRE...
LA BITSEM < OUI,
TBT B0SIT < ALORS FAUT-IL LA RELANCER APRES
< UN DEFAUT SECTEUR ???
JNC E882 < NON, RIEN A FAIRE...
SBT B1SIT < OUI, ALORS ON MEMORISE CETTE
< FAUSSE INTERRUPTION APRES UN
< 'INI' (DEFAUT SECTEUR,...).
STA BITSEM
E881X: EQU $
BSR ARVHDL < ET ON SIMULE UNE INTERRUPTION...
E882: EQU $
JDX E881 < A UNE AUTRE TACHE...
PLR L
USE L
<
<
< I N I T I A L I S A T I O N D E L A
< T E L E V I S I O N N U M E R I Q U E :
<
<
LRM A,B
WORD GOCOL < ADRESSE DU MODULE D'INITIALISATION,
WORD RETCOL < ET ADRESSE DE RETOUR DE CE MODULE...
PSR A
RSR < CE 'RSR' EST DONC UN 'GOTO' VERS LE
< MODULE 'GOCOL' D'INITIALISATION...
RETCOL: EQU $ < ET VOICI SON ADRESSE DE RETOUR...
<
<
< F O R C A G E D E L A R E I N I T I A L I S A T I O N
< D E L A D A T E E T D E L ' H E U R E :
<
<
LAI XXRINI
STA RINI < POUR LE 'RECOVERY'...
<
<
< C O H E R E N C E D E S ' D C T E S C ' :
<
<
USE W,PSTS
LXI NESCLA < (X)=NOMBRE D'UTILISATEURS RECONNUS.
REST20: EQU $
ADRI -P,X < A L'UTILISATEUR PRECEDENT...
CPZR X < EXISTE-T'IL ???
JL REST21 < NON, ON A PARCOURU TOUTE 'TBU'...
LA &ATBU < OUI, (A)=ADRESSE DE SA 'DCTESC',
JAE REST20 < RIEN A FAIRE : CET 'ID'=(X) EST
< INOCCUPE...
LR A,W < (W)=ADRESSE 'DCTESC' COURANT.
LA SSLO < (A)=SLO(DCTESC),
JAG REST24 < OK, A PREMIERE VUE IL EST BON...
BSR ASYSER < E R R E U R S Y S T E M E :
< (LE REGISTRE 'SLO' A UN CONTENU
< NEGATIF OU NUL)
REST24: EQU $
CP SSLE < A-T'ON BIEN (SLO)<(SLE) ???
JNE REST23 < ON A DEJA : (SLO)#(SLE)...
BSR ASYSER < E R R E U R S Y S T E M E :
< (SLO)=(SLE) ?!??!???!
JMP REST20 < ALLONS A L'UTILISATEUR SUIVANT...
REST23: EQU $
JL REST20 < OK, (SLO)<(SLE)...
<
< CAS OU (SLO)>(SLE) DANS UNE 'DCTESC' :
< IL S'AGIT D'UN CAS RARE ; EN EFFET
< LORS DE LA FONCTION '1EC5 DE 'TH0',
< CETTE MEME 'TH0' CONVERTIT LE CONTENU
< DE 'SLO' EN UNE ADRESSE MOT AFIN
< QUE LE SOUS-PROGRAMME MAITRE QUE L'ON
< VA EXECUTER PUISSE L'UTILISER, COMME
< IL LE FAISAIT DANS 'CMS4' ; MAIS SI
< PAR MALHEUR ARRIVE UN DEFAUT SECTEUR
< NON PREVU, OU BIEN UN 'INI' SUITE
< PAR EXEMPLE A UNE ALARME AU PUPITRE,
< ALORS LA LE 'SLO' DE CET UTILISATEUR
< RESTE EN ADRESSE MOT, CE QUI IMPLIQUE
< UNE TRAPPE, MAIS QUI NE PEUT ETRE
< TRAITEE CORRECTEMENT, CAR L'ADRESSE
< DE L'ESPACE MEMOIRE EST MAUVAIS...
<
SLRS -DADR < CONVERSION EN UNE BONNE
< ADRESSE...
STA SSLO < ET MISE A JOUR DE 'SLO'...
JMP REST20 < VERS L'UTILISATEUR PRECEDENT...
REST21: EQU $
<
<
< R E S T A U R A T I O N " M A N U E L L E "
< D U C O N T E X T E D E L A T A C H E
< ' S O F T W A R E ' I N T E R R O M P U E :
<
<
< FONCTION :
< CETTE RESTAURATION DU CONTEXTE DE LA
< TACHE 'SOFTWARE' INTERROMPUE (PAR UN
< DEFAUT SECTEUR PAR EXEMPLE...) EST PRO-
< GRAMME, ET NON PAS MICRO-PROGRAMME POUR
< DEUX RAISONS FONDAMENTALES :
< 1 - IL SERAIT BETE DE GACHER UN NIVEAU
< 'SOFTWARE' POUR FAIRE LE 'RESTART',
< 2 - LES INTERRUPTIONS SONT MASQUEES
< ET IL N'EST PAS IMPOSSIBLE QU'IL FAILLE
< PASSER LA MAIN A LA TACHE 'SOFTWARE'
< INTERROMPUE SANS LES DEMASQUER ; OR
< CECI EST IMPOSSIBLE EN UTILISANT LE
< 'MICRO-SCHEDULER' !!!
<
<
LX &ANS < 'X' RECOIT LE 'NS'
ADRI -NSNSP0,X < 'X' RECOIT LE 'NSP' DE LA 'TS'
LB &ADCTSY < 'B' RECOIT L'ADRESSE DE LA 'PSTS'
< DE CETTE TACHE
LR B,W < LA BASE 'W' VA BASER LA 'PSTS' DE
< LA TACHE INTERROMPUE.
USE W,PSTS
<
< VALIDATION EVENTUELLE DE LA PILE DE LA
< TACHE DONT ON VEUT RESTAURER LE CONTEXTE ;
< EN EFFET, DANS LE CAS D'UNE TACHE EN MODE
< ESCLAVE, SA PILE 'K' SERA UTILISEE VIA
< LES REGISTRES 'SLO' ET 'SLE' A L'AIDE
< DE L'INDICATEUR 'SVCS' ; SI L'ESPACE LIBRE
< DE LA PILE N'EST PAS SUFFISANT, A CHAQUE
< OPERATION D'EMPILEMENT, IL Y AURA VIOLA-
< TION MEMOIRE, LE 'RESTART' SE RETROUVERA
< EN MODE ESCLAVE, ET LE PASSAGE EN 'TACHE
< HARDWARE 0' DEMASQUERA LES INTERRUPTIONS.
<
LA SS
TBT MS < LA TACHE EST-ELLE EN MODE ESCLAVE ?
JC REST06 < NON, ON NE VALIDE PAS 'K'...
LA SK < OUI, ACCES AU REGISTRE 'K',
ADRI FADR,A < PRENONS EN COMPTE UNE MARGE DE
< SECURITE CORRESPONDANT A L'UNITE
< DANS LAQUELLE SONT EXPRIMES LES
< REGISTRES 'SLO' ET 'SLE' (BLOCS
< DE FADR-MOTS).
SLRS -DADR < LA VALEUR DE 'K' EST EXPRIMEE DANS
< LA MEME UNITE QUE 'SLO' ET 'SLE'.
AD SSLO < ('K'+FADR)/FADR+'SLO'.
SB SSLE < ('K'+FADR)/FADR+'SLO'-'SLE'.
JALE REST06 < OK, IL Y AURA SUFFISAMMENT DE PLACE
< DANS LA PILE DE LA TACHE ESCLAVE.
<
< S Y S E R : IL N'Y A PAS ASSEZ DE PLACE DANS LA
< PILE ESCLAVE POUR TRAVAILLER EN TOUTE
< SECURITE : ('K'+FADR)/FADR>'SLE'-'SLO' !!!
<
< (W)=ADRESSE DE LA 'PSTS' DE LA TACHE ESCLAVE.
<
BSR ASYSER
REST06: EQU $
<
< RESTAURATION DES REGISTRES 'SLO' ET
< 'SLE' : DANS LA MESURE OU LA SUITE
< DU 'RESTART' NE LES UTILISE PAS :
< (SAUF DANS LES INSTRUCTIONS UTILISANT
< LA PILE 'K' LORSQUE L'INDICATEUR
< 'SVCS' EST A '1')
<
LA SSLO
LB SSLE
WOE < RESTAURATION DES REGISTRES
< 'SLO' ET 'SLE'.
<
< RESTAURATION DU REGISTRE 'B',
< AINSI QUE DE LA BASE 'L' ;
< CELA IMPLIQUE QUE LE 'RESTART' NE
< LES UTILISE PAS...
<
LA SL
LR A,L < RESTAURATION DE LA BASE 'L'.
LB SB < RESTAURATION DU REGISTRE 'B'.
<
< RESTAURATION DE LA PILE 'K' ;
< LE 'RESTART' VA DONC SE POURSUIVRE
< SUR LA PILE DE LA TACHE INTERROMPUE,
< CE QUI FAIT L'HYPOTHESE QUE CETTE PILE
< A ENCORE DE L'ESPACE LIBRE (ET PAR LA
< MEME OCCASION QU'IL NE VA PAS SE PRODUIRE
< TROP DE DEFAUTS SECTEURS IMBRIQUES !!!)
<
LA SK
LR A,K < RESTAURATION DU REGISTRE 'K'.
LRM A < A <-- MSVCS
WORD MSVCS
AND SS < ON CONSTRUIT AINSI UN MASQUE QUI
< EST SOIT VIDE ('SVCS'=K) OU NE
< CONTENANT QUE 'SVCS'.
SST < POSITIONNEMENT EVENTUEL DE 'SVCS'
< A '1' AFIN D'ASSURER UN FONCTION-
< NEMENT CORRECT DES INSTRUCTIONS SUR
< LES PILES...
LA SS
TBT MS < LA TACHE INTERROMPUE ETAIT-ELLE
< EN MODE ESCLAVE ???
JC REST05 < NON, LE REGISTRE 'ST' EST BON...
LRM A
WORD MSVCS < 'A' <-- 'MSVCS'...
SST < ON POSITIONNE LE BIT 'SVCS' AFIN QUE
< LES INSTRUCTIONS SUR LA PILE 'K'
< UTILISENT LES REGISTRES 'SLO'
< ET 'SLE'.
REST05: EQU $
<
< PREPARATION DES RESTAURATIONS DES
< REGISTRES 'P', 'W' ET 'A' QUI SEULS
< SONT ABSOLUMENT NECESSAIRES (AVEC LA
< BASE 'C') A UNE BONNE POURSUITE
< DU 'RESTART' :
<
XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES
< EMPILES DANS LA PILE DE LA TACHE
< INTERROMPUE...
LA SP
#@PSR A < #SISP CMS5 KREG#
< EMPILEMENT DU COMPTEUR ORDINAL 'P'.
LA SW
#@PSR A < #SISP CMS5 KREG#
< EMPILEMENT DE LA BASE 'W'.
LA SA
LX SX
LY SY
#@PSR A,X,Y < #SISP CMS5 KREG#
< EMPILEMENT DES REGISTRES 'A', 'X', 'Y'.
<
< REAUTORISATION DU SOUS-PROGRAMME 'TDEFS' :
<
CALL #SISP CMS5 DMKDEF#
< A T T E N T I O N : MIS A PART
< 'NSYSER', ON SUPPOSE, QU'IL N'Y
< AURA PLUS JUSQU'A L'EVENTUEL DEMAS-
< QUAGE DES INTERRUPTIONS DE 'SVC',
< NI D'APPEL A 'TDEFS' AFIN DE PAS
< TESTER UN DEFAUT SECTEUR EN ATTENTE
< AVANT QUE LE 'RESTART' NE SOIT TERMINE.
<
< DISCRIMINATION DES MODES MAITRES ET ESCLAVES :
< (ET CECI A CAUSE DE LA RESTAURATION DU
< REGISTRE 'P' ET DU BIT DE MODE 'MS')
<
LA SS
TBT MS < QUEL ETAIT LE MODE DE LA TACHE
< INTERROMPUE ???
JC REST03 < ELLE ETAIT EN MODE MAITRE...
<
< CAS OU LA TACHE INTERROMPUE ETAIT ESCLAVE :
<
TBT SVCS < VALIDATION DE 'SVCS'...
JNC REST04 < OK, 'SVCS'=K.
<
< S Y S E R : 'SVCS' D'UNE TACHE 'SOFTWARE' EN MODE
< ESCLAVE EST A '1' !!!
<
< NS=NUMERO DE CETTE TACHE,
< (W)=ADRESSE DE SA 'PSTS'.
<
BSR ASYSER
REST04: EQU $
CALL #SISP CMS5 IREST#
XXPILI:: VAL -XKREG < NOMBRE DE MOTS SUPPLEMENTAIRES A RESER-
< DANS CHAQUE PILE EN PREVISION D'UN
< DEFAUT SECTEUR !!!
IF XXPILI-XXPILJ,,XEIF%,
IF ATTENTION : LA VALEUR PRESUMEE POUR 'XXPILI' DANS
IF LA DEFINITION DE 'DCTSGF' EST MAUVAISE !!!
XEIF%: VAL ENDIF
RSV < RESTAURATION DU REGISTRE 'P', ET
< PASSAGE EN MODE ESCLAVE.
<
< CAS OU LA TACHE INTERROMPUE ETAIT MAITRE :
<
REST03: EQU $
CALL #SISP CMS5 JREST#
RSR < RESTAURATION DU REGISTRE 'P', EN
< RESTANT EN MODE MAITRE.
PAGE
<
<
< P R E V E N T I O N D E S D E F S E C :
< L O R S D E S E N T R E E S - S O R T I E S
<
<
< FONCTION :
< CE SOUS-PROGRAMME MEMORISE
< DANS LA 'DCT' D'UNE TACHE QU'UN
< DEFAUT SECTEUR EST A CRAINDRE
< POUR ELLE CAR UNE ENTREE-SORTIE
< A ETE LANCEE...
< EN FAIT, LES INDICATEURS
< CONCERNES FONCTIONNENT EN
< BASCULE (AVANT,APRES) L'OPE-
< RATION SENSIBLE AU DEFAUT
< SECTEUR.
<
<
< ARGUMENT :
< (L)=ADRESSE DE LA DCT DU HANDLER APPELANT.
<
<
USE L,DCT0
PREDS: EQU $
PSR A
BSR ASMMK <<<< MASK IT...
LA BITSEM
IBT B0SIT < INVERSION DE L'INDICATEUR QUI FONCTIONNE
< DONC EN BASCULE ; CETTE INVERSION EST
< FAITE AVANT LE DEBUT ET APRES LA FIN DE
< L'ENTREE-SORTIE...
STA BITSEM
BSR ASMDK <<<< DEMASK IT...
PLR A
RSR
PAGE
<
<
< A V E R T I S S E M E N T D E C E R T A I N S
< H A N D L E R S L O R S D E D E F S E C :
<
<
< FONCTION :
< LORSQU'UN HANDLER A : BIT0(SIT)=1 LE
< RECOVERY LE REVEILLE LORS DES DEFSEC
< EN SIMULANT UNE IT. DE PLUS LE
< RECOVERY FAIT : BIT1(SIT)=1.
< CETTE ROUTINE PEUT ETRE APPELEE
< PAR UN HANDLER APRE LES 'RQST SIT'
< POUR SAVOIR SI L'IT EST REELLE OU
< SIMULEE POUR DEFSEC.
<
< ON ECRIRA :
<
< RQST SIT
< BSR ATHDS
< JC <IT-DEFSEC>,
< JNC <IT-REELLE>.
<
<
< ARGUMENT :
< (L)=ADRESSE DU HANDLER.
<
<
USE L,DCT0
THDS: EQU $
PSR A,B
LBI K
BSR ASMMK < MASQUAGE IT CAR ON VA
< MODIFIER SIT !!!
LA BITSEM
TBT B1SIT < TEST DU BIT QUE POSITIONNE LE
< RECOVERY LORS DES DEFSEC.
ADCR B < B <-- CARRY.
TBT B1SIT < RETEST DU "BIT1(SIT)" :
JNC E923 < IL N'Y A PAS EU DE DEFSEC.
RBT B1SIT < IL Y A EU UN DEFSEC: RAZ DU
< "BIT1(SIT)",
STA BITSEM < ET MISE A JOUR DE 'BITSEM' APRES DEFSEC.
BSR ABETA2 < RENVOIE (A)=BETA(SIT).
JALE E923 < OK : BETA(SIT)<=K.
DC SIT < CAS BETA(SIT)>0 : LE DEFSEC EST
< PROBABLEMENT APPARU DANS LA
< TACHE HARD RELATIVE A L'IT
< ATTENDUE PAR CE SIT : L'IT EST
< DONC COMPTEE 2 FOIS DANS SIT :
< UNE FIS PAR LA TACHE HARD, ET
< UNE FOIS PAR SIMULATION DANS
< LE RECOVERY.
< (CAS DES DISQUES EN PARTICULIER)
E923: EQU $
BSR ASMDK < DEMASQUAGE IT CAR ON A FINI
< DE TOUCHER AU SIT !!!
TBT NBITAB-B
PLR A,B
RSR
PAGE
<
<
< C O P I E S Y N C H R O N E D U S Y S T E M E :
<
<
< FONCTION :
< L'HORLOGE REALISE UNE COPIE ASYNCHRONE
< DU SYSTEME VIS A VIS DES EVENEMENTS IMPOR-
< TANTS ; ON INTRODUIT ICI UN 'SVC' MAITRE
< QUI PEUT ETRE APPELE PAR N'IMPORTE QUI
< ET QUI PROVOQUE UNE COPIE SYNCHRONE...
<
<
CALL #SISP CMS5 CHECK#
COPSYN: EQU $
<
< DEMANDE DE COPIE SYNCHRONE :
<
DCOPSY: BYTE NSPDKF;XDSYM?XTYPAD
WORD FGW < ECRITURE
WORD TCOPY < DU BUFFER DE COPIE
WORD MCOPY2 < GENERE PAR 'PR1' (EN GENERAL)
WORD SCOPY0 < SUR LA ZONE 'SCOPY1' DE 'DKF'...
DZS LDEM0+DCOPSY-$
<
< PROTECTION DE LA DEMANDE :
<
SCOPSY: WORD SPHEX0 < SEMAPHORE D'EXCLUSION DE PHASE CRITIQUE
DZS LSEM < PROTEGEANT 'DCOPSY'...
CALL #SISP CMS5 CHECK#
<
< ROUTINE DE GENERATION DU BUFFER
<
AACOPY: WORD MOPY < AFIN QUE SI 'PR1' EST ABSENT, LE BUFFER
< DE COPIE SOIT QUAND MEME GENERE...
PAGE
<
<
< V I D A G E D U B U F F E R D ' A N T I C I P A T I O N :
<
<
< FONCTION :
< CE MODULE (FAIT DE REFERENCES
< EN AVANT PARCE QUE LE HANDLER
< VISUS N'EST PAS ENCORE ASSEMBLE...)
< VIDE LE BUFFER D'ANTICIPATION DES
< VISUS PAR REINITIALISATION DE SES
< 3 DESCRIPTEURS.
<
<
< ARGUMENT :
< (L)=ADRESSE DE LA 'DCTVIS'.
<
<
SVCVBI: EQU $
BSR ASMMK < M A S Q U A G E I N T E R R U P T I O N
WORD STZKCW < ON SUPPRIME TOUS LES CARACTERES EN
< ATTENTE PAR ANNULATION DE 'KCWIO'...
WORD LAIVIN
WORD STAWIN < ON REINITIALISE LES INDEX D'ENTREE
< ('ICWIN' <-- 'XXVIN')
WORD LAIVOU
WORD STAWOU < ET DE SORTIE...
< ('ICWOUT' <-- 'XXVOUT')
BSR ASMDK < D E M A S Q U A G E ...
JMP ASVCMF < VERS LA SORTIE...
PAGE
<
<
< S Y N C H R O N I S A T I O N S U R L E S
< V A L E U R S P O S I T I V E S D U
< M O T ' C D A G 0 ' :
<
<
< FONCTION :
< CE NOUVEAU 'SVC' MAITRE UTILISE
< PAR L'IDLE ET LE SOUS-PROGRAMME
< 'ARIT' DE L'HORLOGE DETECTE LES
< VALEURS POSITIVES DU MOT 'CDAG0'
< (PREMIER MOT DE LA 'CDAG'), ET ALORS
< DEBLOQUE LES TACHES BLOQUEES SUR
< LE SEMAPHORE 'SEMCDA'.
<
<
SVCDAG: EQU $
<
< SAUVEGARDES :
<
PSR A,B,Y
CALL #SISP CMS5 PSRSLO#
<
< POSITIONNEMENT SUR LA 'CDAG' :
<
LRM A,B
WORD AOCDA5 < (A)=FUTUR 'SLO',
WORD AECDA5 < (B)=FUTUR 'SLE'.
WOE < ET ON POINTE SUR LA 'CDAG'...
LYI CDAG0 < (Y)=ADRESSE RELATIVE DANS LA 'CDAG' DU
< MOT QUE L'ON VA TESTER ET QUI SERT DE
< SYNCHRONISATION.
LAR < (A)=MOT 'CDAG0' DE LA 'CDAG' :
IF XCDAG0-K,,XEIF%,XEIF%
IF ATTENTION : LE TEST SUIVANT EST IDIOT (NEGATIF,
IF NUL OU POSITIF) !!!
XEIF%: VAL ENDIF
JALE IDLEC3 < ET BIEN LE MOT 'CDAG0' N'A PAS LA
< VALEUR ATTENDUE (C'EST-A-DIRE UNE VA-
< LEUR POSITIVE), DONC ON NE REVEILLE
< PERSONNE ; ON NOTERA QUE LE TIME-OUT
< EST GERE DIRECTEMENT PAR 'HDLHOR' A
< CHAQUE CHANGEMENT DE MINUTE...
<
< CAS D'UN ETAT IMPLIQUANT
< LA SYNCHRONISATION :
<
BSR ASMMK < M A S Q U A G E I N T E R R U P T I O N
< ET CECI A CAUSE DE 'HDLHOR' QUI
< GERE LES TIME-OUT SUR 'SEMCDA'...
<
< TEST DU SEMAPHORE DE DEMANDE
< DE SYNCHRONISATION SUR 'CDAG0' :
<
IDLEC1: EQU $
LA &ASEMCD < (A)=MOT0 DU SEMAPHORE 'SEMCDA',
BSR ABETA < (A)=BETA(SEMCDA),
IF XXSEM0-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JAGE IDLEC2 < (BETA(SEMCDA))>=0 : PAS D'ATTENTE SUR LE
< SEMAPHORE DE SYNCHRONISATION SUR 'CDAG0'.
<
< (BETA(SEMCDA))<0 : AU MOINS UN UTILI-
< SATEUR (VIA UN 'HDLSER') ATTEND, TESTONS
< DONC LE CONTENU DU MOT 'CDAG0' DONT
< L'ADRESSE RELATIVE A 'CDAG' EST DANS 'Y'.
<
LAD &ASEMCD < (A)=ADRESSE DU SEMAPHORE,
BSR ARLSE < ET ON FAIT UN RELEASE...
JMP IDLEC1 < AU CAS OU UN AUTRE UTILISATEUR ATTENDRAIT
< DESSUS...
<
< RESTAURATIONS ET SORTIE :
<
IDLEC2: EQU $
BSR ASMDK < D E M A S Q U A G E ...
IDLEC3: EQU $
CALL #SISP CMS5 PLRSLO#
PLR A,B,Y
ASVCMF: JMP SVCMTF < VERS LA SORTIE...
< (ET RELAI...)
PAGE
<
<
< ' S V C ' M A I T R E D E
< E X E C U T I O N D E S C O N N E X I O N S
< M A T R I C I E L L E S E V E N T U E L L E S :
<
<
< FONCTION :
< UN ESCLAVE PEUT ETRE ESPIONNE PAR
< AUTRE (CF. MAITRE-ELEVE), COMME UN
< ESCLAVE PEUT MONTRER A PLUSIEURS AUTRES
< QUELQUE-CHOSE. C'EST A QUOI VA SERVIR CE
< SYSTEME : IL VA DUPLIQUER LA DEMANDE
< COURANTE (W) SUR LE PERIPHERIQUES
< CONNECTES MATRICIELLEMENT AU PERI-
< PHERIQUE COURANT.
< UN NSP (NSP1) DE 0 A 31 PEUT ETRE
< CONNECTE MATRICIELLEMENT A UN NBRE
< QUELCONQUE DE NSP COMPRIS ENTRE 0 ET 31.
< (SOIT NSPX).
<
<
< ARGUMENTS :
< (A)=FONCTION COURANTE ('OPDEM'),
< (ON LA TRANSMET CAR ELLE PEUT AVOIR
< CHANGEE AU COURS DU SERVICE PRECEDENT)
< (W)=ADRESSE DE LA DEMANDE COURANTE.
<
<
UMATCO:: VAL D+D < LA MATRICE DES CONNEXIONS EST UNE
< MATRICE DE DOUBLE-MOTS...
XXNLOC:: VAL K < PAS D'ATTENTE EN CAS DE LOCATION...
XYNLOC:: VAL XXNLOC)BIT < ATTENTE EN CAS DE LOCATION ANTERIEURE...
<
< POINT D'ENTREE :
<
USE W,DEM0
SVCMAT: EQU $
PSR A,Y
LR A,Y < (Y)=FONCTION COURANTE...
LBY NSPTYP
XWOR%1: VAL MSKNSP=K
IF XWOR%1-NBITOC,,XEIF%,
IF ATTENTION : LE 'LBY' VA MERDER !!!
XEIF%: VAL ENDIF
XWOR%1: VAL -XWOR%1
ANDI MSKNSP>XWOR%1 < (A)='NSP' DE LA DEMANDE COURANTE, ET
CPI NBITMO*UMATCO < LE NSP(=NSP1) DEMANDE PAR
< L'ESCLAVE A-T'IL DROIT AUX
< CONNEXIONS MATRICIELLEES ???
JGE SVCMAC < NON, LE SERVICE EST DONC TERMINE.
<
< CAS OU NSP1 A DROIT AUX CONNEXIONS MATRICIELLES :
<
LR Y,X < (X)='OPDEM' COURANT, TEL QU'IL ETAIT
< AVANT LA DEMANDE PRECEDENTE.
XR A,X < (A)=OPDEM ; (X)=NSP1.
SWBR A,Y
ORR X,Y < OCTET0(Y)=OPDEM AVANT SERVICE,
< OCTET1(Y)=NSP1.
PSR B
ADR X,X < (X)=2*NSP1, EN EFFET, MATX EST
< UNE TABLE DOUBLE-MOTS.
LA &AMATX < (A)=MOT0(MATX(NSP1)).
ADRI I,X
LB &AMATX < (B)=MOT1(MATX(NSP1)).
<
< TEST SUR L'EXISTENCE DE CONNEXIONS
< MATRICIELLES SUR NSP1 :
<
JANE E940 < IL Y A AU MOINS UNE CONNEXION.
CPZR B
JE E941 < IL N' Y A AUCUNE CONNEXION SUR
< NSP1, INUTILE DE NOUS ATTARDER.
<
< CAS OU ON A TROUVE AU MOINS UNE CONNEXION
< MATRICIELLE SUR NSP1 :
<
E940: EQU $
LX ARGDEM+OPDEM < (X)=FONCTION ARGUMENT.
PSR A < SAVE (A)=MOT0(MATX(NSP1)).
LBY &AFONX < (A)=FONCTION TRANSCODEE DE LA
< FONCTION ARGUMENT.
STA ARGDEM+OPDEM < QUE L'ON MET IMMEDIATEMENT EN
< OPDEM DE LA DEMANDE.
FIMATC:: VAL MOCD < CODE D'UNE FONCTION NE POUVANT
< UTILISER LES CONNEXIONS MATRICIELLES.
CPI FIMATC < EST-CE UNE FONCTION AUTORISEE
< LORS D'1NE CONNEXION MATRICIELLE?
PLR A < RESTAURE (A)=MOT0(MATX(NSP1)).
JE E927 < NON, LA FONCTION ARGUMENT N'EST
< PAS UTILISABLE LORS D'1NE
< CONNEXION MATRICIELLE, ON VA
< DONC RESTAURER LA DEMANDE.
< ON A ICI :
< (A)=MOT0(MATX(NSP1)),
< (B)=MOT1(MATX(NSP1)).
E928: EQU $
DBT < RECHERCHE D'UNE CONNEXION.
< NSP1-->NSPX.
JC E927 < IL N'Y A PAS OU PLUS DE
< CONNEXION MATRICIELLE SUR NSP1.
<
< CAS OU ON A TROUVE UNE CONNEXION MATRICIELLE :
<
RBT L,X < RAZ DE LA CONNEXION DANS A,B.
PSR B < SAUVEGARDE DU MOT1(MATX(NSP1)).
LBI XXNLOC < ARGUMENT D'UN DEMANDE DE LOCATION SANS
< ATTENTE...
BSR ALODCT < LOCATION DE LA DCT(NSP=(X)) SANS ATTENTE
< SI ELLE EST DEJA LOUEE...
CPZR B < ALORS, ON PEUT ???
PLR B < RESTAURE (B)=MOT1(MATX(NSP1)).
IF XXNLOC-K,,XEIF%,
IF ATTENTION : SI UNE 'DCT' TESTEE N'EST PAS
IF LOUABLE, 'B' REVIENT INCHANGE, ET VAUT DONC
IF 'XXNLOC', ET LE TEST EST DONC MAUVAIS !!!
XEIF%: VAL ENDIF
JNE E928XX < NON, ALORS ON NE FAIT RIEN...
XR A,X < (X)=MOT0(MATX(NSP1)), ET
< (A)=NSPX AUQUEL EST CONNECTE
< NSP1 PAR L'INTERMEDIAIRE DE MATX.
STBY NSPTYP < MAJ DE LA DEMANDE ESCLAVE, ELLE
< PORTE MAINTENANT SUR UN DES
< NSPX CONNECTES A NSP1.
< CECI POUR UNE ECRITURE...
BSR ACHAND < ENVOI DE LA DEMANDE D'ECRITURE
< SUR LE NSPX CONNECTE.
XR X,A < RESTAURE (A)=MOT0(MATX(NSP1)),
< ET (X)=NSP COURANT...
WAIT WEIO < ATTENTE DE LA FIN D'ECRITURE.
BSR ADLDCT < DELOCATION DE LA DCT(NSP=(X))...
E928XX: EQU $
STZ ARGDEM+ETADEM < LES CONDITIONS DE RETOURS DES
< NSP CONNECTES MATRICIELLEMENT
< SONT IGNOREES ; ON RESTAURE
< DONC ETADEM A 0, PUISQUE SI
< ON EST ICI, C'EST QUE LE
< SERVICE DEMANDE PAR L'ESCLAVE
< S'EST BIEN TERMINE...
JMP E928 < ALLONS CHERCHER LA CONNEXION
< MATRICIELLE SUIVANTE (SI
< ELLE EXISTE...).
<
< RESTAURATION DE LA DEMANDE ESCLAVE :
<
E927: EQU $
LR Y,A
STBY NSPTYP < RESTAURE NSP1 DANS LA DEMANDE.
SLRS MSPTYP=K
STA ARGDEM+OPDEM < RESTAURE L'OPDEM DE LA DEMANDE
< ET CECI SURTOUT A CAUSE DE
< L''OMOV' DES BUFFERS ET DU
< SWAPPING.
E941: EQU $
PLR B
<
< FIN DU 'SVC' DE CONNEXION MATRICIELLE :
<
SVCMAC: EQU $
PLR A,Y
JMP SVCMTF < VERS LA SORTIE...
USE W,PSTS < POUR REMETTRE COMME C'ETAIT AVANT
< L'INTRODUCTION DE 'SVCMAT'...
PAGE
<
<
< E N T R E E S V C M A I T R E :
<
<
< FONCTION :
< LE 'SVC' MAITRE JUSQU'ALORS INUTILISE DANS
< CMS4 EST INTRODUIT ICI POUR PERMETTRE
< A DES SOUS-PROGRAMMES MAITRES D'ACCEDER
< A CERTAINS SOUS-PROGRAMMES DU SYSTEME
< SANS EN CONNAITRE LE DEPLACEMENT DANS
< LE COMMON...
< MALHEUREUSEMENT LE DEROUTEMENT DES
< INSTRUCTIONS "EXTENSIONS" (PAR EXEMPLE,
< LES INSTRUCTIONS FLOTTANTES LORSQUE LE
< BLOC FLOTTANT EST ABSENT OU EN PANNE) EST
< TELLEMENT MERDIQUE QU'IL SUBSISTE UN ALEAS
< LORSQU'ON RENTRE DANS CETTE SEQUENCE DE
< CODE ; ON NE PEUT JAMAIS ETRE SUR QU'IL
< S'AGIT VRAIMENT D'UN 'SVC' !!!
<
<
< ARGUMENTS :
< (X)=CODE DU 'SVC' ; NE PEUT DONC
< PAS TRANSMETTRE UN AUTRE ARGU-
< MENT QUE LE "NOM" DU SOUS-PRO-
< GRAMME A APPELER.
< LES AUTRES ARGUMENTS SONT SPECIFI-
< QUES DU SOUS-PROGRAMME APPELE.
<
<
< 'SVC' MAITRES RECONNUS :
< SVCM1 : 'RLSE' D'UN SEMAPHORE
< D'ADRESSE DONNEE PAR (A).
< SVCM2 : 'SNAP' LE CONTENU DE 'A'.
< SVCM3 : SIMULATION DU SYSTEME DE VISUALISATION
< VIDEO ACCEDANT A TOUTE LA MEMOIRE DU
< SYSTEME; SES ARGUMENTS SONT LES MOTS
< DU TYPE 'TVXXX' DE LA MEMOIRE DEBANA-
< LISEE ; IL EST APPELE ENTRE AUTRE PAR
< L'IDLE...
< SVCM4 : ALLOCATION D'UN CONTEXTE 'HDC',
< SVCM5 : DESALLOCATION D'UN CONTEXTE 'HDC',
< SVCM6 : EXTENSION DES ADRESSE AU-DELA DE
< 64K DANS LES 'CCB'.
< SVCM7 : DEMANDE DE COPY DU SYSTEME SUR
< LA PREMIERE ZONE ('SCOPY1').
< SVCM8 : DUPLICATION DES DEMANDES RELATIVES
< A UN PERIPHERQUE A L'AIDE DE LA
< MATRICE DES CONNEXIONS.
< SVCM9 : SYNCHRONISATION SUR LES VALEURS
< POSITIVES DU MOT 'CDAG0'.
< SVCM10 : VIDAGE DU BUFFER D'ANTICIPATION
< D'UNE VISU.
<
<
SVCMTR: EQU $
XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES
< EMPILES, CAR ON VA LES COMPTER...
#@PSR C < #SISP CMS5 KREG#
CALL #SISP CMS5 BASE C#
< ON N'EST JAMAIS ASSEZ PRUDENT...
#@PSR A,B,Y < #SISP CMS5 KREG#
#@PSR L,W < #SISP CMS5 KREG#
<*******************************************************************************
XSVCMP:: MOT O < POSITION DU REGISTRE 'P' DANS LA PILE
< 'K' APRES UN 'SVC',
XSVCMX:: MOT '0@@@@-D < DE MEME POUR 'X' LORSQU'IL S'AGIT D'UN
< 'SVC' SIMULE PAR UNE EXTENSION...
<*******************************************************************************
LR K,L < (L)=BASE DE LA PILE 'K',
LY XKREG+XSVCMP,L < (Y)=REGISTRE 'P' DE RETOUR,
LR Y,W < (W)=BASE DU PROGRAMME APPELANT.
LRM B
XWOR%1: VAL $-ZERO
SVC K < (B)=CODE DU 'SVC',
XWOR%1: VAL $-ZERO-XWOR%1 < ET SA LONGUEUR...
LA -XWOR%1,W < (A)=MOT PRECEDENT CELUI QUI EST POINTE
< PAR LE 'P' DE RETOUR (SOIT (W)).
ANDI MOCG < ON ENLEVE LA ZONE ARGUMENT EVENTUELLE,
CPR A,B < EST-CE UN CODE DE 'SVC' ???
JNE Z71Y3 < NON, IL S'AGIT DONC D'UNE EXTENSION...
LA -XWOR%1,W < PEUT-ETRE (EN EFFET, LE DEUXIEME MOT
< D'UNE INSTRUCTION D'EXTENSION PEUT TRES
< BIEN AVOIR L'ALLURE D'UN 'SVC' !!!).
ANDI MOCD < (A)=ZONE ARGUMENT DU 'SVC' PRESUME...
CPR A,X < EST-ELLE EGALE AU CONTENU DE 'X' ???
JE Z71Y1 < OUI, ON ADMET QU'IL S'AGIT D'UN 'SVC',
< BIEN QU'ENCORE UNE FOIS, IL PUISSE
< S'AGIR D'UNE EXTENSION...
<
< CAS D'UNE INSTRUCTION EXTENSION :
<
Z71Y3: EQU $
LX XKREG+XSVCMX,L < (X)=VALEUR DU REGISTRE 'X' AVANT
< LE DEROUTEMENT...
STY XKREG+XSVCMX,L < QUI EST ECRASE DANS LA PILE 'K'
< PAR LE REGISTRE 'P' DE RETOUR...
PLR L,W < ON RESTAURE
PLR A,B,Y < CE QUE L'ON A DETRUIT...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR D'OU PROVIENT LA CAUSE DE CE
< DEROUTEMENT : PAR EXEMPLE BLOC FLOTTANT
< EN PANNE, ET UTILISE PAR 'DKU' ; ON NOTERA
< QUE 'X' EST BON !!!
<
PLR C
ADRI XSVCMX-XSVCMP,K < ON ANNULE L'EMPILEMENT DE 'X' QUI
< A ETE FAIT PAR LA SIMULATION
< DU 'SVC'.
LRM A,B
FLOAT <K<K<K < ON CLEAR (A,B)...
JMP Z71Y2 < ET ON ARRETE ICI...
<
< CAS OU L'ON CROIT AVOIR RECU UN 'SVC' :
<
Z71Y1: EQU $
PLR L,W < ON RESTAURE
PLR A,B,Y < CE QUE L'ON A DETRUIT...
ADRI Z,X < POUR SAUTER LE CODE '00.
XR A,X
WORD SVCMTC < 'CPI MAX...' : VALIDATION DU CODE.
XR A,X
JGE SVCMTS < ERREUR : LA FONCTION N'EXISTE PAS...
ADRP X < BRANCHEMENT EN FONCTION DU CODE.
<
<
< L I S T E D E S S V C M A I T R E S
< R E C O N N U S :
<
<
SVCMTL: EQU $
JMP SVCMTS < ERREUR : LE CODE '00 N'EST PAS RECONNU.
SVCM1:: VAL $-SVCMTL < RELEASE SEMAPHORE D'ADRESSE DONNEE.
JMP SVCMT1 < VERS LE RELEASE...
SVCM2:: VAL $-SVCMTL < 'SNAP' LE CONTENU DE 'A'.
JMP SVCMT2 < VERS LE SNAP...
SVCM3:: VAL $-SVCMTL < SIMULATION TELEVISION NUMERIQUE.
JMP SVCMT3 < VERS LA SIMULATION...
SVCM4:: VAL $-SVCMTL < ALLOCATION D'UN CONTEXTE 'HDC'.
JMP SVCGC < VERS L'ALLOCATION...
SVCM5:: VAL $-SVCMTL < DESALLOCATION D'UN CONTEXTE 'HDC'.
JMP SVCRC < VERS LA DESALLOCATION...
SVCM6:: VAL $-SVCMTL < MISE DE L'EXTENSION-ADRESSE DANS UN 'CCB'
JMP SVCMAE < VERS L'EXTENSION D'ADRESSE...
SVCM7:: VAL $-SVCMTL < COPY DU SYSTEME SUR 'SCOPY1'.
JMP SVCCOP < VERS LA COPIE SYNCHRONE...
SVCM8:: VAL $-SVCMTL < TRAITEMENT DES CONNEXIONS MATRICIELLES.
JMP SVCMAT < VERS L'EXPLOITATION DES CONNEXIONS...
SVCM9:: VAL $-SVCMTL < SYNCHRONISATION SUR (CDAG0)>0.
JMP SVCDAG < VERS LA SYNCHRONISATION...
SVCM10:: VAL $-SVCMTL < VIDAGE DU BUFFER D'ANTICIPATION-VISU.
JMP SVCVBI < VERS LE VIDAGE...
<
< FIN DE LISTE DES CODES RECONNUS :
<
SVCMCP: EQU $
<*******************************************************************************
CPI $-SVCMTL+D < GENERATION DE LA VALIDATION
XWOR%1: VAL '0000000@@@@ < DU CODE AVEC LE MAXIMUM.
<*******************************************************************************
SVCMTC: EQU ZERO+XWOR%1 < C'EST UNE REFERENCE EN AVANT.
$EQU SVCMCP < ON ECRASE LE 'CPI'...
IF $-SVCMTL-NMSVCM,XEIF%,XEIF%,
IF ATTENTION : IL Y A TROP DE 'SVC' MAITRES !!!
XEIF%: VAL ENDIF
PAGE
<
<
< R E L E A S E D ' U N S E M A P H O R E :
<
<
< ARGUMENT :
< (A)=ADRESSE DU SEMAPHORE.
<
<
SVCMT1: EQU $
BSR ARLSE < (A)=ADRESSE DU SEMAPHORE.
JMP SVCMTF < ET C'EST TOUT...
PAGE
<
<
< S N A P ( A ) :
<
<
< ARGUMENT :
< (A)=VALEUR A EDITER.
<
<
XXSNAP:: VAL L < BIT INDICATEUR DE 'SNAP'.
SVCMT2: EQU $
PSR A
SBT XXSNAP < ON FORCE LE BIT0 A 1,
BSR ASNAP < ET ON SNAP...
PLR A
JMP SVCMTF < ET C'EST TOUT...
PAGE
<
<
< C O D E S N O N R E C O N N U S :
<
<
SVCMTS: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
<
< R E T O U R D E S ' S V C ' M A I T R E S :
<
<
SVCMTF: EQU $
PLR C
LXI K < RETOUR AVEC (X)=K...
Z71Y2: EQU $ < RETOUR DES 'SVCM' ET DES EXTENSIONS'...
RSR < ET C'EST TOUT...
PAGE
<
<
< C O P Y S Y N C H R O N E S U R ' S C O P Y 1 ' :
<
<
< FONCTION :
< CE NOUVEAU 'SVC' MAITRE PERMET
< A UNE TACHE QUELCONQUE ('GET' ET
< 'REL' ESPACE DISQUE PAR EXEMPLE)
< DE FORCER UNE COPIE DU SYSTEME
< SUR 'SCOPY1' QUI DEVIENT AINSI
< LA PLUS A JOUR...
<
<
SVCCOP: EQU $
PSR A,B,W < SAUVEGARDE DE 'A', 'B' ET 'W'...
BSR ASMWHO < QUI EST LA ???
IF TYPTS-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
JAE SVCCOS < OK, C'EST UNE TACHE 'SOFTWARE'...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LA COPIE NE PEUT PAS ETRE FAIT
< SOUS LES INTERRUPTIONS, CAR EN
< EFFET CELA PENALISERAIT TROP LE
< TEMPS DE REPONSE DU SYSTEME !!!
<
JMP SVCCOR < ET ON SORT...
SVCCOS: EQU $
LR B,A < (A)='NSP' DE LA TACHE 'SOFTWARE'...
CPI NSPINI < EST-CE LA TACHE D'INITIALISATION ???
JE SVCCOR < OUI, ON NE FAIT PAS DE COPIE (PAR
< EXEMPLE, 'INI' ESSAYE DE RECUPERER LES
< Q-SECTEURS HORS-SERVICE...) ; EN EFFET
< DANS 'INI', TANT QUE L'ETAT DU SYSTEME
< N'A PAS ETE REINITIALISE, ON NE PEUT
< FAIRE DE COPIE...
LA ETASYS
TBT OTOCOP < LA COPIE EST-ELLE ON ???
JC SVCCOR < NON (VACHEMENT DANGEREUX...)...
LRM W < OUI...
WORD COPSYN < (W)=ADRESSE DU "CONTEXTE" DE COPIE...
<
< DEBUT DE PHASE CRITIQUE :
<
RQST SCOPSY-COPSYN,W
<
< GENERATION ET ENVOI DE LA COPY :
<
BSR AACOPY-COPSYN,W < IL FAUT GENERER LA COPY SUR LE PRO-
< CESSEUR MAITRE, CAR SINON, LE BUFFER
< QU'ON ENVERRAIT SUR 'SCOPY1' N'AURAIT
< PAS LA BONNE VALEUR... DE PLUS ON NE
< PEUT ATTENDRE QUE 'PR1' AIT FAIT CETTE
< MISE A JOUR, CAR SEULE UNE ATTENTE ACTIVE
< SERAIT REALISABLE, ET ALORS AUTANT FAIRE
< LA COPIE ICI...
IF COPSYN-DCOPSY,,XEIF%,
ADRI DCOPSY-COPSYN,W < (W)=ADRESSE DE LA DEMANDE DE COPIE,
XEIF%: VAL ENDIF
BSR ACHAND < QUE L'ON ENVOIE,
BSR ACHANW < ET ON ATTEND LA FIN DE L'OPERATION...
IF COPSYN-DCOPSY,,XEIF%,
ADRI COPSYN-DCOPSY,W < ET ON RESTAURE 'W'.
XEIF%: VAL ENDIF
<
< FIN DE PHASE CRITIQUE :
<
LAD SCOPSY-COPSYN,W < (A)=ADRESSE DU SEMAPHORE
BSR ARLSE < D'EXCLUSION QUE L'ON LIBERE...
<
< RETOUR :
<
SVCCOR: EQU $
PLR A,B,W
JMP SVCMTF < ET C'EST TOUT...
PAGE
<
<
< S I M U L A T I O N D ' U N S Y S T E M E D E
< T E L E V I S I O N N U M E R I Q U E A C C E D A N T
< A T O U T E L A M E M O I R E :
<
<
SVCMT3: EQU $
PSR A,B,Y,W < SAUVEGARDE DES REGISTRES DETRUITS,
LA ETASYS < ACCES AUX INDICATEURS DU SYSTEME :
TBT TVEXIS < LA TELEVISION NUMERIQUE EST-ELLE LA ???
JNC Z71XD < NON, ON NE FAIT DONC RIEN...
CALL #SISP CMS5 PSRSLO#
< DE MEME POUR (SLO,SLE)...
LRM B,X,Y,W
WORD XX64K>DADR*LK < (B)=LIMITE INFERIEURE DE LA VALEUR
< DE 'TVMEM1' EXPRIMEE EN 16-MOTS,
WORD TVLIMA*LK < (X)=LONGUEUR EN MOTS D'UNE TRAME, OU
< D'UNE COMPOSANTE.
WORD TVLIMA*LK>DADR < (Y)=LONGUEUR EN 16-MOTS D'UNE TRAME...
WORD ZERO < (W)=BASE DE LA MEMOIRE DEBANALISEE.
LA TVCTRL-ZERO,W < ACCES AUX INDICATEURS DE CONTROLE
< DU SYSTEME DE TELEVISION.
XWOR%1: VAL TVSIMU=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE,
IF XWOR%1,,XEIF%,
SLRS -XWOR%1 < CADRAGE DE 'TVSIMU' A DROITE.
XEIF%: VAL ENDIF
ANDI TVSIMU>XWOR%1 < ACCES A 'TVSIMU'.
JAE Z71XX < CE N'EST PAS LE MODE 'SIMULATION',
< ON NE FAIT RIEN...
PSR W
ADR A,W < ACCES A 'TVMEM1', 'TVMEM2' OU
< 'TVMEM3' SUIVANT 'TVSIMU'.
LA TVMEM-ZERO,W < (A)=ADRESSE 16-MOTS DU RECEPTEUR.
PLR W
CPR B,A < VALIDATION CAPITALE DE CETTE ADRESSE
< DE RECEPTEUR...
JGE Z71XY < OK, L'ADRESSE DU RECEPTEUR EST SUPE-
< RIEURE OU EGALE A LA LIMITE...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< RIEN, ON FAIT COMME SI LE SYSTEME ETAIT OFF...
<
JMP Z71XX < COMME SI LE SYSTEME ETAIT OFF !!!
<
< DEPLACEMENT DE LA ZONE MEMOIRE POINTEE
< PAR 'TVMEME' VERS CELLE POINTEE PAR
< 'TVMEM1' QUI EST LA ZONE VISUALISEE
< PAR LE SYSTEME DE TELEVISION, AFIN
< DE FAIRE CROIRE QUE LA ZONE POINTEE
< PAR 'TVMEME' EST VISUALISEE EN
< DYNAMIQUE !!!
<
Z71XY: EQU $
LR A,B < (A)=FUTUR REGISTRE 'SLO', ADRESSE DU
< RECEPTEUR,
ADR Y,B < (B)=FUTUR REGISTRE 'SLE', ADRESSE DE
< FIN DU RECEPTEUR,
BSR ATWOE < MISE EN PLACE DE LA PROTECTION (SLO,SLE).
LR X,B < (X)=B=LONGUEUR-MOTS D'UNE TRAME,
LAI K < CLEAR POUR FAIRE LA DIVISION :
DV TVNITE-ZERO,W < (A)=NOMBRE DE MOTS ECHANGES LORS
< DE CHAQUE ITERATION.
CPZR B < LE NOMBRE D'ITERATIONS DIVISE-T'IL
< EXACTEMENT LA LONGUEUR D'UNE TRAME ???
JE Z71XZ < OUI, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< RIEN DE SIMPLE, EN EFFET, EN AUGMENTANT LE NOMBRE
< D'ITERATIONS DE 1, ON RISQUERAIT DES ALARMES DE
< MEMOIRE INEXISTANTE !!!
<
JMP Z71XX < ET ON FAIT COMME SI LE SYSTEME
< ETAIT OFF...
Z71XZ: EQU $
LR A,Y < (Y)=NOMBRE DE MOTS POUR CHAQUE ITERATION,
LX TVNITE-ZERO,W < (X)=NOMBRE D'ITERATIONS.
LA TVMEME-ZERO,W < (A)=ADRESSE MOT DE L'EMETTEUR (ZONE A
< VISUALISER EN PSEUDO-DYNAMIQUE),
LBI TVAR0 < (B)=ADRESSE MOT DU RECEPTEUR RELATIVE
< A 'SLO' (ZONE DE VISUALISATION).
Z71XA: EQU $
PSR X < SAUVEGARDE DU DECOMPTE DES ITERATIONS.
LR Y,X < (Y)=X=NOMBRE DE MOTS DEPLACES.
PSR A
LA TVCTRL-ZERO,W < ACCES AUX INDICATEURS DE CONTROLE
< DE LA TELEVISION NUMERIQUE.
XWOR%1: VAL TVIN=K < BIT DE DISCRIMINATION IN/OUT...
TBT NBITMO-B-XWOR%1 < EST-CE UNE ENTREE OU UNE SORTIE ???
PLR A
JNC Z71XB < TVIN=K : OUT...
XR A,B < TVIN=1 : IN, ON PERMUTE LES REGISTRES
< D'ADRESSES 'A' ET 'B'.
JMP Z71XB3 < VERS LE 'MVTM' FONCTION DU SELECTEUR DE
< BOOTSTRAP ET DE 'MAINT'...
Z71XB4: EQU $ < POINT DE RETOUR...
XR A,B < RESTAURATION DES REGISTRES 'A' ET 'B'.
JMP Z71XC < VERS LE BLOC SUIVANT...
Z71XB: EQU $
MVTS < SIMULATION DE LA SORTIE (VISUALISATION).
Z71XC: EQU $
ADR Y,A < PROGRESSION DE L'ADRESSE EMETTRICE,
ADR Y,B < AINSI QUE CELLE RECEPTRICE.
PLR X < RESTAURATION DU DECOMPTE DES ITERATIONS,
JDX Z71XA < ET ON ITERE...
Z71XX: EQU $
< RESTAURATION DE (SLO,SLE) :
CALL #SISP CMS5 PLRSLO#
Z71XD: EQU $ < PAS DE TELEVISION...
PLR A,B,Y,W < ET DES REGISTRES DETRUITS...
SVCMTG: JMP SVCMTF < ET VOILA LE TRAVAIL...
< (ET RELAI)
PAGE
<
<
< A L L O C A T I O N D ' U N C O N T E X T E ' H D C ' :
<
<
< FONCTION :
< CE 'SVC' MAITRE GERE L'ALLOCATION
< D'UN CONTEXTE 'HDC' APPARTENANT AU
< PROCESSEUR 'PROIOP'.
<
<
< ARGUMENT :
< (A)=ADRESSE D'UN 'CCB' (QUI ETRE DE TYPE 'HDC').
<
<
< RESULTAT :
< CCN(CCB) <-- NUMERO DU CONTEXTE ALLOUE.
<
<
SVCGC: EQU $
PSR A,B,Y,W
PSR L
<
< INITIALISATION DES BASES (ON NE
< PEUT PAS FAIRE AUTREMENT QUE
< D'UTILISER TOUTES LES BASES) :
<
LR A,W < (W)=ADRESSE DU 'CCB',
LRM Y,L
WORD PILDKX < (Y)=ADRESSE DU POOL DES CONTEXTES,
WORD SEMDKY < (L)=ADRESSE DU SEMAPHORE DE PROTECTION
< DE CETTE RESSOURCE.
<
< ALLOCATION D'UN JEU DE REGISTRES
< AVEC ATTENTE EVENTUELLE :
<
LA CCBMO1,W
ANDI MTRHDC < NETTOYAGE DU MOT1 DU 'CCB',
LR A,B < ET SAUVEGARDE DANS LE REGISTRE 'B'.
RQST O,L < ALLOCATION D'UN CONTEXTE AVEC ATTENTE
< EVENTUELLE...
PULL < LORSQUE L'ALLOCATION EST POSSIBLE, ON
< OBTIENT DANS 'A', UN NUMERO DE JEU DE
< REGISTRES.
PLR L
JNV SVCGC1 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< EXAMINER LE POOL DES REGISTRES 'HDC' !!!
< ET IL CONVIENT D'ETRE PRUDENT AU REDEMARRAGE !!!
<
SVCGC1: EQU $
ORR B,A < INSERTION DU NUMERO DE CONTEXTE ALLOUE,
STA CCBMO1,W < ET MISE-A-JOUR DU 'CCB'.
PLR A,B,Y,W
JMP SVCMTG < ET C'EST TOUT, ON SORT...
PAGE
<
<
< D E S A L L O C A T I O N D ' U N J E U D E
< R E G I S T R E S ' H D C ' :
<
<
< FONCTION :
< CE 'SVC' MAITRE PERMET DE RENDRE
< AU POOL UN JEU DE REGISTRES 'HDC'.
<
<
< ARGUMENT :
< (A)=ADRESSE DU 'CCB'.
<
<
SVCRC: EQU $
PSR A,Y,L,W
<
< INITIALISATION DES BASES :
<
LR A,W < (W)=ADRESSE DU 'CCB'.
LRM Y,L
WORD PILDKX < (Y)=ADRESSE DU POOL DE CONTEXTES,
WORD SEMDKZ < (L)=ADRESSE DU SEMAPHORE DE PROTECTION
< DE LA RESSOURCE 'HDC'.
<
< RELEASE DU CONTEXTE POSSEDE
< PAR LE 'CCB' ARGUMENT :
<
LA CCBMO1,W
ANDI CCBCCN < (A)=NUMERO DU JEU DE REGISTRES POSSEDES,
PUSH < QUE L'ON REMET DANS LE POOL...
JNV SVCRC1 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< ALLER EXAMINER LE POOL DE REGISTRES !!!
<
SVCRC1: EQU $
LAD O,L < (A)=ADRESSE DU SEMAPHORE DE PROTECTION
< DU POOL DES CONTEXTES 'HDC',
BSR ARLSE < RELEASE DE LA RESSOURCE...
PLR A,Y,L,W
JMP SVCMTG < ET ON SORT...
PAGE
<
<
< E X T E N S I O N D ' A D R E S S E ' C C B ' :
<
<
< FONCTION :
< CETTE ROUTINE RECOIT EN ARGUMENT
< UN 'CCB' ET LE REGISTRE 'SLO' ; A
< PARTIR DE CE REGISTRE 'SLO', ELLE
< DETERMINE L'EXTENSION D'ADRESSE AU
< DELA DE 32K, SACHANT QUE L'ADRESSE
< DEJA PRESENTE DANS LE 'CCB' EST
< ABSOLUE DANS UNE PAGE DE 32K...
< DE PLUS, 'SVCM6' INITIALISE 'CCBMO0'
< ET 'CCBMO2' A L'AIDE DE 'CCBMR0' ET
< 'CCBMR2', CE QUI A L'AVANTAGE DE PER-
< METTRE LE BOUCLAGE SUR UN ECHANGE
< LORS D'UN DEFAUT...
<
<
< NOTA IMPORTANT :
< LORSQU'INITIALEMENT, LE CHAMP 'MAE'
< CONTIENT DEJA QUELQUE CHOSE (C'EST
< PAR EXEMPLE LE CAS, LORS DES TRANSFERTS
< RAPIDES ENTRES 'DKU' ET 'MEMTV'), LE
< 'SVCM6' EST INEFFECTIF...
< IL CONVIENDRA DONC D'INITIALISER
< CORRECTEMENT LE MOT0 D'UN 'CCB' AVANT
< TOUT APPEL DE 'SVCM6' !!!
<
<
< ARGUMENTS :
< (A)=ADRESSE DU 'CCB',
< (SLO)=REGISTRE 'SLO' PERMETTANT LA DETERMINATION
< DE LA PAGE DE 32K A LAQUELLE APPARTIENT
< L'ADRESSE CONTENU DANS LE 'CCB'.
<
<
SVCMAE: EQU $
PSR A,B,X,W
LR A,W < (W)=ADRESSE DU 'CCB'.
<
< INITIALISATION DU 'CCB' :
<
LA CCBMR0,W
STA CCBMO0,W < INDICATEURS ET EXTENSION D'ADRESSE,
LA CCBMR2,W
STA CCBMO2,W < ET PARTIE BASSE DE L'ADRESSE...
<
< VALIDATION RELATIVE A L'INTERDICTION
< D'ECHANGES A CHEVAL SUR DES FRONTIERES
< DE 64K-MOTS :
<
LA CCBMO3,W < (A)=LONGUEUR EN MOTS/OCTETS...
XWOR%1: VAL NOCMO-E?D < ??!??!?!
IF NOCMO-E-D,,XEIF%,
IF ATTENTION : IL FAUT TRAITER SEPAREMENT LES
IF COMPTES DE MOTS ET LES COMPTES D'OCTETS POUR
IF CONNAITRE L'ADRESSE-MOT DU DERNIER MOT CONCERNE
IF PAR L'ECHANGE !!!
XEIF%: VAL ENDIF
ADRI -XWOR%1,A < POUR CALCULER L'ADRESSE DU DERNIER MOT...
LB CCBMO0,W < (B)=MOT0 (INDICATEURS) :
TBT NBITMO+BCCBBM < EST-CE UN CANAL MOTS OU OCTETS ???
JNC SVCMAJ < DE MOTS...
SLRS NOCMO=K < D'OCTETS, CONVERSION EN UN NOMBRE
< DE MOTS...
SVCMAJ: EQU $
AD CCBMO2,W < (A)=ADRESSE DU DERNIER MOT CONCERNE PAR
< L'ECHANGE...
JNC SVCMAK < OK, IL N'EST PAS A CHEVAL SUR UNE
< FRONTIERE DE 64K...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< MODIFIER LE SYSTEME AFIN DE FAIRE
< DISPARAITRE CET ECHANGE QUI VA ETRE
< EXECUTE "MODULO" 64K ; POUR REDEMARRER,
< IL SERAIT PEUT-ETRE PRUDENT DE REDUIRE
< ARTIFICIELLEMENT LA LONGUEUR DE L'ECHANGE
< ('CCBMO3'), AFIN DE RESTER DANS UNE PAGE
< DE 64K !!!
<
SVCMAK: EQU $
<
< GENERATION DE L'EXTENSION D'ADRESSE
< ('CCBMAE') SI ELLE N'EST DEJA PRESENTE :
<
LA CCBMO0,W
ANDI CCBMAE < (A)=CHAMP 'MAE' DU MOT0 DU 'CCB' :
JANE SVCMAI < IL CONTIENT DEJA UNE EXTENSION, ON
< NE FAIT RIEN...
RDOE < (A)='SLO' COURANT,
LBI K < ET ON SE MOQUE DE 'SLE'...
XWOR%1: VAL XX64K/XPESC=K < PERMET DE PASSER D'UN NUMERO DE PAGE
< DE 64K A UN NUMERO DE PAGE DE 32K...
SCRD NBITMO+XSLO32+XWOR%1
< (B)=NUMERO DE PAGE DE 64K, ET
< BIT0(A)=NUMERO (0/1) DE PAGE DE 32K DANS
< LA PAGE DE 64K (B)...
JNC SVCMAF < BIT0(A)=0 : ON EST DANS LA PAGE 0 DE 32K,
< DE LA PAGE DE 64K COURANTE,
< L'ADRESSE MEMOIRE CONTENUE
< DANS LE 'CCB' EST BONNE...
XWOR%1: VAL XPESC*LK=K < POUR RECUPERER LE NUMERO DE PAGE DE 32K
< A L'INTERIEUR DE LA PAGE DE 64K...
SLRS XWOR%1 < CLEAR PARTIEL
SLLS XWOR%1 < DU REGISTRE 'A'...
LR A,X < (X)=COMPLEMENT DE L'ADRESSE DEJA CONTENUE
< DANS LE 'CCB',
AND CCBMO2,W < VALIDATION DE L'ADRESSE MEMOIRE :
JAE SVCMAG < OK, LE COMPLEMENT ETAIT DEJA NUL...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE POURQUOI LE BIT0
< DE L'ADRESSE CONTENUE DANS LE
< MOT2 DU 'CCB' EST DEJA A 1 ;
< VOIR SI LA DEMANDE D'ENTREE-SORTIE
< CORRESPONDANTE EST EN ADRESSE-MOTS
< OU OCTETS, OU S'IL NE S'AGIRAIT PAS
< D'UNE OPERATION 'CDA' !!!
<
SVCMAG: EQU $
LA CCBMO2,W
ORR X,A < ON RAJOUTE LE NUMERO (0/1) DE PAGE DE
< 32K (DANS LA PAGE DE 64K COURANTE),
STA CCBMO2,W < ET ON MET A JOUR L'ADRESSE MEMOIRE
< DANS LE 'CCB'...
SVCMAF: EQU $
LX CCBMO0,W < (X)=MOT0 DU 'CCB', POUR LEQUEL LE
< LE CHAMP 'MAE' EST FORCEMENT NUL...
XWOR%1: VAL CCBMAE=K
SLLD NBITMO+XWOR%1 < (A)=NUMERO DE PAGE DE 64K,
EORR X,A < QUE L'ON INSERE DANS LE CHAMP 'CCBMAE',
< (PAR 'EORR' POUR UNE VALIDATION UN
< PETIT PLUS LOIN...)
STA CCBMO0,W < ET ON MET A JOUR LE 'CCB'...
ANDR X,A < ON TENTE DE RECALCULER LE MOT0 DU 'CCB',
< SANS LE CHAMP 'CCBMAE',
CPR A,X < EST-ON RETOMBE SUR NOS PIEDS ???
JE SVCMAH < OUI, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT-IL SE FAIT
< QU'IL Y A DEBORDEMENT DU CHAMP 'CCBMAE' !!!
<
SVCMAH: EQU $
SVCMAI: EQU $ < CAS, OU 'MAE' CONTIENT DEJA UNE
< EXTENSION D'ADRESSE...
PLR A,B,X,W
JMP SVCMTG < ET C'EST TOUT...
<
<
< E X T E N S I O N S D ' A D R E S S E S
< C L A S S I Q U E S :
<
<
XWOR%1: VAL -NBITMO < POUR CONNAITRE LES POIDS FORTS DE
< L'ADRESSE DE BASE DU SYSTEME...
XWOR%2: VAL O>XWOR%1 < POIDS FORTS DE DEBUT.
XWOR%4: VAL CCBMAE=K
XEXA0:: VAL XWOR%2>XWOR%4 < EXTENSION D'ADRESSE PAGE 0...
IF XEXA0-K,,XEIF%,
IF ATTENTION : LES 'STZ' D'INITIALISATION DES
IF MOTS 0 DES 'CCB' SONT IDIOTS !!!
XEIF%: VAL ENDIF
XWOR%1: VAL -NBITMO-DADR < POUR CONNAITRE LES POIDS FORTS DE
< L'ADRESSE DE 'MEMTV'...
XWOR%2: VAL MEMTV0>XWOR%1 < POIDS FORTS DE DEBUT,
XWOR%3: VAL MEMTVE>XWOR%1 < POIDS FORTS DE FIN...
IF XWOR%2-XWOR%3,,XEIF%,
IF ATTENTION : LES ADRESSES DE 'MEMTV' SONT INCOHERENTES !!!
XEIF%: VAL ENDIF
XWOR%4: VAL CCBMAE=K
XEXATV:: VAL XWOR%2>XWOR%4 < EXTENSION D'ADRESSE 'MEMTV'...
PAGE
<
<
< S U I T E D E L A T E L E V I S I O N N U M E R I Q U E :
<
<
< NOTA :
< CE MODULE EST ICI ENCORE
< ET TOUJOURS A CAUSE DES SAUTS
< SUPERIEURS A 128 MOTS !!!
<
<
Z71XB3: EQU $
HORROM:: VAL XXBPTR < POSITION DU SELECTEUR DE BOOTSTRAP
< UTILISEE POUR FORCER OU RAZER LE
< BIT 'MAINT'...
IF HORROM-XXBROM,XEIF%,,XEIF%
IF ATTENTION : LORSQUE LE PUPITRE EST A L'ETAT "LOCK",
IF L'INSTRUCTION "RDSI" DONNE COMME POSITION DU
IF SELECTEUR DE BOOTSTRAP "XXBROM", DONC PB !!!
XEIF%: VAL ENDIF
PSR Y < SAUVEGARDE DU NOMBRE DE MOTS DEPLACES
< PAR LE 'MTVM'...
PSR A < SAUVEGARDE DE L'ADRESSE RELATIVE A 'SLO'.
RDSI < LECTURE DE L'IDENTIFICATION DU PROCESSEUR
ANDI MSBOOT < DONT ON NE GARDE QUE LE SELECTEUR
< DE BOOTSTRAP,
XWOR%1: VAL MSBOOT=K
SLRS XWOR%1 < QUE L'ON CADRE A DROITE...
LR A,Y < ET QUE L'ON SAUVEGARDE DANS 'Y'...
CPI HORROM < EST-CE UNE DEMANDE DE 'MAINT' ???
JNE Z71XB1 < NON, PAS DE 'MAINT'...
BSR ASMMK < OUI, ON DEMANDE UNE INHIBITION DU TEST
< DES PARITES MEMOIRE, ET POUR CE FAIRE
< M A S Q U A G E I N T E R R U P T I O N
< AFIN QUE SEUL LE 'MVTM' SOIT EXECUTE AVEC
< LE BIT 'MAINT' POSITIONNE...
LAI COSBT?MAINT=FMASK(K=FCINST
SST < ET ON FORCE 'MAINT' QUI INHIBE LES TESTS
< SUR LES PARITES MEMOIRE !!!
Z71XB1: EQU $
PLR A < RESTAURE :
< (A)=ADRESSE RELATIVE A 'SLO'...
MVTM < ET ON SIMULE L'ENTREE...
PSR A < RE-SAUVEGARDE DE L'ADRESSE RELATIVE A
< 'SLO'...
LR Y,A < (A)="SELECTEUR DE BOOTSTRAP"...
CPI HORROM < A-T'ON DEMANDE 'MAINT' ???
JNE Z71XB2 < NON, RIEN A FAIRE...
LA MEMV < OUI,
TBT MEMXXX < ETAIT'IL DEJA POSITIONNE ???
JC Z71XB5 < OUI (VOIR L'HORLOGE), ON LE LAISSE...
LAI COSBT?MAINT=FMASK(K=FCINST
RST < NON, IL FAUT EFFACER 'MAINT', ET
Z71XB5: EQU $
BSR ASMDK < D E M A S Q U A G E ...
Z71XB2: EQU $
PLR A < RESTAURE :
< (A)=ADRESSE RELATIVE A 'SLO',
PLR Y < (Y)=NOMBRE DE MOTS DEPLACES PAR 'MVTM'.
JMP Z71XB4 < VERS LE TRONC COMMUN 'MVTM'/'MVTS'...
PAGE
<
<
< E X T E N S I O N D E S ' C D A ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST DESTINE
< A REMPLACER LES ANCIENS 'WOE'
< QUI PERMETTAIENT DE SE POSITIONNER
< SUR 'MEMTV' (C'EST-A-DIRE LA 'CDAI') ;
< DORENAVANT, TOUTES CES OPERATIONS
< PEUVENT ATTEINDRE L'ENSEMBLE DES
< 'CDA' DU SYSTEME ; 'HDLDKU' RECOIT
< A CET EFFET, DANS LE CAS DE CES
< FONCTIONS, NON PAS (SLO,SLE) DE
< L'UTILISATEUR DANS LES REGISTRES
< (SLO,SLE), MAIS (CDESCO,CDESCE) QUI
< DEFINISSENT LA 'CDA' COURANTE...
<
<
< ARGUMENTS :
< (A,B)=REGISTRES 'SLO' ET 'SLE'
< DEMANDES SUR L'ANCIENNE 'CDAI'...
<
<
TWOE: EQU $
PSR X,Y
PSR A,B < SAUVEGARDE INDEPENDANTE DES REGISTRES
< (SLO,SLE) DEMANDES.
<
< EXAMEM DE (SLE)-(SLO) :
<
LR B,Y < (Y)=(SLE),
SBR A,Y < (Y)=(SLE)-(SLO), SOIT TAILLE DE LA ZONE
< DE LA 'CDAI' DEMANDEE...
SLLS NBITMO-XSLO32
SLRS NBITMO-XSLO32 < ON ELIMINE LE NUMERO DE PAGE DE 32K,
LR A,X < D'OU :
< (X)=TRANSLATION DANS LA 'CDA'...
<
< ACCES A (SLO,SLE) COURANTS :
<
RDOE < (A,B)=(SLO,SLE) COURANTS,
ADR X,A < QUE L'ON TRANSLATE...
< (A)=(SLO) COURANT TRANSLATE,
ADR B,X < (X)=(SLE) COURANT TRANSLATE,
LR A,B < AFIN DE RECALCULER LE 'SLE' COURANT :
ADR Y,B < (B)=(SLE)=(SLO COURANT)+(SLE ARGUMENT)
< -(SLO ARGUMENT),
CPR X,B < ET COMPARAISON ENTRE LE 'SLE' COURANT
< DANS 'X' ET LE 'SLE' DEMANDE APRES
< TRANSLATION DANS 'B'...
JLE TWOE1 < OK, (B)<=(X), CE QUI SIGNIFIE QUE LA
< TAILLE DEMANDEE N'EST PAS SUPERIEURE
< A LA TAILLE COURANTE...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< IL NE S'AGIT PAS REELLEMENT D'UNE
< ERREUR SYSTEME : IL SUFFIT PAR EXEMPLE
< QUE LA 'CDA' COURANTE SOIT UNE 'CDAP',
< MAIS, JE LA METS AFIN D'EN ETRE AVERTI...
<
TWOE3: EQU $
PLR A,B < ON RESTAURE (SLO,SLE) ARGUMENTS,
PSR A,B < QUE L'ON RE-SAUVEGARDE IMMEDIATEMENT...
<
< MODIFICATION DE (SLO,SLE) COURANTS :
<
TWOE1: EQU $
PSR A < SAUVEGARDE DE 'SLO',
LR B,A < ON FAIT : (SLO) <-- (SLE),
WOE < ET L'ON SE PLACE AINSI EN HAUT DE LA
< 'CDA' DONT L'AMPLITUDE A ETE TROUVEE
< CORRECTE...
LAI COSBT?DEBUG=FMASK(K=FCINST
BSR ASMMK < MASQUAGE DES INTERRUPTIONS CAR ON VA
< PASSER EN MODE 'DEBUG' :
SST < ET VOILA, ON PASSE EN MODE 'DEBUG',
< AFIN DE VOIR SI LA 'CDA' CHOISIE EST
< VALIDE (EXISTE PHYSIQUEMENT...).
LYI O < (Y)=ADRESSE DU PREMIER MOT A TESTER
< DANS (SLO,SLE),
DBP < ALORS, RECHERCHE DES MEMOIRES INEXIS-
< TANTES EN QUEUE DE LA 'CDA' :
PLR A < RESTAURE :
< (A)='SLO' REEL DE LA 'CDA'...
JV TWOE2 < ET BIEN, LA 'CDA' CHOISIE N'EXISTE PAS...
WOE < LES DERNIERS MOTS TESTES ONT L'AIR
< D'ETRE LA ; POSITIONNEMENT DE (SLO,SLE)
< DE LA 'CDA' :
< - COURANTE, LORSQUE L'AMPLITUDE EST
< CORRECTE (ET PEUT-ETRE UNE REDUCTION DE
< LONGUEUR : C'EST LA LONGUEUR ARGUMENT
< QUI L'EMPORTE),
< - ARGUMENT, SI L'AMPLITUDE DE LA 'CDA'
< COURANTE DANS (SLO,SLE) EST INSUFFISANTE,
< OU BIEN, SI LA 'CDA' QU'ON A MIS EN PLACE
< N'EXISTE PAS PHYSIQUEMENT.
DBP < RECHERCHE DES MEMOIRES EXISTANTES EN
< TETE DE LA 'CDA' :
JV TWOE2 < ET BIEN LA 'CDA' CHOISIE A UNE QUEUE
< QUI EXISTE, ET UNE TETE QUI N'EXISTE
< PAS !!!
IF LSPACE/XLSTAC-2,,XEIF%,
IF ATTENTION : LES 2 TESTS 'DBP' DE RECHERCHE DES
IF MEMOIRES INEXISTANTES SONT TROP NOMBREUX SI
IF LES STACKS MEMOIRE SONT PLUS GRANDS, OU PAS
IF ASSEZ NOMBREUX S'ILS SONT PLUS PETITS !!!
XEIF%: VAL ENDIF
LAI COSBT?DEBUG=FMASK(K=FCINST
RST < OUFFF, LA 'CDA' QU'ON A CHOISI EXISTE,
< ET (SLO,SLE) SONT POSITIONNES, ON PEUT
< DONC ANNULER LE MODE 'DEBUG'...
BSR ASMDK < PUIS DEMASQUER LES INTERRUPTIONS...
<
< SORTIE ET RESTAURATIONS :
<
PLR A,B < RESTAURATION DES ARGUMENTS...
PLR X,Y
RSR
<
< TRAITEMENT DES MEMOIRES
< INEXISTANTES DANS UNE 'CDA' :
<
TWOE2: EQU $
LAI COSBT?DEBUG=FMASK(K=FCINST
RST < ON COMMENCE PAR ANNULER LE MODE 'DEBUG',
BSR ASMDK < PUIS ON DEMASQUE LES INTERRUPTIONS, ET
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< EN FAIT CE N'EST PAS REELLEMENT
< UNE ERREUR SYSTEME : LA 'CDA' ADRESSEE
< PEUT PHYSIQUEMENT N'EST PAS SUFFISANTE.
< DANS CE CAS, EN GENERAL, C'EST LA 'CDA'
< ARGUMENT (A,B) QUI SERA POSITIONNEE EN
< 'TWOE3', OU BIEN... EN TOUT CAS, ON EXAMI-
< NERA ATTENTIVEMENT (SLO,SLE) !!!
<
JMP TWOE3 < ON VA FAIRE : (SLO,SLE) <-- (A,B)...
< MAIS ATTENTION, ON PEUT AINSI RENTRER
< DANS UNE BOUCLE SANS FIN, SI LA 'CDA'
< ARGUMENT (A,B) N'EXISTE PAS ('CBM' DIS-
< JOINTS,...) !!!
PAGE
CALL #SISP CMS5 DOL1# < A CAUSE DE LA REFERENCE EN
< AVANT SUR 'DCTSVC'
<
<
< E N T R E E S V C E S C L A V E :
<
<
< PHILOSOPHIE :
< LE PROBLEME EST DELICAT, EN EFFET IL
< FAUT EVITER DE FAIRE TRAVAILLER LE
< MONITEUR DANS LA PILE DE L'ESCLAVE.
< LA SEULE SOLUTION POUR SAUVEGARDER
< LES REGISTRES DE L'ESCLAVE (...),
< EST DE PASSER PAR L'INTERMEDIAIRE
< D'UNE TACHE SOFT INTERMEDIAIRE
< D'OU LA CREATION DE 'RUNSVC'...
<
<
< ARGUMENT :
< (A)=ADRESSE TRANSLATABLE DES ARGUMENTS.
< 'X' EST DESTRUCTIBLE (LA VALEUR
< FOURNIE PAR LE FIRMWARE EST
< IGNOREE).
<
<
< RESULTATS :
< A INCHANGE !!!
< (X)=0 SI EXECUTION DU SERVICE OK,
< =CODE-ERREUR SINON...
< CODES-CONDITIONS POSITIONNES TEL QUE :
< L'ESCLAVE PUISSE ECRIRE LE PROGRAMME SUIVANT :
<
< LAD XXXX
< SVC 0
< JE <SI OK>,
< JNE <SI ERREUR>.
<
<
SSVC: WORD DCTSVC+LSIT < @ DU SEMAPHORE DE SYNCHRONISATION
< DE SVCESC ET DE RUNESC.
SVCESC: EQU $
LR C,X < SAUVEGARDE REENTRANTE DU REGISTRE
< C DE L'ESCLAVE DANS X (INUTILISE).
DOLLAR: LRP C < MAJ DE C POUR ACCES A SSVC.
RLSE &SSVC-DOLLAR,C < SYNCHRONISATION SVCESC ET RUNSVC
< NOTA : ON N'UTILISE PAS LE S/P 'ARLSE'
< PARCE QUE:
< A NE DOIT PAS ETRE ECRASE
< C NE BASE PAS LE COMMON DU SYSTEME
< ET, ON EST SUR QUE LES IT NE SONT
< PAS MASQUEES
LR X,C < RESTAURE LE REGISTRE C DE
< L'ESCLAVE.
LXI K < AINSI, LORS DES APPELS DU !DEBUG QUI
< POURRAIENT SUIVRE, ON AURA UN CONTENU
< DU REGISTRE 'X' QUI SERA PROPRE...
<
< D E S A C T I V A T I O N D E L ' E S C L A V E :
<
QUIT < DESARMEMENT DU NIVEAU ESCLAVE.
RETSVC: EQU $ < VALEUR DU REGISTRE P(ESCLAVE) LORSQU'IL
< A EXECUTE L'INSTRUCTION 'SVC' ; CETTE
< VALEUR EST UTILISE PAR LE MODULE 'MASTER'
< DU 'CCI'...
<
< NOTA :
< LE QUIT, POUR FAIRE UN CHANGEMENT DE
< CONTEXTE CORRECT, DOIT PASSER AVANT
< LE RAZ DE DCTSY(NSPACT) DE 'RUNSVC',
< EN CONSEQUENCE, LE NIVEAU ESCLAVE DOIT
< ETRE PLUS PRIORITAIRE QUE LE NIVEAU
< DE TRAITEMENT DES SVC :
< NSPACT<NSPSVC...
<
<
< R E A C T I V A T I O N P A R S C H E D U L E R :
<
CPZR X < POUR PERMETTRE UN TEST JE/JNE
< AU RETOUR DU SVC PAR L'ESCLAVE.
RSV < RETOUR AU PROGRAMME ESCLAVE...
CALL #SISP CMS5 DOL2# < ON PEUT REPARTIR EN MEMOIRE HAUTE
PAGE
<
<
< T R A C E D U S Y S T E M E :
<
<
< PHILOSOPHIE :
< LE BUT DE LA TRACE EST DE CONSERVER UN HISTORIQUE
< POUR CELA, ET A CHAQUE FOIS QUE C'EST
< POSSIBLE, A CHAQUE CHANGEMENT DE TACHE, A
< CHAQUE MISE EN FILE D'ATTENTE, A CHAQUE
< IT, ON MET UN CERTAIN NBRE D'INFORMATIONS
< DANS UNE PILE CIRCULAIRE, OU TRACE QUI MEMOIRISE
< DONC LES DERNIERS INSTANTS DU SYSTEME (...).
<
<
< FORMAT :
< LA TRACE EST UNE PILE CIRCULAIRE DOUBLE-MOTS,
< DONT L'INDEX EST 'TRACEX' ; LE FORMAT DE CHAQUE
< ENTREE EST LE SUIVANT :
<
< 1- APPEL POUR IT :
< MOT0=SOUS-NIVEAU D'IT (DISTINGUE 3 & 7),
< MOT1=K.
< 2- APPEL PAR LES HANDLERS :
< MOT0=NSPTYP (ACTIF/TERMIN),
< MOT1=ADRESSE DE LA DEMANDE.
< 3- APPEL PAR CHAND :
< BIT0(MOT0)=K : ENTRY DE CHAND,
< =1 : SORTIE DE CHAND,
XTRACH:: VAL BITSIG < BIT INDICATEUR IN/OUT DE 'CHAND'.
< BITS1-15(MOT0)=NSP DE LA DEMANDE,
< MOT1=ADRESSE DE LA DEMANDE.
< 4- APPEL PAR IDLE :
< MOT0= SI >'32 : FREQUENCE DONNEE A L'HOR-
< LOGE PAR IDLE,
< = SI <='32 : NBRE DE DEMANDES EN
< ATTENTE SUR LE DKS OU
< SUR LE SCHEDULER.
< MOT1='FFFF (-1).
< 5- APPEL POUR DUMP :
< BIT0(MOT0)=1,
< MOT1=K.
< 6- APPEL POUR CHANGEMENT DE CONTEXTE :CF.
< ENTRY/RETURN-HANDLER AVEC BIT11(NSPTYP)=
< BIT15(NSPTYP)=1.
<
<
< ARGUMENTS :
< (A)=MOT0,
< (W)=MOT1.
<
<
STRACE: EQU $
IF XTROFF-K,XEIF%,,
IF ATTENTION : LES TESTS SUIVANTS VONT MERDER !!!
XEIF%: VAL ENDIF
IF XBTROF-BITSIG,,XEIF%,
IF ATTENTION : LES TEST D'INHIBITION VONT MERDER...
XEIF%: VAL ENDIF
CPZ SAVEX < LA TRACE EST-ELLE INHIBEE ????
JL Z710 < OUI, RIEN A FAIRE.
PSR X
XR A,L
BSR ASMPUO < AFFICHAGE DE LA BASE L DE
< L'APPELANT AU PUPITRE A CHAQUE
< APPEL DE 'TRACE' AFIN DE RENDRE
< LE T1600 SEMBLABLE AUX VRAIS
< ORDINATEURS...
XR A,L
<
< CAS DE LA TRACE NON INHIBEE :
<
BSR ASMMK < MASQUAGE GENERAL DES IT
< EN EFFET LA MISE A JOUR DE LA
< TRACE EST STRICTEMENT IN-
< INTERRUPTIBLE, ET LA SEULE
< FACON DE LA PROTEGER DES PHASES
< CRITIQUES EST LE MASCAGE DES IT...
LX TRACEX < RECUPERATION DE L'INDEX DE TRACE.
STA &TRACE < MISE EN TRACE DE 'A'.
XR A,W
ADRI I,X < MOT SUIVANT DU DOUBLE-MOT COURANT.
STA &TRACE < MISE EN TRACE DE 'W' (DANS 'A'...).
XR A,W < RESTAURE 'A' ET 'W'.
ADRI I,X < L'INDEX DE TRACE A PROGRESSE DE 2.
IF UTRACE-2,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%: VAL ENDIF
XR A,X
ANDI UTRACE*LTRACE-N < PROGRESSION MODULO, LA TRACE
< ETANT CIRCULAIRE.
XWOR%1: VAL UTRACE*LTRACE
XWOR%2: VAL XWOR%1=K
IF BIT>XWOR%2-XWOR%1,,XEIF%,
IF ATTENTION : LA LONGUEUR EN MOTS DE LA TRACE
IF DOIT ETRE UNE PUISSANCE DE 2 SI L'ON VEUT
IF CALCULER LE MODULO AVEC UN .AND. !!!
XEIF%: VAL ENDIF
XR A,X < RESTAURE 'A'.
STX TRACEX < SAVE INDEX DE TRACE.
BSR ASMDK < DEMASQUAGE GENERAL DES IT
PLR X
Z710: EQU $ < SORTIE 'TRACE INHIBEE'.
RSR
<
<
< S N A P T E M P S R E E L :
<
<
< ARGUMENT :
< (A)=CONTENU A SNAPER, SON BIT 0 EST A 0
< OU A 1 SUIVANT QUE L'ON SNAPE UN PSEUDO
< NIVEAU D'IT (CF. VISU1 A VISU6) OU PAS...
<
<
SNAP: EQU $
PSR W
CALL #SISP CMS5 W TRACE# < RAZ DE 'W' POUR FAIRE
< ASSIMILER CET APPEL A UN APPEL
< D'INTERRUPTION POUR LA TRACE.
BSR ATRACE < TRACE DE (A).
PLR W
RSR
PAGE
<
<
< T R A C E U R D E T O U S L E S
< C H A N G E M E N T S D E C O N T E X T E S :
<
<
< FONCTION :
< CETTE TACHE OCCUPE LE NIVEAU 0, POUR
< L'ACTIVER, IL SUFFIT D'APPELER LE DEBUG,
< QUI RAZERA RSTF. AINSI DES QU'UNE TACHE
< ACTIVABLE DE MSP SERA ACTIVABLE, ET SI
< SON BIT DE RSTF=K, ON APPELERA
< 'CHECK' QUI TRACERA CETTE ELECTION.
< LA TRACE CONTIENT L'ELECTION SOUS LA
< FORME 'ENTRY IN HDL' AVEC L'OCTET1
< DU MOT0='EF ; LE MOT1 CONTENANAT LE P
< LORS DE L'ELECTION.
<
<
CALL #SISP CMS5 CHECK#
<
< ' D C T ' S I M P L I F I E E :
<
CALL #SISP CMS5 DOL1#
DCTCHK: EQU $
WORD K;K;K;K;COM+DEPCS;NIL;NIL;PILCHK;CHECK;SMST;SO;SE
CALL #SISP CMS5 DOL2#
PILCHK: EQU $-DEPILE
XWPILE: VAL 12
CALL #SISP CMS5 GENPIL2#
CALL #SISP CMS5 CHECK#
<
< C H E C K A N D T R A C E :
<
CHECK: EQU $
BSR ASMMK <<<< MASQUAGE GENERAL DES IT...
LXI LOFDMS
E961: EQU $
STZ &ARSTF < RAZ DE RSTF A CHAQUE APPEL
< DE CHECK, AFIN D'EVITER DES
< DE PERDRE DES CHANGEMENTS
< DE CONTEXTE.
JDX E961
LX XXNL-ZERO,W < (X)=(NL), SOIT LE NIVEAU DE LA
< TACHE ELUE.
ADRI -NSNSP0,X < (X)=NSP DE LA TACHE ELUE.
BSR ACADCT < (L)=@DCT TACHE ELUE.
LY RP+XXPSTD,L < (Y)=REGISTRE P DE LA TACHE ELUE.
SWBR X,A
ORI MOCD < ON GENERE DANS A LA CONFIGURATION
< SUIVANTE :
< OCTET0=NSP TACHE ELUE,
< OCTET1='FF (BIT11=BIT15=1).
XR Y,W < (Y)=K, (W)=P(TACHE ELUE).
BSR ATRACE < TRACE DE L'ELECTION.
LR Y,W < RESTAURE (W)=K.
ADRI NSNSP0,X < RESTAURE (X)=NUMERO DE LA
< TACHE ELUE.
LYI FONSB1 < FONCTION SET BIT A 1.
LAD ARSTF < (A)=@ DU RELAI D'ACCES A RSTF.
BSR ATMOBT < MISE A 1 DU BIT DE LA TACHE
< ELUE DANS RSTF.
LXI NTS0
BSR ATMOBT < ET OUI, SUR LE SOLAR, CONTRAIREMENT
< AU T1600, IL FAUT PENSER A LA TACHE
< DE 'CHECK AND TRACE'...
BSR ASMDK <<<< DEMASQUAGE GENERAL DES IT...
QUIT < ACTIVATION DE LA TACHE ELUE.
JMP CHECK
PAGE
IF OACTIV-EXIST,XEIF%8,,XEIF%8
<
<
< V I S U A L I S A T E U R D E T R A F F I C :
<
<
< FONCTION :
< LORSQUE SON ADRESSE EST IMPAIRE
< (CONTROLEE PAR LE BIT 'XACTIV'),
< CE SOUS-PROGRAMME PERMET DE VISUA-
< LISER SUR L'IMAGEUR MOYENNE DEFINI-
< TION LE TRAFFIC INTER-TACHES, NOTEES
< ALORS :
<
< EMETTEUR --> RECEPTEUR.
<
< LES ABSCISSES REPERENT LES EMETTEURS,
< ET LES ORDONNEES LES RECEPTEURS.
<
<
< ARGUMENTS :
< (X)=(RECEPTEUR/EMETTEUR),
< (Y)=NIVEAU DE GRIS A ATTRIBUER AU POINT.
XNGIN:: VAL XXN255 < NIVEAU DE VISUALISATION DE L'ETABLISSE-
< MENT DE LA CONNEXION EMETTEUR -->
< RECEPTEUR DANS 'CHAND'.
XNGOUT:: VAL XXNOIR+I+I+I+I < NIVEAU DE VISUALISATION DE LA DECONNEXION
< LORS DU 'REVDEM' FACULTATIF DE 'HANDLR'.
< EN PRENANT UN NIVEAU DIFFERENT DU
< NOIR, ON PEUT AINSI MEMORISER SUR
< L'ECRAN TOUTES LES CONNEXIONS QUI ONT
< EU LIEU...
<
<
< NOTA IMPORTANT :
< POUR NE PAS MANGER TROP
< D'ESPACE DE PILE, LES REGIS-
< TRES 'A', 'X' ET 'Y' SONT
< DETRUITS, ET DOIVENT DONC
< ETRE SAUVEGARDES PAR L'APPELANT !!!
<
<
<*******************************************************************************
XWOR%1: VAL $-ZERO
XWOR%2: VAL -BIT
XWOR%3: VAL XWOR%1>XWOR%2>BIT
IF XWOR%1-XWOR%3,,XEIF%,
NOP < SI LE "$" COURANT EST IMPAIR, ON
< SE PLACE A L'ADRESSE PAIRE IMMEDIATEMENT
< SUIVANTE...
XEIF%: VAL ENDIF
ACTIV: EQU $
<*******************************************************************************
<
< POINT D'ENTREE INACTIF :
<
JMP ACTIV1 < ON SORT IMMEDIATEMENT...
<
< POINT D'ENTREE ACTIF :
<
BSR ASMMK < ET MASQUAGE DES INTERRUPTIONS, LE POSI-
< TIONNEMENT DES DIFFERENTS REGISTRES NE
< POUVANT ETRE INTERROMPU...
< NOTA IMPORTANT : POUR REDUIRE AU MAXIMUM
< LA PHASE MASQUEE, IL SERAIT PREFERABLE
< D'EMPILER D'ABORD LES REGISTRES, PUIS DE
< MASQUER LES INTERRUPTIONS... MALHEUREU-
< SEMENT, LA PILE DES 'HLLSGF' EST IMPLAN-
< TEE DANS UN BUFFER, ET SA TAILLE NE
< PEUT CROITRE A LOISIR ; OR LE SOUS-
< PROGRAMME 'SMMK' MANGE BEAUCOUP DE PILE
< (IL APPELLE LUI-MEME 'SMWHO'...) ; D'OU
< SON APPEL AVANT LES 'PSR' !!!
PSR B < SAUVEGARDES...
CALL #SISP CMS5 PSRSLO#
<
< DEFINITION DES FACTEURS D'ECHELLES :
<
NTRN
XWOR%1: VAL XC512/LSEMR/NBITMO
TRN
XWOR%2: VAL CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1
XACTIE:: VAL COSBT?XWOR%2=FMASK(K=FCINST
< POUR PASSER DU NUMERO D'EMETTEUR A UNE
< ABSCISSE.
NTRN
XWOR%1: VAL XL512/LSEMR/NBITMO
TRN
XWOR%2: VAL CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1
XACTIR: VAL COSBT?XWOR%2=FMASK(K=FCINST
< POUR PASSER DU NUMERO DE RECEPTEUR A
< UNE ORDONNEE.
<
< POSITIONNEMENT SUR LES
< REGISTRES DE COMMANDE :
<
LRM A,B
XWOR%1: VAL LK>DADR*TMCDAJ=K
XWOR%2: VAL BIT>XWOR%1*PAGE68
WORD MCDAJO+XWOR%2 < FUTUR 'SLO',
WORD MCDAJE+XWOR%2 < FUTUR 'SLE'.
WOE < ET POSITIONNEMENT SUR LA PAGE DE LA
< 'CDAJ' CONTENANT LES REGISTRES...
<
< ENVOI DU NIVEAU DE GRIS :
<
LR Y,A < (A)=NIVEAU DE GRIS DEMANDE,
LRM Y
WORD XRNIVO < (Y)=ADRESSE DU REGISTRE DE NIVEAU DE
< GRIS DANS LA PAGE 'PAGE68',
STAR < ET ENVOI DU NIVEAU DE GRIS...
<
< RECUPERATION DU COUPLE
< (EMETTEUR/RECEPTEUR) :
<
LR X,A < (A)=(RECEPTEUR/EMETTEUR),
IF TEMP68-K,XEIF%,XEIF%,
LXI -TEMP68
BSR ADODO < ET ON ATTEND UN PETIT PEU...
LR A,X < ET RESTAURE 'X'...
XEIF%: VAL ENDIF
SLRS MOCG=K < DECONCATENATION,
SLLS XACTIR=K < ET CONVERSION EN UNE ORDONNEE...
LR A,B < (B)=COORDONNEE 'Y' DU RECEPTEUR.
LR X,A
ANDI MOCD < DECONCATENATION,
SLLS XACTIE=K < ET CONVERSION EN UNE ABSCISSE...
LR A,X < (X)=COORDONNEE 'X' DE L'EMETTEUR.
<
< ENVOI DE L'EMETTEUR :
<
SLRS MOCG=K < RECUPERATION DE LA PARTIE HAUTE,
EORI XLINV < INVERSION DE LA LOGIQUE,
LRM Y
WORD XRXH
STAR < ENVOI DE LA PARTIE HAUTE DE 'X',
LR X,A
ANDI MOCD < RECUPERATION DE LA PARTIE BASSE,
EORI XLINV < INVERSION DE LA LOGIQUE,
ADRI XRXL-XRXH,Y
IF TEMP68-K,XEIF%,XEIF%,
LXI -TEMP68
BSR ADODO < ET ON ATTEND UN PETIT PEU...
XEIF%: VAL ENDIF
STAR < ENVOI DE LA PARTIE BASSE DE 'X'.
IF TEMP68-K,XEIF%,XEIF%,
LXI -TEMP68
BSR ADODO < ET ON ATTEND UN PETIT PEU...
XEIF%: VAL ENDIF
<
< ENVOI DU RECEPTEUR :
<
LR B,A
SLRS MOCG=K < RECUPERATION DE LA PARTIE HAUTE,
EORI XLINV < INVERSION DE LA LOGIQUE,
LRM Y
WORD XRYH
STAR < ENVOI DE LA PARTIE HAUTE DE 'Y',
IF TEMP68-K,XEIF%,XEIF%,
LXI -TEMP68
BSR ADODO < ET ON ATTEND UN PETIT PEU...
XEIF%: VAL ENDIF
LR B,A
ANDI MOCD < RECUPERATION DE LA PARTIE BASSE,
EORI XLINV < INVERSION DE LA LOGIQUE,
ADRI XRYL-XRYH,Y
STAR < ENVOI DE LA PARTIE BASSE DE 'Y'.
IF TEMP68-K,XEIF%,XEIF%,
LXI -TEMP68
BSR ADODO < ET ON ATTEND UN PETIT PEU...
XEIF%: VAL ENDIF
<
< TRACE DU "POINT DE TRAFFIC" :
<
LAI XRASTR < (A)=FONCTION DE MISE EN 'RASTER'...
LRM Y
WORD XRCMD < (Y)=ADRESSE DU REGISTRE DE COMMANDE,
STAR < TRACE DU POINT DE COORDONNEES (X,B).
<
< RESTAURATIONS DIVERSES :
<
CALL #SISP CMS5 PLRSLO#
PLR B
BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS (VOIR LE
< NOTA IMPORTANT RELATIF A 'SMMK' !!!)...
<
< ET SORTIE :
<
ACTIV1: EQU $ < (CAS DU MODE INACTIF...)
RSR
XEIF%8: VAL ENDIF
PAGE
<
<
< D E C O N C A T E N A T I O N D ' U N
< N U M E R O D E B I T :
<
<
< ARGUMENT :
< - (A)=NUMERO DU BIT.
< RESULTATS :
< - (A)=NUMERO DU MOT AUQUEL APPARTIENT LE BIT / A 0,
< - (B)=NUMERO DU BIT DANS LE MOT / A 0.
<
<
SEPAR: EQU $
LBI K < PAR PRUDENCE...
SCRS NBITMO=K
SCLD NBITMO=K < (B)=RANG DU BIT DANS L'ENTREE.
SLRS NBITMO=K < (A)=NUMERO DE L'ENTREE,
< (B)=NUMERO DU BIT DANS L'ENTREE.
RSR
PAGE
<
<
< O P E R A T I O N S S U R B I T D A N S
< U N E T A B L E :
<
<
< ARGUMENTS :
< - (A)=ADRESSE RELAI INDIRECT-INDEXE (/IJIJDX) VERS TABLE.
< - (X)=RANG DU BIT DANS LA TABLE / A 0.
< - (Y)=FONCTION DEMANDEE :
< FONTB - (Y)=K : TEST BIT,
< FONSB1 - (Y)=1 : SET BIT A 1,
< FONRB0 - (Y)=2 : RESET BIT A 0,
< FONIB - (Y)=3 : INVERSE BIT.
< FONRB - (Y)=4 : RESET BIT A 0, SANS VERIF,
< FONSB - (Y)=5 : SET BIT A 1, SANS VERIF.
<
<
< RESULTAT :
< DANS LE CAS DE 'FONTB', LES INDI-
< CATEURS SONT POSITIONNES COMME
< APRES UN 'TBT'.
<
<
TMOBT: EQU $ < TEST AND MODIFY BIT IN TABLE.
PSR A,B,X < A CAUSE DU MICRO-CANAL.
PSR Y,W < A CAUSE DU MICRO-CANAL.
LR A,W < W POINTE SUR LE RELAI DE LA TABLE.
LR X,A < (A)=RANG DU BIT DANS LA TABLE.
BSR ASEPAR < DECONCATENATION DU NUMERO DE BIT.
< ON A ICI
< - (A)=NUMERO DE L'ENTREE,
< - (B)=NUMERO DU BIT DANS L'ENTREE
< CES 2 NUMEROS SONT / A 0.
ADRI IJIJDX,A < (A)=NUMERO DE L'ENTREE / A 1.
LR A,X < (X)=NUMERO DE L'ENTREE DANS LA TABLE
< PAR RAPPORT A 1...
LA &O,W < ACCES A L'ENTREE DANS LA TABLE.
XR Y,X < (X)=FONCTION ; (Y)=NUMERO DE L'ENTREE.
< ON A DONC ICI :
< - (B)=RANG DU BIT / A 0 DANS L'ENTREE,
< - (X)=FONCTION DEMANDEE,
< - (Y)=NUMERO DE L'ENTREE / A 1 DANS LA TABLE.
BR &ATMOB < REALISATION DE LA FONCTION.
CALL #SISP CMS5 DOL1#
IF FONTB-K,,XEIF%,
IF ATTENTION : LES FONCTIONS SONT MAUVAISES !!!
XEIF%: VAL ENDIF
TTMOB: WORD TMOBT0;TMOBT1;TMOBT2;TMOBT3;TMOBT4;TMOBT5
CALL #SISP CMS5 DOL2#
<
< TEST D'UN BIT :
<
TMOBT0: EQU $
LR B,X < (X)=RANG DU BIT.
TBT L,X
E164: EQU $
PLR Y,W < A CAUSE DU MICRO-CANAL.
PLR A,B,X < A CAUSE DU MICRO-CANAL.
RSR < CARY POSITIONNE SI 'TBT'.
<
< SET A 1 D'UN BIT :
<
TMOBT1: EQU $
LR B,X < (X)=RANG DU BIT.
TBT L,X < TEST DU BIT A METTRE A 1.
JNC SYSR01 < OK, IL EST A 0.
BSR ASYSER < E R R E U R S Y S T E M E ...
SYSR01: EQU $
SBT L,X < MISE A 1 DU BIT.
E165: EQU $
LR Y,X < (X)=NUMERO DE L'ENTREE DANS LA TABLE.
STA &O,W < MISE A JOUR DE LA TABLE.
JMP E164
<
< RESET A 0 D'1N BIT :
<
TMOBT2: EQU $
LR B,X < (X)=RANG DU BIT.
TBT L,X < TEST DU BIT A METTRE A 0.
JC SYSR02 < OK, IL A 1.
BSR ASYSER < E R R E U R S Y S T E M E ...
SYSR02: EQU $
RBT L,X
JMP E165
<
< INVERSION D'UN BIT :
<
TMOBT3: EQU $
LR B,X < (X)=RANG DU BIT.
IBT L,X
JMP E165
<
< RESET A 0 SANS VERIF :
<
TMOBT4: EQU $
LR B,X < (X)=RANG DU BIT.
RBT L,X < RESET.
JMP E165
<
< SET A 1 SANS VERIF :
<
TMOBT5: EQU $
LR B,X < (X)=RANG DU BIT.
SBT L,X
JMP E165
PAGE
<
<
< R E C H E R C H E D ' U N B I T
< A 1 D A N S U N E T A B L E :
< ( E T S O N R A Z.. )
<
<
< FORMAT DES TABLES UTILISEES :
< 1 - LA TABLE DOIT ETRE RELAYEE PAR
< UN RELAI INDIRECT INDEXE PAR RAPPORT
< A 'IJIJDX' ;
< 2 - LE MOT LA PRECEDANT (DONC D'INDEX
< EGAL A '0) DOIT CONTENIR LE NOMBRE
< DE BITS (SOIT N) UTILES DE LA TABLE ;
< LE RESULTAT DOIT DONC ETRE CONTENU
< ENTRE 0 ET N-1 :
< 0<= (A) <= N-1.
<
<
< ARGUMENTS :
< - (A)=ADRESSE RELAI INDIRECT-INDEX (/IJIJDX) VERS TABLE.
< - (X)=NUMERO DE LA 1ERE ENTREE (MOT) A TESTER DANS LA
< TABLE (ON TESTERA LES ENTREES DE (X) A 1, CE QUI PERM
< PERMET D'OPTIMISER EVENTUELLEMENT LE PARCOURS
< DE LA TABLE).
<
<
< RESULTATS :
< - SI (X)#0 : (A)=NUMERO DU 1ER BIT A 1 DANS LA TABLE
< (NUMERO PAR RAPPORT A 0),
< - SI (X)#0 : (X)=NUMERO / A 1 DE L'ENTREE DANS LAQUELLE
< ON A TROUVE UN BIT A 1. ON PEUT L'UTILISER AU
< RETOUR DANS LE CADRE D'UNE OPTIMISATION DU
< PARCOURS DE LA TABLE.
< - SI (X)#0 : RAZ DU 1ER BIT A 1 ,
<
< - SI (X)=K : AUCUN BIT N'EST A 1 DANS CETTE TABLE.
<
<
< A T T E N T I O N :
< DETRUIT 'A' ET 'X' !!!
<
<
SOBT: EQU $ < SURCH ONE BIT IN TABLE.
PSR W < SAVE BAS W.
LR A,W < L'ACCES A LA TABLE SE FAIT
< D'UNE MANIERE REENTRANTE EN
< TRAVAILLNAT SUR LE RELAI DE
< L'APPELANT.
< (W)=ADRESSE DU RELAI DE LA TABLE.
E160: EQU $
LA &O,W < ACCES A UNE ENTREE DE LA TABLE.
JANE E161 < CA Y EST, ON A TROUVE AU MOINS
< 1 BIT A 1.
JDX E160 < ET NON, PASSONS A L'ENTREE
< SUIVANTE.
<
< CAS OU TOUS LES BITS SONT A 0,
< ON S'EN VA AVEC (X)=0 :
<
E162: EQU $
PLR W < RESTAURE W.
CPZR X < POUR TEST EN RETOUR...
RSR
<
< CAS OU ON A TROUVE AU MOINS UN BIT A 1 :
<
E161: EQU $
PSR B
LR X,B < (B)=NUMERO DE L'ENTREE PAR RAPPORT A 1.
DBT < (X)=RANG DU 1ER BIT A 1 DANS L'ENTREE.
RBT L,X < RAZ DE CE BIT.
XR B,X < (B)=RANG DU BIT DANS L'ENTREE.
STA &O,W < MAJ DE LA TABLE APRES LE RAZ DU
< 1ER BIT A 1.
LR X,A < (A)=NUMERO DE L'ENTREE PAR RAPPORT A 1.
ADRI -IJIJDX,A < (A)=NUMERO DE L'ENTREE PAR RAPPORT A 0.
SLLS NBITMO=K < CONVERSION EN UN NUMERO
< DE BIT PAR RAPPORT A 0.
ADR B,A < (A)=NUMERO DU 1ER BIT QUI ETAIT
< A 1 PAR RAPPORT A 0.
PLR B
JAGE E162XX < OK, LE NUMERO EST POSITIF OU NUL...
BSR ASYSER < E R R E U R S Y S T E M E ...
E162XX: EQU $
PSR X
LXI IJIJDX-P < (X)=INDEX DU MOT PRECEDANT LA TABLE.
CP &O,W < LE BIT TROUVE APPARTIENT-IL BIEN
< A LA TABLE ARGUMENT ???
JL E162X < OUI, C'EST BON...
BSR ASYSER < E R R E U R S Y S T E M E ...
E162X: EQU $
PLR X
JMP E162 < RAPPEL : DANS X ON A UN NUMERO
< PAR RAPPORT A 1, DONC POSITIF.
PAGE
<
<
< A C C E S A U N O C T E T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME TRES INTER-
< RESSANT PERMET D'ATTEINDRE UN OCTET
< QUELCONQUE DE 0 A 64K...
<
<
< ARGUMENTS :
< (W)=ADRESSE-MOT DE LA TABLE A LAQUELLE APPARTIENT
< L'OCTET,
< (X)=INDEX-OCTET DE L'OCTET.
< (ATTENTION : CET INDEX EST CONSIDERE COMME
< POSITIF SUR 16 BITS : CF LE SLRS...)
<
<
< RESULTAT :
< (A)=L'OCTET BIEN CADRE...
<
<
GETOC: EQU $
PSR X,W
LR X,A < (A)=INDEX DE L'OCTET.
SLRS NOCMO=K < (A)=INDEX MOT DE L'OCTET, ET
< CARY=1 S'IL S'AGIT DE L'OCTET
< DROIT DU MOT.
LXI MOCD=K < OCTET DROIT A PRIORI...
JC GETOC1 < ET OUI...
LXI MOCG=K < ET NON, OCTET GAUCHE...
GETOC1: EQU $
ADR A,W < (W)=ADRESSE-MOT DE L'OCTET,
LA O,W < QUE L'ON ACCEDE,
SLRS L,X < PUIS QUE L'ON CADRE,
ANDI MOCD < ET QUE L'ON ISOLE...
PLR X,W
RSR < ET C'EST TOUT...
PAGE
<
<
< S O U S - P R O G R A M M E D E S I M U L A T I O N
< D E S I N S T R U C T I O N S D E L O A D / S T O R E
< D E M O T S O U D ' O C T E T S P O U R
< E X E C U T I O N A U - D E L A D E 3 2 K :
<
<
< FONCTION :
< IL EXISTE DANS LE SYSTEME CMS5
< EN DE NOMBREUX ENDROITS DES LOADS
< ET DES STORES INDIRECTS (SOUVENT INDEXES)
< ACCEDANT A L'ESPACE UTILISATEUR LORS
< DES ENTREES-SORTIES ('SGN', 'VIS',...).
< L'UTILISATION DE CES INSTRUCTIONS IMPLI-
< QUE LA PRESENCE DES ZONES UTILISATEURS
< DANS LES 32 PREMIERS K-MOTS DE LA
< MEMOIRE.
< ON IMPLEMENTE DONC DES APPELS A CE
< SOUS-PROGRAMME DEVANT CHACUNE DES
< INSTRUCTIONS EN CAUSE ; SI LA ZONE
< UTILISATEUR EST DANS LA PAGE 0 DE 32K
< CES INSTRUCTIONS S'EXECUTENT TELLES
< QUELLES (VIA LA MICRO-PROGRAMMATION) ;
< PAR CONTRE AU-DELA DE LA PAGE 0, LEUR
< EXECUTION EST SIMULEE PAR CE SOUS-
< PROGRAMME, CE QUI N'EST PAS UNE MINCE
< AFFAIRE (EN PARTICULIER, SI ON REGARDE
< LA FACON DONT LES 'LA', 'LB',... SONT
< CODES, ON A DES SURPRISES...).
<
<
< ARGUMENTS :
< (SLO,SLE)=DONNE LA PAGE DE 32K QUE
< REFERENCE L'INSTRUCTION A
< SIMULER.
< (A), (B), (X), (Y)=REGISTRE A CHARGER
< OU A RANGER.
< ((P)+DEPILE)=INSTRUCTION A EXECUTER.
<
<
SIMUL: EQU $
XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES
< EMPILES.
#@PSR A,B < #SISP CMS5 KREG#
RDOE < ACCES A LA PAGE DE 32K COURANTE :
IF SO-K,,XEIF%,
IF ATTENTION : LE TEST SUR LA PAGE 0 EST MAUVAIS !!!
XEIF%: VAL ENDIF
JAE SIMULU < ON EST DANS LA PAGE 0, L'INSTRUCTION
< ARGUMENT PEUT DONC S'EXECUTER TELLE
< QUELLE...
CALL #SISP CMS5 RST# < LECTURE DE 'ST' (ET DONC DE 'V' ET 'C')
#@PSR A,X,Y < #SISP CMS5 KREG#
#@PSR L,W < #SISP CMS5 KREG#
XKREG: VAL -XKREG < NOMBRE DE REGISTRES EMPILES A L'ENTREE,
< NON COMPRIS LE REGISTRE 'P' DE RETOUR.
<
< CAS DES PAGES DIFFERENTES DE LA PAGE 0 :
<
LR K,W < 'W' BASE LA PILE :
LA -XKREG-D+DEPILE,W
< (A)=REGISTRE 'P' DE RETOUR,
DO D
IC -XKREG-D+DEPILE,W
< AFIN DE SAUTER L'INSTRUCTION ARGUMENT
< AU RETOUR DU 'BSR'...
LR A,W < 'W' BASE L'INSTRUCTION ARGUMENT,
LB O,W < QUE L'ON MET DANS 'B' :
< (B)=INSTRUCTION ARGUMENT A EXECUTER.
<
< FORMAT DE LA PILE :
<
<*******************************************************************************
SIMULP:: VAL XKREG+D-DEPILE < REGISTRE 'P' DE RETOUR,
<*******************************************************************************
SIMULA:: VAL SIMULP-D < REGISTRE 'A' D'APPEL,
SIMULB:: VAL SIMULA-D < REGISTRE 'B' D'APPEL,
SIMUST:: VAL SIMULB-D < REGISTRE 'ST' D'APPEL (POUR 'V' ET 'C').
SIMULX:: VAL SIMUST-D < REGISTRE 'X' D'APPEL,
SIMULY:: VAL SIMULX-D < REGISTRE 'Y' D'APPEL,
SIMULL:: VAL SIMULY-D < BASE 'L' D'APPEL,
SIMULW:: VAL SIMULL-D < BASE 'W' D'APPEL.
XWOR%1: VAL '0@@@@
IF XWOR%1-K,,XEIF%,
IF ATTENTION : LE FORMAT DE LA PILE EST MAUVAIS !!!
XEIF%: VAL ENDIF
LR K,W < ET 'W' BASE LA PILE DE NOUVEAU...
<
< FORMAT D'UNE INSTRUCTION
< A REFERENCE MEMOIRE :
<
FIBASE:: VAL 'C000 < BASE D'ADRESSAGE 'C', 'L' OU 'W' :
FIBASC:: VAL 1 < 'C',
FIBASL:: VAL FIBASC+RL-RC < 'L',
FIBASW:: VAL FIBASL+RW-RL < 'W'.
FIIND:: VAL '2000 < INDICATEUR D'INDIRECTION.
FICODE:: VAL '1F00 < CODE OPERATION (VOIR LA LISTE 'XOYYY').
FIDEPL:: VAL '00FF < DEPLACEMENT PAR RAPPORT A LA BASE.
XWOR%1: VAL FIBASE?FIIND?FICODE?FIDEPL
XWOR%2: VAL FIBASE)FIIND)FICODE)FIDEPL
IF XWOR%1-XWOR%2,,XEIF%,
IF ATTENTION : IL Y A DES RECOUVREMENTS MALHEUREUX !!!
XEIF%: VAL ENDIF
<
< LISTE DES CODES OPERATIONS RECONNUS :
<
XWOR%1: VAL FICODE=K
XWOR%1: VAL -XWOR%1
SIMUL5: EQU $
<*******************************************************************************
LBY &O,C < CODE DU 'LBY'.
XOLBY:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
STBY &O,C < CODE DU 'STBY'.
XOSTBY:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
STY &O,C < CODE DU 'STY'.
XOSTY:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
STX &O,C < CODE DU 'STX'.
XOSTX:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
STB &O,C < CODE DU 'STB'.
XOSTB:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
STA &O,C < CODE DU 'STA'.
XOSTA:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
LA &O,C < CODE DU 'LA'.
XOLA:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
LX &O,C < CODE DU 'LX'.
XOLX:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
LY &O,C < CODE DU 'LY'.
XOLY:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
<*******************************************************************************
LB &O,C < CODE DU 'LB'.
XOLB:: VAL '0000000@@@@(FICODE>XWOR%1
<*******************************************************************************
$EQU SIMUL5 < ANNULATION DU CODE GENERE...
<
< RECUPERATION DE LA BASE D'ADRESSAGE :
<
XWOR%1: VAL FIIND=K
XWOR%2: VAL NBITMO-B-XWOR%1
IF BIT>XWOR%1-FIIND,,XEIF%,
IF ATTENTION : 'FIIND' DOIT ETRE UN BIT !!!
XEIF%: VAL ENDIF
TBT NBITMO+XWOR%2 < Y-A-T'IL BIEN INDIRECTION ???
JC SIMUL2 < OK, IL Y A INDIRECTION...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< RAJOUTER DANS LE SIMULATEUR LES
< INSTRUCTIONS SANS INDIRECTION !!!
< MAIS ATTENTION A LA SORTIE, CAR
< L'INSTRUCTION ARGUMENT VA ETRE
< EXECUTEE TELLE QUELLE...
<
JMP SIMULZ < ATTENTION A LA SORTIE...
SIMUL2: EQU $
XWOR%1: VAL FIBASE=K
XWOR%1: VAL -XWOR%1
LR B,A < (A)=INSTRUCTION ARGUMENT,
SLRS -XWOR%1 < CADRAGE A DROITE DE LA BASE,
ANDI FIBASE>XWOR%1 < (A)=BASE D'ADRESSAGE :
LR C,X < (X)=BASE 'C' A PRIORI...
CPI FIBASC < EST-CE LA BASE 'C' ???
JE SIMUL3 < OUI...
LX -SIMULL,W < NON, (X)=BASE 'L' A PRIORI...
CPI FIBASL < EST-CE LA BASE 'L' ???
JE SIMUL3 < OUI...
LX -SIMULW,W < NON, (X)=BASE 'W' A PRIORI...
CPI FIBASW < ES-CE LA BASE 'W' ???
JE SIMUL3 < OUI, OK ON A UNE DES 3 BASES...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR QUELLE EST CETTE INSTRUCTION
< SANS BASE, ET EVENTUELLEMENT LA
< RAJOUTER DANS LA SIMULATION !!!
< MAIS ATTENTION A LA SORTIE, CAR
< L'INSTRUCTION ARGUMENT VA ETRE
< EXECUTEE TELLE QUELLE...
<
JMP SIMULZ < VERS LA SORTIE...
SIMUL3: EQU $
LR X,L < (L)=VALEUR DE LA BASE D'ADRESSAGE DE
< L'INSTRUCTION ARGUMENT LORS DE
< L'APPEL...
LAI FIDEPL
ANDR B,A
XWOR%1: VAL FIDEPL=K
IF XWOR%1-K,,XEIF%,
SLRS XWOR%1 < (A)=DEPLACEMENT SUR UN OCTET,
XEIF%: VAL ENDIF
XWOR%1: VAL -XWOR%1
XWOR%2: VAL FIDEPL>XWOR%1)MMOT=K-XWOR%1
XWOR%2: VAL NBITMO-XWOR%2
SLLS XWOR%2
SARS XWOR%2 < (A)=DEPLACEMENT PAR RAPPORT A LA BASE
< 'L' ETENDU SUR 16 BITS...
ADR A,L < (L)=ADRESSE DU RELAI UTILISE PAR
< L'INSTRUCTION ARGUMENT...
LA O,L < (A)=RELAI...
TBT BITX < CE RELAI EST-IL BIEN INDEXE ???
RBT BITX < NON, A PRIORI,
LXI K < (X)=INDEX NUL...
JNC SIMUL4 < EFFECTIVEMENT, IL N'Y A PAS INDEXATION...
LX -SIMULX,W < IL Y A INDEXATION :
< (X)=REGISTRE 'X' D'APPEL...
SIMUL4: EQU $
LR A,Y < (Y)=ADRESSE DU BUFFER (OU AUTRE ZONE
< MEMOIRE) POINTE PAR LE RELAI LUI-
< MEME POINTE PAR 'L'...
<
< RECUPERATION DU CODE OPERATION :
<
XWOR%1: VAL FICODE=K
XWOR%1: VAL -XWOR%1
LR B,A < (A)=INSTRUCTION ARGUMENT,
SLRS -XWOR%1 < CADRAGE A DROITE DU CODE OPERATION,
ANDI FICODE>XWOR%1 < (A)=CODE OPERATION JUSTIFIE A DROITE,
< SANS SA BASE, NI INDIRECTION...
LBI K < CLEAR DE 'B' A CAUSE DE DECALAGES
< DOUBLES QUI VONT SUIVRE.
<
< CAS DES INSTRUCTIONS SUR OCTETS A PRIORI :
<
IF XOLBY-K,XEIF%,,XEIF%
JAE SIMULE < CAS DU 'LBY'.
XEIF%: VAL ENDIF
IF XOLBY-K,,XEIF%,
CPI XOLBY
JE SIMUL < CAS DU 'LBY'.
XEIF%: VAL ENDIF
CPI XOSTBY
JE SIMULF < CAS DU 'STBY'.
<
< CAS DES INSTRUCTIONS SUR MOTS A PRIORI :
<
ADR X,Y < A PRIORI, IL S'AGIT D'INSTRUCTIONS SUR
< MOT ; ON AJOUTE L'INDEX (X) A L'ADRESSE
< DU BUFFER :
< (Y)=ADRESSE DU MOT CHARGE OU RANGE PAR
< L'INSTRUCTION ARGUMENT.
CPI XOLA
JE SIMULG < CAS DU 'LA'.
CPI XOSTA
JE SIMULH < CAS DU 'STA'.
CPI XOLB
JE SIMULI < CAS DU 'LB'.
CPI XOSTB
JE SIMULJ < CAS DU 'STB'.
CPI XOLX
JE SIMULK < CAS DU 'LX'.
CPI XOSTX
JE SIMULM < CAS DU 'STX'.
CPI XOLY
JE SIMULN < CAS DU 'LY'.
CPI XOSTY
JE SIMULO < CAS DU 'STY'.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< RAJOUTER L'INSTRUCTION MANQUANTE !!!
< MAIS ATTENTION, ON SORT IMMEDIATEMENT,
< ET L'INSTRUCTION ARGUMENT EST DONC
< EXECUTEE TELLE QUELLE...
<
JMP SIMULZ < VERS LA SORTIE...
<
< SIMULATION DU 'LA' :
<
SIMULG: EQU $
LAR < (A)=MOT POINTE PAR (Y)+(SLO),
STA -SIMULA,W < QUE L'ON MET DANS LA PILE...
JMP SIMULV < VERS LA SORTIE...
<
< SIMULATION DU 'LB' :
<
SIMULI: EQU $
LAR < (A)=MOT POINTE PAR (Y)+(SLO),
STA -SIMULB,W < QUE L'ON MET DANS LA PILE...
JMP SIMULV < VERS LA SORTIE...
<
< SIMULATION DU 'LX' :
<
SIMULK: EQU $
LAR < (A)=MOT POINTE PAR (Y)+(SLO),
STA -SIMULX,W < QUE L'ON MET DANS LA PILE...
JMP SIMULV < VERS LA SORTIE...
<
< SIMULATION DU 'LY' :
<
SIMULN: EQU $
LAR < (A)=MOT POINTE PAR (Y)+(SLO),
STA -SIMULY,W < QUE L'ON MET DANS LA PILE...
JMP SIMULV < VERS LA SORTIE...
<
< SIMULATION DU 'STA' :
<
SIMULH: EQU $
LA -SIMULA,W < (A)=REGISTRE 'A' D'APPEL,
JMP SIMULQ < VERS LE RANGEMENT...
<
< SIMULATION DU 'STB' :
<
SIMULJ: EQU $
LA -SIMULB,W < (A)=REGISTRE 'B' D'APPEL,
JMP SIMULQ < VERS LE RANGEMENT...
<
< SIMULATION DU 'STX' :
<
SIMULM: EQU $
LA -SIMULX,W < (A)=REGISTRE 'X' D'APPEL,
JMP SIMULQ < VERS LE RANGEMENT...
<
< SIMULATION DU 'STY' :
<
SIMULO: EQU $
LA -SIMULY,W < (A)=REGISTRE 'Y' D'APPEL,
<
< EXECUTION DES 'STORE' EN MEMOIRE :
<
SIMULQ: EQU $
STAR < RANGEMENT DE (A) EN (Y)+(SLO).
<
< FIN DES INSTRUCTIONS SUR MOTS ET DE 'LBY' :
<
SIMULV: EQU $
<
< SORTIE DE LA SIMULATION :
<
SIMUL1: EQU $
PLR L,W
PLR A,X,Y
LRM B
XWOR%1: VAL COSBT?V=FMASK(K=FCINST
XWOR%1: VAL COSBT?C=FMASK(K?XWOR%1=FCINST
WORD XWOR%1 < (B)=MASQUE DES INDICATEURS 'V' ET 'C'.
XR A,B < (A)=MASQUE DE 'V' ET 'C', ET
< (B)=VALEUR D'APPEL DU REGISTRE 'ST',
ANDR A,B < (B)=VALEUR DE 'V' ET 'C' LORS DE
< L'APPEL DE 'SIMUL'.
RST < CLEAR DE 'V' ET 'C',
LR B,A < ON NE GARDE DANS 'A' QUE 'V' ET 'C'
< DU REGISTRE 'ST' AVEC LEUR VALEUR LORS
< DE L'APPEL DE 'SIMUL'...
SST < RESTAURATION DE 'V' ET 'C'...
SIMULU: EQU $ < SORTIE RELATIVE AUX INSTRUCTIONS REFE-
< RENCANT LA PAGE 0...
PLR A,B
RSR < RETOUR A L'INSTRUCTION SUIVANTE LORS-
< QU'ON EST EN PAGE 0, OU A CELLE D'APRES
< DANS LES AUTRES CAS...
<
< SORTIE POUR 'SYSER' :
<
SIMULZ: EQU $
DO D
DC -XKREG-D+DEPILE,W
< AFIN D'EXECUTER NORMALEMENT L'INSTRUC-
< TION ARGUMENT...
JMP SIMUL1 < VERS LA SORTIE...
<
< SIMULATION DU 'LBY' :
<
SIMULE: EQU $
LR X,A < (A)=INDEX OCTET :
SLRD NOCMO=K < (A)=INDEX MOT, ET
< BIT DE SIGNE(B)=NUMERO DE L'OCTET...
ADR A,Y < (Y)=ADRESSE DU MOT CONTENANT L'OCTET
< CHERCHE...
LAR < (A)=MOT CONTENANT L'OCTET CHERCHE.
IF NOCMO=K-B-BITSIG,,XEIF%,
IF ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZR B < ALORS, OCTET DROIT OU GAUCHE ???
JL SIMULR < DROIT : IL EST BIEN POSITIONNE...
SLRS MOCG=K < GAUCHE, ON LE CADRE A DROITE...
SIMULR: EQU $
ANDI MOCD < (A)=OCTET DESIRE,
STA -SIMULA,W < QUE L'ON RANGE DANS LA PILE...
JMP SIMULV < ET C'EST TOUT...
<
< SIMULATION DU 'STBY' :
<
SIMULF: EQU $
LR X,A < (A)=INDEX OCTET,
SLRD NOCMO=K < (A)=INDEX MOT, ET
< BIT DE SIGNE DE (B)=NUMERO DE L'OCTET
< DESIRE.
ADR A,Y < (Y)=ADRESSE DU MOT CONTENANT L'OCTET
< A METTRE A JOUR.
XWOR%1: VAL MOCD
LA -SIMULA,W < RECUPERATION DE 'A' ARGUMENT :
ANDI XWOR%1 < (A)=OCTET A RANGER EN MEMOIRE,
ORR A,B < QUE L'ON SAUVEGARDE DANS 'B' A COTE DU
< NUMERO DE L'OCTET (0/1).
LAR < (A)=MOT POINTE PAR (Y)+(SLO),
CPZR B < ALORS, OCTET DROIT OU GAUCHE ???
JL SIMULS < DROIT...
SWBR A,A < GAUCHE, ON LE MET A DROITE...
SIMULS: EQU $
ANDI XWOR%1)MMOT < ON NETTOIE L'OCTET DROIT,
RBT NOCMO=K+NBITMO-B
< ET ON SUPPRIME LE NUMERO DE L'OCTET...
ORR B,A < ET ON INJECTE L'OCTET ARGUMENT DANS
< L'OCTET DROIT (POUR LE MOMENT...),
JL SIMULT < ET BIEN C'EST BON, C'EST LE DROIT...
SWBR A,A < POUR LE GAUCHE, ON REPERMUTE...
SIMULT: EQU $
JMP SIMULQ < VERS LA MISE A JOUR DU MOT MEMOIRE
< D'ADRESSE ((Y)+(SLO) AVEC (A).
PAGE
<
<
< C O N V E R S I O N H E X A D E C I M A L
< A S C I E N B I N A I R E :
<
<
< FONCTION :
< CETTE ROUTINE CONVERTIT UNE CHAINE
< DE CARACTERES NON SIGNES ET PRESUMES
< HEXADECIMAUX. LA CONVERSION EN BINAIRE
< S'ARRETE SUR LE 1ER CARACTERE NON
< HEXADECIMAL RENCONTRE. DE PLUS ELLE
< ELIMINE LES BITS DE PARITES ET LES
< CARACTERES 'NULLS' (CF. 'CARAC'), ET
< ENFIN S'ARRETE SI L'INDEX (X) DEPASSE
< OU EGALE 'LCCI'...
<
<
< ARGUMENT :
< (A)=ADRESSE RELAI VERS LA CHAINE HEXA-DECIMALE.
< (X)=INDEX DU 1ER CARACTERE HEXA.
<
<
< RESULTAT :
< (A)=VALEUR BINAIRE,
< (X)=INDEX DU 1ER CARACTERE NON RECONNU COMME
< ETANT HEXADECIMAL.
<
<
HEXIN: EQU $
PSR B,Y,W
LR A,W < (W)=@DU RELAI VERS LE TEXTE.
LYI NBITMO/NBITCX < ON DECODE 4 CARACTERES AU MAXIMUM.
LBI K < INITIALISATION DE B A 0.
<
< BOUCLE DE DECODAGE :
<
Z321: EQU $
LR X,A < (A)=INDEX COURANT,
CPI LCCI < Y-A-T'IL DEBORDEMENT (ET CECI A CAUSE
< DU 'CCI' QUI NE VALIDE PAS SES DEMAN-
< DES A 'HEXIN'...) ???
JGE Z322 < ON FAIT COMME SI C'ETAIT LA FIN DU
< NOMBRE HEXA-DECIMAL COURANT...
LBY &O,W < SI NON, ACCES A UN CARACTERE DE LA
< CHAINE.
RBT BITPAR < ON IGNORE AINSI SA PROVENANCE.
JAE Z323X1 < ON ELIMINE LES 'NULLS' PAR COMPATIBILITE
< AVEC LA ROUTINE 'CARAC' DU 'CCI'...
ADRI -HZERO,A < TRANSLATION PAR RAPPORT AUX
< CODE DES CHIFFRES.
JAL Z322 < ON ARRETE AU 1ER CARACTERE NON
< RECONNU.
CPI BASE10-Z < EST-CE UN CHIFFRE ?????
JLE Z323 < C'EST UN CHIFFRE (K A 9).
ADRI -HA+HNEUF+Z,A < TRANSLATION PAR RAPPORT AU
< CODE DES LETTRES.
CPI BASE10
JL Z322 < ON ARRETE AU 1ER CARACTERE
< NON RECONNU.
CPI BASE16-Z
JG Z322 < CARACTERE DE CODE SUPERIEUR
< A LA LETTRE 'F'.
<
< CAS OU ON A RECONNU UN BON CARACTERE
< HEXADECIMAL (K A 9 OU 'A A 'F) :
<
Z323: EQU $
SCRS NBITCX < LA VALEUR BINAIRE SUR 4 BITS
< DU CARACTERE EST MISE EN TETE
< DE A.
SCLD NBITCX < PUIS CES 4 BITS SONT CONCATENES
< AVEC LE CONTENU PRECEDENT DE B.
ADRI -I,Y < DECOMPTE DES CARACTERES
< A DECODER.
Z323X1: EQU $ < CAS DES 'NULLS', ON NE DECOMPTE PAS (Y)
< LES CARACTERES DECODES ; SEUL L'INDEX
< DU BUFFER (X) PROGRESSE...
ADRI I,X < PROGRESSION DE L'INDEX
< DE LA CHAINE HEXADECIMALE.
CPZR Y
JG Z321 < ON N'A PAS ENCORE ATTEINT
< LA MAXIMUM DE 4 CARACTERES.
<
< FIN DU DECODAGE (UN CARACTERE NON
< HEXADECIMAL A ETE RECONNU
< OU ON A ATTEINT UN COMPTE DE 4 CARACTERES) :
<
Z322: EQU $
LR B,A < RENVOI DU RESULTAT DANS A.
PLR B,Y,W
RSR
PAGE
<
<
< C O N V E R S I O N B I N A I R E
< E N H E X A D E C I M A L A S C I :
<
<
< FONCTION :
< CETTE ROUTINE CONVERTIT UN MOT DE
< 16 BITS EN UNE CHAINE DE 4 CARACTERES
< HEXADECIMAUX ASCI.
<
<
< ARGUMENT :
< (B)=NBRE A CONVERTIR,
< (A)=ADRESSE DU RELAI VERS LE TEXTE DESTINATAIRE.
< (X)=RANG DU 1ER CARACTERE.
<
<
< RESULTAT :
< (X)=RANG DU 1ER CARACTERE LIBRE DERRIERE
< LA CHAINE HEXA. (=X-ARGUMENT+4).
<
<
HEXEX: EQU $
PSR A,B,Y,W
LR A,W < (W)=@RELAI VERS LE TEXTE.
LYI NBITMO/NBITCX < (Y)=NOMBRE DE CONVERSIONS A FAIRE.
<
< BOUCLE DE DECODAGE :
<
Z324: EQU $
LAI K < INITIALISATION DE A.
SLLD NBITCX < RECUPERATION D'UN NBRE DE
< 4 BITS DANS B.
CPI BASE10-Z < LA CONVERSION EST-ELLE EN CHIFFRE ?
JLE Z325 < OUI, C'EST UN CHIFFRE.
ADRI HA-HNEUF-Z,A < CAS D'UNE LETTRE.
Z325: EQU $
ADRI HZERO,A < CONVERSION EN ASCI.
STBY &O,W < ET RANGEMENT DANS LE TEXTE.
ADRI I,X < PROGRESSION DE L'INDEX
< DU TEXTE.
ADRI -I,Y < DECOMPTE DES CONVERSIONS.
CPZR Y
JG Z324 < C'EST PAS FINI...
PLR A,B,Y,W
RSR
PAGE
<
<
< T E S T A N D S T O R E @ R O U T I N E
< D E F I N D E S E R V I C E :
<
<
< FONCTION :
< CETTE ROUTINE SERT A POSITIONNER
< L'ADRESSE 'FSERV' DE FIN DE SERVICE
< DANS 'DCTESC' ; MAIS 2 CAS SE REN-
< CONTRENT :
< 1 - LE DEMANDEUR EST UNE VISU : ALORS
< 'FSERV' EST POSITIONNE (QUITTE A PRO-
< VOQUER UN ECRASEMENT), SAUF S'IL Y A
< UNE TRAPPE EN COURS DE TRAITEMENT (CELA
< PEUT SE PRODUIRE, PUISQUE LA GESTION DES
< ALT-MODES PEUT ETRE PARALLELE AU DEROU-
< LEMENT DU PROGRAMME). ENFIN, ON TESTE
< SI CET APPEL EST DU A UN DOUBLE ALT-
< MODE LORS D'UNE ECRITURE (ALPHA-NUMERIQUE
< OU GRAPHIQUE), AUQUEL CAS, ON LE
< MEMORISE DANS 'RST' DE L'UTILISATEUR
< A L'AIDE DU BIT 'BALT2', AFIN DE
< PERMETTRE UN FONCTIONNEMENT CORRECT
< DE LA COMMANDE "G" SOUS 'DEBUG'...
< 2 - LE DEMANDEUR N'EST PAS UNE VISU : ALORS,
< ON REGARDE SI 'FSERV' N'EST PAS DEJA
< POSITIONNE ; SI TEL EST LE CAS, ON
< VERIFIE QU'IL S'AGIT DE 'ABORT'...
< DANS LES 2 CAS, LE BIT 'XBABOR'
< DE LA DEMANDE 'DEMESC' COURANTE
< EST POSITIONNE (CECI EST UTILE
< EN PARTICULIER POUR LES FONCTIONS
< LONGUES DE 'HDLMT1').
<
<
< ARGUMENT :
< (A)=ADRESSE ROUTINE DE FIN DE SERVICE.
< SI BIT0(A)=1 : RETOUR IMMEDIAT AU CAS
< OU FSERV SERAIT DEJA POSITIONNE.
< (PAS DE RECOVERY).
< (Y)=ADRESSE 'DCTVIS' SI VISU,
< (L)=ADRESSE DE 'DCTESC' SI VISU, OU
< (W)=ADRESSE DE 'DCTESC' SINON...
<
<
< RESULTAT :
< BIT0(A)=K : FSERV A ETE POSITIONNE,
< BIT0(A)=1 : FSERV N'A PAS ETE POSITIONNE.
<
<
XFSERV:: VAL BITSIG < NUMERO DU BIT "RESULTAT".
<
<
SFSERV: EQU $
BSR ASMMK <<<< MASQUAGE GENERAL DES IT...
<
< DISCRIMINATION DU DEMANDEUR :
<
PSR A,B < SAUVEGARDE DE L'ADRESSE DE FIN DE
< SERVICE A POSITIONNER DANS 'A'...
< (ET DE 'B'...)
BSR ASMWHO < IDENTIFICATION DU DEMANDEUR :
< (A)=TYPE HARD/SOFT,
< (B)='NSP' SI SOFT, ET NIVEAU SI HARD...
IF TYPTS-K,,XEIF%,
IF ATTENTION : LE TEST SUIVANT EST MAUVAIS !!!
XEIF%: VAL ENDIF
JANE Z265X1 < IL S'AGIT D'UNE TACHE 'HARD', CE N'EST
< DONC PAS L'UNE DES VISUS...
LR B,A < (A)='NSP' D'UNE TACHE SOFT DEMANDEUSE,
CPI NSPVI0 < EST-CE UNE VISU ???
JL Z265X1 < NON...
CPI NSPVIN < EST-CE UNE VISU ???
JG Z265X1 < NON...
<
< CAS D'UNE VISU DEMANDEUSE :
<
LA DEMESC-DCTESC+XXNSP,L
SBT XBABOR < ET ON FORCE LE BIT INDICATEUR DE ROUTINE
< DE FIN DE SERVICE EN ATTENTE...
STA DEMESC-DCTESC+XXNSP,L
LAD DEMESC-DCTESC,L < (A)=ADRESSE DE LA DEMANDE 'DEMESC',
XR Y,L < AFIN D'ATTEINDRE 'DCTVIS',
CP TETE < LA DEMANDE COURANTE SUR CETTE VISU
< EST-ELLE PRECISEMENT 'DEMESC' ???
XR Y,L < RESTAURATIONS...
JNE Z265X3 < NON...
LA DEMESC-DCTESC+T+OPDEM,L
< OUI, ALORS ACCEDONS A LA FONCTION :
ANDI MASSFF < AFIN DE BIEN DISCRIMINER LES VRAIES
< ENTREES-SORTIES DES FAUSSES...
CPI FAVW < EST-CE UNE ECRITURE ???
IF FAVWG(MASSFF-FAVW,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS NE TESTE PAS
IF SIMULTANEMENT LES ECRITURES ALPHA-NUMERIQUES
IF ET GRAPHIQUES !!!
XEIF%: VAL ENDIF
JNE Z265X3 < CE N'EST PAS UNE ECRITURE...
XKREG: VAL K < INITIALISATION DU CUMUL DES REGISTRES.
#@PLR A,B < #SISP CMS5 KREG#
XWOR%1: VAL -XKREG < NOMBRE DE REGISTRES DEPILES.
< RESTAURE :
< (A)=ADRESSE DU MODULE DE FIN DE SERVICE,
RBT XFSERV < ON ENLEVE LE BIT 'XFSERV' A PRIORI...
SB AABORT < EST-CE SUITE A UN DOUBLE ALT-MODE ???
< (ON TESTE PAR 'SB' ET NON PAR 'CP', CAR
< LE 'ADRI' QUI SUIT MODIFIERAIT LES
< INDICATEURS AVANT LE SAUT CONDITIONNEL)
ADRI XWOR%1,K < ET RESTAURE LA PILE, ET CECI SANS RE-
< EMPILER, CAR ON A MODIFIE (PEUT-ETRE)
< L'ADRESSE DE LA ROUTINE DE FIN DE
< SERVICE PAR 'XFSERV'...
JANE Z265X3 < NON, PAS DE DOUBLE ALT-MODE...
LA IDDESC-DCTESC,L < OUI, ALORS
TBT IDESCX < Y-A-T'IL UNE TRAPPE EN COURS DE TRAITE-
< MENT ???
JNC Z265X4 < NON, C'EST BON...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE COMMENT 'DEMESC'
< PEUT ETRE EN TETE DE LA FILE
< D'ATTENTE DE LA VISU, ALORS QU'UNE
< TRAPPE EST EN COURS, ALORS QUE
< LES TRAPPES UTILISENT LA DEMANDE
< 'DEMCCI' !!!
<
JMP Z265X3 < ET ON NE TOUCHE PAS A 'ST'...
Z265X4: EQU $
LA PSTESC-DCTESC+RS,L
SBT BALT2 < DANS LE CAS DU DOUBLE ALT-MODE
< LORS D'UNE ECRITURE, ON MEMORISE CE
< FAIT PAR LE BIT 'BALT2' DE 'S', QUI VA
< DEVENIR PAR 'SAVREG' LE REGISTRE 'ST' ;
< IL FAUT ESPERER QUE 'ST' N'EST JAMAIS
< REMIS COMME REGISTRE 'S', SI CE N'EST
< PAR LA COMMANDE "G" DU 'DEBUG' (IL
< SEMBLE QUE CELA SOIT VERIFIE, CAR PENDANT
< UN CERTAIN TEMPS, LA VALEUR DE 'BALT2'
< FUT LE BIT 'STOP', ET LA MACHINE NE
< S'EST JAMAIS ARRETE ; MALHEUREUSEMENT
< CETTE VALEUR N'A PU ETRE CONSERVEE A
< CAUSE DE SES INTERFERENCES AVEC LE CHAMP
< 'MALARM' POSITIONNE PAR 'TH0'...).
STA PSTESC-DCTESC+RS,L
Z265X3: EQU $
<
< TEST D'UNE TRAPPE EN COURS :
< (ON FAIT APPEL A 'SFSERV'
< POUR LES VISUS, CAR IL Y
< AVAIT UN PATCH A FAIRE
< POUR LE TEST DES TRAPPES
< EN COURS, ET QU'A CAUSE DES
< SAUTS SUPERIEURS A 128 MOTS,
< JE NE POUVAIS L'IMPLEMENTER...)
<
LA IDDESC-DCTESC,L < (A)=LISTE DES INDICATEURS DE L'UTI-
< LISATEUR :
TBT IDESCX < Y-A-T'IL UNE TRAPPE EN COURS DE TRAITE-
< MENT N'AYANT PAS ATTEINT L'INTERROGATION
< 'CCI' DE L'UTILISATEUR ???
PLR A,B < (A)=ADRESSE DE FIN DE SERVICE...
JC Z265X2 < OUI, IL Y A UNE TRAPPE EN COURS, ELLE
< MODIFIE LES REGISTRES DE L'UTILISATEUR,
< DONC PAS DE FIN DE SERVICE, QUI CERTAI-
< NEMENT ANNULERAIT LES EFFETS DE LA TRAP-
< SAUF LA SORTIE DU MESSAGE...
< N'OUBLIONS PAS AUSSI CE CAS VICIEUX :
< 1 - UN ALT-MODE EST EN COURS (ON ATTEND
< L'ARRIVEE D'UN EVENTUEL SUIVANT) ;
< 2 - PENDANT CE TEMPS LE PROGRAMME COR-
< RESPONDANT TOURNE TOUJOURS, ET FAIT UNE
< TRAPPE (VRAIE OU FAUSSE : CF. LE CHANGE-
< MENT DU CARACTERE D'ABORT) ;
< 3 - LA VRAIE TRAPPE POSITIONNE LE PRO-
< GRAMME MINIMUM EN BAS DE MEMOIRE, ET
< FAIT TOUT POUR QU'IL SOIT EXECUTE ;
< 4 - MAIS, ENFIN, LE ALT-MODE EST TRAITE,
< ET CAUSE PAR EXEMPLE UN'GOBPE' QUI FAIT
< PERDRE (EN QUELQUE SORTE) LE PROGRAMME
< MINIMUM DE LA TRAPPE !!!
STA FSERV-DCTESC,L < PAS DE TRAPPE EN COURS, DONC MISE EN
< PLACE DU TRAITEMENT DU ALT-MODE SIMPLE
< OU DOUBLE...
Z265X2: EQU $
JMP Z266 < VERS LA SORTIE...
<
< CAS DES AUTRES DEMANDEURS :
<
Z265X1: EQU $
LA DEMESC-DCTESC+XXNSP,W
SBT XBABOR < ET ON FORCE LE BIT INDICATEUR DE ROUTINE
< DE FIN DE SERVICE EN ATTENTE...
STA DEMESC-DCTESC+XXNSP,W
LA IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS UTILISATEUR :
TBT IDESCX < Y-A-T'IL UNE TRAPPE EN COURS ???
PLR A,B < (A)=ADRESSE DE FIN DE SERVICE...
JC Z266 < OUI, IL Y A UNE TRAPPE EN COURS, ON
< IGNORE DONC CETTE FIN DE SERVICE...
CPZ FSERV-DCTESC,W < FSERV EST-IL DEJA POSITIONNE ???
JE Z265 < NON, C'EST BON ALLONS LE
< METTRE A JOUR AVEC (A).
<
< CAS OU FSERV EST DEJA POSITIONNE :
<
IF XFSERV-BITSIG,,XEIF%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
JAL Z266 < BIT0(A)=1 : RETOUR IMMEDIAT
< SANS RECOVERY. L'APPELANT
< AURA CONNAISSANCE DE CE RETOUR
< IMMEDIAT PAR BIT0(A)=1 (INCHANGE)
CP FSERV-DCTESC,W < LA ROUTINE QUE L'ON VEUT METTRE
< EN FSERV Y-EST'ELLE DEJA ???
JE Z266 < OUI, ON A DU PRENDRE LE
< SYSTEME DE VITESSE (PAR EXEMPLE
< LORS D'UN SERVICE LONG DU TYPE
< DE L'ERASE DES VISUS)
PSR A < SAVE @ROUTINE DE FIN DE SERVICE
< AVEC BIT0(A)=K.
LA FSERV-DCTESC,W < (A)=@ROUTINE DE FIN DE SERVICE
< SE TROUVANT DEJA DANS DCTESC.
CP AABORT < ET COMPARAISON A @ABORT.
PLR A < RESTAURE (A)=@ROUTINE DE FIN DE
< SERVICE DEMANDEE.
JE Z360 < DANS LE CAS OU FSERV EST DEJA
< POSITIONNEE AVEC ABORT, ON
< CONSIDERE QU'IL NE S'AGIT PAS
< D'UNE ERREUR, ET ON PEUT
< REPOSITIONNER FSERV (CF. LE CAS
< DU DEBUG OU UN ALT-MODE EST
< FRAPPE DANS LA COMMANDE AU
< DEBUG !!!).
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< MISE A JOUR DE FSERV :
<
Z265: EQU $
RBT XFSERV < BIT0(A)=K A PRIORI ; DANS LE
< CAS OU IL VALAIT 1, L'APPELANT
< AURA CONNAISSANCE DE CETTE MISE
< A JOUR PAR BIT0(A)=K.
Z360: EQU $
STA FSERV-DCTESC,W
<
< RETOUR :
<
Z266: EQU $
BSR ASMDK <<<< DEMASQUAGE GENERAL DES IT...
RSR < GO BACK.
PAGE
<
<
< C A L C U L D U B E T A
< D ' U N S E M A P H O R E :
<
<
< FONCTION :
< CE SOUS-PROGRAMME REMET
< SUR 16 BITS LE COMPTEUR
< D'UN SEMAPHORE DONNE SUR
< 8 BITS.
<
<
< ARGUMENT :
< (L)=ADRESSE DCT.
<
<
< RESULTAT :
< (A)=BETA DU SEMAPHORE.
<
<
USE L,DCT0
<
<
< B E T A D E S D O D O :
<
<
BETA3: EQU $
LA &ASDODO
JMP E753
<
<
< B E T A D E S I T :
<
<
BETA2: EQU $
LA SIT
JMP E753
<
<
< B E T A D E S C H V I D :
<
<
BETA1: EQU $
LA SCHVID
<
<
< B E T A D E ( A ) :
<
<
< ARGUMENT :
< (A)=BETA SUR 8 BITS D'UN SEMAPHORE.
<
<
E753: EQU $
SLLS NBITMO-XMBETA < CADRAGE A GAUCHE, POUR TEST BIT
< DE SIGNE ET EXTENSION...
< ET RAZ DE L'OCTET0 DU BETA...
SARS NBITMO-XMBETA < EXTENSION DU BIT8 DU BETA
< DU SEMAPHORE (BIT DE SIGNE).
RSR
PAGE
<
<
< T E S T D E P O S I T I O N D E
< B E T A ( S C H V I D ) P A R
< R A P P O R T A S O N S E U I L :
<
<
< UTILISATION DU SEUIL :
< LE TEST DE LA POSITION DE BETA PAR RAPPORT
< AU SEUIL PERMET D'ENTREPRENDRE UNE
< CERTAINE ACTION EVENTUELLEMENT.
< UNE APPLICATION EST DE POUVOIR
< INDIQUER AU SWAPPEUR S'IL DOIT
< SWAPPER UN ESCLAVE INTERROMPU PAR
< L'HORLOGE...
<
<
< RESULTAT :
< CE SOUS-PROGRAMME EST
< STRICTEMENT EQUIVALENT AU
< CODE SUIVANT :
<
< LA BETA(SCHVID)
< CP SEUIL(SCHVID)
<
<
< DETRUIT A & X.
< (A)=BETA(SCHVID),
< (X)=SEUIL(SCHVID),
<
<
< ARGUMENT :
< (L)=ADRESSE DCT.
<
<
USE L,DCT0
PBS: EQU $
LA BITSEM < OCTET1(BITSEM)=SEUIL DE SCHVID
ANDI BSEUIL < ACCES AU SEUIL DE SCHVID
ADRI XXCHV0+I,A < EN EFFET UN SCHVID NE PEUT
< ETRE INFERIEUR A -1 ('FF), ET
< DE PLUS IL TIENT SUR 8 BITS,
< EN CONSEQUENCES ON TRANSLATE LE
< BETA ET LE SEUIL DE 1 UNITE,
< DE FACON A NE COMPARER QUE DES
< NBRES POSITIFS OU NULS...
ANDI BSEUIL < RESTONS SUR 8 BITS.
LR A,X < (X)=SEUIL.
LA SCHVID < ACCES AU BETA.
ADRI I,A
ANDI MBETA < (A)=BETA.
CPR X,A < POUR TEST EN RETOUR.
IF MBETA-BSEUIL,,XEIF%,
IF ATTENTION : CES 2 MASQUES DOIVENT ETRE IDENTIQUES !!!
XEIF%: VAL ENDIF
RSR
PAGE
<
<
< R O U T I N E D E T E S T D ' E C H A N G E E N C O U R S :
<
<
< FONCTION :
< CETTE ROUTINE INDIQUE SI POUR LE PERIPHERIQUE
< DONT ON LUI A DONNE L'@DCT, IL Y A UN ECHANGE
< EN COURS.
< A NOTER, QUE C'EST LA TACHE APPELANTE DE 'TEC' DE
< DE SE PREMUNIR CONTRE LES PHASES CRITIQUES, SOIT PAR
< PAR DES RQST/RLSE, SOIT PAR DES MASK/UNMASK IT...
< ET CECI, PARCEQUE LE BSR ATEC NE PEUT ETRE INSERER DANS
< INSERE DANS CETTE PHASE CRITIQUE...
<
<
< ARGUMENTS :
< (L)=ADRESSE DE LA 'DCT',
< (W)=ADRESSE DE LA DEMANDE.
<
<
< RESULTATS :
< CETTE ROUTINE POSITIONNE LES INDICATEURS QUE
< L'ON PEUT TESTER AU RETOUR PAR :
< - 'JE' : JUMP SI PAS D'ECHANGE..,
< - 'JNE' : JUMP SI ECHANGE EN COURS...
<
<
USE L,DCT0
USE W,DEM0
TEC: EQU $
PSR A
LA TETE < ACCES A LA TETE DE LA FILE
< D'ATTENTE SUR CE PERIPHERIQUE.
CPI NEXIST < ON FAIT CE CPI, POUR POUVOIR
< TESTER AU RETOUR PAR JE/JNE...
PLR A
RSR
PAGE
<
<
< N O T I O N D E F I L T R A G E
< D E S D E M A N D E S :
<
<
< PHILOSOPHIE DU FILTRAGE : DANS CERTAINS CAS CERTAINES DEMANDES
< APPARAISSANT SUR UN HANDLER PEUVENT ETRE MALVENUES.
< (CF. DE DEMANDES DE LECTURES SUR UN FICHIER
< SEQUENTIEL, ALORS QUE LA CHAINE DES SECTEURS DE
< CELUI-CI EST VIDE ; IL EST EVIDENT QUE DANS CE CAS
< SEULES LES DEMANDES D'ECRITURE PEUVENT PASSER,
< MAIS QUE CELLES DE LECTURES DOIVENT ETRE DIFFEREES
< JUSQU'A CE QUE LA CHAINE NE SOIT PLUS VIDE...).
< ON VA DONC AVOIR LA POSIBILITE DE DIFFERER LES
< DEMANDES A L'AIDE D'UN SYSTEME DIT DE FILTRAGE.
< DANS CHAQUE DCT, ON TROUVERA :
< - FILTRE : IL S'AGIT D'UNE ROUTINE
< SPECIFIQUE DU HANDLER APPELEE
< PAR HANDLR AU MOMENT OU IL ACCEDE
< A UNE DEMANDE DANS LA FILE D'ATTENTE
< POUR SAVOIR S'IL FAUT LA DIFFERER
< OU BIEN SI ON PEUT LA TRAITER
< IMMEDIATEMENT.
< - SFLITR : IL S'AGIT D'UNE ROUTINE SPECIFIQ
< SPECIFIQUE A CHAQUE HANDLER ET
< QUI INDIQUE A HANDLR APRES CHAQUE
< DEMANDE TRAITEE CE QU'IL DOIT FAIRE
< AU SUJET DU FILTRE ET DES EVENTUELLES
< DEMANDES DIFFEREES QUI SONT EN ATT-
< ENTE.
<
< DEBLOCAGE DES DEMANDES DIFFEREES : LE DEBLOCAGE
< PEUT SURVENIR APRES L'APPEL DE SFLITR DANS LE CAS
< D'UNE REPONSE POSITIVE DE CELUI-CI. IL FAUT
< REMARQUER QUE LES DEMANDES DIFFEREES NE SONT PAS
< OBLIGATOIREMENT LIBEREES EN BLOC , EN EFFET
< ENTRE CHAQUE TRAITEMENT PAR 'ES' D'UNE DEMANDE
< DIFFEREE, ON RAPPELLE COMME POUR TOUTE AUTRE
< DEMANDE LA ROUTINE SFLITR, QUI PEUT REPOSITIONNER
< LE FILTRE.
<
<
< REPONSES DES ROUTINES FILTRE & SFILTR :
< CELLES-CI REVIENNENT DANS A, EN RESPECTANT LES
< CONVENTIONS SUIVANTES :
< - (A)=K : TRAITER LA DEMANDE, OU
< SUPPRIMER LE FILTRE,
< - (A)#0 : DIFFERE LA DEMANDE, OU
< MAINTENIR LE FILTRE.
<
<
< EN RESUME :
< - FILTRE : TEST LA DEMANDE ET LE CONTEXTE DU HANDLER,
< - SFILTR : NE TESTE QUE LE CONTEXTE DU HANDLER.
<
<
< R O U T I N E D E F I L T R A G E L A I S S A N T
< P A S S E R T O U T E S L E S D E M A N D E S :
<
<
NFILTR: EQU $
LAI NEXIST < TOUT PASSERA AINSI...
RSR < ET C'EST TOUT...
<
<
< R O U T I N E D E S - F I L T R A G E :
<
<
FILTRS: EQU $
LAI EXIST < ON MAINTIENT AINSI LE FILTRE.
RSR
<
<
< A T T E N T I O N :
< COMME S-FILTRE, ON UTILISERA DE PREFERENCE
< FILTRS A NFILTR, EN EFFET AVEC NFILTR,
< ON SAUTE UN GRAND NBRE DE RQST SCHVID, SI
< LA FILE D'ATTENTE DU HANDLER EST TOUJOURS
< PLEINE (CF. DK, SCHEDULER,...), ET
< AINSI LE BETA DE SCHVID, EN PASSANT PAR
< SON '+INFINI' REDEVIENT NEGATIF...
PAGE
<
<
< M I S E E N F I L E D ' A T T E N T E
< S U R U N H A N D L E R :
<
<
< PHILOSOPHIE :
< L'ACCES AUX TACHES DU SYSTEME
< SE FAIT PAR DES FILES D'ATTENTE ;
< CES FILES D'ATTENTE SONT EN GENE-
< RAL 'FIFO', C'EST-A-DIRE QUE 'CHAND'
< DEPOSE LES DEMANDES EN QUEUE DE
< FILE D'ATTENTE DESIREE, ET QUE
< 'HANDLR' TRAITE CELLE DE TETE.
< MALGRE TOUT, IL EXISTE UNE OPTION
< DITE "PRIORITAIRE", QUI PERMET
< DE FAIRE DU 'LIFO', AVEC LAQUELLE,
< 'CHAND' DEPOSE LA DEMANDE ARGUMENT
< LE PLUS PRES POSSIBLE DE LA TETE
< (EN TETE, SI LA FILE D'ATTENTE EST
< VIDE, OU JUSTE DERRIERE CELLE DE
< TETE SINON...).
< ON N'OUBLIERA PAS DE PLUS LA
< NOTION DE 'FILTRAGE'.
<
<
< I M P O R T A N T :
< ON RETIENDRA QUE LA DEMANDE
< DE TETE EST TOUJOURS LA DEMAN-
< DE LA PLUS PRIORITAIRE (C'EST-
< A-DIRE CELLE QUE L'ON VA TRAI-
< TER), QUELQUE SOIT LE MODE D'IN-
< SERTION D'AUTRES DEMANDES !!!
<
<
< NOTATIONS :
< LA FIN D'UNE CHAINE DANS UNE
< FILE D'ATTENTE EST INDIQUEE PAR
< UN CHAINAGE 'NIL', ET UNE FILE
< D'ATTENTE VIDE PAR (TETE,QUEUE)=(NIL,NIL).
<
<
< ARGUMENTS :
< (W)=ADRESSE DE LA DEMANDE.
<
<
< A T T E N T I O N :
< 'CHAND' NE SE CHARGE PAS DE
< LA MISE EN ATTENTE DE FIN DE
< SERVICE SUR 'WEIO' !!!
<
<
USE W,DEM0
USE L,DCT0
CHAND: EQU $
PSR A,B,X < A CAUSE DU MICRO-CANAL.
PSR Y,L < A CAUSE DU MICRO-CANAL.
<
< TRANSMISSION DE LA PAGE DE 32K
< A LA QUELLE APPARTIENT LE 'SLO'
< DE LA TACHE DEMANDEUSE :
<
LA &NS
ADRI -NSNSP0,A < (A)='NSP' DU DEMANDEUR ; A NOTER QUE
< L'ON NE PEUT UTILISER 'CANSP', CAR
< EN EFFET CETTE ROUTINE ASSIMILE TOUS
< LES 'NSPSER' A 'NSPACT'...
LR A,X
BSR ACADCT < (A)=(L)=ADRESSE DE LA 'DCT' DU DEMANDEUR
< DONT LE 'NSP' EST (X)...
LA BITSEM
TBT BISOSE < FAUT-IL VRAIMENT TRANSMETTRE (SLO,SLE)
< A LA TACHE DEMANDEE ???
LAI SO < NON, A PRIORI ON DONNE A 'A' UNE VALEUR
< PERMETTANT DE TRANSMETTRE LA PAGE 0...
JC CHAND2 < NON, EFFECTIVEMENT, ON NE TRANSMET
< PAS (SLO,SLE)...
RDOE < ET SI, ON RECUPERE (SLO,SLE) COURANT :
CHAND2: EQU $
SLRD XSLO32+NBITMO < (B)=NUMERO DE LA PAGE DE 32K,
LAI XNDSLO < (A)=NUMERO MAX AUTORISE,
CPR A,B < LE NUMERO DE PAGE (B) EST-IL VALIDE ???
JLE CHAND3 < OUI, (B)<='XNDSLO'...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR D'OU ARRIVE CE NUMERO
< DE PAGE TROP GRAND : NE SERAIT-
< CE PAS UNE EXTENSION 'CDA' DE
< 'DKU' VERS 'CDAJ' ???
<
LBI XNDSLO < POURQUOI PAS...
CHAND3: EQU $
SLLD XDDSLO < ET CADRAGE SUIVANT 'XMDSLO'...
LRM A
WORD XMDSLO)MMOT
AND ARGDEM+OPDEM < CLEAR DE 'XMDSLO' DANS L'OPDEM COURANT,
CP ARGDEM+OPDEM < Y-AVAIT'IL QUELQUE CHOSE DANS LE
< CHAMP 'XMDSLO' ???
JE CHAND1 < NON, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR CE QUE CONTIENT LE CHAMP 'XMDSLO' !!!
<
CHAND1: EQU $
ORR B,A < INSERTION DE 'XMDSLO',
STA ARGDEM+OPDEM < ET MISE-A-JOUR DE 'OPDEM'...
<
< ACCES A LA TACHE DEMANDEE :
<
LA ETALOC < ACCES A L'ETAT DE LOCATION
< DU DEMANDEUR DE SERVICE,
STA ARGDEM+ETADEM < ET SAUVEGARDE REENTRANTE DE
< CET ETAT DE LOCATION DANS LA
< DEMANDE DE SERVICE ARGUMENT.
LBY NSPTYP < ACCES AU 1ER OCTET DE LA
< DEMANDE.
XWOR%1: VAL MSKNSP=K
XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE.
XWOR%1: VAL MSKNSP>XWOR%1
ANDI XWOR%1 < (A)='NSP' DU SERVICE DEMANDE,
< (X)='NSP' DU SERVICE DEMANDEUR.
IF OACTIV-EXIST,XEIF%8,,XEIF%8
<
< VISUALISATION DU TRAFFIC :
<
PSR A
SWBR A,A < PREPARATION DU RECEPTEUR,
ORR A,X < (X)=(RECEPTEUR/EMETTEUR),
LYI XNGIN < (Y)=NIVEAU DE VISUALISATION DE LA
< CONNEXION PAR 'CHAND'.
BSR AACTIV < ET VISUALISATION (SI LE BIT 'XACTIV'
< EST POSITIONNE...
PLR A
XEIF%8: VAL ENDIF
<
< ACCES AU SERVICE DEMANDE :
<
LR A,X < LE NSP EST MIS DANS X.
BSR ACADCT < MISE DANS L DE @DCT.
<
< ON A DONC ARRIVE ICI :
< - (W)=ADRESSE DE LA DEMANDE,
< - (L)=ADRESSE DE LA 'DCT',
< - (X)='NSP' DE LA TACHE DEMANDEE.
<
LR W,Y < @DEMANDE EST MISE DANS Y (EN PLUS
< DE W)
<
< SAUVEGARDE DU NSP DU DEMANDEUR DANS ETADEM :
< (UTILISE PAR LE SGF).
<
BSR ACANSP < RENVOIE (A)=NSP DEMANDEUR OU NSPACT.
LR A,B < (B)=NSP DU DEMANDEUR DE SERVICE.
E137: EQU $
RQST SPHEX <<<<PHASE CRITIQUE
<
< TEST D'UN APPEL PAR LE HANDLER DE SURVEILLANCE :
< EN EFFET C'EST LE SEUL HANDLER POUR LEQUEL
< LE TEST DE LOCATION (DES VISUS) NE DOIT PAS
< ETRE FAIT, CAR SI UNE VISU EST ASSIGNEE,
< ELLE EST LOUEE, DONC UN BLOCAGE DU HANDLER
< DE SURVEILLANCE APPARAIT, ET TOUTES LES
< CONSOLES DU SYSTEME SE TROUVENT DANS
< L'IMPOSSIBILITE DE FAIRE 'ALT-MODE' !!!
<
CPI NSPSUR < LE NSP (A) EST-IL LE NSP DU
< HANDLER DE SURVEILLANCE ???
JE E136 < OUI, PAS DE TEST DE LOCATION.
< (QUEL PRIVILEGE !!!)
<
< T E S T D E L O C A T I O N D E L A D C T :
<
LA ETALOC < ACCES A L'ETAT DE LOCATION DCT.
JAGE E136 < LA DCT N'EST PAS LOUEE OU
< NON LOUABLE (PARTAGEABLE).
<
< CAS OU LA DCT COURANTE EST LOUEE :
<
CP ARGDEM+ETADEM < LE 'PROPRIETAIRE' DU DEMANDEUR
< (S'IL EXISTE...) ET DU DEMANDE
< NE SERAIT-IL PAS UNE SEULE ET
< MEME PERSONNE...
JE E136 < OUI, ALORS LA DEMANDE DE
< SERVICE EST ACCEPTEE ; C'EST PAR
< EXEMPLE LE CAS SUIVANT :
< !ASSIGN 3=CR1,
< !ASSIGN 4=LP1, PUIS L'UTILISATEUR
< FAISANT UNE LECTURE AVEC ECHO
< SUR LE LECTEUR DE CARTES...
RBT XETLOC < RAZ BIT DE LOCATION DANS A.
< DONC : (A)=NUMERO DU LOCATAIRE.
CPR A,B < (B)=NSP DU DEMANDEUR.
JE E136 < OK, LE DEMANDEUR EST LE
< LOCATAIRE.
<
< CAS OU LE DEMANDEUR N'EST PAS LE LOCATAIRE :
<
< ON A ICI :
< (A)='NSP' DU LOCATAIRE,
< (B)='NSP' DU DEMANDEUR,
< (X)='NSP' DE LA TACHE DEMANDEE.
<
CPI NSPACT < LE LOCATAIRE EST-IL UN UTILISATEUR ???
JNE E136X2 < NON, DONC ALLONS DIRECTEMENT SE METTRE
< EN ATTENTE DE DELOCATION...
PSR A < OUI :
LR B,A < (A)='NSP' DU DEMANDEUR,
CPI NSPSG0 < LE DEMANDEUR EST-IL LE "SGN" ???
JL E136X1 < NON, VERS L'ATTENTE...
CPI NSPSGN < LE DEMANDEUR EST-IL LE "SGN" ???
JG E136X1 < NON, VERS L'ATTENTE...
LR X,A < OUI, (A)='NSP' DE LA TACHE DEMANDEE,
NSPDKG:: VAL NSPDKU < 'NSP' DU DISQUE SUPPORTANT LES VOLUMES
< AMOVIBLES D'EXTENSION D'ADRESSAGE
< DU "SGN".
CPI NSPDKG < LE "SGN" A-T'IL DEMANDE "DKU" POUR LE
< COMPTE DE L'UTILISATEUR ???
E136X1: EQU $
PLR A < RESTAURE :
< (A)='NSP' DU LOCATAIRE...
JE E136 < L'UTILISATEUR S'EST ASSIGNE OBLIGATOI-
< REMENT 'DKU' POUR FAIRE UN MONTAGE DE
< VOLUME ; LE "SGN" DOIT POUVOIR ATTEIN-
< DRE 'DKU', DONC ON DOIT SAUTER CETTE
< ATTENTE DE DELOCATION, QUI D'AIL-
< LEURS N'ARRIVERAIT JAMAIS...
< (PUISQUE L'UTILISATEUR SERAIT EN
< EN ATTENTE VIA LE "SGN"...).
E136X2: EQU $
PSR A
LAD SPHEX
BSR ARLSE
PLR A
RQST SEMLOC < LE DEMANDEUR SE MET EN ATTENTE
< DE DELOCATION DE LA DCT.
JMP E137 < LA DCT VIENT D'ETRRE DELOUEE, ESSAYONS
< DE L'AVOIR...
<
< CAS OU LA DCT EST SOIT LIBRE, SOIT LE DEMANDEUR EST LE LOCATAIRE :
<
E136: EQU $
LA NSPTYP < (A)=NSPTYP DE LA DEMANDE.
TBT ENFILE < LA DEMANDE EST-ELLE DEJA EN
< FILE D'ATTENTE (CELLE-CI OU UNE
< AUTRE...).
JNC E807 < NON, C'EST BON.
BSR ASYSER < E R R E U R S Y S T E M E ...
PSR A
LAD SPHEX < (A)=ADRESSE DU SEMAPHORE 'SPHEX'.
BSR ARLSE < SORTONS DE LA PHASE CRITIQUE...
WAIT WEIO < AU RETOUR DU DEBUG ON ATTEND
< QUE LA DEMANDE NE SOIT PLUS EN
< FILE ; UNE AUTRE SOLUTION POURRAIT
< ETRE DE SORTIR DE CHAND, PAR
< UN 'RLSE SPHEX', UN 'PLR
< A,B,X,Y,L' ET UN 'RSR'...
PLR A
RQST SPHEX < RE-RENTRONS EN PHASE CRITIQUE...
E807: EQU $
SBT ENFILE < MAINTENANT LA DEMANDE EST
< DANS CETTE FILE D'ATTENTE.
STA NSPTYP < MAJ DU NSPTYP DE LA DEMANDE.
STB ARGDEM+ETADEM < MEMORISATION DU NSP DU DEMAN-
< DEUR DANS L'ETADEM.
LA &NS < (A)='NS' DE LA TACHE DEMANDEUSE,
SWBR A,A < ET CADRAGE TOUT EN CLEARANT
< L'OCTET DROIT...
STA WEIO < INITIALISATION EVENTUELLE DU
< SEMAPHORE DE LA DEMANDE AVEC LE 'NS'
< DU DEMANDEUR (DONC CELUI QUI RISQUE DE
< FAIRE UN 'ACT' DESSUS...) ; ON PROCEDE
< A CETTE INITIALISATION, AFIN QUE DANS
< 'HANDLR', LORSQU'ON VISUALISE L'ACTIVITE
< DU SYSTEME, ON RETROUVE LE DEMANDEUR (EN
< EFFET, 'ETADEM' N'EST PAS TOUJOURS COR-
< RECT...).
< ON A DONC ICI :
< (X)=NSP DE LA DEMANDE,
< (W)=ADRESSE DE LA DEMANDE,
< (L)=ADRESSE DE LA 'DCT' DU HANDLER DEMANDE.
< (Y)=ADRESSE DE LA DEMANDE.
<
< T R A C E D U S Y S T E M E :
<
LR X,A < (A)=NSP DE LA DEMANDE & BIT0(A)=K.
BSR ATRACE
<
< M I S E E N F I L E D ' A T T E N T E :
<
LA TETE < ACCES A LA TETE DE LA FILE
< D'ATTENTE SUR CE HANDLER.
JANE E1 < LA FILE D'ATTENTE N'EST PAS VIDE
<
< CAS D'UNE FILE D'ATTENTE VIDE :
<
STY TETE < LA DEMANDE EST MISE EN TETE.
E3: EQU $
STY QUEUE < LA DEMANDE EST MISE EN QUEUE,
< DANS 2 CAS :
< - LA DEMANDE N'EST PAS PRIORITAIRE,
< - LA FILE EST VIDE (QUE LA
< DEMANDE SOIT OU NE SOIT PAS PRIO-
< -RITAIRE).
E5: EQU $
STA NEXT < ON CONSTITUE LE CHAINAGE DE CETTE
< CETTE DEMANDE DANS LA FILE D'ATTENTE
< SOIT AVEC 0, SI ELLE EST MISE
< EN QUEUE, SOIT AVEC LE 2EME
< MAILLON SI ELLE EST PRIORITAIRE.
E7: EQU $
LAD SPHEX
BSR ARLSE
LAD SCHVID
BSR ARLSE < AVERTISSEMENT DU HANDLER
IC HSTATS < COMPTAGE MODULO '10000 DES
< DEMANDES DE SERVICE ADRESSEES
< A CE HANDLER.
< A NOTER QUE CE COMPTAGE N'A PAS
< BESOIN D'ETRE FAIT DANS LA
< PHASE CRITIQUE PROTEGEE PAR
< LE SEMAPHORE SPHEX, PUISQU'IL
< S'AGIT D'UNE ACTION NON
< INTERRUPTIBLE !!!!
ARM NSNSP0,X < ARMEMENT (SI CE N'EST DEJA FAIT)
< DU HANDLER DE NIVEAU NSNSP0+(X).
<
< T R A C E D U S Y S T E M E :
<
LR X,A < (A)=NSP DE LA DEMANDE.
SBT XTRACH < BIT0(A)=1.
BSR ATRACE
PLR Y,L < A CAUSE DU MICRO-CANAL.
PLR A,B,X < A CAUSE DU MICRO-CANAL.
RSR
<
< CAS D'UNE FILE D'ATTENTE NON VIDE :
<
E1: EQU $
PSR A,W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE
< COURANTE ('W'), ET DE CELLE DE LA
< DEMANDE DE TETE ('A').
LR A,W < (W)=ADRESSE DE LA DEMANDE DE TETE.
LA MEMV
TBT XBTOVI < FAUT-IL DETECTER LES DEMANDES BLOQUANTES
< SUR LES VISUS ???
JNC E1X1 < NON...
LR X,A < OUI, (X)=A='NSP' DEMANDE,
CPI NSPVI0 < EST-CE UNE VISU ???
JL E1X1 < NON...
CPI NSPVIN < EST-CE UNE VISU ???
JG E1X1 < NON...
<
< CAS D'UNE VISU DEMANDEE :
<
LA NSPTYP < (A)='NSPTYP' DE LA DEMANDE DE TETE,
TBT ACTIF < EST-ELLE ACTIVE ???
JNC E1X2 < NON...
XXTOVI:: VAL 2 < TIME OUT ARBITRAIRE DE DETECTION DES
< DEMANDES BLOQUANTES SUR LES VISUS.
IF XXTOVI-W,,,XEIF%
IF ATTENTION : 'XXTOVI' EST MAUVAIS !!!
XEIF%: VAL ENDIF
<
< CAS OU LA DEMANDE DE TETE EST ACTIVE :
< 'HANDLR' EST DONC EN TRAIN DE LA TRAITER,
< IL A DONC SAUVEGARDE LA VALEUR INITIALE
< DE 'TESTO', ON PEUT DONC ALLEGREMENT
< ECRASER CELUI-CI...
<
LAI XXTOVI
STA TESTO < LUI AUSSI A CAUSE DU SYSTEME D'ITERA-
< TION DES SERVICES SUR ERREUR,
STA TIMOUT < AINSI ON VA DETECTER UN TIME-OUT...
JMP E1X1 < ET C'EST TOUT...
<
< CAS OU LA DEMANDE DE TETE N'EST PAS ACTIVE :
< DONC 'HANDLR' N'A PAS SAUVEGARDE 'TESTO' DANS
< SA PHASE CRITIQUE ; SI CELUI-CI EST NON NUL
< ON N'A RIEN A FAIRE, DANS LE CAS CONTRAIRE
< ON LE FORCE AVEC UNE VALEUR NEGATIVE, DEMANDANT
< AINSI A 'HANDLR', EN FIN DE TRAITEMENT DE
< CETTE DEMANDE DE TETE, UNE REINITIALISATION
< NULLE DE 'TESTO'...
<
E1X2: EQU $
CPZ TESTO < COMMENT EST 'TESTO' ???
JNE E1X1 < DEJA POSITIONNE, DONC RIEN A FAIRE...
LAI -XXTOVI < NULLE, ON VA DONC FORCER -XXTOVI QUI EST
STA TESTO < UNE VALEUR NEGATIVE AFIN QUE 'HANDLR'
< L'EMPILE, PUIS LORS DU DEPILEMENT, LE
< REINITIALISE A 0...
<
< FIN DE CETTE DETECTION :
<
E1X1: EQU $
PLR A,W < RESTAURATION :
< (W)=ADRESSE DE LA DEMANDE COURANTE,
< (A)=ADRESSE DE LA DEMANDE DE TETE.
<
< DISCRIMINATION DU TYPE DE LA DEMANDE COURANTE :
<
LB NSPTYP < ACCES AU TYPE DE LA DEMANDE.
TBT PRIO+NBITMO < TEST DU MODE PRIORITAIRE.
JC E6 < LE MODE EST PRIORIATAIRE.
<
< CAS OU LE MODE EST NON PRIORITAIRE :
< LA DEMANDE EST MISE EN QUEUE DE LA FILE D'ATTENTE :
<
LA QUEUE < ACCES A LA QUEUE DE LA FILE D'ATTENTE.
XR W,A < 'W' POINTE LA DEMANDE DE QUEUE.
STY NEXT < LA DEMANDE COURANTE EST MISE A
< LA SUITE DE LA QUEUE.
XR W,A < RESTAURE (W)=@DEMANDE.
STY QUEUE < LA DEMANDE COURANTE DEVIENT LA
< NOUVELLE QUEUE.
STZ NEXT < DONT LE NEXT EST EVIDEMMENT
< NUL PUISQU'ON LA MET EN QUEUE.
JMP E7
<
< CAS DU MODE PRIORITAIRE :
<
E6: EQU $
<
<
< LA TETE DE LA CHAINE EST TOUJOURS CONSIDEREE COMME
< LA DEMANDE LA PLUS PRIORITAIRE PUIQU'ELLE EST ACTIVE.
< CECI ETANT DIT, LA DEMANDE COURANTE PRIORITAIRE EST MISE
< APRES LA DERNIERE DEMANDE PRIORITAIRE DE LA CHAINE. CECI
< A POUR BUT D'EVITER DES INVERSIONS DANS
< LE SEQUENCEMENT DES OPERATIONS (CF. LES E/S PRIORITAIRES
< SUR DK1)...
<
< ON A ICI :
< - (A)=TETE DE LA CHAINE,
< - (W)=Y=DEMANDE COURANTE A CHAINER.
<
<
LR A,W < INITIALISONS W SUR LA TETE DE CHAINE.
E190: EQU $
LA NEXT < ACCES AU NEXT DE LA DEMANDE (W).
JAE E191 < ON EST EN BOUT DE CHAINE :A=K.
XR A,W < W BASE LA DEMANDE SUIVANTE, ET
< CECI POUR SAVOIR SI ELLE EST PRIORITAIRE
< PRIORITAIRE...
LB NSPTYP
TBT PRIO+NBITMO < LA DEMANDE NEXT EST-ELLE PRIORI-
< TAIRE...
JC E190 < OUI, IL FAUT LA DEPASSER...
<
< CAS OU ON A TROUVE UNE DEMANDE
< NON PRIORITAIRE DANS LA CHAINE :
<
XR A,W < (A)=1ERE DEMANDE NON PRIORITAIRE,
< (W)=DERNIERE DEMANDE PRIORITAIRE.
E191: EQU $
STY NEXT < ON CHAINE LA DEMANDE ARG. DE
< CHAND SUR LA DERNIERE DEMANDE
< PRIORITAIRE RENCONTREE (W).
LR Y,W < (W)=DEMANDE ARG. DE CHAND.
JAE E3 < CAS OU LA DEMANDE PRIORITAIRE A
< ETE INSEREE EN DERNIERE
< POSITION DANS LA CHAINE.
JMP E5 < AUTRES CAS : LA DEMANDE ARG. EST
< DANS LA CHAINE.
< ON A ICI :
< - (Y)=W=DEMANDE ARG. DE CHAND,
< - (A)=LA DEMANDE QUI DEVIENDRA SA SUIVANTE.
PAGE
<
<
< M I S E D ' U N E D E M A N D E E N F I L E
< D ' A T T E N T E A V E C P A S S A G E
< P R E L I M I N A I R E S U R L A P A G E 0 :
<
<
< FONCTION :
< CE MODULE A ETE RAJOUTE
< A CAUSE DU SWAPPING IN/OUT ;
< EN EFFET, LORS DES ACCES DES
< UTILISATEURS A 'DKU', C'EST LA
< 'CDA' COURANTE (EN GROS...) QUI
< EST MISE DANS (SLO,SLE) ; OR SI
< CET UTILISATEUR EST SWAPPE SUR
< 'DKF' (PARCE QUE SON 'IDESC' EST
< GRAND, OU BIEN LORS D'UN CHARGEMENT DE
< PROCESSEUR), ALORS 'DKF' RECEVRA COMME
< ADRESSE DE PAGE POUR LE SWAPPING,
< EN FAIT LA 'CDA' DE CET UTILISATEUR,
< ET LE SWAPPING NE SE FERA PAS
< AVEC LA MEMOIRE BASSE, D'OU CE
< MODULE QUI REPOSITIONNE TEMPO-
< RAIREMENT SUR LA PAGE0...
<
<
< ARGUMENT :
< (L)=ADRESSE DE LA 'DCT' RECEPTRICE,
< (W)=ADRESSE DE LA DEMANDE.
<
<
CHAND0: EQU $
<
< SAUVEGARDES DIVERSES :
<
PSR A,B
CALL #SISP CMS5 PSRSLO#
<
< PASSAGE SUR LA PAGE0 :
<
CALL #SISP CMS5 PAGE0#
<
< ENVOI DE LA DEMANDE :
<
BSR ACHAND < MISE DE LA DEMANDE COURANTE (W) DANS
< LA FILE D'ATTENTE DE LA 'DCT' (L)...
<
< RESTAURATIONS ET RETOUR :
<
CALL #SISP CMS5 PLRSLO#
PLR A,B
RSR < OUF...
PAGE
<
<
< A T T E N T E D E F I N D E S E R V I C E
< E T T E S T D E S C O N D I T I O N S D E
< R E T O U R :
<
<
< FONCTION :
< CETTE ROUTINE SE MET EN ATTENTE DE FIN
< SERVICE, PUIS TESTE LES CONDITIONS DE
< RETOUR, ET FAIT S'IL Y A LIEU UNE 'SYSER'.
<
<
< ARGUMENT :
< (W)=ADRESSE DE LA DEMANDE.
<
<
CHANW: EQU $
WAIT WEIO < ATTENTE IMMEDIATE DE FIN DE SERVICE.
CPZ ARGDEM+ETADEM < ENSUITE, REGARDONS SI CELA C'EST BIEN
< PASSE ???
JE CHANW1 < OUI, OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< CETTE ROUTINE ETANT APPELEE DE NOMBREUSES
< FOIS, LE MIEUX EST DE POURSUIVRE CE SOUS-
< PROGRAMME EN PAS A PAS, ET D'ALLER VOIR CE QUI
< EST LE MIEUX...
<
CPZ ARGDEM+ETADEM < POUR PERMETTRE UN TEST EN RETOUR SUR
< LA FACON DONT S'EST DEROULEE LE
< SERVICE...
CHANW1: EQU $
RSR < ET C'EST TOUT...
PAGE
<
<
< R A N G E M E N T F A C U L T A T I F D E L A
< B O X D ' U N E D E M A N D E :
<
<
< FONCTION :
< SI LE BIT VBOX DU NSPTYP DE LA
< DEMANDE COURANTE (W) EST VALIDE (1),
< LA ROUTINE STBOX RANGE LA BOX DE CETTE
< DEMANDE. SI VBOX EST INVALIDE (K),
< CETTE ROUTINE NE FAIT RIEN...
<
<
< ARGUMENTS :
< (W)=ADRESSE DEMANDE COURANTE.
< (X)=VALEUR A DONNER A LA BOX SI CELLE-CI EST VALIDE.
<
<
USE W,DEM0
STBOX: EQU $
PSR A < VAUT MIEUX ETRE TROP PRUDENT !!!
< (PLUTOT QUE DE SE TROUVER
< EMMERDE PLUTARD PAR UN DEBUG
< EPUISANT POUR MOI...)
LA NSPTYP < (A)=NSPTYP DE LA DEMANDE (W).
TBT VBOX < LA BOX DE LA DEMANDE EST-ELLE
< VALIDE ???
JNC NSTBOX < NON, ON NE FAIT DONC RIEN !!!
STX BOX < SI OUI (1), ON RANGE LA BOX
< DE LA DEMANDE COURANTE...
NSTBOX: EQU $
PLR A < C'EST PAS QUE CELA SOIT MARRANT,
< MAIS ON EST BIEN OBLIGE !!!
RSR < ET BIEN VOILA C'EST TOUT...
PAGE
<
<
< N S P D U D E M A N D E U R :
<
<
< FONCTION :
< CETTE ROUTINE RENVOIE DANS A LE NSP
< DU DEMANDEUR (CELUI AYANT FAIT LE
< BSR) ; SI CE DEMANANDEUR EST L'UN
< DES HANDLERS DE SERVICE DES ESCLAVES,
< ON RENVOIE NSPACT.
<
<
< RESULTAT :
< (A)=NSP DEMANDEUR, OU NSPACT.
<
<
CANSP: EQU $
LA &NS < ATTENTION : L'APPEL DE CANSP
< N'EST FAIT QUE PAR DES TACHES
< SOFT ; NS A DONC UN SENS.
ADRI -NSNSP0,A < (A)=NSP DU DEMANDEUR.
<
< TEST SUR LA NATURE DU HANDLER DEMANDEUR DE SERVICE :
<
CPI NSPSER
JL E700 < CE N'EST PAS UN HANDLER DE
< SERVICE-ESCLAVE.
CPI NSPSER+NESCLA
JGE E700
<
< CAS D'UNE DEMANDE PROVENANT D'UN HANDLER DE SERVVICE ESCLAVE :
<
LAI NSPACT < LE NSP UTILISE EST CELUI
< DU NIVEAU D'EXECUTION DES ESCLAVES.
E700: EQU $
JAL E700X1 < POUAHHH, QUELLE HORREUR !!!
CPI NSPIDS < OK, POUR LE BAS, MAIS VALIDONS LA
< BORNE SUPERIEURE...
JLE E700X2 < OK, LE 'NSP' EST BON...
CPI NSPESC < MAIS N'OUBLIONS PAS QUE LA LISTE DES
< 'DCTESC' EST UTILISEE PAR 'DOWN'...
JL E700X1 < ET BIEN NON, C'EST MAUVAIS...
CPI NSPESC+NESCLA
JL E700X2 < OK, LE 'NSP' EST SUPERIEUR OU EGAL
< A 'NSPESC', ET INFERIEUR A 'NSPESC'+
< 'NESCLA'...
E700X1: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE POURQUOI LE MOT 'NS'
< DE LA MEMOIRE EST DETRUIT !!!
<
E700X2: EQU $
RSR
PAGE
<
<
< A D R E S S E D ' U N E D C T :
<
<
< ARGUMENT :
< - (X)=NSP DE LA DCT.
<
<
< RESULTAT :
< - (L)=ADRESSE DCT,
< - (A)=ADRESSE DCT.
<
<
< A T T E N T I O N :
< DETRUIT LE REGISTRE 'A' !!!
<
<
CADCT: EQU $
IF NSPVID-K,,XEIF%,XEIF%
IF ATTENTION : LE TEST SUIVANT EST IDIOT !!!
XEIF%: VAL ENDIF
LR X,A < POUR VALIDER LE 'NSP' :
JAL CADCT1 < HOUAOU, QUELLE HORREUR !!!
CPI NSPLST
JG CADCT1 < DE MIEUX EN MIEUX...
LA &ADCTSY < ACCES A L'@DCT.
JANE SYSR04 < OK.
CADCT1: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX POURRAIT DE METTRE 'DCTTSI'.
< DANS 'A', OU MIEUX ENCORE D'ALLER
< FAIRE DU PAS A PAS POUR VOIR QUI
< EST L'APPELANT...
<
SYSR04: EQU $
LR A,L < @DCT EST MISE DANS L.
RSR
PAGE
<
<
< C A L C U L D E L ' A D R E S S E D ' U N E D C T
< A P A R T I R D ' U N N I V E A U
< D ' I N T E R R U P T I O N G E N E R A L I S E :
<
<
< ARGUMENT :
< (X)=NIVEAU D'INTERRUPTION GENERALISE.
<
<
< RESULTAT :
< (A)=L=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
CBDCT: EQU $
PSR X
LRM L
WORD DCTIT < (L)=ADRESSE DE LA TABLE DES CORRESPON-
< DANCES : NIVEAU D'IT --> 'NSP'.
ADR X,L < (L)=ADRESSE DE L'ENTREE ASSOCIEE AU
< NIVEAU (X),
LX O,L < (X)='NSP' ASSOCIE,
BSR ACADCT < ET : (A)=(L)=ADRESSE DE LA 'DCT' ASSOCIEE
PLR X
RSR
PAGE
<
<
< A G E N C E D E S D C T :
<
<
< PHILOSOPHIE :
< CE SYSTEME VA PERMETTRE A UNE TACHE DE LOUER
< UNE DCT, C'EST-A-DIRE D'EN INTERDIRE L'ACCES
< AUX AUTRES TACHES. L'INTERET EN EST EVIDENT :
< PERMET D'EXCLURE DES PHASES CRITIQUES COMPLEXES,
< MAIS PERMET AUSSI D'EVITER QUE DES LISTINGS NE
< SE MELANGENT...
< MAIS UNE AUTRE APPLICATION PEUT ETRE TROUVEE :
< TOUS LES SERVICES DU MONITEUR ETANT ACCEDES
< COMME DES PERIPHERIQUES, PAR L'INTERMEDIAIRE
< DE DCT, IL VA DONC ETRE POSSIBLE DE LES RESERVER
< A UNE TACHE DONNE. ON POURRA AINSI AVOIR UNE TACHE
< DE REGULATION QUI S) LOUERA LA DCT D'ALLOCATION
< DES BUFFERS POUR DIMINUER LE TAUX D'ENTREES-SORTIES
< OU LOUERA LA DCT D'ALLOCATION DES B4, BLOQUANT
< AINSI L'EXPLOITATION...
<
<
< UNE FOIS QU'UNE DCT EST LOUEE PAR UNE TACHE,
< LES DEMANDES SUR CETTE DCT EMANANT D'AUTRES ATACHES
< SONT MISES EN ATTENTE PAR ORDRE DE PRIORITE,
< JUSQU'A CE QUE LA DCT SOIT DELOUEE. UNE TACHE PEUT ETRE
< ETRE AINSI MISE EN ATTENTE DE DCT SOIT EN
< ENTRANT DANS CHAND, SOIT EN FAISANT ELLE-MEME
< UNE DEMANDE DE LOCATION.
<
<
< F O R M A T D E E T A L O C :
< 1- ETALOC>0 : LA DCT N'EST PAS LOUABLE, ET EST
< CONSIDEREE COMME TOUJOURS PARTAGEABLE.
< 2- DANS LES AUTRES CAS (ETALOC=K INITIALLEMENT),
< LA DCT PEUT ETRE LOUEE :
< BIT0=K : LA DCT N'EST PAS LOUEE,
< BIT0=1 : LA DCT EST LOUEE, ET ON A :
< BIT8-15=NSP LOCATAIRE.
PAGE
<
<
< L O C A T I O N D ' U N E D C T :
<
<
< ARGUMENT :
< - (X)=NSP DE LA DCT DEMANDEE.
< - (B)#0 : ATTENDRE LA DELOCATION DANS LE CAS
< OU LA DCT SERAIT DEJA LOUEE.
< =0 : NE PAS ATTENDRE DANS LE CAS OU
< LA DCT SERAIT DEJA LOUEE.
<
<
< RESULTAT :
< DANS LE CAS OU (B ARGUMENT)=0,
< ON RENVOIE :
< - (B)=K : OK, DCT ALLOUEE AU DEMANDEUR,
< #0 (=ETALOC) : LOCATION IMPOSSIBLE DANS
< DANS L'IMMEDIAT.
<
<
< ATTENTION :
< 'LODCT' MODIFIE EVENTUELLEMENT LA
< TABLE DES ASSIGNATIONS IMPLICITES
< 'TIMPAS' SI LE 'NSP' DEMANDE EST
< CONTENU DANS 'TIMPAS' ; AUQUEL CAS
< IL EST RETIRE JUSQU'A LA DELOCATION...
<
<
USE L,DCT0
LOCDCT: EQU $
PSR A,Y,L,W
BSR ACADCT < MISE DANS L DE L'@DCT DEMANDEE.
E132: EQU $
RQST SPHEX <<<<PHASE CRITIQUE SUR CETTE DCT.
LA ETALOC < ACCES A L'ETAT DE LOCATION
< DE LA DCT DEMANDEE.
IF XETLOC-BITSIG,,XEIF%,
IF ATTENTION : LE BIT 'XETLOC' DOIT ETRE
IF NUL AFIN QUE LES TESTS SUR (A) SOIENT
IF CORRECTS (JAG, JAL,...) !!!
XEIF%: VAL ENDIF
JAG Z261 < LA DCT N'EST PAS LOUABLE, LA
< DEMANDE DE LOCATION EST DONC
< IGNOREE, ET B DEMEURE INCHANGE.
JAE E133 < OK, LA DCT DEMANDEE N'EST
< PAS LOUEE.
<
< CAS OU LA DCT DEMANDEE EST DEJA LOUEE :
<
CPZR B
JE Z260 < LA LOCATION EST DEMANDEE SANS
< ATTENTE, RETOUR AU DEMANDEUR.
IF XXNLOC-K,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST FAUX !!!
XEIF%: VAL ENDIF
<
< DEMANDE AVEC ATTENTE :
<
LAD SPHEX
BSR ARLSE
RQST SEMLOC < MISE EN ATTENTE DE DELOCATION.
JMP E132 < OK, LA DCT VIENT D'ETRE DELOUEE,
< ESSAYONS DE L'AVOIR.
<
< CAS OU LA DCT DEMANDEE EST LIBRE (OU VIENT D'ETRE LIBEREEE) :
<
E133: EQU $
BSR ACANSP < (A)=NSP DU NOUVEAU LOCATAIRE.
SBT XETLOC < POSITIONNEMENT DU BIT DE LOCATION.
STA ETALOC < MAJ ETAT DE LOCATION DE LA DCT.
<
< TEST ET MISE A JOUR EVENTUELLE DE 'TIMPAS' :
<
LR X,Y < (Y)='NSP' QUE L'ON LOUE...
PSR X
LXI K < (X)=INDEX DE PARCOURS DE 'TIMPAS'...
E133X1: EQU $
LA &IMPASS < (A)=ENTREE COURANTE DE 'TIMPASS' :
ANDI XXPAS0
SLRS XYPAS0 < (A)=ETAT INITIAL DE L'ENTREE COURANTE,
CPR A,Y < EST-CE LE 'NSP' LOUE ???
JE E133X2 < OUI...
ADRI D,X < NON, A L'ENTREE SUIVANTE,
LR X,A
CPI LIMPAS < MAIS EXISTE-T'ELLE ???
JNE E133X1 < OUI...
JMP E133X4 < NON, DONC LE 'NSP' QUE L'ON VIENT DE
< LOUER N'EST PAS DANS 'TIMPAS'...
E133X2: EQU $ < CAS OU LE 'NSP' QUE L'ON VIENT DE
< LOUER EST DANS 'TIMPAS' :
LA &IMPASS
ANDI XXPAS1 < (A)=ETAT COURANT DE L'ENTREE COURANTE,
IF XYPAS1-K,,XEIF%,
SLRS XYPAS1
XEIF%: VAL ENDIF
CPR A,Y < A-T'ON BIEN ETAT-INITIAL=ETAT COURANT ???
JE E133X3 < OUI...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< BIEN REGARDER CE QUE CONTIENT L'ENTREE
< COURANTE (X) DE 'TIMPASS'...
<
E133X3: EQU $
IF XXPAS0-MOCG,,XEIF%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
SWBR Y,A < MISE DU 'NSP' EN TETE,
IF XXPAS1-MOCD,,XEIF%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
PSR X < SAUVEGARDE DE L'INDEX D'ACCES A 'IMPASS'.
XR A,X < (A)=INDEX D'ACCES,
CPI NOCMO*LTASGN < DEBORDE-T'IL DE LA TABLE DES ASSIGNATIONS
< DES UTILISATEURS ???
JL E133X5 < NON, IL FAIT DONC UN NON 'NVP'...
ADRI -XXXMOY*NOCMO*LTASGN+W,A
< OUI, ON RENVERSE LA SITUATION EN FAISANT
< LA CORRESPONDANCE SUIVANTE :
< (X)=12 ==> NVP=11 ('0B, DERNIER 'NVP'
< ASSIGNABLE),
< (X)=13 ==> NVP=10,
< (X)=14 ==> NVP=9.
< A NOTER QUE L'ON SAUTE LE NVP=12 ('0C)
< QUI CORRESPOND A LA ZONE SCRATCH DE
< 'DKS' (PAR +W)...
NGR A,A < (A)='NVP' ASSOCIE A (X)...
E133X5: EQU $
XR A,X < ON A DONC ICI DANS 'X' UN 'NVP' ASSOCIE
< A L'INDEX COURANT DANS 'IMPASS' :
< NVP=3, INDEX=3,
< NVP=4, INDEX=4,
< NVP=5, INDEX=5,
< NVP=6, INDEX=6,
< NVP=7, INDEX=7,
< NVP=8, INDEX=8,
< NVP=9, INDEX=9 OU 14,
< NVP=10, INDEX=10 OU 13,
< NVP=11, INDEX=11 OU 12.
ORR X,A < CONCATENATION DU 'NSP' AVEC LE 'NVP'...
PLR X < RESTAURE :
< (X)=INDEX REEL DE 'TIMPASS'...
IF XYPAS1-K,,XEIF%,
IF ATENTION : TOUT CELA EST IDIOT !!!
XEIF%: VAL ENDIF
ORI XMPASI < MISE DU MODE 'NVP',
STA &IMPASS < ET MISE A JOUR DE 'TIMPASS',
< CE QUI A POUR EFFET D'INHIBER
< L'ACCES A CE 'NSP' PAR 'TIMPASS',
< TANT QU'IL EST LOUE...
E133X4: EQU $
PLR X
<
< SORTIE DE L'AGENCE :
<
Z261: EQU $
LAD SPHEX
BSR ARLSE
PLR A,Y,L,W
RSR
<
< RETOUR SANS ATTENTE :
<
Z260: EQU $
LR A,B < ON RENVOIE (B)=ETALOC#0 AU
< DEMANDEUR DE LOCATION POUR
< LUI SIGNIFIER LA LOCATION
< IMPOSSIBLE DANS L'IMMEDIAT.
JMP Z261 < RETOUR IMMEDIAT.
PAGE
<
<
< D E L O C A T I O N D ' U N E D C T :
<
<
< ARGUMENT :
< - (X)=NSP DE LA DCT A DELOUER.
<
<
USE L,DCT0
DELDCT: EQU $
PSR A,Y,L,W
BSR ACADCT < CALCUL DE @DCT.
RQST SPHEX <<<<PHASE CRITIQUE SUR CETTE DCT.
LA ETALOC < ACCES A L'ETAT DE LOCATION DE LA DCT.
< DCT.
JAG E135 < LA DCT N'EST PAS LOUABLE, LA
< DEMANDE DE DELOCATION EST DONC
< IGNOREE.
<
< TEST DU BIT DE LOCATION (BIT 0) :
< (=BIT DE SIGNE DE A : SI A<0, LA DCT EST LOUEE...)
<
JAL SYSR05 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
< DCT NON LOUEE...
<
< QUE FAIRE ???
< LE MIEUX PARAIT DE FAIRE : 'JMP E135'...
<
SYSR05: EQU $
<
< OK, LA DCT ETAIT BIEN LOUEE :
<
BSR ACANSP < (A)=NSP DU DELOCATEUR.
SBT XETLOC < POUR COMPATIBLITE AVEC ETALOC.
CP ETALOC < LE DEMANDEUR DE DELOCATION EST-IL
< BIEN LE PROPRIETAIRE...
JE SYSR06 < OK.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< LE MIEUX PARAIT DE FAIRE : 'JMP E135'...
<
SYSR06: EQU $
<
< OK, C'EST BIEN L'ANCIEN PROPRIETAIRE :
<
STZ ETALOC < DELOCATION DE LA DCT.
LR X,A < (A)=NSP DE LA DCT A DELOUER.
CPI NSPVI0 < EST-CE UNE VISU ???
JL E134X < NON...
CPI NSPVIN < EST-CE UNE VISU ???
JG E134X < NON...
STZ TESTO < OUI, ALORS ON INHIBE A PRIORI
< LES TESTS DE 'TIME-OUT' ; EN EFFET,
< UN UTILISATEUR A LA POSSIBILITE
< D'ACTIVER LE 'TIME-OUT' SUR SA VISU
< (IN/OUT), MAIS AUSSI SUR TOUTE VISU
< QU'IL SE SERA ASSIGNEE ; LORS DE LA
< DESASSIGNATION, IL FAUT DONC INHIBER...
E134X: EQU $
LR X,Y < (Y)='NSP' QUE L'ON DELOUE...
PSR X
LXI K < (X)=INDEX DE PARCOURS DE 'TIMPASS'...
E134X1: EQU $
LA &IMPASS
ANDI XXPAS0
SLRS XYPAS0 < 'NSP'/'NVP' CONTENU DANS L'ENTREE
< COURANTE DE 'TIMPASS',
CPR A,Y < S'AGIT-IL DU 'NSP' QUE L'ON DELOUE ???
JE E134X2 < OUI...
ADRI D,X < NON, A L'ENTREE SUIVANTE,
LR X,A
CPI LIMPAS < SI ELLE EXISTE...
JNE E134X1 < OUI...
JMP E134X4 < NON, RIEN A FAIRE...
E134X2: EQU $ < CAS OU ON A TROUVE LE 'NSP' QUE L'ON
< DELOUE DANS 'TIMPASS' :
SLLS XYPAS0 < MISE DU 'NSP' EN TETE,
PSR X < SAUVEGARDE DE L'INDEX D'ACCES A 'IMPASS'.
XR A,X < (A)=INDEX D'ACCES,
CPI NOCMO*LTASGN < DEBORDE-T'IL DE LA TABLE DES ASSIGNATIONS
< DES UTILISATEURS ???
JL E134X5 < NON, IL FAIT DONC UN NON 'NVP'...
ADRI -XXXMOY*NOCMO*LTASGN+W,A
< OUI, ON RENVERSE LA SITUATION EN FAISANT
< LA CORRESPONDANCE SUIVANTE :
< (X)=12 ==> NVP=11 ('0B, DERNIER 'NVP'
< ASSIGNABLE),
< (X)=13 ==> NVP=10,
< (X)=14 ==> NVP=9.
< A NOTER QUE L'ON SAUTE LE NVP=12 ('0C)
< QUI CORRESPOND A LA ZONE SCRATCH DE
< 'DKS' (PAR +W)...
NGR A,A < (A)='NVP' ASSOCIE A (X)...
E134X5: EQU $
XR A,X < ON A DONC ICI DANS 'X' UN 'NVP' ASSOCIE
< A L'INDEX COURANT DANS 'IMPASS' :
< NVP=3, INDEX=3,
< NVP=4, INDEX=4,
< NVP=5, INDEX=5,
< NVP=6, INDEX=6,
< NVP=7, INDEX=7,
< NVP=8, INDEX=8,
< NVP=9, INDEX=9 OU 14,
< NVP=10, INDEX=10 OU 13,
< NVP=11, INDEX=11 OU 12.
ORR X,A < CONCATENATION DU 'NVP',
PLR X < RESTAURE :
< (X)=INDEX REEL DE 'TIMPASS'...
ORI XMPASI < MISE DE L'INDICATEUR 'NVP',
CP &IMPASS < ET VALIDATION ???
JE E134X3 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< EVALUER LA DIFFERENCE !!!
<
E134X3: EQU $
ANDI XXPAS0 < NE CONSERVONS QUE LE 'NSP' EN ETAT
< INITIAL,
ORR Y,A < QUE L'ON REMET EN ETAT COURANT...
STA &IMPASS < ET MISE A JOUR DE 'TIMPASS'...
E134X4: EQU $
PLR X
<
< DEBLOCAGE DES TACHES EN ATTENTE SUR CETTE DCT, SOIT DANS CHAND
< SOIT DANS LOCDCT :
<
E134: EQU $
LA SEMLOC
< A NOTER QUE LE 'BETA' DE SEMLOC NE PEUT JAMAIS ETRE STRICTEMENT
< POSITIF SUR 8 BITS... IL NE PEUT ETRE QUE NUL OU NEGATIF (SUR 8 BITS)...
JAE E135 < AUCUNE TACHE N'EST EN ATTENTE.
< CAS 'BETA'<0 :
LAD SEMLOC
BSR ARLSE < DEBLOCAGE
JMP E134 < SUIVANT...
E135: EQU $
LAD SPHEX
BSR ARLSE
PLR A,Y,L,W
RSR
PAGE
<
<
< H A N D L E R G E N E R A L R E E N T R A N T :
<
<
< DEFINITION :
< 'HANDLR' EST UN MODULE
< REENTRANT DEFINISSANT CE QUE
< L'ON A APPELE "PROLOGUE"-"EPILOGUE"
< DES TACHES, ET QUI CORRESPOND EN
< GROS A LA PARTIE FIXE DES 'DCT'.
< SON ROLE PRINCIPAL, ET DE PRENDRE
< LA DEMANDE DE TETE DE LA FILE D'AT-
< TENTE, DE LANCER SON TRAITEMENT PAR
< LE MODULE SPECIFIQUE 'ES', PUIS A
< ENTREPRENDRE UNE ACTION DE FIN DE
< SERVICE (EN PARTICULIER DECHAINAGE
< DE LA DEMANDE DE TETE...).
<
<
< NOTAS IMPORTANTS :
< 1 - LES PHASES CRITIQUES ENTRE
< TACHES SOFTWARES ET TACHES HARDWARES
< NE POURRONT ETRE EXCLUES QUE PAR
< MASCAGE DES INTERRUPTIONS, PUIS-
< QU'UNE TACHE HARDWARE NE PEUT
< UTILISER LES 'P-OP' ('RQST' ET
< 'WAIT') SUR SEMAPHORES.
< 2 - LES ATTENTES D'INTERRUPTIONS
< DE FIN D'ECHANGE (POUR LES TACHES
< PERIPHERIQUES) SONT A LA CHARGE
< DES MODULES SPECIFIQUES RELAYES
< PAR 'ES'.
<
<
< ARGUMENT :
< (L)=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
USE L,DCT0
USE W,DEM0
HANDLR: EQU $
<
< T E S T D E D E S A R M E M E N T :
<
< PHILOSOPHIE :
< ON A LA POSSIBILITE DE DESARMER
< UN HANDLER A SON POINT D'ENTREE,
< AVANT TOUTE OPERATION FAISANT
< INTERVENIR SON NIVEAU ; ON PEUT
< DONC AINSI PERMUTER LE NIVEAU DE 2
< HANDLERS EN POSITIONNANT LE BIT0
< DE LEUR SPHEX RESPECTIF. EN EFFET
< LA PERMUTATION DES NIVEAUX NE PEUT
< SE FAIRE LORSQUE LES TACHES SONT DEJA
< BLOQUEES SUR DES SEMAPHORES.
< POUR SAVOIR SI UN HANDLER S'EST
< DESARME, IL SUFFIT DE REGARDER
< SON REGISTRE 'P' DANS SA DCT ; IL
< DOIT ALORS POINTER SUR LE 'QUIT'+1.
<
PSR A
LA BITSEM
TBT B0SPHX < TEST DU "BIT0(SPHEX)"
PLR A
JNC Z702 < CAS DU FONCTIONNEMENT NORMAL.
<
< D E S A R M E M E N T D U H A N D L E R :
<
QUIT
JMP HANDLR < LORS DU REARMEMENT DU HANDLER
< (EN GENERAL PAR 'NSPUP' DANS
< LE HANDLER HORLOGE), ON FAIT
< UN RE-RENTREE DANS LE HANDLER.
< N O T A : ON DOIT D'ABORD
< FAIRE :
< BIT0(SPHEX) <-- 0, PUIS :
< NSPUP <-- NSP(HANDLER) !!!!
< (ET RELAI...)
<
< F O N C T I O N N E M E N T N O R M A L :
<
Z702: EQU $
RQST SCHVID < LE HANDLER SE MET EN ATTENTE DE
< DE REMPLISSAGE DE CHAINE.
E204: EQU $
RQST SPHEX <<<<PHASE CRITIQUE
LBI NIL-ZERO < INITIALISATION : PAS DE DEMANDE
< PRECEDENTE.
LA TETE < INITIALISATION (A)=DEMANDE DE TETE.
E202: EQU $
JAE E200A < ON A EXPLORE TOUTE LA FILE D'ATTENTE
< SANS TROUVER DE DEMANDE NON
< DIFFEREE, RETOURNONS ATTENDRE
< UN REVEIL PAR CHAND.
< A NOTER QUE CE N'EST PLUS UNE ERREUR SYST
< SYSTEME...
LR A,W < (W)=DEMANDE COURANTE.
BSR FILTRE < LA DEMANDE COURANTE (W) EST-ELLE DIFFEREE
< DIFFEREE...
JAE E203 < NON, LA DEMANDE N'EST APS DIFFEREE
< ALLONS DONC LA TRAITER...
<
< CAS D'UNE DEMANDE DIFFEREE,
< ON LA SAUTE :
<
LA NEXT < ACCES DEMANDE SUIVANTE.
LR W,B < MEMORISATION DE LA DEMANDE
< PRECEDENTE DANS B.
JMP E202
<
< TRAITEMENT DES DEMANDES NON DIFFEREES :
<
E203: EQU $
<
< ON A DONC ICI :
< - (W)=DEMANDE COURANTE,
< - (B)=DEMANDE PRECEDENTE (OU 0 SI W EST LA TETE ),
<
LA TESTO
PSR A,B < SAVE (A)='TESTO', ET (B)=ADRESSE DE LA
< DEMANDE PRECEDENTE...
LA NSPTYP < ACCES AU TYPE.
SBT ACTIF < MEMORISATION DU FAIT QUE LA DEMANDE
< EST EN COURS DE TRAITEMENT.
RBT TERMIN < RAZ DU BIT 'DEMANDE TERMINEE'.
RBT BACT < A PRIORI, ON FERA L'ACT DE
< FIN DE SERVICE.
STA NSPTYP
<
< T R A C E D U S Y S T E M E :
<
BSR ATRACE < (A)=NSPTYP & 'DEMANDE EN COURS DE
< TRAITEMENT'.
PSR A
LAD SPHEX
BSR ARLSE
<
< ON A DONC ARRIVE ICI :
< - (W)=ADRESSE DE LA DEMANDE A TRAITER,
< - (L)=ADRESSE DE LA 'DCT'.
<
LA ARGDEM+OPDEM < (A)='OPDEM' DE LA DEMANDE,
ANDI MKOPDM < DONT ON EXTRAIT LA FONCTION...
XWOR%1: VAL MKOPDM=K
IF XWOR%1-K,,XEIF%,
SLRS XWOR%1 < (CADRAGE EVENTUEL...)
XEIF%: VAL ENDIF
LR A,X < (X)=FONCTION COURANTE VALIDEE,
PLR A < RESTAURE : (A)='NSPTYP' DE LA
< DEMANDE...
LB DCTFON < (B)=LISTE DES FONCTIONS RECONNUES.
CPZR B < EST-CE 'XXDCTF' ???
JE E560XX < OUI, PAS DE TEST DE VALIDITE...
IF XXDCTF-K,,XEIF%,
IF ATTENTION : CE QUI PRECEDE EST IDIOT !!!
XEIF%: VAL ENDIF
XR A,X < POUR VALIDER LA FONCTION (X)...
CPI FINEX < VALIDATION SUPERIEURE ???
JL E203X1 < OK...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< IL Y A TROP DE FONCTIONS, IL
< FAUT DONC METTRE L'INDICATEUR
< 'FINEX' AILLEURS, ET PAR EXEMPLE
< DANS 'BITSEM' !!!
<
E203X1: EQU $
XR A,X < RESTAURATIONS...
TBT NBITMO+L,X < LA FONCTION DEMANDEE EST-ELLE VALIDE ???
JC E560XX < OUI, OK...
STB ETAT0 < NON, ALORS 'DCTFON' --> CODE-ERREUR !!!
JMP E562 < ET ON ARRETE LA...
HBNDLR: JMP HANDLR < RELAI...
E200A: JMP E200 < RELAI...
E204A: JMP E204 < RELAI...
E560XX: EQU $
E560X: EQU $
LX NTRIES < CHARGEMENT DANS X DU NOMBRE
< D'ESSAIS MAX SUR LE HANDLER.
CPZR X < ON PEUT EN FAISANT NTRIES=K,
< INHIBER TEMPORAIREMENT UN
< SERVICE ; LE HANDLER SPECOIFIQUE
< N'EST PAS APPELE DANS CE CAS.
JE E562 < LE SERVICE EST INHIBE, PAS
< D'APPEL DU HANDLER SPECOFIQUE.
JG SYSR07 < OK, PAS D'INHIBITION.
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< PEUT ETRE 'JMP E560X', AU CAS
< OU 'NTRIES' AURAIT ETE MODIFIE
< A LA MAIN...
<
SYSR07: EQU $
<
< G E N E R A T I O N D E ( S L O, S L E ) P A R
< R A P P O R T A L A T A C H E D E M A N D E U S E :
<
PSR A,B
LA DCTFUP
CPI NOSOSE < DOIT-ON INITIALISER (SLO,SLE) EN
< FONCTION DE LA DEMANDE ARGUMENT ???
RDOE
LR A,Y < NON, A PRIORI, ON MEMORISE LE 'SLO'
< INITIAL DANS 'Y'...
LRM A
WORD XMDSLO
AND ARGDEM+OPDEM < (A)=NUMERO DE PAGE DE 32K NON CADRE...
JE E560X1 < ET BIEN NON, IL NE FAUT PAS TOUCHER
< A (SLO,SLE)...
< (A NOTER QUE 'A' ET 'Y' SONT BONS...)
PSR A < SAUVEGARDE DU NUMERO DE PAGE DE 32K...
SLRS XDDSLO < (A)=NUMERO DE LA PAGE DE 32K A LAQUELLE
< APPARTIENT LE 'SLO' DE L'APPELANT,
LR A,B
ADRI ASLO32,B < ET GENERATION DANS 'B' D'UN NUMERO
< DE PAGE DE 32K POUR UN 'SLE', TEL QUE
< LA DISTANCE (SLE)-(SLO) SOIT MAXIMALE...
SLLD XSLO32 < CONVERSION DE 'A' ET 'B' EN DES
< ADRESSES DE FADR-MOTS,
ADRI -E,B < AINSI, LE COUPLE (SLO,SLE) EST MAXIMAL...
WOE < ET AINSI, ON INITIALISE 'SLO' ET 'SLE',
< EN FONCTION DU 'SLO' DU DEMANDEUR...
LR A,Y < (Y)=SAUVEGARDE DU 'SLO' QUE L'ON VIENT
< DE GENERER...
PLR A < RESTAURE : (A)=NUMERO DE PAGE DE 32K,
E560X1: EQU $
EOR ARGDEM+OPDEM < QUE L'O SUPPRIME,
STA ARGDEM+OPDEM < EN EFFET, CERTAINS HANDLERS UTILISENT
< 'OPDEM' COMME INDEX !!!
PLR A,B
<
< B O U C L E D ' I T E R A T I O N D U S E R V I C E :
<
E560: EQU $
PSR X < & SAVE IT...
<
< P R E P A R A T I O N D E S T I M E D O U T :
<
LR A,B < (B)=SAVE LE 'NSPTYP',
LA TESTO < (A)=VALEUR INITIALE DU DECOMPTEUR DE
< TIME-OUT,
JAE Z1260Y < OK, PAS DE TEST DE TIME OUT...
JAG Z1260A < OK, TIME OUT NORMAL...
NGR A,A < ON PREND LA VALEUR ABSOLUE DE CE DETEC-
< TEUR POSITIONNE PAR 'CHAND' ALORS QUE
< CETTE DEMANDE DE TETE N'ETAIT PAS ENCORE
< ACTIVE...
Z1260A: EQU $
CPI W < LE DECOMPTEUR EST-IL VALIDE ???
JG Z1260X < OUI, IL FAUT QU'IL SOIT STRICTEMENT
< SUPERIEUR A 1, CAR SINON, UNE INTER-
< RUPTION D'HORLOGE VICIEUSE POURRAIT
< FAIRE CROIRE A UN FAUX TIME-OUT...
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< MODIFIER LA VALEUR INITIALE 'A', AINSI QUE
< DANS LA DCT EN CAUSE...
<
Z1260X: EQU $
STA TIMOUT < INITIALISATION DU DECOMPTEUR COURANT.
Z1260Y: EQU $
XR A,B < RESTAURE 'A' ET 'B'...
<
<
< E X E C U T I O N D U S E R V I C E :
<
<
PSR Y < ET ON SAUVEGARDE LE 'SLO'... (POUR DES
< VERIFICATIONS ULTERIEURES).
<
< EXECUTION DU SERVICE PROPREMENT DIT :
<
< ON A ICI :
< (A)=NSPTYP,
< (Y)=SLO (EMPILE AUSSI...).
<
BSR ES < APPEL DU HANDLER SPECIFIQUE.
<
< VALIDATION DU (SLO,SLE) EN RETOUR :
<
PLR Y < RESTAURE : (Y)='SLO' POSITIONNE EN DEBUT
< DE SERVICE...
PSR A,B
RDOE < ACCES A (A,B)=(SLO,SLE) EN FIN DE SERVICE
CPR A,Y < SLO(AVANT) VAUT-IL SLO(APRES) ???
JNE Z1260N < NON, IL Y A QUELQUE CHOSE !!!
ADRI E,B
SLRD XSLO32 < RECONVERSION EN NUMERO DE PAGE DE 32K,
SBR B,A < (A)=(SLO)-(SLE) EN NUMERO DE PAGE DE 32K,
CPI -ASLO32 < EST-CE BIEN UN COUPLE (SLO,SLE)
< GENERE PAR PAGE DE 32K ???
JE Z1260M < OUI, OK...
Z1260N: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< COMPRENDRE OU (SLO,SLE) ONT ETE MODIFIES
< SANS ETRE RESTAURES !!!
<
LR Y,A < (A)='SLO' ATTENDU,
SLRS XSLO32 < RECONVERSION EN UN NUMERO DE PAGE
LR A,B < DE 32K,
ADRI ASLO32,B < ET GENERATION D'UN FUTUR 'SLE' MAX...
SLLD XSLO32 < MISE AU FORMAT FADR-MOTS...
ADRI -E,B < (A,B)=COUPLE (SLO,SLE) MAXIMUM,
WOE < ET ON RESTAURE (SLO,SLE)... A NOTER
< QUE L'ON NE PEUT UTILISER 'OPDEM' POUR
< CELA, CAR IL EST DES HANDLERS QUI LE
< MODIFIE ('VIS', 'SGN',...).
Z1260M: EQU $
PLR A,B
<
< I T E R A T I O N E V E N T U E L L E :
<
PLR X < RESTAURE NBRE D'ESSAIS RESTANT
< EVENTUELLEMENT A FAIRE.
JDX E561 < ALLONS VOIR SI L'ON DOIT FAIRE
< LES ESSAIS RESTANT.
E562: EQU $
<
< LORSQU'ON ARRIVE ICI, C'EST QUE
< TOUS LES ESSAIS (1 EN GENERAL) ONT ETE TENTES.
<
RQST SPHEX <<<<PHASE CRITIQUE
LRM A
WORD XMDSLO)MMOT
AND ARGDEM+OPDEM
STA ARGDEM+OPDEM < ON CLEAR 'XMDSLO' AFIN DE VERIFIER
< QUE CE CHAMP N'EST PAS UTILISE AILLEURS !
LA NSPTYP
SBT TERMIN < INDIQUONS AINSI QUE LA DEMANDE
< EST EXECUTEE.
RBT ACTIF < LA DEMANDE N'EST PLUS EN COURS
< DE TRAITEMENT.
RBT ENFILE < LA DEMANDE N')ST PLUS EN
< FILE D'ATTENTE.
STA NSPTYP
<
< T R A C E D U S Y S T E M E :
<
BSR ATRACE < (A)=NSPTYP & 'DEMANDE TERMINEE'.
<
< DELETE DE LA DEMANDE COURANTE (W) :
<
PLR A,B < RESTAURE : (A)='TESTO', ET (B)=ADRESSE DE
< LA DEMANDE PRECEDENTE...
JAGE E195X < CAS DE 'TESTO' NORMAL...
LAI K < CAS D'UN 'TESTO' POSITIONNE PAR 'CHAND'
< ET QUI DEMANDE UNE REINITIALISATION...
E195X: EQU $
STA TESTO < RESTAURATION DE 'TESTO'.
LA NEXT < ACCES DEMANDE SUIVANTE (A).
STZ NEXT < RAZ DU CHAINAGE POUR FAVORISER
< LA DETECTION DES ERREURS
< DU SYSTEME (CF. CHAND).
CPZR B < Y-AVAIT-IL UNE DEMANDE PRECEDENTE...
JNE E195 < OUI.
<
< CAS OU LA DEMANDE COURANTE
< ETAIT EN TETE :
<
STA TETE < ALORS, LA DEMANDE SUIVANTE (A)
< DEVIENT LA DEMANDE DE TETE.
E196: EQU $
JANE E197 < IL Y AVAIT EFFECTIVEMENT UNE
< DEMANDE SUIVANTE.
<
< CAS OU LA DEMANDE COURANTE (W) ETAIT EN QUEUE (PAS DE SUIVANTE) :
<
STB QUEUE < LA DEMANDE PRECEDENTE (B) DEVIENT
< LA DEMANDE DE QUEUE.
E197: EQU $
IF OACTIV-EXIST,XEIF%8,,XEIF%8
<
< VISUALISATION DE LA DECONNEXION :
<
PSR X,Y
LA AACTIV < (A)=RELAI D'ACCES A 'ACTIV' :
TBT XACTIV < 'ACTIV' EST-IL ACTIF ???
JNC Z400X1 < NON, INUTILE DE L'APPELER...
LBY WEIO < OUI :
ADRI -NSNSP0,A < (A)='NSP' DU DEMANDEUR (OU EMETTEUR),
< (A NOTER QUE LE SEMAPHORE CONTIENT DANS
< SON OCTET GAUCHE LE 'NS' DE LA TACHE
< DEMANDEUSE MIS SOIT PAR 'CHAND', SOIT
< LA MICRO-MACHINE EN EXECUTANT UN
< 'WAIT' DESSUS...
LR A,X < (X)='NSP' DU DEMANDEUR...
LA &NS < (A)='NS' DE LA TACHE DEMANDEE,
ADRI -NSNSP0,A < (A)='NSP' DU DEMANDE (OU RECEPTEUR),
SWBR A,A
ORR A,X < (X)=(RECEPTEUR/EMETTEUR),
LYI XNGOUT < (Y)=NIVEAU DE GRIS DE DECONNEXION,
BSR AACTIV < ET VISUALISATION DE LA DECONNEXION...
Z400X1: EQU $
PLR X,Y
XEIF%8: VAL ENDIF
<
< ACTION SUR LE DEMANDEUR :
<
LA NSPTYP
TBT BACT < L'ACT DE FIN DE SERVICE DOIT-IL
< ETRE FAIT ?????
JC Z400 < NON, ON LAISSE DON EVENTUELLEMENT
< LE DEMANDEUR EN ATTENTE.
BSR ARVDEM < RENVOI DES CONDITIONS ET
< REVEIL EVENTUEL DU DEMANDEUR.
Z400: EQU $
<
< TEST DE DEBLOCAGE EVENTUEL DE DEMANDES DIFFEREEES :
<
BSR SFLITR
PSR A
LAD SPHEX
BSR ARLSE
PLR A
JANE HBNDLR < NON, IL FAUT METTRE OU MAINTENIR
< LE FILTRE.
<
< CAS OU IL N'Y A PAS OU PLUS DE FILTRAGE ; ALLONS VOIR
< S'IL Y A DES DEMANDES DIFFEREES EN ATTENTE :
<
JMP E204A
<
< CAS OU IL Y AVAIT UNE DEMANDE PRECEDENTE :
<
E195: EQU $
LR B,W < (W)=DEMANDE PRECEDENTE.
STA NEXT < ETABLISSONS LE CHAINAGE DE LA
< DEMANDE PRECDENTE W, VERS LA
< DEMANDE SUIVANTE A.
JMP E196
<
< CAS OU L'ON A TROUVE, SOIT UNE FILE D'ATTENTE
< VIDE, SOIT UNE FILE D'ATTENTE PLEINE DE DEMANDE DIFFEREE,
< ALORS QUE LE FILTRE EST MIS :
<
E200: EQU $
LAD SPHEX
BSR ARLSE
JMP HBNDLR < ALLONS NOUS REMETTRE EN ATTENTE DE
< DE CHAND.
<
< CAS OU IL RESTE DES ESSAIS A TENTER :
<
E561: EQU $
<
< ON A ICI :
< (X)=NBRE D'ESSAIS RESTANT A TENTER.
<
PSR Y < SAUVEGARDE DE 'Y'=(SLO)...
BSR FRETRY < ROUTINE SPECIFIQUE, TESTANT
< S'IL Y A LIEU DE REFAIRE
< UN ESSAI (CF. CAS DES PERIPHERIQUES
< EN DEFAUT,...).
PLR Y < RESTAURE 'Y'=(SLO)...
JAE E562 < OK SI (A)=K.
LR X,A
CPI XXNTRY < SERAIT-CE LE DERNIER ESSAI ???
JE E562 < OUI, ON ABANDONNE...
LA NSPTYP < RESTAURE (A)=NSPTYP AVANT LE RETRY.
JMP E560 < TRY AGAIN.
<
<
< C A S D ' U N S E U L E S S A I :
<
<
TRYVID: EQU $
BSR ASYSER < E R R E U R S Y S T E M E ...
<
< QUE FAIRE ???
< VOIR POURQUOI 'NTRIES' NE VAUT PLUS
< SA BONNE VALEUR DE 'XXNTRY' !!!
<
RSR
PAGE
<
<
< F I N D E S E R V I C E :
<
<
< FONCTION :
< CETTE ROUTINE APPELEE EN SORTIE DE HANDLR
< EVENTUELLEMENT (OU AILLEURS...) A A SA CHARGE
< DE RENVOYER DANS L'ETADEM DE LA DEMANDE,
< L'ETAT0 DU SERVICE ET ENSUITE DE REVEILLER
< EVENTUELLEMENT LE DEMANDEUR (S'IL A FAIT UN
< WAIT !!!).
<
<
< ARGUMENTS :
< (W)=ADRESSE DEMANDE,
< (L)=ADRESSE DCT.
<
<
REVDEM: EQU $
<
< RENVOI DES CONDITIONS D'EXECUTION DE LA DEMANDE AU
< DEMANDEUR EN FIN DE SERVICE :
<
LA ETAT0 < ACCES A ETAT0.
STA ARGDEM+ETADEM < ETAT0 EST MIS DANS LA DEMANDE
< EN RETOUR A L'UTILISATEUR.
<
< REVEIL EVENTUEL DU DEMANDEUR :
<
ACT WEIO < AVERTISSEMENT DU DEMANDEUR.
RSR
PAGE
<
<
< T A C H E D E D I S P A T C H I N G
< D E R E V E I L S U R I N T E R R U P T I O N :
<
<
< DEFINITION :
< UN DISPATCHER 'DISPAT' EST
< ASSEZ SEMBLABLE A UNE TACHE
< 'HANDLR', SAUF QUE 'DISPAT'
< NE DISPOSE PAS DE FILE D'ATTEN-
< TE D'ACCES A SES SERVICES ;
< C'EST LE SEMAPHORE 'SIT' QUI EN
< FAIT OFFICE : 'DISPAT' EST
< TOUJOURS BLOQUE DESSUS, JUSQU'A
< CE QU'UN DEMANDEUR VIENNE FAIRE
< UN 'RLSE' DESSUS...
<
<
< ARGUMENT :
< (L)=ADRESSE DE LA 'DCT' ASSOCIEE.
<
<
DISPAT: EQU $
RQST SIT < ATTENTE D'INTERRUPTION.
CPZ NTRIES
JE DISPAT < LE REVEIL EST IGNORE (LE
< DISPATCHER EST INHIBE), SI
< NTRIES=K.
<
< T R A C E D U S Y S T E M E :
<
LA &NS
ADRI -NSNSP0,A < (A)=NSP DU DISPATCHER.
SWBR A,A < GENERATION D'UN NSPTYP.
SBT ACTIF < ENTREE DANS 'ES'.
BSR ATRACE
PSR A < SAVE 'NSPTYP' FICTIF DU DISPATCHER.
BSR ES < APPEL D'UNE ROUTINE SPECIFIQUE
< DE DISPATCHONG.
<
< T R A C E D U S Y S T E M E :
<
PLR A < RESTAURE NSPTYP FICTIF.
SBT TERMIN
RBT ACTIF
BSR ATRACE
JMP DISPAT < ALLONS ATTENDRE L'IT SUIVANTE
< SUR CE COUPLEUR.
NLS
PAGE
<
<
< C H I F F R A G E D ' U N M O T :
< ( O U " M A G I C A L M Y S T E R Y T O U R " )
<
<
< FONCTION :
< CE MODULE DEFINIT UNE
< TRANSFORMATION 'T' TELLE QUE
< T*T=1 ; ELLE PERMET DONC EN
< L'APPLIQUANT DE CHIFFRER UN MOT HEXA-
< DECIMAL, ET EN LA REAPPLIQUANT
< DE LE DECHIFFRER. ELLE UTILISE
< LA CONSTANTE MAGIQUE...
< D'AUTRE PART POUR DES RAISONS
< DE COMMODITE :
< T(0)=0...
<
<
< ARGUMENT :
< (A)=MOT A CHIFFRER (OU A DECHIFFRER).
<
<
< RESULTAT :
< (A)=MOT CHIFFRE (OU DECHIFFRE).
<
<
CHIFRA: EQU $
PSR B,X,W < SAUVEGARDES DIVERSES ET VARIEES...
LR A,B < (B)=MOT A CHIFFRER (OU DECHIFFRER)...
LAI K < ET CLEAR DE 'A'...
LXI NBITMO/NBITCX < (X)=INDEX DES TOURS A FAIRE...
CHIFR1: EQU $
SCLD NBITCX < (A)=CHIFFRE HEXA COURANT,
LRM W
WORD TCHIFR < (W)=ADRESSE DE LA TABLE DE CHIFFRAGE,
ADR A,W < (W)=ADRESSE DE L'ENTREE RELATIVE AU
< CHIFFRE COURANT QUE L'ON CODE (OU
< DECODE...),
LA O,W < (A)=VALEUR CODEE DU CHIFFRE COURANT
< CADREE A GACUCHE DANS 'A' SOUS
< LA FORME 'X000, AFIN D'EVITER UN
< DECALAGE 'SLLS NBITMO-NBITCX'...
JDX CHIFR1 < ET AU CHIFFRE SUIVANT...
SCRD NBITMO-NBITCX < (A)=MOT CHIFFRE (OU DECHIFFRE)...
PLR B,X,W < RESTAURATIONS...
RSR < ET RETOUR MAGIQUE...
<
<
< T A B L E D E C H I F F R A G E :
<
<
TCHIFR: EQU $ < TABLE DE CHIFFRAGE :
XWOR%2: VAL NBITMO-NBITCX
NTRN
DO BASE16
WORD K=FCDO)MFFFF+N+BASE16-N*MAGIK/BASE16(K=FCREST>XWOR%2
TRN
LST
Copyright © Jean-François COLONNA, 2011-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2024.