< 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