< S I S C M S 5 12 PAGE PAGE < < < D C T I N E X I S T A N T E : < < DCTTSI: EQU $ PSTTSI: WORD K;K;K;K;COM+DEPCS;DCTTSI;NIL;PILTSI;HANDLR;SMST;SO;SE #@ASCI " TSI" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XXDCTP < 'DCTTSI' N'EST PAS LOUABLE !!! WORD XXLOC0 DZS LSEM WORD NIL WORD NIL WORD XXCHV0 DZS LSEM WORD XXSIT0 DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLTSI WORD HDLTSI WORD K;K < ETAT WORD XBITS0 < BITSEM WORD XXNTRY;TRYVID WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < ZONE VARIABLE : < VARTSI: EQU $ IF VARTSI-DCTTSI-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < PILE : < CALL #SISP CMS5 DOL2# PILTSI: EQU $-DEPILE XWPILE: VAL LPILEH+1 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R D E S T A C H E S < S O F T I N E X I S T A N T E S : < < < A T T E N T I O N : < 'TSI' N'EST PAS UNE TACHE RE-ENTRANTE, < PUISQUE NE POSSEDANT QU'UNE 'DCT' ; OR, < CELLE-CI EST REFERENCEE SOUS PLUSIEURS < NIVEAUX DIFFERENTS. DANS UN CONTEXTE TRES < VERREUX, CELA POURRAIT AVOIR DES CONSE- < QUENCES FACHEUSES SUR LA MISE A POINT !!! < < HDLTSI: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... RSR PAGE < < < T A C H E S H A R D S I N E X I S T A N T E S : < < CALL #SISP CMS5 CHECK# < < < P I L E S : < < LPLTHI:: VAL LPILEH < LONGUEUR DES PILES DE 'THI'... XWPILE: VAL LPLTHI PILTH3: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTH5: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTH7: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTH8: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTH9: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTHA: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTHB: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# PILTHC: EQU $-DEPILE CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# < < < C O D E D E ' T H I ' : < < THI: EQU $ TH03: EQU THI TH05: EQU THI TH07: EQU THI TH08: EQU THI TH09: EQU THI TH0A: EQU THI TH0B: EQU THI TH0C: EQU THI < < < FONCTION : < CETTE TACHE POSSEDE UN PROLOGUE ET < STANDARD, ET UN EPILOGUE. < ENTRE LES DEUX, ELLE BOUCLE SUR UN < APPEL A SYSER QUI BOUCLERA SUR UN < APPEL A TDEFS (PUISQUE LES IT SONT < MASQUEES). < ON POURRA REPARTIR EN PROVOQUANT < UN DEFAUT SECTEUR. < < XWKNIV: VAL NTH0-I < UN QUELCONQUE NIVEAU INEXISTANT < POUR APPELER 'SI CMS5 THDEB' QUI < GENERERA UN PROLOGUE STANDAUD CALL #SISP CMS5 THDEB# BSR ASYSER < E R R E U R S Y S T E M E ... BSR ARRSTF < EPILOGUE. JMP THI < ET C'EST TOUT... PAGE < < < T A C H E H A R D N I V E A U 1 : < < < FONCTION : < CETTE TACHE HARDWARE UN PEU SPECIALE < EST DESTINEE A TRAITER LES INCESSANTS < DEFAUTS SUR LE 'CBM' DE LA TELEVISION < BASSE DEFINITION ATTEINTE PAR LA 'CDAI'... < < XSNCBM:: VAL 6 < NUMERO DU SOUS-NIVEAU D'INTERRUPTION < DU 'CBM' CONNU... LOCTH1: EQU $ < LOCAL NECESSAIRE AU 'CBM' : < < DONNEES D'ACCES AU 'CBM' : < T1ETA2: WORD ACCBM?FPHIN < LECTURE DU MOT D'ETAT2 : XCBMX:: VAL ETAPAR < BIT INDIQUANT UNE MEMOIRE INEXISTANTE, XCBMXL:: VAL ETAVIO < BIT INDIQUANT QUE LA MEMOIRE NE RENVOIE < PAS LES INFORMATIONS DEMANDEES. T1ETA1: WORD ACCBM?FPHETB < LECTURE DU MOT D'ETAT1, T1CMD: WORD ACCBM?FPHCMD < SORTIE D'UNE COMMANDE AU 'CBM'. < < PILE : < CALL #SISP CMS5 CHECK# PILTH1: EQU $-DEPILE XWPILE: VAL LPILTH < LONGUEUR DE LA PILE DE 'TH01'. CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVCBM < NIVEAU DE LA TACHE HARD. CALL #SISP CMS5 THDEB# < < ACCES AU SOUS-NIVEAU EN CAUSE : < ACK < RECHERCHE DES SOUS-NIVEAUX EN ATTENTE : LR X,A CPI XSNCBM < EST-CE LE 'CBM' ??? JE SYSCBM < OUI, C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... JMP CBMOK1 < ET ON SORT TOUT DE SUITE, QUOI FAIRE < D'AUTRE ??? SYSCBM: BSR ASYSER < E R R E U R S Y S T E M E ... < SYSER DES DEFAUTS SUR 'CBM' DE LA 'TV'. < < INITIALISATION DU PROCESSUS : < CALL #SISP CMS5 W TRACE# LAI NPCBM BSR ATRACE < TRACE DU DEFAUT SUR LE 'CBM'... LRM A,B,W WORD SLOCBM < (A)='SLO' SPECIAL DU 'CBM', WORD SLECBM < (B)='SLE' SPECIAL DU 'CBM', WORD LOCTH1 < 'W' BASE LE "LOCAL" DE 'TH01'... WOE < POSITIONNEMENT DE 'SLO' ET 'SLE'. < < TENTATIVE DE CLEAR DU 'CBM' : < CBMNOK: EQU $ < CAS DU 'CBM' EN MANUEL... SIO T1ETA2-LOCTH1,W < LECTURE DU MOT D'ETAT2. LAI CBMDIS SIO T1CMD-LOCTH1,W < ON DISJOINT LE 'CBM'. LAI CBMJON SIO T1CMD-LOCTH1,W < ON JOINT LE 'CBM'. SIO T1ETA2-LOCTH1,W < LECTURE DU MOT D'ETAT2, TBT ETAOPE < LE 'CBM' EST-IL JOINT ET PRESENT ??? JC CBMOK2 < OUI, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < LE 'CBM' DOIT ETRE EN MANUEL... JMP CBMNOK < SI LE 'CBM' EST PRESENT, IL FAUT LE < METTRE EN AUTOMATIQUE... ET RETENTER < LA JONCTION... JMP CBMOK1 < S'IL EST ABSENT, IL FAUT SAUTER LE < 'STAR', GARE AUX ALARMES !!! CBMOK2: EQU $ LA MEMV TBT MEMXXX < DOIT-ON INITIALISER LE FILTRE D'ADRESSE ? JNC CBMOK3 < NON... < OUI : LAI K < (A)=VALEUR ARBITRAIRE... LYI K < (Y)=ADRESSE RELATIVE DANS (SLO,SLE), STAR < ON ECRIT AINSI LE FILTRE D'ADRESSE... CBMOK3: EQU $ SIO T1ETA1-LOCTH1,W < LECTURE DU MOT D'ETAT1 AFIN DE DESARMER < UNE EVENTUELLE INTERRUPTION PUPITRE... SIO T1ETA2-LOCTH1,W < ON RELIT LE MOT D'ETA2 : RBT ETAOPE < A PRIORI, CE N'EST PAS UN DEFAUT... JAE CBMOK1 < EFFECTIVEMENT, TOUT EST BON... SYSCBN: BSR ASYSER < E R R E U R S Y S T E M E ... < SYSER DE DEFAUT RECALCITRANT SUR < LE 'CBM' DE 'TV'. < < ET RETOUR : < CBMOK1: EQU $ BSR ARRSTF < EPILOGUE... JMP TH01 < ET C'EST TOUT... PAGE < < < T A C H E H A R D N I V E A U 2 : < < < FONCTION : < CETTE TACHE HARDWARE UN PEU SPECIALE < EST DESTINEE A TRAITER LES INCESSANTS < DEFAUTS SUR LE 'CBJ' DE LA TELEVISION < MOYENNE DEFINITION ATTEINTE PAR LA 'CDAJ'... < < XSNCBJ:: VAL 6 < NUMERO DU SOUS-NIVEAU D'INTERRUPTION < DU 'CBJ' CONNU... LOCTH2: EQU $ < LOCAL NECESSAIRE AU 'CBJ' : < < DONNEES D'ACCES AU 'CBJ' : < T2ETA2: WORD ACCBJ?FPHIN < LECTURE DU MOT D'ETAT2, T2ETA1: WORD ACCBJ?FPHETB < LECTURE DU MOT D'ETAT1, T2CMD: WORD ACCBJ?FPHCMD < SORTIE D'UNE COMMANDE AU 'CBJ'. < < DONNEES D'ACCES A LA 'CDA' COURANTE : < T2CDO: WORD OCDA < ACCES A L'ORIGINE, T2CDE: WORD ECDA < ACCES A L'EXTREMITE. < < DONNEES NECESSAIRES POUR < SAVOIR S'IL FAUT IGNORER < LES MEMOIRES INEXISTANTES : < T2MEX: WORD MEMINX < ADRESSE DE L'INDICATEUR EN MEMOIRE < DEBANALISEE... < < PILE : < CALL #SISP CMS5 CHECK# PILTH2: EQU $-DEPILE XWPILE: VAL LPILTH < LONGUEUR DE LA PILE DE 'TH02'. CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVCBJ < NIVEAU DE LA TACHE HARD. CALL #SISP CMS5 THDEB# < < ACCES AU SOUS-NIVEAU EN CAUSE : < ACK < RECHERCHE DES SOUS-NIVEAUX EN ATTENTE : LR X,A CPI XSNCBJ < EST-CE LE 'CBJ' ??? JE SYSCBJ < OUI, C'EST BON... BSR ASYSER < E R R E U R S Y S T E M E ... JMP CBJOK1 < ET ON SORT TOUT DE SUITE, QUOI FAIRE < D'AUTRE ??? SYSCBJ: BSR ASYSER < E R R E U R S Y S T E M E ... < SYSER DES DEFAUTS SUR 'CBJ' DE LA 'TV'. < < INITIALISATION DU PROCESSUS : < CALL #SISP CMS5 W TRACE# LAI NPCBJ BSR ATRACE < TRACE DU DEFAUT SUR LE 'CBJ'... LRM A,B,W WORD SLOCBM < (A)='SLO' SPECIAL DU 'CBM', WORD SLECBM < (B)='SLE' SPECIAL DU 'CBM', WORD LOCTH2 < 'W' BASE LE "LOCAL" DE 'TH02'... WOE < POSITIONNEMENT DE 'SLO' ET 'SLE'. < < TENTATIVE DE CLEAR DU 'CBJ' : < CBJNOK: EQU $ < CAS DU 'CBJ' EN MANUEL... SIO T2ETA2-LOCTH2,W < LECTURE DU MOT D'ETAT2. TBT XCBMX < Y-A-T'IL UNE MEMOIRE INEXISTANTE ??? JC CBJNK1 < OUI... TBT XCBMXL < LA MEMOIRE RENVOIE-T'ELLE LES INFORMA- < TIONS DEMANDEES ??? JNC CBJOK4 < OUI, OK... < < CAS DES MEMOIRES INEXISTANTES : < (LE PROBLEME EST DELICAT ; EN < EFFET, L'INTERRUPTION MEMOIRE < INEXISTANTE SUR LE 'CBJ' EST < ASYNCHRONE PAR RAPPORT AU PRO- < GRAMME QUI L'A CAUSEE, ET NE < RESSEMBLE DONC EN RIEN A UNE < TRAPPE ; EN PARTICULIER LA TACHE < INTERROMPUE PAR L'INTERRUPTION < COURANTE PEUT TRES BIEN NE PAS < ETRE CELLE QUI EST LA CAUSE < DE LA MEMOIRE INEXISTANTE, OU < SI C'EST ELLE, SES REGISTRES < NE POINTENT PLUS SUR L'INSTRUCTION < EN COURS ; CE QUE L'ON VA DONC < FAIRE ICI, C'EST ESPERER QUE LA < TACHE EN CAUSE VA REDEMANDER < UN PEU PLUS LOIN LA 'CDAJ', ET < ON VA LUI FORCER UNE VRAIE TRAPPE < EN PERMUTANT 'CDESCO' ET 'CDESCE'... < CE N'EST DONC PAS UN PROCEDE < SUR A CENT POUR CENT... DE PLUS < IL DEMANDE QUE "!CDAJ..." ET < "!ACTIVITE ON" S'EXCLUENT L'UNE < L'AUTRE) < CBJNK1: EQU $ IF XMEMXI-K,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ &T2MEX-LOCTH2,W < PEUT-ON IGNORER CETTE ALARME ??? JE CBJOK4 < OUI, DONC ON NE VA PAS TENTER DE TRANS- < METTRE LA TRAPPE A L'UTILISATEUR... PSR X,W < SAUVEGARDE DE LA BASE D'ACCES AUX ARGU- < MENTS DU 'CBJ'... LXI NESCLA-Z < POUR INDEXER LES UITILISATEURS : < (X)='IDESC'... CBJNK2: EQU $ LA &ATBU < (A)=ADRESSE DE LA 'DCTESC' D'IDESC=(X), JALE CBJNK3 < L'UTILISATEUR (X) N'EXISTE PAS, OU EST < EN TRAIN DE FAIRE UN LOGOUT... LR A,W < (W)=ADRESSE DE LA 'DCTESC' DE L'UTILISA- < D'IDESC=(X), LA CDESCO-DCTESC,W < (A)=ORIGINE DE SA 'CDA' COURANTE, TBT BMCDAJ < A-TIL LA 'CDAJ' ??? JC CBJNK4 < OUI... CBJNK3: EQU $ ADRI -I,X < DANS LE CAS D'UN UTILISATEUR INEXISTANT, < EN LOGOUT, OU NE POSSEDANT PAS LA 'CDAJ', < ON PASSE A L'UTILISATEUR PRECEDENT... CPZR X < EXISTE-T'IL ??? JGE CBJNK2 < OUI... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < SI AUCUN UTILISATEUR N'A < LA 'CDAJ', C'EST QU'ON EST < EN PHASE "!ACTIVITE ON", ON < A DONC INTERET LA FAIRE "OFF" !!! < CBJNK8: EQU $ PLR X,W < RESTAURATIONS... JMP CBJOK4 < VERS LE CLEAR DU 'CBJ'... CBJNK4: EQU $ LB CDESCE-DCTESC,W < ON A TROUVE L'UTILSATEUR QUI EST LA < CAUSE DE LA MEMOIRE INEXISTANTE : < (A)=ORIGINE DE SA 'CDAJ', < (B)=EXTREMITE DE SA 'CDAJ'... CPR A,B < VALIDONS : JG CBJNK6 < OK : ORIGINE (A) < EXTREMITE (B)... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ORIGINE < ET EXTREMITE PEUVENT ETRE < INVERSEES (DEUX INTERRUPTIONS < SUCCESSIVES...) !!! < CELA PEUT PEUT-ETRE S'EXPLIQUER < DE LA FACON SUIVANTE : SI MEMXXX=1, < ON EXECUTE UN 'STAR' UN PEU PLUS < LOIN, OR CE 'STAR', CONTRAIREMENT A < CE QUI EST DIT, PROVOQUE UN VERI- < TABLE ECHANGE, ET PEUT DONC A SON < TOUR PROVOQUER UNE MEMOIRE INEXIS- < TANTE, ET DONC UNE RERENTRER PLUS < OU MOINS IMMEDIATEMENT DANS 'TH2', < D'OU CETTE 'SYSER' LORS DE CETTE < RERENTREE ; ON VERIFIERA A CE < PROPOS LA TRACE (IL SUFFIT DE DE- < MASQUER LES INTERRUPTIONS, DE < REEXECUTER LE 'BSR''ASYSER' ; MAIS < N'OUBLIONS PAS QU'ON SE TROUVE DANS < LE CAS OU DES TACHES HARDWARES SE < TROUVENT IMBRIQUEES, CE QUI EST < IMPOSSIBLE DE PAR LE MASQUAGE, ET < PROVOQUE DONC UNE 'SYSER' DANS LE < MODULE 'RRSTF' PAR DECOMPTAGE DE < LA VARIABLE 'COMPTH'...) < JMP CBJNK8 < ET ON NE RE-PERMUTE PAS... CBJNK6: EQU $ STA CDESCE-DCTESC,W < ON PERMUTE ORIGINE ET EXTREMITE, EN STB CDESCO-DCTESC,W < ESPERANT QUE L'UTILISATEUR VA REUTILI- < SER LA 'CDAJ' TOUT DE SUITE, ET SANS < RENVOYER DE "!CDAJ..."... CBJNK5: EQU $ PLR X,W < RESTAURATION DE 'W'... LA &T2CDO-LOCTH2,W < (A)=ADRESSE DE LA 'CDA' COURANTE, TBT BMCDAJ < EST-CE LA 'CDAJ' ??? < NOTONS QU'ON EST OBLIGE DE FAIRE CE < TEST SUPPLEMENTAIRE, CAR IL N'EST PAS < EVIDENT QU'APRES LA PERMUTATION DE < 'CDESCO' ET 'CDESCE' LE SCHEDULER PRENNE < LA MAIN, ET AINSI PROVOQUE LA VIOLATION < MEMOIRE TANT ATTENDUE... JNC CBJNK7 < NON, DONC RIEN A FAIRE... LB &T2CDE-LOCTH2,W < OUI : < (B)=ADRESSE DE FIN, CPR A,B < LA 'CDA' COURANTE QUI EST LA 'CDAJ', ET < DONC POUR L'UTILISATEUR COURANT EST-ELLE < DEJA PERMUTEE ??? JLE CBJNK7 < OUI, RIEN A FAIRE... STB &T2CDO-LOCTH2,W < NON, STA &T2CDE-LOCTH2,W < ON PERMUTE LA 'CDA' COURANTE... CBJNK7: EQU $ < < TENTATIVE DE CLEAR DU 'CBJ' : < CBJOK4: EQU $ LAI CBMDIS SIO T2CMD-LOCTH2,W < ON DISJOINT LE 'CBJ'. LAI CBMJON SIO T2CMD-LOCTH2,W < ON JOINT LE 'CBJ'. SIO T2ETA2-LOCTH2,W < LECTURE DU MOT D'ETAT2, TBT ETAOPE < LE 'CBJ' EST-IL JOINT ET PRESENT ??? JC CBJOK2 < OUI, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < LE 'CBJ' DOIT ETRE EN MANUEL... JMP CBJNOK < SI LE 'CBJ' EST PRESENT, IL FAUT LE < METTRE EN AUTOMATIQUE... ET RETENTER < LA JONCTION... JMP CBJOK1 < S'IL EST ABSENT, IL FAUT SAUTER LE < 'STAR', GARE AUX ALARMES !!! CBJOK2: EQU $ LA MEMV TBT MEMXXX < DOIT-ON INITIALISER LE FILTRE D'ADRESSE ? JNC CBJOK3 < NON... < OUI : LAI K < (A)=VALEUR ARBITRAIRE... LYI K < (Y)=ADRESSE RELATIVE DANS (SLO,SLE), STAR < ON ECRIT AINSI LE FILTRE D'ADRESSE... CBJOK3: EQU $ SIO T2ETA1-LOCTH2,W < LECTURE DU MOT D'ETAT1 AFIN DE DESARMER < UNE EVENTUELLE INTERRUPTION PUPITRE... SIO T2ETA2-LOCTH2,W < ON RELIT LE MOT D'ETA2 : RBT ETAOPE < A PRIORI, CE N'EST PAS UN DEFAUT... JAE CBJOK1 < EFFECTIVEMENT, TOUT EST BON... SYSCBK: BSR ASYSER < E R R E U R S Y S T E M E ... < SYSER DE DEFAUT RECALCITRANT SUR < LE 'CBJ' DE 'TV'. CBJOK1: EQU $ BSR ARRSTF < EPILOGUE... JMP TH02 < ET C'EST TOUT... PAGE < < < T A C H E H A R D W A R E 4 : < < < < PILE : < CALL #SISP CMS5 CHECK# PILTH4: EQU $-DEPILE XWPILE: VAL LPILTH CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVTH4 CALL #SISP CMS5 THDEB# LAI YTRAN4 < (A)=NOMBRE MAX DE SOUS-NIVEAUX, LYI NTRAN4 < NOMBRE DE TRANSLATIONS POUR < OBTENIR LE SOUS-NIVEAU D'INTERRUPTION < GENERALISE... BSR ATIT < TRAITEMENT DE L'IT. BSR ARRSTF < EPILOGUE... JMP TH04 PAGE < < < T A C H E H A R D W A R E 6 : < < < < PILE : < CALL #SISP CMS5 CHECK# PILTH6: EQU $-DEPILE XWPILE: VAL LPILTH CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVTH6 CALL #SISP CMS5 THDEB# LAI YTRAN6 < (A)=NOMBRE MAX DE SOUS-NIVEAUX, LYI NTRAN6 < NOMBRE DE TRANSLATIONS POUR < OBTENIR LE SOUS-NIVEAU D'INTERRUPTION < GENERALISE... BSR ATIT < TRAITEMENT DE L'IT. BSR ARRSTF < EPILOGUE... JMP TH06 PAGE < < < T A C H E H A R D W A R E ' D : < < < < PILE : < CALL #SISP CMS5 CHECK# PILTHD: EQU $-DEPILE XWPILE: VAL LPILTH CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVTHD CALL #SISP CMS5 THDEB# LAI YTRAND < (A)=NOMBRE MAX DE SOUS-NIVEAUX, LYI NTRAND < NOMBRE DE TRANSLATIONS < POUR OBTENIR LE SOUS- < NIVEAU D'INTERRUPTION GENERALISE... BSR ATIT < TRAITEMENT DE L'IT. BSR ARRSTF < EPILOGUE... JMP TH0D PAGE < < < T A C H E H A R D W A R E ' E : < < < < PILE : < CALL #SISP CMS5 CHECK# PILTHE: EQU $-DEPILE XWPILE: VAL LPILTH CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVTHE CALL #SISP CMS5 THDEB# LAI YTRANE < (A)=NOMBRE MAX DE SOUS-NIVEAUX, LYI NTRANE < NOMBRE DE TRANSLATIONS < POUR OBTENIR LE SOUS- < NIVEAU D'INTERRUPTION GENERALISE... BSR ATIT < TRAITEMENT DE L'IT. BSR ARRSTF < EPILOGUE... JMP TH0E PAGE < < < T A C H E H A R D W A R E ' F : < < < < PILE : < CALL #SISP CMS5 CHECK# PILTHF: EQU $-DEPILE XWPILE: VAL LPILTH CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# XWKNIV: VAL NIVTHF CALL #SISP CMS5 THDEB# LAI YTRANF < (A)=NOMBRE MAX DE SOUS-NIVEAUX, LYI NTRANF < NOMBRE DE TRANSLATIONS < POUR OBTENIR LE SOUS- < NIVEAU D'INTERRUPTION GENERALISE... BSR ATIT < TRAITEMENT DE L'IT. BSR ARRSTF < EPILOGUE... JMP TH0F < < < A T T E N T I O N : < (W)=0 : UTILISE PAR LA TRACE !!! < < PAGE < < < T R A I T E M E N T C E N T R A L I S E < D E S I N T E R R U P T I O N S : < < < FONCTION : < CE SOUS-PROGRAMME APPELE PAR < TOUTES LES TACHES HARDWARES < RECUPERE LE SOUS-NIVEAU APPELANT, < EN DEDUIT LA TACHE ASSOCIEE, ET < PASSE LA MAIN A L''ARIT' ASSOCIE... < < < ARGUMENTS : < (Y)=TRANSLATION POUR CALCULER < LE SOUS-NIVEAU D'IT GENERALISE < (A)=NOMBRE MAX DE SOUS-NIVEAUX DU NIVEAU COURANT. < < TIT: EQU $ CALL #SISP CMS5 W TRACE# < (W)=0 POUR LA TRACE... TITACK: EQU $ LBI TYPITN < POUR LE TEST DU 'CARY' EVENTUEL... ACK < 'X' RECOIT LE NUMERO DU SOUS-NIVEAU LE < PLUS PRIORITAIRE EN ATTENTE SOUS CE < NIVEAU, ET < 'S' RECOIT : < (C)=1 : SI SOUS-NIVEAU EXCEPTION, < (V)=1 : SI SOUS-NIVEAU NORMAL, < (V)=(C)=0 : S'IL N'Y A PLUS DE SOUS- < NIVEAUX EN ATTENTE... JNCV TITFIN < PLUS DE SOUS-NIVEAUX EN ATTENTE... < < CAS OU IL RESTE AU MOINS < UN SOUS-NIVEAU EN ATTENTE : < ADCR B < (B)=1 : SOUS-NIVEAU EXCEPTION, < =0 : SOUS-NIVEAU NORMAL. PSR A,Y < SAUVEGARDE DES ARGUMENTS... CPR A,X < LE SOUS-NIVEAU EXISTE-T'IL ??? JL TITS2 < OUI : (X)<(A)... BSR ASYSER < E R R E U R S Y S T E M E ... JMP TITS3 < ET C'EST TOUT... TITS2: EQU $ LR X,L < (L)=NUMERO DE SOUS-NIVEAU, ADR Y,X LR X,A < (A)=NIVEAU D'INTERRUPTION GENERALISE, PSR B,L BSR ATRACE < QUE L'ON TRACE... < < RECUPERATION DU HANDLER CONCERNE : < BSR ACBDCT < RECUPERATION ADRESSE DCT DANS 'A' ET 'L'. JAG SYSRB1 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT ETRE METTRE 'DCTTSI' DANS 'A' ET 'L', < OU PLUS PRUDEMMENT 'PLR B,X', ET PUIS < UN 'JMP TITS3'... < SYSRB1: EQU $ USE L,DCT0 LA TESTO < FAUT-IL TESTER LE TIME-OUT ??? JAE TITS1 < NON, LE TIME-OUT N'EST PAS A TESTER SUR < CE HANDLER... STA TIMOUT < OUI, IL EST A TESTER, ALORS : < ON REINITIALISE APRES CHAQUE IT < LE COMPTEUR COURANT DE TIME OUT < AU CAS OU LE HANDLER NE SERAIT PAS < A UNE FIN DE SERVICE... TITS1: EQU $ PLR B,X < PARAMETRES DE L'ARIT : < (B)=0 : SOUS-NIVEAU NORMAL, < =1 : SOUS-NIVEAU EXCEPTION. < (X)=NUMERO DU SOUS-NIVEAU. BSR ARIT < APPEL DE LA ROUTINE SPECIFIQUE DU < PERIPHERIQUE. < < PASSAGE A L'EVENTUEL SOUS- < NIVEAU SUIVANT : < TITS3: EQU $ PLR A,Y BSR ATDEFS < SOYONS PRUDENT : Y-A-T'IL UN DEFAUT < DEFAUT SECTEUR EN ATTENTE ??? JMP TITACK < PUIS, VERS LE SOUS-NIVEAU SUIVANT EN < ATTENTE... TITFIN: EQU $ RSR PAGE < < < T E S T D U M O D E D ' E X E C U T I O N < D U S Y S T E M E E T E P I L O G U E < D E S T A C H E S H A R D W A R E S : < < < FONCTION : < CE SOUS-PROGRAMME APPELE PAR < TOUTES LES TACHES HARDWARES EST < EN FAIT LE PENDANT DE #SISP CMS5 THDEB# ; < IL CONSTITUE L'EPILOGUE DE TOUTES < LES TACHES HARDWARES. IL TESTE LE < MODE D'EXECUTION DU SYSTEME (VOIR < LA FILE 'RSTF' ET 'CHECK AND TRACE'), < IL TESTE DE PLUS POUR 'TH0' (ALAR- < MES) LES 'IPI' EN ATTENTE (CEUX DU < DIALOGUE MAITRE <--> ESCLAVE), PUIS < RESTAURE LES REGISTRES, ET DESARME < LE NIVEAU... < < < < < E N T R Y T H 0 : < < FITH0: EQU $ LXI NSPPR1 BSR ACADCT < RENVOIE (L)=ADRESSE DE 'DCTPR1', DETRUIT < LA BASE 'L' MAIS SANS IMPORTANCE... LBI TYPITN < AFIN DE DISTINGUER L'HORLOGE (TIME < OUT) DES APPELS NORMAUX ('IPI'). BSR ARIT < AINSI, ON PREND EN COMPTE LES 'IPI' < INTER-PROCESSEURS S'ILS SONT VALIDES. < < < E N T R Y T H 1 A T H 1 5 : < < RRSTF: EQU $ LXI LOFDMS LA &ARSTF < ACCES AU DERNIER MOT SIGNIFICATIF < DE RSTF ; S'IL VAUT -1 ('FFFF), < C'EST QU'ON NE TRACE PAS TOUS < LES CHANGEMENTS DE CONTEXTE. CPI MMOT JE E964 < SI =-1, ON LAISSE RSTF TELLE < QU'ELLE EST... < < CAS OU ON TRACE TOUS LES CHANGEMENTS DE CONTEXTE : < Z2000: EQU $ STZ &ARSTF < RAZ DE TOUTE RSTF A PRIORI, < POUR NE PAS PERDRE DE CHANGE- < MENTS DE CONTEXTES. JDX Z2000 LXI NTS0 LYI FONSB1 LAD ARSTF BSR ATMOBT < A PRIORI, ON FOCE LE BIT 'RSTF' DE < LA TACHE 'CHECK AND TRACE'... E964: EQU $ < < RECUPERATION DES REGISTRES DE LA TACHE INTERROMPUE : < LR K,W LY O,W < (Y)=ADRESSE DE RETOUR ('P' D'APPEL). LA -D,W < (A)=ADRESSE DE 'IC' ('L' EMPILEE). LR A,W < (W)=ADRESSE DE 'IC'. LA HK-PSTH,W < (A)=VALEUR INITIALE DE 'K'. LR A,B ADRI DEPILE,A < (A)=@EMETTEUR=BASE DE LA PILE, ADRI DEPILE+D,B < (B)=@RECEPTEUR=PILE DECALEE D'UN MOT. LXI LREGTH < 9 REGISTRES EMPILES A DECALER... MOVE < TRANSLATION D'UN MOT DE LA PILE. LA HK-PSTH,W < (A)=VALEUR INITIALE DE 'K'. LR A,W STY D,W < "EMPILEMENT" DE L'ADRESSE DE RETOUR < AU BAS DE LA PILE... < < "DECOMPTAGE" DES TACHES HARDWARES : < DC COMPTH JE E964XY < EN EFFET, ELLE NE PEUT VALOIR QUE 0/1... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REGARDER EN PARTICULIER S'IL N'Y A PAS < EU PRECEDEMMENT UN DEFAUT SECTEUR DANS UNE < TACHE HARDWARE... < STZ COMPTH < ET ON REINITIALISE... E964XY: EQU $ < < < E P I L O G U E D E T A C H E H A R D : < PLR L LR L,C < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# STZ ICSAV-PSTH,L PLR L,W < RESTAURATION L,W,... PLR A,B,X,Y < ...A,B,X,Y ACQ < ET DESARMEMENT... RSR < POUR LA PROCHAINE IT, PROVOQUE ALORS UN < RETOUR SUR UNE INSTRUCTION 'JMP THXX'... PAGE < < < A T T E N T E I T E T C L E A R S I T : < < < FONCTION : < SUITE A CERTAINS PROBLEMES SUR < L'HORLOGE (CAS OU ELLE SE TROUVE < BLOQUEE SUR UNE ATTENTE DISQUE,...), IL < APPARAIT NECESSAIRE DE CREER CETTE < ROUTINE, QUI MET LE HANDLER < APELANT EN ATTENTE D'INTERRUPTION < SUR SON SEMAPHORE SIT, PUIS LORSQUE < L'IT EST ARRIVEE, RE-INITIALISE SIT. AINSI < SI PLUSIEURS IT SONT MONTEES POUR LE < MEME EVENEMENT, LORS DES ECHANGES < SUIVANTS, ON NE SE DESYNCHRONISERA < PAS... < < < NOTA : < ON NE PEUT INVERSER L'ATTENTE < DE L'INTERRUPTION ET LE CLEAR DU < BETA(SEMAPHORE), EN EFFET DANS LE < CAS OU DES DEFAUTS IMMEDIATS < APPARAISSENT, L'IT MONTE < AVANT QU'ON NE SE METTE EN ATTENTE !!!! < < < A T T E N T I O N : < POUR BIEN FAIRE, IL FAUDRAIT < QUE LA REMISE A 0 DU BETA(SIT) SOIT < PROTEGE DES DEFAUTS SECTEUR, CE QUI < EST EVIDEMMENT IMPOSSIBLE. EN < CONSEQUENCES, IL SE PEUT QUE < 'CSWIT' ET 'THDS' INTERFERENT DANGEREU- < SEMENT LORS DE DEFAUTS SECTEUR < MALENCONTREUX... < < < ARGUMENT : < (L)=ADRESSE DCT(HANDLER). < < USE L,DCT0 CSWIT: EQU $ RQST SIT < A T T E N T E I N T E R R U P T I O N. < < I N T E R R U P T I O N A P P A R U E : < STZ SIT < RAZ DU SIT RSR < RETOUR A L'APPELANT LORSQUE < LA REINITIALISATION EST FAITE. PAGE < < < R E V E I L D ' U N H A N D L E R : < < < ARGUMENT : < - (L)=ADRESSE DCT(HANDLER). < < USE L,DCT0 REVHDL: EQU $ PSR A < < VALIDATION DU 'SIT' : < BSR ABETA2 < RENVOIE : (A)=BETA(SIT). CPI MAXBET < TEST SUR LE NBRE D'IT MONTEES < SUR CE SEMAPHORE ET NON ENCORE < TRAITEES. JL E885 < ACCEPTABLE... BSR ASYSER < E R R E U R S Y S T E M E ... < ON SAIT LES RISQUES ENCOURUS < LORSQUE CE TEST N'EST PAS FAIT : < LE SEMAPHORE RISQUE DE REDEVENIR < NEGATIF EN PASSANT AU DELA < DE '7F, ET LA MICRO-MACHINE < SE MET A RAZER TOUS LES BITS < A 1 QUI SUIVENT LE BETA (...). < < QUE FAIRE ??? < ALLER MODIFIER EN GENERAL LE < 'BETA' DU SEMAPHORE, OU BIEN < FAIRE UN 'JMP E885X'... < IF XXSIT0-K,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF STZ SIT < ON REINITIALISE LE 'SIT'... E885: EQU $ < < REVEIL DU HANDLER : < LAD SIT BSR ARLSE < REVEIL DU HANDLER QUI DORT SUR 'SIT'... < < ET RETOUR : < PLR A RSR PAGE < < < S U P E R - I D L E : < < < FONCTION : < CETTE TACHE REMPLACE JUSTE APRES LE < 'SYSINI' LA TACHE 'INI' ; CECI AVEC < DEUX CONSEQUENCES : < 1 - LA DCT QUI EST RELAYEE PAR 'NSPINI' < (='NSPIDS') EXISTE DE NOUVEAU, ET ON NE < RISQUE PAS DE PARTIR DANS LE DECORS... < 2 - SI PAR UN MALHEUREUX HASARD, 'IDLE' < SE TROUVAIT BLOQUEE, ON LE DETECTERAIT... < < CALL #SISP CMS5 CHECK# < < < ' D C T ' D E L A S U P E R - I D L E : < < CALL #SISP CMS5 DOL1# DCTIDS: EQU $ PSTIDS: WORD K;K;K;K;COM+DEPCS;NIL;NIL;PILIDS;IDLSUP;SMST;SO;SE #@ASCI " IDS" < #SISP CMS5 ASCI# < < < P I L E D E L A S U P E R - I D L E : < < CALL #SISP CMS5 DOL2# PILIDS: EQU $-DEPILE XWPILE: VAL 8 < INCREMENT DE LA PILE... CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# < < < S U P E R - I D L E : < < USE L,DCT0 IDLSUP: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... ACQ < POUR FORCER UN PASSAGE AU MICRO < SCEDULER, ET UN DEMASQUAGE DE 'IOM' < ET 'IPM'... JMP IDLSUP < FACILE ?!??!! PAGE < < < T A C H E D ' I D L E D E B A C K G R O U N D : < < < FONCTION : < CETTE TACHE EST LA MOINS PRIORITAIRE DU SYSTEME ; < ELLE EST DESTINE A PRENDRE LE CONTROLE DE LA < MACHINE LORSQUE TOUTES LES AUTRE TACHES SONT EN < ATTENTE. COMME ON PEUT ESPERE QU'ELLES SONT EN < ATTENTE D'INTERRUPTION (SINON ELLES SONT EN < INTER-BLOCAGE), ON FAIT UN HALT QUI FAVORISE ENTRE < AUTRE LES E/S DISQUES-ADM. < < CALL #SISP CMS5 CHECK# < < < ' D C T ' D E L ' I D L E : < < CALL #SISP CMS5 DOL1# DCTIDL: EQU $ PSTIDL: WORD DCTIDS;K;NSPINI;K;COM+DEPCS;NIL;XXIDLE;PILIDL;IDLINI;SMST WORD MEMTV0;MEMTVE-Z < (SLO,SLE) ENCADRE 'MEMTV' POUR 'SVCM3'. #@ASCI " IDL" < #SISP CMS5 ASCI# < < BALAYAGE PERIODIQUE DE LA MEMOIRE : < (POUR EVITER DES PARITES ULTERIEURES) < BALAIS: WORD ZERO < ADRESSE COURANTE... < < MOT PERMETTANT DES TESTER < LE PROCESSEUR MAITRE EN < PERMANENCE : < WTEST: FLOAT <NILK<NILK<NILK < MOTS CONTENANT UNE CONSTANTE ALEATOIRE < PERMETTANT LE TEST DES OPERATEURS... CTESTC: WORD NILK < MOT DESTINE A CE STUPIDE BLOC FLOTTANT < QUI ECRIT DANS LE MOT (C)-DEPCS LORS- < QU'UNE ANOMALIE SE PRODUIT... < < < P I L E D E L ' I D L E : < < CALL #SISP CMS5 DOL2# PILIDL: EQU $-DEPILE XWPILE: VAL 32 CALL #SISP CMS5 GENPIL2# PAGE < < < B U F F E R D E C O P I E D ' U N E Z O N E < Q U E L C O N Q U E D E L A M E M O I R E : < < < FONCTION : < 'IDLE' COPIE EN PERMANENCE < UNE ZONE MEMOIRE QUELCONQUE < DE 'TBMEMQ' MOTS DE LONG, DONT < L'ADRESSE EN DADR-MOTS EST < DONNE PAR 'AMEMQ' DANS LE BUFFER < QUI SUIT ; CECI PERMET UNE < VISUALISATION INDIRECTE PAR LA < COMMANDE "!ACTIVITE...". < < TBMEMQ:: VAL YY7+YY7 < TAILLE ARBITRAIRE DU BUFFER... XWOR%1: VAL TBMEMQ>DADR < CONVERTIE EN 'DADR'-MOTS... XWOR%2: VAL -DADR IF XWOR%1>XWOR%2-TBMEMQ,,XEIF%, IF ATTENTION : C'EST PLUS SIMPLE SI LA LONGUEUR IF EST UN MULTIPLE DE 'DADR' !!! XEIF%: VAL ENDIF BMEMQ: EQU $ < BUFFER DE COPIE... DZS TBMEMQ CALL #SISP CMS5 CHECK# PAGE USE L,DCT0 < < < I N I T I A L I S A T I O N D U S Y S T E M E : < < IDLINI: EQU $ STA &ADCTSY < 'DCTIDS' REMPLACE 'DCTINI' < DANS LA TABLE DES DCTSY ; EN < EFFET L'ESPACE MEMOIRE OCCUPE PAR < LE 'SYSINI' A ETE RECUPERE PAR < L'ALLOCATION MEMOIRE, ET IL < SERAIT FORT FACHEUX QUE L'ON Y < RETOURNE (MEME PAR ERREUR) !!! IF NSPINI-NSPIDS,,XEIF%, IF ATTENTION : IL FAUT : NSPINI=NSPIDS !!! XEIF%: VAL ENDIF < < PREPARATION DU DETECTEUR SECONDAIRE < DE TIME-OUT : < XXIDL1:: VAL 16 < NOMBRE ARBITRAIRE DE BOUCLE D'IDLE < AVANT DE TESTER LES TIME-OUT SECON- < DAIRES... LRM B TOIDLE: WORD XXIDL1 < (B)=DECOMPTEUR DES BOUCLES D'IDLE. LR B,Y < (Y)=POUR REINITIALISER 'B'... LA HTIME+D < (A)=HEURE MEMORISEE TOUS LES 'XXIDL1' < TOURS D'IDLE... PSR A,B,Y < LA PILE MEMORISE 'A', 'B' ET 'Y'... < < < B O U C L E D ' I D L E : < < IDLE: EQU $ ARM NSNSP0+NSPIDS < EN FAIT INUTILE, MAIS ON NE SAIT < JAMAIS !!! BSR ASMIT < TEST DES INTERRUPTIONS ??? JAE IDLSY1 < OK, NON MASQUEES... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < NE SERAIT-CE PAS LA SUITE D'UN MASQUAGE < AU PUPITRE DES INTERRUPTIONS DANS LA TACHE < 'IDLE' PRECISEMENT ??? < ACQ < PUIS, ON DEMASQUE... IDLSY1: EQU $ < < A PRIORI, MISE A JOUR PERMANENTE < DU BOOTSTRAP 'DKM' : < LRM A,B,X WORD TVDKMQ < (A)=ADRESSE DE LA TABLE DE VIRTUALISATION < DE 'DKM', WORD TVDKMR < (B)=ADRESSE DE LA TABLE DE VIRTUALISATION < DU BOOTSTRAP 'DKM', NTRN WORD GAXCYL+NOCMO-E/NOCMO TRN < (X)=LONGUEUR EN MOTS... MOVE < ET ON MET A JOUR, DES FOIS QUE... < < DETECTEUR SECONDAIRE DE TIME-OUT : CELUI-CI < EST UTILISE LORSQUE PAR MALHEUR L'HORLOGE < EST BLOQUEE : CELA PEUT ARRIVER, PAR EXEMPLE < LORSQUE L'HORLOGE ADRESSE 'DKF' OU 'DKM', < ET QUE CELUI-CI EST EN TIME-OUT : IL Y A < INTER-BLOCAGE... < PLR A,B,Y < RESTAURE LES PARAMETRES... ADRI -I,B < DECOMPTAGE DES TOURS... CPZR B < FIN DES 'XXIDL1' TOURS ??? JNE IDLE1 < NON, ON ATTEND... LR Y,B < OUI, ON REINITIALISE LE DECOMPTEUR. CP HTIME+D < L'HEURE A-T'ELLE EVOLUE ??? LA HTIME+D < A PRIORI, (A)=HEURE COURANTE... JNE IDLE1 < OUI, PAS DE TIME-OUT SUR L'HORLOGE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VERIFIER QUE C'EST BIEN UN INTERBLOCAGE !!! < PSR A,L LXI NSPHOR < (X)='NSP' DE L'HORLOGE, BSR ACADCT < (A)=L=ADRESSE DCT(HORLOGE). BSR VAR+ASPTO < DETECTION ET TRAITEMENT DES TIME-OUT... PLR A,L IDLE1: EQU $ PSR A,B,Y < SAVE LES PARAMETRES 'A', 'B' ET 'Y'... < < < T R A C E D U S Y S T E M E : < < LXI K < POUR FAIRE UN 'HALT' MAXIMUM... IDLE2: EQU $ LR W,L < (L)=-1 POUR AFFICHAGE PUPITRE < DANS 'TRACE' A PRIORI... LA &ASAESC BSR ABETA < RENVOIE : (A)=BETA(SAESC)=NOMBRE DE 'DCT- < ESCLAVE' LIBRES... CPI NESCLA < Y-A-T'IL DES ESCLAVES CONNECTES ??? JL IDLEUS < OUI, AU MOINS 1... < < < I D L E : P L U S D ' U T I L I S A T E U R : < < < < AUTORISATION DE LA COPY : < LA ETASYS RBT OTOCOP < A PRIORI... STA ETASYS < < AUTORISATION DE LA TRACE : < LA SAVEX RBT XBTROF < A PRIORI... STA SAVEX < < LORSQU'IL N'Y A PLUS PERSONNE < DE CONNECTE, ON SE PLACE DANS < UN MODE NON DANGEREUX ('DKU' < NE DOIT PLUS SE SYNCHRONISER < SUR LE SECTEUR 0 DE CHAQUE < PISTE) : < LRM A,B WORD IDLEBC < (A)=ADRESSE DE RETOUR DE 'PS0OFF', WORD PS0OF3 < (B)=ADRESSE DU SOUS-PROGRAMME DE MISE < DE LA SYNCHRONISATION SUR LE < SECTEUR 0 'OFF'. PSR A,B < EMPILEMENT DE L'ADRESSE DE RETOUR POUR < SIMULER UN 'BSR', ET DE L'ADRESSE DU < SOUS-PROGRAMME, RSR < VERS LEQUEL ON VA EN METTANT (B) DANS < 'P' PAR UN 'PSR'/'RSR'... IDLEBC: EQU $ < ADRESSE DE RETOUR... < < LORSQU'IL N'Y A PLUS PERSONNE, < ON REMET 'DKU' EN MODE 'FAST' : < LRM A,B WORD IDLEBB < (A)=ADRESSE DE RETOUR DE 'PFAST', WORD PFAST3 < (B)=ADRESSE DU SOUS-PROGRAMME DE MISE < EN MODE 'FAST' DE 'DKU'. PSR A,B < EMPILEMENT DE L'ADRESSE DE RETOUR POUR < SIMULER UN 'BSR', ET DE L'ADRESSE DU < SOUS-PROGRAMME, RSR < VERS LEQUEL ON VA EN METTANT (B) DANS < 'P' PAR UN 'PSR'/'RSR'... IDLEBB: EQU $ < ADRESSE DE RETOUR... < < CAS OU IL N'Y A PLUS PERSONNE < DE CONNECTE : ACTIVONS LA < COMPRESSION 'SGN' A PRIORI : < LRM A,B WORD IDLEBA < (A)=ADRESSE DE RETOUR DE 'PSGNON', WORD PSGNON < (B)=ADRESSE DU SOUS-PROGRAMME D'ACTIVA- < TION DE LA COMPRESSION. PSR A,B < EMPILEMENT DE L'ADRESSE DE RETOUR (SIMU- < LANT UN 'BSR'), ET DE L'ADRESSE DU SOUS- < PROGRAMME, RSR < POUR SE BRANCHER A 'PSGNON'... IDLEBA: EQU $ < ADRESSE DE RETOUR... < < TEST DES FICHIERS ENCORE OUVERTS : < XWOR%1: VAL COSBT?XBITF1=FMASK(K=FCINST>NBITEF XWOR%1: VAL COSBT?XBITF1=FMASK(K?XWOR%1=FCINST LAI XWOR%1 < AFIN DE COMPTER LE NOMBRE DE FICHIERS SBT XXBKFE < A L'ETAT "OPEN"... BSR ALOOKF < (A)=NOMBRE DE FICHIERS OUVERTS OU < BIEN EN ATTENTE DE DELETE... JANE IDLEUS < ENCORE AU MOINS OUVERT, OU EN ATTENTE < DE DELETE, ON ATTEND DONC... PSR X,L LXI NSPHOR < NON, PERSONNE... BSR ACADCT < (L)=ADRESSE DCT(HORLOGE), LA VAR+PATCOP < (A)=PATTERN CYCLIQUE DES COPIES, PLR X,L LR A,L < (L)=PATTERN DES COPIES S'IL N'Y A < PAS D'UTILISATEURS CONNECTES... < < < T E S T D U F O N C T I O N N E M E N T : < < IDLEUS: EQU $ CALL #SISP CMS5 RST# TBT MAINT < LE BIT 'MAINT' EST-IL PRESENT ??? LA MEMV < AFIN DE TRACER 'MEMV'... < (ON NE SAIT JAMAIS...) JC IDLEXY < OUI, ON VA L'INDIQUER AU PUPITRE... TBT MEMXXX < TOUT EST-IL AUTORISE ??? JC IDLEXY < OUI, ON LE SIGNALE AU PUPITRE... PSR A,W < NON, ALORS : LRM A,W LAI XXCPR < (A)=INSTRUCTION VARIABLE D'AUTORISA- < TION/INHIBITION DE LA COMPRESSION, WORD DCOMPR < (W)=SON ADRESSE... CP O,W < ALORS LE 'STN' DU 'SGN' PEUT-IL FAIRE < DE LA COMPRESSION ??? PLR A,W < RESTAURE : (A)='MEMV' POUR TRACE... JE IDLEXX < OUI, 'L' RESTE TEL QUEL... < < CAS DES FONCTIONNEMENTS DANGEREUX < DU FABULEUX SYSTEME 'CMS5' : < IDLEXY: EQU $ LBI MOCD < OUI, ON L'INDIQUE AU PUPITRE EN < INVERSANT L'OCTET DROIT !!! EORR B,L < ON INVERSE PARTIELLEMENT LE PUPITRE < DANS 2 CAS : < 1 - BIT 'MAINT' DE 'ST' PRESENT, < 2 - BIT 'MEMXXX' DE 'MEMV' PRESENT, < 3 - PAS DE COMPRESSION DES ITEMS AU < NIVEAU 'STN' DU 'SGN'. IDLEXX: EQU $ BSR ATRACE < TRACE, ET AFFICHAGE AU PUPITRE DE < 'XXIDLE' SI AU MOINS UN UTILISATEUR < EST CONNECTE, ET DE LA PATTERN PERIODI- < QUE DES COPIES ; ANSI, ON PEUT SAVOIR < EN REGARDANT LE PUPITRE S'IL EST < POSSIBLE DE RECHARGER LE SYSTEME, < C'EST-A-DIRE, S'IL N'Y A PAS D'UTILI- < SATEURS CONNECTES, ET SI SURTOUT, LE < LE SYSTEME A FAIT AU MOINS LES 2 < DERNIERES COPIES EN BASCULE... < < < A T T E N T E : < < HALT < ATTENTE MOMENTANEE DES INTERRUPTIONS... < < < T R A I T E M E N T D E L A S Y N C H R O N I S A T I O N < S U R L E M O T ' C D A G 0 ' : < < BLOCK2: EQU $ < ADRESSE DE BLOCAGE LORS DE LA RELANCE < SUITE A UN DEFAUT SECTEUR NON PRIS EN < COMPTE... PSR X,Y,W SVC SVCM9 < VERS LA SYNCHRONISATION SUR LES VALEURS < POSITIVES DE 'CDAG0'... < < < B A L A Y A G E P E R I O D I Q U E < D E L A M E M O I R E : < < LRM W WORD BALAIS < (W)=ADRESSE DE L'ADRESSE COURANTE DANS LA < MEMOIRE LORSQU'ON LA BALAYE... LA O,W < (A)=ADRESSE DU MOT COURANT, IC O,W < QUE L'ON FAIT PROGRESSER... LR A,W < (W)=ADRESSE DU MOT COURANT : LA O,W < ACCES AU MOT COURANT (ON NE FAIT QUE LE < LIRE, BIEN SUR ; S'IL Y A UNE PARITE ON < FERA AINSI UNE ALARME SANS TROP DE < RISQUES...). NLS GABUZO: EQU $ NOP LST < < < T E S T P E R I O D I Q U E D U P R O C E S S E U R < M A I T R E : < < JMP TESTPM < LE MODULE CORRESPONDANT NE PEUT ETRE < IMPLANTE ICI POUR DES RAISONS BIEN < CONNUES... < A NOTER : < (A)=BALAIS COURANT... TESTRT: EQU $ < RETOUR DU TEST DU PROCESSEUR... < < < 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 D U S Y S T E M E : < < SVC SVCM3 < APPEL DU 'SVC' MAITRE ADEQUAT... < ((SLO,SLE) ENCADRE 'MEMTV'...) PLR X,Y,W CPZR X < FIN DU 'HALT' ??? JNE IDLE2 < NON, ON REBOUCLE, AFIN DE MODERER LE < RYTHME DES TESTS SECONDAIRES DE < TIME OUT... < < < A C T I O N S U R L A R E G U L A T I O N < D U S W A P P I N G E S C L A V E : < < STZ SOCYCL < RAZ DE LA LISTE CYCLIQUE DES < ESCLAVES A SWAPPER OUT A PRIORI ; < ON CREE AINSI UNE BOUCLE DE < REGULATION AVEC LE SWAPPER < OUT : SI LE TAUX DE SWAPPING < OUT AUGMENTE (ET DONC AUSSI < LE SWAPPING IN), LE NBRE < D'E/S DISQUES AUGMENTE, ET < DONC CERTAINEMENT AUSSI LE < NBRE DE PASSAGE EN IDLE ; EN < IDLE, RAZANT 'SOCYCL' , ON < DIMINUE LE TAUX DE SWAPPING < OUT, ET DONC LE NBRE D'E/S < DISQUES, ET DONC LE NBRE DE < PASSAGE EN IDLE, ET DONC < SOCYCL REDEVIENT NON NUL,... < (ET ON RESWAPPE OUT...) < < < T E S T D E T R A S H I N G D U S Y S T E M E : < < LXI NSPDKF < (X)=NSP DISQUE DE SWAPPING BSR ACADCT < (L)=@DCT DU DISQUE DE SWAPPING. BSR APBS < TEST DE LA FILE D'ATTENTE < SUR LE DISQUE DE SWAPPING. JLE IDLE < OK,LA FILE D'ATTENTE EST < ACCEPTABLESUR LE DISQUE < DE SWAPPING < < CAS OU IL Y A TROP DE MONDE < SUR LE DISQUE DE SWAPPING : < LXI NSPSCH BSR ACADCT < (L)=@DCT-SCH. BSR APBS < TEST DE LA FILE D'ATTENTE SUR < LE SCHEDULER. LA &FREQI < (A)=FREQUENCE COURANTE DE L'HORLOGE. JGE IDLE < TOUT PARAIT OK, POUR LE MOMENT. < < < T R A S H I N G A P P A R E N T : < < < DANS LE CAS SUIVANT : < < 'BETA(DKS) GRAND' & 'BETA(SCHEDULER) PETIT', < IL Y A INSTABILITE DU SYSTEME. LA SOLUTION EST DE TENTER < DE STABILISER LE SYSTEME EN JOUANT SUR LA FREQUENCE < DE L'HORLOGE.RAPPELONS QUE L'ON DISPOSE DE < 4 FREQUENCES UTILISABLES: < F1:BIT6 1 SECONDE ('03E8 MILLISECONDES) < F2:BIT7 0,5 SECONDE ('01F4 MILLISECONDES) < F3:BIT8 0,200 SECONDE ('00C8 MILLISECONDES) < F4:BIT9 0,100 SECONDE ('0064 MILLISECONDES) < < ON REMARQUERA HABILEMENT QUE 200 MS LAISSENT LE TEMPS < (LE NUMERO DE BIT INDIQUE LE NUMERO DU 1ER BIT < A 1 DANS LA VALEUR DE CES FREQUENCES, ET TESTE PAR < LE HANDLER HORLOGE). EXPERIMENTALEMENT, ON CONSTATE < LES FAITS SUIVANTS (SUBJECTIFS...) : < SI LA FREQUENCE EST 'PETITE', IL FAUT < L'AUGMENTER, < SI LA 'FREQUENCE' EST GRANDE, IL VAUT MIEUX < LA DIMINUER. < < < ON A ICI : < (A)=FREQUENCE COURANTE. < < DBT < EVALUATION DE LA FREQUENCE < COURANTE DE L'HORLOGE. XWOR%8: VAL CODBT=FMASK(K?XH200=FCINST)XH200 ADRI -XWOR%8,X < FORMONS : < FREQUENCE - F3 DE FACON A < CALCULER UN INCREMENT/DECREMENT < A LA FREQUENCE COURANTE: < SI F=F1 DELTA(F)= -2 < SI F=F2 DELTA(F)= -1 < SI F=F3 DELTA(F)= 0 < SI F=F4 DELTA(F)= 1 < (X)=DELTA(F)... ADR X,A < INCREMENTATION/DECREMENTATION < DE LA FREQUENCE COURANTE. STA &FREQI < MAJ DE LA FREQUENCE COURANTE, < AFIN QUE HDLHOR LA MODIFIE. JMP IDLE < ET ON BOUCLE SUR L'IDLE... < < < REMARQUE IMPORTANTE : < ON NE TESTE PAS LES FILES D'ATTENTE SUR < L'AUTRE DISQUE.EN EFFET,LA LONGUEUR DE CELLE-CI < DEPEND DE L'ACTIVITE < DES ESCLAVES ; MAIS CETTE ACTIVITE < DEPEND DE LEUR REACTIVATION (...), < QUI ELLE-MEME DEPEND DES FINS DE SERVICE, < ET DONC ENTRE AUTRE DES FINS D'E/S < DISQUE. < IL EXISTE DONC AINSI DANS LE SYSTEME < UNE BOUCLE D'AUTO-REGULATION... < < < AUTRE REMARQUE: < ON REMARQUERA HABILEMENT QUE TOUTES LES < FREQUENCES F1 A F4 SONT UTILISABLES,PUISQUE < LA PLUS GRANDE F4 (PERIODE =100MS)LAISSE LE < TEMPS DE FAIRE UN ECHANGE DISQUE MEME AMOVIBLE < < PAGE < < < T E S T P E R I O D I Q U E D U P R O C E S S E U R < M A I T R E : < < < FONCTION : < CE MODULE TOURNE DONC PENDANT < L'IDLE ; IL PART D'UN NOMBRE < "PSEUDO-ALEATOIRE" (L'HEURE DANS < LE JOUR EXPRIMEE EN SECONDES < .EOR. LE BALAIS COURANT, ET < TRONQUEE, AFIN D'EVITER DES DEBOR- < DEMENTS) ; ENSUITE, IL EFFECTUE < DESSUS UNE SUITE D'OPERATIONS < ARITHMETIQUES ET LOGIQUES, PUIS < LA SEQUENCE INVERSE ; ENFIN, IL < VERIFIE QU'IL RETOMBE BIEN SUR < SES PIEDS. < AINSI, SI LES OPERATEURS CABLES < ET MICRO-PROGRAMMES ONT DES PRO- < BLEMES DELICATS ET ALEATOIRES, ON < PEUT ESPERER LES PIEGER ICI... < < KTEST0:: VAL '10 < POUR EVITER LES PASSAGES PAR 0... KTEST1:: VAL '53 < CONSTANTE ARBITRAIRE POUR TESTER LES < ADDITIONS IMMEDIATES... KTEST2:: VAL 'D6 < CONSTANTE ARBITRAIRE POUR TESTER LES < OPERATIONS LOGIQUES IMMEDIATES... KTEST3:: VAL NBITMO/XXXMOY < NUMERO D'UN BIT PRESQUE ARBITRAIRE DANS < UN MOT... KTEST4:: VAL -'47 < POUR TESTER QUE LES INSTRUCTIONS FLOT- < TANTES NE SONT PAS PRISES POUR DES < INSTRUCTIONS 'SVC' D'EXTENSION... < < POINT D'ENTREE : < TESTPM: EQU $ LRM W WORD WTEST < (W) VA BASER LA VARIABLE ALEATOIRE... < < INITIALISATION DU PROCESSUS < DE TEST ENTIERS/LOGIQUES : < EOR HTIMED < (A)=HEURE DU JOUR TRONQUEE EN SECONDES, < .EOR. LE BALAIS COURANT (CONTENU < DANS LE 'A' INCIDENT. RBT BITSIG < ET CECI AFIN D'EVITER DES OVERFLOWS RBT BITSIG+BIT < LORS DES OPERATIONS ARITHMETIQUES... JANE TEST01 < OK, NON NUL... LAI KTEST0 < POUR EVITER LES PASSAGES PAR 0... < (ET SURTOUT LES DIVISIONS PAR 0) TEST01: EQU $ JAG TEST04 < OK, LE NOMBRE ALEATOIRE EST CORRECT... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE : < EXAMINER LE COMPORTEMENT DE < L'OPERATEUR LOGIQUE !!! < TEST04: EQU $ LR A,Y < (Y)=NOMBRE ALEATOIRE COURANT, STA O,W < QUE L'ON MET AUSSI DANS 'WTEST', AFIN < DE TESTER ET LES OPERATIONS REGISTRE < A REGISTRE, ET REGISTRE A MEMOIRE... < < SERIE DE TRANSFORMATIONS ENTIERES/LOGIQUES : < SCRS NBITMO < OPERATION THEORIQUEMENT NEUTRE... IBT KTEST3 < POUR TESTER LES OPERATIONS SUR BITS... EORI KTEST2 < POUR TESTER LES OPERATIONS LOGIQUES... ADR Y,A < POUR TESTER LES ADDITIONS REGISTRE < A REGISTRE, AD O,W < ET MEMOIRE A REGISTRE... ADRI KTEST1,A < POUR TESTER LES ADDITIONS IMMEDIATES... SCY < ON FORCE LE 'CARRY', ADCR A < ET ON L'AJOUTE A (A)... MP O,W < POUR TESTER LA MULTIPLICATION... < < SERIE INVERSE ENTIERES/LOGIQUES : < DV O,W < POUR TESTER LA DIVISION, JNCV TEST05 < OK, ELLE S'EST BIEN PASSEE... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE ??? < VERIFIER LES ARGUMENTS DE < LA DIVISION AVANT D'ACCUSER < LA MACHINE... < TEST05: EQU $ SCY SBCR A ADRI -KTEST1,A SB O,W SBR Y,A EORI KTEST2 IBT KTEST3 SCLS NBITMO < < VERIFICATION DES RESULTATS : < CP O,W < EST-ON RETOMBE SUR SES PIEDS ??? JE TEST02 < OUI... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE ??? < VERIFIER LE CODE D'AUTO-TEST < PRECEDENT AVANT DE TELEPHONER < A LA MAINTENANCE !!! < TEST02: EQU $ EORR Y,A < (A) ET (Y) DOIVENT ETRE IDENTIQUES, LE < RESULTAT DE CETTE OPERATION DOIT DONC < ETRE NUL.. ORR B,A < DE PLUS LA DIVISION PRECEDENTE A DU < TOMBER JUSTE, DONC LE 'A' FINAL DOIT < ETRE STRICTEMENT NUL... JAE TEST03 < ET OUI, TOUT EST BON... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE ??? < MEME REMARQUE !!! < TEST03: EQU $ < < INITIALISATION DU PROCESSUS FLOTTANT : < PSR C < ET OUI, MALHEUREUSEMENT, A CAUSE DU < BLOC FLOTTANT, IL EST PLUS PRUDENT < DE CHANGER DE BASE 'C'... LRM C WORD CTESTC+DEPCS < ON PREND COMME COMMON, UN MOT BIDON... < A T T E N T I O N : IL N'EST PLUS < POSSIBLE DE FAIRE DE 'SYSER' JUSQU'A < LA RESTAURATION DE 'C' !!! STZ CTESTC-CTESTC-DEPCS,C < ET ON LE CLEAR AVANT TOUTE OPERATION < FLOTTANTE, AFIN DE POUVOIR LE TESTER A < LA FIN... LXI KTEST4 < ON INITIALISE 'X' AFIN DE VERIFIER QUE < LES INSTRUCTIONS FLOTTANTES SUIVANTES < NE SONT PAS, SUITE A UN DEFAUT HARD, < CONSIDEREES COMME DES 'SVC' EXTENSION... LR Y,A < (A)=(Y)=NOMBRE ALEATOIRE, FLT < QUE L'ON FLOTTE, FST O,W < ET RANGE EN MEMOIRE... < < SERIE DE TRANSFORMATIONS FLOTTANTES : < FNEG FAD O,W FMP O,W < < SERIE INVERSE FLOTTANTE : < FDV O,W FSB O,W FNEG < < VERIFICATIONS DES RESULTATS : < (NOTA : ON NE PEUT FAIRE LE < 'FCAM O,W', CAR EN EFFET, EN < CAS DE TEST NEGATIF, IL FAU- < DRAIT FAIRE UNE 'SYSER', OR < LA BASE 'C' EST MAUVAISE, ET < CELA ALLOURDIRAIT LA PROGRAM- < MATION ; DE PLUS, ON FAIT PLUS < LOIN UN 'CPR A,Y'...) < FIX CPZ CTESTC-CTESTC-DEPCS,C < ALORS, COMMENT SE SONT PASSEES TOUTES < LES OPERATIONS FLOTTANTES PRECEDENTES ; < ON NOTERA POUR 'CTESTC' : < BIT0 : 'UNDERFLOW', < BIT1 : 'OVERFLOW', < BIT2 : DIVISION PAR 0, < BIT3 : 'FIX' IMPOSSIBLE... PLR C < ET RESTAURATION DE LA BASE 'C' DE 'CMS5'. JE TEST09 < OK, LE RESULTAT N'EST PAS TROP GRAND... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE ??? < MEME REMARQUE !!! < TEST09: EQU $ CPR A,Y < EST-ON RETOMBE SUR NOS PIEDS ENTIERS ??? JE TEST07 < OUI... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE ??? < MEME REMARQUE !!! < TEST07: EQU $ LR X,A CPI KTEST4 < ALORS N'Y A-T'IL PAS EU DE 'SVC' < D'EXTENSION FLOTTANTE... JE TEST08 < NON... BSR ASYSER < E R R E U R M A C H I N E ... < < QUE FAIRE ??? < VERIFIER D'ABORD LA PRESENCE < DU BLOC FLOTTANT, ET PUIS COMPREN- < DRE COMMENT LES TESTS PRECEDENTS < PURENT ETRE POSITIFS !!! < TEST08: EQU $ < < < C O P I E D ' U N E Z O N E Q U E L C O N Q U E < D E L A M E M O I R E E N M E M O I R E B A S S E : < < < FONCTION : < CE MODULE A ETE RAJOUTE < AFIN DE VISUALISER INDIREC- < TEMENT PAR "!ACTIVITE..." < L'ENSEMBLE DE LA MEMOIRE... < LA COPIE EST FAITE TELLE < QUE : < < BMEMQ <-- (AMEMQ). < < CALL #SISP CMS5 PSRSLO# LRM A AMEMQ: WORD O>DADR < (A)=DADR-ADRESSE DU PREMIER MOT DE LA < ZONE DE MEMOIRE QUELCONQUE A VISUA- < LISER. < (A)=FUTUR 'SLO', LR A,B < AFIN DE CALCULER UN 'SLE' : ADRI TBMEMQ>DADR-Z,B < (B)='SLE' DE FACON QUE (SLO,SLE) ENCADRE < EXACTEMENT LA ZONE A COPIER... WOE < ENCADREMENT DE LA MEMOIRE... LRM A,B,X WORD O < (A)=ADRESSE DE DEBUT RELATIVE A 'SLO' < DE L'EMETTEUR, WORD BMEMQ < (B)=ADRESSE DU RECEPTEUR, WORD TBMEMQ < (X)=NOMBRE DE MOTS A DEPLACER... MVTM < ET COPIE EN MEMOIRE BASSE D'UNE ZONE < QUELCONQUE DE LA MEMOIRE... CALL #SISP CMS5 PLRSLO# < < < G E S T I O N D U R E G I S T R E ' I M ' : < < LRM W WORD RIMMST < (W)=ADRESSE DE LA COPIE EN MEMOIRE DEBA- < NALISEE DU REGISTRE 'IM' DU PROCES- < SEUR MAITRE, LA O,W < (A)=VALEUR A DONNER A 'IM'... XIMR A < ET ON MET A JOUR AINSI PERIODIQUEMENT < LE REGISTRE 'IM', QUI PEUT DONC ETRE < MODIFIE INTERACTIVEMENT PAR LE 'DEBUG < ABSOLU', VIA LE MOT 'RIMMST'... < < < V E R I F I C A T I O N D E S C H E C K - S U M S < D E S B L O C S " R O M " - " R A M " : < < < FONCTION : < CE MODULE PERMET DE SIMULER < DES BLOCS DE MEMOIRE "ROM" ; < EN EFFET, ON VERIFIE EN PERMA- < NENCE SI CERTAINES ZONES MEMOIRE < DONT LE CONTENU NE PEUT CHANGER, < NE CHANGE QUAND MEME PAS, ET CECI < PAR 2 CAUSES PRINCIPALES : < 1 - LA MALVEILLANCE (AU PUPITRE...), < 2 - LES ERREURS DANS LE SYSTEME... < < FRCHEC:: VAL 4 < LOGARITHME EN BASE 2 DE LA FREQUENCE DES < TESTS "ROM"/"RAM" EXPRIMEE EN UNITE < 2*65535 MICRO-SECONDES... LRM W WORD BALAIS < (W)=ADRESSE DU "BALAIS", DONT LA VALEUR < EST INCREMENTEE APRES CHAQUE 'HALT', < DONC AVEC LA PERIODE ANNONCEE... LAI K < CLEAR 'A', LB O,W < (B)=VALEUR COURANTE DU "BALAIS"... AFRCHK: SCRD FRCHEC < ET ON DIVISE LE "BALAIS" POUR SAVOIR < S'IL EST DIVISIBLE PAR 2**FRCHEC... JANE CHEK04 < ET BIEN NON, IL N'EST PAS DIVISIBLE, < DONC ON NE FAIT PAS LE TEST "ROM"/"RAM", < FAVORISANT AINSI : < 1 - LA STABILITE DU DISPLAY AU PUPITRE < DE L'"IDLE", < 2 - L'EXECUTION DES COMMANDES DU TYPE < "!ACTIVITE R/V/B...". LRM W < OUI, ALLONS VERIFIER... WORD CHAIN2 < (W)=ADRESSE DE DEBUT DE LA CHAINE < DES BLOCS. < < PARCOURS DE LA < CHAINE DES BLOCS : < CHEK01: EQU $ < < CALCUL DU CHECK-SUM < DU BLOC COURANT : < LAI K < (A)=CUMUL DE CALCUL DES CHECK-SUMS, LB CHAINA,W < (B)=ADRESSE DU BLOC PRECEDENT, CE QUI DON < LE TEST DE FIN DE CALCUL DU CHECK- < SUM DU BLOC COURANT, LX CHAINX,W < (X)=VALEUR ATTENDUE DU CHECK-SUM. CHEK02: EQU $ EOR O,W < CUMUL DU CHECK-SUM, ADRI -D,W < PASSAGE AU MOT PRECEDENT, CPR B,W < S'IL EXISTE ??? JNE CHEK02 < OUI... CPR A,X < NON, ALORS LE CHECK-SUM EST-IL BON ??? JE CHEK03 < OUI, OK... CHEKPA: BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < IL CONVIENT D'ABORD DE < REPERER LE BLOC EN CAUSE, < ET VERIFIER QU'IL N'Y A < PAS REELLEMENT D'INFORMA- < TIONS VARIABLES OUBLIEES < LORS DE L'IMPLANTATION DES < #SISP CMS5 CHECK# ; SI CE < N'EST PAS LE CAS, ALORS ?!??! < CHEK03: EQU $ LA CHAINA,W < (A)=ADRESSE DU BLOC "ROM" PRECEDENT, CAR < ON SAUTE LE BLOC "RAM"... LR A,W < AFIN DE L'ACCEDER AU TOUR SUIVANT... CP INFINI < EST-CE LA FIN DE LA CHAINE DES BLOCS ??? JNE CHEK01 < NON, AU BLOC PRECEDENT... < < RETOUR A L'IDLE : < CHEK04: EQU $ LRM A WORD TESTRT < (A)=ADRESSE DE RETOUR DES TESTS... PSR A < ET ON SIMULE RSR < UN 'GOTO''TESTRT'... PAGE < < < G E S T I O N D E S R E G I S T R E S ' H D C ' : < < < FONCTION : < IL N'Y A PAS MALHEUREUSEMENT AUTANT < DE JEUX DE REGISTRES 'HDC' QU'IL Y < A DE PERIPHERIQUES DE CE TYPE ; < IL FAUT DONC UNE STRATEGIE D'ALLO- < CATION : < 1 - ON DISPOSE D'UN POOL MEMORISE < DANS LA PILE 'PILDKX' (PLEINE A < L'INITIALISATION DU SYSTEME) ; < 2 - 'DKM' ET 'DKU' FONT DES 'GET' < SUR CE POOL QUAND ILS ONT BESOIN < D'UN JEU, ET DES 'REL' LORSQU'ILS < ONT FINI (A LA SORTIE DES HANDLERS) ; < 3 - 'DKF' OBEIT AU MEME PRINCIPE A < LA DIFFERENCE PRES SUIVANTE : A LA < SORTIE DE SON HANDLER, SUIVANT LA < VALEUR DE L'INDICATEUR BRCDKF(ETASYS), < IL PEUT GARDER SON JEU DE REGISTRES < AUSSI LONGTEMPS QUE CET INDICATEUR < L'Y AUTORISE, AINSI 'DKF' SERA MOINS < RALENTI... < < RHDC0:: VAL K < NUMERO DU PREMIER JEU. < < < S E M A P H O R E D ' A L L O C A T I O N : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# SEMDKX: WORD NRHDC < PROTEGE L'ACCES AU 'NRHDC' JEUX... DZS LSEM SEMDKY: EQU SEMDKX < A CAUSE DE SEMDKZ: EQU SEMDKX < L'ASSEMBLEUR... CALL #SISP CMS5 DOL2# < < < P O O L D E J E U X D E R E G I S T R E S : < < PILDKX: BYTE NRHDC;NRHDC < LA PILE EST PLEINE A L'INITIALISATION < DU SYSTEME : TOUS LES REGISTRES SONT < LIBRES. XWOR%1: VAL CCBCCN=K DO NRHDC WORD RHDC0=FCDO>XWOR%1 < NUMERO D'UN JEU LIBRE POSITIONNE... < < < C O N S T A N T E S D I V E R S E S : < < XXDK4:: VAL 128 < NOMBRE DE TENTATIVES AUTORISEES SUR UN < ECHANGE EN ERREUR. PAGE < < < D C T D K F : < < CALL #SISP CMS5 DOL1# DCTDKF: EQU $ PSTDKF: WORD K;K;K;K;COM+DEPCS;DCTDKF;NIL;PILDKF;HANDLR;SMST;SO;SE #@ASCI " DKF" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XXDCTP < ETALOC=XXDCTP : 'DKF' NON LOUABLE... WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR 'DKF', WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR 'DKF'. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLDKF < ROUTINE SPECIFIQUE D'EXECUTION DES < ENTREES-SORTIES SUR 'DKF'. WORD ITDKF < ROUTINE SPECIFIQUE DE TRAITEMENT < DES INTERRUPTIONS SUR 'DKF'. WORD K;K < ETAT. WORD COSBT?B0SIT=FMASK(K=FCINST < BITSEM. WORD XXDK4;TRYDKF < NTRIES ET FRTRY. WORD K < HSTATS. XWOR%2: VAL 2 WORD XWOR%2*DKCMS4 < TESTO#0 : TIME-OUT A TESTER... XWOR%1: VAL K XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < LISTE DES FONCTIONS AUTORISEES. XWOR%1: VAL K < INITIALISATION... XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARDKF: EQU $ IF VARDKF-DCTDKF-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPERANDES DES 'SIO' : < WORD ACDKF?FPHCME SADKF:: VAL $-D-VARDKF < SORTIE ADRESSE SECTEUR. WORD ACDKF?FPHSAD CSDKF:: VAL $-D-VARDKF < SORTIE COMPTE DE SECTEURS. WORD ACDKF?FPHCMD CDDKF:: VAL $-D-VARDKF < SORTIE COMMANDE. WORD ACDKF?FPHETA EADKF:: VAL $-D-VARDKF < ENTREE MOT D'ETAT A. WORD ACDKF?FPHETB EBDKF:: VAL $-D-VARDKF < ENTREE MOT D'ETAT B. WORD ACDKF INIDKF:: VAL $-D-VARDKF < POUR INITIALISER LE CCB. < < 'CCB' DU DISQUE 'DKF' : < WORD K CCDKG0:: VAL $-D-VARDKF < POUR INITIALISER 'CCDKF0', WORD K CCDKG2:: VAL $-D-VARDKF < DE MEME POUR 'CCDKF2'... CCDKF:: VAL $-VARDKF < 'CCBDKF' : WORD K CCDKF0:: VAL $-D-VARDKF < MOT 0 DU 'CCB'. BYTE CCBHDC?XSNDKF;K CCDKF1:: VAL $-D-VARDKF < MOT 1 DU 'CCB', DONT LE FORMAT EST : < BITS 0-1 : MODE 'HDC', < BITS 2-7 : SOUS-NIVEAU NORMAL, < BITS 11-15 : NUMERO DU JEU DE REGISTRES < 'HDC' UTILISE. WORD NIL CCDKF2:: VAL $-D-VARDKF < MOT 2 : ADRESSE-MOT DU BUFFER EN < MEMOIRE (POIDS FAIBLES). WORD NILK CCDKF3:: VAL $-D-VARDKF < MOT 3 : LONGUEUR-MOTS DU BUFFER. WORD ACDKF CCDKF4:: VAL $-D-VARDKF < MOT 4 : OPERANDE DE LA 'SIO' D'ECHANGE : < BITS13-15=000 : LECTURE, < BITS13-15=001 : ECRITURE. < < ACCES AU REGISTRES 'HDC' : < XXNHDC:: VAL K < ETAT DE NON ALLOCATION DE REGISTRES 'HDC' IF XXNHDC-K,,XEIF%, IF ATTENTION : LES TESTS D'APPROPRIATION DE IF REGISTRES 'HDC' PAR 'CPZ' VONT MERDER !!! XEIF%: VAL ENDIF WORD XXNHDC XRHDCF:: VAL $-D-VARDKF < INDICATEUR DE L'ETAT D'ALLOCATION : < 0 : 'DKF' N'A PAS DE JEU DE REGISTRES, < 1 : 'DKF' EN A UN, SOIT PARCEQU'IL < EST EN TRAIN DE L'UTILISER, SOIT < PARCEQU'IL EST AUTORISE A LE < CONSERVER EN PERMANENCE... < < INFORMATIONS DE "DIMENSIONNEMENT" : < WORD NSDKF NOSDKF:: VAL $-D-VARDKF < NOMBRE DE SECTEURS SUR 'DKF'. <******************************************************************************* WORD '4000 XWOR%1: VAL '0000000@@@@ < NOMBRE DE MOTS MAX ECHANGES. <******************************************************************************* NTRN IF XWOR%1/LK(K=FCREST,,XEIF%, IF ATTENTION : LE NOMBRE DE MOTS MAX ECHANGEABLES IF DOIT ETRE UN NOMBRE ENTIER DE K-MOTS !!! XEIF%: VAL ENDIF TRN XX16KK:: VAL XWOR%1/LK < NOMBRE DE 'K' MAX ECHANGEABLE... NMMDKF:: VAL $-D-VARDKF < NOMBRE DE MOTS MAX ECHANGES. < < VIRTUALISATION DU BAS DE 'DKF' : < WORD TVDKF,X ATVDKF:: VAL $-D-VARDKF < ACCES A LA TABLE DE VIRTUALISATION... WORD ZERBV AVDKF:: VAL $-D-VARDKF < ADRESSE DU PREMIER SECTEUR VIRTUALISE. < (A UNE FRONTIERE DE PISTE) WORD ZERBNV ANVDKF:: VAL $-D-VARDKF < ADRESSE DU PREMIER SECTEUR NON VIRTUA- < LISE (A UNE FRONTIERE DE PISTE). < < BLOC DE DEMANDE DE SIMULATION DE 'DKF' SUR 'DKM' : < DEMFM:: VAL $-VARDKF DZS LDEM0B < ON MET UNE 'BOX', ON NE SAIT JAMAIS... < < < P I L E : < < CALL #SISP CMS5 DOL2# PILDKF: EQU $-DEPILE < PILE DKF XWPILE: VAL LPILEH+6 CALL #SISP CMS5 GENPIL2# PAGE < < < T A B L E D E V I R T U A L I S A T I O N < D U D E B U T D E ' D K F ' : < < CALL #SISP CMS5 DOL1# NTRN IF ZERBV/XNSPDK(K=FCREST-K,,XEIF%, IF ATTENTION : 'ZERBV' EST MAL IMPLANTEE !!! XEIF%: VAL ENDIF TRN < < < FONCTION : < LE DEBUT DU DISQUE DE 'ZERBV' A 'ZERBNV' < EXCLU N'EST ACCEDE QUE SECTEUR PAR SECTEUR ; < IL EST OCCUPE PAR 'TOGB', 'TP' ET L'ARBRE DU < SYSTEME ; ON PEUT LE VIRTUALISER PISTE A PISTE < PUISQU'UUCUN ECHANGE NE RISQUE DE CHEVAUCHER < 2 PISTES. AINSI, UTILISANT LES PISTES INUTILISEES, < ON DISPOSE DE PISTES DE RESERVE DES PISTES VIRTUA- < LISEES EN DEFAUT... < < NTRN IF ZERBNV/XNSPDK(K=FCREST-K,,XEIF%, IF ATTENTION : 'ZERBNV' N'EST PAS A UNE FRONTIERE DE PISTE... XEIF%: VAL ENDIF TRN IF NOCMO-Z-I,,XEIF%, IF ???!??!? XEIF%: VAL ENDIF TVDKF: EQU $-ZERBVP < DEBUT DE LA TABLE DE VIRTUALISATION. NTRN XWOR%1: VAL NPVDKF+NOCMO-E/NOCMO XWOR%2: VAL NPVDKF/NOCMO(K=FCREST TRN XWOR%3: VAL NPVDKF+XWOR%2 < TRANSLATION DES OCTETS GAUCHES, XWOR%4: VAL XWOR%3+NOCMO-Z < TRANSLATION DES OCTETS DROITS. <******************************************************************************* DO XWOR%1 BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4 XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT, <******************************************************************************* IF XWOR%2-K,,XEIF%, XWOR%5: VAL XWOR%5(MOCG < CAS D'UNE TABLE DE LONGUEUR IMPAIRE, $EQU $-D < ON REVIENT SUR LE DERNIER MOT, WORD XWOR%5 < ET ON ECRASE LE DERNIER OCTET... XEIF%: VAL ENDIF CALL #SISP CMS5 DOL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R ' D K F ' : < < < ARGUMENTS: < (L)=ADRESSE DE LA 'DCT' DE 'DKF', < (W)=ADRESSE DE LA DEMANDE A TRAITER, < (A)='NSPTYP' DE CETTE DEMANDE. < < FONCTION: < CE HANDLER A A SA CHARGE DE < GERER LE DISQUE FIXE 'DKF' ; < IL PREND LA DEMANDE DE TETE, < LANCE L'ECHANGE DEMANDE, ATTEND < L'INTERRUPTION CORRESPONDANTE, < ET ANALYSE LA FACON DONT IL < S'EST DEROULE... < SI 'DKF' EST DECLARE ABSENT DANS 'ETASYS', < LA DEMANDE EST TRANSFEREE SUR 'DKM' QUI < ASSURERA SA SIMULATION DANS LA < LA ZONE DE COPIE 'DKF' --> 'DKM'... < < USE L,DCT0 USE W,DEM0 HDLDKF: EQU $ < < VALIDATION DE LA DEMANDE : < TBT TYPAD < ADRESSE MOT OU OCTET ??? JC DKF11 < MOT... LA ARGDEM+AMDEM < (A)=ADRESSE-OCTETS DU BUFFER : TBT NBITMO-B < EST-IL BIEN A UNE FRONTIERE DE MOTS ??? JNC SYSRB3 < OUI, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR D'OU VIENT CET < ECHANGE BIZARRE ; C'EST < PEUT-ETRE UN PROGRAMME < ESCLAVE SOUS ":SYS" QUI < S'EST CONNECTE DIRECTEMENT < A 'DKF' !!! < SYSRB3: EQU $ DKF11: EQU $ LA ETASYS TBT NSPDKF-NSPDK < 'DKF' EST-IL LA ??? JNC DKF20 < NON, ON VA SIMULER... < < < A C C E S A U V R A I ' D K F ' : < < LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS DE L'ECHANGE : JAE ERDKF3 < (CODEM)=0 : ERREUR... ADRI NOCMO-E,A < ARRONDI EVENTUEL AU MOT SUPERIEUR... SLRS NOCMO=K < CONVERSION EN UN NOMBRE DE MOTS, CP VAR+NMMDKF < ET VALIDATION... JG ERDKF3 < (CODEM) EST TROP GRAND : ERREUR... LA ARGDEM+ASDEM < (A)=ADRESSE DU PREMIER SECTEUR : JAL ERDKF4 < ADRESSE INEXISTANTE... CP VAR+NOSDKF < ET VALIDATION... JGE ERDKF4 < (ASDEM) INEXISTANT : ERREUR... < < ALLOCATION EVENTUELLE D'UN < JEU DE REGISTRES 'HDC' : < CPZ VAR+XRHDCF < EN-A-T'ON DEJA UN ??? JNE DKF11X < OUI, RIEN A FAIRE... PSR X LAD VAR+CCDKF SVC SVCM4 < ALLOCATION D'UN CONTEXTE 'HDC'... PLR X IC VAR+XRHDCF < MEMORISONS QU'UN JEU DE REGISTRES < 'HDC' EST EN LA POSSESSION DE 'DKF'. DKF11X: EQU $ < < CONSTRUCTION DU 'CCB' : < STZ VAR+CCDKG0 < REINITIALISATION DU MOT0 (EN PARTICULIER < ON RAZE LE BIT DE COMPTE-RENDU). LA NSPTYP TBT TYPAD < ADRESSE NOT OU OCTET ??? LA ARGDEM+AMDEM < (A)=ADRESSE ARGUMENT. JC DKF12 < C'EST UNE ADRESSE MOT, OK... SLRS NOCMO=K < CAS DES ADRESSES OCTET. DKF12: EQU $ STA VAR+CCDKG2 < MOT2=ADRESSE-MOT BUFFER. LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS DU BUFFER, ADRI NOCMO-E,A < ARRONDI A L'EVENTUEL MOT SUPERIEUR, SLRS NOCMO=K < CONVERSION EN UN NOMBRE DE MOTS, STA VAR+CCDKF3 < MOT3=LONGUEUR-MOTS DU BUFFER. LB VAR+INIDKF < (B)=ADRESSE DU COUPLEUR, LA ARGDEM+OPDEM < (A)=(OPDEM) POUR DETERMINER LE SENS : XWOR%1: VAL FGW?FGR=K < ACCES AU BIT DISCRIMINANT LA < LECTURE DE L'ECRITURE... TBT NBITMO-B-XWOR%1 JNC DKF5XX < CAS DE LA LECTURE... ADRI FPHOUT-FPHIN,B < CAS DE L'ECRITURE... DKF5XX: EQU $ STB VAR+CCDKF4 < MOT4=ARGUMENT DE LA 'SIO' D'ECHANGE. DKF5: EQU $ < < ECHANGE PROPREMENT DIT : < LAI MOMINI SIO VAR+CDDKF < RESET DU COUPLEUR ET DU PERIPHERIQUE... LA ARGDEM+ASDEM < (A)=ADRESSE DU PREMIER SECTEUR : CP VAR+AVDKF < EST-ON DANS LA ZONE VIRTUELLE ??? JL DKF5X < NON... CP VAR+ANVDKF < EST-ON DANS LA ZONE VIRTUELLE ??? JGE DKF5X < NON, ON GARDE 'ASDEM'... PSR B < OUI, CAR IL EST UTILE... XWOR%1: VAL XNSPDK=K SLRD XWOR%1 < (A)=NUMERO DE PISTE, LR A,X < (X)=NUMERO DE PISTE VIRTUELLE, LA VAR+CCDKF3 < LONGUEUR EN MOTS DE L'ECHANGE, CPI YY7 < ECHANGE-T'ON BIEN UN SECTEUR ??? JLE DKF5Y < OUI, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < EXAMINER LA TABLE DE VIRTUALISATION, < LA DEFINITION DE LA ZONE VIRTUELLE ET < L'ASDEM... < LA ARGDEM+ASDEM < ON RESTAURE L'ASDEM... JMP DKF5Z < ET ON NE FAIT RIEN... DKF5Y: EQU $ LBY &VAR+ATVDKF < (A)=NUMERO DE PISTE REELLE... SLLD XWOR%1 < ET ON RECONCATENE... DKF5Z: EQU $ PLR B DKF5X: EQU $ < < ENVOI DES ARGUMENTS : < SIO VAR+SADKF < SORTIE DE L'ADRESSE DU PREMIER SECTEUR. LA VAR+CCDKF3 < (A)=LONGUEUR-MOTS DU BUFFER, ADRI YM7,A ANDI YM7)MFFFF < (A)=LONGUEUR-MOTS DU BUFFER, MAIS SUR < UN NOMBRE ENTIER PAR EXCES DE < SECTEURS, SIO VAR+CSDKF < SORTIE COMPTE DE SECTEURS SUR LES BITS < 1 A 8 DU REGISTRE 'A'. LAD VAR+CCDKF < ADRESSE DU CCB PSR X SVC SVCM6 < ADRESSE SUR 20 BITS DANS LE 'CCB'... PLR X BSR ASDIPI < ENVOI DU 'CCB' A L''IOP'... LAI MOMSTR?MOMINT < (A)=LECTURE A PRIORI... XWOR%1: VAL FPHIN?FPHOUT=K TBT NBITAB-B-XWOR%1 < LECTURE OU ECRITURE ??? JNC DKF5XY < CAS DE LA LECTURE... ADRI MOMRW,A < CAS DE L'ECRITURE... DKF5XY: EQU $ SIO VAR+CDDKF < ET ENFIN LANCEMENT DE L'ECHANGE PAR < UNE 'SIO' D'ECHANGE... < < ATTENTE DE LA FIN D'ECHANGE : < BSR ACSWIT < RAZ BETA(SIT) ET ATTENTE DE FIN < D'ECHANGE. RAPPEL : DANS 'ARIT', LE < LE MOT D'ETAT 'A' EST LU ET STOCKE < DANS 'ETAT0' DE LA 'DCT' DE 'DKF'... BSR ATHDS < EST-CE UNE VRAIE IT QUI EST MONTE < OU UN DEFSEC/RECOVERY QUI < A SIMULE LE 'RLSE''SIT' ??? JC DKF5 < C'EST UN DEFSEC/RECOVERY,DONC < IL EST PLUS PRUDENT DE < RECOMMENCER L'ECHANGE... CPZ ETAT0 < CAS D'UNE "VRAIE" INTERRUPTION ; Y-A-T'IL < EU DES DEFAUTS ??? JL ERDKF5 < OUI, ERREUR... < < QUI SAIT, COMPTE-RENDU DE L'ECHANGE : < LA VAR+CCDKF0 SBT BCCBCR < MISE EN PLACE DU BIT DE COMPTE-RENDU STA VAR+CCDKF0 < DANS LE 'CCB', LAD VAR+CCDKF < (A)=ADRESSE DU 'CCB', BSR ASDIPI < DEMANDE DE COMPTE-RENDU A L''IOP'... LA VAR+CCDKF3 < (A)=MOT3 DU 'CCB', C'EST-A-DIRE COMPTE- < COMPTE-RENDU DU CANAL 'HDC' SUR < LES BITS 0-1 POUR L'ETAT, ET 2-15 < POUR LE COMPTE DE MOTS RESIDUELS : < SIGNIFICATION DES BITS 0-1 : < =00 : OK, TOUT S'EST BIEN PASSE, < =01 : L'ECHANGE S'EST ARRETE SUR UN < DEFAUT SECTEUR, OU UN 'INI', < =10 : UNE PARITE MEMOIRE A ETE RENCON- < TREE AU COURS DE L'ECHANGE, < =11 : UNE MEMOIRE INEXISTANTE A ETE < RENCONTREE AU COURS DE L'ECHANGE. < LES BITS 2-15, QUANT A EUX, DONNENT LE < COMPTE DE MOTS RESIDUELS EN FIN D'ECHAN- < GE (NORMALEMENT NUL...). JAE DKF2 < OK, LES BITS 0-1 SONT NULS, ET LE < COMPTE DE MOTS RESIDULES EST NUL... JAG SYSRB4 < MAUVAIS, MAIS CE N'EST NI UNE PARITE, < NI UNE MEMOIRE INEXISTANTE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < IDENTIFIER ET LOCALISER < LA MEMOIRE INEXISTANTE OU < LA PARITE !!! < JMP ERDKF5 < ET ERREUR... SYSRB4: EQU $ TBT BCCBDC < EN SUPPOSANT QUE LA 'SYSER' PRECEDENTE < NE S'EST PAS PRODUITE, EST-CE UN DEFAUT < SECTEUR (OU UN 'INI') ??? JC ERDKF5 < OUI... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ON < PEUT AVOIR UN COMPTE DE < MOTS RESIDUELS NON NUL ??? < RELANCER L'ECHANGE PAR UNE < SORTIE EN ERREUR : 'JMP ERDKF4'... < DKF2: EQU $ < < < S O R T I E N O R M A L E : < < STZ ETAT0 DKF3: EQU $ < < DESALLOCATION EVENTUELLE DU < JEU DE REGISTRES 'HDC' : < CPZ VAR+XRHDCF < A-T'ON UN JEU ??? JE DKF3X < NON, CAS DES ERREURS SITUEES AU DEBUT, < OU DES SIMULATIONS SUR 'DKM'. LA ETASYS < OUI, MAIS TBT BRCDKF < PEUT-ON LE GARDER ??? JC DKF3X < OUI... STZ VAR+XRHDCF < NON, ON LE REND... PSR X LAD VAR+CCDKF SVC SVCM5 < DESALLOCATION DU CONTEXTE 'HDC'... PLR X DKF3X: EQU $ RSR < < < T R A I T E M E N T D E S E R R E U R S S O F T W A R E : < < ERDKF3: EQU $ < COMPTE DE MOTS INVALIDES : LBY VAR+NMMDKF < LORSQUE LA TAILLE DU BUFFER EST < TROP GRANDE, LE CODE D'ERREUR < RETOUR EST PRECISEMENT NMMDKF/YY8 < CECI EST UTILISE PAR LE SWAPPER. < ("LE SWAPPER CAMEMBERT"...) JMP DKF4 < VERS LA SORTIE DES ERREURS SOFTWARE... ERDKF4: EQU $ < ADRESSE SECTEUR INEXISTANTE : EDKAI:: VAL 3 < ERREUR 'ADRESSE INEXISTNTE'. LAI CORBT?NBITMO-B=FMASK(K?EDKAI=FCINST DKF4: EQU $ STZ ETAT1 < ETAT1=0 POUR UN DEFAUT SOFWARE, SBT NBITMO-B STA ETAT0 < ETAT0=CODE D'ERREUR... JMP DKF3 < VERS LA SORTIE... < < < T R A I T E M E N T D E S E R R E U R S H A R W A R E : < < ERDKF5: EQU $ < < NOTA : < DANS LE CAS DES ERREURS < HARDWARE, 'ETAT0' ET 'ETAT1' < CONTIENNENT (VOIR 'ARIT') < LES MOTS D'ETAT 'A' ET 'B', < IL N'Y A DONC RIEN D'AUTRE < A FAIRE ; DE PLUS L'OCTET0 < DE 'ETAT0' ETANT NON NUL, < IL Y AURA UN 'RETRY'... < JMP DKF3 < VERS LE RETOUR... < < < S I M U L A T I O N ' D K F ' S U R ' D K M ' : < < DKF20: EQU $ LA NSPTYP XWOR%2: VAL '0000 < INITIALISATION DU MASQUE INDICATEURS. XWOR%2: VAL COSBT?PRIO=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?BACT=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?VBOX=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?TYPAD=FMASK(K?XWOR%2=FCINST MKTD:: VAL XWOR%2 < EN EFFET, CE MASQUE SERA RE-UTILISE < PAR LES MEMOIRES VIRTUELLES DKA ET DKB, < AINSI QUE LORS D'UNE EVENTUELLE SIMU- < LATION DE 'DKU' SUR 'DKM'. ANDI MKTD < ON NE CONSERVE QUE QQ INDICATEURS, QUE STA VAR+DEMFM+XXNSP < L'ON PLACE DANS LA DEMANDE DKF --> DKM. LAI NSPDKM STBY VAR+DEMFM+XXNSP < AFIN D'ATTEINDRE 'DKM'. LAD VAR+DEMFM+T LR A,B < (B)=RECEPTEUR=DEMANDE LOCALE A 'DKF'. LAD ARGDEM+OPDEM < (A)=EMETTEUR=DEMANDE ARGUMENT (OPDEM...) LXI ASDEM-OPDEM+Z < (X)=NOMBRE DE MOTS A DUPLIQUER... MOVE < DUPLICATION DE OPDEM, AMDEM, CODEM < ET ASDEM. IF XDKSYM-K,,XEIF%, IF ATTENTION : LE 'GB' DE SIMULATION DE 'DKF' SUR 'DKM' IF DOIT ETRE LE PREMIER... XEIF%: VAL ENDIF PSR W < SAVE L'ADRESSE DE LA DEMANDE... LAD VAR+DEMFM LR A,W < (W)=ADRESSE DE LA DEMANDE "LOCALE"...- BSR ACHAND < ENVOI DE LA DEMANDE DKF --> DKM ; ON < NOTERA QUE 'DKM' DISCRIMINERA CET APPEL < PAR 'ETASYS' ET LE CONTENU DE 'ETADEM'. BSR ACHANW < ATTENTE DE FIN D'ENTREE-SORTIE... LA ARGDEM+ETADEM < TRANSMISSION DES STA ETAT0 < CONDITIONS DE RETOUR... PLR W < ON RESTAURE... JMP DKF3 < ET C'EST TOUT... PAGE < < < R O U T I N E D ' I T D K F < < < RAPPEL : < ON TRAVAILLE EN MODE 'HDC' SUR 'DKF' ; EN CONSEQUENCE < ON RECUPERE UNE INTERRUPTION EXCEPTION EN FIN < D'ECHANGE, QUE L'ON FAIT RETOMBER PAR UNE 'SIO' < D'ETAT AVEC AU PASSAGE LE STOCKAGE DES MOTS < D'ETAT 'A' ET 'B' DANS 'ETAT0' ET 'ETAT1' DE 'DCTDKF' < POUR EXPLOITATION ULTERIEURE PAR LE HANDLER 'DKF'... < ON NE REVEILLE LE HANDLER QUE S'IL Y A UN < ECHANGE EN COURS. < < < NOTA : < EN CAS D'INTERRUPTION < NORMALE, ON FERA UNE 'SYSER'... < < < ARGUMENT : < (B)=0 : INTERRUPTION NORMALE, < (B)=1 : INTERRUPTION EXCEPTION. < < ITDKF: EQU $ CPZR B < QUELLE EST LA NATURE DE L'INTERRUPTION ?? JNE SYSRB5 < EXCEPTION, CE QUI EST "NORMAL"... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE : < COMPRENDRE COMMENT UNE < INTERRUPTION NORMALE A PU < APPARAITRE !!! < SYSRB5: EQU $ SIO VAR+EADKF < LECTURE DU MOT D'ETAT 'A', STA ETAT0 < ET MISE DANS 'ETAT0'. SIO VAR+EBDKF < LECTURE DU MOT D'ETAT 'B', STA ETAT1 < ET MISE DANS 'ETAT1'. BSR ATEC < Y-A-T'IL UN ECHANGE EN COURS ??? JE ITDKF1 < NON, DONC PAS DE REVEIL DE 'HDLDKF'... BSR ARVHDL < OUI, REVEIL DE 'HDLDKF'... ITDKF1: EQU $ RSR PAGE < < < R O U T I N E D E S R E P R I S E S D K : < < < FONCTION : < CE MODULE EST CHARGE DE REGARDER, < LORSQU'IL Y A EU ERREUR, S'IL Y A < ENCORE DES ESSAIS A TENTER ; SINON, < POUR 'DKM' ET 'DKF', LORSQ'IL S'AGIT < D'UNE LECTURE ('FGR'), IL POSITIONNE < L'ENSEMBLE DU BUFFER AVEC 'Q8000', < EN ESPERANT QUE TOUT LE MONDE S'EN < CONTENTERA... < < < ARGUMENT : < (X)=NBRE D'ESSAIS RESTANT A TENTER. < < < RESULTAT : < (A)=K : OK, PAS DE REPRISE, < #0 : REPRISE DE L'OPERATION (IL Y A EU UN < DEFAUT HARD SUR LE DK. < < TRYDKF: EQU $ < ENTRY 'DKF'. TRYDKM: EQU $ < ENTRY 'DKM'. < < COMMENT CELA S'EST-IL PASSE ??? < CPZ ETAT0 < COMMENT CELA S'EST-IL PASSE ??? JE TRYDKZ < TRES BIEN... < < MAL, QU'Y FAIRE ??? < LBY ETAT0 < NON, ERREUR SOFT OU HARD ??? JAE TRYDKS < SOFT, VERS UNE SYSER IMMEDIATE... LR X,A < HARD, (A)=NBRE D'ESSAIS RESTANT A TENTER. CPI XXNTRY < EST-CE LE DERNIER ESSAI ???? JG TRYDKZ < NON, LAISSONS LUI AU MOINS < UNE CHANCE... TRYDKS: EQU $ LA ETASYS < ACCES A L'ETAT DU SYSTEME, TBT BTRYDK < FAUT-IL FAIRE UNE 'SYSER' ??? JNC TRYDKX < 0 ==> ET OUI... STZ ETAT0 < 1 ==> NON, ET ON FAIT MEME CROIRE < QUE TOUT C'EST BIEN PASSE PAR LA < REMISE A 0 DE 'ETAT0'... JMP SYSRB6 < VERS LA RECUPERATION DE 'ETAT0' (...). TRYDKX: EQU $ BSR ASYSER < E R R E U R F A T A L E ... < < QUE FAIRE ??? < ATTENTION, ON A EPUISE < TOUTES LES TENTATIVES DE < 'RETRY' !!! < SYSRB6: EQU $ < < TRAITEMENT DES DEFAUTS SUR 'LECTURE' : < XWOR%1: VAL FGR?FGW=K < BIT DISCRIMINANT LECTURE/ECRITURE. LA ARGDEM+OPDEM TBT NBITMO-B-XWOR%1 < SENS DE L'OPERATION ??? JC TRYDKZ < ECRITURE, ON LAISSE LE BUFFER... PSR X,Y < LECTURE : ON VA TRUANDER LE BUFFER... LA ARGDEM+CODEM ADRI NOCMO-E,A SLRS NOCMO=K LR A,X < (X)=NOMBRE DE MOTS A ECHANGER, LA NSPTYP TBT TYPAD < ADRESSE MOT, OU OCTET ??? LA ARGDEM+AMDEM JC TRYDK1 < MOT, PAS DE DECALAGE... ADRI NOCMO-E,A < OCTET... SLRS NOCMO=K TRYDK1: EQU $ LR A,Y < (Y)=ADRESSE-MOTS DU BUFFER... < (DANS UNE PAGE DE 32K) LA ARGDEM+ASDEM < ACCES AU PREMIER SECTEUR : IF XXGB-K,,XEIF%,XEIF% IF ATTENTION : 'XXGB' EST MAUVAIS !!! XEIF%: VAL ENDIF IF XXGB-K,XEIF%,XEIF%, CPI XXGB < EST-CE UN MORCEAU DE 'TOGB' ??? JL TRYDK2 < NON... XEIF%: VAL ENDIF CPI XXGB+NSTO < EST-CE UN MORCEAU DE 'TOGB' ??? JGE TRYDK2 < NON... < < CAS D'UNE ERREUR DE LECTURE SUR UN MORCEAU DE 'TOGB' : < LR X,A < (A)=NOMBRE DE MOTS A ECHANGER, CPI YY7 < ET VALIDATION... JE TRYDK4 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REGARDER LE DEMANDEUR DE L'ECHANGE QUI DOIT < ETRE 'DKA', ET VOIR ALORS QUI EST LE DEMANDEUR < DE 'DKA' QUI DEVRAIT ETRE 'GET'/'REL'... < TRYDK4: EQU $ LAI MMOT)MMOT < VALEUR DE REINITIALISATION D'UN BUFFER < DE 'TOGB'... JMP TRYDK3 < VERS LA REINITIALISATION... < < CAS D'UNE ERREUR DE LECTURE SUR < UN BLOC N'APPARTENANT PAS A 'TOGB' : < TRYDK2: EQU $ LA INFINI < VALEUR DE REINITIALISATION : ON CHOISIT < CELLE-CI CAR ELLE CORRESPOND A UNE FIN < DE QUELQUE CHOSE POUR LE 'SGF' ET LE < 'SGN'... < < REINITIALISATION DU BLOC EN ERREUR : < TRYDK3: EQU $ TRYDKY: EQU $ STAR ADRI P,Y < PARTOUT... JDX TRYDKY PLR X,Y TRYDKZ: EQU $ < < RETOUR : < TRYDKU: EQU $ < ENTRY 'DKU'. LBY ETAT0 < (A)=PARTIE DU MOT D'ETAT DU < DK RELATIVE AUX ERREURS HARD ; < AINSI, S'IL Y A EU DES < ERREURS HARD, ON RECOMMENCERA < L'OPERATION AVEC LE DK. RSR PAGE < < < C O N S T A N T E S D I V E R S E S < D I S Q U E S A M O V I B L E S : < < XXDK1:: VAL 10 < INCREMENT DE LA LONGUEUR DE LA PILE. XXDK2:: VAL '4000 < NOMBRE DE MOTS MAX ECHANGEABLES. XXDK3:: VAL 1 < NUMERO DU JEU DE REGISTRES 'HDC'. < (EN FAIT ALLOUE DYNAMIQUEMENT...) XWOR%1: VAL COSBT?XBITQ=FMASK(K?FGR=FCINST XWOR%2: VAL COSBT?XBITQ=FMASK(K?FGW=FCINST XWOR%3: VAL K XWOR%3: VAL COSBT?FGR=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?FGW=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XWOR%1=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XWOR%2=FMASK(K?XWOR%3=FCINST XXDK5:: VAL XWOR%3 < LISTE DES FONCTIONS RECONNUES. XXDK6T:: VAL 200/THALT < TEMPORISATION DE 200 MICRO-SECONDES < DESTINEE A ESPACER SUFFISAMMENT < CERTAINES 'SIO' AFIN D'EVITER DES < PERTES ALEATOIRES DU READY ???!?!?! XWOR%3: VAL K < INITIALISATION... XWOR%1: VAL COSBT?XBITQ=FMASK(K?FGR=FCINST XWOR%2: VAL COSBT?XBITQ=FMASK(K?FGW=FCINST XWOR%3: VAL COSBT?FGR=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?FGW=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XWOR%1=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XWOR%2=FMASK(K?XWOR%3=FCINST XXDK6:: VAL XWOR%3 < LISTE DES "ALTITUDES" POUR 'DKM' ; POUR < 'DKU', IL FAUDRA LA COMPLETER... PAGE < < < D C T D K M : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTDKM: EQU $ PSTDKM: WORD K;K;K;K;COM+DEPCS;DCTDKM;NIL;PILDKM;HANDLR;SMST;SO;SE #@ASCI " DKM" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XXDCTP < ETALOC=XXDCTP : 'DKM' NON LOUABLE... WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR 'DKM', WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR 'DKM'. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLDKM < HANDLER SPECIFIQUE DE GESTION DE 'DKM'. WORD ITDKM < ROUTINE SPECIFIQUE DE TRAITEMENT DES < INTERRUPTIONS DE 'DKM'. WORD K;K < ETAT. WORD COSBT?B0SIT=FMASK(K=FCINST < BITSEM. WORD XXDK4;TRYDKM < NTRIES ET FRTRY. WORD K < HSTATS. XWOR%2: VAL 2 WORD XWOR%2*DKCMS4 < TESTO#0 : TIME-OUT A TESTER... WORD XXDK5 < LISTE DES FONCTIONS RECONNUES. WORD XXDK6 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARDKM: EQU $ IF VARDKM-DCTDKM-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPERANDES DES 'SIO' : < WORD ACDKM?FPHCME ASDKM:: VAL $-D-VARDKM < SORTIE ADRESSE SECTEUR. WORD ACDKM?FPHCMD CDDKM:: VAL $-D-VARDKM < SORTIE COMMANDE. WORD ACDKM?FPHETA EADKM:: VAL $-D-VARDKM < ENTREE DU MOT D'ETAT 'A'. WORD ACDKM?FPHETB EBDKM:: VAL $-D-VARDKM < ENTREE DU MOT D'ETAT 'B'. WORD ACDKM INIDKM:: VAL $-D-VARDKM < POUR INITIALISER LE 'CCB'. < < 'CCB' DU DISQUE 'DKM' : < WORD COSBT?CCBDKM=FMASK(K=FCINST DSYNC0:: VAL $-D-VARDKM < POUR INITIALISER 'CCDKM0' ; IL CONTIENT < ENTRE AUTRE LE BIT 'CCBDKM' PERMETTANT < LA SYNCHRONISATION SUR LE SECTEUR 0... WORD K CCDKN2:: VAL $-D-VARDKM < POUR INITIALISER 'CCDKM2'... CCDKM:: VAL $-VARDKM < 'CCBDKM' : WORD COSBT?CCBDKM=FMASK(K=FCINST CCDKM0:: VAL $-D-VARDKM < MOT0 : < BIT6=1 : DISQUE A TETE MODILE. BYTE CCBHDC?XSNDKM;XXDK3 < MOT1 : < BITS 0-1 : MODE 'HDC', < BITS 2-7 : SOUS-NIVEAU NORMAL, < BITS 11-15 : NUMERO DU JEU DE REGISTRES < 'HDC' ALLOUES. WORD NIL CCDKM2:: VAL $-D-VARDKM < MOT2 : ADRESSE-MOT DU BUFFER. WORD NILK CCDKM3:: VAL $-D-VARDKM < MOT3 : LONGUEUR-MOTS DU BUFFER. WORD ACDKM CCDKM4:: VAL $-D-VARDKM < MOT4 : OPERANDE DE LA 'SIO' D'ECHANGE : < BITS 13-15=000 : LECTURE, < =001 : ECRITURE. WORD NILK CCDKM5:: VAL $-D-VARDKM < MOT5 : IL CONTIENT LE 'HEADER 1' DU < PREMIER SECTEUR DE L'ECHANGE. < < INFORMATIONS DE DIMENSIONNEMENT : < <******************************************************************************* WORD XXDK2 XWOR%1: VAL '0000000@@@@ < NOMBRE DE MOTS MAX ECHANGEABLES. <******************************************************************************* NTRN XWOR%2: VAL XXSGN9+NOCMO-E/NOCMO TRN IF XWOR%2-XWOR%1,XEIF%,XEIF%, IF ATTENTION : LE NOMBRE MAX D'OCTETS GROUPABLES IF PAR LE 'SGN' DOIT ETRE INFERIEUR OU EGAL AU IF NOMBRE DE MOTS MAX ECHANGEABLES PAR 'DKM' !!! XEIF%: VAL ENDIF NMMDKM:: VAL $-D-VARDKM < LONGUEUR-MOTS MAXIMALE D'UN ECHANGE. < < RELAIS DE SOUS-PROGRAMMES : < WORD SPDKM ASPDKM:: VAL $-D-VARDKM < SOUS-PROGRAMME VIDE POUR 'DKM' ET < DESTINE A DETECTER LES MEMOIRES INEX- < ISTANTES POUR 'DKU'... < < POUR LA GESTION DES ADRESSES : < WORD K SUIDKM:: VAL $-D-VARDKM < INDICATEUR DE "SUITE" : CE MOT EST UTI- < POUR POURSUIVRE UN ECHANGE A CHEVAL SUR < UNE FIN DE CYLINDRE. WORD NILK CYL:: VAL $-D-VARDKM < NUMERO DE CYLINDRE. WORD NILK PIST:: VAL $-D-VARDKM < NUMERO DE PISTE. WORD NILK SECT:: VAL $-D-VARDKM < NUMERO DE SECTEUR. XWOR%1: VAL 24 < NOMBRE DE SECTEURS PAR PISTE. XDKMSP:: VAL XWOR%1 < NOMBRE DE SECTEURS PAR PISTE. XWOR%2: VAL XWOR%1/QUANTA < NOMBRE DE QUANTUM PAR PISTE. XWOR%3: VAL XWOR%2*QUANTA-XWOR%1 IF -XWOR%3,,XEIF%, IF A T T E N T I O N : 'QUANTA' NE DIVISE IF PAS EXACTEMENT LE NOMBRE DE SECTEURS IF PAR PISTE !!! XEIF%: VAL ENDIF WORD XWOR%2 NBSPP:: VAL $-D-VARDKM < NOMBRE DE SECTEURS PAR PISTE. WORD XWOR%1 NBSRPP:: VAL $-D-VARDKM < NOMBRE REEL DE SECTEURS PAR PISTE ; < IL EST UTILISE A LA PLACE DE 'NBSPP' < LORSQU'ON SIMULE 'DKF' SUR 'DKM'... WORD NUQFM/2 VALFM:: VAL $-D-VARDKM < AFIN DE VALIDER LES ADRESSES DEMANDES < LORSQUE L'ON SIMULE 'DKF' ET QU'IL < N'EST PAS DEMANDEUR ; ON DIVISE PAR 2 < CAR EN EFFET, LES ADRESSES SECTEURS < SONT SUR 16 BITS, ET PEUVENT DONC < ETRE DES NOMBRES NEGATIFS... XDKMPC:: VAL 20 < NOMBRE DE PISTES PAR CYLINDRE. WORD XDKMPC NBPPC:: VAL $-D-VARDKM < NB DE PISTES PAR CYLINDRE MINCYL:: VAL K < PREMIER CYLINDRE RECONNU (ON EN FAIT UN < 'VAL' ET NON PAS UN 'WORD', CAR LA < 'DCTDKU' EST SATUREE...). NAXCYL:: VAL XAXCYL-Z < NOMBRE DE CYLINDRES... WORD NAXCYL MAXCYL:: VAL $-D-VARDKM < DERNIER CYLINDRE RECONNU. WORD QUANTA DKMQUA:: VAL $-D-VARDKM < VALEUR DU QUANTA, UTILISEE PAR 'DKU' < LORSQU'IL EST SIMULE SUR 'DKM'. WORD YY8Q DKMLS:: VAL $-D-VARDKM < NOMBRE D'OCTETS CONTENUS DANS UN < BLOC DE 'QUANTA' SECTEURS. WORD TVDKM,X ATVDKM:: VAL $-D-VARDKM < ACCES A LA TABLE DE VIRTUALISATION DES < GROUPES DE CYLINDRES. < < ALLOCATION DES REGISTRES 'HDC' : < WORD XXNHDC XRHDCM:: VAL $-D-VARDKM < INDICATEUR DE L'ETAT D'ALLOCATION D'UN < JEU DE REGISTRES 'HDC' : < 0 : PAS DE JEU ALLOUE (HANDLER INACTIF, < OU ERREUR DE DEBUT...), < 1 : UN JEU A ETE ALLOUE (HANDLER ACTIF, < CONTRAIREMENT A 'DKF'...). < < PROTECTION DES CYLINDRES PAR GROUPE : < NTRN NCYLP:: VAL XAXCYL+NBITMO-E/NBITMO < NOMBRE DE CYLINDRES CONSTITUANT UN < GROUPE D'APPROPRIATION ET ASSOCIES < A UN BIT DE 'LSDK' ET 'LUDKU' (DANS < CHAQUE 'DCTESC'). TRN LSDKM: EQU $ DZS LOSDKM XWOR%7: VAL $-LSDKM IF XWOR%7-LOSDKM,,XEIF%, IF ATTENTION : LA LONGUEUR PRESUMEE DE LA LISTE IF DES GROUPES DE CYLINDRES APPROPRIES DE 'DKM' IF (FAITE DANS LE BUFFER DE 'COPY') EST MAUVAISE !!! XEIF%: VAL ENDIF LSDK:: VAL $-D-VARDKM < LISTE DES GROUPES DE 'NCYLP' CYLINDRES < APPROPRIES. < < ACCES A LA LISTE DES < TRANSLATIONS EN Q=1 : < WORD TASQM,X ATASQ:: VAL $-D-VARDKM < RELAI D'ACCES A UNE LISTE DE DOUBLE-MOTS < CONTENANT DES COUPLES : LISTE D'APPRO- < PRIATION DES GROUPES DE CYLINDRE, TRANS- < LATION DES ADRESSES LORSQUE Q=1. < < < A T T E N T I O N : < Z O N E S P E C I F I Q U E ' D K M ' : < < WARDKM: EQU $ WORD DKMGS ADKMGS:: VAL $-D-VARDKM < INITIALISATION SANS ENTREE SORTIE DE < CERTAINS BUFFERS... WORD LDKMN-IJIJDX,X ALDKMN:: VAL $-D-VARDKM < RELAI D'ACCES A LA LISTE DES 'NSP' < POUVANT ACCEDER A 'DKM'... LDKMN: EQU $ WORD NSPDKB WORD NSPDKF WORD NSPDKU WORD NSPHOR WORD NSPREL WORD NSPGET LLDKMN:: VAL $-LDKMN < LONGUEUR EN MOTS DE CETTE LISTE ; SI < CETTE LISTE EST UNE LISTE DE MOTS < C'EST POUR DES RAISONS D'ECONOMIE < DE CODE LORS DU TEST (TOUJOURS A CAUSE < DES SAUTS SUPERIEURS A 128 MOTS...) < < PILE : < CALL #SISP CMS5 DOL2# PILDKM: EQU $-DEPILE < PILE DKM XWPILE: VAL LPILEH+XXDK1 CALL #SISP CMS5 GENPIL2# PAGE < < < Z O N E D E V I R T U A L I S A T I O N < D E S G R O U P E S D E C Y L I N D R E S : < < < FONCTION PRINCIPALE : < SUR 'DKM' RAMENER LA ZONE DE COPIE < DE 'DKF', ET DONC SA ZONE DE SIMULATION < A MI-CHEMIN DES EXTREMITES DE 'DKM', PUIS < ACCEDER A DES GROUPES DE RESERVE... < < CALL #SISP CMS5 DOL1# TVDKM: EQU $ < DEBUT DE LA ZONE DE VIRTUALISATION. TVDKMQ: EQU TVDKM < A CAUSE DES REFERENCES EN AVANT DESSUS... NTRN XWOR%1: VAL GAXCYL+NOCMO-E/NOCMO XWOR%2: VAL GAXCYL/NOCMO(K=FCREST TRN XWOR%3: VAL GAXCYL+XWOR%2 < INCREMENT DES OCTETS GAUCHES, XWOR%4: VAL XWOR%3+NOCMO-Z < INCREMENT DES OCTETS DROITS. <******************************************************************************* DO XWOR%1 BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4 XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT, <******************************************************************************* IF XWOR%2-K,,XEIF%, XWOR%5: VAL XWOR%5(MOCG < DANS LE CAS D'UNE TABLE DE LONGUEUR < IMPAIRE, ON EFFACE LE DERNIER OCTET < GENERE, $EQU $-D < ON REVIENT D'UN MOT EN ARRIERE, WORD XWOR%5 < ET ON REGENERE LE DERNIER MOT... XEIF%: VAL ENDIF CALL #SISP CMS5 DOL2# < < < E S P A C E I N U T I L I S E S U R ' D K M ' : < < SDKMTO:: VAL XAXCYL*XDKMSP/QUANTA*XDKMPC < NOMBRE TOTAL DE Q-SECTEURS SUR 'DKM', < A COMPARER A 'SDKM'... SDKMLI:: VAL SDKMTO-SDKM < NOMBRE DE Q-SECTEURS INUTILISES. IF SDKMLI-K,,,XEIF% IF ET BIEN, CELA NE FAIT PAS BEAUCOUP !!! XEIF%: VAL ENDIF XWOR%1: VAL CAXCYL=K XWOR%1: VAL -XWOR%1 XWOR%2: VAL SDKM+CAXCYL-E>XWOR%1 NTRN SDKMGL:: VAL XWOR%2*QUANTA+XDKMSP-E/XDKMSP+XDKMPC-E/XDKMPC TRN < NOMBRE DE GROUPES DE CYLINDRES DISPO- < NIBLES, A COMPARER A 'GAXCYL'... PAGE < < < L I S T E D E S T R A N S L A T I O N S E N Q = 1 : < < < FONCTION : < CETTE LISTE EST EN FAIT INUITLE POUR < 'DKM', MAIS ON LA MET POUR DES RAISONS < DE SYMETRIE AVEC 'DKU' ; ELLE CONTIENT < UNE ENTREE PAR UTILISATEUR, SACHANT QU'A < UN INSTANT DONNE 2 UTILISATEURS NE PEU- < VENT AVOIR LA MEME LISTE D'APPROPRIATION < DE GROUPES DE CYLINDRES. CETTE LISTE < CONTIENT DONC DES COUPLES : < < (LISTE D'APPROPRIATION DE GROUPES DE CYLINDRES, < TRANSLATION DES ADRESSES DISQUES EN Q=1), < < POUR TOUT ECHANGE EN Q=1, ON CHERCHE LA < TRANSLATION D'ADRESSE A EFFECTUER A PARTIR < DE LA LISTE D'APPROPRIATION DES GROUPES < DE CYLINDRES ; LE FONCTIONNEMENT EST DONC < ASSOCIATIF. < < <******************************************************************************* TRDKU0:: VAL K < TRANSLATION 0, TRDKU1:: VAL TRDKU0+I < TRANSLATION 1, TRDKU2:: VAL TRDKU1+I < TRANSLATION 2... TRDKUM:: VAL '0@@@@ < TRANSLATION MAXIMALE RECONNUE... <******************************************************************************* CALL #SISP CMS5 DOL1# TASQM: EQU $ LOSDK2:: VAL LOSDKM*NBITMO DO LOSDK2 WORD NILK;TRDKU0 < LISTE VIDE INITIALEMENT... LTASQ:: VAL $-TASQM < LONGUEUR TOTALE DE CETTE LISTE, ITASQ:: VAL LTASQ/LOSDK2 < LONGUEUR D'UNE ENTREE, ITASQT:: VAL ITASQ-D < INDEX DE L'ENTREE CONTENANT LA TRANS- < LATION DES ADRESSES EN Q=1. CALL #SISP CMS5 DOL2# PAGE < < < D C T D K U : < < CALL #SISP CMS5 DOL1# DCTDKU: EQU $ PSTDKU: WORD K;K;K;K;COM+DEPCS;DCTDKU;NIL;PILDKU;HANDLR;SMST;SO;SE #@ASCI " DKU" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC=XTALOC : < 'DKU' EST PARTAGEABLE AVEC LES ASSIGNS < IMPLICITES, ET < 'DKU' EST NON PARTAGEABLE AVEC LES < !ASSIGN EXPLICITES, QUI INHIBENT < ALORS LES ASSIGNS IMPLICITES... WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR 'DKU', WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR 'DKU'. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLDKU < HANDLER SPECIFIQUE DE GESTION DES < ECHANGES 'DKU' ET DU SYSTEME DE TELEVI- < SION NUMERIQUE BASSE DEFINITION. WORD ITDKU < SOUS-PROGRAMME SPECIFIQUE DES GESTION < DES INTERRUPTIONS DE 'DKU'. WORD K;K < ETAT. WORD COSBT?B0SIT=FMASK(K=FCINST < BITSEM. WORD XXDK4;TRYDKU < NTRIES ET FRTRY. WORD K < HSTATS. XWOR%2: VAL 2 WORD XWOR%2*DKCMS4 < TESTO#0 : TIME-OUT A TESTER. XWOR%1: VAL COSBT?FONTV=FMASK(K?XXDK5=FCINST XWOR%9: VAL FGR?FGW=K XWOR%9: VAL NBITMO-B-XWOR%9 < BIT DISCRIMINANT UNE LECTURE D'UNE < ECRITURE. XWOR%8: VAL 4 < POUR GENERER 'FONTVR' ET 'FONTVW'. FONTVR:: VAL CORBT?XWOR%9=FMASK(K?XWOR%8=FCINST < FONCTION SPECIALE DE TRANSFERT DIRECT < DE 'DKU' VERS LA MEMOIRE RAPIDE DE < VISUALISATION... < 'FONTVR' DOIT ETRE UNE LECTURE. IF FONTVR(MASSFF-FGX,,,XEIF% IF ATTENTION : POUR EVITER DE FACHEUSEUSES VALIDATIONS IF DANS 'HDLSVC', IL FAUT QUE 'FONTVR' SOIT UNE FAUSSE IF ENTREE-SORTIE !!! XEIF%: VAL ENDIF XWOR%1: VAL COSBT?FONTVR=FMASK(K?XWOR%1=FCINST FONTVW:: VAL COSBT?XWOR%9=FMASK(K?XWOR%8=FCINST < FONCTION SPECIALE DE TRANSFERT DIRECT < DE LA MEMOIRE RAPIDE DE VISUALISATION < VERS 'DKU'... < 'FONTVW' DOIT ETRE UNE ECRITURE. IF FONTVW(MASSFF-FGX,,,XEIF% IF ATTENTION : POUR EVITER LES VALIDATIONS DE 'SVC' IF 'FONTVW' DOIT ETRE UNE FAUSSE ENTREE-SORTIE !!! XEIF%: VAL ENDIF XWOR%1: VAL COSBT?FONTVW=FMASK(K?XWOR%1=FCINST XWOR%5: VAL COSBT?XBITQ=FMASK(K?FONTVR=FCINST XWOR%6: VAL COSBT?XBITQ=FMASK(K?FONTVW=FCINST XWOR%1: VAL COSBT?XWOR%5=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?XWOR%6=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < LISTE DES FONCTIONS RECONNUES. EDKUX1: EQU $ < POUR DEFINIR DES INSTRUCTIONS EN AVANT : <******************************************************************************* LAI FONTVR XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* LAFTVR: EQU ZERO+XWOR%1 < INSTRUCTION 'LAI FONTVR'. L1FTVR: EQU LAFTVR < A CAUSE DE L'ASSEMBLEUR... L2FTVR: EQU LAFTVR < A CAUSE DE L'ASSEMBLEUR... <******************************************************************************* LAI FONTVW XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* LAFTVW: EQU ZERO+XWOR%1 < INSTRUCTION 'LAI FONTVW'. <******************************************************************************* CPI FONTVR XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* CPFTVR: EQU ZERO+XWOR%1 < INSTRUCTION 'CPI FONTVR'. <******************************************************************************* CPI FONTVW XWOR%1: VAL '0000000@@@@ < RECUPERATION DU CODE GENERE... <******************************************************************************* CPFTVW: EQU ZERO+XWOR%1 < INSTRUCTION 'CPI FONTVW'. $EQU EDKUX1 < ANNULATION DU CODE GENERE... XWOR%1: VAL XXDK6 < INITIALISATION... XWOR%1: VAL CORBT?FONTVR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?FONTVW=FMASK(K?XWOR%1=FCINST XWOR%5: VAL COSBT?XBITQ=FMASK(K?FONTVR=FCINST XWOR%6: VAL COSBT?XBITQ=FMASK(K?FONTVW=FCINST XWOR%1: VAL CORBT?XWOR%5=FMASK(K?XWOR%1=FCINST XWOR%1: VAL CORBT?XWOR%6=FMASK(K?XWOR%1=FCINST < A T T E N T I O N : 'FONTVR' ET < 'FONTVW' DOIVENT (PROVISOIREMENT ???) < S'EXECUTER EN MEMOIRE BASSE ; EN EFFET < DANS LE CAS CONTRAIRE, A CHAQUE 'SVC' < SUIVANT QUE L'UTILISATEUR EST EN BAS < OU EN HAUT, IL N'A PAS, OU IL A, DE < HANDLER DE SERVICE ; S'IL EST EN BAS, < LE HANDLER DE SERVICE QU'ON LUI ALLOUE < RECOIT LA DEFINITION DE LA 'CDA' COURAN- < TE, PAR CONTRE S'IL EN POSSEDE DEJA UN < ON NE FAIT QUE LE RE-ACTIVER, SANS LUI < COMMUNIQUER AUCUN ARGUMENTS (VIA UNE < DEMANDE DE SERIVES) : IL NE RECOIT DONC < PAS LA DEFINITION DE LA 'CDA' COURANTE... XWOR%1: VAL CORBT?FONTV=FMASK(K?XWOR%1=FCINST < A T T E N T I O N : 'FONTV' NE DOIT < ABSOLUMENT PAS S'EXECUTER EN MEMOIRE < HAUTE ; EN EFFET, ELLE UTILISE TROP LA < BASE 'C' POUR REFERENCER LES LISTES < DE POINTS LORS DE L'INTERPOLATION... WORD XWOR%1 < DCTFUP ("ALTITUDES" DES FONCTIONS). <******************************************************************************* XWOR%F: VAL FONTV FONTV: @VAL '0@@@@ < FONCTION D'ACCES A LA TELEVISION 256. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FONTVR FONTVR: @VAL '0@@@@ < TRANSFERT 'DKU' --> 'MEMTV'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL FONTVW FONTVW: @VAL '0@@@@ < TRANSFERT 'MEMTV' --> 'DKU'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XBITQ XBITQ: @VAL '0@@@@ < BIT DISCRIMINANT LE QUANTA D'ACCES 'DKU'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* < < < Z O N E V A R I A B L E : < < VARDKU: EQU $ IF VARDKU-DCTDKU-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPERANDES DES 'SIO' : < WORD ACDKU?FPHCME WORD ACDKU?FPHCMD WORD ACDKU?FPHETA WORD ACDKU?FPHETB WORD ACDKU < < 'CCB' DE 'DKU' : < WORD COSBT?CCBDKM=FMASK(K=FCINST < 'DSYNC0'. WORD K < 'CCDKN2'. WORD COSBT?CCBDKM=FMASK(K=FCINST BYTE CCBHDC?XSNDKU;XXDK3 < MOT1. WORD NIL < MOT2 : ADRESSE-MOT DU BUFFER, WORD NILK < MOT3 : LONGUEUR-MOTS DU BUFFER. WORD ACDKU WORD NILK < MOT5 : 'HEADER 1' DU PREMIER SECTEUR. < < AUTRES INFORMATIONS (CF. 'DKM') : < WORD XXDK2 < LONGUEUR MAXIMALE D'UN ECHANGE. WORD SPDKU < DETECTION DES MEMOIRES INEXISTANTES... WORD K < INDICATEUR DE "SUITE". WORD NILK < NUMERO DE CYLINDRE. WORD NILK < NUMERO DE PISTE. WORD NILK < NUMERO DE SECTEUR. XWOR%1: VAL XDKMSP < NOMBRE DE SECTEURS PAR PISTE. XWOR%2: VAL XWOR%1/QUANTA < NOMBRE DE QUANTUM PAR PISTE. XWOR%3: VAL XWOR%2*QUANTA-XWOR%1 IF -XWOR%3,,XEIF%, IF A T T E N T I O N : 'QUANTA' NE DIVISE IF PAS EXACTEMENT LE NOMBRE DE SECTEURS IF PAR PISTE !!! XEIF%: VAL ENDIF WORD XWOR%2 < NOMBRE DE "SECTEURS" PAR PISTE. WORD XWOR%1 < NOMRE REEL DE SECTEURS PAR PISTE. WORD K < VALIDATION NUMERO 1ER SECTEUR. WORD XDKMPC WORD NAXCYL < DERNIER CYLINDRE. WORD QUANTA WORD YY8Q WORD TVDKU,X < ACCES A LA TABLE DE VIRTUALISATION. WORD XXNHDC < INDICATEUR D'ALLOCATION DE JEUX. LOSDKU:: VAL LOSDKM < LONGUEUR EN MOTS DE LA LISTE DES < GROUPES DE CYLINDRES APPROPRIES. DZS LOSDKU < 'LSDK' : LISTE DES GROUPES DE 'NCYLP' < CYLINDRES APPROPRIES A DES UTILISATEURS < VIA 'LUDKU' DANS 'DCTESC'. WORD TASQU,X < ACCES A LA LISTE DES TRANSLATIONS DES < ADRESSES EN Q=1. < < < Z O N E S P E C I F I Q U E ' D K U ' < < WARDKU: EQU $ XWOR%1: VAL WARDKM-DCTDKM XWOR%2: VAL WARDKU-DCTDKU IF XWOR%1-XWOR%2,,XEIF%, IF ATTENTION : UNE DES DEUX 'DCT' ('DKM' OU 'DKU') IF EST MAL IMPLANTEE !!! XEIF%: VAL ENDIF < < < E X T E N S I O N D E S A C C E S ' C D A ' : < < WORD TWOED ATWOED:: VAL $-D-VARDKU < IL S'AGIT EN FAIT D'UN RELAI DE RELAI, < CAR, EN EFFET, LORSQUE LE SOUS-PROGRAMME < 'TWOE' EST NECESSAIRE POUR 'DKU', LA < BASE 'C' EST EN GENERAL MAUVAISE... < < < A C C E S A U V O L U M E : < < WORD BVOLU ABVOLU:: VAL $-D-VARDKU < ADRESSE DU BUFFER CONTENANT LE DESCRIP- < TEUR DU VOLUME COURANT MONTE SUR 'DKU', < LORSQU'IL EST LA, ET CONTENANT DONC DES < INDICATEURS SUR LA PRESENCE EFFECTIVE < D'UN VOLUME... < < < I N T E R P O L A T I O N B A S S E D E F I N I T I O N : < < < < DEFINITION DE LA LUTTE ANTI-ALIASING : < DIMAL1:: VAL W < GESTION MONO-DIMENSIONNELLE DE L'ANTI- < ALIASING, DIMAL2:: VAL DIMAL1+I < ET GESTION BI-DIMENSIONNELLE (ELLE DONNE < DE MOINS BONS RESULTATS, MAIS COMME J'AI < BEAUCOUP PEINE POUR LE PROGRAMMER, JE NE < PEUX ME RESOUDRE A L'ELIMINER...). DIMALI:: VAL DIMAL1 < DIMENSION DE LA LUTTE ANTI-ALIASING < COURANTE... < < NIVEAU DE GRIS MAXIMUM : < NIVMAX:: VAL BIT>XNCOOL-N < NIVEAU DE GRIS MAXIMUM DES COULEURS. < < FORMAT DE L'EN-TETE D'UNE IMAGE < LORSQU'UNE INTERPOLATION ENTRE < DEUX POINTS EST DEMANDEE : < <******************************************************************************* XWOR%1: VAL K-D < INITIALISATION... DKMTCO:: MOT '0@@@@+D < MOT BIDON DESTINE AU BLOC FLOTTANT < QUI ECRASE LE MOT D'ADRESSE (C)-'DEPCS' ; < MAIS, A T T E N T I O N : PAR MANQUE < DE PLACE, 'DKMTCO' EST MAINTENANT UTI- < LISE POUR TRANSMETTRE LE CHAMP 'DKMLCOL' < DONNANT LES NIVEAUX DE GRIS, QUI S'ILS < SONT RENCONTRES LORS DU MARQUAGE D'UN < POINT AVEC NIVEAU DE GRIS DOIVENT < RESTER INTACTS, QUELQUE SOIT LE MODE < DEMANDE... DKMTMO:: MOT '0@@@@+D < MODE DU TRACE : VOIR 'DKMTSB'/'DKMTRB' ; < MAIS ATTENTION,DANS LE CAS DU TRACE < AVEC NIVEAU DE GRIS, 'DKMTMO' A LE < FORMAT DECRIT PLUS LOIN... DKMTY1:: MOT '0@@@@+D < COORDONNEE Y1, DKMTC:: MOT DKMTY1 < LISTE DES COORDONNEES (FORMAT 'TV'). DKMTX1:: MOT '0@@@@+D < COORDONNEE X1 DU PREMIER POINT, DKMTY2:: MOT '0@@@@+D < COORDONNEE Y2, DKMTX2:: MOT '0@@@@+D < COORDONNEE X2 DU DEUXIEME POINT. DKMGY1:: MOT '0@@@@+D < COORDONNEE Y1, DKMGC:: MOT DKMGY1 < LISTE DES COORDONNEES (FORMAT 'VISU'). DKMGX1:: MOT '0@@@@+D < COORDONNEE X1 DU PREMIER POINT, DKMGY2:: MOT '0@@@@+D < COORDONNEE Y2, DKMGX2:: MOT '0@@@@+D < COORDONNEE X2 DU DEUXIEME POINT. DKMTXY:: VAL '0@@@@+D < LONGUEUR DE L'EN-TETE... <******************************************************************************* DKMTNP:: VAL 2 < NOMBRE DE POINTS DEFINISSANT UN SEGMENT. IF XXVXY*DKMTNP-DKMTXY+DKMGC,,XEIF%, IF ATTENTION : LA LISTE DES COORDONNEES EST MAUVAISE !!! XEIF%: VAL ENDIF DKMTNS:: VAL 2 < IL Y A DEUX SEGMENTS : LE SEGMENT ARGU- < MENT EN FORMAT GRAPHIQUE OU 'VISU' BAPTI- < SE 'DKMG', LE SECOND EN FORMAT 'TV', < RENVOYE A L'UTILISATEUR APPELE 'DKMT'. IF XXVXY*DKMTNP*DKMTNS-DKMTXY+DKMTC,,XEIF%, IF ATTENTION : LE FORMAT DES SEGMENTS EST MAUVAIS !!! XEIF%: VAL ENDIF < < FORMAT DE 'DKMTCO' : < XWOR%1: VAL K DO NIVMAX+Z XWOR%1: VAL XWOR%1>BIT?BIT XWOR%2: VAL CODBT=FMASK(K?XWOR%1=FCINST)XWOR%1 DKMLCO:: VAL XWOR%1>XWOR%2 < CHAMP DONNANT POUR CHAQUE NIVEAU DE < GRIS L'INDICATION SUIVANTE : FAUT-IL < MARQUER CE POINT SI NIVEAU EST PRESENT < ANTERIEUREMENT (LE BIT DE RANG 'I' EST < ASSOCIE AU NIVEAU DE RANG 'I')... IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 DKMPOI:: VAL MOCD < DEFINITION D'UNE PATTERN DE POINTILLES < SUR 8 BITS ; CECI N'EST POSSIBLE QUE < SI LA LUTTE ANTI-ALIASING EST MONO- < DIMENSIONNELLE, ET CECI POUR DES RAISONS < D'ENCOMBREMENT MEMOIRE... IF DKMLCO(DKMPOI-K,,XEIF%, IF ATTENTION : IL Y A UN RECOUVREMENT ENTRE LES IF 2 CHAMPS 'DKMLCO' ET 'DKMPOI' !!! XEIF%: VAL ENDIF BDKMPO:: VAL BITSIG < BIT A TESTER SUR LA PATTERN CYCLIQUE < 'MDKMPO' POUR SAVOIR SI L'ON TRACE (=0) < OU PAS (=1) ; CES CONVENTIONS INVERSEES < SONT CHOISIES POUR DES RAISONS DE COM- < PATIBILITE ANTERIEURE... XEIF%1: VAL ENDIF < < MODE DE TRACE : < DKMTSB:: VAL EXIST < MODE 'SBT', DKMTRB:: VAL NEXIST < MODE 'RBT', DKMTIB:: VAL -DKMTRB-DKMTSB < MODE 'IBT'. < < FORMAT DE 'DKMTMO' LORSQUE DES < NIVEAUX DE GRIS SONT DEMANDES : < DKMSRI:: VAL MOCG < DONNE LE MODE DE TRACE (VOIR 'DKMTSB', < 'DKMTRB'...). DKMNIV:: VAL M000F < DONNE LE NIVEAU DE GRIS DEMANDE : < ANTIAL : MODE ANTI-ALIASING, < 0-NIVMAX : NIVEAU DE GRIS FORCE. DKMDEC:: VAL M007F)DKMNIV < DONNE DE 0 A XNCOOL LE DECALAGE A < DROITE A APPLIQUER AU NIVEAU ANTERIEUR < DU POINT COURANT AVANT L'OPERATION < LOGIQUE AVEC LE NOUVEAU NIVEAU... DKBDEC:: VAL CODBT=FMASK(K?DKMDEC=FCINST)DKMDEC < BIT DE 'DKMDEC' INDIQUANT S'IL EST < NECESSAIRE DE TESTER A L'AIDE DE 'DKMLCO' < LE NIVEAU ANTERIEUR DE CHAQUE POINT. XWOR%2: VAL DKMDEC=K XWOR%2: VAL -XWOR%2 XWOR%1: VAL CORBT?DKBDEC=FMASK(K?DKMDEC=FCINST>XWOR%2 IF XWOR%1-XNCOOL,,XEIF%,XEIF% IF 'DKMDEC' EST TROP PETIT POUR CONTENIR UN DECALAGE IF PERMETTANT DE MANIPULER 'XNIVMAX'+Z COULEURS, ET IF LE BIT 'DKBDEC' !!! XEIF%: VAL ENDIF ANTIAL:: VAL NIVMAX+I < NIVEAU DE GRIS A DONNER POUR FORCER < LE MODE ANTI-ALIASING. DKMOBA:: VAL DKMSRI?DKMDEC?DKMNIV)MMOT < INDIQUE OU DOIT SE FAIRE LE TRACE : < 0 : DANS LA MEMOIRE UTILISATEUR, < 1 : DANS 'MEMTV'. < < DISCRIMINATION LOGIQUE FLOUE < ET LOGIQUE BINAIRE : < XWOR%1: VAL DKMSRI=K XWOR%2: VAL NBITMO-B-XWOR%1 < DERNIER BIT DU CHAMP 'DKMSRI', DKLOGD:: VAL XWOR%2-I < BIT ARGUMENT DISCRIMINATEUR DE LA LOGIQUE < FLOUE ET DE LA LOGIQUE BINAIRE. DKLOGF:: VAL DKLOGD-I < BIT DONNANT LA VALEUR DE 'DKLOGD' DANS < LE CAS DE LA LOGIQUE FLOUE ; DONC : < 'DKLOGD'='DKLOGF' ==> LOGIQUE FLOUE, < 'DKLOGD'#'DKLOGF' ==> LOGIQUE BINAIRE. DKLODD:: VAL DKLOGD+XWOR%1 < IDEM A 'DKLOGD', MAIS 'DKMSRI' ETANT < CADRE A DROITE, DKLODF:: VAL DKLOGF+XWOR%1 < DE MEME POUR 'DKLOGF'... XWOR%3: VAL DKMTSB=K XWOR%3: VAL NBITMO-B-XWOR%3 < DERNIER BIT DE 'DKMTSB'... IF XWOR%3-DKLODD,,,XEIF% IF ATTENTION : LA POSITION DE 'DKLOGD' EST MAUVAISE IF SI L'ON VEUT UNE COMPATIBILTE AVEC LES VERSIONS IF ANTERIEURES DE CMS5 ET DES PROGRAMMES !!! XEIF%: VAL ENDIF IF XWOR%3-DKLODF,,,XEIF% IF ATTENTION : IDEM, 'DKLOGF' EST MAUVAIS !!! XEIF%: VAL ENDIF < < DONNEES DE L'INTERPOLATION ((X1,Y1),(X2,Y2)) : < WORD NILK DKMTDX:: VAL $-D-VARDKU < DELTAX=ABS(X2-X1). WORD NILK DKMTDY:: VAL $-D-VARDKU < DELTAY=ABS(Y2-Y1). DKMTDF:: VAL $-VARDKU < DELTAX EXPRIME EN FLOTTANT... FLOAT <NILK<NILK<NILK DKMTA:: VAL $-VARDKU < COEFFICIENT 'A' DE LA DROITE PORTANT < LE SEGMENT A TRACER. FLOAT <NILK<NILK<NILK DKMTB:: VAL $-VARDKU < COEFFICIENT 'B' DE LA DROITE PORTANT < LE SEGMENT A TRACER. FLOAT <NILK<NILK<NILK DKMTN:: VAL $-VARDKU < NOMBRE DE PAS POUR TRACER LE SEGMENT, < SOIT MAX(ABS(DELTAX,DELTAY)). FLOAT <NILK<NILK<NILK DKMTX:: VAL $-VARDKU < COORDONNEE X DU POINT COURANT, FLOAT <NILK<NILK<NILK DKMTY:: VAL $-VARDKU < COORDONNEE Y DU POINT COURANT. FLOAT <NILK<NILK<NILK IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 DKMT05:: VAL $-VARDKU < CONSTANTE D'EXCES OU DE DEFAUT... FLOAT <K<K+W*BASE10/XXXMOY<K XEIF%1: VAL ENDIF FIVMAX:: VAL $-VARDKU < NIVEAU MAXIMAL DES COULEURS. FLOAT <NIVMAX<K<K WORD NILK DKDECA:: VAL $-D-VARDKU < DECALAGE A APPLIQUER AU NIVEAU ANTERIEUR < DE CHAQUE POINT AVANT L'OPERATION < LOGIQUE AVEC LE NOUVEAU NIVEAU. WORD NILK DKTCO:: VAL $-D-VARDKU < CONTIENT 'DKMTCO' D'APPEL, ET DONC ENTRE < AUTRES CHOSES, LE CHAMP 'DKMLCO'... IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 WORD NILK MDKMPO:: VAL $-D-VARDKU < PATTERN CYCLIQUE (TOURNANT A CHAQUE < APPEL DE 'DKMTP2' ET INDIQUANT SI L'ON < TRACE LE POINT OU PAS... ON FAIT AINSI < DES POINTILLES. XEIF%1: VAL ENDIF WORD NILK DKNIVO:: VAL $-D-VARDKU < CONTIENT UN NIVEAU DE GRIS DE 0 < A 'NIVMAX', SI UN TRACE EN MODE < NIVEAU DE GRIS EST DEMANDE, OU ABIEN < UNE VALEUR NEGATIVE DANS LE CAS < CONTRAIRE... < < DONNEES SPECIALES "ANTI-ALIASING" : < IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 < < GESTION BI-DIMENSIONNELLE < DE L'ANTI-ALIASING : < WORD K DKMIVO:: VAL $-D-VARDKU < MEMORISATION DU NIVEAU MAXIMUM RENCONTRE < LORS DE L'ENCADREMENT ENTIER DU POINT < FLOTTANT COURANT. WORD NILK DKNIVX:: VAL $-D-VARDKU < 'X' DU POINT CORRESPONDANT, WORD NILK DKNIVY:: VAL $-D-VARDKU < ET SON 'Y'... FRCOTE:: VAL I+I+I+I < COTE D'UN CARRE UTILISE POUR REPRESENTER < LES POINTS D'UN VECTEUR EN MODE ANTI- < ALIASING... XWOR%1: VAL FRCOTE/XXXMOY+E < PLUS GRAND CARRE OBTENU LORS DU TRACE < ANTI-ALIASING, EN PRENANT LE POINT < FLOTTANT COURANT (DKMTX,DKMTY), ET LES < POINTS ENTIERS VOISINS DANS 'FRCOTE'... XWOR%2: VAL XWOR%1*XWOR%1 < CARRE DU COTE, XWOR%3: VAL XWOR%2+XWOR%2 < THEOREME DE PYTHAGORE... XWOR%4: VAL BASE10 < POUR AMPLIFIER 'XWOR%3', PUISQUE LES < CALCULS NE PEUVENT ICI ETRE FAITS < QU'EN ENTIERS... XWOR%6: VAL XWOR%4*XWOR%4 < CARRE DE L'AMPLIFICATEUR... XWOR%6: VAL XWOR%3*XWOR%6 < CARRE DE L'HYPOTHENUSE AMPLIFIE. < C'EST AUSSI LE NOMBRE 'K' DONT ON < CHERCHE LA RACINE CARREE... XWOR%7: VAL XWOR%6 < INITIALISATION DE LA SUITE U(N)... XWOR%5: VAL 20 < NOMBRE ARBITRAIRE D'ITERATIONS... NTRN DO XWOR%5 XWOR%7: VAL XWOR%6/XWOR%7+XWOR%7/XXXMOY < METHODE DE NEWTON : < U(N+1)=(U(N)+K/U(N))/2... IF XWOR%6/XWOR%7+XWOR%7/XXXMOY-XWOR%7,,XEIF%, IF ATTENTION : 'XWOR%5' EST INSUFFISANT POUR IF ASSURER LA CONVERGENCE DE NEWTON !!! XEIF%: VAL ENDIF XWOR%8: VAL XWOR%7/XWOR%4 < PARTIE ENTIERE DE LA RACINE CARREE DE < XWOR%3, TRN IF XWOR%4-BASE10,,XEIF%, IF ATTENTION : L'AMPLIFICATEUR DOIT OBLIGATOIREMENT IF VALOIR LA BASE DECIMALE (OU MIEUX SON CARRE, MAIS IF SUR 16 BITS, IL N'Y A PAS LA PLACE) AFIN QUE IF LE PARAMETRAGE DE 'FLOAT' FONCTIONNE CORRECTEMENT !!! XEIF%: VAL ENDIF XWOR%9: VAL XWOR%8*XWOR%4-XWOR%7 XWOR%9: VAL -XWOR%9 < ET ENFIN PARTIE DECIMALE DE LA RACINE < CARREE DE 'XWOR%3'... FRHUIT:: VAL $-VARDKU < COTE DES CARRES ANTI-ALIASING... FLOAT <XWOR%8<XWOR%9+E<K < (CETTE RACINE CARREE EST PRISE PAR < EXCES...) XEIF%1: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < GESTION MONO-DIMENSIONNELLE < DE L'ANTI-ALIASING : < FPENTE:: VAL $-VARDKU < COEFFICIENT DE PONDERATION (COMPRIS < ENTRE 0 ET 1) PERMETTANT DE CALCULER < LE NIVEAU DES 2 POINTS VOISINS DU POINT < DIT "CENTRAL"... FLOAT <NILK<NILK<NILK WORD NILK APENTE:: VAL $-D-VARDKU < REPRESENTATION ENTIERE DE LA VALEUR < ABSOLUE (SAUF EXCEPTION) DE LA PENTE < 'A' DE LA DROITE ; VAUT : < =0 : FAIBLE PENTE (ANGLE < PI/4), < >0 : FORTE PENTE (ANGLE > PI/4), < <0 : DROITE VERTICALE. WORD INFINI DKMINF:: VAL $-D-VARDKU < RELAI D'ACCES A 'INFINI' ; EN EFFET LA < BASE 'C' EST MAUVAISE LORS DE L'INTER- < POLATION, QU'EST-CE QU'IL NE FAUT PAS < FAIRE !!! WORD NILK DKMRNA:: VAL $-D-VARDKU < CE MOT EST A LA FOIS ARGUMENT ET RESUL- < TAT DE 'DKMTP1' : < 1 - ARGUMENT : < =0 : TRACER LE POINT ARGUMENT, < #0 : NE FAIRE QUE RECUPERER LE < NIVEAU ANTERIEUR DU POINT. < 2 - RESULTAT : IL DONNE LE NIVEAU ANTE- < RIEUR DU POINT COURANT. WORD NILK DKPOIN:: VAL $-D-VARDKU < INDICATEUR UTILISE PAR 'DKMTP2' PERMET- < TANT DE SAVOIR S'IL S'AGIT D'UN POINT < (ISOLE OU D'EXTREMITE) OU PAS : < #0 : POINT ISOLE, < =0 : POINT D'UN VECTEUR. < A T T E N T I O N : 'DKPOIN' EST UTILI- < SE POUR TRANSMETTRE LE 'CODEM' ENTRE < 'DKMTV1' ET 'DKMTV5' PUISQUE LA BASE < 'W' NE POINTE PLUS LA DEMANDE COURANTE. XEIF%1: VAL ENDIF < < SOUS-PROGRAMMES NECESSAIRES : < WORD DKMTV5 DKMTA5:: VAL $-D-VARDKU < RELAI VERS 'DKMTV5'. WORD DKMTP1 DKMTA1:: VAL $-D-VARDKU < TRACE D'UN POINT DONNE PAR SES < COORDONNEES ENTIERES, WORD DKMTP2 DKMTA2:: VAL $-D-VARDKU < TRACE DU POINT COURANT DONNE PAR < SES COORDONNEES FLOTTANTES. WORD DKMTP4 DKMTA4:: VAL $-D-VARDKU < SOUS-PROGRAMME DE CHOIX DU NIVEAU DE < GRIS D'UN POINT, ET DE SON TRACE. WORD DKMTP3 DKMTA3:: VAL $-D-VARDKU < "ARRONDI" D'UN NOMBRE FLOTTANT... WORD DKMTP6 DKMTA6:: VAL $-D-VARDKU < SOUS-PROGRAMME FAISANT UN 'LOAD' OU UN < 'STORE' SUR UN MOT DE L'IMAGE, EN FONC- < TION DE L'INDICATEUR 'DKMOBA'. < < CONSTANTES DEFINISSANT L'IMAGE : < XWOR%2: VAL XC256-Z DKMTNC:: VAL XWOR%2 < NOMBRE DE COLONNES PAR LIGNE. XWOR%2: VAL XC256/NBITMO DKMTNM:: VAL XWOR%2 < NOMBRE DE MOTS MEMOIRE PAR LIGNE. WORD XL256-Z DKMTNL:: VAL $-D-VARDKU < NOMBRE DE LIGNES EN PARTANT DE 0 < SUR UNE IMAGE DE 'TV'. XXDEDX:: VAL XXVD4/XC256=K < REDUCTION SUR L'AXE DES 'X', XXDEDY:: VAL XXVD4/XL256=K < REDUCTION SUR L'AXE DES 'Y'. WORD NILK DKMTRS:: VAL $-D-VARDKU < MODE 'SBT'/'RBT' DU TRACE... WORD TVLIMA*LK*NOCMO DKMLI1:: VAL $-D-VARDKU < LONGUEUR EN OCTETS D'UNE TRAME SIMPLE. WORD TVLIMA*LK*XNCOOL+DKMTXY*NOCMO DKMLI3:: VAL $-D-VARDKU < LONGUEUR EN OCTETS DES TRAMES AVEC < INTERPOLATION AVEC NIVEAUX DE GRIS. < < < Z O N E S P E C I F I Q U E D E T R A N S F E R T < R A P I D E : ' D K U ' --> M E M T V : < < XWOR%2: VAL NOCMO=K-DADR < POUR CONVERTIR AVEC DES PERTES DES < ADRESSES DE LADR-MOTS EN ADRESSES < D'OCTETS... MEMTVQ:: VAL MEMTV0>XWOR%2 IF MEMTVQ-K,,XEIF%, WORD MEMTVQ DKMTM0:: VAL $-D-VARDKU < ADRESSE-OCTETS RELATIVES DE 'MEMTV0'. XEIF%: VAL ENDIF DKMTMR:: VAL MEMTVR>XWOR%2 < ADRESSE-OCTETS RELATIVE A 'MEMTV' < DU PREMIER MOT INEXISTANT DANS LA < MEMOIRE DE TAILLE 'RTLIMA'... IF DKMTMR-K,,XEIF%,XEIF% IF ATTENTION : LES TESTS FAITS A L'AIDE DE 'DKMTME' IF SONT MAL PROGRAMMES !!! XEIF%: VAL ENDIF IF DKMTMR-K,,XEIF%, WORD DKMTMR DKMTME:: VAL $-D-VARDKU < ADRESSE OCTETS RELATIVE DE 'MEMTVR'. XEIF%: VAL ENDIF XWOR%1: VAL -DADR < POUR UN DECALAGE A GAUCHE... IF MEMTVE-MEMTV0>XWOR%1-XXDK2,XEIF%,XEIF%, IF ATTENTION : ON NE PEUT EN UNE SEULE OPERATION IF ECHANGER LES 3 COMPOSANTES CHROMATIQUES !!! XEIF%: VAL ENDIF WORD DKM2 ADKM2:: VAL $-D-VARDKU < SORTIE IMMEDIATE LORSQUE LE SYSTEME < DE TEEVISION EST ABSENT... WORD ERDKM3 ADKM3:: VAL $-D-VARDKU < TRAITEMENT DES ERREURS DES TRANSFERTS < RAPIDES... < < DONNEES DE TRANSFERT ENTRELACE DES TRAMES : < XLBKTV:: VAL 16 < ON CHOISIT DES BLOCS RELATIVEMENT PETITS. XWOR%1: VAL XLBKTV=K IF BIT>XWOR%1-XLBKTV,,XEIF%, IF ATTENTION : 'XLBKTV' AFIN DE DIVISER LA LONGUEUR IF DES TRAMES DOIT ETRE DE PREFERENCE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF ALBKTV: WORD XLBKTV DKMLBK:: VAL $-D-VARDKU < LONGUEUR DES BLOCS DE MOTS INSEPARA- < BLES DANS LES TRAMES DE CHAQUE COU- < LEUR PRIMAIRE... WORD LINHIB ALINHI:: VAL $-D-VARDKU < RELAI D'ACCES A LA LISTE DES AUTORISA- < TIONS/INHIBITIONS DES BLOCS ENTRELACES ; < LE BIT D'INDEXATION SIGNIFIE : < BITX=0 : CE DISPOSITIF EST IGNORE (AFIN < D'OPTIMISER LES TRANSFERTS) ; < REMARQUONS QUE DANS CE CAS, < TOUS LES BLOCS SONT AUTORISES. < BITX=1 : CE DISPOSITIF EST ACTIF... IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < CONSTANTE D'EXCES OU DE DEFAUT : < (ELLE EST MISE ICI, EN BOUT DE 'DCTDKU', < DE FACON A ECONOMISER UN MOT AU NIVEAU < DE L'ADRESSAGE A L'AIDE DE LA BASE 'L' ; < EN EFFET, SEUL LE PREMIER MOT D'UN < NOMBRE FLOTTANT SE DOIT D'ETRE ADRES- < SABLE) < DKMT05:: VAL $-VARDKU < CONSTANTE D'EXCES OU DE DEFAUT... FLOAT <K<K+W*BASE10/XXXMOY<K XEIF%1: VAL ENDIF IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 < < DONNEES DE TRAVAIL (MISES ICI, < CAR LA 'DCTDKU' EST SATUREE ET < QU'UNE CONSTANTE FLOTTANTE FAIT < 2 MOTS, ET QUE LE 2EME N'A PAS < BESION D'ETRE ADRESSABLE...) : < FWORK:: VAL $-VARDKU < VARIABLE DE TRAVAIL. FLOAT <NILK<NILK<NILK XEIF%1: VAL ENDIF < < PILE : < CALL #SISP CMS5 DOL2# PILDKU: EQU $-DEPILE < PILE DKU XWPILE: VAL LPILEH+XXDK1+8 CALL #SISP CMS5 GENPIL2# PAGE < < < Z O N E D E V I R T U A L I S A T I O N < D E S G R O U P E S D E C Y L I N D R E S : < < < FONCTION : < PERMETTRE L'EXISTENCE DE PISTE DE < RESERVE SUR 'DKU'... < < CALL #SISP CMS5 DOL1# TVDKU: EQU $ < DEBUT DE LA ZONE DE VIRTUALISATION. NTRN XWOR%1: VAL GAXCYL+NOCMO-E/NOCMO XWOR%2: VAL GAXCYL/NOCMO(K=FCREST TRN XWOR%3: VAL GAXCYL+XWOR%2 < INCREMENT DES OCTETS GAUCHES, XWOR%4: VAL XWOR%3+NOCMO-Z < INCREMENT DES OCTETS DROITS. <******************************************************************************* DO XWOR%1 BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4 XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT, <******************************************************************************* IF XWOR%2-K,,XEIF%, XWOR%5: VAL XWOR%5(MOCG < DANS LE CAS D'UNE TABLE DE LONGUEUR < IMPAIRE, ON EFFACE LE DERNIER OCTET < GENERE, $EQU $-D < ON REVIENT D'UN MOT EN ARRIERE, WORD XWOR%5 < ET ON REGENERE LE DERNIER MOT... XEIF%: VAL ENDIF CALL #SISP CMS5 DOL2# PAGE < < < L I S T E D E S T R A N S L A T I O N S E N Q = 1 : < < CALL #SISP CMS5 DOL1# TASQU: EQU $ DO LOSDKU*NBITMO WORD NILK;NILK < LISTE VIDE INITIALEMENT... XWOR%1: VAL $-TASQU < LONGUEUR DE 'TASQU'... IF XWOR%1-LTASQ,,XEIF%, IF ATTENTION : 'TASQU' ET 'TASQM' DIFFERENT !!! XEIF%: VAL ENDIF CALL #SISP CMS5 DOL2# PAGE < < < B L O C D E S I M U L A T I O N < D E ' D K U ' S U R ' D K M ' : < < DEMUN: EQU $ DZS LDEM0B < BLOC DE DEMANDE (AVEC UNE 'BOX', ON < NE SAIT JAMAIS...) QUE 'DKU' TRANSMET < A 'DKM' LORSQUE CELUI-CI ('DKU') < EST ABSENT... PAGE < < < B U F F E R D U D E S C R I P T E U R < D U V O L U M E C O U R A N T < S U P P O R T E P A R ' D K U ' : < < BVOLU: EQU $ CVOLU: EQU BVOLU < A CAUSE DES REFERENCES EN AVANT... DZS LVOL IF MONT0-K,,XEIF%, IF ATTENTION : LE 'DZS' EST MAUVAIS !!! XEIF%: VAL ENDIF IF NSPVID-K,,XEIF%, IF ATTENTION : LE 'DZS' EST MAUVAIS !!! XEIF%: VAL ENDIF < < GENERATION D'UNE INSTRUCTION < D'ACCES A L'ADRESSE DE 'BVOLU' : < <******************************************************************************* LAVOL: LA VAR+ABVOLU < (A)=ADRESSE DU BUFFER DE DESCRIPTEUR. XWOR%1: VAL '0000000@@@@ < INSTRUCTION GENEREE... <******************************************************************************* $EQU LAVOL < QUE L'ON ECRASE ENSUITE... LAVOLU: EQU ZERO+XWOR%1 < POUR 'CCICLF' DANS LE 'CCI', LAVOLV: EQU LAVOLU < POUR LES HANDLERS DU 'SGN'. PAGE < < < B U F F E R D ' E N T R E L A C A G E D E S < L E C T U R E S R A P I D E S : < ' D K U ' --> ' M E M T V ' : < < LENTR:: VAL 16 < LONGUEUR DES BLOCS ENTRELACES, LBENTR:: VAL 32 < LONGUEUR DU BUFFER D'ENTRELACAGE. IF LENTR-LBENTR,XEIF%,XEIF%, IF ATTENTION : LA LONGUEUR DES BLOCS ENTRELACES IF DOIT ETRE INFERIEURE OU EGALE A CELLE DU BUFFER !!! XEIF%: VAL ENDIF BENTR: EQU $ DZS LBENTR < BUFFER D'ENTRELACAGE... < < < L I S T E D E S I N H I B I T I O N S < D E S B L O C S E N T R E L A C E S : < < < DEFINITION : < CETTE LISTE CONTIENT UN BIT < PAR BLOC ENTRELACE, ET PERMET < DONC DE L'AUTORISER (1) OU DE < L'INHIBER (0). COMME L'ACCES A < A CETTE TABLE EST RELATIVEMENT < LONG ET DONC PENALISANT, IL < N'EST FAIT QUE LORSQUE LE < BIT D'INDEXATION DE 'ALINHI' < EST A 1... < < < NOTA IMPORTANT : < LA LISTE EST DONNE DANS < L'ORDRE INVERSE : LE BIT < DE RANG (X) CORRESPOND EN < FAIT AU BLOC 'LBENTR'-(X)-IJIJDX. < < CALL #SISP CMS5 DOL1# LINHIB: EQU $-IJIJDX < LISTE DES INHIBITIONS (-IJIJDX PAR COM- < PATIBILITE AVEC 'TMOBT'). XWOR%1: VAL LINHIB-ZERO XWOR%2: VAL COSBT?BITX=FMASK(K?XWOR%1=FCINST IF XWOR%1-XWOR%2,XEIF%,,XEIF% IF ATTENTION : LA LISTE 'LINHIB' DOIT ETRE IF EN MEMOIRE BASSE POUR POUVOIR AVOIR UN IF RELAI INDEX !!! XEIF%: VAL ENDIF XWOR%1: VAL TVLIMA*LK*XNCOOL*NOCMO XWOR%2: VAL XWOR%1/XNCOOL/LENTR/NOCMO < XWOR%2=NOMBRE DE BLOCS ENTRELACES, LLINHI:: VAL XWOR%2/NBITMO < NOMBRE ENTIER DE MOTS NECESSAIRES POUR < LA LISTE DES BLOCS ENTRELACES... LVALES:: VAL D*NBITMO < NOMBRE DE GROUPE DE BLOCS... DO LLINHI WORD MMOT < TOUT BLOC ENTRELACE AUTORISE... CALL #SISP CMS5 DOL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R D K M , < H A N D L E R D K U E T < T E L E V I S I O N N U M E R I Q U E : < < < FONCTION: < 1 - SUR 'DKM' : IL EST CHARGE DE TRAITER LA < DEMANDE COURANTE (VALIDATION, EXECUTION, < REPRISE SUR ERREUR,...), ET AUSSI D'ASSURER < LA SIMULATION DE 'DKF' SUR 'DKM' AU CAS OU < CELUI-CI AURAIT ETE DECLARE ABSENT DANS < 'ETASYS', DE MEME CELLE DE 'DKU'... < ON NOTERA LE CAS DES ADRESSES SECTEURS < DU TYPE 'DKMINX' ; ELLES PERMETTENT D'INI- < TIALISER SANS ENTREES-SORTIES UN BUFFER AVEC < LA VALEUR CONTENUE A SA SUITE. < 2 - SUR 'DKU' : IL EST CHARGE DE TRAITER LA < DEMANDE COURANTE (...), AVEC UN PEU MOINS DE < RESTRICTIONS QUE SUR 'DKM' (EN PARTICULIER < LE SECTEUR Q8000 EST ACCESSIBLE, ET LES < ERREURS SONT RENVOYEES AU DEMANDEUR) ; ON < NOTERA QUE SI 'DKU' A ETE DECLARE ABSENT < DANS 'ETASYS', C'EST 'DKM' QUI EN ASSURE < LA SIMULATION : ON LUI TRANSMET LA DEMANDE... < 3 - SUR 'DKU' ENFIN, LORSQUE LA FONCTION 'FONTV' < EST UTILISEE, C'EST LE SYSTEME DE TELEVISION < NUMERIQUE QUI EST ATTEINT EN ENTREE, COMME < EN SORTIE (CF. 'TVIN'), L'ADRESSE DE L'IMAGE < ETANT DONNE PAR 'AMDEM', SA LONGUEUR ETANT < IMPERATIVEMENT 'TVLIMA' (A CAUSE DE LA VALI- < DATION DES 'SVC'), ET LA COULEUR CHOISIE < L'ETANT PAR 'TVSIMU' DANS 'ASDEM'... < DANS CES CONDITIONS, LE 'CODEM' < IMPORTE BEAUCOUP : S'IL VAUT JUSTE < LA LONGUEUR D'UNE IMAGE, ON NE FAIT < QUE VISUALISER L'IMAGE EN FONCTION < DE 'ASDEM' ; SI IL FAIT 'DKMTXY' MOTS < DE PLUS, ON ADMET QU'IL FAUT DE PLUS < FAIRE UNE INTERPOLATION. < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' CORRESPONDANTE, < (W)=ADRESSE DE LA DEMANDE A TRAITER, < (A)='NSPTYP' DE LA DEMANDE COURANTE, < (BOX)=SI LE BIT 'VBOX' DE 'NSPTYP' < EST A 1, DONNE LA LISTE DES < GROUPES DE CYLINDRES APPRO- < PRIES PAR L'UTILISATEUR AC- < CEDANT A 'DKU' (N'A PAS DE < SENS POUR 'DKM'...). < < < FONCTIONS D'ACCES RECONNUES : < '00=LECTURE AVEC 'QUANTA'=3, SAUF SIMULATION 'DKF', < '02=ECRITURE AVEC 'QUANTA'=3, SAUF SIMULATION 'DKF'. < '08=LECTURE AVEC 'QUANTA'=1, < '0A=ECRITURE AVEC 'QUANTA'=1. < < DE PLUS, POUR 'DKU' : (CF. 'MEMV') < 'XSYNC0' : CE BIT INDIQUE DE PLUS S'IL FAUT FAIRE < PRECEDER L'ECHANGE D'UNE SYNCHRONISATION SUR < LE SECTEUR 0 DE LA PISTE CONTENANT L'ECHANGE ; < ON PEUT AINSI FORMATER LES DISQUES, ET EN < PARTICULIER 'DKU' ; ON NOTERA QUE LE NOMBRE < DE SECTEURS PAR PISTE EST DIVISIBLE PAR LE < 'QUANTA'... NTRN IF XDKMSP/QUANTA(K=FCREST,,XEIF%, IF MENSONGE !!! XEIF%: VAL ENDIF TRN < FONTV=FONCTION RECONNUE UNIQUEMENT SUR 'DKU', < ET PERMETTANT AUX UTILISATEURS D'UTI- < LISER LA TELEVISION NUMERIQUE ; LES < ARGUMENTS SUIVANTS SONT UTILISES : < AMDEM=ADRESSE OCTET DE L'IMAGE, < CODEM=TVLIMA*LK*NOCMO OBLIGATOIREMENT SI < L'ON VEUT FAIRE UN DISPLAY, < =TVLIMA*LK*NCOOL*NOCMO SI L'ON VEUT TRANSMETTRE < LES 3 COMPOSANTES SIMULTANEMENT C'EST-A-DIRE < EN ENVOYANT UN MOT ROUGE, PUIS UN MOT VERT, < PUIS UN MOT BLEU, PUIS UN MOT ROUGE,... DANS < CES CONDITIONS, (ASDEM)=0... < =(TVLIMA*LK+DKMTXY)*NOCMO SI L'ON VEUT < FAIRE DE PLUS UNE INTERPOLATION, AUQUEL < CAS L'IMAGE POSSEDE UNE EN-TETE DONT LE < FORMAT EST DONNE DANS 'DCTDKU', ET QUI < PERMET LE TRACE DU SEGMENT ((DKMTX1,DKMTY1), < (DKMTX2,DKMTY2)) DANS LE MODE 'SBT'/'RBT'/'IBT' < PRECISE PAR 'DKMTMO'. < =(TVLIMA*LK*NCOOL+DKMTXY)*NOCMO PERMET DE < FAIRE UNE INTERPOLATION, A L'EXCEPTION DE < VISUALISATION MAIS CETTE FOIS-CI AVEC DES < NIVEAUX DE GRIS ; LE MODE DE TRACE EST FIXE < LA AUSSI PAR 'DKMTMO' AVEC LES SIGNIFICATIONS < SUIVANTES : < 'DKMSRI' INDIQUE LE MODE D'INSCRIPTION : < (NC DESIGNANT LE NIVEAU COURANT DU POINT, < ET N LE NIVEAU CALCULE) < 'SBT' : NC <-- (NC).OR.(N), < (.OR. EST L'OPERATEUR FLOU 'MAX') < 'RBT' : NC <-- (NC).AND.(N), < (.AND. EST L'OPERATEUR FLOU 'MIN') < 'IBT' : NC <-- (NC).EOR.(N). < (.EOR. EST L'OPERATEUR FLOU DEFINI < PAR : < A.EOR.B=(A.AND.NB).OR.(NA.AND.B), < OU NA ET NB SIGNIFIENT RESPECTIVE- < MENT .NOT.A ET .NOT.B) < 'DKMOBA' PRECISE SI LE TRACE A LIEU DANS < L'ESPACE UTILISATEUR (0), OU DANS 'MEMTV' (1). < DANS CE CAS, ON PEUT AUSSI AVOIR : < CODEM=DKMTXY*NOCMO. < 'DKMDEC' DONNE LE DECALAGE A DROITE A < DROITE A APPLIQUER AU NIVEAU ANTERIEUR DE < CHAQUE POINT AVANT L'OPERATION LOGIQUE AVEC < LE NOUVEAU NIVEAU ; EN DEMANDANT UN DECALAGE < EGAL A 'XNCOOL', ET LE MODE 'SBT' (SOIT .OR.), < ON FORCE AINSI LE NIVEAU 'DKMNIV' EN CHAQUE < POINT... < 'DKMNIV' DONNE LE NIVEAU DE GRIS A UTILI- < SER : < ANTIAL : MODE ANTI-ALIASING, < 0-NIVMAX : DONNE LE NIVEAU. < 'DKMLCO' (DANS 'DKMTCO') DONNE A RAISON < D'UN BIT PAR NIVEAU DE GRIS L'INDICATION < SUIVANTE : SI LE BIT DE RANG 'I' EST A 1, < TOUT POINT DE NIVEAU ANTERIEUR 'NC'='I' < NE SERA PAS MODIFIE, QUELQUE SOIT < LE MODE DE TRACE DEMANDE... (SI CE BIT EST < A 0, LES ANCIENS TRAITEMENTS RESTENT < VALIDES). IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < 'DKMPOI' DONNE SUR 8 BITS UNE PATTERN < DE POINTILLES (0=TRACER, 1=NE PAS < TRACER). XEIF%1: VAL ENDIF < ASDEM=INDICATEUR DE CONTROLE DE LA < TELEVISION (CF. 'TVCTRL' QUI INCLUE < ICI 'TVIN' ET 'TVSIMU' SUIVANT LE < MEME CADRAGE). IF FONTV(MASSFF-FGX,XEIF%,XEIF%, IF ATTENTION : 'FONTV' DOIT ETRE UNE VRAIE ENTREE- IF SORTIE, A CAUSE DES 'SVC'... XEIF%: VAL ENDIF < FONTVR=FONCTION PERMETTANT LE TRANSFERT RAPIDE < DE 'DKU' VERS TOUT OU PARTIE DE LA MEMOIRE < DE VISUALISATION 'MEMTV' ; ON NOTERA QUE < L'ON PEUT EN UNE SEULE OPERATION AMENER LES < 3 COMPOSANTES CHROMATIQUES... LE ARGUMENTS < SONT ALORS LES SUIVANTS : < AMDEM=ADRESSE OCTET RELATIVE AU DEBUT DE 'MEMTV < CODEM=LONGUEUR EN OCTETS DE L'ECHANGE, < ASDEM=ADRESSE CLASSIQUE... < CES LECTURES RAPIDES PEUVENT < ETRE ENTRELACEES OU PAS SUIVANT < LES COMMANDES "!DKU S" ET "!DKU F" < RESPECTIVEMENT ; LE MODE NON ENTRE- < LACE ETANT L'ETAT INITIAL DU < SYSTEME. < FONTVW=FONCTION INVERSE DE 'FONTVR' : < MEMOIRE DE VISUALISATION --> 'DKU'. < < < NOTA : < LES FONCTIONS 'FONTVR' ET 'FONTVW' SONT < UTILISABLES AVEC QUANTA=3 OU QUANTA=1, IL < SUFFIT DE LES COMPLETER AVEC LE BIT 'XBITQ'... < DE PLUS, ELLES PERMETTENT D'ATTEINDRE TOUTE < LA MEMOIRE (DE TAILLE 'RTLIMA' K-MOTS) OU EST < IMPLANTEE LA MEMOIRE DE TELEVISION... < < < NOTA : < AVEC LE BIT12(OPDEM) ON PEUT AINSI < PAR PROGRAMME GENERER LA ZONE DE SIMULATION < DE 'DKF' SUR 'DKM'. < < < EXTENSION 'CDA' : < AUTREFOIS, UN CERTAIN NOMBRE < DE FONCTIONS UTILISAIENT LA 'CDAI' ; < MAINTENANT, CES FONCTIONS PEUVENT < ACCEDER A TOUTES LES 'CDA' : EN < EFFET LORSQU'ELLES SONT DEMANDEES, < 'HDLDKU' RECOIT COMME ARGUMENT DANS < (SLO,SLE), NON PAS LES REGISTRES < (SLO,SLE) DE L'UTILISATEUR, MAIS LA < DEFINITION DE SA 'CDA' COURANTE, < SOIT (CDESCO,CDESCE)... < LE SOUS-PROGRAMME 'TWOE' A ETE < CREE A CET EFFET, AFIN DE FAIRE < CROIRE A 'HDLDKU' QU'IL CONTINUE < DE TRAVAILLER SUR 'MEMTV'... < < USE L,DCT0 USE W,DEM0 PAGE < < < S Y S T E M E D E T R A N S F E R T R A P I D E < ' D K U ' <--> ' M E M T V ' : < < DKUTT1: EQU $ LA ARGDEM+OPDEM RBT XBITQ < EN EFFET, 'FONTVR' ET 'FONTVW' SONT < UTILISABLES AVEC OU SANS 'XBITQ'... CPI FONTVW < EST-CE LE TRANSFERT MEMTV --> DKU ??? JE DKUTT6 < OUI, ON LE TRAITE... CPI FONTVR < LA FONCTION DEMANDEE EST-ELLE CELLE < DU TRANSFERT RAPIDE DKU --> MEMTV. JNE DKUTT2 < NON, ON SORT IMMEDIATEMENT... < < CAS DES LECTURES : PRISE < EN COMPTE DES EVENTUELLES < DEMANDES D'ENTRELACAGE : < LRM A <******************************************************************************* WORD TVLIMA*LK*XNCOOL*NOCMO XWOR%7: VAL '0000000@@@@ <******************************************************************************* XWOR%6: VAL NOCMO=K-DADR < POUR PASSER D'UN NOMBRE D'OCTETS A UN < NOMBRE DE DADR-MOTS... XWOR%6: VAL -XWOR%6 IF XWOR%7>XWOR%6-XXLTV,,XEIF%, IF ATTENTION : LA LONGUEUR DE LA ZONE D'ENTRELACAGE DES IF IMAGES EST INSUFFISANTE !!! XEIF%: VAL ENDIF CP ARGDEM+CODEM < L'IMAGE EST-ELLE COMPLETE ??? JNE DKUTT7 < NON, DONC PAS D'ENTRELACAGE... CPZ ARGDEM+AMDEM < EST-CE BIEN 'MEMTV0' QUI EST CONCERNEE < PAR CET ECHANGE ??? JNE DKUTT7 < NON, OU BIEN ELLE EST DECALEE ; ON REFUSE < L'ENTRELACAGE... IF MEMTVQ-K,,XEIF%, IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!! XEIF%: VAL ENDIF PSR W CALL #SISP CMS5 W ZERO# < (W)=BASE LA MEMOIRE DEBANALISEE : LA TVENTR-ZERO,W < (A)=ADRESSE-MOT DE LA ZONE D'ENTRELACAGE, PLR W STA ARGDEM+AMDEM < ET ON MODIFIE 'AMDEM' QUI DESIGNE DESOR- < MAIS LA ZONE D'ENTRELACAGE ; ON POURRA < REGENERER 'AMDEM' EN SORTIE PUISQU'IL < NUL A L'ENTREE... LA NSPTYP SBT TYPAD < ET IL FAUT FAIRE CROIRE QU'UNE ADRESSE STA NSPTYP < A ETE FOURNIE... DKUTT7: EQU $ < < TRAITEMENT COMMUN 'FONTVR'/'FONTVW' : < <******************************************************************************* DKMTQ3: LX VAR+LSDK < (X)=LISTE DES GROUPES APPROPRIES... XWOR%1: VAL '0000000@@@@ < RECUPERATION DU 'LX LSDK'... <******************************************************************************* LXLSDK: EQU ZERO+XWOR%1 < AFIN D'UTILISER CETTE INSTRUCTION < DANS 'HDLSCH' EN REFERENCE EN AVANT... $EQU DKMTQ3 < ET ANNULATION DU CODE GENERE... DKUTT6: EQU $ LA NSPTYP TBT VBOX < LA DEMANDE COURANTE A-T'ELLE UNE 'BOX' ? JNC DKMTQ2 < NON, PAS DE TEST DE BLOCAGE... LA BOX < OUI : EOR VAR+LSDK < ON FAIT UN .EOR. ENTRE LA LISTE DES < APPROPRIATIONS PARTIELLES ('BOX') ET < LA LISTE DES APPROPRIATIONS GENERALES < ('LSDK') : TBT BLDKTV < ON TESTE LE DERNIER GROUPE DE CYLINDRES < QUI PROTEGE AUSSI L'ACCES A 'MEMTV' : JC DKUTT5 < ERREUR, L'ACCES EST INTERDIT POUR CE < DEMANDEUR : BOX=0 ET LSDK=1 (L'AUTRE < CONFIGURATION DE BITS (1 ET 0) ETANT < IMPOSSIBLE... DKMTQ2: EQU $ < PAS DE TEST NECESSAIRE, OU BIEN < (BOX)=LSDK : ACCES LIBRE (=0), OU BIEN < RESERVE A CE DEMANDEUR (=1)... LA ETASYS < OUI, TBT TVEXIS < ALORS LA 'TV' EXISTE-T'ELLE ??? JC DKUTT3 < OUI, C'EST BON... BR VAR+ADKM2 < NON, ON FAIT UNE SORTIE IMMEDIATE... DKUTT3: EQU $ < < NOTA IMPORTANT : < ON NE FAIT PLUS L'OPERATION < SUIVANTE : < DSYNC0 <-- (DSYNC0).OR.'XEXATV' < CAR EN EFFET, (SLO,SLE) SONT < POSITIONNES DE FACON A ENCADRER < LA 'CDA' COURANTE DE L'UTILISATEUR < DEMANDEUR... < LA NSPTYP TBT TYPAD < TYPE DE 'AMDEM' ??? JC DKUTT2 < DE MOTS, IL S'AGIT DONC DE L'ENTRELACAGE, < ON NE FAIT DONC AUCUNE VERIFICATION, NI < AUCUNE TRANSLATION... LA ARGDEM+AMDEM < ADRESSE RELATIVE A 'MEMTV' DESIREE... IF DKMTMR-K,,XEIF%, JAL DKUTT5 < ERREUR... XEIF%: VAL ENDIF IF MEMTVQ-K,,XEIF%, AD VAR+DKMTM0 < ON TRANSLATE, STA ARGDEM+AMDEM < ET ON MODIFIE 'AMDEM' !!! XEIF%: VAL ENDIF IF DKMTMR-K,,XEIF%, AD ARGDEM+CODEM < ADRESSE DU PREMIER MOT NON ECHANGE, CP VAR+DKMTME < VALIDATION... JG DKUTT5 < ERREUR, VIOLATION... XEIF%: VAL ENDIF DKUTT2: EQU $ < < VERS LE TRAITEMENT DE L'ECHANGE : < LRM A WORD DKM50 < (A)=ADRESSE DE TRAITEMENT DE L'ECHANGE. PSR A < CETTE METHODE ME PERMET DE GAGNER UN MOT < DANS LA 'DCTDKU'... RSR < VERS LE TRAITEMENT DE L'ECHANGE... < < SORTIE EN ERREUR : < DKUTT5: EQU $ BR VAR+ADKM3 PAGE < < < T R A C E D U P O I N T ( X 1 , Y 1 ) : < < < ARGUMENT : < DKMTX1,DKMTY1=COORDONNEES ENTIERES DU POINT A TRACER. < DKMRNA=0 : TRACER LE POINT ARGUMENT, < #0 : RENVOYER UNIQUEMENT LE NIVEAU ANTERIEUR < DU POINT COURANT. < < < RESULTAT : < DKMRNA=NIVEAU ANTERIEUR DU POINT DANS TOUS LES CAS. < < DKMTP1: EQU $ PSR A,B,X < SAUVEGARDES. PSR C,W < < LE POINT (X1,Y1) EST-IL DANS L'ECRAN ??? < LA DKMTX1-DEPCS,C < COORDONNEE X1 : JAL AKMTV9 < HORS-ECRAN... CPI DKMTNC < ??? JG AKMTV9 < HORS-ECRAN... LA DKMTY1-DEPCS,C < COORDONNEE Y1 : JAL AKMTV9 < HORS-ECRAN... CP VAR+DKMTNL < ??? JG AKMTV9 < HORS-ECRAN... < < CAS OU LE POINT (X1,Y1) EST VISIBLE : < LR C,X < 'X' SERT A TRANSFERER UNE ADRESSE : ADRI DKMTXY-DEPCS,X < (X)=ADRESSE DE L'IMAGE OU METTRE LE POINT LR X,W < 'W' MEMORISE L'ADRESSE DE L'IMAGE, AFIN < DE POUVOIR RECUPERER ULTERIEUREMENT < L'INDICATEUR 'DKMOBA', ET DANS LA CAS DE < 'MEMTV' L'ADRESSE RELATIVE D'UN MOT < DANS L'IMAGE. XWOR%1: VAL DKMTNM=K IF BIT>XWOR%1-DKMTNM,,XEIF%, IF ATTENTION : POUR QUE CE QUI SUIT FONCTIONNE IF CORRECTEMENT, 'DKMTNM' DOIT ETRE UNE IF PUISSANCE DE 2 !!! XEIF%: VAL ENDIF SLLS XWOR%1 < ON MULTIPLIE PAR LE NOMBRE DE MOTS PAR < LIGNE. ADR A,X LA DKMTX1-DEPCS,C < (A)=COORDONNEE 'X', SLRS NBITMO=K < QUE L'ON CONVERTIT EN ADRESSE-MOTS. ADR A,X LAI NBITMO-N XWOR%1: VAL NBITMO=K IF BIT>XWOR%1-NBITMO,,XEIF%, IF ATTENTION : 'NBITMO' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF AND DKMTX1-DEPCS,C < NUMERO BIT DANS LE MOT. LR X,C < (C)=ADRESSE DU MOT DANS L'IMAGE CONTE- < NANT LE POINT A TRACER. LR A,X CPZ VAR+DKNIVO < AVEC OU SANS NIVEAU DE GRIS ??? JL DKMTW5 < SANS... < < CAS DU TRACE AVEC NIVEAU DE GRIS : < PSR Y LRM Y WORD TVLIMA*LK < CONSTANTE DE PASSAGE D'UNE TRAME < A L'AUTRE... IF DKMTSB-K,,,XEIF% IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF IF DKMTRB-K,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF IF DKMTIB-K,XEIF%,, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF < < DETERMINATION DU NIVEAU COURANT DU POINT : < <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : LA O,C < ACCES A LA PREMIERE COMPOSANTE : <******************************************************************************* SCLS BIT,X SLRD BIT < MEMORISATION DU PREMIER BIT (ROUGE). ADR Y,C <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : LA O,C < ACCES A LA DEUXIEME COMPOSANTE : <******************************************************************************* SCLS BIT,X SLRD BIT < MEMORISATION DU DEUXIEME BIT (VERT). ADR Y,C <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : LA O,C < ACCES A LA TROISIEME COMPOSANTE : <******************************************************************************* SCLS BIT,X ANDI BIT < MEMORISATION DU TROISIEME BIT (BLEU). SLLD XNCOOL-BIT < (A)=NIVEAU COURANT DU POINT... < SOIT : (A)=NC. IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < RENVOI DU NIVEAU ANTERIEUR : < CPZ VAR+DKMRNA < ALORS FAUT-IL TRACER LE POINT (=0), OU < UNIQUEMENT RENVOYER SON NIVEAU ANTE- < RIEUR ??? STA VAR+DKMRNA < DANS TOUS LES CAS, ON LE RENVOIE... JNE DKMTWL < ET OUI, C'EST CE QUI ETAIT DEMANDE... < < ET NON, TRACE DU POINT : < XEIF%1: VAL ENDIF < < TEST DU NIVEAU ANTERIEUR 'NC' : < PSR X LX VAR+DKDECA < (X)=DECALAGE A APPLIQUER AU NIVEAU 'NC', XR A,X < (A)=DECALAGE A APPLIQUER, < (X)='NC', TBT DKMDEC=DKBDEC < ALORS, FAUT-IL TESTE LE NIVEAU < ANTERIEUR 'NC' ??? JNC DKMTWK < NON, ON Y VA POUR LE MARQUAGE... LA VAR+DKTCO < OUI, ALORS, ACCEDONS AU CHAMP 'DKMLCO' : TBT CODBT=FMASK(K?DKMLCO=FCINST)DKMLCO+L,X JNC DKMTWM < OK, LE BIT ASSOCIE AU NIVEAU 'NC' EST < A 0, LE POINT COURANT, SI LA SUITE LE < JUGE NECESSAIRE, PEUT ETRE MARQUE... PLR X < ET BIEN NON, LE POINT COURANT DE NIVEAU < 'NC' DOIT RESTER INTACT, CAR LE BIT DE < RANG 'NC' DANS 'DKMLCO' EST A 1... JMP DKMTWL < VERS LA SORTIE... DKMTWM: EQU $ LA VAR+DKDECA < RESTAURATION DE (A)='DKDECA', XWOR%2: VAL DKMDEC=K XWOR%2: VAL -XWOR%2 XWOR%1: VAL CORBT?DKBDEC=FMASK(K?DKMDEC=FCINST>XWOR%2 ANDI XWOR%1 < (A)=DECALAGE A APPORTER A 'NC'... DKMTWK: EQU $ XR A,X < RESTAURE : < (A)='NC', < (X)=DECALAGE A APPLIQUER A 'NC'... SLRS L,X < ON DECALE LE NIVEAU COURANT DU POINT < COURANT, QUITTE A LE FAIRE DISPARAITRE... < (NC) DECALE EST ENCORE APPELE 'NC'... PLR X LB VAR+DKNIVO < (B)=NIVEAU DEMANDE, < SOIT : (B)=N. < < DISCRIMINATION ENTRE LES 2 LOGIQUES : < PSR A,X LA VAR+DKMTRS < (A)=MODE DEMANDE : LXI K < (X)=DISCRIMINATEUR DES LOGIQUES, TBT DKLODD ADCR X TBT DKLODF SBCR X < (X)=0 : 'DKLODD'='DKLODF' ==> LOGIQUE < FLOUE... < (X)#0 : 'DKLODD'#'DKLODF' ==> LOGIQUE < BINAIRE... CPZR X < ALORS QUELLE EST LA LOGIQUE DEMANDEE ??? < (A NOTER QUE 'DKLOGD'='DKLOGF' EST < COMPATIBLE AVEC L'ANCIENNE VERSION...) PLR A,X JE DKMTZ1 < CAS DE LA LOGIQUE FLOUE... < < < L O G I Q U E B I N A I R E : < < PSR A < SAUVEGARDE DU NIVEAU ANTERIEUR... LA VAR+DKMTRS < (A)=MODE DEMANDE EN LOGIQUE BINAIRE, IBT DKLODD < ET ON SE RAMENE AU FLOU... CPI NEXIST < ALORS QUEL EST L'OPERATEUR ??? PLR A < (A)=NIVEAU ANTERIEUR... IF DKMTSB-K,,,XEIF% IF ATTENTION : 'DKMTSB' DOIT ETRE POSITIF !!! XEIF%: VAL ENDIF IF DKMTRB-K,,XEIF%, IF ATTENTION : 'DKMTRB' DOIT ETRE NUL !!! XEIF%: VAL ENDIF IF DKMTIB-K,XEIF%,, IF ATTENTION : 'DKMTIB' DOIT ETRE NEGATIF !!! XEIF%: VAL ENDIF IF NEXIST-K,,XEIF%, IF ATTENTION : LES BRANCHEMENTS QUI SUIVENT SON IDIOTS !!! XEIF%: VAL ENDIF JG DKMTZ7 < CAS DE .OR. LOGIQUE... JE DKMTZ6 < CAS DE .AND. LOGIQUE... < < .EOR. LOGIQUE : < EORR B,A < (A)=(A).EOR.(B), JMP DKMTWD < VERS L'ECRITURE DANS L'IMAGE... < < .OR. LOGIQUE : < DKMTZ7: EQU $ ORR B,A < (A)=(A).OR.(B), JMP DKMTWD < VERS L'ECRITURE DANS L'IMAGE... < < .AND. LOGIQUE : < DKMTZ6: EQU $ ANDR B,A < (A)=(A).AND.(B), JMP DKMTWD < VERS L'ECRITURE DANS L'IMAGE... AKMTV9: JMP DKMTV9 < RELAI... < < < L O G I Q U E F L O U E : < < DKMTZ1: EQU $ CPZ VAR+DKMTRS < QUEL EST LE MODE DU TRACE ??? JG DKMTW7 < 'SBT' : C'EST L'OPERATEUR .OR. JE DKMTW6 < 'RBT' : C'EST L'OPERATEUR .AND. < < 'IBT' FLOU : C'EST L'OPERATEUR .EOR. FLOU : < PSR X,Y LXI NIVMAX SBR A,X < (X)=.NOT.(A)=.NOT.(NC), QUE L'ON VA < NOTER NA... LYI NIVMAX SBR B,Y < (Y)=.NOT.(B)=.NOT.(N), QUE L'ON VA < NOTER NB... CPR A,Y < CALCUL DE A.AND.NB : JGE DKMTWI < 'A' EST DEJA LE 'MIN'... LR Y,A < C'EST 'Y' LE MIN... DKMTWI: EQU $ CPR B,X < CALCUL DE B.AND.NA : JGE DKMTWJ < 'B' EST DEJA LE 'MIN'... LR X,B < C'EST 'X' LE MIN... DKMTWJ: EQU $ PLR X,Y JMP DKMTW7 < MAINTENANT, ON VA CALCULER : < (A.AND.NB).OR.(NA.AND.B), C'EST-A-DIRE < QUE L'ON EQUIVAUT MAINTENANT A 'SBT'... < < 'RBT' : C'EST L'OPERATEUR .AND. FLOU : < DKMTW6: EQU $ CPR A,B < CALCUL DE (A).AND.(B) : JGE DKMTWD < 'A' EST DEJA LE 'MIN'... JMP DKMTWH < C'EST 'B' LE 'MIN'... < < 'SBT' : C'EST L'OPERATEUR .OR. FLOU : < DKMTW7: EQU $ CPR A,B < CALCUL DE (A).OR.(B) : JLE DKMTWD < 'A' EST DEJA LE 'MAX'... DKMTWH: EQU $ LR B,A < C'EST 'B' LE 'MAX'... < < MISE EN PLACE DU NOUVEAU NIVEAU DU POINT COURANT : < DKMTWD: EQU $ SLRD XNCOOL < MISE DU NIVEAU DANS 'B'... <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : LA O,C < ACCES A LA TROISIEME COMPOSANTE : XLAOC:: VAL '0000000@@@@ < CODE DU 'LA O,C'... <******************************************************************************* SCLS L,X SLLD BIT < CONCATENATION DU TROISIEME BIT (BLEU). SCRS BIT,X <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : STA O,C XSTAOC:: VAL '0000000@@@@ < CODE DU 'STA O,C'... <******************************************************************************* SBR Y,C <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : LA O,C < ACCES A LA DEUXIEME COMPOSANTE : <******************************************************************************* SCLS L,X SLLD BIT < CONCATENATION DU DEUXIEME BIT (VERT). SCRS BIT,X <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : STA O,C <******************************************************************************* SBR Y,C <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : LA O,C < ACCES A LA PREMIERE COMPOSANTE : <******************************************************************************* SCLS L,X SLLD BIT < CONCATENATION DU PREMIER BIT (ROUGE). SCRS BIT,X <******************************************************************************* BSR VAR+DKMTA6 < EXECUTION DE CE QUI SUIT : STA O,C <******************************************************************************* DKMTWL: EQU $ PLR Y JMP DKMTV9 < VERS LA SORTIE... < < CAS DU TRACE SANS NIVEAU DE GRIS : < DKMTW5: EQU $ LA O,C IF DKMTSB-K,,,XEIF% IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF IF DKMTRB-K,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF IF DKMTIB-K,XEIF%,, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF CPZ VAR+DKMTRS < QUE LE MODE 'SBT'/'RBT' ??? JE DKMTV3 < 'RBT'... JL DKMTW1 < 'IBT'... SBT L,X < 'SBT'. JMP DKMTV4 < VERS LA MISE A JOUR DE L'IMAGE... DKMTW1: EQU $ IBT L,X < 'IBT'. JMP DKMTV4 < VERS LA MISE A JOUR DE L'IMAGE... DKMTV3: EQU $ RBT L,X < 'RBT'. DKMTV4: EQU $ STA O,C DKMTV9: EQU $ < CAS DES OVER-SCREEN... PLR C,W PLR A,B,X < RESTAURATIONS. RSR PAGE < < < A C C E S A U N M O T D E L ' I M A G E : < < < FONCTION : < CE SOUS-PROGRAMME EST TRES COMPLIQUE < PARCEQU'IL N'Y A PLUS DE PLACE DANS LA < 'DCTDKU', ET QU'ON NE PEUT DONC PAS FAIRE < UN SOUS-PROGRAMME DE 'LOAD' ET UN SOUS- < PROGRAMME DE 'STORE'. DE PLUS IL PREND < EN COMPTE L'INDICATEUR 'DKMOBA' QUI < INDIQUE SI L'OPERATION A LIEU DANS LA < MEMOIRE UTILISATEUR, OU BIEN DANS < 'MEMTV'... < < < ARGUMENT : < (W)=ADRESSE DE L'IMAGE DANS L'ESPACE BAS. < (A)=VALEUR A FORCER S'IL S'AGIT D'UN 'STORE', < L'INSTRUCTION SUIVANT LE 'BSR'. < < < RESULTAT : < (A)=VALEUR RECUPEREE S'IL S'AGIT D'UN 'LOAD'. < < DKMTP6: EQU $ XKREG: VAL K #@PSR X,Y,W < #SISP CMS5 KREG# #@PSR A,B < #SISP CMS5 KREG# XKREG: VAL -XKREG < NOMBRE DE REGISTRES EMPILES A L'ENTREE. XWOR%2: VAL D < LONGUEUR D'UNE INSTRUCTION... LA -DKMTXY+DKMTMO,W ANDI DKMOBA < 'A' : DISCRIMINE LES DEMANDES EN MEMOIRE < BASSSE (=0) DES DEMANDES 'MEMTV' (#0). JANE DKMTVG < CAS DE 'MEMTV'... < < CAS DE LA MEMOIRE UTILISATEUR : < PLR A,B < RESTAURATION DE 'A' EN PARTICULIER... < L'INSTRUCTION ARGUMENT SERA EXECUTEE AU < RETOUR DU 'BSR'... < < SORTIE : < DKMTVH: EQU $ PLR X,Y,W RSR < < CAS DE LA MEMOIRE 'MEMTV' : < DKMTVG: EQU $ SBR C,W < 'W' DONNAIT L'ADRESSE ABSOLUE DE LA < MEMOIRE DE L'IMAGE UTILISATEUR, ET < 'C' L'ADRESSE ABSOLUE D'UN MOT PARTI- < CULIER DEDANS, NGR W,Y < (Y)=ADRESSE RELATIVE DU MOT ADRESSE < DANS 'MEMTV'. LR K,W < 'W' BASE LA PILE : LA -XKREG-XWOR%2+DEPILE,W < (A)=REGISTRE 'P' DE RETOUR D'UN 'BSR' < EXECUTE "NORMALEMENT"... DO XWOR%2 IC -XKREG-XWOR%2+DEPILE,W < AFIN DE SAUTER L'INSTRUCTION ARGUMENT... LR A,W < 'W' BASE L'INSTRUCTION ARGUMENT, LX O,W < (X)=INSTRUCTION ARGUMENT, QUI SUIT LE < 'BSR' D'APPEL. LRM A,B WORD XLAOC < (A)=CODE DU 'LA O,C', WORD XSTAOC < (B)=CODE DU 'STA O,C'. CPR A,X < EST-CE UN 'LOAD' ??? JE DKMTVI < OUI... CPR B,X < EST-CE UN 'STORE' ??? JE DKMTVJ < OUI... PSR C < NON, CALL #SISP CMS5 BASE C# < QU'EST-CE QU'IL NE FAUT PAS FAIRE ?!???! BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VOIR POURQUOI LE REGISTRE 'X' EST < MAUVAIS !!! < PLR C PLR A,B JMP DKMTVH < ET ON ABANDONNE... < < CAS D'UN 'LOAD' DANS 'MEMTV' : < DKMTVI: EQU $ PLR A,B < RESTAURATION DE 'A' EN PARTICULIER... LAR < ACCES AU MOT DEMANDE... JMP DKMTVH < ET ON SORT... < < CAS D'UN 'STORE' DANS 'MEMTV' : < DKMTVJ: EQU $ PLR A,B < RESTAURATION DE 'A' EN PARTICULIER... STAR < ET RANGEMENT DU MOT ARGUMENT... JMP DKMTVH < ET ON SORT... PAGE < < < C A L C U L D U N I V E A U D E G R I S < E T T R A C E D U P O I N T : < < < FONCTION : < CE SOUS-PROGRAMME CALCULE LA DISTANCE < DU POINT ENTIER COURANT (X,Y) < AU POINT FLOTTANT COURANT (DKMTX,DKMTY) < SUIVANT LA NORME EUCLIDIENNE ; < A PARTIR DE CETTE DISTANCE, ON EN DEDUIT < UN NIVEAU DE GRIS : PLUS LE POINT ENTIER < EST PRES DU POINT FLOTTANT, PLUS IL EST < LUMINEUX... < < < ARGUMENTS : < (DKMTX,DKMTY)=COORDONNEES DU POINT FLOTTANT, < (X,Y)=COORDONNEES DU POINT ENTIER. IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < (FPENTE)=COEFFICIENT (ENTRE 0 ET 1) DE PONDE- < RATION DES NIVEAUX... XEIF%1: VAL ENDIF < < DKMTP4: EQU $ PSR A,B IF DIMALI-DIMAL1,XEIF%2,,XEIF%2 STX DKMTX1-DEPCS,C < ARGUMENT 'X' DE 'DKMTP1', STY DKMTY1-DEPCS,C < ARGUMENT 'Y' DE 'DKMTP1'. < < INTERPOLATION AVEC < LE NIVEAU ANTERIEUR : < STZ VAR+DKMRNA IC VAR+DKMRNA < (DKMRNA)#0, BSR VAR+DKMTA1 < RECUPERATION DU NIVEAU ANTERIEUR DU < POINT ARGUMENT : PSR X,Y < SAUVEGARDES... FLD VAR+FPENTE < (A,B)=FPENTE ; A NOTER QUE LE CODE QUI < SUIT EST VACHEMENT COMPLIQUE PAR LE FAIT < QU'IL DEMANDERAIT EN FAIT DES VARIABLES < FLOTTANTES DE MANOEUVRE, MAIS QUE LA < 'DCTDKU' EST PLEINE COMME UN OEUF... LR A,X LR B,Y < (X,Y)=FPENTE, LAI I FLT FSB VAR+FPENTE FST VAR+FPENTE < MEMORISATION PENIBLE DE 1-FPENTE... LA VAR+DKMRNA < (A)=NIVEAU ANTERIEUR DU POINT COURANT, FLT < QUE L'ON FLOTTE... FMP VAR+FPENTE < NA*(1-FPENTE), EN APPELANT "NA" LE < NIVEAU ANTERIEUR... FST VAR+FPENTE < ET MEMORISATION PENIBLE... LR X,A < (X,Y)=FPENTE, LR Y,B < (A,B)=FPENTE, FMP VAR+FIVMAX < FIVMAX*FPENTE, PSR A,B < ET SAUVEGARDE... BSR VAR+DKMTA3 < (A)=NIVEAU ENTIER QUE L'ON OBTIENDRAIT < SI L'ON INTERPOLAIT ENTRE LE NIVEAU < NUL (NOIR) ET LE MAX... CP VAR+DKMRNA < EST-IL EGAL A CELUI QUI ETAIT PRESENT < ANTERIEUREMENT ??? PLR A,B < RESTAURATION... JE DKMTWN < OUI, C'EST LUI QU'ON PREND ; NOTONS < QU'ON N'A PAS BESOIN DE LE TRACER, MAIS < CELA SIMPLIFIE LA GESTION DE LA PILE... < C'EST EN PARTICULIER LE CAS OU L'ON < TRACE DE FOIS DE SUITE LE MEME TRAIT : < SANS CE DISPOSITIF, ON CUMULE LES 2 TRACE < ET L'ANTI-ALIASING S'AMENUISE... FAD VAR+FPENTE < NON, NA*(1-FPENTE)+FIVMAX*FPENTE, SOIT UN < VALEUR INTERPOLEE ENTRE LE NIVEAU ANTE- < RIEUR "NA", ET LE NIVEAU MAXIMAL... DKMTWN: EQU $ XR A,X XR B,Y < (A,B)=FPENTE, ET < (X,Y)=NA*(1-FPENTE)+FIVMAX*FPENTE. FST VAR+FPENTE < ET ON RESTAURE 'FPENTE', ENFIN... LR X,A LR Y,B < (A,B)=NIVEAU INTERPOLE DANS (NA,FIVMAX), PLR X,Y < ET ON RESTAURE... XEIF%2: VAL ENDIF IF DIMALI-DIMAL2,XEIF%2,,XEIF%2 LR X,A < (X)=A=COORDONNEE X ENTIERE, STA DKMTX1-DEPCS,C < ARGUMENT DE 'DKMTP1'. FLT FSB VAR+DKMTX FST VAR+FWORK FMP VAR+FWORK PSR A,B < SAUVEGARDE DE (X1-X)**2. LR Y,A < (Y)=A=COORDONNEE Y ENTIERE, STA DKMTY1-DEPCS,C < ARGUMENT DE 'DKMTP1'. FLT FSB VAR+DKMTY FST VAR+FWORK FMP VAR+FWORK FST VAR+FWORK < SAUVEGARDE DE (Y1-Y)**2, PLR A,B FAD VAR+FWORK < CALCUL DE LA NORME EUCLIDIENNE AU CARRE, < SOIT : D**2=(X1-X)**2+(Y1-Y)**2. < < CALCUL D'UNE RACINE CARREE : < (PAR LA METHODE DE NEWTON < U(N+1)=(U(N)+K/U(N))/2) < RAC: EQU $ FCAZ < LE CALCUL EST-IL NECESSAIRE ??? JE RAC2 < NON : NOMBRE=0 ==> RACINE=0... JL DKMTWA < HORREUR, LE NOMBRE EST NEGATIF, < E R R E U R S Y S T E M E... < (NE PAS OUBLIER QUE 'C' EST MAUVAISE !!!) PSR X,Y LR A,X < X ET LR B,Y < Y MEMORISENT LE NOMBRE ARGUMENT. RAC1: EQU $ FST VAR+FWORK LR X,A LR Y,B < ('K' REPRESENTE LE NOMBRE DONT ON < CALCULE LA RACINE CARREE ET QUI EST < MEMORISE DANS (X,Y)). FDV VAR+FWORK < K/U(N), FAD VAR+FWORK < U(N)+K/U(N), FMP VAR+DKMT05 < (U(N)+K/U(N))/2=(U(N)+K/U(N))*0.5. FCAM VAR+FWORK < TEST DE FIN ??? JNE RAC1 < NON... PLR X,Y < < CALCUL DU NIVEAU DU POINT : < RAC2: EQU $ FSB VAR+FRHUIT FNEG FDV VAR+FRHUIT < ON CALCULE (FRHUIT-D)/FRHUIT, OU < 'FRHUIT' EST LA VALEUR MAXIMALE DE 'D'... FMP VAR+FIVMAX < PONDERATION DE 'NIVMAX'... XEIF%2: VAL ENDIF BSR VAR+DKMTA3 < (A)=NIVEAU A ATTRIBUER AU POINT (X,Y). JAL DKMTWA < ERREUR... CPI NIVMAX < VALIDATION, SUITE... JLE DKMTW3 < OK... DKMTWA: EQU $ PSR C CALL #SISP CMS5 BASE C# < QU'EST-CE QU'IL NE FAUT PAS FAIRE ????!!! BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ESSAYER DE COMPRENDRE... < PLR C NTRN LAI NIVMAX/XXXMOY < POURQUOI PAS ??? TRN DKMTW3: EQU $ STA VAR+DKNIVO < MEMORISATION DU NIVEAU... IF DIMALI-DIMAL2,XEIF%2,,XEIF%2 CP VAR+DKMIVO < EST-IL MAXIMAL ??? JLE DKMTWB < NON... STA VAR+DKMIVO < OUI, ON LE MEMORISE, STX VAR+DKNIVX < AINSI QUE LES COORDONNEES 'X' STY VAR+DKNIVY < ET 'Y' DU POINT ENTIER CORRESPONDANT. DKMTWB: EQU $ XEIF%2: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 STZ VAR+DKMRNA < AFIN DE TRACER LE POINT DANS 'DKMTA1'... XEIF%1: VAL ENDIF BSR VAR+DKMTA1 < ET TRACE DU POINT (DKMTX1,DKMTY1) < AVEC LE NIVEAU 'DKNIVO'... PLR A,B RSR PAGE < < < T R A C E D U P O I N T C O U R A N T ( X , Y ) : < < < ARGUMENT : < DKMTX,DKMTY=COORDONNEES DU POINT A TRACER EN FLOTTANT. < < DKMTP2: EQU $ PSR A,B,X,Y IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < GESTION DES POINTILLES : < LA VAR+MDKMPO < (A)=PATTERN COURANTE DES POINTILLES, TBT BDKMPO < FAUT-IL TRACER LE POINT COURANT ??? JC AKMTZP < NON, ON SORT... XEIF%1: VAL ENDIF < < INITIALISATIONS : < LX DKMTX1-DEPCS,C < SAUVER 'DKMTX1'... LY DKMTY1-DEPCS,C < ... ET 'DKMTY1'. CPZ VAR+DKNIVO < FAUT-IL DES NIVEAUX DE GRIS ??? JL DKMTW9 < NON... LA DKMTMO-DEPCS,C < OUI, ANDI DKMNIV < (A)=NIVEAU DE GRIS DEMANDE. XWOR%1: VAL DKMNIV=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 XEIF%: VAL ENDIF CPI ANTIAL < EST-CE L'ANTI-ALIASING ??? JNE DKMTVD < NON, IL S'AGIT BIEN D'UN NIVEAU DE GRIS.. < < CAS D'UN TRACE ANTI-ALIASING : < IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 STZ VAR+DKMIVO < INITIALISATION DU NIVEAU MAXIMAL DC VAR+DKMIVO < RENCONTRE SUR UNE VALEUR NEGATIVE... XEIF%1: VAL ENDIF PSR X,Y IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 LA &VAR+DKMINF < ACCES A 'INFINI'... STA VAR+APENTE < DROITE VERTICALE A PRIORI... FLD VAR+DKMT05 FST VAR+FPENTE < A PRIORI, ON SUPPOSE QU'IL S'AGIT DE < DROITES VERTICALES OU HORIZONTALES, OU < DE POINTS ISOLES OU D'EXTREMITES. FLD VAR+DKMTA < (A,B)=PENTE FLOTTANTE, FABS < DONT ON PREND LA VALEUR ABSOLUE, FIX < PUIS LA VALEUR ENTIERE : JV DKMTZK < DEBORDEMENT, ON CONSIDERE LA DROITE < VERTICALE... STA VAR+APENTE < OK, CET INDICATEUR PRECISE : < =0 : FAIBLE PENTE, < >0 : FORTE PENTE, < <0 : DROITE VERTICALE. DKMTZK: EQU $ PENT45:: VAL W/W < DEFINITION D'UNE PENTE A 45 DEGRE... < NOTA IMPORTANT : ETANT DONNE L'INVER- < SION DE L'AXE 'OY', LE REFERENTIEL < N'EST PAS DIRECT : IL Y A SYMETRIE PAR < RAPPORT A 'OX', ET ALORS TOUTES LES < REFERENCES A 'PENT45' SERONT INVERSEES... IF PENT45-K-I,,XEIF%, IF ATTENTION : SI 'PENT45' NE VAUT PAS 1, IF ON NE PEUT PAS DISTINGUER LES PENTES IF FAIBLES (ANGLE INFERIEUR A PI/4) PAR IF UN TEST DE NULLITE !!! XEIF%: VAL ENDIF XEIF%1: VAL ENDIF < < CALCUL DU "POINT CENTRAL" : < FLD VAR+DKMTX FCAZ JL DKMTWC < HORS-ECRAN : ON EVITE DE PLUS UN < MECHANT PROBLEME LIE A L'INSTRUCTION < 'FIX' QUI TRONQUE PAR EXCES LES < NOMBRES NEGATIFS... IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 FIX XEIF%1: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 CPZ VAR+APENTE < COMMENT EST-LA PENTE DE LA DROITE ??? JE DKMTZG < FAIBLE... FIX < FORTE : LA COORDONNEE 'X' EST DONC LA < PARTIE ENTIERE PAR DEFAUT DE LA < VALEUR FLOTTANTE 'DKMTX'. JMP DKMTZH DKMTZG: EQU $ BSR VAR+DKMTA3 < FAIBLE : LA COORDONNEE 'X' EST OBTENUE < PAR LA PLUS PROCHE VALEUR ENTIERE DE < 'DKMTX' AFIN D'EVITER DES TROUS DANS < LE TRACE... DKMTZH: EQU $ XEIF%1: VAL ENDIF LR A,X < (X)=COORDONNEE DU PREMIER POINT ENTIER. < (DIT "POINT CENTRAL") FLD VAR+DKMTY FCAZ JL DKMTWC < HORS-ECRAN... IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 FIX XEIF%1: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 CPZ VAR+APENTE < COMMENT EST LA PENTE DE LA DROITE ??? JNE DKMTZI < FORTE (>0) OU VERTICALE (<0)... FIX < FAIBLE : LA COORDONNEE 'Y' EST LA < VALEUR ENTIERE PAR DEFAUT DE LA VALEUR < FLOTTANTE 'DKMTY'. JMP DKMTZJ DKMTZI: EQU $ BSR VAR+DKMTA3 < FORTE : LA COORDONNEE 'Y' EST LA VALEUR < ENTIERE LA PLUS PROCHE DE LA VALEUR < FLOTTANTE 'DKMTY' AFIN D'EVITER DES < TROUS... DKMTZJ: EQU $ XEIF%1: VAL ENDIF LR A,Y < (Y)=COORDONNEE DU PREMIER POINT ENTIER. < (DIT "POINT CENTRAL") IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 < < GESTION BI-DIMENSIONNELLE : < IF FRCOTE-I-I,,XEIF%, IF FRCOTE-I-I-I-I,,XEIF%, IF ATTENTION : 'FRCOTE' NE PEUT VALOIR QUE 2 OU 4 !!! XEIF%: VAL ENDIF BSR VAR+DKMTA4 < TRACE DU POINT (X,Y) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X+1,Y) AVEC NIVEAU, ADRI I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X+1,Y+1) AVEC NIVEAU, ADRI -I,X BSR VAR+DKMTA4 < TRACE DU POINT (X,Y+1) AVEC NIVEAU, ADRI -I,X BSR VAR+DKMTA4 < TRACE DU POINT (X-1,Y+1) AVEC NIVEAU, ADRI -I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X-1,Y) AVEC NIVEAU, ADRI -I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X-1,Y-1) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X,Y-1) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X+1,Y-1) AVEC NIVEAU. IF FRCOTE-I-I-I-I,XEIF%,,XEIF%, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X+2,Y-1) AVEC NIVEAU, ADRI I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X+2,Y) AVEC NIVEAU, ADRI I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X+2,Y+1) AVEC NIVEAU, ADRI I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X+2,Y+2) AVEC NIVEAU, ADRI -I,X BSR VAR+DKMTA4 < TRACE DU POINT (X+1,Y+2) AVEC NIVEAU, ADRI -I,X BSR VAR+DKMTA4 < TRACE DU POINT (X,Y+2) AVEC NIVEAU, ADRI -I,X BSR VAR+DKMTA4 < TRACE DU POINT (X-1,Y+2) AVEC NIVEAU, ADRI -I,X BSR VAR+DKMTA4 < TRACE DU POINT (X-2,Y+2) AVEC NIVEAU, ADRI -I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X-2,Y+1) AVEC NIVEAU, ADRI -I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X-2,Y) AVEC NIVEAU, ADRI -I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X-2,Y-1) AVEC NIVEAU, ADRI -I,Y BSR VAR+DKMTA4 < TRACE DU POINT (X-2,Y-2) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X-1,Y-2) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X,Y-2) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X+1,Y-2) AVEC NIVEAU, ADRI I,X BSR VAR+DKMTA4 < TRACE DU POINT (X+2,Y-2) AVEC NIVEAU. ADRI I,Y ADRI -I,X XEIF%: VAL ENDIF ADRI I,Y < RETOUR AU ADRI -I,X < POINT CENTRAL... LAI NIVMAX STA VAR+DKNIVO < ON VA FORCER 'NIVMAX' < EN UN POINT ENTIER ADAPTE A 'DELTAX' < ET 'DELTAY'... < (CE POINT SERA LE PLUS PROCHE POSSIBLE < DU POINT "MAX" RENCONTRE...) LX VAR+DKNIVX < 'X' A PRIORI... LY VAR+DKNIVY < 'Y' A PRIORI... STX DKMTX1-DEPCS,C STY DKMTY1-DEPCS,C BSR VAR+DKMTA1 < ET ON RE-TRACE CE POINT... XEIF%1: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < GESTION MONO-DIMENSIONNELLE : < LAI NIVMAX STA VAR+DKNIVO STX DKMTX1-DEPCS,C STY DKMTY1-DEPCS,C STZ VAR+DKMRNA < AFIN DE TRACER LE POINT DANS 'DKMTA1'... BSR VAR+DKMTA1 < TRACE DU "POINT CENTRAL" (X,Y), AVEC < LE NIVEAU MAXIMAL 'NIVMAX'... < < DISCRIMINATION SUIVANT LA < PENTE DE LA DROITE : < FCMZ VAR+DKMTA < COMMENT EST LA DROITE ??? JE DKMTZO < HORIZONTALE, ON A DEJA : (FPENTE)=F05... CPZ VAR+APENTE < COMMENT EST LA DROITE ??? JL DKMTZO < VERTICALE, ON A DEJA : (FPENTE)=F05... JG DKMTZQ < LA DROITE A UNE FORTE PENTE SANS ETRE < VERTICALE... < < CAS DES DROITES DE FAIBLE < PENTE NON HORIZONTALE : < LR Y,A FLT FSB VAR+DKMTY FABS FST VAR+FPENTE < LA PENTE EST FAIBLE EN VALEUR ABSOLUE, < ET ALORS : < FPENTE=ABS(DKMTY-Y), C'EST-A-DIRE LA < MESURE EN VALEUR ABSOLUE SUR L'AXE < DES 'Y' DE LA DISTANCE DU POINT FLOTTANT < AU POINT ENTIER... < ATTENTION : L'AXE DES 'Y' EST DESCEN- < DANT, ET 'Y' ENTIER PAR DEFAUT EST AU- < DESSUS (SUR L'ECRAN) DU POINT FLOTTANT < 'DKMTY' ; C'EST DONC EN FAIT 1-FPENTE < QUE L'ON VIENT DE CALCULER, D'OU : < (X,Y+1) <-- NIVMAX*FPENTE, ET < (X,Y-1) <-- NIVMAX*(1-FPENTE) CI DESSOUS < ET NON PAS L'INVERSE... JMP DKMTZO < < CAS DES DROITES DE FORTE < PENTE NON VERTICALE : < DKMTZQ: EQU $ LR X,A FLT FSB VAR+DKMTX FABS FST VAR+FPENTE < A PRIORI, ON SUPPOSE QUE LA PENTE DE < DROITE VA ETRE FORTE EN VALEUR ABSOLUE, < ET ALORS : < FPENTE=ABS(DKMTX-X), C'EST-A-DIRE LA < MESURE EN VALEUR ABSOLUE SUR L'AXE < DES 'X' DE LA DISTANCE DU POINT FLOTTANT < AU POINT ENTIER... DKMTZO: EQU $ CPZ VAR+DKPOIN < EST-CE UN POINT ISOLE ??? JE DKMTZN < NON... < < CAS DES POINTS ISOLES : < ADRI I,Y BSR VAR+DKMTA4 < (X,Y+1) <-- NIVMAX/2, ADRI -I,X BSR VAR+DKMTA4 < (X-1,Y+1) <-- NIVMAX/2, ADRI -I,Y BSR VAR+DKMTA4 < (X-1,Y) <-- NIVMAX/2, ADRI -I,Y BSR VAR+DKMTA4 < (X-1,Y-1) <-- NIVMAX/2, ADRI I,X BSR VAR+DKMTA4 < (X,Y-1) <-- NIVMAX/2, ADRI I,X BSR VAR+DKMTA4 < (X+1,Y-1) <-- NIVMAX/2, ADRI I,Y BSR VAR+DKMTA4 < (X+1,Y) <-- NIVMAX/2, ADRI I,Y JMP DKMTZM < POUR : < (X+1,Y+1) <-- NIVMAX/2. AKMTZP: JMP DKMTZP < RELAI... < < DISCRIMINATION DES PENTES : < DKMTZN: EQU $ IF PENT45-K-I,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ VAR+APENTE < COMMENT EST LA PENTE DE LA DROITE ??? JNE DKMTZC < FORTE (>0), OU VERTICALE (<0)... < < CAS DES FAIBLES PENTES : < ADRI I,Y BSR VAR+DKMTA4 < (X,Y+1) <-- NIVMAX*FPENTE, ADRI -I-I,Y JMP DKMTZE < (X,Y-1) <-- NIVMAX*(1-FPENTE). < < CAS DES FORTES PENTES : < DKMTZC: EQU $ ADRI I,X BSR VAR+DKMTA4 < (X+1,Y) <-- NIVMAX*FPENTE, ADRI -I-I,X < POUR : < (X-1,Y) <-- NIVMAX*(1-FPENTE). < < TRACE DU DEUXIEME POINT : < (OU DU DERNIER POUR LES < "POINTS ISOLES") < DKMTZE: EQU $ LAI I < PAS DE PASSAGE D'UN POINT A L'AUTRE... FLT FSB VAR+FPENTE FST VAR+FPENTE < FPENTE=1-FPENTE... DKMTZM: EQU $ BSR VAR+DKMTA4 < ET MARQUAGE DU DEUXIEME POINT SUIVANT < LE CONTENU DES REGISTRES 'X' ET 'Y', ET < AVEC LE NIVEAU NIVMAX*(1-FPENTE)... XEIF%1: VAL ENDIF DKMTWC: EQU $ PLR X,Y JMP DKMTW8 < VERS LA SORTIE... < < CAS D'UN TRACE AVEC NIVEAU DE GRIS : < DKMTVD: EQU $ STA VAR+DKNIVO < ON MEMORISE LE NIVEAU DE GRIS DEMANDE ; < CETTE OPERATION EST D'AILLEURS SUREMENT < INUTILE, PUISQUE REALISEE AU DEBUT DE LA < PHASE D'INTERPOLATION, MAIS... < < TRACE SANS NIVEAU DE GRIS : < DKMTW9: EQU $ FLD VAR+DKMTX < X COURANT FLOTTANT. BSR VAR+DKMTA3 < QUE L'ON FIXE... STA DKMTX1-DEPCS,C < X COURANT EN FIXE. FLD VAR+DKMTY < Y COURANT FLOTTANT. BSR VAR+DKMTA3 < QUE L'ON FIXE... STA DKMTY1-DEPCS,C < Y COURANT EN FIXE. IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 STZ VAR+DKMRNA < AFIN DE TRACER LE POINT DANS 'DKMTA1'... XEIF%1: VAL ENDIF BSR VAR+DKMTA1 < TRACE POINT. DKMTW8: EQU $ STX DKMTX1-DEPCS,C < RESTAURATION 'DKMTX1'... STY DKMTY1-DEPCS,C < ... ET 'DKMTY1'. IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < GESTION DES POINTILLES, ET RETOUR : < LA VAR+MDKMPO DKMTZP: EQU $ < (A)=PATTERN COURANTE DES POINTILLES, SCLS BIT < ON LA FAIT TOURNER, STA VAR+MDKMPO < ET ON LA MEMORISE... XEIF%1: VAL ENDIF PLR A,B,X,Y RSR PAGE < < < A R R O N D I D ' U N N O M B R E F L O T T A N T : < < < ARGUMENT : < (A,B)=NOMBRE FLOTTANT. < < < RESULTAT : < (A)=NOMBRE FLOTTANT ARGUMENT CONVERTI EN < ENTIER PAR EXCES OU PAR DEFAUT SUIVANT < LES CAS... < < DKMTP3: EQU $ FCAZ < LE NOMBRE EST-IL POSITIF OU NEGATIF ??? JL DKMTWE < NEGATIF... FAD VAR+DKMT05 < POSITIF : ARRONDI PAR ADDITION DE 0.5... JMP DKMTWF < VERS LA CONVERSION ENTIERE... DKMTWE: EQU $ FSB VAR+DKMT05 < NEGATIF : ARRONDI PAR SOUSTRACTION... DKMTWF: EQU $ FIX < CONVERSION ENTIERE... RSR PAGE < < < T R A N S F E R T S I M U L T A N E D E S T R O I S < C O M P O S A N T E S E N E N T R E L A C A N T : < < < FONCTION : < CETTE FONCTION PERMET DE VISUALISER < GLOBALEMENT LES 3 COMPOSANTES, ET CECI < EN ENTRELACANT CES 3 DERNIERES ; A CETTE < FIN, ON ENVOIE UN MOT ROUGE, PUIS UN MOT < VERT, PUIS UN MOT BLEU, PUIS UN MOT ROUGE,... < ON NE PEUT QUE REGRETTER QUE CETTE < METHODE SOIT INAPPLIQUABLE LORS DES TRANSFERTS < RAPIDES ENTRE 'DKU' ET 'MEMTV'... < < DKUT50: EQU $ CPI -DKMTXY*NOCMO < LE 'CODEM' VALAIT-IL TVLIMA*LK* < NOCMO*NCOOL ??? JNE DKUT8A < NON, ERREUR... CPZR Y < OUI, Y-AVAIT-IL UN 'ASDEM' ??? JNE DKUT8A < OUI, ERREUR... CALL #SISP CMS5 BASE C# < C'EST-Y PAS MALHEUREUX MON BON < MONSIEUR D'EN ARRIVER LA... LA ETASYS < OUI, TBT TVEXIS < MAIS LA TELEVISION EST-ELLE ACTIVE ??? JNC DKUT53 < NON, ON SORT IMMEDIATEMENT... < < OK, TRANSFERT ENTRELACE DES 3 COMPOSNTES : < ADRI -DKMTC,W < AINSI, 'W' BASE L'IMAGE... CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE 'SLO' ET 'SLE'... LRM A,B,Y WORD MEMTV0 < (A)=VALEUR DU FUTUR 'SLO', WORD MEMTVE-Z < (B)=VALEUR DU FUTUR 'SLE', WORD TVLIMA*LK < (Y)=LONGUEUR D'UNE TRAME=CONSTANTE DE < PASSAGE D'UNE TRAME A L'AUTRE. BSR VAR+ATWOED < ON INITIALISE 'SLO' ET 'SLE' SUR LA < MEMOIRE DE VISUALISATION 'MEMTV'. LR Y,A SARD NBITMO < (A,B)=LONGUEUR D'UNE TRAME, DV VAR+DKMLBK < (A)=NOMBRE DE BLOCS MONOCHROMATIQUES < CONTENUS DANS UNE TRAME. CPZR B < ET LE RESTE ??? JE DKUT56 < ET BIEN, IL EST NUL... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VERIFIER SI 'DKMLBK' A ETE MODIFIE, < ET SI OUI, PAR QUI ??? < DKUT56: EQU $ LR A,X < (X)=NOMBRE DE BLOCS PAR TRAME=NOMBRE DE < XNCOOL-TRANSFERTS DE BLOCS... LR W,A < (A)=ADRESSE DE DEBUT DE L'IMAGE A < TRANSFERER=ADRESSE DE L'EMETTEUR, LBI TVAR0 < (B)=ADRESSE RELATIVE A 'MEMTV' DE LA < MEMOIRE DE VISUALISATION=ADRESSE DU < RECEPTEUR. < < BOUCLE DE TRANSFERT DES 'XNCOOL' COMPOSANTES : < DKUT54: EQU $ PSR A,B,X LXI XNCOOL < (X)=NOMBRE DE COMPOSANTES. < < BOUCLE DE TRANSFERT D'UN XNCOOL-BLOC : < DKUT55: EQU $ PSR X LX VAR+DKMLBK < (X)=LONGUEUR D'UN BLOCS=NOMBRE DE MOTS < A DEPLACER. MVTS < ENVOI D'UN BLOC EN 'MEMTV', ADR Y,A < PASSAGE AU BLOC EMETTEUR SUIVANT, ADR Y,B < PASSAGE AU BLOC RECEPTEUR SUIVANT, PLR X JDX DKUT55 < S'IL EXISTE... PLR A,B,X AD VAR+DKMLBK < PROGRESSION DES EMETTEURS, XR A,B AD VAR+DKMLBK < ET DES RECPTEURS, XR A,B JDX DKUT54 < S'IL EN EXISTE... < < FIN DU PROCESSUS : < < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# DKUT53: EQU $ PLR B,Y,C,W BR VAR+ADKM2 < VERS LA SORTIE... PAGE < < < T R A C E D U S E G M E N T ( ( X 1 , Y 1 ) , ( X 2 , Y 2 ) ) : < < < FONCTION : < CE MODULE EST CHARGE DE L'INTERPOLATION < GRAPHIQUE ENTRE 2 POINTS ARGUMENTS (X1,Y1) < ET (X2,Y2), SUIVANT LE MODE 'SBT'/'RBT' PRECISE < PAR L'ARGUMENT 'DKMTMO'. < ON TROUVERA DANS 'DCTDKU' LE FORMAT DES < ARGUMENTS TELS QUI SONT SITUES DEVANT < L'IMAGE RECEVANT LE SEGMENT. ON NOTERA < QUE LES COORDONNES ARGUMENT SONT DONNEES < EN FORMAT GRAPHIQUE, PUIS RENVOYEE SI < TOUT S'EST BIEN PASSE EN FORMAT 'TV' < AU DEMANDEUR... < ENFIN ON NOTERA LE MOT "INUTILE" APPELE < 'DKMTCO' ET DESTINE A EVITER DES PERTES < D'INFORMATIONS DUES AU FAIT QUE LE BLOC < FLOTTANT ECRIT DANS LE MOT D'ADRESSE (C)-'DEPCS'... < < DKMTV5: EQU $ < POINT D'ENTREE... < (A)=(CODEM)-TVLIMA*LK*NOCMO, < (Y)=MOT DE CONTROLE DE LA 'TV'... < < GESTION DES NIVEAUX : < IF NIVMAX-K,,,XEIF% IF 'NIVMAX' EST MAUVAIS !!! XEIF%: VAL ENDIF STZ VAR+DKNIVO < A PRIORI, DC VAR+DKNIVO < PAS DE NIVEAU DE GRIS... CPI DKMTXY*NOCMO < AVEC OU SANS ??? JE DKMTW4 < SANS... IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 LA VAR+FWORK < (A)=(CODEM), XEIF%1: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 LA VAR+DKPOIN < (A)=(CODEM), XEIF%1: VAL ENDIF CPI DKMTXY*NOCMO < EST-CE UN 'CODEM' REDUIT ??? JNE DKMTVK < NON... LA DKMTMO-DEPCS,C < OUI, ALORS EST-CE BIEN 'MEMTV' QUI ANDI DKMOBA < EST DEMANDEE ??? JAE DKUT8 < NON, ERREUR... JMP DKMTVL < OUI, ON CONTINUE... DKMTVK: EQU $ SB VAR+DKMLI3 < EST-CE UNE TRAME AVEC NIVEAU DE GRIS ??? JANE DKUT50 < NON, ALORS PEUT-ETRE TRANSFERT GLOBAL < EN MODE ENTRELACE... DKMTVL: EQU $ CPZR Y < OK, AVEC NIVEAU DE GRIS ; MAIS A-T'ON < DEMANDE UNE VISUALISATION ??? DKUT8A: JNE DKUT8 < OUI, ERREUR, ON NE PEUT PAS TOUT FAIRE... < (ET RELAI...) LA DKMTMO-DEPCS,C < (A)=MODE DEMANDE POUR LE TRACE : ANDI DKMNIV < ON EXTRAIT LE NIVEAU DE GRIS, XWOR%1: VAL DKMNIV=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 XEIF%: VAL ENDIF CPI ANTIAL < ET ON LE VALIDE... JG DKUT8 < TROP GRAND... JNE DKMTVE < IL S'AGIT D'UN NIVEAU DE GRIS IMPOSE... IF ANTIAL-NIVMAX-I,,XEIF%, IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!! XEIF%: VAL ENDIF LAI NIVMAX < IL S'AGIT D'UNE DEMANDE D'ANTI-ALIASING, < ON PREND LE MAX, AU CAS OU LE SEGMENT A < TRACER SERAIT HORIZONTAL OU VERTICAL... DKMTVE: EQU $ STA VAR+DKNIVO < INITIALISATION DE 'DKNIVO', AU CAS OU < L'ON TOMBERAIT SUR UNE HORIZONTALE OU < UNE VERTICALE... < < GESTION DES "TRANSPARENCES" : < LA DKMTCO-DEPCS,C STA VAR+DKTCO < TRANSMISSION DU CHAMP 'DKMLCO' EN < PARTICULIER... IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 < < GESTION DES POINTILLES : < IF DKMPOI-MOCD,,XEIF%, IF ATTENTION : VU LE 'SWBR', 'DKMPOI' DOIT ETRE IF UN OCTET !!! XEIF%: VAL ENDIF ANDI DKMPOI < RECUPERATION DE LA PATTERN DES POIN- < TILLES... XWOR%5: VAL DKMPOI=K IF XWOR%5-K,,XEIF%, SLRS XWOR%5 < ET CADRAGE SI NECESSAIRE... XEIF%: VAL ENDIF SWBR A,B < DUPLICATION DANS L'OCTET GAUCHE DE 'B', ORR B,A < ET MISE SUR 16 BITS DANS 'A' PAR < DUPLICATION DE 'DKMPOI'... STA VAR+MDKMPO < ET INITIALISATION AISNI DE LA PATTERN < CYCLIQUE DES POINTILLES... XEIF%1: VAL ENDIF < < GESTION DES DECALAGES : < LA DKMTMO-DEPCS,C ANDI DKMDEC SLRS DKMDEC=K < (A)=DECALAGE A APPLIQUER AU NIVEAU ANTE- < RIEUR DE CHAQUE POINT... STA VAR+DKDECA < OK, MEMORISATION DU DECALAGE... LA DKMTMO-DEPCS,C < (A)=MODE DEMANDE POUR LE TRACE : XWOR%5: VAL CODBT=FMASK(K?DKMSRI=FCINST)DKMSRI IF XWOR%5-L,,XEIF%, SLLS XWOR%5 < CADRAGE A GAUCHE... XEIF%: VAL ENDIF SARS DKMSRI=K < ON EXTRAIT LE MODE 'SBT', 'RBT' OU 'IBT', JMP DKMTVC < VERS SA MEMORISATION ; NOTONS QUE < TEST SUR 'Y' A DEJA ETE FAIT... DKMTW4: EQU $ LR Y,A < (Y)=A=MOT DE CONTROLE REDUIT DE 'TV'. ANDI TVIN < L'ENTREE EST-ELLE DEMANDEE ??? JANE DKUT8 < IL EST COMPLETEMENT IDIOT CELUI-LA !!! < < VALIDATION DU MODE DE TRACE : < LA DKMTMO-DEPCS,C < VALIDATION DU MODE DEMANDE... DKMTVC: EQU $ STA VAR+DKMTRS < MEMORISATION DU MODE DE TRACE DEMANDE ; < ON LE FAIT AVANT LA VALIDATION AFIN < D'INCLURE LA NOUVELLE LOGIQUE BINAIRE... RBT DKLODD < METTONS NOUS A PRIORI EN LOGIQUE FLOUE < (OU EN MODE 'SBT'/'RBT'/'IBT'), ET CECI < AFIN DE NE PAS INTRODUIRE DE NOUVELLES < FONCTIONS (AUTRES QUE 'DKMTSB', 'DKMTRB' < ET 'DKMTIB'), TBT DKLODF < ON DUPLIQUE LE BIT 'DKLOGF' SUR 'DKLOGD' < AFIN DE SE METTRE EN FLOU... JNC DKMTVM < CAS DE 'DKMTSB' OU 'DKMTRB'... SBT DKLODD < CAS DE 'DKMTIB'... DKMTVM: EQU $ CPI DKMTSB < ??? JE DKMTV7 < OK... CPI DKMTRB < ??? JE DKMTV7 < OK... CPI DKMTIB < ??? JNE DKUT8 < NON, SORTIE EN ERREUR... DKMTV7: EQU $ IF DKMTCO-K,,XEIF%, IF ATTENTION : IL FAUT QUE LE MOT RESERVE AU BLOC IF FLOTTANT SOIT EN TETE SINON !!! XEIF%: VAL ENDIF CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE (SLO,SLE), LRM A,B WORD MEMTV0 WORD MEMTVE-Z < NOTA : ON NE PREND PAS LA 'CDAI' ENTIERE < AFIN D'EVITER DES PROBLEMES AU CAS OU < L'ON AURAIT "!CDAI=J" ACTIVE... BSR VAR+ATWOED < ON SE PLACE SUR 'MEMTV' A PRIORI... < < REDUCTION DES COORDONNEES (PASSAGE < DE L'ECHELLE GRAPHIQUE A L'ECHELLE TV) : < < NOTA SUR LA "FRUSTRATION DES PIXELS" : < RAISONNONS A UNE DIMENSION, < SUR L'AXE DES 'X' PAR EXEMPLE : < IMAGINONS 3 POINTS 'A', 'M' ET < 'B' TELS QUE : < < X(A)='100, < X(M)='1FF, < X(B)='2FE, < ON A : < X(M)=(X(A)+X(B))/2, < ET : < X(M)-X(A)=X(B)-X(M)='FF, < LE POINT 'M' EST AU MILIEU DU < SEGMENT GRAPHIQUE 'AB' : < < AM=MB. < APPLIQUONS LA REDUCTION 'TV', < C'EST-A-DIRE DIVISONS LES COOR- < DONNEES PAR 4 : < < XT(A)='100/4='40, < XT(M)='1FF/4='7F, < XT(B)='2FE/4='BF, < ON A MAINTENANT : < XT(M)-XT(A)='3F, < XT(B)-XT(M)='40, < LE POINT 'M' EN FORMAT 'TV' N'EST < PLUS AU MILIEU DU SEGMENT 'AB' !!! < IL Y A AINSI FRUSTRATION DU < POINT 'M', ET SUIVANT LA METHODE DE < CORRECTION APPLIQUEE, 'M' SE RAP- < PROCHERA DE 'A' (CAS DES DIVISIONS < PAR DEFAUT CI-DESSUS), OU DE 'B' < (DIVISION PAR EXCES) ; ETENDU A < DEUX DIMENSIONS, ON VOIT QU'AINSI < LES PENTES DES VECTEURS RISQUENT < DE NE PAS ETRE CONSERVEE LORS DU < PASSAGE GRAPHIQUE-TV... < DE PLUS, UNE METHODE DE CORRECTION < "CONTEXTUELLE" (C'EST-A-DIRE TENANT < COMPTE DU SEGMENT ENTIER POUR CORRIGER < LES COORDONNEES INDIVIDUELLES DES < EXTREMITES) FAIT QU'UN MEME POINT < APPARTENANT A DEUX SEGMENTS DIFFERENTS < (VOIR PAR EXEMPLE LES SOMMETS D'UN < CARRE) RISQUE DE DONNER NAISSANCE A < DEUX POINTS DIFFERENTS EN 'TV'... < PSR W < SAUVEGARDE DE LA BASE 'W'... XWOR%1: VAL BIT>XXDEDX-E < POUR LES DIVISIONS PAR EXCES SUR 'X', XWOR%2: VAL BIT>XXDEDY-E < POUR LES DIVISIONS PAR EXCES SUR 'Y'. IF XWOR%1-XWOR%2,,XEIF%, IF ATTENTION : LA MISE DE L'INCREMENT DANS 'W' EST IF MAUVAISE, IL FAUT DEUX REGISTRES !!! XEIF%: VAL ENDIF LAI XWOR%1?XWOR%2(K < CONSTANTE DE GESTION DE LA FRUSTRATION : < =0 : LES PENTES NE VONT PAS ETRE RES- < PECTEES EN PASSANT DU GRAPHIQUE < A LA 'TV' BASSE-DEFINITION (DANS < CERTAINS CAS : LORSQUE LES COORDON- < NEES NE SONT PAS EXACTEMENT DIVISI- < BLES...), < #0 : UN MEME POINT GRAPHIQUE RISQUE DE < DONNER NAISSANCE A PLUSIEURS POINTS < 'TV' (LORSQUE LES COORDONNEES NE < SONT PAS EXACTEMENT DIVISIBLES...), < VOIR PAR EXEMPLE UN CARRE... LR A,W < (W)=CONSTANTE DE FRUSTRATION. LA DKMGX1-DEPCS,C < COORDONNEE X1 : CP DKMGX2-DEPCS,C JGE DKMTWP < (X1)>=(X2)... ADR W,A < (X1)<(X2)... DKMTWP: EQU $ SARS XXDEDX < CONVERSION EN MODE 'TV', LR A,X < ET STOCKAGE TEMPORAIRE : (X)=X1. LA DKMGY1-DEPCS,C < COORDONNEE Y1 : CP DKMGY2-DEPCS,C JGE DKMTWQ < (Y1)>=(Y2)... ADR W,A < (Y1)<(Y2)... DKMTWQ: EQU $ SARS XXDEDY < CONVERSION EN MODE 'TV', NGR A,A < EN EFFET LES AXES 'Y' DE 'TV' ET AD VAR+DKMTNL < DU GRAPHIQUE SONT INVERSES... LR A,Y < ET STOCKAGE TEMPORAIRE : (Y)=Y1. LA DKMGX2-DEPCS,C < COORDONNEE X2 : CP DKMGX1-DEPCS,C JGE DKMTWR < (X2)>=(X1)... ADR W,A < (X2)<(X1)... DKMTWR: EQU $ SARS XXDEDX < CONVERSION EN MODE 'TV, LR A,B < ET STOCKAGE TEMPORAIRE : (B)=X2. LA DKMGY2-DEPCS,C < COORDONNEE Y2 : CP DKMGY1-DEPCS,C JGE DKMTWS < (Y2)>=(Y1)... ADR W,A < (Y2)<(Y1)... DKMTWS: EQU $ SARS XXDEDY < CONVERSION EN MODE 'TV', NGR A,A < EN EFFET, LES AXES 'Y' DE 'TV' ET AD VAR+DKMTNL < DU GRAPHIQUE SONT INVERSES... < < ORDONNANCEMENT DES COORDONNEES TEL QUE (X1)<=(X2) : < (JE SUPPRIME LE CODE, CAR DE TOUTE EVIDENCE < CELA N'ARRANGE PAS LES CHOSES, MAIS JE LE < LAISSE EN COMMENTAIRES, CAR ON NE SAIT < JAMAIS...) < < CPR B,X < COMPARAISON DE (X1) ET (X2) : < JLE DKMTWG < OK, (X1)<=(X2)... < XR A,Y < SINON, ON PERMUTE < XR B,X < LES 2 POINTS... DKMTWG: EQU $ PLR W < RESTAURE LA BASE 'W' QUI POINTE LA < LISTE DES COORDONNEES... < A T T E N T I O N : LES COMMENTAIRES < QUI SUIVENT N'ONT PLUS DE VALEUR : STA DKMTY2-DEPCS,C < (A)=Y2 SI (X1)<=(X2), (A)=Y1 SINON, STB DKMTX2-DEPCS,C < (B)=X2 SI (X1)<=(X2), (B)=X1 SINON, STY DKMTY1-DEPCS,C < (Y)=Y1 SI (X1)<=(X2), (Y)=Y2 SINON, STX DKMTX1-DEPCS,C < (X)=X1 SI (X1)<=(X2), (X)=X2 SINON. < < CALCUL DELTAX ET DELTAY. < IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 STZ VAR+DKPOIN < A PRIORI, IL NE S'AGIT PAS D'UN POINT < ISOLE... XEIF%1: VAL ENDIF LA DKMTX2-DEPCS,C SB DKMTX1-DEPCS,C STA VAR+DKMTDX < DELTAX=X2-X1. FLT FST VAR+DKMTDF < DELTAX FLOTTANT. LA DKMTY2-DEPCS,C SB DKMTY1-DEPCS,C STA VAR+DKMTDY < DELTAY=Y2-Y1. JAE DKUT1 CPZ VAR+DKMTDX JNE DKUT2 < < ICI, DELTAX = 0 ET DELTAY # 0 : LIGNE VERTICALE. < IF DKMTY1-DKMTC-D,XEIF%,,XEIF% ADRI D,W < POUR FAIRE VARIER Y DANS LA BOUCLE. XEIF%: VAL ENDIF LX VAR+DKMTDY IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 LA &VAR+DKMINF < (A)=PENTE D'UNE DROITE VERTICALE... XEIF%1: VAL ENDIF DKUT3: EQU $ IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 FLT FST VAR+DKMTA < MISE EN PLACE DE LA PENTE DES DROITES < VERTICALES (INFINI) ET HORIZONTALE < (NULLE)... XEIF%1: VAL ENDIF LAI I < PAS DE VARIATION = 1 A PRIORI. CPZR X JGE DKUT32 NGR A,A < PAS DE VARIATION = -1. NGR X,X < COUNT POSITIF. DKUT32: EQU $ ADRI I,X < AFIN DE TRACER LE POINT EXTREME (X2,Y2). DKUT31: EQU $ PSR A < SAUVEGARDE DU PAS... LA DKMTX1-DEPCS,C FLT FST VAR+DKMTX < FLOTTAGE LA DKMTY1-DEPCS,C FLT FST VAR+DKMTY < DES COORDONNEES... PLR A < RESTAURATION DU PAS... BSR VAR+DKMTA2 < ET TRACE DU POINT COURANT (X1,Y1)... XM O,W AD O,W < INCREMENTATION/DECREMENTATION D'1... XM O,W JDX DKUT31 < POINT SUIVANT. JMP DKUT40 < C'EST FINI. DKUT8: JMP DKMTV8 < RELAI... < < ICI, DELTAY=0 : LIGNE HORIZONTALE (OU POINT < ISOLE SI DELTAX=0) : < DKUT1: EQU $ IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 CPZ VAR+DKMTDX < EST-CE UN POINT ISOLE ??? < (DELTAX)=(DELTAY)=0... JNE DKUT1A < NON (ON A DEJA : (DKPOIN)=0)... IC VAR+DKPOIN < OUI, ON LE MEMORISE... DKUT1A: EQU $ XEIF%1: VAL ENDIF IF DKMTX1-DKMTC-D,XEIF%,,XEIF% ADRI D,W < POUR FAIRE VARIER X DANS LA BOUCLE. XEIF%: VAL ENDIF LX VAR+DKMTDX IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 LAI K/W < (A)=PENTE D'UNE DROITE HORIZONTALE... XEIF%1: VAL ENDIF JMP DKUT3 < ET VOILA. DKUT2: EQU $ < < ICI, DELTAX # 0 ET DELTAY # 0, < IL FAUT DONC CALCULER L'EQUATION < DE LA DROITE : < FLD VAR+DKMTDF < (A,B)=DELTAX. FST VAR+DKMTA LA VAR+DKMTDY FLT FDV VAR+DKMTA FST VAR+DKMTA < (DKMTA)=(A,B)=DELTAY/DELTAX. LA DKMTX1-DEPCS,C FLT FMP VAR+DKMTA FST VAR+DKMTB LA DKMTY1-DEPCS,C FLT FSB VAR+DKMTB FST VAR+DKMTB < (DKMTB)=(A,B)=Y1-(DKMTA)*X1. < < TRACE DU SEGMENT A L'AIDE DE 'N' POINTS < TEL QUE N=MAX(ABS(DELTAX,DELTAY)) : < LA VAR+DKMTDX < (A)=DELTAX. JAGE DKUT11 NGR A,A < (A)=ABS(DELTAX). DKUT11: EQU $ LR A,Y LA VAR+DKMTDY JAGE DKUT12 NGR A,A DKUT12: EQU $ CPR Y,A JGE DKUT13 LR Y,A DKUT13: EQU $ LR A,X < (A)=(X)=MAX(DELTAX,DELTAY) EN < VALEUR ABSOLUE. FLT FST VAR+DKMTN < NOMBRE DE PAS EN FLOTTANT. LYI K < (Y)=NUMERO DE PAS (DE 0 A 'N'). DKUT5: EQU $ LR Y,A < NUMERO DU PAS COURANT. FLT FMP VAR+DKMTDF FDV VAR+DKMTN FST VAR+DKMTX < ((NUMERO DE PAS)*(DELTAX))/(NOMBRE PAS). LA DKMTX1-DEPCS,C FLT FAD VAR+DKMTX FST VAR+DKMTX < (DKMTX)=COORDONNEE 'X' COURANTE FLOTTANT, FMP VAR+DKMTA FAD VAR+DKMTB FST VAR+DKMTY < (DKMTY)=COORDONNEE 'Y' COURANTE FLOTTANT, < = A*X+B, SOIT : Y=A*X+B... BSR VAR+DKMTA2 < TRACE POINT DU POINT COURANT DE < COORDONNEES (DKMTX,DKMTY) FLOTTANTES. ADRI I,Y < INCREMENTATION DU PAS (Y), CPR X,Y < ET PASSAGE AU POINT SUIVANT, JLE DKUT5 < S'IL EXISTE... < < SORTIE NORMALE : < DKUT40: EQU $ < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# JMP DKMTV6 < VERS UN DISPLAY EVENTUEL DE L'IMAGE. < < SORTIES EN ERREUR : < DKMTV8: EQU $ LA VAR+DKTCO STA DKMTCO-DEPCS,C < RESTAURATION DE 'DKMTCO' QUI EST DETRUIT < PAR CE MALHEUREUX BLOC FLOTTANT !!! PLR B,Y,C,W < ON RESTAURE... JMP GRDKM3 < VERS LA SORTIE EN ERREUR DU HANDLER... PAGE < < < A C C E S U T I L I S A T E U R S A L A < T E L E V I S I O N N U M E R I Q U E : < < DKMTV1: EQU $ RDOE < LECTURE DE (SLO,SLE) COURANTS : LRM B WORD MEMTV0 < (B)=ADRESSE DE 'MEMTV', CPR A,B < LA DEMANDE COURANTE REFERENCE-T'ELLE < 'MEMTV' ??? JNE DKMTQ1 < NON, DONC PAS DE TESTS DE PROTECTION < PAR "!Q1"... LA NSPTYP TBT VBOX < LA DEMANDE COURANTE A-T'ELLE UNE 'BOX' ? JNC DKMTQ1 < NON, PAS DE TEST DE BLOCAGE... LA BOX < OUI : EOR VAR+LSDK < ON FAIT UN .EOR. ENTRE LA LISTE DES < APPROPRIATIONS PARTIELLES ('BOX') ET < LA LISTE DES APPROPRIATIONS GENERALES < ('LSDK') : TBT BLDKTV < ON TESTE LE DERNIER GROUPE DE CYLINDRES < QUI PROTEGE AUSSI L'ACCES A 'MEMTV' : JC GRDKM3 < ERREUR, L'ACCES EST INTERDIT POUR CE < DEMANDEUR : BOX=0 ET LSDK=1 (L'AUTRE < CONFIGURATION DE BITS (1 ET 0) ETANT < IMPOSSIBLE... DKMTQ1: EQU $ < PAS DE TEST NECESSAIRE, OU BIEN < (BOX)=LSDK : ACCES LIBRE (=0), OU BIEN < RESERVE A CE DEMANDEUR (=1)... LA ARGDEM+AMDEM SLRD NOCMO=NBITMO < (B)=ADRESSE MOT DE L'IMAGE. LA ARGDEM+ASDEM < INDICATEURS DE CONTROLE PRESUMES... ANDI TVIN?TVSIMU < NE CONSERVONS QUE LE NECESSAIRE : CP ARGDEM+ASDEM < Y-AVAIT'IL AUTRE CHOSE ??? JNE GRDKM3 < OUI, REFUSE... LR A,Y < (Y)=MOT DE CONTROLE DE LA 'TV'... LA ARGDEM+CODEM IF DIMALI-DIMAL2,XEIF%1,,XEIF%1 STA VAR+FWORK < SAUVEGARDE DU 'CODEM' A CAUSE DE 'W'... XEIF%1: VAL ENDIF IF DIMALI-DIMAL1,XEIF%1,,XEIF%1 STA VAR+DKPOIN < SAUVEGARDE DU 'CODEM' A CAUSE DE 'W'... XEIF%1: VAL ENDIF SB VAR+DKMLI1 < DISCRIMINATION DISPLAY/INTERPOLATION... JAE DKMTV2 < SEUL UN DISPLAY A ETE DEMANDE... < < < I N T E R P O L A T I O N : < < PSR B,Y,C,W < ET OUI, MEME 'C'... LR B,C < (C)=ADRESSE DE L'EN-TETE, LR B,W ADRI DKMTC,W < (W)=BASE DE LA LISTE DES SEGMENTS. LBI DEPCS < ATTENTION : DEPCS>127 !!! ADR B,C < AINSI, (C)-'DEPCS' POINTE SUR LE MOT < 'DKMTCO' RESERVE AUX EXTRAVAGANCES DU < BLOC FLOTTANT !!! < MAIS, A T T E N T I O N... DORENAVANT < 'DKMTCO' TRANSMET (PAR MANQUE DE PLACE) < LE CHAMP 'DKMLCO' !!! BR VAR+DKMTA5 < VERS L'INTERPOLATION... < (A)=(CODEM)-TVLIMA*LK*NOCMO, < (Y)=MOT DE CONTROLE DE LA 'TV'... < < RETOUR DE L'INTERPOLATION : < DKMTV6: EQU $ LA VAR+DKTCO STA DKMTCO-DEPCS,C < RESTAURATION DE 'DKMTCO' QUI EST DETRUIT < PAR LE BLOC FLOTTANT (ET FLUCTUAT NEC < MERGITUR... COMME ON DIT A LA SEMS...). PLR B,Y,C,W ADRI DKMTXY,B < (B)=ADRESSE MOT DE L'IMAGE... < < < D I S P L A Y : < < DKMTV2: EQU $ LR Y,A < (A)=MOT DE CONTROLE DE LA 'TV'... PSR W CALL #SISP CMS5 W ZERO# < (W)=BASE DE LA MEMOIRE DEBANALISEE. XM TVCTRL-ZERO,W < POSITIONNEMENT DU CONTROLE, XR A,B < PERMUTATION ET SAUVEGARDE... XM TVMEME-ZERO,W < AINSI QUE DE L'ADRESSE DE L'IMAGE... SVC SVCM3 < ET ON VISUALISE... XM TVMEME-ZERO,W < PUIS ON RESTAURE CE XR A,B XM TVCTRL-ZERO,W < L'ON A DETRUIT... PLR W < PUIS L'ADRESSE DE LA DEMANDE COURANTE. STZ ETAT0 < RETOUR OK, POUR LA TV... JMP DKM3RR < ET C'EST FINI... PAGE < < < S I M U L A T I O N ' D K U ' S U R ' D K M ' : < < < NOTA : < LORSQUE 'DKU' EST SIMULE SUR 'DKM', < 'DKU' TRANSMET SES DEMANDES A 'DKM', < EN VERIFIANT AU PREALABLE, AVEC UNE < MARGE DE SECURITE, QUE L'ECHANGE < DEMANDE PORTE SUR DES 'QUANTA'-SECTEURS < APPARTENANT A DES 'GB' INACCESSIBLES < A L'ALLOCATION DISQUE (BIT0 DE 'NSLGB' < A 1). < < DKU1: EQU $ LA ARGDEM+OPDEM TBT XBITQ < L'ECHANGE DEMANDE CONCERNE-T'IL < DES SECTEURS OU DES Q-SECTEURS ??? LA ARGDEM+ASDEM < A PRIORI DES Q-SECTEURS, ET ALORS, < (A)=ADRESSE DU PREMIER Q-SECTEUR... JNC DKU2 < OUI, DES Q-SECTEURS... SLRD NBITMO < NON, DES SECTEURS, DANS CES CONDI- DV VAR+DKMQUA < ON CONVERTIT EN Q-SECTEURS. DKU2: EQU $ LR A,Y < (A)=(Y)=NUMERO DU Q-SECTEUR CONTENANT < LE PREMIER OCTET ECHANGE. SLRS DECON < DECONCATENATION (VOIR 'HDLREL'), ADRI IJIJDX,A < ET CONVERSION EN NUMERO DE 'GB' : LR A,X < (X)=NUMERO DU 'GB' CONTENANT LE PREMIER < OCTET DE L'ECHANGE. LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS ECHANGES, AD VAR+DKMLS < ET MAJORATION LARGE... SLRD NBITMO DV VAR+DKMLS < (A)=NOMBRE DE Q-SECTEURS MAJORE NECES- < SAIRES POUR CONTENIR LES OCTETS < ECHANGES. ADR Y,A < (A)=NUMERO DU Q-SECTEUR MAJORE CONTE- < NANT LE DENIER OCTET DE L'ECHANGE. SLRS DECON < DECONCATENATION, ADRI IJIJDX,A < ET CONVERSION EN UN NUMERO DE 'GB' : < (A)=NUMERO MAJORE DU 'GB' CONTENANT < LE DERNIER OCTET DE L'ECHANGE. LR A,Y < (Y)=NUMERO DU 'GB' CONTENANT LE DERNIER < OCTET ECHANGE, OU BIEN SUIVANT... LRM A WORD COSBT?XXINGB=FMASK(K?NBSPGB=FCINST < (A)=ETAT D'UN 'GB' INACCESSIBLE A L'ALLO- < CATION DISQUE (BITSIG) ET N'ETANT PAS < UTILISE ('NBSPGB' Q-SECTEURS LIBRES) < CET ETAT EST DONNE PAR 'ANSLGB'. CP &ANSLGB < LE PREMIER 'GB' (X) EST-IL UTILISABLE < POUR LA SIMULATION DE 'DKU' ??? JNE DKU3 < NON, ERREUR, MAUVAIS !!! XR X,Y CP &ANSLGB < LE DERNIER 'GB' (Y <--> X) L'EST-IL ??? JE DKU4 < OUI, C'EST BON, LES OCTETS A ECHANGER < SONT SUR DES 'GB' LIBRES ET NON < ALLOUABLES. DKU3: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < L'ECHANGE PORTE ENTIEREMENT OU < PARTIELLEMENT SUR DES Q-SECTEURS < ALLOUABLES !!! < < QUE FAIRE ??? < VERIFIER LES TABLES D'ALLOCATION DISQUE... < JMP GRDKM3 < PUIS, ON SORT EN ERREUR, EN EFFET, < IL PEUT AUSSI S'AGIR D'UNE ERREUR < D'UTILISATION !!! < < TRANSMISSION DE LA DEMANDE 'DKU' VERS 'DKM' : < DKU4: EQU $ LA NSPTYP ANDI MKTD < (A)=INDICATEURS A TRANSMETTRE D'UNE LR A,Y < DEMANDE A L'AUTRE, ET MISE DANS 'Y'. LAD ARGDEM+OPDEM < (A)=ADRESSE EMETTRICE... PSR W < SAUVEGARDE DE L'ADRESSE DE LA < DEMANDE A 'DKU'. LRM B,X,W WORD DEMUN+T < (B)=ADRESSE RECEPTRICE, WORD ASDEM-OPDEM+Z < (X)=NOMBRE DE MOTS A DUPLIQUER, WORD DEMUN < (W)=ADRESSE DE LA DEMANDE A 'DKM'. MOVE < DUPLICATION DES ARGUMENTS A 'DKU' < DANS LA DEMANDE A 'DKM'. STY NSPTYP < TRANSMISSION DES INDICATEURS, LAI NSPDKM < ET MISE EN PLACE DU 'NSP' STBY NSPTYP < DE 'DKM'... BSR ACHAND < ENVOI DE LA DEMANDE A 'DKM', BSR ACHANW < ET ATTENTE DE FIN D'ECHANGE... LA ARGDEM+ETADEM < TRANSMISSION DES STA ETAT0 < CONDITIONS DE RETOUR... PLR W < RESTAURE (W)=ADRESSE DE LA < DEMANDE A 'DKU'. JMP DKM3RR < ET ON SORT NORMALEMENT... PAGE < < < E N T R Y ' D K U ' : < < HDLDKU: EQU $ TBT TYPAD < ADRESSE MOT OU OCTET ??? JC DKM11X < MOT, PAS DE VERIFICATIONS... LA ARGDEM+AMDEM < OCTET : DOIT ETRE A UNE FRONTIERE PAIRE. TBT NBITMO-B < PAIRE ??? JC GRDKM3 < ERREUR, ADRESSE IMPAIRE... DKM11X: EQU $ LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE, CPI FONTV < EST-CE LA TELEVISION NUMERIQUE ??? JE DKMTV1 < OUI, QUEL TRUANDAGE QUAND MEME ?!?!?? LA ARGDEM+CODEM < VALIDATION DU 'CODEM'. JALE GRDKM3 < ERREUR... ADRI NOCMO-E,A < ARRONDI PAR EXCES, SLRS NOCMO=K < ET CONVERSION EN MOTS... CP VAR+NMMDKM < TROP ??? JG GRDKM3 < OUI, ERREUR... LA ETASYS < ACCES AUX INDICATEURS DE CONTROLE < DU SYSTEME, TBT NSPDKU-NSPDK < 'DKU' EST-IL PRESENT ??? JNC DKU1 < NON, ON VA LE SIMULER SUR 'DKM'... < < LORSQUE 'DKU' EST LA, FAUT-IL LE < SYNCHRONISER SUR LE SECTEUR 0 ??? < LBI CORBT?CCBDKM=FMASK(K=FCINST LA ARGDEM+OPDEM XWOR%1: VAL FGR?FGW=K TBT NBITMO-B-XWOR%1 < LECTURE OU ECRITURE ??? JNC DKUS2 < LECTURE, PAS DE SYNCHRONISATION SUR < LE SECTEUR 0... LA MEMV < ECRTURE, QUEL EST L'ETAT DE 'MEMV' ??? TBT XSYNC0 < ALORS ??? JC DKUS1 < XSYNC0=1 : OUI, SYNCHRONISATION SUR 0... DKUS2: EQU $ < CAS DES LECTURES... SBT NBITMO+CCBDKM < XSYNC0=0 : NON... DKUS1: EQU $ STB VAR+DSYNC0 < INDICATEUR, ET GENERATEUR DU 'CCB'. LRM A WORD DKUTT1 PSR A < AFIN DE SIMULER UN 'BR' VERS 'DKUTT1', < POUR ECONOMISER UN MOT DANS 'DCTDKU'... RSR < ALLONS TESTER LE MODE DE TRANSFERT < RAPIDE 'DKU' --> 'MEMTV' (EN 'DKUTT1'). GRDKM3: BR VAR+ADKM3 < RELAI DE RELAI... DKM3RR: JMP DKM3R1 < RELAI DE RELAI... PAGE < < < E N T R Y ' D K M ' : < < HDLDKM: EQU $ < < VALIDATION DE LA DEMANDE : < TBT TYPAD < ADRESSE MOT OU OCTET ??? JC DKM11 < MOT, PAS DE VERIFICATION... LA ARGDEM+AMDEM < (A)=ADRESSE-OCTET DU BUFFER, TBT NBITMO-B < EST-ELLE BIEN A UNE FRONTIERE DE MOT ??? JNC DKM11 BSR ASYSER DKM11: EQU $ LA ARGDEM+ETADEM < (A)=NSP(DEMANDEUR). LXI LLDKMN < (X)=NOMBRE DE 'NSP' AUTORISES, DKM11Y: EQU $ CP &VAR+ALDKMN < LE 'NSP' EST-IL AUTORISE ??? JE DKM60 < OUI, ON Y VA... JDX DKM11Y < PEUT-ETRE... ZDKM: EQU $ < ADRESSE DE LA SYSER SUR DEMANDEUR < DE 'DKM' NON RECONNU. BSR ASYSER < NI L'UN, NI L'AUTRE : A NOTER QUE < CELA N'EST PAS FORCEMENT UNE ERREUR < SYSTEME : CF. LES DUMPS DISQUES < PAR EXEMPLE... DKM60: EQU $ LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS DU BUFFER, ADRI NOCMO-E,A < QUE L'ON ARRONDIT EVENTUELLEMENT AU MOT < SUPERIEUR, SLRS NOCMO=K CP VAR+NMMDKM < ET VALIDATION ??? JG HRDKM3 < ERREUR : ECHANGE TROP GRAND... LA ARGDEM+ASDEM < (A)=ADRESSE DU PREMIER SECTEUR, CP INFINI < LE SECTEUR 'INFINI' EST IMPOSSIBLE < A ATTEINDRE CAR EN EFFET, UN CHAINAGE DU < TYPE 'INFINI' EST UNE MARQUE DE FIN DE < CHAINE ; IL FAUT DONC QUE CELUI-CI SOIT < INALLOUABLE, CE QUE L'ON VERIFIE ICI... JNE DKM1 < OK, SECTEUR AUTORISE PAR L'ALLOCATION... BSR ASYSER < C'EST PEUT-ETRE UNE ERREUR SYSTEME, < OU PEUT-ETRE PAS (VOIR PAR EXEMPLE DES < PROGRAMMES DE COPIE DE DISQUE... DANS < CES CONDITIONS, APRES AVOIR SIGNALE < L'ANOMALIE, ON CONTINUE... DKM1: EQU $ XWOR%1: VAL DKMINX=K XWOR%1: VAL -XWOR%1 SLRS -XWOR%1 CPI DKMINX>XWOR%1 < EST-CE UN SECTEUR INEXISTANT ??? JNE DKM1XX < NON, ON VA FAIRE UNE ENTREE-SORTIE... BR VAR+ADKMGS < OUI, VERS L'INITIALISATION... DKM1XX: EQU $ < < 'DKF' EST-IL PRESENT ??? < LA ETASYS TBT NSPDKF-NSPDK < 'DKF' EST-IL LA ??? JC DKM50 < OUI... LA ARGDEM+ETADEM < NON, ALORS QUI EST LE DEMANDEUR ??? CPI NSPDKF < EST-CE JUSTEMENT 'DKF' ??? JE DKM52 < OUI, ON VA SIMULER... LA ARGDEM+ASDEM < NON, MAIS LE DEBUT DU 'DKM' ETANT < RESERVE A LA SIMULATION, IL FAUT < VALIDER 'ASDEM' ; ON PEUT RENCONTRER < CE CAS EN REPARTANT D'UNE ANCIENNE < VERSION DKF+DKM EN NE DEMANDANT QUE < DKM !!! SLRS S < PARCE QU'ELLE PEUVENT ETRE NEGATIVES... CP VAR+VALFM < VIOLATION ??? JGE SYSRB9 < NON, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < PEUT-ETRE UNE SORTIE EN ERREUR 'JMP ERDKM3'... < SYSRB9: EQU $ JMP DKM50 < VERS L'ACCES AU DISQUE... DKM3R1: JMP DKM3R < RELAI... PAGE < < < S I M U L A T I O N ' D K F ' S U R ' D K M ' : < < DKM52: EQU $ < < PRISE EN COMPTE DES TRANSLATIONS < D'ADRESSES EN Q=1 : < PSR X LAI TRDKU0 < (A)=TRANSLATION NULLE A PRIORI... LB NSPTYP TBT NBITMO+VBOX < Y-A-T'IL UNE 'BOX' DANS LA DEMANDE < COURANTE ??? JNC DKM52M < NON (C'EST EN GENERAL LE CAS DE 'DKM')... LXI K < OUI, (X) VA INDEXER LA LISTE ASSOCIATIVE < DES (APPROPRIATIONS,TRANSLATIONS) : LA BOX < (A)=LISTE D'APPROPRIATION DES GROUPES < DE CYLINDRES DU DEMANDEUR COURANT, IF TRDKU0-K,,XEIF%, IF ATTENTION : LE 'JAE' SUIVANT (QUI FINALEMENT IF CONFOND UNE LISTE D'APPROPRIATION 'BOX', ET IF UNE TRANSLATION RENVOYEE DANS 'A') VA MERDER !!! XEIF%: VAL ENDIF JAE DKM52M < PAS DE LISTE D'APPROPRIATIONS, PAS DE < TRANSLATION, NAHHHH... DKM52N: EQU $ CP &VAR+ATASQ < RECHERCHE DE LA LISTE COURANTE 'BOX' < DANS LA LISTE 'TASQ'... JE DKM52O < TROUVEE... ADRI ITASQ,X < NON, A L'ENTREE SUIVANTE, XR A,X < SI ELLE EXISTE : CPI LTASQ < ??? XR A,X JL DKM52N < OUI... DKM52P: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT IL SE PEUT < QUE LA LISTE D'APPROPRIATION < COURANTE 'BOX' NE SOIT PAS DANS < LA LISTE 'ATASQ' DU DISQUE COURANT !!! < OU COMMENT LA TRANSLATION PEUT < ETRE DIFFERENTE DES 'TRDKU' PREVUS !!! < LAI TRDKU0 < ET ON FORCE UNE TRANSLATION NULLE... JMP DKM52M DKM52O: EQU $ ADRI ITASQT,X < LORSQU'ON A TROUVE LA LISTE D'APPROPRIA- < TION DU DEMANDEUR, LE MOT SUIVANT DE < L'ENTREE COURANTE DONNE LA TRANSLATION, LA &VAR+ATASQ < (A)=TRANSLATION EN Q=1... JAL DKM52P < E R R E U R S Y S T E M E... CPI TRDKUM < VALIDATION... JG DKM52P < E R R E U R S Y S T E M E... DKM52M: EQU $ PLR X < < CALCUL D'UN NUMERO DE SECTEUR : < LB ARGDEM+ASDEM < ADRESSE SECTEUR DEMANDEE. DV VAR+NBSRPP < DANS LE CAS DE LA SIMULATION, ON < FAIT COMME SI 'QUANTA'=1... JNV SYSRBA < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VERIFIER LA 'DCT'... < SYSRBA: EQU $ STB VAR+SECT < (B)=NUMERO DE SECTEUR. LR A,B JMP DKM51 < VERS LA SUITE DES CALCULS... PAGE < < < A C C E S R E E L A U ' D K M ' : < < DKM50: EQU $ LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE, TBT XBITQ < QUELLE VALEUR DONNER A 'QUANTA' ??? JC DKM52 < 1... LAI K < 3... LB ARGDEM+ASDEM < (A,B)=ADRESSE DU PREMIER SECTEUR. < < < A T T E N T I O N : < LA RELATION 1 QUANTUM="QUANTA" SECTEURS < EST PRISE EN COMPTE DANS LA VALEUR DE < 'NBSPP'. < < DV VAR+NBSPP < CONVERSION EN UN COUPLE (PISTE,SECTEUR). JNV SYSRBB BSR ASYSER < < QUE FAIRE ??? < VERIFIER LA 'DCT'... < SYSRBB: EQU $ STB VAR+SECT < (B)=NUMERO DE SECTEUR/QUANTA. ADR B,B < (B)=2*NUMERO DE SECTEUR/QUANTA. XR A,B AD VAR+SECT < (B)=3*NUMERO DE SECTEUR/QUANTA, ATTENTION STA VAR+SECT < ON SUPPOSE QUE : QUANTA=3 !!!! IF QUANTA-3,,XEIF%, IF A T T E N T I O N : LA PROGRAMMATION PRECENTE, IF SUPPOSANT : QUANTA=3 EST MAUVAISE !!! XEIF%: VAL ENDIF DKM51: EQU $ CPZ VAR+SECT < L'ECHANGE DEMANDE DEBUTE-T'IL SUR UNE < FRONTIERE DE PISTE ??? JE DKM51P < OUI, AUCUN PROBLEME... LA VAR+DSYNC0 < NON, ALORS : TBT CCBDKM < TESTONS LA NULLITE DU BIT 'CCBDKM' < DU MOT 'DSYNC0' CE QUI EQUIVAUT A TESTER < SIMULTANEMENT LES 3 CONDITIONS SUIVANTES: < 1 - EST-ON SUR 'DKU', ET < 2 - EST-CE UNE ECRITURE, ET < 3 - Y-A-T'IL SYNCHRONISATION SUR LE SEC- < TEUR 0 DE CHAQUE PISTE ??? JNC FRDKM3 < OUI, CES 3 CONDITIONS SONT VERIFIEES, < OR CETTE ECRITURE NE PORTE PAS SUR UNE < FRONTIERE DE PISTE, L'ECHANGE NE PEUT < DONC AVOIR LIEU SOUS PEINE D'ECRITURES < ABERRANTES !!! DKM51P: EQU $ LAI K DV VAR+NBPPC < CONVERSION EN UN COUPLE (CYLINDRE,PISTE). JNV SYSRBC BSR ASYSER < < QUE FAIRE ??? < VERIFIER LA 'DCT'... < SYSRBC: EQU $ STB VAR+PIST < (B)=NUMERO DE PISTE, STA VAR+CYL < (A)=NUMERO DE CYLINDRE. < < VALIDATION DU CYLINDRE DEMANDE : < (APRES L'EXCLUSION, CAR EN EFFET, < JUSTE AVANT DE SORTIR ON LIBERE < LE SEMAPHORE...) < CPI MINCYL JL FRDKM3 < INFERIEUR, ERREUR... CP VAR+MAXCYL HRDKM3: JG FRDKM3 < SUPERIEUR, ERREUR... < (ET RELAI !!!) < < ALLOCATION D'UN JEU DE REGISTRES 'HDC' : < PSR X LAD VAR+CCDKM SVC SVCM4 < ALLOCATION D'UN CONTEXTE 'HDC'... PLR X IC VAR+XRHDCM < MEMORISONS QUE L'ON POSSEDE UN JEU... < < CONSTRUCTION PARTIELLE DU 'CCB' : < LA NSPTYP TBT TYPAD < ADRESSE DE MOT OU D'OCTET ??? LA ARGDEM+AMDEM < (A)=ADRESSE ARGUMENT. JC DKM12 < CAS DES ADRESSES DE MOT. SLRS NOCMO=K < CAS DES ADRESSES D'OCTET. DKM12: EQU $ STA VAR+CCDKN2 < (MOT2)=ADRESSE-MOT DU BUFFER. LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS DU BUFFER, ADRI NOCMO-E,A < ET ARRONDI A L'EVENTUEL MOT SUPERIEUR, SLRS NOCMO=K < PUIS CONVERSION EN UN NOMBRE DE MOTS, LR A,Y < (Y)=COMPTE DE MOTS DE L'ECHANGE. LB VAR+INIDKM LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : XWOR%1: VAL FGR?FGW=K < DISCRIMINATION LECTURE/ECRITURE... TBT NBITMO-B-XWOR%1 < EST-CE UNE LECTURE OU UNE ECRITURE ??? ADCR B < ET MEMORISATION... STB VAR+CCDKM4 < (MOT4)=OPERANDE DE LA 'SIO' D'ECHANGE. < < < I T E R A T I O N D E S E C H A N G E S A C H E V A L < S U R D E S F I N S D E C Y L I N D R E : < DKM4: EQU $ < < TEST DE PROTECTION DES GROUPES < DE CYLINDRES (INFORMATION < AMENEE PAR L'EVENTUELLE 'BOX' < DE LA DEMANDE COURANTE) : < LBI NCYLP ANCYLP:: VAL SUIDKM < A T T E N T I O N : ETANT DONNE QUE LA < ZONE LOCALE DE 'DKU' EST PLEINE, ON EST < OBLIGE DE METTRE EN RECOUVREMENT LES < MOTS 'SUIDKM' ET 'ANCYLP' !!! STB VAR+ANCYLP < INITIALISATION DE 'ANCYLP' ; NE PAS < QUE 'ANCYLP' RECOUVRE 'SUIDKM' !!! LA VAR+CYL < (A)=NUMERO DE CYLINDRE... SARD NBITMO DV VAR+ANCYLP LR A,X < (X)=NUMERO DU GROUPE DE CYLINDRES AUQUEL < APPARTIENT L'ECHANGE COURANT... LA VAR+LSDK < (A)=LISTE D'APPROPRIATION GENERALE : TBT L,X < LE GROUPE (X) EST-IL APPROPRIE ??? JNC DKM12Y < NON, DONC PAS DE PROBLEMES... LA NSPTYP < OUI, DONC REGARDONS SI LA DEMANDE COU- < RANTE TRANSMET UNE LISTE 'LUDKU' ??? TBT VBOX < (DANS LA 'BOX') ALORS ??? JNC DKM12Y < NON, RIEN A FAIRE... LA BOX < OUI : (A)=LISTE D'APPROPRIATION DU DEMAN- < DEUR (QUI EST DONC UN UTILISATEUR)... TBT L,X < ALORS ??? JNC FRDKM3 < LE DEMANDEUR N'EST PAS PROPRIATAIRE DU < GROUPE DE CYLINDRES DEMANDES, ERREUR... DKM12Y: EQU $ < OK... < < PREVENTION PARTIELLE < DES MEMOIRES INEXISTANTES : < BSR VAR+ASPDKM < DETECTION DES MEMOIRES INEXISANTES... < < INITIALISATION DE LA GESTION < DES FINS DE CYLINDRE : < STZ VAR+SUIDKM < PAS DE SUITE A PRIORI... < < ECHANGE PROPREMENT DIT : < (RAPPELONS QUE L'ECHANGE PEUT SE FAIRE EN PLUSIEURS FOIS < SI LES SECTEURS A ECHANGER SONT A CHEVAL SUR PLUSIEURS < CYLINDRE (EN FAIT 2 MAXIMUM PUISQUE LE COMPTE DE MOTS < MAXIMUM EST '3FFF, ET QU'IL Y A 'F000 MOTS PAR CYLINDRE)) < XXDK10:: VAL 1 < NOMBRE DE PUISSANCE DE 2 (A PARTIR DE < DE 2**0) IGNOREES DANS L'ADRESSE TETE < LORS DE LA SELECTION D'UNITE. XXDK12:: VAL 3 < NOMBRE DE PUISSANCE DE 2 (A PARTIR DE < CELLES QUI SONT IGNOREES) PRISES EN < COMPTE LORS DE LA SELECTION D'UNITE. XWOR%1: VAL BIT>XXDK12-BIT>XXDK10)MMOT XXDK20:: VAL XWOR%1 < MASQUE DE SELECTION DES PUISSANCES UTILES XXDK11:: VAL 7 < CADRAGE DES PUISSANCE UTILES LORS < DE LA SELECTION D'UNITE. XXDK13:: VAL 1 < NUMERO DE 'DKM' ET 'DKU' SUR LEURS < COUPLEURS RESPECTIFS (PREMIERE UNITE). XXDK14:: VAL 6 < POSITIONNEMENT DU NUMERO DE CYLINDRE < LORS DU POSITIONNEMENT DES TETES. XXDK15:: VAL XXDK14-XXDK10 < POSITION DES PUISSANCES LES PLUS FAIBLES < LORS DU POSITIONNEMENT DES TETES. XXDK30:: VAL MOMINI?MOMFBK?MOMSTR < 'UNIT SELECT SANS IT ET CHECKSUM'. XXDK31:: VAL MOMINI?MOMFBK?MOMINT < 'SEEK AVEC IT VALIDEES'. XXDK32:: VAL MOM8?MOM10?MOMSTR?MOMINT < 'ECHANGE AVEC CHECKSUM'. XXDK33:: VAL MOMRW?MOMSTR?MOMINT < 'BEGIN WRITE'. LA VAR+PIST < (A)=NUMERO DE PISTE, IF XXDK10-1,,XEIF%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF RBT NBITMO-XXDK10 SLLS NBITMO-XXDK12-XXDK10 SLRS NBITMO-XXDK12-XXDK10-XXDK11 < TETE (BITS DE POIDS 1,2,3). SBT XXDK13 < MISE EN PLACE DU NUMERO DE L'UNITE DE < DISQUE SUR CE COUPLEUR (EN FAIT, ICI, < UN 'DRIVE' PAR COUPLEUR...), SIO VAR+ASDKM < ET ENVOI DE LA FONCTION 'SORTIE ADRESSE'. LXI -XXDK6T BSR ADODO < AFIN D'EVITER DES PERTES ALEATOIRES < DU READY, ON ESPACE LES 'SIO' !!! LAI XXDK30 SIO VAR+CDDKM < ENVOI DE LA FONCTION 'UNIT SELECT', < SANS INTERRUPTION ET AVEC CHECKSUM. LXI -XXDK6T BSR ADODO < AFIN D'EVITER DES PERTES ALEATOIRES < DU READY, ON ESPACE LES 'SIO' !!! DKM4X: EQU $ SIO VAR+EADKM < (A)=MOT D'ETAT 'A' : TBT ETADEF < Y-A-T'IL UN DEFAUT ??? JC DKM4XX < OUI, ON VA FAIRE UN RESET... TBT ETAOPE < NON, LE DISQUE EST-IL PRET ??? JC DKM41 < OUI, ON PEUT FAIRE L'ECHANGE... DKM4XX: EQU $ < NON,EXECUTION D'UN RESET SUR LE DISQUE... LAI MOMINI?MOMINT SIO VAR+CDDKM < RETOUR DU BRAS SUR LE CYLINDRE 0 ; ON < ESPERE AINSI, PAR EXEMPLE CHASSER LES < PETITES POUSSIERES AVEC UN COURANT < D'AIR (AVEC CHECKSUM)... BSR ACSWIT < ET ATTENTE DE L'INTERRUPTION DE FIN < D'OPERATION... JMP DKM4X < PUIS, ON RETESTE L'ETAT... DKM3R: JMP DKM3 < RELAI... FRDKM3: JMP ERDKM3 < RELAI... DKM4R: JMP DKM4 < RELAI (ET OUI, ENCORE UN !!!)... < < CAS OU LE DISQUE EST PRET : < DKM41: EQU $ LBI K LA VAR+CYL < (A)=NUMERO DE CYLINDRE, XWOR%1: VAL CAXCYL=K IF BIT>XWOR%1-CAXCYL,,XEIF%, IF ATTENTION : 'CAXCYL' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF SLRD XWOR%1 < DECONCATENATION : LR A,X < (X)=NUMERO DU GROUPE VIRTUEL, LBY &VAR+ATVDKM < (A)=NUMERO DU GROUPE REEL. CPI MINCYL < ET VALIDATION : JL DKM41X < BERK ?!??!?! CP VAR+MAXCYL < ET VALIDATION : JLE DKM41Y < OK... DKM41X: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REGARDER LES TABLES DE VIRTUALISATION... < LR X,A < ET ON RESTAURE : < (A)=NUMERO DE GROUPE VIRTUEL. DKM41Y: EQU $ SLLD XWOR%1 < ET ON RECONCATENE... SLLS XXDK14 LR A,X LA VAR+PIST < (A)=NUMERO DE PISTE, ANDI XXDK20 < SELECTION DES BITS DE POIDS 0 ET 4 DE < L'ADRESSE DE LA TETE. SLRD XXDK10 SLLS NBITMO-XXDK12-XXDK10-XXDK15-XXDK10 SLLD XXDK15+XXDK10 ORR X,A SIO VAR+ASDKM < ENVOI DE LA FONCTION 'SORTIE ADRESSE < SECTEUR'... AD VAR+SECT < (A)='HEADER 1' DU PREMIER SECTEUR A < ECHANGER, STA VAR+CCDKM5 < (MOT5)='HEADER 1' DU PREMIER SECTEUR. LAI XXDK31 SIO VAR+CDDKM < ENVOI DE LA FONCTION 'SEEK', AVEC LES < INTERRUPTIONS VALIDEES ET LE CHECKSUM. BSR ACSWIT < ET ATTENTE DE L'INTERRUPTION DE FIN... BSR ATHDS < Y-A-T'IL EU UN DEFAUT SECTEUR ENTRE < TEMPS ??? JC DKM4 < OUI, ON RECOMMENCE... STY VAR+CCDKM3 < NON, < (MOT3)=COMPTE DE MOTS RESIDUELS... LAD VAR+CCDKM < (A)=ADRESSE DU 'CCB', PSR X SVC SVCM6 < ET EXTENSION D'ADRESSE SUR 20 BITS... PLR X BSR ASDIPI < ENVOI DU 'CCB' A L''IOP'... LA VAR+DSYNC0 TBT CCBDKM < Y-A-T'IL SYNCHRONISATION SUR LE < SECTEUR 0 ??? LAI XXDK32 < 'ECHANGE AVEC CHECKSUM' A PRIORI... JC DKM42X < NON, MODE NORMAL... < < BOUCLE DE SYNCHRONISATION SUR LE SECTEUR 0 : < DKM42Y: EQU $ SIO VAR+EADKM < ENTREE DU MOT D'ETAT 'A', TBT ETAS0 < EST-ON SUR LE SECTEUR 0 ??? JNC DKM42Y < NON, ON L'ATTEND ACTIVEMENT... LAI XXDK33 < 'BEGIN WRITE'... < < ECHANGE PROPREMENT DIT : < DKM42X: EQU $ SIO VAR+CDDKM < LANCEMENT ECHANGE PAR UNE 'SIO' < D'ECHANGE... BSR ACSWIT < ET ATTENTE DE L'INTERRUPTION DE FIN < D'ECHANGE... < RAPPEL : LES MOTS D'ETAT 'A' ET 'B' SONT < STOCKES DANS 'ETAT0' ET 'ETAT1' DE LA < 'DCT' PAR 'ARIT'... BSR ATHDS < EST-CE UNE VRAIE INTERRUPTION, OU BIEN < UN DEFAUT SECTEUR ??? JC DKM4 < C'EST UN DEFAUT SECTEUR, IL EST DONC PLUS < PRUDENT DE RELANCER L'ECHANGE... LA ETAT0 < C'EST UNE VRAIE INTERRUPTION : < (A)=MOT D'ETAT 'A' : JAGE DKM42 < OK, ALLONS VOIR LE COMPTE-RENDU... < < CAS OU IL Y A AU MOINS UN DEFAUT : < TBT ETACAD < EST-CE L'ERREUR DE CADENCE ??? JC ERDKM5 < OUI... TBT ETAPAR < EST-CE UN CHECKSUM ??? JC ERDKM5 < OUI... TBT ETAVIO < EST-CE UN VIOL ??? JC ERDKM5 < OUI... TBT ETADOG < EST-CE UN CHIEN DE GARDE (OUAH, OUAH) ??? JC ERDKM5 < OUI... TBT ETAOPE < LE DISQUE EST-IL PRET ??? JNC ERDKM5 < NON, ERREUR... TBT ETABRK < OUI, EST-CE UN FIN DE CYLINDRE ??? JNC ERDKM5 < NON, ERREUR... IC VAR+SUIDKM < OUI, C'EST UNE FIN DE CYLINDRE < IL VA Y AVOIR VRAISEMBLABLEMENT < UNE SUITE ; PASSONS AU COMPTE-RENDU... < COMPTE RENDU DKM42: EQU $ < < COMPTE-RENDU D'ECHANGE : < LA VAR+CCDKM0 SBT BCCBCR STA VAR+CCDKM0 < MISE DU 'CCB' EN MODE COMPTE-RENDU... LAD VAR+CCDKM BSR ASDIPI < DEMANDE DE COMPTE-RENDU A L''IOP' : LA VAR+CCDKM3 < (A)=MOT3 DU 'CCB', C'EST-A-DIRE < COMPTE-RENDU DU CANAL 'HDC' SUR < LES BITS 0-1 POUR L'ETAT, ET 2-15 < POUR LE COMPTE DE MOTS RESIDUELS : < SIGNIFICATION DES BITS 0-1 : < =00 : OK, TOUT S'EST BIEN PASSE, < =01 : L'ECHANGE S'EST ARRETE SUR UN < DEFAUT SECTEUR, OU UN 'INI', < =10 : UNE PARITE MEMOIRE A ETE RENCON- < TREE AU COURS DE L'ECHANGE, < =11 : UNE MEMOIRE INEXISTANTE A ETE < RENCONTREE AU COURS DE L'ECHANGE. < LES BITS 2-15, QUANT A EUX, DONNENT LE < COMPTE DE MOTS RESIDUELS EN FIN D'ECHAN- < GE (NORMALEMENT NUL...). JAE DKM2 < OK, TOUT S'EST BIEN PASSE... < < CAS OU CELA S'EST MAL PASSE : < TBT BCCBME < Y-A-T'IL EU UN PROBLEME MEMOIRE ??? JC ERDKM5 < OUI... TBT BCCBDC < Y-A-T'IL EU UN DEFAUT SECTEUR ??? JC ERDKM5 < OUI... CPZ VAR+SUIDKM < NON, MAIS Y-A-T'IL EU UN INTERRUPTION < DE FIN DE CYLINDRE ??? JNE DKM70 < MAIS OUI, MON BON MONSIEUR... ZZDKM: EQU $ < COLMPTE DE MOTS RESIDUELS NON NUL < SANS INTERRUPTION DE FIN DE CYLINDRE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < NOTER LES ADRESSES, ET VERIFIER < QU'IL N'Y A PAS EU DE FIN DE CYLINDRE, < ET RELANCER... < < < CAS OU LE COMPTE DE MOTS RESIDUELS EST NON NUL, < PREPARATION DE L 'ECHANGE SUIVANT : < DKM70: EQU $ SBR A,Y < (Y)=NOMBRE DE MOTS DEJA ECHANGES, LR Y,A < (A)=NOMBRE DE MOTS DEJA ECHANGES. LBI K < CLEAR REGISTRE 'B'. XWOR%1: VAL YY7 < NOMBRE DE MOTS PAR SECTEUR. XWOR%2: VAL XWOR%1=K SLRD XWOR%2 < (A)=NOMBRE DE SECTEURS DEJA ECHANGES. CPZR B < CE NOMBRE DOIT ETRE ENTIER !!! JE DKM71 < OUI, OUF !!! ZZZDKM: BSR ASYSER < E R R E U R S Y S T E M E ... < CAS OU LE NOMBRE DE MOTS DEJA ECHANGES. < N'EST PAS UN NOMBRE ENTIER DE SECTEURS. < < QUE FAIRE ??? < BIEN NOTER LES ADRESSES, VERIFIER < LES CALCULS, PUIS RELANCER COMME < SUIT... < XR A,B SLRS NBITMO-XWOR%2 < (A)=NOMBRE DE MOTS ECHANGES EN TROP, SBR A,Y < (Y)=NOMBRE DE MOTS DEJA ECHANGES DANS < UN NOMBRE ENTIER DE SECTEURS. AD VAR+CCDKM3 < ET CALCUL DU NOMBRE REEL DE MOTS ENCORE STA VAR+CCDKM3 < A ECHANGER, ET MISE A JOUR DU 'CCB'... XR A,B DKM71: EQU $ AD VAR+SECT SLRD NBITMO DV VAR+NBSRPP < POUR CHANGER DE PISTE EVENTUELLEMENT. STB VAR+SECT < PROCHAIN SECTEUR A ECHANGER. AD VAR+PIST SLRD NBITMO DV VAR+NBPPC < POUR CHANGER DE CYLINDRE EVENTUELLEMENT. STB VAR+PIST < PROCHAINE PISTE A ECHANGER. AD VAR+CYL STA VAR+CYL < PROCHAIN CYLINDRE A ECHANGER. LA VAR+CCDKN2 < ANCIENNE ADRESSE BUFFER, ADR Y,A < QUE L'ON FAIT PROGRESSER, STA VAR+CCDKN2 < NOUVELLE ADRESSE BUFFER... LY VAR+CCDKM3 < (Y)=NOUVEAU COMPTE DE MOTS RESIDUEL. JMP DKM4R DKM2: EQU $ < < < S O R T I E D U H A N D L E R : < < STZ ETAT0 DKM3: EQU $ < < LIBERATION EVENTUELLE D'UN < JEU DE REGISTRE 'HDC' : < CPZ VAR+XRHDCM < A-T'ON UN JEU DE REGISTRES ??? JE DKM3X < NON, RIEN A RENDRE (CAS DES ERREURS < DE DEBUT...). STZ VAR+XRHDCM < MEMORISONS QUE L'ON REND CE JEU... PSR X LAD VAR+CCDKM SVC SVCM5 < DESALLOCATION DU CONTEXTE 'HDC'... PLR X DKM3X: EQU $ JMP DKME1 < (ANCIEN 'RSR') VERS LA GESTION DES < DEMANDES D'ENTRELACAGES DES LECTURES < RAPIDES SUR 'DKU'... < < < E R R E U R S S O F T S : < < ERDKM4: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... ERDKM3: EQU $ < COMPTE DE MOTS INVALIDE. LBY VAR+NMMDKM < ON RENVOIE LE NOMBRE MAXIMUM DE MOTS < ECHANGEABLES/YY8 POUR FAIRE < COMME DANS 'DKF', MAIS ICI, CELA NE < SERT A RIEN... DKM72: EQU $ SBT NBITMO-B < SOMME DES DEFAUTS SOFT, STA ETAT0 < (ETAT0)=CODE D'ERREUR... JMP DKM3 < VERS LA SORTIE... < < < E R R E U R S H A R D S : < < ERDKM5: EQU $ LA ETAT0 < DANS LE CAS OU L'ON ARRIVE ICI (ERREUR < HARD, OU BIZARRERIE DE MOTS RESIDUELS), PSR A < SAVE LE MOT D'ETAT DU DEFAUT... BSR ACANSP < MAIS QUI EST LA ??? < (A)='NSP' DU DISQUE EN DEFAUT : CPI NSPDKM < EST-CE 'DKM' ??? JE ERDKMY < OUI, DANS LE CAS DU DISQUE SYSTEME 'DKM' < ON FAIT SYSTEMATIQUEMENT LE "RETURN TO < ZERO TRACK" POUR DONNER UN AVERTISSEMENT < SONORE... LA MEMV < NON, C'EST 'DKU' : TBT XSYNC0 < ICI, ON FAIT UN PETIT TRUANDAGE, DESTINE < A POUVOIR CONTROLER LE "RETURN TO ZERO < TRACK" A L'AIDE D'UN INDICATEUR, ALORS < QU'IL N'Y EN A PAS DE LIBRE ; ALORS ON < UTILISE CELUI DE LA SYNCHRONISATION SUR < LE SECTEUR 0 DE CHAQUE PISTE... JC ERDKMX < EFFECTIVEMENT, ON NE FAIT PAS DE RETOUR < A 0 POUR FACILITER LES TRANSFERTS RAPIDES < 'MEMTV' <--> 'DKU'... ERDKMY: EQU $ LAI MOMINI?MOMSTR?MOMINT SIO VAR+CDDKM < "RETURN TO ZERO TRACK"... < (POUR FAIRE DU VENT : EN EFFET CE MOUVE- < MENT RAPIDE DES TETES PEUT DEPLACER < D'EVENTUELLES POUSSIERES...) BSR ACSWIT < ET ATTENTE DE FIN D'OPERATION. ERDKMX: EQU $ PLR A < RESTAURE : (A)=MOT D'ETAT DU DEFAUT... JMP DKM72 < ON FORCE LE BIT0(ETAT0) AFIN DE LANCER < UN RETRY... < < < C A S D E S S E C T E U R S I N E X I S T A N T S : < < DKMGS: EQU $ LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE, XWOR%1: VAL FGR?FGW=K TBT NBITMO-B-XWOR%1 < DISCRIMINATION DES LECTURES/ECRITURES : JC DKM2 < LES ECRITURES SONT SANS EFFETS... < < INITIALISATION D'UN BUFER EN LECTURE : < LX ARGDEM+CODEM < (X)=NOMBRE D'OCTESTS DESIRES... LA ARGDEM+ASDEM SWBR A,B ANDR A,B < (B)=MOT=DOUBLE-OCTET A REPETER... LA ARGDEM+AMDEM SLRS NOCMO=K PSR W LR A,W < (W)=ADRESSE MOT DU BUFFER. < < BOUCLE DE TRAITEMENT D'UN Q-SECTEUR : < DKMGS1: EQU $ LRM Y WORD YY7Q < (Y)=LONGUEUR MOTS D'UN Q-SECTEUR. DKMGS2: EQU $ STB O,W < INITIALISATION DU BUFFER PAR MOTS, < COMME LE FERAIT UNE ENTREE-SORTIE... ADRI P,W < AU MOT SUIVANT... ADRI -I*NOCMO,X < DECOMPTE DES OCTETS TRAIES, ADRI -I,Y < DECOMPTE DES MOTS DANS LE Q-SECTEUR, CPZR X < L'ENTREE-SORTIE EST-ELLE FINIE ??? JLE DKMGS3 < OUI, ON SORT... CPZR Y < NON, A-T'ON EPUISE LE Q-SECTEUR COURANT ? JNE DKMGS2 < NON, ON CONTINUE... ADRI I,B < OUI, PASSAGE A LA VALEUR SWBR B,B < D'INITIALISATION ADRI I,B < SUIVANTE... JMP DKMGS1 < ET AU Q-SECTEUR SUIVANT... < < FIN DU PROCESSUS : < DKMGS3: EQU $ PLR W < RESTAURE (W)=ADRESSE DE LA DEMANDE, JMP DKM2 < ET VERS LA SORTIE... PAGE < < < G E S T I O N D E L ' E N T R E L A C A G E < D E S L E C T U R E S R A P I D E S ' D K U ' : < < < FONCTION : < CE MODULE MIS ICI A CAUSE DES < FABULEUX SAUTS DE LA MORT (SOUS- < ENTENDU, SUPERIEURS A 128 MOTS...) < PERMET A LA FIN DU HANDLER DISQUE < AMOVIBLE, DE REGARDER SI UN ENTRE- < LACAGE EST A REALISER... CECI NE < PEUT SE PRODUIRE QUE POUR 'DKU' LORS < DES TRNASFERTS RAPIDES 'DKU'-->'MEMTV', < S'IL Y EU UNE COMMANDE "!DKU S" < EMISE... < < DKME1: EQU $ < < TEST SUR LA NECESSITE D'ENTRELACER : < LA ARGDEM+OPDEM < (A)=FONCTION COURANTE : CPI FONTVR < EST-CE LE TRANSFERT RAPIDE 'DKU'--> < 'MEMTV' ??? JNE DKME2 < NON, RIEN A FAIRE, ON SORT... CPZ ETAT0 < OUI, ALORS L'OPERATION S'EST-ELLE CORREC- < TEMENT REALISEE ??? JNE DKME2 < NON, DONC ON SORT... XWOR%1: VAL COSBT?FONTVR=FMASK(K?XXDK5=FCINST IF XWOR%1-XXDK5,XEIF%,,XEIF% IF ATTENTION : POUR QUE CES TESTS FONCTIONNENT IF CORRECTEMENT, IL FAUT QUE 'DKM' NE POSSEDE IF PAS UNE FONCTION VALANT 'FONTVR' !!! XEIF%: VAL ENDIF BSR ACANSP < COMME ON N'EST JAMAIS ASSEZ PRUDENT : < (A)='NSP' DU HANDLER COURANT, CPI NSPDKU < EST-CE BIEN 'DKU' ??? JE DKME5 < OUI, OUF... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ELIMINER LA FONCTION A 'DKM' QUI < VAUT 'FONTVR' ET QUI EST BIZARREMENT < PASSEE INAPERCUE !!! < JMP DKME2 < ET IL VAUT MIEUX SORTIR... DKME5: EQU $ XWOR%1: VAL TVLIMA*LK*XNCOOL*NOCMO LRM A WORD XWOR%1 < (A)=LONGUEUR D'UNE IMAGE COULEUR ENTIERE, CP ARGDEM+CODEM < 'FONTVR' A-T'IL PORTE SUR UNE IMAGE < COULEUR ENTIERE ??? JNE DKME2 < NON, PAS D'ENTRELACAGE... LA NSPTYP TBT TYPAD < EST-CE BIEN UNE ADRESSE-MOT ??? JNC DKME2 < NON, PAS D'ENTRELACAGE... PSR W < OUI, CALL #SISP CMS5 W ZERO# < (W)=BASE DE LA MEMOIRE DEBANALISEE, CPZ TVENTR-ZERO,W < Y-A-T'IL UNE COMMANDE "!DKU S" EN COURS ? PLR W JE DKME2 < NON "!DKU F", DONC PAS D'ENTRELACAGE... IF AMEMTV-ZERO,,XEIF%, IF ATTENTION : LE TEST ('CPZ') CI-DESSUS EST IDIOT !!! XEIF%: VAL ENDIF < < APRES TOUTES CES VERIFICATIONS (...), < ON SAIT QUE L'IMAGE LUE A PARTIR DE < 'DKU' EST COMPLETE, ET QU'IL FAUT < L'ENTRELACER, CE QUE L'ON VA FAIRE : < XWOR%2: VAL XWOR%1/XNCOOL/LENTR/NOCMO < NOMBRE D'ITERATIONS D'ENTRELACAGE. XWOR%3: VAL -DADR XWOR%3: VAL -XWOR%3 < POUR CONVERTIR DES ADRESSES DE MOTS EN < DES FADR-ADRESSES... XWOR%4: VAL AMEMTV-ZERO>XWOR%3+MEMTV0 XWOR%5: VAL AMEMTW-ZERO>XWOR%3+MEMTV0+XXLTV-E CALL #SISP CMS5 PSRSLO# PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE < COURANTE. LRM A,B,X,W WORD XWOR%4 < (A)=ADRESSE DU DEBUT DE L'IMAGE VISUALISE WORD XWOR%5 < (B)=ADRESSE DE FIN DE L'IMAGE INTERME- < DIAIRE A ENTRELACER... <+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ DKMBL1: WORD XWOR%2 < (X)=NOMBRE DE BLOCS A ENTRELACER, DKMBL2: WORD LENTR < (W)=LONGUEUR DES BLOCS ENTRELACES. < NOTA : CE SONT CES 2 MOTS QUI SONT A < MODIFIER SI L'ON SOUHAITE CHANGER < LA LONGUEUR DES BLOCS, SANS TOUTE < FOIS DEPASSER 'LBENTR'... <+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ BSR VAR+ATWOED < POSITIONNEMENT DE (SLO,SLE) AFIN DE < FAIRE L'ENTRELACAGE DANS 'MEMTV'. LR W,A < (A)=LONGUEUR DES BLOCS, CPI LBENTR < VALIDATION VICIEUSE AU CAS OU CETTE < LONGUEUR AURAIT ETE PATCHEE... JLE DKME6 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < MODIFIER CETTE LONGUEUR ET LE NOMBRE < D'ITERATIONS AVANT DE RELANCER... < DKME6: EQU $ LRM A,B,Y WORD AMEMTW < (A)=ADRESSE DE LA SOURCE 'SLAVE', WORD BENTR < (B)=ADRESSE DU RECEPTEUR/EMETTEUR < 'MASTER', WORD AMEMTV < (Y)=ADRESSE DU RECEPTEUR 'SLAVE'. < < BOUCLE D'ITERATIONS SUR LES < XNCOOL-BLOCS : < DKME3: EQU $ IF BITX-BITSIG,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ VAR+ALINHI < DOIT-ON UTILISER LE SYSTEME D'AUTORISA- < TION/INHIBITION DES BLOCS ENTRELACES ??? JGE DKME8 < NON, ON NE TESTE PAS LES INHIBITIONS... PSR A,X,Y < OUI : LAD VAR+ALINHI < (A)=ADRESSE DU RELAI VERS 'LINHIB', ADRI L-IJIJDX,X < (X)=INDEX DU BIT A TESTER (ON RETRANCHE < 'IJIJDX' PARCEQUE LA BOUCLE < 'DKME3' EST CONTROLEE PAR UN 'JDX') ; < NE PAS OUBLIER QUE LA LISTE EST DANS < L'ORDRE INVERSE... LYI FONTB < (Y)=FONCTION DE TEST BIT... BSR ATMOBT < ET TEST DU BIT (X) DANS LA TABLE ((A)) : PLR A,X,Y JNC DKME7 < LE BLOC COURANT EST INHIBE... DKME8: EQU $ < LE BLOC COURANT EST AUTORISE, OU BIEN < CE MECANISME N'EST PAS UTILISE... PSR A,X,Y < SAUVEGARDE ENTRE AUTRES DES ADRESSES < SOURCE/RECEPTEUR 'SLAVE'. LXI XNCOOL < (X)=NOMBRE DE COULEURS, < < ITERATION SUR CHAQUE COULEUR < A L'INTERIEUR D'UN XNCOOL-BLOC : < DKME4: EQU $ PSR X < SAVE DU DECOMPTE DES ITERATIONS, LR W,X < (X)=LONGUEUR D'UN BLOC, MVTM < TRANSFERT 'AMEMTW' --> 'BENTR', XR A,Y < CHANGEMENT DES XR A,B < EMETTEURS/RECEPTEURS... LR W,X < (X)=LONGUEUR D'UN BLOC, MVTS < TRANSFERT 'BENTR' --> 'AMEMTV'. XR A,B < RETABLISSEMENT DES XR A,Y < EMETTEURS/RECEPTEURS... LRM X WORD TVLIMA*LK < (X)=CONSTANTE DE PASSAGE D'UNE COMPOSANTE < CHROMATIQUE A LA SUIVANTE... ADR X,A < PASSAGE A LA SOURCE 'SLAVE' SUIVANTE, ADR X,Y < ET AU RECEPTEUR 'SLAVE' SUIVANT... PLR X JDX DKME4 < VERS LE BLOC CHROMATIQUE SUIVANT... PLR A,X,Y < RESTAURATION ENTRE AUTRES DES ADRESSES < SOURCE/RECEPTEUR 'SLAVE'... DKME7: EQU $ < CAS DES BLOC INHIBES... ADR W,A < PASSAGE AU BLOC SOURCE 'SLAVE' SUIVANT, ADR W,Y < ET RECEPTEUR 'SLAVE' SUIVANT... JDX DKME3 < AU XNCOOL-BLOC SUIVANT... PLR W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE COURANTE. CALL #SISP CMS5 PLRSLO# < < RESTAURATION DE LA DEMANDE < SUITE A UN ENTRELACAGE : < STZ ARGDEM+AMDEM < L'ADRESSE ETAIT NULLE, LA NSPTYP RBT TYPAD < ET D'OCTETS... STA NSPTYP < < < S O R T I E D U H A N D L E R : < < DKME2: EQU $ RSR < ET C'EST TOUT... PAGE < < < D E T E C T I O N D E S M E M O I R E S < I N E X I S T A N T E S : < < < FONCTION : < CE SOUS-PROGRAMME, UTILE POUR < 'DKU', DETECTE AU DELA DE 64K LES < MEMOIRES INEXISTANTES ; EN EFFET, < LORSQUE L'ON UTILISE LES TRANSFERTS < RAPIDES ENTRE 'DKU' ET 'MEMTV', SI < C'EST 'PROESC' QUI EST LE 'PROIOP', < ET SI POUR TERMINER LE COUPLEUR DE < BUS EST DECONNECTE, 'PROESC' ETANT < SOUS NIVEAU 'TH0', CELA PROVOQUERAIT < UNE ALARME !!! ICI DONC ON FAIT UN TEST < PRELIMINAIRE DE CE TYPE DE MEMOIRE < INEXISTANTE... < < SPDKU: EQU $ PSR A,B,Y LA VAR+DSYNC0 ANDI CCBMAE < (A)=EXTENSION D'ADRESSE, JAE SPDKU1 < AUCUN TEST A FAIRE... LR A,Y < (Y)=EXTENSION D'ADRESSE... CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE 'SLO' ET 'SLE'... XWOR%1: VAL 1 < NOMBRE DE 'DADR'-MOTS A TESTER... XWOR%2: VAL CCBMAE=K < CADRAGE DE 'CCBMAE'. XWOR%4: VAL -DADR XWOR%5: VAL BIT>XWOR%4-BIT)MMOT XWOR%5: VAL COSCLS?XWOR%2=FMASK(K?XWOR%5=FCINST LA VAR+CCDKN2 < (A)=ADRESSE MOT DE L'ECHANGE A L'INTERIEU < D'UN SEGMENT DE 64K, IF XWOR%2-K,,XEIF%, SCLS XWOR%2 < CADRAGE COMPATIBLE AVEC L'EXTENSION, XEIF%: VAL ENDIF ANDI XWOR%5 < SUPPRESSION DES -'DADR' BITS DE POIDS < FAIBLES, ORR Y,A < CONCATENATION DE L'EXTENSION, SCRS -DADR+XWOR%2 < (A)=ADRESSE EN 'DADR'-MOTS DE L'ECHANGE, LR A,B ADRI XWOR%1,B < PASSAGE UN 'DADR'-MOTS PLUS LOIN... WOE < INITIALISATION DE 'SLO' ET 'SLE', LAI COSBT?DEBUG=FMASK(K=FCINST BSR ASMMK < MASQUAGE DES INTERRUPTIONS, CAR < ON VA PASSER EN MODE 'DEBUG'... SST < PASSAGE EN MODE 'DEBUG'. SPDKU3: EQU $ XWOR%3: VAL -DADR LYI XWOR%1>XWOR%3-D < (Y)=ADRESSE DU PREMIER MOT A TESTER < DANS L'ESPACE (SLO,SLE). DBP < RECHERCHE DES DEFAUTS... JNV SPDKU2 < OK, IL N'Y A PAS DE MEMOIRE INEXISTANTE, < MAIS IL PEUT Y AVOIR UNE PARITE, CE < QUI PEUT ETRE INDIFFERENT, DANS LA MESURE < OU CELA PEUT SE RENCONTRER APRES UNE < ENTREE CAMERA, SUIVIE IMMEDIATEMENT D'UN < TRANSFERT 'DKU' <--> 'MEMTV'... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < VERIFIER LA CONNEXION DU COUPLEUR < DE BUS VERS 'MEMTV', ET EN GENERAL < ITERER LE TEST !!! < JMP SPDKU3 < ET ON RETESTE... SPDKU2: EQU $ LAI COSBT?DEBUG=FMASK(K=FCINST RST < ET ON EFFACE LE MODE 'DEBUG'... BSR ASMDK < ET ON DEMASQUE LES INTERRUPTIONS. < RESTAURATION DE (SLO,SLE) : CALL #SISP CMS5 PLRSLO# SPDKU1: EQU $ PLR A,B,Y < < SORTIE, ET ENTRY 'DKM' : < SPDKM: EQU $ RSR 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... < < < NOTA : < ON NE PEUT EN GENERAL APPELER < DIRECTEMENT 'TWOE' DEPUIS 'HDLDKU', < CAR LA PLUPART DU TEMPS, LA BASE < 'C' EST MAUVAISE... < < < ARGUMENTS : < (A,B)=REGISTRES 'SLO' ET 'SLE' < DEMANDES SUR L'ANCIENNE 'CDAI'... < < TWOED: EQU $ PSR C CALL #SISP CMS5 BASE C# < ET OUI, EN EFFET, LA BASE 'C' EST EN < GENERAL MAUVAISE !!! BSR ATWOE < VERS L'EXTENSION DES 'CDA'... PLR C RSR < ET RETOUR... PAGE < < < A U T O R I S A T I O N D E T O U S L E S < B L O C S E N T R E L A C E S : < < < FONCTION : < POUR DES RAISONS ECONOMIQUES, < ON A GROUPE LES BLOCS ENTRELACES < EN 'NBITMO' GROUPES DE CHACUN < 'LLINHI*NBITMO/LVALES'='LLINHI' < GROUPES ENTRELACES. < CE PREMIER MODULE, AUTORISE < TOUS LES GROUPES DE BLOCS, ET < DESARME CE MECANISME (PAR LE < BIT D'INDEX DE 'ALINHI'). < < < NOTA : < IL N'EST PAS NECESSAIRE DE < CREER DES PHASES CRITIQUES, < PUISQUE L'APPEL DE 'PSLOWA' < IMPLIQUE QUE L'UTILISATEUR < SOIT ASSIGNE LE DISQUE... < < < ARGUMENTS : < (B)='NSP' DU DISQUE. < < PSLOWA: EQU $ PSLOWB: EQU PSLOWA < (A CAUSE DE L'ASSEMBLEUR...) PSR B,X,L < < POSITIONNEMENT SUR LE < DISQUE ARGUMENT : < LR B,X < (X)='NSP' DU DISQUE, BSR ACADCT < (A)=(L)=ADRESSE DE LA 'DCT' DU DISQUE. < < AUTORISATION DE TOUS LES < BLOCS ENTRELACES : < LA VAR+ALINHI SBT BITX STA VAR+ALINHI < AFIN D'INITIALISER LA LISTE PAR MOTS... LXI LLINHI < (X)=NOMBRE DE MOTS DE LA LISTE, LBI MMOT < (B)=POUR AUTORISER... PSLOW1: EQU $ STB &VAR+ALINHI < ET ON AUTORISE JDX PSLOW1 < TOUS LES BLOCS... < < ET DESARMEMENT DU MECANISME : < RBT BITX STA VAR+ALINHI < ET ON CLEAR LE BIT INDEX DE 'ALINHI'... < < RETOUR : < PLR B,X,L RSR < < < I N H I B I T I O N S E L E C T I V E D E < G R O U P E S D E B L O C S E N T R E L A C E S : < < < FONCTION : < POUR DES RAISONS D'ECONOMIE < CETTE INHIBITION NE PEUT SE < FAIRE QUE PAR GROUPE DE BLOCS < (DE 'LLINHI' BLOCS), AFIN QUE < LISTE COMMUNIQUEE PAR L'UTILI- < SATEUR TIENNE SUR UN MOT... < < < NOTA : < PAS DE PHASES CRITIQUES PUISQUE < L'APPEL DE 'PSLOWI' IMPLIQUE UNE < ASSIGNATION PREALABLE DU DISQUE... < < < ARGUMENTS : < (B)='NSP' DU DISQUE, < (VALESC)=LISTE DES GROUPES DE BLOCS < ENTRELACES INHIBES (0) OU < INHIBES (1) DANS LE BON < ORDRE (RAPPELONS QUE 'LINHIB' < EST RANGEE A L'ENVERS...). < < PSLOWI: EQU $ PSR B,X,L < < POSITIONNEMENT SUR LE DISQUE : < LR B,X < (X)='NSP' DU DISQUE, BSR ACADCT < (A)=(L)=ADRESSE DE SA 'DCT'... < < ACCES A LA LISTE ARGUMENT : < LA VALESC-DCTESK,W < (A)=LISTE ARGUMENT, EORI MMOT < QUE L'ON INVERSE AFIN DE DETECTER < LES INHIBITIONS (0 --> 1), LBI K < CLEAR DE 'B' POUR LE TEST D'ARRET... < < RECUPERATION DE CHAQUE < GROUPE DE BLOCS INHIBES : < PSLOW2: EQU $ DBT < RECHERCHE DU GROUPE DE BLOCS INHIBES < COURANT, JC PSLOW4 < C'EST FINI ; NOTONS QUE 'ALINHI' PEUT < AVOIR SONT 'BITX' A '0' SI LA LISTE < ARGUMENT 'VALESC' AUTORISEE TOUS LES < GROUPES DE BLOCS... RBT L,X < ET ON MEMORISE SON TRAITEMENT... PSR A,B < ET SAUVEGARDE DE LA LISTE COURANTE... < < ACTIVATION DU MECANISME, ET < INHIBITION DU GROUPE DE BLOCS < ENTRELACES COURANT : < LA VAR+ALINHI SBT BITX STA VAR+ALINHI < ON POURRA AINSI ACCEDER A LA LISTE PAR < 'ATMOBT', MAIS DE PLUS, ON ACTIVE LE < MECANISME DANS 'HDLDKU'... ADRI -LVALES+B,X NGR X,A < (A)=NUMERO DU GROUPE COURANT DANS LA < CONVENTION INVERSEE QUI EST CELLE < DE 'LINHIB'... XWOR%1: VAL LLINHI*NBITMO < NOMBRE DE BLOCS DANS 'LINHIB', XWOR%1: VAL XWOR%1/LVALES < ET DONC NOMBRE DE BLOCS PAR GROUPE < PUISQUE 'VALESC' NE PEUT CONTENIR QUE < 'NBITMO' GROUPES... XWOR%2: VAL XWOR%1=K < POUR FAIRE UNE MULTIPLICATION PAR < DECALAGE... IF BIT>XWOR%2-XWOR%1,,XEIF%, IF ATTENTION : LE NOMBRE DE BLOCS PAR GROUPE IF DOIT ETRE UNE PUISSANCE DE 2 AFIN QUE CE IF SUIT SOIT CORRECT !!! XEIF%: VAL ENDIF SLRD NBITMO-XWOR%2 < (NE PAS OUBLIER QUE (B)=CLEAR...) < (B)=NUMERO DU PREMIER BLOC DU GROUPE < COURANT, LXI XWOR%1 < (X)=NOMBRE DE BLOCS PAR GROUPE, LYI FONRB0 < (Y)=FONCTION DE MISE A '0' D'UN BIT AVEC < VERIFICATION PREALABLE, LAD VAR+ALINHI < (A)=ADRESSE DU RELAI D'ACCES A LA LISTE < 'LINHIB'. PSLOW3: EQU $ XR B,X < (X)=NUMERO DU BLOC COURANT, ET SAVE 'X', BSR ATMOBT < INHIBITION DU BLOC COURANT (X), XR B,X < RESTAURE, ADRI I,B < ET PASSAGE AU BLOC SUIVANT, JDX PSLOW3 < S'IL EXISTE... PLR A,B < SINON, RESTAURATION DE LA LISTE COURANTE < DES GROUPES A INHIBER, JMP PSLOW2 < ET RECHERCHE DU SUIVANT... < < SORTIE : < PSLOW4: EQU $ PLR B,X,L RSR PAGE < < < P R O T E C T I O N D E ' D K U ' < P A R G R O U P E S D E C Y L I N D R E S : < < < PHILOSOPHIE : < NE PARLONS QUE DE 'DKU' ; CE < DISQUE POSSEDE UNE LISTE 'LSDK' < DONT CHAQUE BIT EST ASSOCIE A UN < GROUPE DE 'NCYLP' CYLINDRES ; < LORSQU'UN TEL BIT EST A 1, CELA < SIGNIFIE QUE LE GROUPE DE CYLINDRES < ASSOCIE A ETE APPROPRIE PAR UN < UTILISATEUR (VOIR LA COMMANDE < "!Q<CHAINE HEXA-DECIMALE"), ET < ALORS L'UTILSATEUR POSSEDE DANS < SA 'DCTESC' UNE LISTE 'LUDKU' < QUI INDIQUE DE MEME QUELS GROUPES < IL POSSEDE... < DE PLUS, LORSQUE Q=1, L'UTILISATEUR < PEUT GRACE A LA COMMANDE "!QXYZT+..." < DEFINIR UNE TRANSLATION SUR LES < ADRESSES DISQUES PERMETTANT L'ACCES < A 'DKU' ENTIER EN Q=1 ; LES LISTES < D'APPROPRIATION DE GROUPES DE CYLINDRES < NE POUVANT ETRE IDENTIQUES POUR 2 < UTILISATEURS, LES LISTES ASSOCIATIVES < 'TASQ' MEMORISENT (APPROPRIATION,TRANSLATION) < POUR L'ENSEMBLE DES UTILISATEURS. < < < ARGUMENT : < (B)='NSP' DU DISQUE QUE L'ON PROTEGE, < (W)=ADRESSE 'DCTESC'. < < P1DKU: EQU $ LAI TRDKU0 < (A)=TRANSLATION 0 POUR 'P1DKU'... JMP P1DKU9 P1DKV: EQU $ LAI TRDKU1 < (A)=TRANSLATION 1 POUR 'P1DKV'... JMP P1DKU9 P1DKW: EQU $ LAI TRDKU2 < (A)=TRANSLATION 2 POUR 'P1DKW'... < < INITIALISATIONS : < P1DKU9: EQU $ < (A)=TRANSLATION DEMANDEE... PSR B,X,L LR B,X < (X)='NSP' DU DISQUE A PROTEGER, PSR A < SAUVEGARDE DE LA TRANSLATION... BSR ACADCT < (A)=(L)=ADRESSE DE 'DCTDKU'... PLR A < (A)=TRANSLATION DES ADRESSES EN Q=1... RQST SPHEX < ON VA ELIMINER LA PHASE CRITIQUE D'ACCES < A 'LSDK' PAR LE 'SPHEX' DE 'DKU'... < < VALIDATION DE LA COMMANDE "!Q" < PAR RAPPORT AU CONTEXTE : < CPZ VALESC-DCTESK,W < EST-CE "!Q0000" (CAS EN PARTICULIER DU < LOG-OUT) ??? JNE P1DKUA < NON... JANE P1DKU1 < OUI, DANS LE CAS DE "!Q0000", LA TRANS- < LATION (A) NE PEUT QU'ETRE NULLE... JMP P1DKU3 < "!Q0000" : PAS DE TEST DE LOCATION ; ON < EVITE AINSI UNE SYSER LORS DU LOG-OUT < EN 'P3DKU' LORSQU'UN UTILISATEUR SE < DECONNECTE PAR "!F" OU "!BYE" ALORS QUE < 'DKU' EST ASSIGNE PAR QUELQU'UN D'AUTRE.. P1DKUA: EQU $ CPZ ETALOC < LE DISQUE EST-IL LOUE ??? IF XETLOC-BITSIG,,XEIF%, IF ATTENTION : LE TEST DE LOCATION EST MAUVAIS !!! XEIF%: VAL ENDIF JGE P1DKU3 < NON, PAS DE PROBLEMES... LXI NOCMO*LTASGN-Z < OUI, IL FAUT VERIFIER QUE C'EST LE < DEMANDEUR DE "!Q" QUI LE POSSEDE : P1DKU4: EQU $ PSR A < SAUVEGARDE DE LA TRANSLATION... LBY &TASSGN-DCTESC,W CPR A,B < ON BALAYE LA TABLE DES ASSIGNATIONS DE < CET UTILISATEUR, AFIN DE VOIR S'IL POS- < SEDE LE DISQUE DE 'NSP'=(B) ??? PLR A < (A)=TRANSLATION DES ADRESSES EN Q=1... JE P1DKU3 < OUI, DONC "!Q" EST ACCEPTE... JDX P1DKU4 < NON, A L'ASSIGNATION SUIVANTE... JMP P1DKU1 < ET BIEN NON, C'EST UN AUTRE QUI LE < POSSEDE CE DISQUE, DONC "!Q" REFUSEE !!! P1DKU3: EQU $ < LE DISQUE N'EST PAS ASSIGNE, OU BIEN < ASSIGNE A L'UTILISATEUR DEMANDEUR DE < LA COMMANDE "!Q", OU BIEN, ENFIN C'EST LA < COMMANDE "!Q0000", EN PARTICULIER LORS < DU LOG-OUT... LR A,Y < (Y)=TRANSLATION DEMANDEE POUR LES ADRES- < SES DISQUES EN Q=1... LA VAR+LSDK < (A)=LISTE GENERALE DE 'DKU', LB VALESC-DCTESK,W < (B)=NOUVELLE*LUDKU, EOR LUDKU-DCTESC,W < (A)=LSDK.EOR.ANCIENNE*LUDKU=LA LISTE DES < GROUPES DE CYLINDRES POSSEDES PAR LES < AUTRES UTILISATEURS, LR A,X < ON MEMORISE DANS 'X' CE QUE POSSEDE LES < AUTRES... ANDR B,A < VALIDONS CE QUI EST DEMANDE (B) : JANE P1DKU1 < ERREUR, IL Y A RECOUVREMENT ENTRE < CE QUI EST DEMANDE PAR L'UTILISATEUR < COURANT, ET CE QUE LES AUTRES POSSEDENT.. LA LUDKU-DCTESC,W < (A)=LISTE DES APPROPRIATIONS ANTERIEURES, < AFIN DE POUVOIR L'ELIMINER DE LA < LISTE ASSOCIATIVE 'ATASQ'... STB LUDKU-DCTESC,W < OK, MEMORISATION DE LA NOUVELLE 'LUDKU', ORR X,B STB VAR+LSDK < ET MEMORISATION GENERALE DES GROUPES < APPROPRIES... < < ELIMINATION DU COUPLE < (APPROPRIATION,TRANSLATION) < ANTERIEUR DE L'UTILISATEUR : < JAE P1DKU8 < LA LISTE DES APPROPRIATIONS ANTERIEURES < =(A) EST VIDE, RIEN A FAIRE... LXI K < (X)=INDEX DE PARCOURS DE 'TASQ', P1DKU6: EQU $ CP &VAR+ATASQ < LA LISTE ANTERIEURE EST-ELLE LA ??? JE P1DKU7 < OUI, ALLONS LA RETIRER... ADRI ITASQ,X < NON, A LA SUIVANTE, XR A,X < SI ELLE EXISTE... CPI LTASQ < ??? XR A,X JL P1DKU6 < OUI, ALLONS LA TESTER.. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LA LISTE < ANTERIEURE (A) NE FIGURE PAS < DANS LA 'TASQ' COURANTE !!! < JMP P1DKU8 < ET ON NE FAIT RIEN... P1DKU7: EQU $ STZ &VAR+ATASQ < LORSQU'ON LA TROUVEE, ON LA SUPPRIME, ADRI ITASQT,X STZ &VAR+ATASQ < AINSI QUE LA TRANSLATION ASSOCIEE... P1DKU8: EQU $ < < MEMORISATION DE LA TRANSLATION < D'ADRESSES ASSOCIEE : < LB LUDKU-DCTESC,W < (B)=NOUVELLE LISTE 'LUDKU' D'APPRO- < PRIATION DES GROUPES DE CYLINDRES... CPZR B < EST-ELLE VIDE ??? JE P1DKUD < OUI, RIEN A FAIRE... LXI K < NON, < (X)=INDEX DE PARCOURS DE 'TASQ' : P1DKUB: EQU $ CPZ &VAR+ATASQ < RECHERCHE D'UNE ENTREE VIDE : JE P1DKUC < OK, ON EN A TROUVEE UNE... ADRI ITASQ,X < NON, ALLONS VOIR LA SUIVANTE... LR X,A < SI ELLE EXISTE... CPI LTASQ < ??? JL P1DKUB < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT IL PEUT SE < FAIRE QU'IL N'Y AIT PAS UNE SEULE < ENTREE DE LIBRE, ALORS QUE NORMA- < LEMENT LE MENAGE EST FAIT A CHAQUE < NOUVELLE COMMANDE "!Q..." !!! < JMP P1DKUD < ET ON NE FAIT RIEN... P1DKUC: EQU $ STB &VAR+ATASQ < OCCUPATION DE LA PREMIERE ENTREE LIBRE < PAR LA LISTE DES APPROPRIATIONS (B), ADRI ITASQT,X < ET STY &VAR+ATASQ < LA TRANSLATION D'ADRESSE... P1DKUD: EQU $ < < RETOUR "OK" : < LYI K < (Y)=K, AFIN DE FAIRE UN RETOUR OK < DANS LA GRAMMAIRE... < < SORTIE GENERALE : < P1DKU2: EQU $ LAD SPHEX BSR ARLSE < FIN DE LA PHASE CRITIQUE 'LSDK'... PLR B,X,L ADR Y,X < MODIFICATION EVENTUELLE DE L'INDEX < DE LA GRAMMAIRE DU 'CCI', RSR < ET RETOUR... < < SORTIE EN ERREUR : < P1DKU1: EQU $ LYI XCCIER < (Y)='XCCIER', AFIN DE FAIRE UN RETOUR < EN ERREUR AU 'CCI'... JMP P1DKU2 < VERS LA SORTIE GENERALE... < < < L I B E R A T I O N D E S G R O U P E S < D E C Y L I N D R E S A P P R O P R I E S < L O R S D U L O G G O U T : < < < FONCTION : < LORS DU LOGOUT D'UN UTILISATEUR < CELUI-CI REND IMPLICITEMENT LES < GROUPES DE CYLINDRES QU'IL POS- < SEDAIT EVENTUELLEMENT... < < P2DKU: EQU $ STZ VALESC-DCTESK,W < ON SIMULE LA COMMANDE "!Q0000"... RSR < ET C'EST TOUT... < < < A N O M A L I E ' C C I ' < < P3DKU: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT CETTE ERREUR < PEUT ARRIVER, CAR EN EFFET ON VIENT < DE SIMULER UNE COMMANDE "!Q0000", ET < CETTE APPROPRIATION NE PEUT ETRE < REFUSEE !!! < RSR < < < V A L I D A T I O N D ' U N " ! Q " A C T I F < L O R S D ' U N " ! A S S I G N " : < < < FONCTION : < LORS D'UNE COMMANDE "!ASSIGN", < ON VERIFIE QUE SI LE DISQUE EST < PROTEGE, C'EST A L'USAGE EXCLU- < SIF DU DEMANDEUR DE L'ASSIGNATION. < < < ARGUMENTS : < (B)='NSP' DU DISQUE, < (W)=ADRESSE DE 'DCTESC'. < (Y)=NVP (NON UTILISE). < < P4DKU: EQU $ PSR B,L PSR X < SAUVEGARDE DE L'INDEX DE LA GRAMMAIRE < DU 'CCI'. LR B,X < (X)='NSP' DU DISQUE, BSR ACADCT < (A)=(L)=ADRESSE DE SA 'DCT'. RQST SPHEX < ON ENTRE DANS UNE PHASE CRITIQUE SUR < 'LSDK' PROTEGEE PAR LE 'SPHEX' DU DISQUE. LA LUDKU-DCTESC,W < (A)=LISTE D'APPROPRIATION DES GROUPES < DE CYLINDRES LOCALE A CET UTILISA- < TEUR, CP VAR+LSDK < POSSEDE-T'IL TOUT CE QUI A ETE APPROPRIE < PAR DES COMMANDES "!Q" ??? PLR X < (X)=INDEX DE LA GRAMMAIRE DU 'CCI', JE P4DKU1 < OUI, IL POSSEDE TOUT, "!ASSIGN" PEUT < ETRE ACCEPTEE... ADRI XCCIER,X < NON, LA COMMANDE EST DONC REFUSEE... P4DKU1: EQU $ LAD SPHEX BSR ARLSE < ON SORT DE LA PHASE CRITIQUE... PLR B,L RSR PAGE < < < T E S T D ' U N V O L U M E M O N T E : < < < FONCTION : < CE MODULE VERIFIE SI L'UTILISATEUR < A UN VOLUME MONTE GRACE A L'INDICATEUR < 'IDESC8' DE SA 'DCTESC'. < < < ARGUMENT : < (W)=ADRESSE DE 'DCTESC'. < < < RESULTAT : < 'X' : EST INCREMENTE DE 'XCCIER' < S'IL Y A UN VOLUME MONTE. < < P4SGU: EQU $ LA IDDESC-DCTESC,W TBT IDESC8 < ALORS, Y-A-T'IL UN VOLUME MONTE ??? ADCR X < MODIFICATION EVENTUELLE DE L'INDEX DE < LA GRAMMAIRE 'CCI'... IF XCCIER-BIT,,XEIF%, IF ATTENTION : LE 'ADCR' EST IDIOT !!! XEIF%: VAL ENDIF RSR PAGE < < < V A L I D A T I O N D ' U N " ! A S S I G N " < A U N D I S Q U E : < < < FONCTION : < LORS D'UNE DEMANDE DE MONTAGE, < ON PRECISE UN 'NVP' DE PERIPHERIQUE < SUPPORT DE VOLUME ; ICI, ON VERIFIE < QUE LE 'NVP' EST BIEN ASSIGNE AU < DISQUE DEMANDE... < < < ARGUMENTS : < (B)='NSP' QUE L'ON S'ATTEND ETRE ASSIGNE AU 'NVP', < (W)=ADRESSE DE 'DCTESC'. < < < RESULTAT : < (Y)='NVP' (MAIS INUTILE). < < P1SGU: EQU $ PSR X LX VAR+XBUFGR < (X)=INDEX DU BUFFER D'ENTREE, LAD VAR+ABUFGR < (A)=ADRESSE DU RELAI D'ACCES AU BUFFER, BSR AHEXIN < CONVERSION DE L'EVENTUELLE CHAINE HEXA- < DECIMALE COURANTE : < (A)='NVP' DEMANDE POUR LE MONTAGE OU < L'INITIALISATION... STX VAR+XBUFGR < ET SAUVEGARDE DE L'INDEX COURANT DU < BUFFER ; A NOTER QU'ON NE PEUT PAS < UTILISER 'NVPAS', CAR CELUI-CI FAIT DES < VERIFICATIONS INCOMPATIBLES AVEC 'P1SGU'. CPI XMAXIO < VALIDATION DU 'NVP' QUI DOIT SE TROUVER < DANS 'A', JLE P1SGU3 < ERREUR... CPI NOCMO*LTASGN < VALIDATION, SUITE... JGE P1SGU3 < ERREUR... LR A,X < (X)=BON 'NVP' DEMANDE POUR LE MONTAGE < OU L'INITIALISATION... LBY &TASSGN-DCTESC,W < (A)='NSP' ASSIGNE A CE 'NVP', CPR A,B < EST-CE BIEN LE DISQUE ATTENDU ??? PLR X JE P1SGU1 < OUI, LA DEMANDE DE MONTAGE PEUT ETRE < ENVISAGEE SOUS UN JOUR FAVORABLE... < < RETOUR EN ERREUR : < P1SGU2: EQU $ ADRI XCCIER,X < POUR UN RETOUR EN ERREUR AU 'CCI'... < < RETOUR AU 'CCI' : < P1SGU1: EQU $ RSR < < ERREUR : MAUVAIS 'NVP' : < P1SGU3: EQU $ PLR X < RESTAURATION DE L'INDEX COURANT DE LA < GRAMMAIRE DU CCI, JMP P1SGU2 < VERS LE RETOUR EN ERREUR... PAGE < < < D E M A N D E D E M O N T A G E D ' U N V O L U M E : < < < FONCTION : < CE MODULE CORRESPOND AU MONTAGE < D'UN VOLUME QUE L'ON SUPPOSE INITIALISE ; < IL LIT SON DESCRIPTEUR DANS LE BUFFER < RESIDENT ATTACHE AU DISQUE QUI LE SUP- < PORTE, ET ENFIN VALIDE CE DESCRIPTEUR. < < < ARGUMENTS : < (B)='NSP' DU DISQUE SUPPORT DU VOLUME, < (L)=ADRESSE DE LA 'DCTSER', < (W)=ADRESSE DE LA 'DCTESC', < (VALESC)=NUMERO DU VOLUME ATTENDU. < < P2SGU: EQU $ < < VALIDATION PREALABLE SUR < L'ETAT DU SYSTEME : < LA ETASYS < (A)=LISTE DES INDICATEURS D'ETAT : XR B,X < (X)='NSP' DU DISQUE DEMANDE, TBT NBITAB+NBITAB-NSPDK,X < ALORS, EST-IL PRESENT ??? XR B,X < RESTAURATIONS... JNC P1SGU2 < NON, LE DISQUE DEMANDE N'EST PAS LA, < ON REFUSE LA DEMANDE DE MONTAGE... < < VALIDATION DU NUMERO DE VOLUME DEMANDE : < LA VALESC-DCTESK,W < (A)=NUMERO DU VOLUME DEMANDE : IF MONT0-K,,XEIF%, IF ATTENTION : LE TEST QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF JAE P1SGU2 < LE NUMERO DE VOLUME DEMANDE NE PEUT ETRE < NUL, CAR UN NUMERO DE VOLUME NUL SIGNIFIE < L'ABSENCE DE VOLUME... < < INITIALISATION PRELIMINAIRE DU < BUFFER DE VOLUME (AU CAS OU IL < Y AURAIT DES ERREURS) : < PSR X,L LR B,X < (X)='NSP' DU DISQUE DEMANDE, P2SGU1: EQU $ BSR ACADCT < (A)=(L)=ADRESSE DE SA 'DCT', LA VAR+ABVOLU < ACCES AU BUFFER DE VOLUME, LR A,L < (L)=ADRESSE DU BUFFER DU DESCRIPTEUR < DE VOLUME : STB VOLNSP,L < MISE EN PLACE DU 'NSP' DU DISQUE OU < DE 'NSPVID' EN CAS D'ERREUR, LA VALESC-DCTESK,W < (A)=NUMERO VALIDE DU VOLUME, STA VOLNUM,L < QUE L'ON MET DANS LE DESCRIPTEUR (EN < CAS D'ERREUR, IL EST NUL...). LR X,B < RESTAURATION DU 'NSP' DU DISQUE DANS < 'B' (REDONDANT, SAUF EN CAS D'ERREURS). CPI MONT0 < MAIS EN FAIT, Y-A-T'IL EU ERREUR ??? < (ON FAIT CE TEST, CAR 'A' VA ETRE < DETRUIT...) LR L,A < (A)=ADRESSE DU BUFFER CONTENANT LE < DESCRIPTEUR DE VOLUME (CAR ON VA < MODIFIER 'L'). PLR X,L < RESTAURATIONS : < (X)=INDEX DE LA GRAMMAIRE 'CCI', < (L)=ADRESSE DE LA 'DCTSER'. JE P1SGU2 < ERREUR, LORS D'UNE DEMANDE DE MONTAGE < OU D'INITILISATION... < < LECTURE DU DESCRIPTEUR DE VOLUME : < STA VAR+DEMCCI+T+AMDEM < MISE EN PLACE DE L'ADRESSE MOT DU BUFFER, PSR B,W LAD VAR+DEMCCI LR A,W < (W)=ADRESSE DE LA DEMANDE GENEREE... SWBR B,A < MISE EN PLACE DU 'NSP' DU DISQUE, ORI XDSYM?XTYPAD < DU MODE SYMBOLIQUE, ET DE L'ADRESSAGE < PAR MOT, STA NSPTYP < GENERATION DU 'NSPTYP'. LAI FGR STA ARGDEM+OPDEM < MISE EN PLACE DE LA FONCTION DE LECTURE. LRM A,B WORD LVOL*NOCMO < (A)=LONGUEUR EN OCTETS DU DESCRIPTEUR, WORD SECVOL < (B)=ADRESSE EN Q-SECTEURS DE CELUI-CI. STA ARGDEM+CODEM < 'CODEM' DE LA DEMANDE, STB ARGDEM+ASDEM < ET ADRESSE DU DESCRIPTEUR. BSR ACHAND < ENVOI DE LA DEMANDE (W) DE LECTURE DU < DESCRIPTEUR, BSR ACHANW < ATTENTE DE FIN... LA ARGDEM+AMDEM < (A)=ADRESSE MOT DU DESCRIPTEUR, PLR B,W < RESTAURATIONS : < (B)='NSP' DU DISQUE, < (W)=ADRESSE DE 'DCTESC'. < < VALIDATIONS DU VOLUME VIA SON DESCRIPTEUR : < PSR L < ET SAUVEGARDES... LR A,L < (L)=BASE DU DESCRIPTEUR... LA VALESC-DCTESK,W < (A)=NUMERO DU VOLUME DESIRE, CP VOLNUM,L < EST-CE LE VOLUME MONTE ??? JNE P2SGU2 < NON, DEMANDE REFUSE... LAI LVOLIM < OUI, VALIDATION DES CLEFS : CP VOL23,L < VALIDATION DE LA 2EME CLEF??? JNE P2SGU2 < MAUVAIS... LRM A WORD CLEVOL CP VOLCLE,L < VALIDATION DE LA 1ERE CLEF??? JNE P2SGU2 < MAUVAIS... LA ACNESC-DCTESC,W CP VOLACN,L < VALIDATION DU NUMERO DE COMPTE??? JNE P2SGU2 < LE NUMERO DE COMPTE DU VOLUME DIFFERE < DE CELUI DE L'UTILISATEUR... LA ACNESC-DCTESC+U,W CP VOLACN+U,L < VALIDATION DU NUMERO DE COMPTE??? JNE P2SGU2 < LE NUMERO DE COMPTE DU VOLUME DIFFERE DE < CELUI DE L'UTILISATEUR... < < VALIDATION DE LA TABLE D'ALLOCATION : < PSR B,X,Y < SAUVEGARDES DIVERSES. LBI K < (B)=COMPTEUR DES BITS A 1. LRM X,Y WORD L < (X)=NUMERO DU PREMIER BIT A TESTER, WORD NVOLIM < (Y)=NUMERO DU PREMIER BIT A NE PAS TESTER LAD VOLTAB,L < (A)=ADRESSE DE LA TABLE D'ALLOCATION. P2SGU3: EQU $ DRBM < RECHERCHE DU PREMIER BIT A 1... JC P2SGU4 < C'EST FINI, IL N'Y EN A PLUS... SBTM L,X < ON ANNULE L'EFFET DU 'DRBM'... ADRI I,B < COMPTAGE DES BITS A 1... ADRI BIT,X < ET OUI, IL VAUT MIEUX DEPASSER LE BIT < QUE L'ON VIENT DE TROUVER A 1... JMP P2SGU3 < VERS LE SUIVANT... P2SGU4: EQU $ LR B,A < (A)=NOMBRE DE BITS TROUVES A 1 DANS LA < TABLE D'ALLOCATION DES BLOCS, PLR B,X,Y CP VOLNIM,L < VAUT-IL LE NOMBRE DE BLOCS LIBRES ??? JE P2SGU5 < OUI, C'EST ENCORE HEUREUX... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE, MAIS CELA EST POSSIBLE < CAR UN UTILISATEUR VICIEUX PEUT ALLER < BRICOLER SON VOLUME A LA MAIN !!! < CP VOLNIM,L < REPOSITIONNEMENT DES INDICATEURS... P2SGU5: EQU $ P2SGU2: EQU $ PLR L < RESTAURE : (L)=ADRESSE DE 'DCTSER'... JNE P3SGU4 < CAS DES ERREURS SUR VOLUME : < 1 - SOIT LE VOLUME N'EST PAS FORMATTE, < 2 - SOIT LE NUMERO DE COMPTE DU VOLUME < N'EST PAS CELUI DE L'UTILISATEUR, < 3 - SOIT LE NOMBRE DE BLOCS LIBRES EST < INCOHERENT, < 4 - SOIT LE NUMERO DE VOLUME EST DIFFE- < RENT DE CELUI QUI EST DEMANDE. < < OK, LE MONTAGE EST EFFECTUE : < LA IDDESC-DCTESC,W < (A)=LISTE DES INDICATEURS UTILISATEUR : TBT IDESC8 < REVALIDATION DE 'IDESC8' : JNC P2SGU6 < OK, NON POSITIONNE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE, COMMENT ALORS QU'ON A < TROUVE 'IDESC8' A 0 DANS 'P4SGU', ON < LE TROUVE MAINTENANT A 1 !!! < P2SGU6: EQU $ SBT IDESC8 < ON MEMORISE QU'IL Y A UN VOLUME DE < MONTE POUR CET UTILISATEUR... STA IDDESC-DCTESC,W RSR A2SGU1: JMP P2SGU1 < RELAI... PAGE < < < I N I T I A L I S A T I O N D ' U N V O L U M E : < < < FONCTION : < CE MODULE PERMET D'INITIALISER < LE DESCRIPTEUR SUR LE VOLUME < COURANT (CLEFS, TABLE D'ALLOCA- < TION DES BLOCS,...). < < < ARGUMENTS : < (B)='NSP' DU DISQUE SUPPORT DU VOLUME, < (L)=ADRESSE DE LA 'DCTSER', < (W)=ADRESSE DE LA 'DCTESC', < (VALESC)=NUMERO DU VOLUME SOUHAITE. < < P3SGU: EQU $ < < VALIDATION DU NUMERO DE VOLUME SOUHAITE : < CPZ VALESC-DCTESK,W JE P1SGU2 < ERREUR, LE NUMERO DE VOLUME DEMANDE EST < NUL, CE QUI CORRESPOND EN FAIT A L'AB- < SENCE DE VOLUME... < < VALIDATION DU CONTEXTE SYSTEME : < LA ETASYS < ACCES A LA LISTE DES INDICATEURS DE < CONTROLE DU SYSTEME... XR B,X < (X)='NSP' DU DISQUE DEMANDE, ET < (B)=SAVE 'X'... TBT NBITAB+NBITAB-NSPDK,X < LE DISQUE DEMANDE EST-IL LA ??? XR B,X < RESTAURE 'B' ET 'X'... JNC P1SGU2 < NON, L'INITIALISATION NE PEUT DONC AVOIR < LIEU, ERREUR !!! < < ACCES AU BUFFER DU DESCRIPTEUR : < PSR B,X,L LR B,X < (X)='NSP' DU DISQUE, BSR ACADCT < (A)=(L)=ADRESSE DE SA 'DCT', LB VAR+ABVOLU < (B)=ADRESSE DU BUFFER DU DESCRIPTEUR. LR B,L < 'L' BASE LE BUFFER DU DESCRIPTEUR... < < INITIALISATION DU DESCRIPTEUR EN MEMOIRE : < LA VALESC-DCTESK,W STA VOLNUM,L < NUMERO DE VOLUME, STX VOLNSP,L < 'NSP' DU DISQUE D'INITIALISATION, LA ACNESC-DCTESC,W STA VOLACN,L LA ACNESC-DCTESC+U,W STA VOLACN+U,L < <ACN> DU DEMANDEUR D'INITIALISATION, < (LE VOLUME EST DONC PRIVE...) LRM A,X WORD CLEVOL WORD NVOLIM STA VOLCLE,L < PREMIERE CLEF DE VALIDATION, STX VOLNIM,L < NOMBRE DE BLOCS INITIALEMENT LIBRES, LAI LVOLIM STA VOL23,L < DEUXIEME CLEF DE VALIDATION, ET CONSTANTE < PERMETTANT DES CONVERSIONS NUMEROS DE < BLOC <--> ADRESSE DE Q-SECTEURS. LAD VOLTAB,L LR A,L < (L)=ADRESSE DE LA TABLE D'ALLOCATION. LXI MVOLIM < (X)=NOMBRE DE MOTS A INITIALISER. LAI MMOT < (A)=CONFIGURATION DE CHAQUE MOT CORRES- < PONDANT A UN ETAT LIBRE INITIAL. P3SGU1: EQU $ STA O,L < INITIALEMENT, TOUS LES BLOCS SONT LIBRES, ADRI D,L < PASSAGE AU MOT SUIVANT, JDX P3SGU1 < S'IL EXISTE... XWOR%1: VAL LVOLTA-MVOLIM < NOMBRE DE MOTS RESIDUELS DANS LE DESCRIP- < TEUR DERRIERE LA TABLE D'ALLOCATION. IF XWOR%1-K,,XEIF%,XEIF% IF ATTENTION : LA LONGUEUR RESIDUELLE EST NEGATIVE !!! XEIF%: VAL ENDIF IF XWOR%1-K,XEIF%,XEIF%, LXI XWOR%1 < (X)=LONGUEUR DU RESIDU. P3SGU2: EQU $ STZ O,L < CLEAR DE LA FIN DU DESCRIPTEUR... ADRI D,L < AU MOT SUIVANT, JDX P3SGU2 < S'IL EXISTE... XEIF%: VAL ENDIF < < INITIALISATION DU VOLUME PAR < ECRITURE DE SON DESCRIPTEUR : < LR B,A < (A)=ADRESSE DU BUFFER DU DESCRIPTEUR. PLR B,X,L < RESTAURATIONS : < (B)='NSP' DU DISQUE, < (X)=INDEX DE LA GRAMMAIRE 'CCI', < (L)=ADRESSE DE LA 'DCTSER'. PSR B,W < ET SAUVEGARDES... LR A,W < (W)=ADRESSE DU BUFFER DU DESCRIPTEUR, ET < CECI TEMPORAIREMENT... LAD VAR+DEMCCI XR A,W < (W)=ADRESSE DE LA DEMANDE, ET < (A)=ADRESSE DU BUFFER DU DESCRIPTEUR. STA ARGDEM+AMDEM < GENERATION DE 'AMDEM'. SWBR B,A < MISE EN PLACE DU 'NSP' DU DISQUE, ORI XDSYM?XTYPAD < POSITIONNEMENT DU MODE SYMBOLIQUE, ET < DE L'ADRESSAGE MOT. STA NSPTYP < GENERATION DU 'NSPTYP'. LAI FGW STA ARGDEM+OPDEM < MISE EN PLACE D'UNE FONCTION D'ECRITURE. LRM A,B WORD LVOL*NOCMO < (A)=LONGUEUR DU BUFFER DU DESCRIPTEUR, WORD SECVOL < (B)=ADRESSE Q-SECTEUR DU DESCRIPTEUR. STA ARGDEM+CODEM < GENERATION DU 'CODEM', STB ARGDEM+ASDEM < ET DE 'ASDEM'. BSR ACHAND < ENVOI DE LA DEMANDE D'ECRITURE, WAIT WEIO < ET ATTENTE DE FIN... CPZ ARGDEM+ETADEM < COMMENT CELA S'EST-IL PASSE ??? PLR B,W < RESTAURATIONS : < (B)='NSP' DU DISQUE, ET < (W)=ADRESSE DE 'DCTESC'. < < TRAITEMENT DES ERREURS A L'INITIALISATION, < OU LORS DU MONTAGE : < P3SGU4: EQU $ < ENTRY POUR LES ERREURS LORS DU MON- < TAGE (MAUVAIS VOLUME, OU INCOHERENCE < DE NUMERO DE COMPTE,...). PSR X,L LR B,X < (X)='NSP' DU DISQUE.. JE P3SGU3 < OK, TOUT EST BON... LBI NSPVID < (B)='NSPVID', IF MONT0-K,,XEIF%, IF ATTENTION : LE 'STZ' EST MAUVAIS !!! XEIF%: VAL ENDIF STZ VALESC-DCTESK,W < ON FORCE UN NUMERO DE VOLUME NUL, INDI- < QUANT AINSI, QU'IL N'Y A PAS DE VOLUME < MONTE, ET QUE L'ON DOIT FAIRE SEULEMENT < LA PREMIERE PARTIE DU MONTAGE... P3SGU3: EQU $ JMP A2SGU1 < VERS UNE INITIALISATION PARTIELLE < DU BUFFER DU DESCRIPTEUR (MONTAGE)... PAGE < < < D E M O N T A G E D ' U N V O L U M E : < < < FONCTION : < CE MODULE DEMONTE EXPLICITEMENT < LE VOLUME COURANT (TOUT EN NOTANT < QUE LA DESASSIGNATION DU 'NVP' < ASSOCIE PROVOQUE UN DEMONTAGE < IMPLICITE). < < < ARGUMENTS : < (B)='NSP' DU DISQUE D'EXTENSION DE VOLUME, < (L)=ADRESSE DE 'DCTSER', < (W)=ADRESSE DE 'DCTESC'. < < P5SGU: EQU $ < < MISE A JOUR DU DESCRIPTEUR DE VOLUME : < (NOTA : ON N'A PAS A LE REECRIRE < PUISQUE LE 'SGN' LE REECRIT APRES < CHAQUE MISE A JOUR) < PSR X,L LR B,X < (X)='NSP' DU DISQUE D'EXTENSION : BSR ACADCT < (A)=(L)=ADRESSE DE LA 'DCT' DU DISQUE < D'EXTENSION SUR VOLUME. LA VAR+ABVOLU LR A,L < (L)=ADRESSE DU BUFFER DU DESCRIPTEUR < DE VOLUME : IF MONT0-K,,XEIF%, IF ATTENTION : LE 'STZ' EST IDIOT !!! XEIF%: VAL ENDIF STZ VOLNUM,L < SUPPRESSION DU NUMERO DE VOLUME, LAI NSPVID STA VOLNSP,L < DEMONTAGE... PLR X,L < < DEMONTAGE AU NIVEAU DE 'DCTESC' : < LA IDDESC-DCTESC,W TBT IDESC8 < REVALIDATION DE 'IDESC8'... JC P5SGU1 < OK, IL Y AVAIT UN VOLUME MONTE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT 'IDESC8' PEUT ETRE < A 0, ALORS QUE DANS 'P4SGU' ON L'A < TROUVE A 1 !!! < P5SGU1: EQU $ RBT IDESC8 < DEMONTAGE... STA IDDESC-DCTESC,W RSR PAGE < < < E N T R E L A C A G E D E S L E C T U R E S R A P I D E S < ' D K U ' --> ' M E M T V ' : < < < FONCTION : < CES 2 MODULES REFERENCES PAR < LE 'CCI' SUITE AUX COMMANDES < "!DKU S" ET !DKU F" PERMETTENT < D'AUTORISER/INHIBER L'ENTRELACAGE < LORS DE LA FONCTION 'FONTVR' SUR < LE DISQUE 'DKU'. < < PFAST: EQU $ < COMMANDE "!DKU F" : PFAST1: EQU PFAST < A CAUSE PFAST2: EQU PFAST < DE PFAST3: EQU PFAST < L'ASSEMBLEUR... LRM A WORD AMEMTV < (A)=ADRESSE-MOTS DE LA ZONE VISUALISEE. JMP PVITES < VERS LA MEMORISATION... PSLOW: EQU $ < COMMANDE "!DKU S" : LRM A WORD AMEMTW < (A)=ADRESSE-MOTS DE LA ZONE INTERME- < DIAIRE D'ENTRELACAGE, < < MEMORISATION DE LA COMMANDE : < PVITES: EQU $ PSR W CALL #SISP CMS5 W ZERO# < (W)=BASE LA MEMOIRE DEBANALISEE, STA TVENTR-ZERO,W < MEMORISATION DE "!DKU S"/"!DKU F"... PLR W RSR < ET C'EST TOUT... PAGE < < < G E S T I O N D E L A S Y N C H R O N I S A T I O N < S U R L E S E C T E U R 0 D E ' D K U ' , < A I N S I Q U E D E S E S E R R E U R S H A R D S : < < < FONCTION : < CES 2 MODULES SONT REFERENCES < PAR LE 'CCI' VIA LES COMMANDES < "!DK S0 ON" ET "!DK S0 OFF" QUI < PERMETTENT RESPECTIVEMENT DE < DEMANDER A 'DKU' DE SE SYNCHRONISER < SUR LE SECTEUR 0 DE CHAQUE PISTE < (ET PLUS DE "RETURN TO ZERO TRACK" < SUR ERREUR HARD), ET LE CONTRAIRE... < < PS0ON: EQU $ < "!DK S0 ON" : SYNCHRONISATION SUR LE < SECTEUR 0 DE CHAQUE PSITE DE 'DKU', ET < PLUS DE "RETURN TO ZERO TRACK" SUR < ERREUR HARD. BSR ASMMK < M A S Q U A G E I N T E R R U P T S... LA MEMV SBT XSYNC0 < ON AUTORISE... JMP PS0ON1 < VERS LA MISE A JOUR... PS0OFF: EQU $ < "!DK S0 OFF" : 'DKU' NE DOIT PAS SE < SYNCHRONISER SUR LE SECTEUR 0 DE < CHAQUE PISTE, ET FAIRE UN "RETURN TO < ZERO TRACK" POUR CHAQUE ERREUR HARD. PS0OF1: EQU PS0OFF < A CAUSE PS0OF2: EQU PS0OFF < DE PS0OF3: EQU PS0OFF < L'ASSEMBLEUR... BSR ASMMK < M A S Q U A G E I N T E R R U P T S... LA MEMV RBT XSYNC0 < ON INHIBE... < < SORTIE COMMUNE A "ON"/"OFF" : < PS0ON1: EQU $ STA MEMV < MISE A JOUR DE 'MEMV', BSR ASMDK < D E M A S Q U A G E... RSR < < < L ' U T I L I S A T E U R A - T ' I L ' D K U ' : < < < FONCTION < LES COMMANDES "!DK..." NE < SONT AUTORISEES QU'A L'UTILISATEUR < QUI S'EST ASSIGNE 'DKU', CE QUE VERI- < FIE LE MODULE SUIVANT... < CET ACCES UNIQUE EST MIS EN < PLACE D'UNE PART POUR EVITER DES < ERREURS DE MANIPULATION DU TYPE < UN UTILISATEUR 1 EST EN TRAIN < D'ECRIRE SUR 'DKU' ALORS QU'UN < DEUXIEME ENVOIE "!DK S0 ON"... < D'AUTRE PART, AFIN DE GERER < CORRECTEMENT LES REPRISES SUR < ERREUR LORS DES 'STN' SUR VOLUME < AMOVIBLE, IL FAUT QUE LE 'STN' < ECRIVE SUR LE DISQUE D'EXTENSION < EN MODE "!DK S" ; AFIN D'EVITER < QU'UNE COMMANDE "!DK F" SOIT < EMISE SIMULTANEMENT PAR UN AUTRE < UTILISATEUR, LA SEULE SOLUTION < EST DE RESERVER "!DK S/F" A L'UTI- < LISATEUR QUI FAIT LES ACCES < SUR VOLUME ET QUI S'EST DONC < ASSIGNE LE DISQUE... < < < ARGUMENTS : < (B)='NSPDKU', < (W)=ADRESSE DE 'DCTESC'. < < PS0AS: EQU $ LYI K < RETOUR OK A PRIORI... PSR X < SAUVEGARDE DE L'INDEX COURANT DE LA < GRAMMAIRE DU 'CCI'. LXI NOCMO*LTASGN-Z < (X)=INDEX DE LA TABLE DES ASSIGNATIONS, PS0AS1: EQU $ LBY &TASSGN-DCTESC,W CPR A,B < LE 'NSP' COURANT (A) EST-IL CELUI < DE 'DKU' (B) ??? JE PS0AS2 < OUI, DONC "!DK S0..." ACCEPTEE... JDX PS0AS1 < NON, AU 'NSP' SUIVANT S'IL EXISTE... LYI XCCIER < ET BIEN NON, L'UTILISATEUR N'A PAS < 'DKU', LA COMMANDE EST REFUSEE... PS0AS2: EQU $ PLR X < RESTAURATION DE L'INDEX DE LA GRAMMAIRE < DU 'CCI', ADR Y,X < ET PREPARATION DU RETOUR... RSR < ET C'EST TOUT... PAGE < < < R O U T I N E D ' I T D K M < < < RAPPEL : < AVEC 'DKM' ET 'DKU', ON < TRAVAILLE EN CANAL 'HDC' ; < ON RECUPERE DONC EN FIN DE < 'SEEK', DE 'RESET' OU D'ECHANGE, < UNE INTERRUPTION D'EXCEPTION... < CETTE INTERRUPTION RETOMBE < PAR LA LECTURE DES MOTS D'ETAT < 'A' ET 'B' DANS 'ETAT0' ET < 'ETAT1' DES 'DCT' CORRESPON- < DANTES POUR UNE EXPLOITATION < ULTERIEURE PAR LES HANDLERS. < MALGRE CELA, LE REVEIL DU < HANDLER N'A LIEU QUE S'IL Y < A UN ECHANGE EN COURS. < < NOTA : < EN CAS D'INTERRUPTION < NORMALE, ON PROVOQUE UNE < 'SYSER'... < < < ARGUMENT : < (B)=0 : INTERRUPTION NORMALE, < =1 : INTERRUPTION D'EXCEPTION. < < ITDKM: EQU $ ITDKU: EQU ITDKM CPZR B < QUELLE EST LA NATURE DE L'INTERRUPTION ?? JNE SYSRBD < D'EXCEPTION, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT UNE < INTERRUPTION NORMALE A PU < SE PRODUIRE SUR 'DKM' OU 'DKU' !!! < SYSRBD: EQU $ SIO VAR+EADKM < ENTREE DU MOT D'ETAT 'A', STA ETAT0 < (ETAT0)=MOT D'ETAT 'A'. SIO VAR+EBDKM < ENTREE DU MOT D'ETAT 'B', STA ETAT1 < (ETAT1)=MOT D'ETAT 'B'. BSR ATEC < Y-A-T'IL UN ECHANGE EN COURS ??? JE ITDKM1 < NON, DONC PAS DE REVEIL DU HANDLER... BSR ARVHDL < OUI, ON REVEILLE DONC LE HANDLER... ITDKM1: EQU $ RSR < THAT'S ALL FOLK... PAGE < < < C O N S T A N T E S D I V E R S E S : < < XZDK1:: VAL NEXIST < 'PAS DE WAIT', XZDK2:: VAL XZDK1+I < 'AVEC WAIT'. XZDK3:: VAL XZDK1-I < ECRITURE SGF OPTIMISEE OU LECTURE < SGF NON OPTIMISEE. XZDK4:: VAL XZDK3-I < ECRITURE SGF SANS OPTIMISATION, OU < CE N'EST PAS UNE ECRITURE SGF. < OU C'EST UNE LECTURE NON SGF. XZDK5:: VAL XZDK3+I < LECTURE SGF OPTIMISEE 1ER TOUR. XZDK6:: VAL XZDK5+I < LECTURE SGF OPTIMISEE 2EME TOUR. XLRUR:: VAL K < MODE DE GESTION DES 'LRU' PAR ROTATION : < ON AMENE PAR DECALAGE CIRCULAIRE L'ENTREE < COURANTE EN TETE. XLRUP:: VAL XLRUR+I < MODE DE GESTION DES 'LRU' PAR PERMUTA- < TION : L'ENTREE COURANTE EST PREMUTEE < AVEC L'ENTREE PRECEDENTE (SAUF EN TETE, < BIEN ENTENDU...). IF XLRUP-XLRUR,XEIF%,,XEIF% IF ATTENTION : LES TEST DISCRIMINATOIRES IF SONT IMPOSSIBLES !!! XEIF%: VAL ENDIF PAGE < < < S I M U L A T E U R D E M E M O I R E < V I R T U E L L E S U R D K F : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTDKA: EQU $ PSTDKA: WORD K;K;K;K;COM+DEPCS;DCTDKA;NIL;PILDKA;HANDLR;SMST;SO;SE #@ASCI " DKA" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XXDCTP < ETALOC=XXDCTP A' NON LOUABLE. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR 'DKA'. WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR 'DKA. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLDKA < ROUTINE SPECIFIQUE. WORD NIL < PAS DE RIT. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. XWOR%1: VAL K XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < LISTE DES FONCTIONS AUTORISEES. XWOR%1: VAL K < INITIALISATION... XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARDKA: EQU $ IF VARDKA-DCTDKA-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < SIMULATION DES TRANSFERTS : < XBMEMA:: VAL YY7 < LONGUEUR DES PAGES DE LA MEMOIRE < VIRTUELLE 'DKA'. WORD XBMEMA LBMEMA:: VAL $-D-VARDKA < LONGUEUR DES PAGES DE 'DKA'. WORD MOVEV AMOVEV:: VAL $-D-VARDKA < SOUS-PROGRAMME COMMUN A 'DKA' ET 'DKB' < DE SIMULATION DES TRANSFERTS. WORD CHANDB ACHANB:: VAL $-D-VARDKA < SOUS-PROGRAMME D'ENVOI D'UNE DEMANDE < PAR 'CHAND' AVEC FORCAGE DE LA PAGE 0... < < DEMANDE A 'DKF' : < XWOR%1: VAL MSPTYP=K < POUR CADRER LE 'NSP'... XWOR%2: VAL NSPDKF>XWOR%1 < INITIALISATION DE NSPTYP. XWOR%2: VAL COSBT?TYPAD=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?PRIO=FMASK(K?XWOR%2=FCINST WORD XWOR%2 < NSPTYP. DKADEM:: VAL $-D-VARDKA < DEMANDE AU 'DKF'. WORD NILK < OPDEM (0=LECTURE, 1=ECRITURE). WORD NIL < ADRESSE MOT DE LA PAGE REELLE. WORD XBMEMA*NOCMO < CODEM : ON MANIPULE 1 SECTEUR ENTIER. WORD NILS < ADRESSE PAGE VIRTUELLE (SECTEUR). WORD NILK WORD NILK WORD NIL DKADEN:: VAL $-VARDKA < DEMANDE DESTINEE AUX TRANSITS DES < DEMANDES DONT LE CODEM EST TROP < GRAND ; AU QUEL CAS ON LES ENVOIE < DIRECTEMENT A 'DKF'... DZS LDEM0 < < DEFINITION DE LA MEMOIRE VIRTUELLE : < DKNSO:: VAL ZERBV < 1ERE PAGE VIRTUELLE. DKNSD:: VAL ZERBNV-Z < DERNIERE PAGE VIRTUELLE. WORD DKNSO DKANSO:: VAL $-D-VARDKA < 1ERE PAGE VIRTUELLE. WORD DKNSD DKANSD:: VAL $-D-VARDKA < DERNIERE PAGE VIRTUELLE. < < DIVERS : < WORD XLRUR DKAMOD:: VAL $-D-VARDKA < MODE DE GESTION DE LA 'LRU' : INITIA- < LISE POUR UNE GESTION PAR PERMUTATION... WORD XZDK2 DKAW:: VAL $-D-VARDKA < INDICATEUR DE 'WAIT' PRELIMINAIRE... < 1 : PAS DE WAIT PRELIMINAIRE, < 0 : WAIT PRELIMINAIRE. WORD SPDKA ASPDKA:: VAL $-D-VARDKA < SOUS-PROGRAMME D'E/S SUR 'DKF'. WORD NILS DKAAS:: VAL $-D-VARDKA < TRANSIT D'UN 'ASDEM'. WORD NILK DKAOP:: VAL $-D-VARDKA < TRANSIT D'UN 'OPDEM'. < < < P I L E : < < CALL #SISP CMS5 DOL2# PILDKA: EQU $-DEPILE XWPILE: VAL LPILEH+20 CALL #SISP CMS5 GENPIL2# < < < P A G E S R E E L L E S : < < DKAPAG:: VAL '26 < NOMBRE DE PAGES REELLES. PAGES: EQU $ DO DKAPAG DZS XBMEMA < < < D E F I N I T I O N D E L A ' L R U ' : < < < DEFINITION D'UNE ENTREE : < MOT0=Q8000 SI L'ENTREE EST INOCCUPEE, < =ADRESSE PAGE VIRTUELLE (SECTEUR) SI OCCUPEE. < MOT1=ADRESSE MOT DE LA PAGE REELLE. < < PAVIR:: MOT O < MOT0 D'UNE ENTREE LRU. PARES:: MOT PAVIR+D < MOT1 D'UNE ENTREE LRU. XWOR%1: VAL XBMEMA=K < POUR CALCULER DES ADRESSES DE BUFFERS. IF BIT>XWOR%1-XBMEMA,,XEIF%, IF ATTENTION : 'XBMEMA' N'EST PAS UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF DKALRU: EQU $ DO DKAPAG WORD Q8000;K=FCDO)MFFFF+N+DKAPAG-Z>XWOR%1+PAGES LARU:: VAL $-DKALRU/DKAPAG < LONGUEUR D'UNE ENTREE. CALL #SISP CMS5 CHECK# PAGE < < < S I M U L A T E U R D E M E M O I R E < V I R T U E L L E S U R D K F : < < < FONCTION : < CE FAUX DISQUE EST UN SIMULATEUR < DE MEMOIRE VIRTUELLE; IL ESSAYE DE < TENIR EN MEMOIRE CENTRALE LES SECTEURS < DE 'DKF' LES PLUS UTILISES A L'AIDE < D'UNE LISTE 'LRU'. POUR DES RAISONS < EVIDENTES DE SECURITE, A CHAQUE FOIS < QU'UNE ECRITURE EST DEMANDEE, ELLE < EST FAITE DANS UNE PAGE VIRTUELLE, < MAIS AUSSI SUR DISQUE (EN PARALLELE). < < USE L,DCT0 USE W,DEM0 HDLDKA: EQU $ LR W,Y < (Y)=SAVE L'ADRESSE DE LA DEMANDE. < < VALIDATION DES ARGUMENTS : < LA ARGDEM+OPDEM XWOR%1: VAL FGR?FGW=K < POUR DISCRIMINER LECTURE/ECRITURE... RBT NBITMO-B-XWOR%1 JAE SYSRBE < OK, OPDEM=K OU 2... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VOIR LE DEMANDEUR, POUR < VOIR CE QU'IL VEUT VRAIMENT... < SYSRBE: EQU $ LA ARGDEM+CODEM CP VAR+DKADEM+T+CODEM JG DKA10 < TROP GRAND, ENVOI DIRECT A 'DKF'. JAG SYSRBF < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < S'EN ALLER... < SYSRBF: EQU $ LA ARGDEM+ASDEM CP VAR+DKANSO < LE SECTEUR DEMANDE EST-IL DANS < LA MEMOIRE VIRTUELLE ??? JL DKA1 < NON, ERREUR... CP VAR+DKANSD < MEME QUESTION... JLE DKA50 < OUI, OK... DKA1: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... JMP DKA10 < PUIS ENVOI A 'DKF'... < < RECHERCHE DU SECTEUR DEMANDE (A) DANS LA LRU : < DKA50: EQU $ LRM X,W WORD DKAPAG < (X)=NOMBRE D'ENTREES DE LA LRU, WORD DKALRU-LARU < (W)=ADRESSE PRECEDENTE DE LA LRU. LR A,B < (B)=SECTEUR DEMANDE (PAGE VIRTUELLE). DKA2: EQU $ ADRI LARU,W < ACCES A L'ENTREE COURANTE. LA PAVIR,W < (A)=PAGE VIRTUELLE COURANTE. CPR A,B < EST-CE LA PAGE DEMANDEE ??? JE DKA3 < OUI, PAGE TROUVEE RESIDENTE. CP INFINI < EST-ON SUR LA PREMIERE ENTREE LIBRE ??? JE DKA4 < OUI, LA PAGE N'EST PAS TROUVEE, < MAIS LA LRU N'EST PAS PLEINE. JDX DKA2 < A L'ENTREE SUIVANTE... < < PAGE NON TROUVEE, ET LRU PLEINE : < < < NOTA : LA PAGE SE TROUVANT EN QUEUE DE LA < 'LRU' PEUT ETRE ECRASEE SANS SOUCIS, EN < EFFET, OU BIEN ELLE N'A ETE QUE LUE, ET < DONC SA COPIE DISQUE EST CORRECTE, OU BIEN < ELLE A ETE ECRITE AU MOINS UNE FOIS, ET TOUTE < MISE A JOUR DE LA MEMOIRE VIRTUELLE S'ACCOMPA- < GNE EN PARALLELE D'UNE MISE A JOUR DU DISQUE... < < < PAGE NON TROUVEE, ET LA LRU A AU MOINS UNE ENTREE DISPONIBLE : < DKA4: EQU $ STB PAVIR,W < (B)=PAGE DEMANDEE, QUE L'ON MET DANS < L'ENTREE LIBRE D'ADRESSE (W). XR W,Y < (W)=ADRESSE DEMANDE ARGUMENT. LA ARGDEM+OPDEM XR W,Y JANE DKA3 < (A)=2 : C'EST UNE ECRITURE DE PAGE. STB VAR+DKAAS < (A)=0 : C'EST UNE LECTURE, IL FAUT < DONC AMENER LA PAGE (B) EN MEMOIRE. STZ VAR+DKAOP < DEMANDE DE LECTURE, LXI XZDK2 < AVEC WAIT (X=1). BSR VAR+ASPDKA < LECTURE DE LA PAGE DEMANDEE < AVEC ATTENTE DE FIN D'E/S. < < LA PAGE DEMANDEE EST RESIDENTE : < DKA3: EQU $ LA PARES,W < (A)=ADRESSE DE LA PAGE RESIDENTE, CP VAR+DKADEM+T+AMDEM JNE DKA40 < CE N'EST PAS LA PAGE QUI FUT CONCER- < NEE PAR L'ENTREE-SORTIE PRECEDENTE... CPZ VAR+DKAW < OUI, ALORS Y-A-T'IL LIEU D'ATTENDRE < LA FIN D'ENTREE-SORTIE ??? JNE DKA40 < NON... IC VAR+DKAW < OUI, MEMORISONS CETTE ATTENTE, WAIT VAR+DKADEM+X18 < ET ATTENDONS... DKA40: EQU $ XR Y,W < (W)=ADRESSE DE LA DEMANDE ARGUMENT. LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS DEMANDES, ADRI NOCMO-E,A < POUR PASSAGE A UN NOMBRE DE < MOTS AFIN D'ASSURER LA COMPATIBI- < LITE AVEC 'DKF'... SLRS NOCMO=K < CONVERSION EN UN NOMBRE DE MOTS. LR A,X < (X)=NOMBRE DE MOTS. LA NSPTYP TBT TYPAD < A-T'ON UNE ADRESSE MOT ??? LA ARGDEM+AMDEM < OUI A PRIORI... JC DKA6 < ET OUI, (A)=ADRESSE MOT... SLRS NOCMO=K < NON, CONVERSION... JNC SYSRBG < OK (ADRESSE PAIRE OCTETS)... BSR ASYSER < E R R E U R S Y S T E M E ... SYSRBG: EQU $ DKA6: EQU $ CPZ ARGDEM+OPDEM < LECTURE OU ECRITURE ??? XR Y,W LB PARES,W < (B)=ADRESSE MOT DE LA PAGE RESIDENTE, ET < (A)=ADRESSE-MOT DU BUFFER DEMANDE. JNE DKA7 < 2=ECRITURE : BUFFER --> PAGE. XR A,B < 0=LECTURE : PAGE --> BUFFER. DKA7: EQU $ BSR VAR+AMOVEV < SIMULATION DE L'ENTREE/SORTIE... < < ROTATION DE LA LRU : < LA PAVIR,W < SAVE LE NUMERO DE PAGE VIRTUELLE, LB PARES,W < ET L'ADRESSE MOT EN RESIDENT. LR W,X < (X)=ADRESSE COURANTE EN LRU, LRM W WORD DKALRU < (W)=ADRESSE DE LA LRU. CPR X,W < EST-ON DEJA EN TETE ??? JE DKA60 < OUI, RIEN A FAIRE... < ON A : < (A)=ADRESSE-DISQUE DE LA PAGE VIRTUELLE. PSR A,B < NON, SAUVEGARDE DU CONTENU DE L'ENTREE < COURANTE DE LA 'LRU'. CPZ VAR+DKAMOD < QUEL EST LE MODE DE GESTION DE LA 'LRU' ? IF XLRUR-K,,XEIF%, IF ATTENTION : LE TEST EST INCOHERENT !!! XEIF%: VAL ENDIF JE DKA62 < PAR ROTATION (DECALAGE CIRCULAIRE...)... < < PAR PERMUTATION (DE L'ENTREE < COURANTE ET DE L'ENTREE PRE- < CEDENTE : CETTE METHODE AMENE < PLUS DOUCEMENT EN TETE LES PAGES < LES PLUS UTILISEES, MAIS SURTOUT < NE MET PAS EN TETE LES PAGES RE- < FERENCEES UNE SEULE FOIS...) : < LR X,W < RESTAURE : < (W)=ADRESSE DE L'ENTREE COURANTE, ADRI -LARU,W < (W)=ADRESSE DE L'ENTREE PRECEDENTE, LA PAVIR,W < L'ENTREE LB PARES,W < PRECEDENTE STA PAVIR+LARU,W < RECULE STB PARES+LARU,W < D'UN "CRAN"... JMP DKA61 < VERS L'AVANCEE DE L'ENTREE COURANTE < D'UN "CRAN" (A LA PLACE DE L'ENTREE < PRECEDENTE...). < < PAR ROTATION (ON AMENE L'ENTREE < COURANTE EN TETE PAR DECALAGE < CIRCULAIRE) : < DKA62: EQU $ SBR W,X < (X)=NOMBRE DE MOTS A DEPLACER. LR W,A < (A)=EMETTEUR (ORIGINE DE LA LRU), LR W,B ADRI LARU,B < (B)=RECEPTEUR (LRU+LARU). MOVE < ROTATION... DKA61: EQU $ PLR A,B STA PAVIR,W < GENERATION DE L'ENTREE DE TETE, AVEC STB PARES,W < LA PAGE VIRTUELLE (A), ET L'ADRESSE < RESIDENTE (B) DANS LE CAS DE 'XLRUR', OU < DE L'ENTREE PRECEDENTE DANS LE CAS DE < 'XLRUP'... DKA60: EQU $ XR Y,W < (W)=ADRESSE DE LA DEMANDE. CPZ ARGDEM+OPDEM < LECTURE OU ECRITURE ??? IF FGR-K,,XEIF%, IF ATTENTION : LE TEST PRECEDENT VA MERDER !!! XEIF%: VAL ENDIF XR Y,W JE DKA8 < 0 : LECTURE, C'EST FINI... STA VAR+DKAAS < 2 : ECRITURE, ON VA ECRIRE LA PAGE LAI FGW < VIRTUELLE (A) EN PARALLELE. STA VAR+DKAOP < ECRITURE... LXI XZDK1 < (X)=K : PAS DE WAIT... BSR VAR+ASPDKA < ECRITURE DE LA PAGE VIRTUELLE EN < PARALLELE PAR MESURE DE SECURITE... DKA8: EQU $ STZ ETAT0 < RETOUR OK... LR Y,W < RESTAURE (W)=ADRESSE DE LA DEMANDE... RSR < < ENVOI DIRECT A 'DKF' DES ECHANGES TROP GRANDS : < DKA10: EQU $ < < RECHERCHE PREALABLE EN LRU : < LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS DEMANDES, AD VAR+DKADEM+T+CODEM ADRI -NOCMO+E,A < QUE L'ON MAJORE AFIN D'AVOIR UN SARD NBITMO < NOMBRE ENTIER DE BLOCS. DV VAR+DKADEM+T+CODEM LR A,X < (X)=NOMBRE DE BLOCS DE 'QUANTA' < SECTEURS DEMANDES, LB ARGDEM+ASDEM < (B)=ADRESSE DU PREMIER BLOC DE < 'QUANTA' SECTEURS DEMANDES. DKA80: EQU $ PSR B,X < SAVE L'ADRESSE DU PREMIER < ET LE NOMBRE... LRM X,W WORD DKAPAG < (X)=NOMBRE DE PAGES RESIDENTES. WORD DKALRU-LARU < (W)=ADRESSE COURANTE AVANT LRU. DKA42: EQU $ ADRI LARU,W < PASSAGE A L'ENTREE SUIVANTE. LA PAVIR,W < (A)=PAGE VIRTUELLE COURANTE. CPR A,B < EST-CE CELLE QUI EST DEMANDEE ??? JE DKA43 < OUI, IL FAUT L'ELIMINER... CP INFINI < EST-CE LA FIN DE LRU ??? JE DKA44 < OUI, ON N'A PAS TROUVE LA PAGE (B). JDX DKA42 < A L'ENTREE SUIVANTE. JMP DKA44 < ON N'A PAS TROUVE LA PAGE (B), < ET LA LRU EST PLEINE... < < ELIMINATION D'UNE PAGE VIRTUELLE PRESENTE EN < LRU ET CONCERNEE PAR UN ACCES DIRECT A 'DKF' : < DKA43: EQU $ LA PARES,W < (A)=SAVE L'ADRESSE-MOT DE LA ADRI -I,X CPZR X < EST-CE LA DERNIERE ENTREE LRU ??? JE DKA71 < OUI, RIEN A FAIRE... ADR X,X < (X)=NOMBRE DE MOTS A DEPLACER. IF LARU-2,,XEIF%, IF ATTENTION : LE 'ADR X,X' EST MAUVAIS !!! XEIF%: VAL ENDIF DKA70: EQU $ LB LARU,W < ACCES A UN MOT DE LA LRU, STB O,W < QUE L'ON DECALE DE -LARU MOTS. ADRI P,W < PASSAGE AU MOT SUIVANT, JDX DKA70 < S'IL EXISTE... DKA71: EQU $ < CAS DE LA DERNIERE ENTREE... STA PARES,W < REGENERATION DE LA DERNIERE ENTREE... LA INFINI STA PAVIR,W DKA44: EQU $ PLR B,X ADRI I,B < PASSAGE AU BLOC SUIVANT... JDX DKA80 < ET DECOMPTAGE... LR Y,W < RESTAURE (W)=ADRESSE DE LA DEMANDE... < < ENVOI DIRECT A 'DKF' : < LA NSPTYP ANDI MKTD < CONSERVONS QUELQUES INDICATEURS. STA VAR+DKADEN+XXNSP < GENERONS LE 'NSPTYP'... LAI NSPDKF STBY VAR+DKADEN+XXNSP < INSERTION DU 'NSP' VERS 'DKF'. LAD VAR+DKADEN+T LR A,B < (B)=@ZONE RECEPTRICE, LAD ARGDEM+OPDEM < (A)=@ZONE EMETTRICE, LXI ASDEM-OPDEM+Z < (X)=NOMBRE DE MOTS ARGUMENTS. MOVE < GENERATION DE LA DEMANDE DE TRANSIT. LAD VAR+DKADEN XR A,W < (A)=SAVE W, ET (W)=@DEMANDE DE TRANSIT. BSR ACHAND < ENVOI DE LA DEMANDE A 'DKF'. BSR ACHANW < ATTENTE DE FIN D'OPERATION, ON < NE PEUT FAIRE AUTREMENT, MEME < SI LE DEMANDEUR DESIRE FAIRE CETTE < ENTREE-SORTIE EN PARALLELE !!! XR A,W < RESTAURATIONS... JMP DKA8 < ET ON SORT... PAGE < < < E N T R E E S - S O R T I E S ' D K F ' : < < < ARGUMENTS : < (W)=ADRESSE COURANTE LRU, < (X)=0 : ENTREE-SORTIE SANS 'WAIT', < 1 : E/S AVEC WAIT... < (VOIR 'XZDK1' ET 'XZDK2') < (DKAAS)=PAGE VIRTUELLE DEMANDEE, < (DKAOP)=0 OU 2 (SENS DE L'OPERATION). < < SPDKA: EQU $ PSR B,W LB PARES,W < (B)=ADRESSE MOT DU BUFFER. LAD VAR+DKADEM LR A,W < (W)=ADRESSE DE LA DEMANDE 'DKF'. CPZ VAR+DKAW < Y-A-T'IL UNE E/S EN COURS ??? JNE SPDKA2 < NON... BSR ACHANW < OUI, ON ATTEND QU'ELLE SE TERMINE... SPDKA2: EQU $ STB ARGDEM+AMDEM < ADRESSE MOT DE LA PAGE RESIDENTE. LA VAR+DKAAS < ADRESSE DE LA PAGE VIRTUELLE. STA ARGDEM+ASDEM < (SECTEUR). LA VAR+DKAOP < SENS DE L'OPERATION... STA ARGDEM+OPDEM BSR VAR+ACHANB < ENVOI DE LA DEMANDE A 'DKF'... < (AVEC FORCAGE DE LA PAGE 0, EN EFFET < CETTE ENTREE-SORTIE SE FAIT DANS L'ESPA- < CE ABSOLU DU SYSTEME...) < (EN FORCANT LA PAGE 0...) CPZR X < FAUT-IL ATTENDRE ??? STX VAR+DKAW < ET ON MEMORISE CE FAIT... JE SPDKA1 < NON (X=K)... BSR ACHANW < OUI (X=1)... SPDKA1: EQU $ PLR B,W RSR PAGE < < < E N V O I D ' U N E D E M A N D E P A R ' C H A N D ' < A V E C F O R C A G E D E L A P A G E 0 : < < < FONCTION : < CE SOUS-PROGRAMME ENVOI < LA DEMANDE ARGUMENT PAR 'CHAND', < EN AYANT FORCE (SLO,SLE) AVEC < LES VALEURS (SO,SE) QUI PERMETTENT < DE N'ACCEDER QU'A LA PAGE 0... < < < ARGUMENT : < (W)=ADRESSE DE LA DEMANDE. < < CHANDB: EQU $ PSR A,B CALL #SISP CMS5 PSRSLO# < SAUVEGARDE DE (SLO,SLE) D'APPEL, < < POSITIONNEMENT SUR LA PAGE 0 : < CALL #SISP CMS5 PAGE0# < < ENVOI DE LA DEMANDE : < BSR ACHAND < EASY ?!???! < < RETOUR AU DEMANDEUR : < < RESTAURATION DE (SLO,SLE) D'APPEL : CALL #SISP CMS5 PLRSLO# PLR A,B RSR PAGE < < < S I M U L A T E U R D E M E M O I R E < V I R T U E L L E S U R ' D K M ' : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTDKB: EQU $ PSTDKB: WORD K;K;K;K;COM+DEPCS;DCTDKB;NIL;PILDKB;HANDLR;SMST;SO;SE #@ASCI " DKB" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XXDCTP < ETALOC=XXDCTP B' NON LOUABLE. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR 'DKB'. WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR 'DKB. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLDKB < ROUTINE SPECIFIQUE. WORD NIL < PAS DE RIT. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. XWOR%1: VAL K XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FOPURG=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < LISTE DES FONCTIONS AUTORISEES. XWOR%1: VAL K < INITIALISATION... XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FOPURG=FMASK(K?XWOR%1=FCINST WORD XWOR%1 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARDKB: EQU $ IF VARDKB-DCTDKB-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < SIMULATION DES TRANSFERTS : < XBMEMB:: VAL YY7Q < LONGUEUR DES PAGES DE LA MEMOIRE < VIRTUELLE 'DKB'. WORD XBMEMB LBMEMB:: VAL $-D-VARDKB < LONGUEUR DES PAGES DE 'DKB'. WORD MOVEV BMOVEV:: VAL $-D-VARDKB < SOUS-PROGRAMME COMMUN A 'DKB' ET 'DKA' < DE SIMULATION DES TRANSFERTS. WORD CHANDB BCHANB:: VAL $-D-VARDKB < SOUS-PROGRAMME D'ENVOI D'UNE DEMANDE < PAR 'CHAND' AVEC FORCAGE DE LA PAGE 0... < < DEMANDE A 'DKM' : < XWOR%1: VAL MSPTYP=K < POUR CADRER UN 'NSP'... XWOR%2: VAL NSPDKM>XWOR%1 < INITIALISATION DE NSPTYP. XWOR%2: VAL COSBT?TYPAD=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?PRIO=FMASK(K?XWOR%2=FCINST WORD XWOR%2 < NSPTYP. DKBDEM:: VAL $-D-VARDKB < DEMANDE AU 'DKM'. WORD NILK < OPDEM (K=LECTURE, 1=ECRITURE). WORD NIL < ADRESSE MOT DE LA PAGE REELLE. WORD XBMEMB*NOCMO < CODEM : ON MANIPULE 1 UNITE ENTIERE. WORD NILS < ADRESSE PAGE VIRTUELLE (SECTEUR). WORD NILK WORD NILK WORD NIL DKBDEN:: VAL $-VARDKB < DEMANDE DE TRANSIT DIRECT VERS < LE 'DKM' LORSQUE LES ENREGISTREMENTS < SONT TROP LONGS... DZS LDEM0 < < DIVERS : < WORD XLRUR DKBMOD:: VAL $-D-VARDKB < MODE DE GESTION DE LA 'LRU' : INITIALISE < SUR UNE GESTION PAR PERMUTATION DE < L'ENTREE COURANTE AVEC LA PRECEDENTE... WORD XZDK2 DKBW:: VAL $-D-VARDKB < INDICATEUR DE 'WAIT' PRELIMINAIRE... < 1 : PAS DE WAIT PRELIMINAIRE, < 0 : WAIT PRELIMINAIRE. WORD SPDKB ASPDKB:: VAL $-D-VARDKB < SOUS-PROGRAMME D'E/S SUR 'DKM'. WORD NILS DKBAS:: VAL $-D-VARDKB < TRANSIT D'UN 'ASDEM'. WORD NILK DKBOP:: VAL $-D-VARDKB < TRANSIT D'UN 'OPDEM'. WORD NILK DKBSGF:: VAL $-D-VARDKB < INDICATEUR DES CONDITIONS D'OPTI- < MISATION DES ENTREES-SORTIES : < -2 : C'EST UNE ECRITURE SGF SANS < OPTIMISATION, OU < C'EST UNE ECRITURE NON SGF, < -1 : C'EST UNE ECRITURE SGF AVEC < OPTIMISATION (MEMVO=1), OU < C'EST UNE LECTURE SGF SANS < OPTIMISATION (MEMVO=K), OU < C'EST UNE LECTURE NON SGF, < 0 : C'EST UNE LECTURE SGF AVEC < OPTIMISATION PREMIER TOUR, < +1 : C'EST UNE LECTURE SGF AVEC < OPTIMISATION DEUXIEME TOUR. < (VOIR 'XZDK3' A 'XZDK6') WORD NILS DKBNXT:: VAL $-D-VARDKB < LORS DES LECTURES SGF OPTIMISEES, ON < TROUVE ICI L'ADRESSE DE LA PAGE < VIRTUELLE QUE LOGIQUEMENT LE < SGF DEVRAIT RECLAMER LA PROCHAINE < FOIS... < < ACCES A LA 'LRU' D'UTILISATION DES 'GB' : < WORD TLRUGB,X ALRUGB:: VAL $-D-VARDKB < RELAI D'ACCES A LA 'LRU' QUI MEMORISE < QUELS SONT LES 'GB' LES PLUS UTILISES < ET LE PLUS RECEMMENT... < < < P I L E : < < CALL #SISP CMS5 DOL2# PILDKB: EQU $-DEPILE XWPILE: VAL LPILEH+20 CALL #SISP CMS5 GENPIL2# < < < P A G E S R E E L L E S : < < DKBPAG:: VAL '0A < NOMBRE DE PAGES REELLES. PBGES: EQU $ DO DKBPAG DZS XBMEMB < < < D E F I N I T I O N D E L A ' L R U ' : < < < DEFINITION D'UNE ENTREE : < MOT0=Q8000 SI L'ENTREE EST INOCCUPEE, < =ADRESSE PAGE VIRTUELLE (SECTEUR) SI OCCUPEE. < MOT1=ADRESSE MOT DE LA PAGE REELLE. < < PAVIR: MOT PAVIR < MOT0 D'UNE ENTREE LRU. PARES: MOT PARES < MOT1 D'UNE ENTREE LRU. DKBLRU: EQU $ DO DKBPAG WORD Q8000;K=FCDO)MFFFF+N+DKBPAG-Z*XBMEMB+PBGES LBRU:: VAL $-DKBLRU/DKBPAG < LONGUEUR D'UNE ENTREE. CALL #SISP CMS5 CHECK# PAGE < < < S I M U L A T E U R D E M E M O I R E < V I R T U E L L E S U R ' D K M ' : < < < FONCTION : < CE FAUX DISQUE EST UN SIMULATEUR < DE MEMOIRE VIRTUELLE; IL ESSAYE DE < TENIR EN MEMOIRE CENTRALE LES SECTEURS < DE 'DKM' LES PLUS UTILISES A L'AIDE < D'UNE LISTE 'LRU'. POUR DES RAISONS < EVIDENTES DE SECURITE, A CHAQUE FOIS < QU'UNE ECRITURE EST DEMANDEE, ELLE < EST FAITE DANS UNE PAGE VIRTUELLE, < MAIS AUSSI SUR DISQUE (EN PARALLELE). < < < FONCTIONS RECONNUES : < '00 : LECTURE, < '02 : ECRITURE, < '05 : PURGE ('FOPURG'). < < USE L,DCT0 USE W,DEM0 HDLDKB: EQU $ LR W,Y < (Y)=SAVE L'ADRESE DE LA DEMANDE. < < VALIDATION DES ARGUMENTS : < LA ARGDEM+OPDEM TBT XBITQ < DEMANDE-T'ON QUANTA=1 ??? JC DKB10X < OUI, DONC ON ENVOIE DIRECTEMENT < CETTE DEMANDE A 'DKM'... CPI FOPURG < EST-CE UNE PURGE ??? JE DKB20Y < OUI, ON Y VA... LBI XZDK3 < -1 : LECTURE A PRIORI... XWOR%1: VAL FGR?FGW=K < POUR DISCRIMINER LECTURE/ECRITURE... TBT NBITMO-B-XWOR%1 < EST-CE UNE LECTURE (K) OU ECRITURE (1) ?? SBCR B < -2 : C'EST UNE ECRITURE. STB VAR+DKBSGF < SAUVEGARDE DE L'INDICATEUR ; ON NOTERA < QUE POUR UNE E/S NON SGF, ON A : < DKBSGF<0 !!! RBT NBITMO-B-XWOR%1 JAE SYSRBH < OK, OPDEM=K OU 2... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VOIR LE DEMANDEUR, POUR VOIR < CE QU'IL VEUT VRAIMENT... < SYSRBH: EQU $ < < GESTION DE LA 'LRU' DES 'GB' : < LA ARGDEM+ASDEM < (A)=PREMIER Q-SECTEUR DEMANDE, XWOR%1: VAL DKMINX=K XWOR%1: VAL -XWOR%1 SLRD -XWOR%1 CPI DKMINX>XWOR%1 < EST-CE UN SECTEUR INEXISTANT ??? JE DKB3A3 < OUI, IL S'AGIT D'UN FAUX SECTEUR UTILISE < POUR LE COMPACTAGE DES VALEURS 'SGN' ; < IL EST DONC IGNORE AU NIVEAU 'LRU'... XWOR%2: VAL NBITMO+DECON+XWOR%1 SLRD XWOR%2 < (B)=NUMERO DU 'GB'-1 D'APPARTENANCE < DU PREMIER Q-SECTEUR DE L'ECHANGE. LXI K < (X)=INDEX DE LA 'LRU' QUE L'ON VA PAR- < COURIR EN PARTANT DES PLUS UTILISES, < AFIN DE MINIMISER SON TEMPS D'EXPLO- < RATION... DKB3A2: EQU $ LBY &VAR+ALRUGB < (A)=NUMERO DE 'GB'-1 COURANT, CPR A,B < EST-CELUI DE L'ECHANGE COURANT ??? JE DKB3A1 < ET OUI... ADRI I,X < PASSAGE A L'ENTREE SUIVANTE, LR X,A CPI NBGB-Z < SI ELLE EXISTE... JLE DKB3A2 < ET OUI, ON VA Y ACCEDER... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE NUMERO < DE 'GB'-1 ARGUMENT PEUT NE PAS < FIGURER DANS LA 'LRU' ??? < JMP DKB3A3 < ET ON SAUTE LA MISE A JOUR DE LA 'LRU' !! DKB3A1: EQU $ CPZR X < ON A TROUVE LE 'GB'-1 ARGUMENT (B) DANS < L'ENTREE (X) DE LA 'LRU' ; CETTE ENTREE < SERAIT-ELLE PAR HASARD CELLE DE TETE ??? JE DKB3A3 < ET OUI, DONC RIEN A FAIRE... ADRI -I,X < ET NON, IL FAUT DONC PERMUTER L'ENTREE < COURANTE AVEC L'ENTREE PRECEDENTE, AFIN < DE LA FAIRE REMONTER PROGRESSIVEMENT < EN TETE... LBY &VAR+ALRUGB < (A)=PREDECESSEUR, XR A,B < (A)=ENTREE COURANTE, ET < (B)=PREDECESSEUR, STBY &VAR+ALRUGB < L'ENTREE COURANTE REMONTE D'UN CRAN, XR A,B ADRI I,X STBY &VAR+ALRUGB < ET L'EX-PREDECESSEUR REDESCEND D'UN... DKB3A3: EQU $ < < TEST DES CONDITIONS DE REFERENCE DE 'DKB' : < LA ARGDEM+ETADEM < (A)=IDENTITE DU DEMANDEUR. LB MEMV TBT MEMVN+NBITMO < LE 'SGN' A-T'IL ACCES A 'DKB' ??? JC DKB30 < OUI, IL Y A DROIT... IF NSPTRI+I-NSPSG0,,XEIF%, IF ATTENTION : IL VA Y AVOIR DES MERDES !!! XEIF%: VAL ENDIF CPI NSPTRI JL DKB30 < NON... CPI NSPSGN JLE DKB10X < OUI, LE 'SGN' EST DEMANDEUR, ALORS < QU'IL N'A PLUS ACCES A 'DKB' ; CELA < PEUT SE PRODUIRE LORSQUE DES DEMANDES < DU SGN ARRIVE SUR 'DKB', ALORS QU'UNE < PURGE EST EN COURS DE TRAITEMENT... < DANS CES CONDITIONS, ON ENVOIE EN < TRANSPARENCE LA DEMANDE... DKB30: EQU $ CPI NSPFIL < EST-CE LE SGF ??? JL DKB31 < NON, CONTINUONS... CPI NSPFIL+NDCTF-Z < EST-CE LE SGF ??? JG DKB31 < NON, CONTINUONS... TBT MEMVF+NBITMO < OUI, A-T'IL ACCES A 'DKB' ??? JNC DKB10X < NON, ALORS ENVOI TRANSPARENT A 'DKM'. LR A,X < OUI, (X)=NSP(DCTF), PSR Y LYI FONTB < (Y)=FONCTION DE 'TEST BIT'. LAD ATNSPF BSR ATMOBT < TEST DU BIT (NSPF). PLR Y JNC DKB10X < CETTE 'DCTF' N'A PAS ACCES A LA < MEMOIRE VIRTUELLE (BIT(NSPF)=K). LA VAR+DKBSGF < DANS LE CAS DU SGF : TBT MEMVO+NBITMO < DOIT-ON OPTIMISER LES LECTURES ??? ADCR A < -2 ==> -2 : ECRITURE SANS OPTIMISATION, < -2 ==> -1 : ECRITURE AVEC OPTIMISATION, < -1 ==> -1 : LECTURE SANS OPTIMISATION, < -1 ==> 0 : LECTURE AVEC OPTIMISATION. STA VAR+DKBSGF < SAUVEGARDE DE L'INDICATEUR ; ON NOTERA < QUE POUR LES E/S SGF : < DKBSGF=K : S'IL S'AGIT D'UNE LECTURE, < ET QUE L'OPTIMISATION EST < ACTIVE (MEMVO=1), < DKBSGF<0 : DANS LES AUTRES CAS SGF. DKB31: EQU $ LA ARGDEM+CODEM CP VAR+DKBDEM+T+CODEM JG DKB10X < TROP GRAND, ON ENVOIE DIRECTEMENT... JAG SYSRBI < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < S'EN ALLER... < SYSRBI: EQU $ LA ARGDEM+ASDEM CP INFINI JNE SYSRBJ < OK, Q8000 EST INTERDIT... BSR ASYSER < E R R E U R S Y S T E M E ... < OU PAS, EN EFFET, VOIR LES PROGRAMMES < DE COPIE DE DISQUES... JMP DKB10X < 'INFINI' ETANT UN INDICATEUR DE < LIBERTE DE LA 'LRU', LES DEMANDES < PORTANT SUR 'INFINI' VONT DIRECTEMENT < A 'DKM'... DKB20Y: JMP DKB20X < RELAI... SYSRBJ: EQU $ XWOR%1: VAL DKMINX=K XWOR%1: VAL -XWOR%1 SLRS -XWOR%1 CPI DKMINX>XWOR%1 < EST-CE UN SECTEUR INEXISTANT ??? JE DKB10X < OUI, ENVOI DIRECT A 'DKM'... LA ARGDEM+ASDEM < NON, RESTAURE 'A'... < < RECHERCHE DU SECTEUR DEMANDE (A) DANS LA LRU : < DKB91: EQU $ < POINT D'ENTREE DU DEUXIEME TOUR DES < LECTURES SGF OPTIMISEES. LRM X,W WORD DKBPAG < (X)=NOMBRE D'ENTREES DE LA LRU, WORD DKBLRU-LBRU < (W)=ADRESSE PRECEDENTE DE LA LRU. LR A,B < (B)=SECTEUR DEMANDE (PAGE VIRTUELLE). DKB2: EQU $ ADRI LBRU,W < ACCES A L'ENTREE COURANTE. LA PAVIR,W < (A)=PAGE VIRTUELLE COURANTE. CPR A,B < EST-CE LA PAGE DEMANDEE ??? JE DKB3 < OUI, PAGE TROUVEE RESIDENTE. CP INFINI < EST-ON SUR LA PREMIERE ENTREE LIBRE ??? JE DKB4 < OUI, LA PAGE N'EST PAS TROUVEE, < MAIS LA LRU N'EST PAS PLEINE. JDX DKB2 < A L'ENTREE SUIVANTE... < < PAGE NON TROUVEE, ET LRU PLEINE : < < < NOTA : LA PAGE SE TROUVANT EN QUEUE DE LA < 'LRU' PEUT ETRE ECRASEE SANS SOUCIS, EN < EFFET, OU BIEN ELLE N'A ETE QUE LUE, ET < DONC SA COPIE DISQUE EST CORRECTE, OU BIEN < ELLE A ETE ECRITE AU MOINS UNE FOIS, ET TOUTE < MISE A JOUR DE LA MEMOIRE VIRTUELLE S'ACCOMPA- < GNE EN PARALLELE D'UNE MISE A JOUR DU DISQUE... < JMP DKB4 < ON CONSIDERE QUE LA DERNIERE ENTREE < OCCUPEE EST LIBERABLE... DKB10X: JMP DKB10 < RELAI... < < PAGE NON TROUVEE, ET LA LRU A AU MOINS UNE ENTREE DISPONIBLE : < DKB4: EQU $ STB PAVIR,W < (B)=PAGE DEMANDEE, QUE L'ON MET DANS < L'ENTREE LIBRE D'ADRESSE (W). XR W,Y < (W)=ADRESSE DEMANDE ARGUMENT. LA ARGDEM+OPDEM XR W,Y JANE DKB3 < (A)=2 : C'EST UNE ECRITURE DE PAGE. STB VAR+DKBAS < (A)=K : C'EST UNE LECTURE, IL FAUT < DONC AMENER LA PAGE (B) EN MEMOIRE. STZ VAR+DKBOP < DEMANDE DE LECTURE, LXI XZDK2 < AVEC WAIT (X=1). CPZ VAR+DKBSGF < QUEL EST LE LE MODE EN REALITE ??? JLE DKB92 < PAS D'OPTIMISATION, OU BIEN IL S'AGIT < DU PREMIER TOUR SGF OPTIMISE... LXI XZDK1 < DKBSGF>0 : IL S'AGIT DU DEUXIEME TOUR < SGF DE LECTURE OPTIMISEE ; DANS CES < CONDITIONS, LA LECTURE DE LA PAGE EST < EN FAIT UN PRE-CHARGEMENT, ON LA FAIT < DONC SANS WAIT (X=K). DKB92: EQU $ BSR VAR+ASPDKB < LECTURE DE LA PAGE DEMANDEE < AVEC ATTENTE DE FIN D'E/S. < < LA PAGE DEMANDEE EST RESIDENTE : < DKB3: EQU $ CPZ VAR+DKBSGF < QUEL EST LE MODE ACTUEL ??? JG DKB93 < IL S'AGIT DU DEUXIEME TOUR DU SGF EN < MODE LECTURE OPTIMISEE ; ON VA DONC < UNIQUEMENT FAIRE TOURNER LA LRU, AFIN < DE NE PAS RISQUER DE PERDRE LE BENE- < FICE DU PRE-CHARGEMENT AU CAS OU CETTE < PAGE SERAIT EN QUEUE... LA PARES,W < (A)=ADRESSE DE LA PAGE RESIDENTE. CP VAR+DKBDEM+T+AMDEM JNE DKB40 < LA PAGE COURANTE N'EST PAS CELLE QUI < FUT CONCERNEE PAR LA DERNIERE ENTREE- < SORTIE, CONTINUONS... CPZ VAR+DKBW < OUI, Y-A-T'IL LIEU D'ATTENDRE < LA FIN D'ENTREE-SORTIE ??? JNE DKB40 < NON, CONTINUONS... IC VAR+DKBW < OUI, MISE A JOUR DES INDICATEURS, WAIT VAR+DKBDEM+X18 < ATTENTE DE FIN... DKB40: EQU $ XR Y,W < (W)=ADRESSE DE LA DEMANDE ARGUMENT. LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS DEMANDES, ADRI NOCMO-E,A < AFIN D'OBTENIR UN NOMBRE ENTIER < DE MOTS POUR ASSURER LA COMPA- < TIBILITE AVEC 'DKM'. SLRS NOCMO=K < CONVERSION EN UN NOMBRE DE MOTS. LR A,X < (X)=NOMBRE DE MOTS. LA NSPTYP TBT TYPAD < A-T'ON UNE ADRESSE MOT ??? LA ARGDEM+AMDEM < OUI A PRIORI... JC DKB6 < ET OUI, (A)=ADRESSE MOT... SLRS NOCMO=K < NON, CONVERSION... JNC SYSRBK < OK (ADRESSE PAIRE OCTETS)... BSR ASYSER < E R R E U R S Y S T E M E ... SYSRBK: EQU $ DKB6: EQU $ CPZ ARGDEM+OPDEM < LECTURE OU ECRITURE ??? XR Y,W LB PARES,W < (B)=ADRESSE MOT DE LA PAGE RESIDENTE, ET < (A)=ADRESSE-MOT DU BUFFER DEMANDE. JNE DKB7 < 2=ECRITURE : BUFFER --> PAGE. XR A,B < 0=LECTURE : PAGE --> BUFFER. CPZ VAR+DKBSGF < QUEL EST LE MODE ACTUEL ??? JNE DKB7 < CE N'EST PAS UN PREMIER TOUR DU SGF < EN MODE LECTURE OPTIMISEE... PSR A,W < C'EST LE PREMIER TOUR D'UNE LECTURE < SGF EN MODE OPTIMISEE : LR A,W < (W)=ADRESSE DE LA PAGE RESIDENTE, LA XCHSGF,W < (A)=PREMIER MOT DE LA PAGE RESIDENTE STA VAR+DKBNXT < C'EST, SI ELLE EXISTE, L'ADRESSE DE < LA PAGE VIRTUELLE SUIVANTE DANS CE < FICHIER... PLR A,W DKB7: EQU $ BSR VAR+BMOVEV < SIMULATION DE L'ENTREE/SORTIE... < < ROTATION DE LA LRU : < DKB93: EQU $ LA PAVIR,W < SAVE LE NUMERO DE PAGE VIRTUELLE, LB PARES,W < ET L'ADRESSE MOT EN RESIDENT. LR W,X < (X)=ADRESSE COURANTE EN LRU, LRM W WORD DKBLRU < (W)=ADRESSE DE LA LRU. CPR X,W < EST-ON DEJA EN TETE ??? JE DKB60 < OUI, RIEN A FAIRE... < ON A : < (A)=ADRESSE-DISQUE DE LA PAGE VIRTUELLE. PSR A,B < NON, SAUVEGARDE DU CONTENU DE L'ENTREE < COURANTE DE LA 'LRU'. CPZ VAR+DKBMOD < QUEL EST LE MODE DE GESTION DE LA 'LRU' ? IF XLRUR-K,,XEIF%, IF ATTENTION : LE TEST EST INCOHERENT !!! XEIF%: VAL ENDIF JE DKB62 < PAR ROTATION (DECALAGE CIRCULAIRE...)... < < PAR PERMUTATION (DE L'ENTREE < COURANTE ET DE L'ENTREE PRE- < DENTE : CETTE METHODE AMENE < PLUS DOUCEMENT EN TETE LES PAGES < LES PLUS UTILISEES, MAIS SURTOUT < NE MET PAS EN TETE LES PAGES RE- < FERENCEES UNE SEULE FOIS...) : < LR X,W < RESTAURE : < (W)=ADRESSE DE L'ENTREE COURANTE, ADRI -LBRU,W < (W)=ADRESSE DE L'ENTREE PRECEDENTE, LA PAVIR,W < L'ENTREE LB PARES,W < PRECEDENTE STA PAVIR+LBRU,W < RECULE STB PARES+LBRU,W < D'UN "CRAN"... JMP DKB61 < VERS L'AVANCEE DE L'ENTREE COURANTE < D'UN "CRAN" (A LA PLACE DE L'ENTREE < PRECEDENTE...). < < PAR ROTATION (ON AMENE L'ENTREE < COURANTE EN TETE PAR DECALAGE < CIRCULAIRE) : < DKB62: EQU $ SBR W,X < (X)=NOMBRE DE MOTS A DEPLACER. LR W,A < (A)=EMETTEUR (ORIGINE DE LA LRU), LR W,B ADRI LBRU,B < (B)=RECEPTEUR (LRU+LBRU). MOVE < ROTATION... DKB61: EQU $ PLR A,B STA PAVIR,W < GENERATION DE L'ENTREE DE TETE, AVEC STB PARES,W < LA PAGE VIRTUELLE (A), ET L'ADRESSE < RESIDENTE (B) DANS LE CAS DE LA ROTATION < 'XLRUR', OU DE L'ENTREE PRECEDENTE DANS < LE CAS DE LA PERMUTATION 'XLRUP'. DKB60: EQU $ XR Y,W < (W)=ADRESSE DE LA DEMANDE. CPZ ARGDEM+OPDEM < LECTURE OU ECRITURE ??? IF FGR-K,,XEIF%, IF ATTENTION : LE TEST PRECEDENT VA MERDER !!! XEIF%: VAL ENDIF XR Y,W JE DKB90 < 0 : LECTURE, ALLONS VOIR S'IL Y A < UNE OPTIMISATION A FAIRE... STA VAR+DKBAS < 2 : ECRITURE, ON VA ECRIRE LA PAGE LAI FGW < VIRTUELLE (A) EN PARALLELE. STA VAR+DKBOP < ECRITURE... LXI XZDK1 < (X)=0 : PAS DE WAIT... BSR VAR+ASPDKB < ECRITURE DE LA PAGE VIRTUELLE EN < PARALLELE PAR MESURE DE SECURITE... DKB8: EQU $ STZ ETAT0 < RETOUR OK... LR Y,W < RESTAURE (W)=ADRESSE DE LA DEMANDE... RSR DKB20X: JMP DKB20 < RELI... DKB91X: JMP DKB91 < RELAI... < < ENVOI DIRECT A 'DKM' DES ENREGISTREMENTS TROP LONGS : < DKB10: EQU $ < < RECHERCHE PREALABLE EN LRU : < LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS DEMANDES, AD VAR+DKBDEM+T+CODEM ADRI -NOCMO+E,A < QUE L'ON MAJORE AFIN D'AVOIR UN SARD NBITMO < NOMBRE ENTIER DE BLOCS. DV VAR+DKBDEM+T+CODEM LR A,X < (X)=NOMBRE DE BLOCS DE 'QUANTA' < SECTEURS DEMANDES, LB ARGDEM+ASDEM < (B)=ADRESSE DU PREMIER BLOC DE < 'QUANTA' SECTEURS DEMANDES. DKB80: EQU $ PSR B,X < SAVE L'ADRESSE DU PREMIER < ET LE NOMBRE... LRM X,W WORD DKBPAG < (X)=NOMBRE DE PAFGES RESIDENTES. WORD DKBLRU-LBRU < (W)=ADRESSE COURANTE AVANT LRU. DKB42: EQU $ ADRI LBRU,W < PASSAGE A L'ENTREE SUIVANTE. LA PAVIR,W < (A)=PAGE VIRTUELLE COURANTE. CPR A,B < EST-CE CELLE QUI EST DEMANDEE ??? JE DKB43 < OUI, IL FAUT L'ELIMINER... CP INFINI < EST-CE LA FIN DE LRU ??? JE DKB44 < OUI, ON N'A PAS TROUVE LA PAGE (B). JDX DKB42 < A L'ENTREE SUIVANTE. JMP DKB44 < ON N'A PAS TROUVE LA PAGE (B), < ET LA LRU EST PLEINE... < < ELIMINATION D'UNE PAGE VIRTUELLE PRESENTE EN < LRU ET CONCERNEE PAR UN ACCES DIRECT A 'DKM' : < DKB43: EQU $ LA PARES,W < (A)=SAVE L'ADRESSE-MOT DE LA ADRI -I,X CPZR X < EST-CE LA DERNIERE ENTREE LRU ??? JE DKB71 < OUI, RIEN A FAIRE... ADR X,X < (X)=NOMBRE DE MOTS A DEPLACER. IF LBRU-2,,XEIF%, IF ATTENTION : LE 'ADR X,X' EST MAUVAIS !!! XEIF%: VAL ENDIF DKB70: EQU $ LB LBRU,W < ACCES A UN MOT DE LA LRU, STB O,W < QUE L'ON DECALE DE -LBRU MOTS. ADRI P,W < PASSAGE AU MOT SUIVANT, JDX DKB70 < S'IL EXISTE... DKB71: EQU $ < CAS DE LA DERNIERE ENTREE... STA PARES,W < REGENERATION DE LA DERNIERE ENTREE... LA INFINI STA PAVIR,W DKB44: EQU $ PLR B,X ADRI I,B < PASSAGE AU BLOC SUIVANT... JDX DKB80 < ET DECOMPTAGE... LR Y,W < RESTAURE (W)=ADRESSE DE LA DEMANDE... < < ENVOI DIRECT A 'DKM' : < LA NSPTYP ANDI MKTD < ON NE CONSERVE QUE QUELQUES INDICATEURS. STA VAR+DKBDEN+XXNSP < GENERATION DU 'NSPTYP'... LAI NSPDKM STBY VAR+DKBDEN+XXNSP < INSERTION DU 'NSP' DE 'DKM'. LAD VAR+DKBDEN+T LR A,B < (B)=@ZONE RECEPTRICE, LAD ARGDEM+OPDEM < (A)=@ZONE EMETTRICE, LXI ASDEM-OPDEM+Z < (X)=NOMBRE DE MOTS ARGUMENTS. MOVE < GENERATION DE LA DEMANDE DE TRANSIT. LAD VAR+DKBDEN XR A,W < (A)=SAVE W, ET (W)=@DEMANDE TRANSIT. BSR ACHAND < ENVOI DIRECT A 'DKM'... BSR ACHANW < ATTENTE DE FIN D'OPERATION, < MEME SI CE N'EST PAS LE DESIR DU < DEMANDEUR !!! XR A,W < RESTAURATIONS... JMP DKB8 < ET ON SORT... < < FIN DES LECTURES ; CHOIX DES OPTIMISATIONS : < DKB90: EQU $ CPZ VAR+DKBSGF < TEST DU MODE ACTUEL ??? JNE DKB8 < OU BIEN IL N'Y A PAS D'OPTIMISATION A < FAIRE (<0), OU BIEN ELLE EST FAITE (>0). IC VAR+DKBSGF < ET OUI, IL S'AGIT DU PREMIER TOUR D'UNE < LECTURE SGF OPTIMISEE, DKBSGF>0... LA VAR+DKBNXT < (A)=ADRESSE DE LA PROCHAINE PAGE VIRTUELL CP INFINI < EXISTE-T'ELLE ??? JE DKB8 < NON, DONC ON SORT... JMP DKB91X < OUI, ON VA DONC LANCER SON PRE- < CHARGEMENT... PAGE < < < P U R G E D E ' D K B ' : < < < NOTA IMPORTANT : < CETTE OPERATION A POUR BUT DE < RENVOYER EN VIRTUEL TOUTES LES < PAGES RESIDENTES ; ELLE EST A < A FAIRE A CHAQUE FOIS QUE LES < INDICATEURS DE 'MEMV' CHANGENT... < ELLE EST TRES SIMPLE, CAR EN < EN EFFET CHAQUE ACCES EN ECRITURE < A 'DKB' S'ACCOMPAGNE D'UNE MISE < MISE A JOUR EN PARALLELE DE 'DKM'... < < DKB20: EQU $ LRM X,W WORD DKBPAG < (X)=NOMBRE DE PAGES RESIDENTES, WORD DKBLRU < (W)=ADRESSE DE LA 1ERE ENTREE DE LRU. LA INFINI < (A)=INDICATEUR DE PAGE LIBRE. DKB21: EQU $ STA PAVIR,W < L'ENTREE COURANTE EST RENDUE LIBRE... ADRI LBRU,W < A L'ENTREE JDX DKB21 < SUIVANTE DE LRU... JMP DKB8 < ET C'EST TOUT... PAGE < < < E N T R E E S - S O R T I E S ' D K M ' : < < < ARGUMENTS : < (W)=ADRESSE COURANTE LRU, < (X)=0 : E/S SANS WAIT, < 1 : E/S AVEC WAIT... < (DKBAS)=PAGE VIRTUELLE DEMANDEE, < (DKBOP)=0 OU 2 (SENS DE L'OPERATION). < < SPDKB: EQU $ PSR B,W LB PARES,W < (B)=ADRESSE MOT DU BUFFER. LAD VAR+DKBDEM LR A,W < (W)=ADRESSE DE LA DEMANDE 'DKM'. CPZ VAR+DKBW < Y-A-T'IL UNE E/S EN COURS ??? JNE SPDKB2 < NON... BSR ACHANW < OUI, ON ATTEND QU'ELLE SE TERMINE... SPDKB2: EQU $ STB ARGDEM+AMDEM < ADRESSE MOT DE LA PAGE RESIDENTE. LA VAR+DKBAS < ADRESSE DE LA PAGE VIRTUELLE. STA ARGDEM+ASDEM < (SECTEUR). LA VAR+DKBOP < SENS DE L'OPERATION... STA ARGDEM+OPDEM BSR VAR+BCHANB < ENVOI DE LA DEMANDE A 'DKM'... < (AVEC FORCAGE DE LA PAGE 0, EN EFFET < CETTE ENTREE-SORTIE SE FAIT DANS < L'ESPACE ABSOLU DU SYSTEME...) CPZR X < FAUT-IL ATTENDRE ??? STX VAR+DKBW < ET ON MEMORISE CE FAIT... JE SPDKB1 < NON (X=K)... BSR ACHANW < OUI (X=1)... SPDKB1: EQU $ PLR B,W RSR PAGE < < < S I M U L A T I O N D E S T R A N S F E R T S < D E ' D K A ' E T D E ' D K B ' : < < < FONCTION : < CE SOUS-PROGRAMME COMMUN A 'DKA' < ET 'DKB' REALISE LES TRANSFERTS ENTRE < BUFFERS DEMANDEURS ET PAGES RESIDENTES ; < IL COMPLETE LES PAGES RESIDENTES PAR < DES '0000 LORSQUE LA LONGUEUR DEMANDEE < NE CORRESPOND PAS A UNE PAGE COMPLETE, < LORS D'UNE ECRITURE... < < < ARGUMENT : < (A)=ADRESSE DE L'EMETTEUR (ABSOLUE OU RELATIVE), < (B)=ADRESSE DU RECEPTEUR (RELATIVE OU ABSOLUE). < (X)=NOMBRE DE MOTS A TRANSFERER. < (Y)=ADRESSE DE LA DEMANDE COURANTE. < < < ATTENTION : < DETRUIT A, B, X !!! < < MOVEV: EQU $ IF LBMEMB-LBMEMA,,XEIF%, IF ATTENTION : 'DCTDKA' ET 'DCTDKB' DOIVENT IF LOCALISER IDENTIQUEMENT 'LBMEMV' !!! XEIF%: VAL ENDIF LBMEMV:: VAL LBMEMB?LBMEMA < ACCES A LA LONGUEUR DES PAGES RESIDENTES < DE LA MEMOIRE VIRTUELLE DEMANDEUSE. PSR X XR Y,W CPZ ARGDEM+OPDEM < EST-CE UNE LECTURE OU UNE ECRITURE ??? XR Y,W IF FGR-K,,XEIF%, IF ATTENTION : CE QUI PRECEDE EST COMPLETEMENT IDIOT, IF ET EN PLUS CELA DOIT SE PRODUIRE AILLEURS !!! XEIF%: VAL ENDIF JE MOVEV3 < C'EST UNE LECTURE : IL NE FAUT DONC < SURTOUT PAS CLEARER LA PAGE COURANTE < AU CAS OU ON EN LIRAIT PLUTARD UNE < LONGUEUR SUPERIEURE (LE COMPLEMENT < SERAIT NUL...). < < CAS D'UNE ECRITURE : < MVTM < IL S'AGIT D'UN MOUVEMENT DE L'ESPACE < RELATIF DE L'UTILISATEUR ('SLO' ET 'SLE' < SONT CORRECTS) VERS L'ESPACE ABSOLU DU < SYSTEME... PLR X < RESTAURE : (X)=NOMBRE DE MOTS TRANSFERES. LR X,A CP VAR+LBMEMV < A-T'ON TRANSFERE UNE PAGE ENTIERE ??? JE MOVEV1 < OUI, C'EST FINI... < < NON, IL FAUT CLEARER LA FIN DE < LA PAGE RESIDENTE, C'EST BEAUCOUP < PLUS ESTHETIQUE... MAIS UNIQUEMENT < LORS D'UNE ECRITURE... < PSR W < SAUVEGARDE DE LA LRU COURANTE... LB PARES,W < (B)=ADRESSE MOT DE LA PAGE RESIDENTE, ADR X,B LR B,W < (W)=ADRESSE DU PREMIER MOT NON ECHANGE < DANS LA PAGE RESIDENTE... SB VAR+LBMEMV NGR A,X < (X)=NOMBRE DE MOTS A NETTOYER... MOVEV2: EQU $ STZ O,W < ET ON NETTOIE... ADRI D,W < AU MOT SUIVANT, JDX MOVEV2 < S'IL EXISTE... PLR W < ET ENFIN, ON RESTAURE L'ADRESSE < DE LA LRU COURANTE... JMP MOVEV1 < VERS LA SORTIE... < < CAS D'UNE LECTURE : < MOVEV3: EQU $ MVTS < IL S'AGIT D'UN MOUVEMENT DE L'ESPACE < ABSOLU DU SYSTEME VERS L'ESPACE RELATIF < DE L'UTILISATEUR ('SLO' ET 'SLE' SONT < CORRECTS)... PLR X < RESTAURE : (X)=NOMBRE DE MOTS TRANSFERES < < SORTIE : < MOVEV1: EQU $ RSR PAGE < < < C O N S T A N T E S G E N E R A L E S : < < XWOR%1: VAL COSBT?FGR=FMASK(K=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST XXCU4:: VAL 8 < TRANSLATION DES FONCTIONS AVEC ATTENTE < D'INTERRUPTION. XWOR%2: VAL FGR?XXCU4 < FONCTION LECTURE AVEC IT. XWOR%1: VAL COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST XWOR%2: VAL FGW?XXCU4 < FONCTION ECRITURE AVEC IT. XWOR%1: VAL COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST XXCU1:: VAL XWOR%1 < POUR VALIDER LES FONCTIONS 'CU'. XXCU2:: VAL 2 < INCREMENT DE LA LONGUEUR DES PILES. XXCU3:: VAL 32 < POUR LE TEST DES TIME OUT... < ON LE PREND GRAND A CAUSE DES CONNEXIONS < EN MODE CANAL DU 'CU2' (IMPRIMANTE < ELECTROSTATIQUE PAR EXEMPLE...). XXCUM1:: VAL NOCMO < 'CODEM' LEGAL POUR ACCES AU MOT2, XXCUM2:: VAL XXCUM1+NOCMO < 'CODEM' LEGAL POUR ACCES AU MOT1. XXCUMN:: VAL XXCUM2+NOCMO < 'CODEM' MINIMUM POUR PROCEDER A UNE < ITERATION SUR LE BUFFER (EN PROGRESSANT < DE MOT EN MOT BIEN SUR) VERS LE MOT2. XXCUMP:: VAL KOLON*NOCMO < 'CODEM' MAXIMUM D'ITERATION SUR LE MOT2. < (ON PREND 'KOLON' CAR AINSI, ON PEUT < ENVOYER UNE CARTE D'UN COUP...) XXCUMM:: VAL YY8 < 'CODEM' MAXIMUM D'ITERATION SUR LE MOT2, < CELUI-CI DOIT ALORS ETRE SUPERIEUR A < 'XXCUMP'... IF XXCUMP-XXCUMM,XEIF%,, IF ATTENTION : LA DISCRIMINATION ENTRE LE IF MOT1 ET LE MOT2 SERA MAUVAISE !!! XEIF%: VAL ENDIF IF XXCUMN-XXCUMP,XEIF%,, IF ATTENTION : LA DISCRIMINATION ENTRE LE MOT1 IF L'ITERATION SUR LE MOT2 EST MAUVAISE !!! XEIF%: VAL ENDIF XXNCU:: VAL 32767 < SUPER-TEMPORISATION LORS DES ECHANGES < SUR LES 'GPI' DUE AU DIALOGUE ENTRE < UN 'GPI' ET LES REGISTRES DE COULEUR < DE 'TV' ; CETTDE TEMPORISATION DE < DETECTION DE TIME-OUT DOIT ETRE SUPE- < RIEURE A LA DUREE D'UNE TRAME CDE 'TV'... BUSY2:: VAL ETANXT < SIGNAL .NOT.BUSY2 DANS LE MOT D'ETAT, BUSY1:: VAL ETAOPE < SIGNAL .NOT.BUSY1 DANS LE MOT D'ETAT. XCBCU1:: VAL NEXIST < 'CU1' N'A PAS DE MODE CANAL, XCBCU2:: VAL EXIST < 'CU2' A LE MODE CANAL, XCBCU3:: VAL NEXIST < 'CU3' N'A PAS LE MODE CANAL. IF XCBCU1-NEXIST,,XEIF%, IF ATTENTION : IL FAUT DONNER A 'CU1' UN IF 'CCB' ET LE PLACER JUSTE DERRIERE 'VARCU1' !!! XEIF%: VAL ENDIF IF XCBCU3-NEXIST,,XEIF%, IF ATTENTION : IL FAUT DONNER A 'CU3' UN IF 'CCB' ET LE PLACER JUSTE DERRIERE 'VARCU3' !!! XEIF%: VAL ENDIF XWOR%1: VAL K < INITIALISATION... XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST < NOTA : LES ENTREES-SORTIES AVEC INTERRUP- < TIONS UTILISANT '&VAR+MEMCU', MAIS < NE POSITIONNANT PAS (SLO,SLE), IL < EST IMPOSSIBLE DE LES INSERER DANS < 'DCTFUP' !!! XCUP1:: VAL XWOR%1 < 'DCTFUP' POUR LES 'CU' N'AYANT PAS LE < MODE CANAL. XWOR%1: VAL K < INITIALISATION... XWOR%1: VAL COSBT?FGR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGW=FMASK(K?XWOR%1=FCINST XWOR%2: VAL FGR?XXCU4 < FONCTION LECTURE AVEC IT. XWOR%1: VAL COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST XWOR%2: VAL FGW?XXCU4 < FONCTION ECRITURE AVEC IT. XWOR%1: VAL COSBT?XWOR%2=FMASK(K?XWOR%1=FCINST XCUP2:: VAL XWOR%1 < 'DCTFUP' POUR LES 'CU' FONCTIONNANT EN < MODE CANAL. CALL #SISP CMS5 CHECK# PAGE < < < D C T C O U P L E U R U N I V E R S E L 1 : < < CALL #SISP CMS5 DOL1# DCTCU1: EQU $ PSTCU1: WORD K;K;K;K;COM+DEPCS;DCTCU1;NIL;PILCU1;HANDLR;SMST;SO;SE #@ASCI " CU1" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLCU < HANDLER SPECIFIQUE 'CUX'. WORD ITCU < ROUTINE SPECIFIQUE D'INTERRUPTIONS 'CUX'. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES ET FRTRY. WORD K < HSTATS. WORD XXCU3 < TESTO#0 : TIME A OUT A TESTER... WORD XXCU1 < LISTE DES FONCTIONS AUTORISEES. WORD XCUP1 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARCU: EQU $ VARCU1: EQU VARCU IF VARCU1-DCTCU1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPERANDES DES 'SIO' : < WORD ACCU1?FPHDUM < LECTURE A PRIORI... ECHCU:: VAL $-D-VARCU < ECHANGE INFORMATION AVEC CU1. WORD ACCU1?FPHETA ETAACU:: VAL $-D-VARCU < ENTREE DU MOT D'ETAT 'A'... WORD ACCU1?FPHETB ETABCU:: VAL $-D-VARCU < ENTREE DU MOT D'ETAT 'B'... WORD ACCU1?FPHCME CDECU:: VAL $-D-VARCU < SORTIE COMMANDE 'F7'. WORD ACCU1?FPHCMD CMDCU:: VAL $-D-VARCU < SORTIE COMMANDE 'F3'. < < RELAIS ET DIVERS : < WORD NILX MEMCU:: VAL $-D-VARCU < RELAI VERS LA ZONE MEMOIRE < CONTENANT OU RECEVANT LE MOT < D'INFORMATION DU COUPLEUR. WORD NILK LONCU:: VAL $-D-VARCU < NOMBRE DE MOTS A ECHANGER. WORD XXNCU TXXNCU:: VAL $-D-VARCU < DETECTEUR LOCAL DE TIME-OUT SUR < LES ECHANGES EN PROGRAMME SIMPLE < DES 'GPI'... < NOTA : SI TXXNCU=0, IL N'Y A PAS DE TEST < DE TIME-OUT, ET LE HANDLER RISQUE < DE SE BLOQUER LONGUEMENT... WORD SPCUV ASPCU:: VAL $-D-VARCU < SOUS-PROGRAMME APPELE APRES LES SORTIES < ET EN FAIT UTILISE UNIQUEMENT PAR LE < 'CU3' LORS DE LA GESTION DE LA MEMOIRE < DES COULEURS. WORD XCBCU1 XCCBCU:: VAL $-D-VARCU < INDICATEUR PRECISANT SI CE 'CU' POSSEDE < ('EXIST') OU PAS ('NEXIST') LE MODE < CANAL. < < < Z O N E S P E C I F I Q U E ' C U 1 ' : < < SPECU1: EQU $ < < < P I L E : < < XWPILE: VAL LPILEH+XXCU2 PILCU1:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T C O U P L E U R U N I V E R S E L 2 : < < DCTCU2: EQU $ PSTCU2: WORD K;K;K;K;COM+DEPCS;DCTCU2;NIL;PILCU2;HANDLR;SMST;SO;SE #@ASCI " CU2" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLCU < HANDLER SPECIFIQUE 'CUX'. WORD ITCU < ROUTINE SPECIFIQUE D'INTERRUPTIONS 'CUX'. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES ET FRTRY. WORD K < HSTATS. WORD XXCU3 < TESTO#0 : TIME-OUT A TESTER... WORD XXCU1 < LISTE DES FONCTIONS AUTORISEES. WORD XCUP2 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARCU2: EQU $ IF VARCU2-DCTCU2-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD ACCU2?FPHDUM < ECHANGE INFORMATION AVEC CU2. WORD ACCU2?FPHETA < ENTREE MOT D'ETAT 'A' DE CU2. WORD ACCU2?FPHETB < ENTREE MOT D'ETAT 'B' DE CU2. WORD ACCU2?FPHCME < SORTIE COMMANDE 'F7' SUR CU2. WORD ACCU2?FPHCMD < SORTIE COMMANDE 'F3' SUR CU2. WORD NILX < RELAI VERS L'INFO COUPLEUR. WORD NILK < NOMBRE DE MOTS A ECHANGER. WORD XXNCU < DETECTEUR LOCAL DE TIME-OUT... WORD SPCUV < SOUS-PROGRAMME VIDE DE SORTIE. WORD XCBCU2 < 'CU2' POSSEDE LE MODE CANAL. < < < Z O N E S P E C I F I Q U E ' C U 2 ' : < < SPECU2: EQU $ < < CONSTANTES DIVERSES : < WORD '3FF0 LMCU:: VAL $-D-VARCU2 < LONGUEUR MAXIMALE D'UN ECHANGE CANAL. WORD ACCU2 INICU:: VAL $-D-VARCU2 < POUR INITIALISER L'ADRESSE DU COUPLEUR < DE 'CU2' DANS LE 'CCB'. < < 'CCB' D'ACCES A 'CU2' : < WORD K CCBCV0:: VAL $-D-VARCU2 < POUR INITIALISER 'CCBCU0'... WORD K CCBCV2:: VAL $-D-VARCU2 < POUR INITIALISER 'CCBCU2'... CCBCU:: VAL $-VARCU2 < 'CCBCU' : WORD K CCBCU0:: VAL $-D-VARCU2 < IL S'AGIT D'UN CANAL MOT... BYTE CCBLDC?XSNCU2;K < CANAL 'LDC', ET 'ITN'... WORD NIL CCBCU2:: VAL $-D-VARCU2 < ADRESSE MOT DU BUFFER. WORD NILK CCBCU3:: VAL $-D-VARCU2 < LONGUEUR EN MOTS DE L'ECHANGE. WORD ACCU2 CCBCU4:: VAL $-D-VARCU2 < ADRESSE DU COUPLEUR DE 'CU2'. < < ACCES A 'TTYS' SUR DEFAUT DE 'CU2' : < BYTE NSPTYS;XDSYM TYSCU2:: VAL $-D-VARCU2 < DEMANDE D'EMISSION SUR 'TTYS'... WORD FGW DZS LDEM0+VARCU2-$+TYSCU2 < < < P I L E : < < XWPILE: VAL LPILEH+XXCU2 PILCU2:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < D C T C O U P L E U R U N I V E R S E L 3 : < < DCTCU3: EQU $ PSTCU3: WORD K;K;K;K;COM+DEPCS;DCTCU3;NIL;PILCU3;HANDLR;SMST;SO;SE #@ASCI " CU3" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC=XTALOC : < 'CU3' EST PARTAGEABLE AVEC LES ASSIGNS < IMPLICITES, ET < 'CU3' EST NON PARTAGEABLES AVEC LES < !ASSIGN EXPLICITES, QUI INHIBENT < ALORS LES ASSIGNS IMPLICITES... WORD XXLOC0 DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLCU < HANDLER SPECIFIQUE 'CUX'. WORD ITCU < ROUTINE SPECIFIQUE D'INTERRUPTIONS 'CUX'. WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES ET FRTRY. WORD K < HSTATS. WORD XXCU3 < TESTO#0 : TIME-OUT A TESTER... WORD XXCU1 < LISTE DES FONCTIONS AUTORISEES. WORD XCUP1 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARCU3: EQU $ IF VARCU3-DCTCU3-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD ACCU3?FPHDUM < ECHANGE INFORMATION AVEC CU3. WORD ACCU3?FPHETA < ENTREE MOT D'ETAT 'A' DE CU3. WORD ACCU3?FPHETB < ENTREE MOT D'ETAT 'B' DE CU3. WORD ACCU3?FPHCME < SORTIE COMMANDE 'F7' SUR CU3. WORD ACCU3?FPHCMD < SORTIE COMMANDE 'F3' SUR CU3. WORD NILX < RELAI VERS L'INFO COUPLEUR. WORD NILK < NOMBRE DE MOTS A ECHANGER. WORD XXNCU < DETECTEUR LOCAL DE TIME-OUT... WORD SPCUC < GESTION DE LA MEMOIRE DES COULEURS. WORD XCBCU3 < 'CU3' N'A PAS LE MODE CANAL... < < < Z O N E S P E C I F I Q U E ' C U 3 ' : < < SPECU3: EQU $ XWOR%1: VAL SPECU1-DCTCU1 XWOR%2: VAL SPECU2-DCTCU2 XWOR%3: VAL SPECU3-DCTCU3 IF XWOR%1-XWOR%2,,XEIF%, IF ATTENTION : LES 'DCTCUX' SONT MAUVAISES !!! XEIF%: VAL ENDIF IF XWOR%1-XWOR%3,,XEIF%, IF ATTENTION : LES 'DCTCUX' SONT MAUVAISES !!! XEIF%: VAL ENDIF WORD ACCU3?FPHOUT CUCLIR:: VAL $-D-VARCU3 < POUR LES 'SIO' DE CLEAR DE LA CARTE... WORD ACCU3?FPHSAD CUINIT:: VAL $-D-VARCU3 < POUR LES 'SIO' D'INITIALISATION DES < MEMOIRES DE COULEUR ET DE PROGRAMMATION < DU CONTROLEUR DE 'CRT'. WORD SPCU1 ASPCU1:: VAL $-D-VARCU3 < POUR TESTER LE MOT D'ETAT, ET < ATTENDRE LA LIBERATION... < < DEFINITION DU CONTROLEUR DE < TELEVISION NUMERIQUE BASSE DEFINITION : < LICRT: EQU $ < REGISTRES PROGRAMMABLES DU < CONTROLEUR DE 'CRT' : BYTE K;'27 < R0=H.TOTAL, BYTE K;'20 < R1=H.DISPLAYED, BYTE K;'24 < R2=H.SYNC POSITION ('24 AU LIEU DE '23 < PERMET LE CENTRAGE DES IMAGES CODEES < EN SECAM...), BYTE K;'03 < R3=H.SYNC WIDTH, BYTE K;'26 < R4=V.TOTAL, BYTE K;'00 < R5=V.SCAN LINE ADJUST, BYTE K;'20 < R6=V.DISPLAYED, BYTE K;'22 < R7=V.SYNC POSITION, BYTE K;'01 < R8=INTERLACE MODE, BYTE K;'07 < R9=MAX.SCAN LINE ADDRESS, BYTE K;'05 < RA=CURSOR START, BYTE K;'06 < RB=CURSOR END, BYTE K;'00 < RC=START ADDRESS (H), BYTE K;'00 < RD=START ADDRESS (L), BYTE K;'01 < RE=CURSOR (H), BYTE K;'02 < RF=CURSOR (L). LLICRT:: VAL $-LICRT < LONGUEUR DE LA LISTE DE REINITIALI- < SATION DU CONTROLEUR DE 'CRT'... < < < P I L E : < < CALL #SISP CMS5 DOL2# PILCU3: EQU $-DEPILE XWPILE: VAL LPILEH+XXCU2 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R C O U P L E U R S U N I V E R S E L S : < < < FONCTION : < CE HANDLER GERE LES 3 COUPLEURS < DE TYPE 'GPI32' EN PERMETTANT L'ECHANGE < D'INFORMATION PARALLELES 16 BITS MOT < PAR MOT AVEC OU SANS IT... < DANS LE CAS DE 'CU3', ET LORSQU'IL < S'AGIT D'UN ACCES AU SYSTEME DES COULEURS < DE LA TELEVISION NUMERIQUE, UNE MEMOIRE < DES COULEURS EST GEREE ; ON NOTERA < QUE CELLE-CI A UN CONTENU INITIAL < QUI NE CORRESPOND PAS A CE QUE LE SYSTEME < DE TELEVISION NUMERIQUE DIFFUSE, ET < QU'UNE INITIALISATION S'IMPOSE ; ET < QUE D'AUTRE PART, APRES UN DEFAUT < SECTEUR, CETTE MEMOIRE REFLETE CE < QU'IL Y AVAIT SUR L'ECRAN AVANT CELUI-CI... < (MAIS VOIR LA 'COPY'...) < < < ARGUMENTS : < (AMDEM)=ADRESSE OCTET DU BUFFER CONTENANT OU RECEVANT < L'INFORMATION DU COUPLEUR, MAIS ATTENTION, < SEUL LE DEUXIEME MOT EST SIGNIFICATIF SI < CODEM=XXCUM2... < (OPDEM)=0000 : LECTURE, < 1000 : LECTURE AVEC ATTENTE D'INTERRUPTION, < 0010 : ECRITURE, < 1010 : ECRITURE AVEC ATTENTE INTERRUPTION. < (CODEM)=XXCUM1 : ACCES AU MOT2 (ANCIEN MODE), ET < ALORS 'AMDEM' DONNE DIRECTEMENT < L'ADRESSE DU MOT A ECHANGER. < XXCUM2 : ACCES AU MOT1 (NOUVEAU MODE),ET < ALORS 'AMDEM'+NOCMO DONNE L'ADRESSE < DU MOT A ECHANGER... < COMPRIS ENTRE XXCUMN ET XXCUMP : ON ITERE SUR LE < MOT2 (DE L'ANCIEN MODE) (CODEM)/NOCMO < FOIS EN PROGRESSANT MOT A MOT DANS LE < BUFFER ARGUMENT. < COMPRIS ENTRE XXCUMP+NOCMO ET XXCUMM : ON < ITERE SUR LE MOT1 (CODEM)/NOCMO < FOIS, EN PROGRESSANT MOT A MOT < DANS LE BUFFER ARGUMENT, MAIS A < LA DIFFRENCE DE (CODEM)=XXCUM2, < 'AMDEM' DONNE DIRECTEMENT L'ADRESSE < DU PREMIER MOT A ECHANGER. < < < CAS DE 'CU2' : < LES ECHANGES SUR 'CU2' AVEC DEMANDE < D'INTERRUPTION (TRANSLATION DES FONCTIONS < 'XXCU4') SONT ALORS GERES EN MODE CANAL < 'LDC'... < < XWOR%1: VAL XXCU4=K IF BIT>XWOR%1-XXCU4,,XEIF%, IF ATTENTION : 'XXCU4' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF BXCU1:: VAL NBITMO-B-XWOR%1 < NUMERO DU BIT DISCRIMINANT LES APPELS < AVEC IT DES APPELS SANS IT. BXCU2:: VAL ETAPIV < BIT 'INFORMATION VALIDE' DU MOT < D'ETAT UTILISE DU COUPLEUR POUR LE < MOT2 EN ENTREE ('VAL2'). BXCU5:: VAL ETAFBK < BIT 'INFORMATION VALIDE' DU MOT < D'ETAT UTILISE DU COUPLEUR POUR LE < MOT1 EN ENTREE ('VAL1'). < < < CODES D'ERREUR : < 'A0A0 : FONCTION NON RECONNUE, < '0001 : DEFAUT COUPLEUR (L'OCCUPATION < N'EST PAS RETOMBEE ASSEZ VITE !!!) < '0002 : 'CODEM' INCORRECT. < '0003 : 'AMDEM' IMPAIR... < < < A T T E N T I O N : < LE MOT D'INFORMATION COUPLEUR < PEUT AUSSI ETRE UN MOT D'ETAT, < UNE FONCTION QUE DE L'INFORMA- < TION AU SENS CLASSIQUE DU TERME... < < USE L,DCT0 USE W,DEM0 < < < G E S T I O N D E S E C H A N G E S < E N M O D E < C A N A L : < < HDLCU2: EQU $ LA ARGDEM+OPDEM TBT BXCU1 < EST-CE BIEN UN ECHANGE EN MODE CANAL ??? JNC HDLCUA < NON, ON EST RAMENE AU MODE PROGRAMME < SIMPLE... < < CAS DES ECHANGES CANAUX : < LB VAR+INICU < (B)=ADRESSE DU COUPLEUR, XWOR%1: VAL FGW?FGR=K TBT NBITMO-B-XWOR%1 < DISCRIMINATION DU SENS DE L'ECHANGE, ADCR B < ET MISE A JOUR DANS CES CONDITIONS DE < L'ADRESSE DU COUPLEUR... IF FPHOUT-FPHIN-I,,XEIF%, IF ATTENTION : ICI ET AILLEURS, LA IF MISE A JOUR DE L'ADRESSE D'UN COUPLEUR IF EN FONCTION DU SENS DE L'ECHANGE EST IF MAUVAISE !!! XEIF%: VAL ENDIF STB VAR+CCBCU4 < ET MISE A JOUR DU 'CCB'. LA ARGDEM+AMDEM < (A)=ADRESSE-OCTET ARGUMENT DU BUFFER, SLRS NOCMO=K < CONVERSION EN UNE ADRESSE-MOT : IF NOCMO=K-W,,XEIF%, IF ATTENTION : ICI ET AILLEURS DES TESTS IF D'IMPARITE SUIVANT UN DECALAGE A IF DROITE SONT MAUVAIS !!! XEIF%: VAL ENDIF JC E911CE < ERREUR : L'ADRESSE-OCTET EST IMPAIRE... STA VAR+CCBCV2 < MISE EN PLACE DE L'ADRESSE-MOT DU < BUFFER DANS LE 'CCB'... LA ARGDEM+CODEM < (A)=LONGUEUR OCTET DE L'ECHANGE, SLRS NOCMO=K < CONVERSION EN UNE LONGUEUR-MOTS, JC E911E < ERREUR, LA LONGUEUR-OCTETS ETAIT < IMPAIRE... CP VAR+LMCU < ET VALIDATION SUPERIEURE : JG E911E < TROP GRAND... STA VAR+CCBCU3 < OK, ON MET LA LONGUEUR-MOT DE L'ECHANGE < DANS LE 'CCB'. STZ VAR+CCBCV0 < INITILISATION DU PREMIER MOT SUR < UN CANAL MOT NORMAL... < < TEST DE L'ETAT DU COUPLEUR : < HDLCUF: EQU $ SIO VAR+ETAACU < (A)=MOT D'ETAT 'A' DU COUPLEUR, TBT BUSY1 < ALORS, COMMENT EST .NOT.BUSY1 ??? JNC HDLCUD < A 0, TRES MAUVAIS... TBT BXCU5 < A 1, MAIS ET 'VAL1' ??? JNC HDLCUE < A 0, OK... HDLCUD: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE POURQUOI LE COUPLEUR EST DANS CET ETAT ??? < HDLCUG: EQU $ JMP HDLCUF < ET ON RE-TESTE... HDLCUE: EQU $ < < ECHANGE PROPREMENT DIT : < LAD VAR+CCBCU < (A)=ADRESSE DU 'CCB', PSR X SVC SVCM6 < ADRESSE SUR 20 BITS DANS LE 'CCB'... PLR X BSR ASDIPI < QUE L'ON TRANSMET AU PROCESSEUR < GERANT LES ENTREES-SORTIES... BXCU3:: VAL COMSTR < SELECTION D'UNE SORTIE 'MOT2', BXCU4:: VAL COMTST < SELECTION D'UNE SORTIE 'MOT1', XWOR%2: VAL COSBT?COMINT=FMASK(K=FCINST LAI COSBT?BXCU4=FMASK(K?XWOR%2=FCINST SIO VAR+CDECU < LANCEMENT DE L'ECHANGE PAR LE 'MOT1', < QUI EST SEUL RECONNU PAR LE CANAL, ET < VALIDATION DES INTERRUPTIONS... BSR ACSWIT < ET ATTENTE DE LA FIN DE L'ECHANGE... < < LORS DE LA FIN D'ECHANGE, ON < VA REGARDER COMMENT TOUT CELA < S'EST PASSE : < LA VAR+CCBCU0 SBT BCCBCR STA VAR+CCBCU0 < ON MET LE 'CCB' EN MODE COMPTE-RENDU, LAD VAR+CCBCU BSR ASDIPI < QUE L'ON ENVOIE AU PROCESSEUR GERANT < LES ENTREES-SORTIES, LA VAR+CCBCU3 < (A)=COMPTE-RENDU, QUE L'ON VA ANALYSER : JAE E914A < TOUT S'EST BIEN PASSE... < < CAS DES DEFAUTS : < TBT BCCBDC < EST-CE UN DEFSEC/CLEAR ??? JC HDLCU2 < OUI, LE MIEUX EST DE RECOMMENCER... TBT BCCBME < EST-CE UN DEFAUT MEMOIRE ??? JNC HDLCUB < NON... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < IL CONVIENT DE REPERER SOIT < LA ZONE FAISANT DES PARITES, SOIT < DES MEMOIRE INEXISTANTES !!! < RBT BCCBME < ON EFFACE LE DEFAUT, HDLCUB: EQU $ JAE HDLCU2 < LE COMPTE DE MOTS RESIDUELS EST NUL, < ON RETENTE IMMEDIATEMENT... LAD VAR+TYSCU2 < ET BIEN NON, LE COUPLEUR, OU CE QUI < LUI EST RACCORDE EST EN DEFAUT, XR A,W < (W)=ADRESSE DE LA DEMANDE A 'TTYS', < ET (A)=SAVE L'ANCIEN 'W'... BSR ACHAND < ON ENVOIE LA DEMANDE A TTYS, BSR ACHANW < ET L'ON ATTEND... LR A,W < PUIS ENFIN, ON RESTAURE 'W'... XXTCU:: VAL 2 < DUREE DE LA TEMPORISATION INTER-TEN- < TATIVES SUR 'CU'... LXI XXTCU BSR ADODO < ET UN PETIT DODO, HDLCUC: EQU $ JMP HDLCU2 < ET ON RECOMMENCE TOUT... < < SORTIE DU MODE CANAL : < E914A: EQU $ LA ETAT1 JMP E914 < LE MOT D'ETAT DU COUPLEUR SERA AINSI < RENVOYE PAR 'ETAT0'... < < < P O I N T D ' E N T R E E D U H A N D L E R ' C U ' : < < HDLCU: EQU $ IF EXIST-K,XEIF%,,XEIF% IF ATTENTION : CE QUI SUIT EST IDIOT !!! XEIF%: VAL ENDIF CPZ VAR+XCCBCU < CE 'CU' A-T'IL LE MODE CANAL ??? JNE HDLCU2 < OUI, ALLONS VOIR SI C'EST CE MODE QUI EST < DEMANDE... < < < C A S D U M O D E P R O G R A M M E , < O U D U M O D E N O N C A N A L : < < HDLCUA: EQU $ LAI K SIO VAR+CDECU < INHIBITION DES INTERRUPTIONS... < < DISCRIMINATION MOT1/MOT2 : < LAI W STA VAR+LONCU < A PRIORI, ON NE VA ECHANGER QU'UN SEUL < MOT. LB VAR+ECHCU < (B)=ARGUMENT DE LA VRAIE 'SIO' D'E/S... LX ARGDEM+AMDEM < (X)=ADRESSE DU DEBUT DU BUFFER. LA ARGDEM+CODEM CPI XXCUM1 < EST-CE LE MOT2 ??? JE E911A < OUI... CPI XXCUM2 < EST-CE LE MOT1 ??? JE E911B < OUI... CPI XXCUMN JL E911E < ERREUR, TROP PETIT... SLRS NOCMO=K < LE CODEM EST PEUT-ETRE BON, < MAIS CORRESPOND-IL A UN NOMBRE ENTIER < DE MOTS ??? JC E911E < NON, ERREUR... STA VAR+LONCU < ET OUI, ON A AINSI LE NOMBRE DE MOTS < A ECHANGER... CPI XXCUMM/NOCMO < VALIDATION : JG E911E < ERREUR, TROP GRAND... CPI XXCUMP/NOCMO < OK, DISCRIMINATION ENTRE L'ITERATION < SUR LE MOT1 ET LE MOT2 : JLE E911A < ENTRE 'XXCUMN' ET 'XXCUMP' C'EST < L'ITERATION SUR LE MOT2 (ANCIEN MODE, < PAR EXEMPLE POUR PERFORER DES CARTES). JMP E911F < ENTRE 'XXCUMP' ET 'XXCUMM' C'EST < L'ITERATION SUR LE MOT1 (NOUVEAU MODE < POUR ACCEDER L'IMPRIMANTE BENSON EN < PROGRAMME SIMPLE...). IF NOCMO=K-W,,XEIF%, IF ATTENTION : TOUS LES TESTS D'IMPARITE SUIVANT IF UN DECALAGE A DROITE SONT IMPARFAITS !!! XEIF%: VAL ENDIF E911E: EQU $ ECNM:: VAL 2 < CODE D'ERREUR CONCERNANT UN 'CODEM' < INCORRECT... LAI ECNM JMP E914 < VERS LA SORTIE EN ERREUR... < < CAS DU MOT2 (ANCIEN MODE) : < E911A: EQU $ LYI BUSY2 < (Y)=BIT DE TEST DE .NOT.BUSY2. XWOR%1: VAL FPHDUM?FPHIN=K < DISCRIMINATION MOT1/MOT2... XWOR%2: VAL FPHDUM=K IF BIT>XWOR%2-FPHDUM,,XEIF%, IF ATTENTION : 'FPHDUM' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF XWOR%2: VAL FPHOUT=K IF BIT>XWOR%2-FPHOUT,,XEIF%, IF ATTENTION : 'FPHOUT' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF XWOR%2: VAL FPHIN=K IF BIT>XWOR%2-FPHIN,,XEIF%, IF ATTENTION : 'FPHIN' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF SBT NBITMO-B-XWOR%1+NBITMO < FONCTION 'FPHDUM' (MOT2). JMP E911C < < ACCES AU MOT1 (NOUVEAU MODE) : < E911B: EQU $ ADRI XXCUM2-XXCUM1,X < TRANSLATION DE L'ADRESSE DU BUFFER DANS < D'UN ECHANGE D'UN MOT SUR LE MOT1. E911F: EQU $ < DANS LE CAS D'UN ECHANGE ITERE SUR LE < MOT1, 'AMDEM' N'EST PAS TRANSLATE... < (DUR, DUR...) LYI BUSY1 < (Y)=BIT DE TEST DE .NOT.BUSY1. RBT NBITMO-B-XWOR%1+NBITMO < FONCTION 'FPHIN' (MOT1). < < PREPARATION DES ARGUMENTS : < E911C: EQU $ STB VAR+ECHCU < FONCTION D'E/S POUR LE 'GPI'. LR X,A < (A)=ADRESSE OCTET REELLE DU BUFFER, SLRS NOCMO=K < CONVERSION EN UNE ADRESSE MOT... JNC E911D < OK, ELLE EST BONNE... E911CE: EQU $ ECAIM:: VAL 3 < 'AMDEM' IMPAIR... LAI ECAIM JMP E914 < VERS LA SORTIE EN ERREUR... E911D: EQU $ STA VAR+MEMCU < MISE EN PLACE DU RELAI... < < < B O U C L E D ' I T E R A T I O N : < < E911I: EQU $ LA ARGDEM+OPDEM ANDI MKOPDM < RECUPERATION DE LA FONCTION DEMANDEE... < < PREPARATION DE L'OPERATION : < LR A,B < (B)=FONCTION DEMANDEE SUR LE CU. LX VAR+TXXNCU < (X)=NBRE MAX DE TENTATIVES DE < SIO SUR LE COUPLEUR AUTORISEE, < AVANT DE LE DECLARER EN ERREUR, < POUR DESOCCUPATION NON ARRIVEE. < < REALISATION DE LA FONCTION : < XWOR%1: VAL FGR?FGW=K < DISCRIMINATION LECTURE/ECRITURE... TBT NBITAB-B-XWOR%1 < TEST LECTURE (0) / ECRITURE (1) ??? JC E912 < C'EST UNE ECRITURE. < < L E C T U R E S U R C O U P L E U R U N I V E R S E L : < LA VAR+ECHCU XWOR%1: VAL FPHOUT?FPHIN=K RBT NBITMO-B-XWOR%1 < MEMORISATION DE LA FONCTION DE LECTURE, STA VAR+ECHCU < ET MISE A JOUR DE L'ARGUMENT DE 'SIO'... TBT NBITMO+BXCU1 < DOIT-ON ATTENDRE UNE INTERRUPTION ??? JNC E913 < NON... LAI MOMINT < OUI : SIO VAR+CDECU < ET ON VALIDE LES INTERRUPTIONS... RQST SIT < ATTENTE DES INTERRUPTIONS (PAR 'RQST' ET < NON PAR 'ACSWIT', ON NE SAIT JAMAIS, AU < CAS OU ELLES SERAIENT MONTEES ENTRE LEUR < VALIDATION ET LE 'RQST'...). LAI K SIO VAR+CDECU < PUIS, DEVALIDATION DES INTERRUPTIONS... CPZ ETAT0 < QUELLE EST LA NATURE DE L'INTERRUPTION ?? JE Z1010 < (ETAT0)=0 : INTERRUPTION NORMALE... JMP Z1011 < (ETAT0)#0 : INTERRUPTION EXCEPTION... E913: EQU $ SIO VAR+ETABCU < ENTREE DU MOT D'ETAT DANS 'A' : TBT BXCU2 < L'INFORMATION EST-ELLE VALIDE ??? JNC E913B < NON, ON RECOMMENCE... SIO VAR+ECHCU < OUI : < (A)=INFORMATION LUE. <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STA &VAR+MEMCU < SAUVEGARDE DE L'INFORMATION <******************************************************************************* JMP Z1010 E913B: EQU $ CPZR X < DOIT-ON DETECTER LE TIME-OUT ??? JE E913 < NON (TXXNCU=0)... JDX E913 < OUI... < < T I M E D - O U T S U R C O U P L E U R : < Z1011: EQU $ ECTO:: VAL 1 < 'TIME OUT SUR CU'. LAI ECTO < (A)=CODE D'ERREUR RENVOYE AU < DEMANDEUR, BIEN QU'IL NE SOIT < PAS RESPONSABLE !!! JMP E914 < VERS LA SORTIE DU HANDLER. < < FIN CORRECTE D'UNE 'SIO' DE LECTURE : < Z1010: EQU $ <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STA &VAR+MEMCU < RENVOI DU MOT LU SUR LE CU. <******************************************************************************* < < ITERATION EVENTUELLE SUR UN MOT SUIVANT : < E915: EQU $ IC VAR+MEMCU < ADRESSE DU MOT SUIVANT, DC VAR+LONCU < S'IL EXISTE... JG E911I < ET OUI, ON Y VA... LAI K < RETOUR OK. E914: EQU $ STA ETAT0 < MISE DANS ETAT0 DU CODE DE RETOUR RSR < GO BACK. < < E C R I T U R E S U R C O U P L E U R U N I V E R S E L : < E912: EQU $ LA VAR+ECHCU XWOR%1: VAL FPHOUT?FPHIN=K SBT NBITMO-B-XWOR%1 < MEMORISATION DE LA FONCTION D'ECRITURE, STA VAR+ECHCU < ET MISE A JOUR DE L'ARGUMENT DE 'SIO'. TBT NBITMO+BXCU1 < DOIT-ON ATTENDRE LES INTERRUPTIONS ??? JNC E912A < NON... LAI MOMSTR?MOMINT < OUI : SIO VAR+CDECU < VALIDATION DES INTERRUPTIONS ET MISE DU < 'MOT2' EN SORTIE... RQST SIT < ATTENTE DE L'INTERRUPTION (PAR 'RQST' ET < NON PAR 'ACSWIT', ON NE SAIT JAMAIS...). LAI K SIO VAR+CDECU < DEVALIDATION DES INTERRUPTIONS... CPZ ETAT0 < QUELLE FUT LA NATURE DE L'INTERRUPTION ?? JE E915 < (ETAT0)=0 : INTERRUPTION NORAMLE... JMP Z1011 < (ETAT0)#0 : INTERRUPTION EXCEPTION... E912A: EQU $ <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LA &VAR+MEMCU < (A)=MOT1/MOT2 A SORTIR... <******************************************************************************* SIO VAR+ECHCU < SORTIE DE L'INFORMATION (A) ; CECI < A POUR EFFET DE FAIRE TOMBER LE < SIGNAL .NOT.BUSY1/.NOT.BUSY2, E912B: EQU $ SIO VAR+ETABCU < ENTREE DU MOT D'ETAT DANS 'A', XR X,Y < (X)=BUSY1/BUSY2... TBT L,X < .NOT.BUSY1/.NOT.BUSY2 EST-IL REMONTE ??? XR X,Y JC E915X < OUI, LA SORTIE EST BONNE... CPZR X < DOIT-ON DETECTER LE TIME-OUT ??? JE E912B < NON (TXXNCU=0)... JDX E912B < NON, ON RECOMMENCE... JMP Z1011 < ERREUR : TIME-OUT... E915X: EQU $ BSR VAR+ASPCU < APRES UNE BONNE SORTIE, ON APPELLE < LE SOUS-PROGRAMME 'ASPCU'... JMP E915 < ET ON SORT... PAGE < < < I N T E R R U P T I O N S U R ' C U X ' : < < < FONCTION : < SUIVANT LA NATURE DE < L'INTERRUPTION QUI EST < MONTEE FAIT : < 1 - INTERRUPTION NORMALE : 'ITCU' < PROCEDE A L'ECHANGE DEMANDE, PUIS < REVEILLE LE HANDLER, < 2 - INTERRUPTION EXCEPTION : 'ITCU' < LIT LE MODE D'ETAT AFIN DE FAIRE < RETOMBER LE SOUS-NIVEAU, PUIS RE- < VEILLE LE HANDLER. < < < ARGUMENTS: < (B)=0 : SOUS-NIVEAU NORMAL, < =1 : SOUS-NIVEAU EXCEPTION. < (MEMCU)=RELAI INDEXE VERS LE BUFFER D'ECHANGE, < (ECHCU)=SENS DE L'ECHANGE. < < ITCU: EQU $ STZ ETAT0 < INTERRUPTION NORMALE A PRIORI... CPZR B < QUELLE EST LA NATURE DE L'INTERRUPTION ?? JNE ITCU2 < INTERRUPTION D'EXCEPTION... < < CAS D'UNE INTERRUPTION NORMALE : < LA VAR+ECHCU < ACCES AU SENS DE L'ECHANGE : XWOR%1: VAL FPHOUT?FPHIN=K TBT NBITMO-B-XWOR%1 JC ITCU1 < CAS D'UNE ECRITURE... < < CAS D'UNE LECTURE : < SIO VAR+ECHCU < (A)=INFORMATION PRESENTE EN ENTREE, BSR ATEC < MAIS Y-A-T'IL BIEN UN ECHANGE EN COURS ?? JE ITCU5 < NON, L'INFO LUE EST IGNOREE... STA &VAR+MEMCU < OUI, MISE DE L'INFORMATION VALIDE DANS < LE BUFFER... ITCU5: EQU $ JMP ITCU3 < < CAS D'UNE ECRITURE : < ITCU1: EQU $ LAI K < PAS D'ECHANGE EN COURS A PRIORI... BSR ATEC < ALORS ??? JE ITCU4 < PAS D'ECHANGE EN COURS... LA &VAR+MEMCU < OUI, IL Y A UN ECHANGE EN COURS, ON < PREPARE L'INFORMATION A SORTIR... ITCU4: EQU $ SIO VAR+ECHCU < QUE L'ON ECRIT SUR LE 'CUX'... JMP ITCU3 < < CAS D'UNE INTERRUPTION EXCEPTION : < ITCU2: EQU $ CPZ VAR+XCCBCU < CE 'CU' A-T'IL UN MODE CANAL ??? JE ITCU6 < NON... < < CAS D'UN FONCTIONNEMENT EN MODE CANAL : < SIO VAR+ETAACU < ON RECUPERE LE MOT D'ETAT 'A' POUR FAIRE < RETOMBER LE SIGNAL D'APPEL EXTERNE < 'APEX1' ASSOCIE AU MOT1... XWOR%1: VAL FPHOUT?FPHIN=K LA VAR+CCBCU4 TBT NBITMO-B-XWOR%1 < EST-CE UNE ENTREE OU UNE SORTIE ??? JNC ITCU7 < UNE ENTREE... XWOR%2: VAL CORBT?COMINT=FMASK(K=FCINST XWOR%2: VAL CORBT?BXCU4=FMASK(K?XWOR%2=FCINST LAI XWOR%2 < UNE SORTIE : SIO VAR+CDECU < ON INVALIDE LES PORTES DE SORTIE ET < LES INTERRUPTIONS. ITCU7: EQU $ LAI CORBT?COMFBK=FMASK(K=FCINST SIO VAR+CMDCU < ET ON ENVOIE UNE COMMANDE DE FIN DE BLOC. JMP ITCU8 < < CAS DU MODE PROGRAMME GERE PAR INTERRUPTIONS : < ITCU6: EQU $ SIO VAR+ETABCU < ENTREE MOT D'ETAT 'B'... ITCU8: EQU $ IC ETAT0 ITCU3: EQU $ BSR ATEC < Y-A-T'IL UNE OPERATION EN COURS ??? JE E911 < NON, IGNORONS L'INTERRUPTION... BSR ARVHDL < OUI, ON REVEILLE LE 'HANDLER'... E911: EQU $ RSR PAGE < < < M E M O I R E D E S C O U L E U R S : < < CALL #SISP CMS5 CHECK# MCOLOR: EQU $ NCOLOR: EQU MCOLOR < A CAUSE DE REFERENCES EN AVANT... DO XXCULM WORD XXCUMB?XXCUMV?XXCUMR CALL #SISP CMS5 CHECK# PAGE < < < G E S T I O N D E L A M E M O I R E D E S < C O U L E U R S P A R ' C U 3 ' : < < SPCUC: EQU $ LR Y,A CPI BUSY2 < EST-CE LE MOT2 QUE L'ON A ECRIT ??? JNE SPCUC1 < NON, DONC PAS DE COULEURS... PSR B,X,W <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LB &VAR+MEMCU < (B)=MOT ARGUMENT... <******************************************************************************* LRM A,W WORD XXCUC0)MMOT < (A)=MASQUE DE DETECTION DES BITS DE TETE, WORD MCOLOR < (W)=BASE DE LA MEMOIRE DES COULEURS. ANDR B,A CPR A,B < LES BITS 'XXCUC0' SONT-ILS LA ??? JNE SPCUC2 < OUI, DONC PAS DE COULEURS... LR A,B < (B)=ARGUMENT DE COLORIAGE... ANDI XXCUAD XWOR%1: VAL XXCUAD=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 < (A)=ADRESSE DES REGISTRES A POSITIONNER.. XEIF%: VAL ENDIF ADR A,W < (W)=ADRESSE DE LA MEMOIRE DE COULEURS A < A POSITIONNER... LR B,A ANDI XXCUNI XWOR%1: VAL XXCUNI=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 XEIF%: VAL ENDIF LR A,X < (X)=NIVEAU DE LUMINANCE DEMANDE. < < GESTION DU CANAL ROUGE EN DIFFUSION : < TBT NBITMO+XXCUCR JNC SPCUC3 < PAS DE ROUGE EN SORTIE EN (W)... LAI XXCUMR)MMOT AND O,W < CLEAR LA MEMOIRE, XWOR%1: VAL XXCUMR=K IF XWOR%1-K,,XEIF%, SCRS XWOR%1 < CADRAGE, XEIF%: VAL ENDIF ORR X,A < ET CONCATENATION DE LA LUMINANCE, IF XWOR%1-K,,XEIF%, SCLS XWOR%1 < ET RECADRAGE, XEIF%: VAL ENDIF STA O,W < ET MISE A JOUR DE LA MEMOIRE... < < GESTION DU CANAL VERT EN DIFFUSION : < SPCUC3: EQU $ TBT NBITMO+XXCUCV JNC SPCUC4 < PAS DE VERT EN SORTIE EN (W)... LAI XXCUMV)MMOT AND O,W < CLEAR LA MEMOIRE, XWOR%1: VAL XXCUMV=K IF XWOR%1-K,,XEIF%, SCRS XWOR%1 < CADRAGE, XEIF%: VAL ENDIF ORR X,A < ET CONCATENATION DE LA LUMINANCE, IF XWOR%1-K,,XEIF%, SCLS XWOR%1 < ET RECADRAGE, XEIF%: VAL ENDIF STA O,W < ET MISE A JOUR DE LA MEMOIRE... < < GESTION DU CANAL BLEU EN DIFFUSION : < SPCUC4: EQU $ TBT NBITMO+XXCUCB JNC SPCUC5 < PAS DE BLEU EN SORTIE EN (W)... LRM A WORD XXCUMB)MMOT AND O,W < CLEAR LA MEMOIRE, XWOR%1: VAL XXCUMB=K IF XWOR%1-K,,XEIF%, SCRS XWOR%1 < CADRAGE, XEIF%: VAL ENDIF ORR X,A < ET CONCATENATION DE LA LUMINANCE, IF XWOR%1-K,,XEIF%, SCLS XWOR%1 < ET RECADRAGE, XEIF%: VAL ENDIF STA O,W < ET MISE A JOUR DE LA MEMOIRE... < < SORTIE : < SPCUC5: EQU $ SPCUC2: EQU $ PLR B,X,W SPCUC1: EQU $ < < < S O U S - P R O G R A M M E V I D E : < < SPCUV: EQU $ RSR PAGE < < < 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 : < < < FONCTION : < CE MODULE IMPLEMENTE ICI, AFIN DE < BENEFICIER DE 'DCTCU3' INITIALISE < LA MEMOIRE DES COULEURS, ET LE CON- < TROLEUR DE 'CRT' (OU REINITIALISE A < LA SUITE D'UN DEFAUT SECTEUR..). < LE 'RESTART' SE BRANCHE BRUTALEMENT < ICI SANS FAIRE DE DEMANDE DE SERVICE < POUR PLUSIEURS RAISONS : < 1 - C'EST PEUT-ETRE 'HDLCU3' QUI A < ETE INTERROMPUE PAR UN EVENTUEL DEFAUT < SECTEUR, OU BIEN ELLE EST ACTIVE ET NE < PEUT ACCEPTER PRESENTEMENT DE DEMANDE < DE SERVICE. < 2 - IL Y A PEUT ETRE UN !ASSIGN SUR < LE 'CU3', AUQUEL CAS, LE RESTART NE < POURRAIT ENVOYER SA DEMANDE... < < XXCWA:: VAL 10 < NOMBRE D'ITERATIONS SUR LE 'DODO' < D'ATTENTE DE FIN DE PROGRAMMATION < DU CONTROLEUR DE 'CRT'. XXCLIR:: VAL 1 < VALEUR A ENVOYER POUR CLEARER LA CARTE < DE TELEVISION NUMERIQUE. XXCSEL:: VAL BITSIG < BIT DE SELECTION DU PROGRAMMATEUR DU < CONTROLEUR DE 'CRT'. XXCENA:: VAL 4 < BIT 'ENABLE' : < 0 : LATCH DES VALEURS PRESENTEES, < 1 : ECRITURE DE CELLES-CI. XXCADV:: VAL 6 < BIT DE SELECTION : < 0 : ADRESSE DE REGISTRE, < 1 : SON CONTENU. XWOR%1: VAL COSBT?XXCSEL=FMASK(K=FCINST XWOR%2: VAL CORBT?XXCENA=FMASK(K?XWOR%1=FCINST XXC1:: VAL CORBT?XXCADV=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?XXCENA=FMASK(K?XWOR%1=FCINST XXC2:: VAL CORBT?XXCADV=FMASK(K?XWOR%2=FCINST XWOR%2: VAL CORBT?XXCENA=FMASK(K?XWOR%1=FCINST XXC3:: VAL COSBT?XXCADV=FMASK(K?XWOR%2=FCINST XWOR%2: VAL COSBT?XXCENA=FMASK(K?XWOR%1=FCINST XXC4:: VAL COSBT?XXCADV=FMASK(K?XWOR%2=FCINST XWOR%2: VAL XXCADV-I?COSBT=FMASK(K?XWOR%1=FCINST XWOR%2: VAL XXCADV?COSBT=FMASK(K?XWOR%2=FCINST XWOR%2: VAL XXCADV+I?COSBT=FMASK(K?XWOR%2=FCINST XXC5:: VAL CORBT?XXCENA=FMASK(K?XWOR%2=FCINST < < < I N I T I A L I S A T I O N G E N E R A L E : < < < ARGUMENT : < (B)=ADRESSE DE RETOUR (EN EFFET, 'GOCOL' < N'EST PAS APPELE PAR UN 'BSR'...). < < GOCOL: EQU $ PSR B < SAUVEGARDE DE L'ADRESSE DE RETOUR ; EN < EFFET, BIEN QUE CONSIDERE COMME UN SOUS- < PROGRAMME, 'GOCOL' N'EST PAS APPELE PAR < UN 'BSR'... LA ETASYS TBT TVEXIS < MAIS LA TELEVISION NUMERIQUE EST-ELLE LA? JNC INITC3 < NON, ON NE FAIT RIEN... PSR X,Y,L,W LXI NSPCU3 BSR ACADCT < RENVOIE : (A)=(L)=ADRESSE DE 'DCTCU3'... < < < C L E A R T E L E V I S I O N N U M E R I Q U E : < < LYI BUSY1 < POUR TESTER LA DESOCCUPATION... LAI XXCLIR SIO VAR+CUCLIR < CLEAR LA CARTE, BSR VAR+ASPCU1 < ET ATTENTE DE FIN DE CLEAR... LAI K SIO VAR+CUCLIR < RETOUR A L'ETAT BAS, BSR VAR+ASPCU1 < ET ATTENTE DE FIN... < < < I N I T I A L I S A T I O N D U C O N T R O L E U R < D E ' C R T ' : < < LRM W WORD LICRT < (W)=ADRESSE DU CONTENU A DONNER AU < REGISTRE COURANT DE NUMERO (X). LYI BUSY2 < POUR TESTER LA DESOCCUPATION... LRM A WORD XXC5 SIO VAR+CUINIT < "OUVERTURE" DE L'OPERATION... BSR VAR+ASPCU1 < ET ATTENTE DE FIN D'OUVERTURE... < < PROGRAMMATION DU REGISTRE DE NUMERO (X) : < LXI K < (X)=NUMERO DE REGISTRE COURANT. INITC2: EQU $ LRM A WORD XXC1 ORR X,A SIO VAR+CUINIT < LATCH DU NUMERO DE REGISTRE. BSR VAR+ASPCU1 < ET ATTENTE DE FIN DE LATCH... LRM A WORD XXC2 ORR X,A SIO VAR+CUINIT < ECRITURE DU NUMERO DE REGISTRE. BSR VAR+ASPCU1 < ET ATTENTE DE FIN D'ECRITURE... LRM A WORD XXC3 OR O,W SIO VAR+CUINIT < LATCH DE LA VALEUR DU REGISTRE. BSR VAR+ASPCU1 < ET ATTENTE DE FIN DE LATCH... LRM A WORD XXC4 OR O,W SIO VAR+CUINIT < ECRITURE DE LA VALEUR DU REGISTRE... BSR VAR+ASPCU1 < ET ATTENTE DE FIN D'ECRITURE... ADRI D,W < PASSAGE A LA VALEUR ADRI I,X < DU REGISTRE SUIVANT LR X,A CPI LLICRT < S'IL EXISTE ??? JL INITC2 < OUI... LRM A WORD XXC5 SIO VAR+CUINIT < NON, ON "FERME" L'OPERATION... BSR VAR+ASPCU1 < ET ATTENTE DE FIN DE FERMETURE... < < < A T T E N T E D E F I N D E P R O G R A M M A T I O N < D U C O N T R O L E U R D E C R T : < < LXI XXCWA INITC4: EQU $ PSR X LXI K-I < POUR ATTENDRE UN MAXIMUM... BSR ADODO < ET ON ATTEND... PLR X JDX INITC4 < ET ENCORE, ET TOUJOURS... < < < M E M O I R E D E S C O U L E U R S : < < LXI K < (X)=NUMERO DE REGISTRE COURANT... LRM W WORD MCOLOR < (W)=ADRESSE DE L'ENTREE COURANTE. < < ITERATION SUR CHAQUE ENTREE : < INITC1: EQU $ XWOR%2: VAL XXCUNI=K < POUR LE NIVEAU DE GRIS... XWOR%3: VAL XXCUAD=K < POUR L'ADRESSE DU REGISTRE... LAI XXCUMR AND O,W < ACCES AU NIVEAU DE ROUGE DU REGISTRE < (X) COURANT, XWOR%1: VAL XXCUMR=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 < ET CADRAGE A DROITE... XEIF%: VAL ENDIF SCRS XWOR%3-XWOR%2 ORR X,A < CONCATENATION DE L'ADRESSE DU REGISTRE, SCLS XWOR%3 < ET CADRAGE... SBT XXCUCR < SELECTION DU CANAL ROUGE... SIO VAR+CUINIT < INITIALISATION DU CANAL ROUGE DU < REGISTRE (X), BSR VAR+ASPCU1 < ET ATTENTE DE FIN... LAI XXCUMV AND O,W < ACCES AU NIVEAU DE VERT DU REGISTRE < (X) COURANT, XWOR%1: VAL XXCUMV=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 < ET CADRAGE A DROITE... XEIF%: VAL ENDIF SCRS XWOR%3-XWOR%2 ORR X,A < CONCATENATION DE L'ADRESSE DU REGISTRE, SCLS XWOR%3 < ET CADRAGE... SBT XXCUCV < SELECTION DU CANAL VERT... SIO VAR+CUINIT < INITIALISATIION DU CANAL VERT DU < REGISTRE (X), BSR VAR+ASPCU1 < ET ATTENTE DE FIN... LRM A WORD XXCUMB AND O,W < ACCES AU NIVEAU DE BLEU DU REGISTRE < (X) COURANT, XWOR%1: VAL XXCUMB=K IF XWOR%1-K,,XEIF%, SLRS XWOR%1 < ET CADRAGE A DROITE... XEIF%: VAL ENDIF SCRS XWOR%3-XWOR%2 ORR X,A < CONCATENATION DE L'ADRESSE DU REGISTRE, SCLS XWOR%3 < ET CADRAGE... SBT XXCUCB < SELECTION DU CANAL BLEU... SIO VAR+CUINIT < INITIALISATION DU CANAL BLEU DU < REGISTRE (X), BSR VAR+ASPCU1 < ET ATTENTE DE FIN... ADRI D,W < PUIS PASSAGE A L'ENTREE SUIVANTE, ADRI I,X < PASSAGE AU REGISTRE SUIVANT, LR X,A CPI XXCULM < S'IL EXISTE ??? JL INITC1 < OUI... < < FIN DE L'INITIALISATION : < PLR X,Y,L,W INITC3: EQU $ RSR < ET RETOUR (CORRESPONDANT AU < 'PSR''B' DE TETE...). < < < T E S T D E D E S O C C U P A T I O N : < < < FONCTION : < TESTE LA FIN D'UNE OPERATION < PRECEDEMMENT DEMANDEE ; A NOTER < QU'IL Y A UN TEST DE TIME-OUT < DESTINE AU CAS OU LE SYSTEME SERAIT < ABSENT, MAIS RIEN N'EST FAIT S'IL Y < A TIME-OUT !!! < < < ARGUMENT : < (Y)=NUMERO D'UN BIT A TESTER DANS LE MOT D'ETAT. < < < RESULTAT : < (A)=VALEUR COURANTE DU DETECTEUR DE TIME-OUT. < (DOIT ETRE DIFFERENTE DE 0 SI OK...) < < SPCU1: EQU $ PSR X LX VAR+TXXNCU < (X)=DETECTEUR DE TIME-OUT... SPCU11: EQU $ SIO VAR+ETABCU < (A)=MOT D'ETAT : XR X,Y TBT L,X < ALORS C'EST FINI ??? XR X,Y JC SPCU12 < OUI, OK... JDX SPCU11 < NON, DETECTION DES TIME-OUT... < < NOTA : < SI ON ARRIVE ICI, IL Y A < TIME OUT MAIS ON NE FAIT RIEN < SI CE N'EST QUE L'ON VA FAIRE : < (A)=(X)=0... < SPCU12: EQU $ LR X,A < A EST NUL S'IL Y A TIME OUT... PLR X RSR PAGE < < < C O N S T A N T E S D I V E R S E S ' L P ' : < < XXTLP:: VAL 2 < DUREE DE LA TEMPORISATION ENTRE 2 < MESSAGES SUR 'TTYS'. XXTOLP:: VAL 8 < DUREE DU DETECTEUR DE 'TIME-OUT'. XXLP0:: VAL K < INDEX D'OCTET, XXLP1:: VAL XXLP0+I < DE MEME... CALL #SISP CMS5 CHECK# PAGE < < < D C T L P 1 : < < CALL #SISP CMS5 DOL1# DCTLP1: EQU $ PSTLP1: WORD K;K;K;K;COM+DEPCS;DCTLP1;NIL;PILLP1;HANDLR;SMST;SO;SE #@ASCI " LP1" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR 'LP1', WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR 'LP1'. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLLP < HANDLER SPECIFIQUE 'LP1'. WORD ITLP < ROUTINE SPECIFIQUE D'INTERRUPTION 'LP1'. WORD K;K < ETAT WORD COSBT?B0SIT=FMASK(K?'0100=FCINST < BITSEM : REVEIL SUR DEFAUT SECTEUR. WORD XXNTRY;TRYVID < NTRIES ET FRTRY. WORD K < HSTATS. WORD XXTOLP < TESTO#0 : TIME-OUT A TESTER. WORD COSBT?FGW=FMASK(K=FCINST WORD COSBT?FGW=FMASK(K=FCINST < DCTFUP. < < < Z O N E V A R I A B L E : < < VARLP: EQU $ < ZONE VARIABLE DCTLP1 VARLP1: EQU $ IF VARLP1-DCTLP1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPERANDES DES 'SIO' : < WORD ACLP1?FPHETA ETALP1:: VAL $-D-VARLP < OPERANDE DE LA 'SIO' ENTREE DU MOT D'ETAT WORD ACLP1?FPHCMD CDELP1:: VAL $-D-VARLP < OPERANDE DE LA 'SIO' DE SORTIE COMMANDE. < < RELAIS DIVERS : < WORD BULP1,X AXBULP:: VAL $-D-VARLP < RELAI INDEX SUR UN BUFFER 'LP1' ; < CE BUFFER EST PARFOIS NECESSAIRE < SI LE BUFFER UTILISATEUR N'EST PAS < A UNE FRONTIERE DE MOT. WORD RCLF,X AXRCLF:: VAL $-D-VARLP < RELAI INDEXE VERS UN MESSAGE 'R/C'-'LF', < AFIN DE SIMULER LE CODE '6D UTILISABLE < PAR LES UTILISATEURS (ON N'EST JAMAIS < TROP AIMABLE), POUR COMPATIBILITE AVEC LE < AVEC LES VISUS... < < INFORMATIONS DE DIMENSIONNEMENT : < WORD LMBLP1 NMAXLP:: VAL $-D-VARLP < NOMBRE MAXIMUM D'OCTETS ECHANGEABLES. WORD W NMINLP:: VAL $-D-VARLP < NOMBRE MINIMUM D'OCTETS ECHANGEABLES. WORD NILX C1MICA:: VAL $-D-VARLP < RELAI D'ACCES AU PREMIER OCTET D'UN < < BUFFER A EDITER... < DEMANDE A 'TTYS' D'AVERTISSEMENT < DE L'OPERATEUR EN CAS DE NON- < OPERATIONNALITE DE 'LP1' : < BYTE NSPTYS;XDSYM TYSLP1:: VAL $-D-VARLP WORD FGW < ECRITURE... DZS LDEM0+VARLP-$+TYSLP1 < NOTA : CETTE DEMANDE N'EST PAS < METICULEUSEMENT VALIDEE PAR TTYS... < < RELAIS DE SOUS-PROGRAMMES : < WORD EDLLP AEDLLP:: VAL $-D-VARLP < EDITION D'UNE CHAINE D'OCTETS. < < 'CCB' DE 'LP1' : < WORD K CCBLQ0:: VAL $-D-VARLP < POUR INITIALISER 'CCBLP0'... WORD K CCBLQ2:: VAL $-D-VARLP < ET 'CCBLP2'... CCBLP:: VAL $-VARLP < 'CCBLP' : WORD K CCBLP0:: VAL $-D-VARLP < MOT0. BYTE CCBLDC?XSNLP1;K CCBLP1:: VAL $-D-VARLP < MOT1 : SOUS-NIVEAU D'INTERRUPTION. WORD K CCBLP2:: VAL $-D-VARLP < MOT2 : ADRESSE-MOT BUFFER. WORD NILK CCBLP3:: VAL $-D-VARLP < MOT3 : COMPTE D'OCTETS, < PUIS COMPTE RENDU... WORD ACLP1?FPHOUT CCBLP4:: VAL $-D-VARLP < MOT4 : OPERANDE 'SIO' SORTIE INFORMATION. < < < P I L E : < < XWPILE: VAL LPILEH+16 PILLP1:#@EQU $-DEPILE < #SISP CMS5 GENPIL1# PAGE < < < C O N S T A N T E S D I V E R S E S ' C R ' : < < XXCR1:: VAL 14+8 < INCREMENT DES LONGUEURS DE PILE. XXTCR:: VAL 8 < DUREE DE TEMPORISATION ENTRE 2 < MESSAGES SUR 'TTYS'. XXTOCR:: VAL 8 < DUREE DU DETECTEUR DE 'TIME-OUT'. FGCRA:: VAL FAVR < FONCTION 'LECTURE ASCI', FGCRAE:: VAL FAVRE < FONCTION 'LECTURE ASCI AVEC ECHO', FGCRB:: VAL 8 < FONCTION 'LECTURE BINAIRE'. XWOR%1: VAL K XWOR%1: VAL COSBT?FGCRA=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGCRAE=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGCRB=FMASK(K?XWOR%1=FCINST XXCR2:: VAL XWOR%1 < LISTE DES FONCTIONS RECONNUES. XWOR%1: VAL K XWOR%1: VAL COSBT?FGCRA=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGCRAE=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?FGCRB=FMASK(K?XWOR%1=FCINST XXCR3:: VAL XWOR%1 < "ALTITUDES" DES FONCTIONS 'CR'. PAGE < < < D C T C R 1 : < < DCTCR1: EQU $ PSTCR1: WORD K;K;K;K;COM+DEPCS;DCTCR1;NIL;PILCR1;HANDLR;SMST;SO;SE #@ASCI " CR1" < #SISP CMS5 ASCI# BYTE NSPLP1;NOUSER < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR CR1, WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR CR1. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLCR < HANDLER SPECIFIQUE DES 'CRX'. WORD ITCR < ROUTINE SPECIFIQUE D'INTERRUPTION 'CRX'. WORD K;K < ETAT. XCRMY:: VAL '0200 < CONSTANTE MYSTERIEUSE !??!???!! WORD COSBT?B0SIT=FMASK(K?XCRMY=FCINST WORD XXNTRY;TRYVID < NTRIES & FRETRY. WORD K < HSTATS. WORD XXTOCR < TESTO#0 : TIME-OUT A TESTER. WORD XXCR2 < LISTE DES FONCTIONS RECONNUES. WORD XXCR3 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARCR: EQU $ VARCR1: EQU $ IF VARCR1-DCTCR1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPERANDES DES 'SIO' : < WORD ACCR1?FPHCMD CDECR1:: VAL $-D-VARCR < ARGUMENT DE 'SIO' DE SORTIE COMMANDE. WORD ACCR1?FPHETA ETACR1:: VAL $-D-VARCR < ARGUMENT DE 'SIO' D'ENTREE MOT D'ETAT. < < RELAIS : < WORD BUCR1 ABUCR:: VAL $-D-VARCR < RELAI D'ACCES A UN BUFFER DE TRANSIT < UTILISE LORS DES LECTURES 'ASCI'. WORD BUCR1,X AXBUCR:: VAL $-D-VARCR < IDEM, MAIS INDEXE... WORD NILX AXRCR:: VAL $-D-VARCR < RELAI INDEXE D'ACCES AU BUFFER ARGUMENT. < < DEMANDE A 'TTYS' DESTINEE A < L'OPERATEUR EN CAS DE NON- < OPERATIONNALITE DE 'CR1' : < BYTE NSPTYS;XDSYM TYSCR1:: VAL $-D-VARCR WORD FGW < ECRITURE... DZS LDEM0+VARCR-$+TYSCR1 < NOTA : CETTE DEMANDE N'EST PAS < METICULEUSEMENT VALIDEE PAR TTYS... < < DEMANDE D'ECHO SUR LE PERIPHERIQUE < ASSOCIE A 'CR1' LORS DES LECTURES < 'ASCI' AVEC ECHO : < BYTE NILK;XDSYM ECHOCR:: VAL $-D-VARCR < DEMANDE D'ECRITURE SUR LE < PERIPHERIQUE ASSOCIE A 'CR1' < PAR L''IOID' DE LA 'DCT'... WORD FGW < DEMANDE D'ECRITURE. WORD NIL < AMDEM : CONTIENT L'AMDEM < ARGUMENT D'UNE DEMANDE A 'CR1' < LORS D'UN ECHO. WORD NILK < CODEM : CONTIENT LE CODEM < ARGUMENT D'UNE DEMANDE A 'CR1' < LORS D'UN ECHO. DZS LDEM0+VARCR-$+ECHOCR < < 'CCB' DE 'CR1' : < WORD K CCBCR5:: VAL $-D-VARCR < POUR INITIALISER 'CCBCR0'... WORD K CCBCS2:: VAL $-D-VARCR < POUR INITIALISER 'CCBCR0'... CCBCR:: VAL $-VARCR < 'CCBCR' : WORD K CCBCR0:: VAL $-D-VARCR < MOT0. BYTE CCBLDC?XSNCR1;K CCBCR1:: VAL $-D-VARCR < MOT1 : SOUS-NIVEAU D'INTERRUPTION. WORD NIL CCBCR2:: VAL $-D-VARCR < MOT2 : ADRESSE-MOT DU BUFFER. WORD NILK CCBCR3:: VAL $-D-VARCR < MOT3 : LONGUEUR-OCTET, PUIS COMPTE RENDU. WORD ACCR1?FPHIN CCBCR4:: VAL $-D-VARCR < MOT4 : OPERANDE 'SIO' SORTIE INFORMATION. < < < P I L E : < < CALL #SISP CMS5 DOL2# PILCR1: EQU $-DEPILE < EMPLACEMENT VARIABLE DANS LA DCT. XWPILE: VAL LPILEH+XXCR1 CALL #SISP CMS5 GENPIL2# PAGE < < < D C T C R 2 : < < CALL #SISP CMS5 DOL1# DCTCR2: EQU $ PSTCR2: WORD K;K;K;K;COM+DEPCS;DCTCR2;NIL;PILCR2;HANDLR;SMST;SO;SE #@ASCI " CR2" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE SUR CR2, WORD NIL < QUEUE DE LA FILE D'ATTENTE SUR CR2. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLCR < HANDLER SPECIFIQUE DES 'CRX'. WORD ITCR < ROUTINE SPECIFIQUE D'INTERRUPTION 'CRX'. WORD K;K < ETAT. WORD COSBT?B0SIT=FMASK(K?XCRMY=FCINST WORD XXNTRY;TRYVID < NTRIES ET FRETRY. WORD K < HSTATS. WORD XXTOCR < TESTO#0 : TIME-OUT A TESTER. WORD XXCR2 < LISTE DES FONCTIONS RECONNUES. WORD XXCR3 < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARCR2: EQU $ IF VARCR2-DCTCR2-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF WORD ACCR2?FPHCMD < OPERANDE 'SIO' DE SORTIE COMMANDE. WORD ACCR2?FPHETA < OPERANDE 'SIO' D'ENTREE DE MOT D'ETAT. < < RELAIS : < WORD BUCR2 < RELAI D'ACCES BUFFER CR2 (ASCI). WORD BUCR2,X < RELAI INDEXE D'ACCES A 'BUCR2'. WORD NILX < RELAI INDEXE CALCULE. < < DEMANDE A 'TTYS' EN CAS DE NON- < OPERATIONNALITE DE 'CR2' : < BYTE NSPTYS;XDSYM TYSCR2:: VAL $-D-VARCR2 WORD FGW < ECRITURE... DZS LDEM0+VARCR2-$+TYSCR2 < < DEMANDE D'ECHO SUR LE PERIPHERIQUE < ASSOCIE A 'CR2' LORS DES LECTURES < 'ASCI' AVEC ECHO : < BYTE NILK;XDSYM ECHOC2:: VAL $-D-VARCR2 < DEMANDE D'ECRITURE SUR LE < PERIPHERIQUE ASSOCIE A CR2 < PAR L'IOID DE LA DCT. WORD FGW < DEMANDE D'ECRITURE. WORD NIL < AMDEM : CONTIENT L'AMDEM < ARGUMENT D'UNE DEMANDE A 'CR2' < LORS D'UN ECHO. WORD NILK < CODEM : CONTIENT LE CODEM < ARGUMENT D'UNE DEMANDE A 'CR2' < LORS D'UN ECHO. DZS LDEM0+VARCR2-$+ECHOC2 < < 'CCB' DE 'CR2' : < WORD K < POUR INITIALISER LE MOT0, WORD K < ET LE MOT2... WORD K < MOT0. BYTE CCBLDC?XSNCR2;K < MOT1 : SOUS-NIVEAU D'INTERRUPTION. WORD NIL WORD NILK WORD ACCR2?FPHIN WORD K < POUR INITIALISER 'CCBCR0'... < < < P I L E : < < CALL #SISP CMS5 DOL2# PILCR2: EQU $-DEPILE < EMPLACEMENT VARIABLE DANS LA DCT. XWPILE: VAL LPILEH+XXCR1 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R I M P R I M A N T E : < < < FONCTION : < TRES SIMPLEMENT, REALISER < LA SORTIE DEMANDEE, EN SIMU- < LANT EVENTUELLEMENT LE CODE < '6D DES VISUS. < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' CORRESPONDANTE, < (W)=ADRESSE DE LA DEMANDE COURANTE (DE TETE), < (A)='NSPTYP' DE LA DEMANDE COURANTE. < < USE L,DCT0 USE W,DEM0 HDLLP: EQU $ CALL #SISP CMS5 PSRSLO# < < INITIALISATION DU RELAI D'ACCES AU < PREMIER CARACTERE DU MESSAGE A EDITER : < < < NOTA : < < LE 'MOT2' DU 'CCB' CONTIENT < UNE ADRESSE-MOT ; SI MALHEUREU- < SEMENT LE MESSAGE ARGUMENT A EDI- < TER N'EST PAS A UNE FRONTIERE DE < MOTS, IL CONVIENT DE LE TRANSFERER < DANS UN BUFFER LOCAL 'BUFLP'... < LA ARGDEM+AMDEM < ACCES A L'ADRESSE D'OCTETS DU < BUFFER D'EMISSION. BSR AMEM < RENVOIE : < (A)= RELAI D'INDIRECTION INDEXE < VERS LE BUFFER, < (X)=0 : SI LE PREMIER OCTET EST A GAUCHE, < =1 : SI LE PREMIER OCTET EST A DROITE. STA VAR+C1MICA < GENERATION DU RELAI D'ACCES AU < 1ER CARACTERE. CPZR X < EST-ON A UNE FRONTIERE DE MOT OU < D'OCTET ??? JE HDLLP3 < OK, DE MOT... < < D'OCTET, IL FAUT TRANSFERER < DANS LE BUFFER LOCAL : < LY VAR+NMAXLP NGR Y,Y < POUR LE DECOMPTAGE DES OCTETS... HDLLP4: EQU $ <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LBY &VAR+C1MICA <******************************************************************************* ADRI -I,X STBY &VAR+AXBULP < TRANSFERT DU CARACTERE COURANT, ADRI I+I,X < ET PASSAGE ADRI I,Y < AU SUIVANT... CPZR Y < S'IL EXISTE... JL HDLLP4 < OUI... LXI XXLP0 < POUR LA SUITE... LA VAR+AXBULP STA VAR+C1MICA < GENERATION DU RELAI D'ACCES AU BUFFER... CALL #SISP CMS5 PAGE0# HDLLP3: EQU $ < < VALIDATION DE LA DEMANDE ARGUMENT : < LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : CPI FGW < EST-CE BIEN UNE ECRITURE ??? JNE ERLP11 < NON, ERREUR... LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS DU MESSAGE, CP VAR+NMAXLP < VALIDATION SUPERIEURE : JG ERLP13 < ERREUR, TROP GRAND... CP VAR+NMINLP < VALIDATION INFERIEURE : JL ERLP13 < ERREUR, TROP PETIT... < < FAUT-IL SIMULER LE CODE '6D ??? < <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LBY &VAR+C1MICA <******************************************************************************* CPI K6D < Y-A-T'IL UN CODE '6D EN TETE ??? JNE HDLLP1 < NON... < < SIMULATION DU CODE '6D : < LA ARGDEM+CODEM LB VAR+C1MICA PSR A,B < SAUVEGARDE LONGUEUR MESSAGE ET < RELAI D'ACCES AU PREMIER CARACTERE DU < MESSAGE... CALL #SISP CMS5 PSRSLO# CALL #SISP CMS5 PAGE0# LAI LXRCLF < (A)=LONGUEUR DU MESSAGE 'RC-LF'. STA ARGDEM+CODEM < ET MISE DANS LA DEMANDE... LA VAR+AXRCLF STA VAR+C1MICA < GENERATION DU RELAI A 'R/C'-'LF', BSR VAR+AEDLLP < ET EDITION DU MESSAGE 'R/C'-'LF'... CALL #SISP CMS5 PLRSLO# PLR A,B STA ARGDEM+CODEM < RESTAURATION DU 'CODEM', STB VAR+C1MICA < ET DU RELAI D'ACES AU MESSAGE. < < TEST SUR LA LONGUEUR < DE L'ECHANGE : < CPI NOCMO-Z < N'Y-A-T'IL QU'UN CARACTERE A IMPRIMER ??? JLE HDLLP2 < OUI, C'EST FINI... LAI KNUL < NON, ON SUBSTITUE UN 'NULL' AU CODE < '6D DE DEBUT DE LIGNE... <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STBY &VAR+C1MICA <******************************************************************************* BSR VAR+AEDLLP < EDITION DU MESSAGE ARGUMENT... LAI K6D HDLLP6: EQU $ <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STBY &VAR+C1MICA < RESTAURATION DU CODE '6D... <******************************************************************************* JMP HDLLP2 < VERS LA SORTIE... < < CAS OU IL N'Y A PAS < DE CODE '6D EN TETE : < HDLLP1: EQU $ LXI XXLP1 <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LBY &VAR+C1MICA < (A)=CARACTERE DE TETE : <******************************************************************************* CPI KAROND < EST-CE LE "A-ROND" ??? JNE HDLLP5 < NON... < < OUI, TRAITEMENT DU SAUT DE PAGE : < LAI KFF < (A)=CARACTERE 'FORM-FEED', <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STBY &VAR+C1MICA < QUE L'ON MET EN TETE DU BUFFER... <******************************************************************************* BSR VAR+AEDLLP < EDITION DU MESSAGE AVEC SAUT DE PAGE... LAI KAROND JMP HDLLP6 < VERS LA RESTAURATION DU "A-ROND"... < < CAS NORMAL : < HDLLP5: EQU $ BSR VAR+AEDLLP < EDITION DU MESSAGE TEL QUEL... < < SORTIE DU HANDLER : < HDLLP2: EQU $ STZ ETAT0 HDLLPS: EQU $ < SORTIE... CALL #SISP CMS5 PLRSLO# RSR < < < E R R E U R S S O F T W A R E : < < ECRLP1:: VAL '11 < 'FONCTION CR/LP ERRONEE'. ECRLP3:: VAL '05 < 'LONGUEUR ERRONEE'. ERLP11: EQU $ < FONCTION DEMANDEE ERRONNEE LP1, ERCR11: EQU ERLP11 < FONCTION DEMANDEE ERRONNEE CR1. LAI CORBT?NBITMO-B=FMASK(K?ECRLP1=FCINST JMP E42 ERLP13: EQU $ < LONGUEUR ERRONNEE LP1, ERCR13: EQU ERLP13 < LONGUEUR ERRONNEE CR1. LAI CORBT?NBITMO-B=FMASK(K?ECRLP3=FCINST E42: EQU $ SBT NBITMO-B < MEMORISATION "ERREUR SOFTWARE", STA ETAT0 < ET TRANSMISSION DU CODE D'ERREUR PAR < 'ETAT0'... JMP HDLLPS < VERS LA SORTIE... PAGE < < < E D I T I O N D ' U N E L I G N E : < < < ARGUMENTS: < (L)=ADRESSE DE LA 'DCT' CORRESPONDANTE, < (W)=ADRESSE DE LA DEMANDE COURANTE, VALIDEE, < MAIS DONT LES ARGUMENTS ONT PU ETRE < MODIFIES... < < EDLLP: EQU $ < < INITIALISATION DE L'IMPRIMANTE : < LAI MOMINI SIO VAR+CDELP1 < ENVOI DE LA FONCTION DE 'RESET'... < < CONSTRUCTION DU 'CCB' : < LA VAR+C1MICA < (A)=RELAI-MOT INDEXE D'ACCES AU MESSAGE, RBT BITX < ON EFFACE L'INDEXATION, STA VAR+CCBLQ2 < (MOT2)=ADRESSE-MOT DU BUFFER. LA ARGDEM+CODEM STA VAR+CCBLP3 < (MOT3)=LONGUEUR-OCTETS DU BUFFER. EDLLP1: EQU $ LAI K SBT BCCBBM < MISE DE L'IMPRIMANTE EN MODE OCTET, STA VAR+CCBLQ0 < ET GENERATION SYSTEMATIQUE DU MOT0... LAD VAR+CCBLP < (A)=ADRESSE DU 'CCB', PSR X SVC SVCM6 < EXTENSION D'ADRESSE SUR 20 BITS DANS < LE 'CCB'... PLR X < < ECHANGE PROPREMENT DIT : < BSR ASDIPI < ENVOI DU 'CCB' A L''IOP'... LAI MOMRW?MOMSTR?MOMINT SIO VAR+CDELP1 < 'SIO' DE LANCEMENT DE L'ECHANGE... BSR ACSWIT < ET ATTENTE DE L'INTERRUPTION ; N'OUBLIONS < QU'ON TROUVE AU RETOUR DANS 'ETAT0' LE < MOT D'ETAT... LA ETAT0 < (A)=SOMME DES DEFAUTS : JAGE EDLLP3 < OK, PAS DE DEFAUT... < < CAS OU IL Y A UN DEFAUT : < ON VA AVERTIR L'OPERATEUR, < PUIS RETITERER L'OPERATION : < LAD VAR+TYSLP1 XR A,W < (W)=ADRESSE DE LA DEMANDE A 'TTYS', < (A)=ADRESSE DE LA DEMANDE COURANTE 'LP1'. BSR ACHAND < ENVOI DE LA DEMANDE A 'TTYS', BSR ACHANW < ET ATTENTE DE FIN D'EMISSION SUR 'TTYS'.. LR A,W < ET RESTAURE : < (W)=ADRESSE DE LA DEMANDE SUR 'LP1'. PSR X LXI XXTLP BSR ADODO < MISE EN SOMMEIL DU HANDLER < PENDANT 2 SECONDES... PLR X EDLLP5: EQU $ JMP EDLLP1 < ET ON RECOMMENCE... < < FIN D'ECHANGE : < EDLLP3: EQU $ LA VAR+CCBLP0 SBT BCCBCR STA VAR+CCBLP0 < MISE DU 'CCB' EN MODE COMPTE-RENDU... LAD VAR+CCBLP < (A)=ADRESSE DU 'CCB', BSR ASDIPI < ET DEMANDE DE COMPTE-RENDU A L''IOP'... LA VAR+CCBLP3 < (A)=MOT3 DU 'CCB', C'EST-A-DIRE < COMPTE-RENDU DU CANAL 'HDC' SUR < LES BITS 0-1 POUR L'ETAT, ET 2-15 < POUR LE COMPTE DE MOTS RESIDUELS : < SIGNIFICATION DES BITS 0-1 : < =00 : OK, TOUT S'EST BIEN PASSE, < =01 : L'ECHANGE S'EST ARRETE SUR UN < DEFAUT SECTEUR, OU UN 'INI', < =10 : UNE PARITE MEMOIRE A ETE RENCON- < TREE AU COURS DE L'ECHANGE, < =11 : UNE MEMOIRE INEXISTANTE A ETE < RENCONTREE AU COURS DE L'ECHANGE. < LES BITS 2-15, QUANT A EUX, DONNENT LE < COMPTE DE MOTS RESIDUELS EN FIN D'ECHAN- < GE (NORMALEMENT NUL...). JAE EDLLP4 < OK, PAS D'ERREUR... JAG SYSRBL < IL Y A UN DEFAUT '01... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < RELANCER L'ECHANGE PAR UN 'JMP HDLLP'... < JMP EDLLP < ET ON RELANCE... SYSRBL: EQU $ TBT BCCBDC < (A)>0 : Y-A-T'IL EU UN DEFAUT SECTEUR < OU UN 'INI' ??? JC EDLLP < OUI, ON RECOMMENCE LA SORTIE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE COMPTE < D'OCTETS RESIDUELS PEUT ETRE < NON NUL !!! < PUIS, ON RELANCERA L'ECHANGE < EN SIMULANT UN 'JMP''HDLLP'... < JMP EDLLP < ET ON RELANCE... EDLLP4: EQU $ RSR < THAT'S ALL FOLK... PAGE < < < R O U T I N E D ' I N T E R R U P T I O N ' L P ' : < < < RAPPEL : < L'IMPRIMANTE FONCTION EN MODE < CANAL 'LDC' ; DONC, EN FIN D'E- < CHANGE, ON DOIT RECUPERER UNE < INTERRUPTION D'EXCEPTION, POUR < LA DESARMER, ON LIT LE MOT D'ETAT < DANS 'ETAT0' QUE L'ON TRANSMET < DONC AU HANDLER QUE L'ON REVEIL- < LE ENSUITE... < < < ARGUMENT : < (B)=0 : INTERRUPTION NORMALE, < =1 : INTERRUPTION EXCEPTION. < (L)=ADRESSE DE LA 'DCT' EN CAUSE. < < ITLP: EQU $ CPZR B < QUELLE EST LA NATURE DE L'INTERRUPTION ?? JNE SYSRBM < D'EXCEPTION, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT UNE < INTERRUPTION NORMALE A PU < MONTER !!! < SYSRBM: EQU $ SIO VAR+ETALP1 < (A)=MOT D'ETAT, STA ETAT0 < ET STOCKAGE DANS 'ETAT0'... BSR ATEC < Y A-T-IL UN ECHANGE EN COURS ??? JE ITLP1 < NON, PAS DE REVEIL... BSR ARVHDL < OUI, REVEIL DU HANDLER... ITLP1: EQU $ RSR PAGE < < < H A N D L E R L E C T E U R D E C A R T E S : < < < FONCTION : < LE HANDLER LECTEUR DE CARTES < A A SA CHARGE DE GERER LES < LECTEURS DE CARTES, ET D'ASSURER < LES LECTURES BINAIRE ET 'ASCI'... < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' EN CAUSE, < (W)=ADRESSE DE LA DEMANDE A TRAITER (CELLE DE TETE), < (A)='NSPTYP' DE LA DEMANDE COURANTE. < (OPDEM)=0 : LECTURE ASCI, < =1 : LECTURE ASCI AVEC ECHO SUR LE < PERIPHERIQUE ASSOCIE, < =8 : LECTURE BINAIRE. < < USE L,DCT0 USE W,DEM0 HDLCR: EQU $ CALL #SISP CMS5 PSRSLO# HDLCRI: EQU $ < < VALIDATION DE LA DEMANDE : < LA NSPTYP < (A)='NSPTYP' (RESTAURATION...), LB ARGDEM+CODEM < (B)=LONGUEUR-OCTETS DU BUFFER, LY ARGDEM+OPDEM < (Y)=FONCTION DEMANDEE : ADRI -FGCRAE,Y < (Y)=FONCTION-1... LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : JAE HDLCR1 < OK, LECTURE 'ASCI'... IF FGCRA-K,,XEIF%, IF ATTENTION : LE TEST CI-DESSUS EST MAUVAIS !!! XEIF%: VAL ENDIF CPI FGCRAE < EST-CE LA LECTURE 'ASCI' AVEC ECHO ??? JE HDLCR1 < OUI, OK... CPI FGCRB < EST-CE LA LECTURE BINAIRE ??? JNE ERCR11 < NON, ERREUR... < < CAS DE LA LECTURE BINAIRE : < LA ARGDEM+AMDEM < (A)=ADRESSE-OCTET DU BUFFER : TBT NBITMO-B < EST-ON BIEN A UNE FRONTIERE DE MOTS ??? JC ERCR13 < NON (ADRESSE IMPAIRE), ERREUR... SLRD NOCMO=K < LA LONGUEUR EST-ELLE PAIRE ??? < N'OUBLIONS PAS, QUE D'APRES LE TEST < PRECEDENT : < BIT15(A)=0... JC ERCR13 < NON, ERREUR... HDLCR1: EQU $ LR B,A < (A)=(B)=LONGUEUR OU LONGUEUR/2 SUIVANT... JALE ERCR13 < ERREUR, LONGUEUR NEGATIVE OU NULLE !!! CPI LCCI < VALIDATION... JG ERCR13 < ERREUR, BUFFER TROP LONG !!! < < ECHANGE PROPREMENT DIT : < HDLCR2: EQU $ < < CONSTRUCTION DU 'CCB' : < STZ VAR+CCBCR5 < POUR LE FUTUR 'CCBCR0'... LAI K CPZR Y < TEST DE LA FONCTION-1 DANS 'Y' : < C'EST-A-DIRE : < -1 : 'ASCI', < 0 : 'ASCI' AVEC ECHO, < 7 : LECTURE BINAIRE. JG HDLCR3 < CAS DE LA LECTURE BINAIRE... < < CAS DE LA LECTURE 'ASCI' < (AVEC OU SANS ECHO) : < SBT BCCBBM < AFIN DE METTRE LE CANAL EN MODE OCTET, STA VAR+CCBCR5 < POUR LE FUTUR 'CCBCR0'... LA VAR+ABUCR STA VAR+CCBCS2 < ON UTILISE SYSTEMATIQUEMENT 'BUCRX', < CAR L'ADRESSE (AMDEM) N'EST PAS FORCEMENT < PAIRE, ET QUE SURTOUT, ON DOIT PARCOU- < RIR TOUTE LA CARTE LUE AFIN DE RAZER LE < BIT DE PARITE DE CHAQUE CARACTERE... CALL #SISP CMS5 PAGE0# < ON PASSE SUR LA PAGE 0, PUISQUE LE < BUFFER UTILISE EST LOCAL A 'CR'... LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS DE LA CARTE A LIRE. JMP HDLCR4 < VERS LE LANCEMENT DE L'ECHANGE... < < CAS DE LA LECTURE BINAIRE : < HDLCR3: EQU $ LA ARGDEM+AMDEM < (A)=ADRESSE-OCTETS (PAIRE) ARGUMENT, SLRS NOCMO=K < (A)=ADRESSE-MOT ARGUMENT, STA VAR+CCBCS2 < QUE L'ON MET EN 'MOT2'... LA ARGDEM+CODEM < (A)=LONGUEUR-OCTETS (PAIRE), SLRS NOCMO=K < (A)=LONGUEUR-MOTS DE L'ECHANGE. < < LANCEMENT DE L'ECHANGE : < HDLCR4: EQU $ STA VAR+CCBCR3 < MISE EN PLACE DU 'MOT4' QUI CONTIENT < LA LONGUEUR EN MOTS OU EN OCTETS, < SUIVANT LA VALEUR DU BIT 'BCCBBM'. HDLCR5: EQU $ SIO VAR+ETACR1 < (A)=MOT D'ETAT DU PERIPHERIQUE : TBT ETAFBS < LE MAGASIN EST-IL VIDE ??? < NOTA : CE BIT N'EST PAS RAZE PAR LA < LECTURE DU MOT D'ETAT, IL PEUT DONC < ETRE "VIEUX"... JC HDLCRB < LE MAGASIN EST VIDE, ALLONS AVERTIR < L'OPERATEUR... LAI MOMINI SIO VAR+CDECR1 < ENVOI DE LA COMMANDE 'RESET'... LAI MOMTST SIO VAR+CDECR1 < ENVOI DE LA COMMANDE DE MISE SOUS < TENSION... LAD VAR+CCBCR < (A)=ADRESSE DU 'CCB', PSR X SVC SVCM6 < EXTENSION D'ADRESSE SUR 20 BITS DANS < LE 'CCB'... PLR X BSR ASDIPI < ENVOI DU 'CCB' A L''IOP'... LAI MOMSTR?MOMINT < LECTURE BINAIRE A PRIORI... CPZR Y < ALORS, BINAIRE OU 'ASCI' ??? JG HDLCR6 < LECTURE BINAIRE... SBT COM8 < LECTURE 'ASCI'... HDLCR6: EQU $ SIO VAR+CDECR1 < PUIS, LANCEMENT DE L'ECHANGE... BSR ACSWIT < ET ATTENTE DE L'INTERRUPTION DE FIN < D'ECHANGE ; ON TROUVERA AU RETOUR, LE < MOT D'ETAT DANS 'ETAT0'... < < ANALYSE DES CONDITIONS < D'ECHANGE : < LA ETAT0 < (A)=MOT D'ETAT DU PERIPHERIQUE : JAGE HDLCR7 < BIT0=0 : PAS DE DEFAUT A PRIORI... IBT ETAOPE < IL Y A DEFAUT, ON INVERSE DONC LE BIT < 'ETAOPE' (NON PRET) POUR ETRE COHERENT < AVEC LES AUTRES BITS DE DEFAUT... LRM B WORD MTADEF?MTAFBS?MTAFBK?MTAOPE CPR A,B < EST-CE MAGASIN VIDE OU FIN DE BLOC ??? JE HDLCR7 < C'EST LE DEFAUT "MAGASIN VIDE" : < ON L'IGNORE POUR LA CARTE QU'ON < VIENT DE LIRE. IL SERA DETECTE < AVANT LA LECTURE SUIVANTE < S'IL Y EN A... < < CAS DES DEFAUTS, AVERTISSONS < L'OPERATEUR : < HDLCRB: EQU $ LAD VAR+TYSCR1 XR A,W < (W)=ADRESSE DEMANDE SUR 'TYS', < (A)=ADRESSE DEMANDE SUR 'CRX', BSR ACHAND < ET ENVOI DU MESSAGE A L'OPERATEUR... BSR ACHANW < ET ATTENTE DE FIN D'EMISSION SUR 'TYS'... LR A,W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE SUR 'CRX'. LXI XXTCR BSR ADODO < MISE EN SOMMEIL DU HANDLER < PENDANT 2 SECONDES... HDLCRH: EQU $ JMP HDLCR5 < ET APRES LE DODO, ON RETENTE... < < COMPTE-RENDU DE L'ECHANGE : < HDLCR7: EQU $ LA VAR+CCBCR0 SBT BCCBCR STA VAR+CCBCR0 < MISE DU 'CCB' EN MODE COMPTE-RENDU... LAD VAR+CCBCR < (A)=ADRESSE DU 'CCB', BSR ASDIPI < ENVOI DE LA DEMANDE DE COMPTE-RENDU < A L''IOP'... LA VAR+CCBCR3 < (A)=MOT3 DU 'CCB', C'EST-A-DIRE < COMPTE-RENDU DU CANAL 'HDC' SUR < LES BITS 0-1 POUR L'ETAT, ET 2-15 < POUR LE COMPTE DE MOTS RESIDUELS : < SIGNIFICATION DES BITS 0-1 : < =00 : OK, TOUT S'EST BIEN PASSE, < =01 : L'ECHANGE S'EST ARRETE SUR UN < DEFAUT SECTEUR, OU UN 'INI', < =10 : UNE PARITE MEMOIRE A ETE RENCON- < TREE AU COURS DE L'ECHANGE, < =11 : UNE MEMOIRE INEXISTANTE A ETE < RENCONTREE AU COURS DE L'ECHANGE. < LES BITS 2-15, QUANT A EUX, DONNENT LE < COMPTE DE MOTS RESIDUELS EN FIN D'ECHAN- < GE (NORMALEMENT NUL...). JAE HDLCR8 < OK, PAS DE DEFAUTS... JAG SYSRBN < C'EST PEUT-ETRE LE DEFAUT SECTEUR < OU L''INI'... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REPERER LES PARITES MEMOIRE < OU LES MEMOIRES INEXISTANTES, < PUIS RELANCER PAR UN 'JMP''HDLCRI'... < JMP HDLCR2 < ET ON RELANCE... SYSRBN: EQU $ TBT BCCBDC < (A)>0 : EST-CE UN DEFAUT SECTEUR OU < UN 'INI' ??? JC HDLCR2 < OUI, LE MIEUX EST DE RELANCER L'ECHANGE.. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE NOMBRE < D'OCTETS RESIDUELS PEUT ETRE NON < NUL, PUIS RELANCER L'ECHANGE PAR < UN 'JMP''HDLCRI'... < JMP HDLCR2 < ET ON RELANCE... HDLCR8: EQU $ < < < C A D R A G E D E S I N F O R M A T I O N S : < < CALL #SISP CMS5 PLRSLO# LA ARGDEM+AMDEM < (A)=ADRESSE-OCTET DU BUFFER ARGUMENT, BSR AMEM < RENVOIE : < (A)=RELAI INDEXE VERS LE BUFFER, < (X)=0 : FRONTIERE "PAIRE", < =1 : FRONTIERE "IMPAIRE". STA VAR+AXRCR < MISE EN PLACE DU RELAI DE CADRAGE... CPZR Y < ALORS, LECTURE 'ASCI' OU BINAIRE ??? JG HDLCRE < BINAIRE, ALLONS CADRER LES MOTS < A GAUCHE... < < ' A S C I ' : R A Z D U B I T D E P A R I T E : < LR X,Y < (Y)=INCREMENT DE DEPHASAGE DU AU < PROBLEME DES FRONTIERES "PAIRES" < ET "IMPAIRES"... LB ARGDEM+CODEM < (B)=NOMBRE D'OCTETS A TRANSFERER... NGR B,B < QUE L'ON INVERSE... LXI K < (X)=INDEX D'ACCES AUX BUFFERS. HDLCR9: EQU $ LBY &VAR+AXBUCR < (A)=CARACTERE 'ASCI' COURANT, RBT BITPAR < RAZ DE SON BIT DE PARITE. JAE HDLCRD < LES 'NULLS' SONT REMPLACES PAR 'R/C'... CPI KSOUL < ET LE '5F PAR 'EOT'... JNE HDLCRC < CAS DES CODES NORMAUX... LAI KEON-KCR < POUR GENERER UN 'EOT'. HDLCRD: EQU $ ADRI KCR,A < GENERATION DE 'EOT' OU 'R/C' SUIVANT... STX ARGDEM+CODEM < AFIN DE RENVOYER LE NOMBRE IC ARGDEM+CODEM < DE CARACTERES RENTRES... HDLCRC: EQU $ ADR Y,X < (X)=INDEX DE TRANSFERT, <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STBY &VAR+AXRCR < TRANSFERT DU CARACTERE 'ASCI' COURANT... <******************************************************************************* SBR Y,X < RESTAURATION DE L'INDEX DE RECUPERATION. ADRI I,X < PASSAGE AU ADRI I,B < CARACTERE SUIVANT... CPZR B < S'IL EXISTE ??? JL HDLCR9 < ET OUI... LX ARGDEM+CODEM < (X)=NOMBRE DE CARACTERES LUS, BSR ASTBOX < ET ENVOI EVENTUEL DANS LA 'BOX'... < < E C H O E V E N T U E L : < CPZ ARGDEM+OPDEM < L'ECHO EST-IL DEMANDE ??? IF FGCRAE-K,XEIF%,,XEIF% IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!! XEIF%: VAL ENDIF JE HDLCRA < NON... < < CAS OU L'ECHO EST DEMANDE < SUR LE PERIPHERIQUE ASSOCIE : < LBY IOID < (A)='NSP' DU PERIPHERIQUE ASSOCIE, JAE HDLCRA < N'EXISTE PAS, PAS D'ECHO... IF XIOID0-K,,XEIF%, IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!! XEIF%: VAL ENDIF LR A,X < (X)=NSP DU PERIPHERIQUE 'OUT'... LBI XXNLOC < POUR NE PAS ATTENDRE, BSR ALODCT < LOCATION DE LA DCT(NSP=(X)) SANS ATTENTE < AU CAS OU ELLE SERAIT DEJA LOUEE... CPZR B < ALORS ??? IF XXNLOC-K,,XEIF%, IF ATTENTION : SI UNE DCT N'EST PAS LOUABLE, IF ON A AU RETOUR (B)=XXNLOC, ET LE TEST EST MAUVAIS !!! XEIF%: VAL ENDIF JNE HDLCRG < ET BIEN LE PERIPHERIQUE 'OUT' EST < DEJA LOUE, ON SE DISPENSE DONC DE < L'UTILISER... STBY VAR+ECHOCR+XXNSP < MISE EN PLACE DU 'NSP' (A) DU PERI- < PHERIQUE D'ECHO. LA ARGDEM+AMDEM STA VAR+ECHOCR+T+AMDEM < TRANSMISSION DE L'ADRESSE-OCTETS. LA ARGDEM+CODEM STA VAR+ECHOCR+T+CODEM < TRANSMISSION DE LA LONGUEUR-OCTETS. < < DEMANDE D'ECHO : < LAD VAR+ECHOCR XR A,W < (W)=ADRESSE DE LA DEMANDE D'ECHO, < (A)=ADRESSE DE LA DEMANDE A 'CRX'. BSR ACHAND < ENVOI DE LA DEMANDE D'ECHO, BSR ACHANW < ET ATTENTE DE FIN D'ECHO... LR A,W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE COURANTE < DESTINEE A 'CRX'. BSR ADLDCT < DELOCATION DE DCT(NSP=(X))... HDLCRG: EQU $ < < F I N N O R M A L E D E L A L E C T U R E : < HDLCRA: EQU $ STZ ETAT0 < RETOUR OK... RSR HDLCRE: EQU $ < < L E C T U R E B I N A I R E : R E C A D R A G E : < DC VAR+AXRCR < DECREMENTATION DU RELAI POUR < UTILISER LE 'JDX'... LXI LCCI < (X)=INDEX D'ACCES. HDLCRF: EQU $ <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : LA &VAR+AXRCR < (A)=MOT COURANT, <******************************************************************************* XXCRNL:: VAL 12 < NOMBRE DE LIGNES SUR UNE CARTE... SLLS NBITMO-XXCRNL < CADRAGE (12=12 LIGNES/COLONNE), PAR < DECALAGE A GAUCHE DE CHAQUE COLONNE... <******************************************************************************* BSR ASIMUL < SIMULATION DE L'INSTRUCTION SUIVANTE : STA &VAR+AXRCR < ET RENVOI DU MOT DECALE... <******************************************************************************* JDX HDLCRF < PASSAGE AU MOT SUIVANT... JMP HDLCRA < PUIS VERS LA SORTIE... PAGE < < < R O U T I N E D ' I N T E R R U P T I O N ' C R ' : < < < RAPPEL : < CETTE ROUTINE RECUPERE LES < INTERRUPTIONS 'CRX' ; ETANT DONNE < QUE LES ECHANGES SE FONT EN < CANAL 'LDC', ON NE PEUT THEO- < RIQUEMENT QUE RECUPERER DES < INTERRUPTIONS D'EXCEPTION (EN < FIN D'ECHANGE) ; 'ITCR' LIT LE < MOT D'ETAT AFIN DE LA DESARMER, < LE TRANSMET A 'HDLCR', QU'IL < REVEILLE AU PASSAGE... < < < ARGUMENT : < (B)=1 : INTERRUPTION EXCEPTION (CE QUI EST NORMAL...), < =0 : INTERRUPTION NORMALE (CE QUI EST EXCEPTIONNEL...). < < ITCR: EQU $ CPZR B < QUELLE EST LA NATURE DE L'INTERRUPTION ?? JNE SYSRBO < EXCEPTION, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT UN < INTERRUPTION NORMALE A < PU ARRIVER !!! < SYSRBO: EQU $ SIO VAR+ETACR1 < (A)=MOT D'ETAT DU PERIPHERIQUE, STA ETAT0 < QUE L'ON TRANSMET PAR 'ETAT0'... BSR ATEC < Y A-T-IL UN ECHANGE EN COURS ??? JE ITCR1 < NON, DONC PAS DE REVEIL... BSR ARVHDL < OUI, REVEIL DU HANDLER... ITCR1: EQU $ RSR PAGE < < < E N V O I D E S ' I P I ' C A N A U X : < < < FONCTION : < CE SOUS-PROGRAMME COMPLEXE < EST CHARGE DE TRANSMETTRE DES < 'CCB' A L''IOP', PUIS D'ATTEN- < DRE QUE CEUX-CI FUSSENT PRIS < EN COMPTE. < LORSQUE LE PROCESSEUR 'IOP' < N'EST PAS LE PROCESSEUR MAITRE, < L'INSTRUCTION 'IPI' EST UTILI- < SEE POUR CE FAIRE, DANS L'AUTRE < CAS, POUR DES PROBLEMES D'ININ- < TERRUPTIBILITE, ON NE PEUT < L'UTILISER, ON FAIT DONC UN < SAUT DIRECT DANS LES MICRO- < PROGRAMMES A L'AIDE DE 'ROMB'... < < < ARGUMENT: < (A)=ADRESSE DU 'CCB'. < IPI: EQU $ < < INITIALISATIONS : < PSR X,Y,W LRM W < (W)=ADRESSE DE BOXIPI WORD BOXIPI PSR A < SAUVEGARDE DE L'ADRESSE DU 'CCB'... < < EST-CE UN AUTO-ENVOI ??? < ZIPIB: EQU $ LXI PROIOP LA &SYSPRO < (A)=NUMERO DE L'IOP... LYI NIL-ZERO < (Y)=K : A PRIORI LE MAITRE N'EST PAS L'IO IF NIL-ZERO-ALIPI,XEIF%,,XEIF% IF ATTENTION : LES TESTS SUR (Y) SONT IDIOTS !!! XEIF%: VAL ENDIF LXI PROMST CP &SYSPRO < QU'EN EST-IL REELLEMENT ??? JNE ZIPI6 < (Y)=K : MAITRE #IOP. LYI ALIPI < (Y)=ALIPI#0 : LE MAITRE EST AUSSI L'IOP, < Y CONTIENT ALORS L'ADRESSE DU MICRO- < PROGRAMME DE TRAITEMENT DES 'IPI'... ZIPI6: EQU $ JAGE ZIPI2 < OK, IL EXISTE... BSR ASYSER < E R R E U R S Y S T E M E ... JMP ZIPIB < ET ON RECOMMENCE APRES CORRECTION. < < VERROUILLAGE DE LA < BOITE A LETTRES : < ZIPI2: EQU $ ADR A,W < (W)=ADRESSE BOITE AUX LETTRE IOP. LAI VLOCK < (A)=VALEUR DE VERROUILLAGE D'UN VERROU... ZIPI3: EQU $ BSR ASMMK < MASQUAGE GENERAL DES INTERRUPTIONS. XM XVEROU,W < ON TENTE DE VERROUILLER L'ACCES < A LA BOITE A LETTRES D'ADRESSE (W). JAE ZIPI5 < OK, ON L'A EUE... BSR ASMDK < ET BIEN NON, IL FAUT DEMASQUER LES < INTERRUPTIONS AFIN DE PERMETTRE A < DES INTERRUPTIONS INTER-PROCESSEURS < DE PASSER (EN PROVENANCE DE L'ESCLAVE). JMP ZIPI3 < ET ON RE-TENTE LE VERROUILLAGE... < < MISE EN PLACE DU 'CCB' : < ZIPI5: EQU $ < YOUPI, ON A LA BOITE A LETTRES... PLR A < RESTAURE : (A)=ADRESSE DU 'CCB'... STA O,W < CHARGEMENT DE BOXIPI < < ENVOI DE L'IPI, OU ITERATION SUR ENVOI : < CPZR Y < LE MAITRE EST-IL L'IOP ??? JNE ZIPI7 < OUI, PAS D'IPI... IPI < NON, ON ENVOIE DONC UN IPI, ON PEUT < LE FAIRE BIEN QUE LES INTERRUPTIONS < DE CE PROCESSEUR SOIENT MASQUEES... JMP ZIPI8 ZIPI7: EQU $ < LE MAITRE EST L'IOP... ROMB < ON FAIT UN BRANCHEMENT FORCE AU < TRAITEMENT DES INTERRUPTIONS 'IPI', < PLUTOT QU'UN 'IPI', CAR EN EFFET, LES < INTERRUPTIONS ETANT MASQUEES, CET 'IPI' < SERAIT DIFFERE, ET LE TEST DE REMISE < A 0 DE LA BOITE A LETTRES, PRECEDANT LE < DEVERROUILLAGE (CES 2 ACTIONS ETANT < MASQUEES), SERAIT UN TEST BLOQUANT. < EN FAISANT UN FORCAGE PAR 'ROMB', ON < PASSE PAR DESSUS LE SYSTEME D'INTERRUP- < TION ET SON MASQUAGE (ASTUCE...). ZIPI8: EQU $ TEMIPI:: VAL 1000 < TEMPORISATION ARBITRAIRE DE DETECTION < DES TIME-OUT SUR 'IPI'... LRM X WORD TEMIPI < (X)=NOMBRE DE TEST SUR LA BOITE A LETTRES < AVANT DE DECRETER UNE 'SYSER'... ZIPI4: EQU $ CPZ O,W < L'IPI A-T'IL ETE PRIS EN COMPTE ??? JE ZIPI9 < OUI, LA BOITE A LETTRES A ETE REMISE A 0. BSR ATDEFS < NON, ALORS ON TESTE LE DEFAUT SECTEUR < EVENTUELLEMENT EN ATTENTE ; ON EST < OBLIGE DE LE FAIRE, CAR L'IOP DESIRE < PEUT ETRE EN DEFAUT DE LONGUE DUREE... JDX ZIPI4 < ON TEMPORISE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REGARDER POURQUOI L'IOP DESIRE < NE REPOND PAS ; RAPPELONS A CE PROPOS < QUE METTRE UN LECTEUR DE CARTES HORS < TENSION A POUR CONSEQUENCE DE BLOQUER < UN IOP... < BLOCK3: EQU $ < ADRESSE DE BLOCAGE LORS DE LA RELANCE < SUITE A UN DEFAUT SECTEUR NON PRIS EN < COMPTE... STZ XVEROU,W < ON LIBERE LE VERROU... BSR ASMDK < ON DEMASQUE, PLR X,Y,W < ON RESTAURE, JMP IPI < ET ON RETENTE, AU CAS OU PAR EXEMPLE < LE PROCESSEUR 'IOP' AURAIT ETE CHANGE < MANUELLEMENT AU PUPITRE... < < DEVERROUILLAGE, ET SORTIE : < ZIPI9: EQU $ STZ XVEROU,W < ENFIN, ON PEUT DEVEROUILLER... BSR ASMDK < DEMASQUAGE DES INTERRUPTIONS. PLR X,Y,W RSR PAGE < < < A L L O C A T I O N D E L ' E S P A C E D I S Q U E < S U R L E D I S Q U E A M O V I B L E < < < PHILOSOPHIE : < L'ESPACE DISQUE 'DKM' EST ALLOUE < PAR Q-SECTEURS ; LA TABLE D'ALLOCA- < TION CORRESPONDANTE ('TOGB') ETANT < TROP VOLUMINEUSE EST CHARGE EN O- < VERLAY ; L'ESPACE ALLOUABLE EST < DIT DECOUPE EN 'GB', UN 'GB' (OU < 'GRAND BLOC') CORRESPONDANT A LA < PARTIE RESIDENTE DE 'TOGB'. CHAQUE < 'GB' EST DECOUPE EN 'YY7' SOUS- < BLOCS (OU 'SB'), DONT LA SOUS- < TABLE D'ALLOCATION FAIT UN MOT. < ON PEUT DONC DIRE : < ESPACE 'DKM'='NSTO'*'GB', < 'GB' ='YY7'*'SB', < 'SB' ='NBITMO'*'Q-SECTEURS'. < < < NOTA : < L'UNITE D'ALLOCATION EST LE < Q-SECTEUR, ET NON PAS LE SECTEUR < AFIN DE POUVOIR ADRESSER L'ENSEM- < BLE DU DISQUE SUR 16 BITS !!! < < < NOTATIONS : < A UN INSTANT DONNE, ON N'AURA < DONC PRESENT EN MEMOIRE QU'UN < SEUL 'GB', DIT 'GRAND BLOC COU- < RANT' (OU 'GBC'), DONT LE NUMERO+1 < (A CAUSE DES 'JDX') EST 'NUGBC'... < < < NOTA : < TOUS LES 'GB' SONT LIBRES SUR LE DISQUE AMOVIBLE < A L'INITIALISATION DU SYSTEME. L'ESPACE DISQUE < PRIVE DE CMS5 EST EN EFFET IMPLANTE SUR LE DISQUE < FIXE (TOGB, TP, ARBRE DU SYSTEME, PROCESSEUR DE < BASE ET SWAPPING). LE SECTEUR 'INFINI' EST IN- < PAR L'ALLOCATEUR, CAR IL Y AURAIT CONFUSION < AVEC L'INDICATEUR DE FIN DE CHAINE... < < < ATTENTION : < PAR LA SUITE, ON POURRA PARLER DE < SECTEURS, MAIS IL FAUDRA ENTENDRE < GROUPE DE 'QUANTA' SECTEURS ; IL FAUDRAIT < AVOIR LE COURAGE DE MODIFIER TOUS < LES COMMENTAIRES... < < CALL #SISP CMS5 CHECK# < < < B U F F E R D E S Q - S E C T E U R S < D E S T I N E A ' H D L R E L ' P O U R < S A V O I R S ' I L S S O N T M A U V A I S ... < < LBUFHS:: VAL QUANTA-E*YY7+D < AVEC CETTE LONGUEUR ON EST SUR DE < CALCULER LE CHECKSUM DE CHAQUE SECTEUR < COMPOSANT UN Q-SECTEUR ; CETTE LONGUEUR < EST MINIMALE... BUFHS: DZS LBUFHS < BUFFER DESTINE A 'HDLREL' POUR SAVOIR < SI LES SECTEURS RELEASES SONT BONS < OU MAUVAIS... < < < O P T I M I S E U R D U P A R C O U R S D E ' T O G B ' : < < CALL #SISP CMS5 DOL1# SB1: WORD YY7 < CE MOT CONTIENT EN PERMANENCE < LE NUMERO DU 1ER 'SB' A TESTER < DANS UN 'GB'. IL PERMET DONC < DE MINIMISER LE TEMPS DE PARCOURS < D'UNE 'TOGB'. CALL #SISP CMS5 DOL2# PAGE < < < D C T A L L O C A T E U R D I S Q U E : < < CALL #SISP CMS5 DOL1# DCTGET: EQU $ PSTGET: WORD K;K;K;K;COM+DEPCS;DCTGET;NIL;PILGET;HANDLR;SMST;SO;SE #@ASCI " GET" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES < DEMANDES D'ALLOCATION DISQUE. WORD NIL < ET QUEUE... WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLGET < HANDLER D'ALLOCATION DE L'ESPACE 'DKM'. WORD NIL < PAS DE 'RIT' EVIDEMMENT... WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES ET FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD NOSOSE < DCTFUP ("ALTITUDES" DES FONCTIONS). < NOTA : IL FAUT RESTER DANS LA PAGE 0 !!! < < < Z O N E V A R I A B L E : < < VARGET: EQU $ IF VARGET-DCTGET-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPTIMISATION DES PARCOURS : < WORD SB1 GETSB1:: VAL $-D-VARGET < ACCES AU MOT 'SB1'. < < DEMANDE DE TRANSFERT < DE 'TOGB' SUR 'DKA' : < BYTE NSPDKA;XDSYM < NSPTYP. EGBGR:: VAL $-D-VARGET XWOR%1: VAL VAR-DCT0 XEGBGR: EQU ZERO+XWOR%1+EGBGR WORD FGR < OPDEM=0 : LECTURE, < =2 : ECRITURE. WORD TOGB+IJIJDX-ZERO*NOCMO < AMDEM. WORD YY8 < CODEM. WORD NILS < ASDEM. DZS LDEM0+VARGET-$+EGBGR < < VALIDATION DES SECTEURS ALLOUES : < BYTE NSPDKM;XDSYM?XTYPAD DEMHSG:: VAL $-D-VARGET < DEMANDE DE LECTURE D'UN SECTEUR : WORD FGR < LECTURE, WORD BUFHS-ZERO WORD LBUFHS*NOCMO WORD NILS GECTHS:: VAL $-D-VARGET < ADRESSE DU SECTEUR A LIRE. DZS LDEM0+VARGET-$+DEMHSG WORD KQSHS NQSHSG:: VAL $-D-VARGET < RELAI VERS LE COMPTEUR DE SECTEURS "HS". < < ACCES A LA 'LRU' DES 'GB' QUI < TEND A FAVORISER L'ALLOCATION < DES Q-SECTEURS DANS LES ZONES < LES PLUS UTILISEES LE PLUS < RECEMMENT : < WORD TLRUGB,X ALRUAL:: VAL $-D-VARGET < RELAI D'ACCES A LA 'LRU' DES 'GB'... < < DONNEES D'OPTIMISATION DE L'ALLOCATION : < SEULIN:: VAL K < SEUIL DES MOTS DE &ANSLGB INITIAL. WORD SEULIN SEULSB:: VAL $-D-VARGET < CE MOT DONNE LE SEUIL COURANT AUQUEL < ON COMPARE LES NOMBRE DE Q-SECTEURS < LIBRES PAR GRAND BLOC... < CE SEUIL VAUT 'NSL' DIVISE PAR LE DOUBLE < DE GRAND-BLOC ; C'EST DONC LA MOITIE DU < NOMBRE DE Q-SECTEURS LIBRES MOYEN PAR < GRAND BLOC... XWOR%1: VAL XXXMOY=K XWOR%2: VAL -XWOR%1 IF SDKM>XWOR%2>XWOR%1-SDKM,,XEIF%, IF ATTENTION : 'SDKM' N'EST PAS DIVISIBLE EXACTEMENT IF PAR 'XXXMOY' ET EN PLUS EST UN NOMBRE NEGATIF !!! XEIF%: VAL ENDIF XWOR%3: VAL NBSPGB/XXXMOY WORD SDKM>XWOR%2/XWOR%3*XXXMOY SEULDV:: VAL $-D-VARGET < POUR CALCULER 'SEULSB' ; C'EST EN FAIT < LE NOMBRE DE 'GB' ALLOUABLES... SEULGB:: VAL 128 < VALEUR PLANCHER DE 'SEULSB' EN DESSOUS < DE LAQUELLE IL EST MIS A 'SEULIN'. WORD SEULGB SEULCP:: VAL $-D-VARGET < LE SEUIL 'SEULSB' SERA UN MULTIPLE DE < DE 'SEULCP' AFIN DE DEFAVORISER L'ECLA- < TEMENT DES ITEMS ET L'EPARPILLEMENT DES < FICHIERS LORSQU'ON SE TROUVE TOUT PRES < DE CE SEUIL... < NOTA : EN FORCANT UNE VALEUR SUPERIEURE < (ET NON PAS EGALE, A CAUSE DU 'SB < ARGDEM+CODEM') ON EST RAMENE A L'ANCIEN- < NE STRATEGIE D'ALLOCATION DISQUE... < < < P I L E : < < CALL #SISP CMS5 DOL2# PILGET: EQU $-DEPILE XWPILE: VAL LPILEH+15 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < L E C T U R E / E C R I T U R E D E ' T O G B ' : < < < ARGUMENT : < (X)=NUMERO+1 DU 'GB' A LIRE OU ECRIRE. < < < RESULTAT : < (W)=ADRESSE DE LA DEMANDE A 'DKA' AFIN DE < PERMETTRE LE 'WAIT' DE FIN D'OPERATION, < (SB1)=POSITIONNE UNIQUEMENT PAR 'ROGB', < LES CODES 'V' ET 'C' POSITIONNES PAR 'CHANW'. < < < A T T E N T I O N : < 'WOGB' DETRUIT 'A' ET 'X', < 'ROGB' DETRUIT 'A'. < < < < < E C R I T U R E S U R ' D K A ' : < < WOGB: EQU $ WOGBLA: EQU $ < ADRESSE DU 'LAD'... <******************************************************************************* LAD 0,L < POUR GENERER LE CODE DU 'LAD'... XWOR%1: VAL '0000000@@00 <******************************************************************************* $EQU WOGBLA < RETOUR SUR LE 'LAD'... WORD XEGBGR+XWOR%1 < 'LAD VAR+EGBGR'... LR A,W < (W)=ADRESSE DE LA DEMANDE A 'DKA'. ADRI XXGB-IJIJDX,X < CALCUL DU NUMERO DE SECTEUR < DE LA 'TOGB' ARGUMENT, STX ARGDEM+ASDEM < QUE L'ON RANGE DANS 'ASDEM'. LAI FGW STA ARGDEM+OPDEM < L'ECHANGE EST UNE ECRITURE, BSR ACHAND < ENVOI DE LA DEMANDE D'ECRITURE SUR 'DKA', BSR ACHANW < ET ATTENTE DE FIN D'ECHANGE... RSR < THAT'S ALL FOLK... < < < L E C T U R E S U R ' D K A ' : < < ROGB: EQU $ PSR X WORD XEGBGR+XWOR%1 < 'LAD VAR+EGBGR'... LR A,W < (W)=ADRESSE DE LA DEMANDE A 'DKA'. ADRI XXGB-IJIJDX,X < CALCUL DU NUMERO DE SECTEUR < DE LA 'TOGB' ARGUMENT, STX ARGDEM+ASDEM < QUE L'ON RANGE DANS 'ASDEM'. STZ ARGDEM+OPDEM < L'ECHANGE EST UNE LECTURE. IF FGR-K,,XEIF%, IF ATTENTION : L'INITIALISATION PRECEDENTE EST IDIOTE !!! XEIF%: VAL ENDIF BSR ACHAND < ENVOI DE LA DEMANDE DE LECTURE A 'DKA'. LXI YY7 < NUMERO DU DERNIER 'SB' D'UN 'GB', STX &VAR+GETSB1 < &VAR+GETSB1C INITIALISE AVEC < LE SOMMET DE 'TOGB' ; EN EFFET, ON NE < CONNAIT PAS LE 'GB' QUE L'ON CHARGE, < IL FAUDRA LE PARCOURIR EN ENTIER LES < PREMIERES FOIS... PLR X BSR ACHANW < ET ATTENTE DE FIN DE LECTURE... RSR < ET C'EST TOUT... PAGE < < < H A N D L E R D ' A L L O C A T I O N D I S Q U E : < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' D'ALLOCATION, < (W)=ADRESSE DE LA DEMANDE D'ALLOCATION : < (AMDEM)=ADRESSE-MOT DE LA ZONE OU RENVOYER < LE OU LES SECTEURS ALLOUES, < (CODEM)=NOMBRE DE SECTEURS DEMANDES. < < < ATTENTION : < 'AMDEM' CONTIENT UNE ADRESSE DE < MOTS ET NON PAS D'OCTETS ; 'CODEM' < DE MEME CONTIENT UN NOMBRE DE MOTS < CORRESPONDANT AU NOMBRE DE Q-SECTEURS < A ALLOUER. < DE PLUS AUCUNE VERIFICATION N'EST < FAITE, CAR SEUL L'OPERATING SYSTEME < UTILISE CES HANDLERS (GET & REL)... < < < FORMAT D'UNE ADRESSE SECTEUR : < L'ADRESSE D'UN SECTEUR EST DONNEE SOUS FORME D' < UN MOT : < BITS 0-4 =NUMERO DE 'GB', < BITS 5-11 =NUMERO DE 'SB', < BITS 12-15=NUMERO DE SECTEUR (DANS LE 'SB'). < < USE L,DCT0 USE W,DEM0 HDLGET: EQU $ < < GENERATION DU SEUIL : < LAI K LB NSL < (A,B)=NOMBRE DE Q-SECTEURS LIBRES ; A < NOTER QU'ON FAIT CELA HORS DE LA < PHASE CRITIQUE, CE QUI N'EST PAS < TRES IMPORTANT, CAR LE SEUIL N'A < PAS BESOIN D'ETRE TRES PRECIS... DV VAR+SEULDV < (A)=NOMBRE MOYEN DE Q-SECTEURS LIBRES < PAR 'GB' DIVISE PAR 2... SB ARGDEM+CODEM < ON LUI RETRANCHE LE NOMBRE DE Q-SECTEURS < PRESENTEMENT DEMANDE, AFIN D'EVITER LES < EPARPILLEMENTS AU NIVEAU DES GRANDS < ITEMS... SARD NBITMO < PREPARATION DU DIVIDENDE DANS (A,B) : DV VAR+SEULCP MP VAR+SEULCP < LE SEUIL EST CALCULE EN MULTIPLE INFE- < RIEUR DE 'SEULCP'... JANE E80X2 < GLUPSSS, LE SEUIL NE TIENT PAS DANS < UN MOT !!! CPZR B < VALIDATION... JGE E80X1 < OK... E80X2: EQU $ BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE SEUIL < PEUT ETRE NEGATIF OU NE PAS < TENIR SUR UN MOT !!! < LBI SEULIN < ON FORCE UN SEUIL PLANCHER... E80X1: EQU $ STB VAR+SEULSB < ET ON MEMORISE CE SEUIL... < < PREPARATION DES ARGUMENTS : < LX ARGDEM+CODEM < (X)=NOMBRE D'UNITES A ALLOUER. PSR W < SAVE L'ADRESSE DE LA DEMANDE. LA ARGDEM+AMDEM < RECUPERATION DE L'ADRESSE MOT DE < LA LISTE DES SECTEURS, LR A,W < (W)=ADRESSE-MOT DE LA ZONE OU STOCKER < L'ADRESSE DES SECTEURS ALLOUES. LRM Y WORD PQSHS < (Y)=ADRESSE DE LA PILE "HS"... < < TEST SUR LE POOL GENERAL DES SECTEURS : < E80: EQU $ DC NSL < ET UN DE MOINS DANS LE POOL GENERAL. JNE E81 < C'EST BON, AU MOINS UN EST LIBRE... < < CAS OU IL N'Y A PLUS AUCUN SECTEUR LIBRE : < E80XX: EQU $ < BRANCHEMENT SUITE A DES 'SYSERS'. BSR ASYSER < A V E R T I S S E M E N T !!! WAIT SGETS < L'ALLOCATEUR SE MET EN ATTENTE < D'UN RELEASE... < < CAS OU AU MOINS 1 SECTEUR EST LIBRE : < E81: EQU $ PSR X < SAVE NBRE DE SECTEURS A ALLOER. RQST &ASPHEX <<<<PHASE CRITIQUE AVEC HDLREL. LX NUGBC < (X)=NUMERO DU 'GBC'. E82: EQU $ < < TEST SUR LE POOL DU 'GBC' : < LA &ANSLGB < (A)=NOMBRE DE Q-SECTEURS LIBRES SUR LE < 'GB' COURANT, CP VAR+SEULSB < EST-CE INSUFFISANT ??? JLE E83 < OUI, ON ABANDONNE CE 'GB' ; AINSI LES < 'GB' AURONT TOUJOURS DES Q-SECTEURS < LIBRES (PLUS OU MOINS, SUIVANT 'NSL'...) < PERMETTANT AINSI DE MINIMISER LES MOU- < VEMENTS DE TETE LORS DES COPIES DE < FICHIERS PAR EXEMPLE... DC &ANSLGB < SI LE 'GB' COURANT EN POSSEDE ASSEZ, ON < LUI PRELEVE... JGE E82X1 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE NOMBRE < DE Q-SECTEURS LIBRES POUVAIT ETRE < NUL, ALORS QU'ON L'A COMPARE AU < SEUIL 'SEULSB' ; PEUT-ETRE 'SEULSB' < EST-IL MAUVAIS !!! < JMP E82X2 < POURQUOI PAS ??!?! E82X1: EQU $ IF XXINGB-BITSIG,,XEIF%, IF ATTENTION : LE TEST PRECEDENT NE PERMET PAS IF DE TESTER SIMULTANEMENT L'ETAT VIDE D'UN 'GB' IF (PAR 'BITSIG') ET SON INACCESSIBILITE A IF L'ALLOCATION DISQUE (PAR 'XXINGB') !!! XEIF%: VAL ENDIF < < CAS OU AU MOINS UN SECTEUR EST LIBRE DANS 'GBC' : < LX &VAR+GETSB1 < ON COMMENCE A PARCOURIR 'TOGB' < A PARTIR DE SB1 (POUR OPTIMISER). E84: EQU $ LA &ATOGB < ACCES A LA TABLE D'OCCUPATION D' < D'UN 'SB'. JANE E85 < CE 'SB' A AU MOINS UN SECTEUR LIBRE. JDX E84 < 'SB' SUIVANT. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LA PLUS GRANDE PRUDENCE EST CONSEILLEE, < EN EFFET, SI ON RELANCE LE SYSTEME, < ON RISQUE DE FAIRE DE L'ALLOCATION FARFELUE... < LX NUGBC < REINITIALISATION DE (X)=(NUGBC), LA NSL SB &ANSLGB < ON RETRANCHE LE CONTENU DU 'GB' COURANT < AU COMPTE GENERAL DE Q-SECTEURS LIBRES < PARCEQU'AYANT TROUVE UNE ERREUR SUR LUI, < ON VA LE CONSIDERER ENTIEREMENT OCCUPE... ADRI -I,A < (AFIN DE COMPENSER LE 'DC''&ANSLGB' < QUI A EU LIEU CI-DESSUS...) STA NSL < QUEL MALHEUR ?!???! LA &ANSLGB SBT XXINGB STA &ANSLGB < ON INTERDIT LE 'GB' COURANT PAR 'XXINGB' < AFIN DE NE PLUS Y ACCEDER, TOUT EN MEMO- < RISANT LE NOMBRE DE Q-SECTEURS QUI Y < SONT LIBRES... E82X2: EQU $ IC &ANSLGB < A CAUSE DU 'DC' QUI A ETE FAIT... JMP E83 < VERS LA RECHERCHE D'UN AUTRE BLOC... < < CAS OU ON A ENFIN TROUVE UN SECTEUR LIBRE : < E85: EQU $ STX &VAR+GETSB1 < ON REINITIALISE &VAR+GETSB1 AVEC LE < NUMERO (X) DU 1ER 'SB' POSSEDANT AU < AU MOINS UN SECTEUR LIBRE. LR X,B < (B)=(X)=NUMERO DE 'SB'. DBT < (X)=NUMERO DU PREMIER Q-SECTEUR LIBRE < DANS LE 'SB' COURANT, RBT L,X < ET OCCUPATION DE CE SECTEUR (X)... XR B,X < (X)=NUMERO DU 'SB' COURANT, < (B)=NUMERO DU SECTEUR ALLOUE. STA &ATOGB < MAJ DE LA TABLE D'OCCUPATION DU < 'SB' DE NUMERO (X). XR B,X < (X)=NUMERO DU SECTEUR ALLOUE, < (B)=NUMERO DE 'SB'. ADRI -YY7,B < AINSI LA TOGB SEMBLE ETRE PARCOURUE NGR B,B < PAR ADRESSES CROISANTES !!! < 'B' CONTIENT ALORS UN NUMERO < VIRTUEL DE 'SB'. SLLD NBITMO=K < CONVERSION DU NUMERO DE 'SB' EN < NUMERO DE SECTEUR DANS B (*16). ADR X,B < ON A DONC DANS 'B' LE NUMERO DU 1ER < SECTEUR LIBRE DE 'GBC' QUE L'ON < ALLOUE AU DEMANDEUR. SLLD NBITMO-DECON < CE NUMERO EST CADRE AU GAUCHE. LA NUGBC < (A)=NUMERO DE 'GBC', ADRI -IJIJDX,A < QUE L'ON TRANSLATE... SLLD DECON < ON A DONC MAINTENANT UN NUMERO DE < SECTEUR CORRECT DANS 'A'. CP INFINI < ALORS, ON N'A PAS CONFIANCE ??? JNE E83XYZ < OK, ON N'EST PAS TOMBE SUR 'INFINI'... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < L'ELIMINATION DU SECTEUR < 'INFINI' LORS DE L'INITIALI- < SATION DES 'GB' EN MEMOIRE < DOIT ETRE MAUVAISE !!! < JMP E83XY < ET ON IGNORE CE SECTEUR... E83XYZ: EQU $ STA O,W < RENVOI AU DEMANDEUR A PRIORI... STA VAR+GECTHS < POUR UNE LECTURE A PRIORI... LA ETASYS TBT QSHS < FAUT-IL TESTER LES Q-SECTEURS "HS" ??? JNC E83XX < NON... < < TEST DE L'ETAT DU < SECTEUR ALLOUE : < PSR W < OUI, SAVE L'ADRESSE DE LA DEMANDE... LAD VAR+DEMHSG LR A,W < (W)=ADRESSE DE LA DEMANDE DE LECTURE. BSR ACHAND < ON ESSAYE DE LIRE LE SECTEUR ALLOUE, BSR ACHANW < ON ATTEND, PLR W JE E83XX < OK, IL EST LISIBLE... IC &VAR+NQSHSG < NON, IL EST ILLISIBLE, ON LE COMPTABI- < LISE, LA VAR+GECTHS PUSH < ET ON LE MEMORISE DANS 'PQSHS'... JNCV E83XY < OK, IL Y A DE LA PLACE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < CE N'EST PAS TRES GRAVE : ON RELEVE MANUELLEMENT < LE Q-SECTEUR EN CAUSE (DANS 'A'), ET ON AUGMENTE < LA TAILLE DE LA PILE... < E83XY: EQU $ LAD &ASPHEX BSR ARLSE < SORTIE DE PHASE CRITIQUE... PLR X JMP E80 < ET ON DEMANDE UN SECTEUR DE REMPLACEMENT, < SANS, BIEN ENTENDU, RECOMPTABILISER LE < SECTEUR "HS" QUE L'ON VIENT DE DECOU- < VRIR... < < PASSAGE AU SECTEUR SUIVANT : < E83XX: EQU $ LAD &ASPHEX BSR ARLSE PLR X < RESTAURE NBRE DE SECTEURS ENCORE A < A ALLOUER PLUS UN... ADRI P,W < POUR L'EVENTUEL SECTEUR SUIVANT : < A NOTER QUE LES TOGB SONT < PARCOURUES VIRTUELLEMENT PAR < ADRESSES CROISANTES, ET QUE < LES ADRESSES SECTEURS SONT < RANGEES DANS L'ORDRE DANS LEQUEL ELLES < SONT ALLOUEES !!! JDX E80 < AU SUIVANT... SVC SVCM7 < ET ON DEMANDE UNE COPIE SYNCHRONE SUR < LA ZONE 'SCOPY1'... PLR W < RESTAURE (W)=ADRESSE DE LA DEMANDE. RSR < OUF... < < CAS OU LE 'GBC' EST ENTIEREMENT OCCUPE : < E83: EQU $ PSR W < SAUVEGARDE DE LA DEMANDE D'ALLOCATION... BSR AWOGB < ECRITURE DU 'GBC' SUR 'DKA'... < < RECHERCHE D'UN NOUVEAU 'GBC' : < LXI K < POUR LE PARCOURS DE LA 'LRU' DES 'GB'... E86: EQU $ LBY &VAR+ALRUAL < (A)='GB'-IJIJDX PAR ORDRE D'UTILISATION < DECROISSANTE, XR A,X ADRI IJIJDX,X < (A)=SAVE L'INDEX DE PARCOURS DE LA 'LRU', < (X)=NUMERO DE 'GB' COURANT, PSR A LA &ANSLGB CP VAR+SEULSB < CE 'GB' AT'IL SUFFISAMMENT DE Q-SECTEURS < LIBRES ??? PLR A JG E87 < OK, ON VA UTILISER LE 'GB' (X)... ADRI I,A < ET BIEN NON, IL EST TOUT OCCUPE, PASSONS < A L'ENTREE SUIVANTE DE LA 'LRU', LR A,X < MISE A JOUR DE L'INDEX 'LRU'... CPI NBGB-Z < EST-ON AU BOUT DE LA 'LRU' ??? JLE E86 < NON, CE QUI EST NORMAL... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LA PLUS GRANDE PRUDENCE EST CONSEILLEE, < EN EFFET, SI LE SYSTEME EST RELANCE BRUTALEMENT, < ON RISQUE DE L'ALLOCATION FARFELUE... < JMP E80XY < VERS LE BLOCAGE 'SGETS'... E87: EQU $ LA &ANSLGB < (A)=NOMBRE DE Q-SECTEURS LIBRES DANS < LE 'GB' COURANT (X). STX NUGBC < POSITIONNEMENT DU NOUVEAU 'GBC'. CP NSMGB < LE 'GB' SERAIT-IL ENTIEREMENT LIBRE ??? JE E95 < OUI, IL EST DONC INUTILE, OU IMPOSSI- < BLE (LORS DE L'INITIALISATION DU SYSTE- < ME), DE LIRE LA 'TOGB' SUR 'DKA' : ON < VA LA CALCULER... JL SYSRBP < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ENCORE UNE FOIS ETRE DES PLUS PRUDENTS ; < UNE TELLE SITUATION, AINSI QUE LES PRE- < CEDENTES POURRAIENT SE RENCONTRER APRES < UNE MAUVAISE RE-INITIALISATION DU SYSTEME... < E80XY: EQU $ PLR W < (W)=ADRESSE DEMANDE D'ALLOCATION, LAD &ASPHEX BSR ARLSE < SORTIE DE PHASE CRITIQUE... PLR X < (X)=NOMBRE DE SECTEURS ENCORE A ALLOUER. JMP E80XX < VERS LE BLOCAGE 'SGETS'. SYSRBP: EQU $ BSR AROGB < LECTURE DE LA 'TOGB' DU 'GBC' : JNE E86 < ERREUR, ON NE PEUT LIRE 'TOGB', ALORS < ON FAIT COMME SI CE 'GB' ETAIT VIDE, < ET ON VA EN CHERCHE UN AUTRE... E96: EQU $ PLR W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE D'ALLOCATION. < < NOTA : < 'X' CONTIENT LE NUMERO < DE 'GBC', AINSI QUE LE < MOT 'NUGBC'. < JMP E82 < ET C'EST REPARTI AVEC CE NOUVEAU < 'GBC'. < < < I N I T I A L I S A T I O N D ' U N E T O G B : < < E95: EQU $ PSR X < SAUVEGARDE DU NUMERO DE 'GBC'. LAI MMOT < (A)=VALEUR DE LIBERATION D'UN 'SB', LXI YY7 < (X)=LONGUEUR D'UNE 'TOGB'. STX &VAR+GETSB1 < INITIALISATION DE &VAR+GETSB1 AU < SOMMET DE 'TOGB'. < < INITIALISATION D'UNE 'TOGB', ET < DU SYSTEME PAR LA MEME OCCASION : < E97: EQU $ STA &ATOGB < TOUS SECTEURS LIBRES. JDX E97 < AU 'SB' SUIVANT. PLR X < RESTAURE : < (X)=NUMERO DU 'GBC'. < < INTERDICTION (EVENTUELLEMENT) < DU SECTEUR 'INFINI', 'INFINI' < ETANT UN INDICATEUR DE FIN DE < CHAINAGE ('SGN' ET 'SGF') : < LR X,A XWOR%1: VAL YY7*NBITMO=K XWOR%1: VAL -XWOR%1 < POUR UN DECALAGE A DROITE... CPI Q8000>XWOR%1+IJIJDX < EST-CE LE 'GB' DU SECTEUR 'INFINI' ?? JNE E96 < NON, VERS LA REPRISE DE L'ALLOCATION... PSR X < OUI, ON L'OCCUPE... LXI YY7 LA &ATOGB XWOR%2: VAL Q8000=K RBT NBITMO-B-XWOR%2 < AINSI, IL N'EST PLUS ALLOUABLE... STA &ATOGB PLR X DC &ANSLGB < ET UN SECTEUR DE MOINS DANS LE 'GB', DC NSL < ET DANS LE POOL GENERAL AUSSI... JMP E96 < VERS LA REPRISE DE L'ALLOCATION... PAGE < < < D C T R E L E A S E U R D I S Q U E : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTREL: EQU $ PSTREL: WORD K;K;K;K;COM+DEPCS;DCTREL;NIL;PILREL;HANDLR;SMST;SO;SE #@ASCI " REL" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS < S-FILTRE. WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE DE LA FILE D'ATTENTE DES < DEMANDES DE RELEASE SECTEURS. WORD NIL < QUEUE DE LA FILE D'ATTENTE DES RELEASES. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT (INUTILISE). DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLREL < HANDLER DE RELEASE DE L'ESPACE DISQUE. WORD NIL < PAS DE 'RIT' EVIDEMMENT... WORD K;K < ETAT. WORD XBITS0 < BITSEM. WORD XXNTRY;TRYVID < NTRIES ET FRTRY. WORD K < HSTATS. WORD XTESTO < TESTO. WORD XXDCTF < 'DCT' NON CONNECTABLE... WORD NOSOSE < DCTFUP ("ALTITUDES" DES FONCTIONS). < NOTA : IL FAUT RESTER DANS LA PAGE 0 !!! < < < Z O N E V A R I A B L E : < < VARREL: EQU $ IF VARREL-DCTREL-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < OPTIMISATION DES PARCOURS : < WORD SB1 RELSB1:: VAL $-D-VARREL < ACCES AU MOT 'SB1'. IF RELSB1-GETSB1,,XEIF%, IF ATTENTION : A CAUSE DE 'ROGB' CES 2 IF DEPLACEMENTS DOIVENT ETRE EGAUX !!! XEIF%: VAL ENDIF < < DEMANDE D'ECHANGE DE 'TOGB' SUR 'DKA' : < BYTE NSPDKA;XDSYM < NSPTYP. XWK:: VAL $-D-VARREL IF XWK-EGBGR,,XEIF%, IF ATTENTION : CETTE DEMANDE DOIT ETRE IMPLANTEE IF RELATIVEMENT A 'DCTREL' DE MEME MANIERE QUE IF DANS 'DCTGET' !!! XEIF%: VAL ENDIF EGBGR: VAL $-D-VARREL WORD FGR < (OPDEM)=0 : LECTURE, < =2 : ECRITURE. WORD TOGB+IJIJDX-ZERO*NOCMO < AMDEM. WORD YY8 < CODEM. WORD NILS < ASDEM. DZS LDEM0+VARREL-$+EGBGR < < DEMANDE POUR TESTER LE BON ETAT D'UN Q-SECTEUR : < BYTE NSPDKM;XDSYM?XTYPAD DEMHS:: VAL $-D-VARREL WORD FGR < ON VA ESSAYER DE LE LIRE... WORD BUFHS-ZERO WORD LBUFHS*NOCMO < ET ON LIT LE MINIMUM DE MOTS... WORD NILS < ADRESSE DU Q-SECTEUR A LIRE. SECTHS:: VAL $-D-VARREL < ADRESSE DU Q-SECTEUR COURANT A TESTER. DZS LDEM0+VARREL-$+DEMHS WORD KQSHS < NOMBRE DE Q-SECTEURS HORS-SERVICE ; CE < MOT FAIT PARTIE DE LA 'COPY' DU SYSTEME. NQSHSR:: VAL $-D-VARREL < COMPTEUR DES Q-SECTEURS MAUVAIS... < < < P I L E : < < CALL #SISP CMS5 DOL2# PILREL: EQU $-DEPILE XWPILE: VAL LPILEH+15 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R D E R E L E A S E D I S Q U E : < < < ARGUMENTS : < (L)=ADRESSE DE LA 'DCT' DE RELEASE, < (W)=ADRESSE DE LA DEMANDE DE RELEASE (LES < ARGUMENTS ONT LA MEME SIGNIFICATION < QUE POUR 'HDLGET' MAIS DANS LE SENS < INVERSE...). < < USE L,DCT0 USE W,DEM0 HDLREL: EQU $ LX ARGDEM+CODEM < (X)=NOMBRE DE SECTEURS A RELEASER, PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE, LA ARGDEM+AMDEM LR A,W < (W)=ADRESSE DE LA LISTE DES SECTEURS A < RELEASER. LRM Y WORD PQSHS < (Y)=ADRESSE DE LA PILE 'PQSHS'. < < ACCES AU 1ER SECTEUR A LIBERER : < E90: EQU $ LA O,W < (A)=ADRESSE DU SECTEUR COURANT A RENDRE, CP INFINI < ALORS, ON N'A PAS CONFIANCE ??? JNE E90XYZ < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < OU BIEN C'EST UNE ANCIENNE < VERSION DE L'ALLOCATION QUI < A ALLOUE LE SECTEUR 'INFINI' < PAR ERREUR, SINON, IDENTIFIER < LE DEMANDEUR, ET VOIR POUR- < QUOI IL REND L'INDICATEUR DE < FIN DE CHAINAGE !!! < JMP E93XXX < ET ON IGNORE CE SECTEUR... E90XYZ: EQU $ STA VAR+SECTHS < A PRIORI ON VA TESTER LE Q-SECTEUR ('A'). XWOR%1: VAL DKMINX=K XWOR%1: VAL -XWOR%1 SLRS -XWOR%1 CPI DKMINX>XWOR%1 < EST-CE UN SECTEUR INEXISTANT ??? < (VOIR LA COMPRESSION DU 'SGN') JNE E93XXY < NON, UN VRAI, ON LE REND... < < CAS DES SECTEURS INEXISTANTS : < LR W,B < SAUVEGARDE DANS 'B' DE L'ADRESSE DES < SECTEURS A RELEASER. PLR W < RESTAURE : (W)=ADRESSE DE LA DEMANDE, PSR W < ET RESAUVEGARDE IMMEDIATE... LA ARGDEM+ETADEM < (A)=DEMANDEUR DU RELEASE, CPI NSPDLN < EST-CE BIEN LE DELETE DU 'SGN' ??? LR B,W < ET RESTAURE : (W)=ADRESSE DE LA LISTE < DES SECTEURS A RELEASER... JE E93XXX < OK, C'EST LE 'SGN', ON NE REND PAS < CE SECTEUR BIEN ENTENDU... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ALLER VOIR LE DEMANDEUR... < JMP E93XXX < ET ON NE REND RIEN BIEN SUR... < < CAS DES SECTEURS REELS : < E93XXY: EQU $ LA VAR+SECTHS < NON, ON RESTAURE 'A'... PSR X < SAUVEGARDE DU NOMBRE DE SECTEURS ENCORE < A RENDRE. RQST &ASPHEX <<<<PHASE CRITIQUE AVEC HDLGET. SLRD DECON < DECONCATENATION DE L'ADRESSE SECTEUR : < (A)=NUMERO-1 DE 'GB'. ADRI IJIJDX,A < CALCUL DU NUMERO DU 'GB' AUQUEL < APPARTIENT LE SECTEUR RELEASE. CPI NBGB < VALIDATION DU NUMERO DE 'GB' : JLE E93XXZ < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < LA PLUS GRANDE PRUDENCE S'IMPOSE !!! < JMP E93XX < ET ON ARRETE LA... E93XXZ: EQU $ LR A,X < (X)=NUMERO DE 'GB'. CP NUGBC < ET ON TESTE POUR SAVOIR SI LE < SECTEUR RELEASE APPARTIENT < A 'GBC'. JNE E91 < NON... < < CAS OU LE SECTEUR RELEASE APPARTIENT A GBC : < E92: EQU $ LA &ANSLGB < LE 'GB' N'EST-IL PAS CP NSMGB < PLEIN PAR HASARD ??? JL E92XX < NON, PAS ENCORE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE TRES PRUDENT SI ON RELANCE LE < SYSTEME... < E93XX: EQU $ LAD &ASPHEX BSR ARLSE < SORTIE DE PHASE CRITIQUE... JMP E93 < ET ON ARRETE ICI... E92XX: EQU $ IC &ANSLGB < ET UN SECTEUR DE PLUS DANS 'GBC'... LR B,A LBI K < NETTOYAGE PRUDENT DE 'B'. SCLD YY7=K < DANS 'B' LE NUMERO DE 'SB'. < (NUMERO VIRTUEL...) XWOR%1: VAL NBITMO=K < DECONCATENATION DU SOUS-BLOC... SCLS XWOR%1 ANDI BIT>XWOR%1-N < DANS 'A' LE NUMERO DU SECTEUR < DANS LE 'SB'. ADRI -YY7,B < DEVIRTUALISATION DU NUMERO < DE 'SB'. NGR B,B < (B)=NUMERO DE 'SB'. XR A,B < (A)=NUMERO DE 'SB', < (B)=NUMERO DE SECTEUR. CP &VAR+RELSB1 < REGARDONS SI LE SECTEUR RELEASE < EST DANS L'INTERVALLE (1,(SB1)) ??? JLE E99 < OUI, C'EST BON. STA &VAR+RELSB1 < SI NON, LE 'SB' AUQUEL APPARTIENT < LE SECTEUR RELEASE DEVIENT LA < BORNE SUPERIEURE SB1 DE PARCOURS < DE LA TOGB COURANTE. E99: EQU $ LR A,X < (X)=NUMERO DE 'SB'. LA &ATOGB < ACCES A LA TABLE D'OCCUPATION < DU 'SB' DU SECTEUR RELEASE. XR B,X < (X)=NUMERO DU SECTEUR. TBT L,X < TEST DE L'ETAT DU SECTEUR... JNC SYSRBQ < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < ETRE TRES PRUDENT SI ON RELANCE < LE SYSTEME... < SYSRBQ: EQU $ SBT L,X < RELEASE DU SECTEUR. XR B,X < (X)=NUMERO DU 'SB'. PSR A,X,W LA ETASYS TBT QSHS < FAUT-IL TESTER LES Q-SECTEURS EN < MAUVAIS ETAT ??? JNC E99XX < NON, RIEN A FAIRE DONC... < < TEST DE L'ETAT DU SECTEUR < COURANT QUE L'ON REND : < LAD VAR+DEMHS < OUI, ON VA DONC LIRE UN NOMBRE DE LR A,W BSR ACHAND < MOTS SUFFISANTS SUR LE Q-SECTEUR BSR ACHANW < COURANT POUR QUE LE CHECKSUM DE < CHACUN DES SECTEURS QUI LE COMPOSENT < SOIT CALCULE : JE E99XX < LE SECTEUR COURANT EST BON... < < CAS OU UN Q-SECTEUR RENDU EST EN MAUVAIS ETAT : < (ON NE PEUT LE RELIRE CORRECTEMENT...) < LA VAR+SECTHS < (A)=ADRESSE DU Q-SECTEUR "HS" : PUSH < ON LE MEMORISE, JNCV E99XY < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < C'EST PAS GRAVE : RELEVER MANUELLEMENT < L'AFRESSE DU Q-SECTEUR "HS", PUIS AUGMENTER < LA TAILLE DE 'PQSHS'... < E99XY: EQU $ LX NUGBC < (X)=NUMERO DU 'GB' COURANT, DC &ANSLGB < ON DECOMPTE LE Q-SECTEUR COURANT, < CAR IL A DEJA ETE RENDU AU 'GB'... IC &VAR+NQSHSR < ET ON COMPTE LES MAUVAIS Q-SECTEURS. LAD &ASPHEX BSR ARLSE < FIN DE PHASE CRITIQUE GET/REL... PLR A,X,W JMP E93 < VERS LE Q-SECTEUR SUIVANT... < < CAS OU UN Q-SECTEUR RENDU EST EN BON ETAT : < E99XX: EQU $ PLR A,X,W STA &ATOGB < ET MISE A JOUR DE 'TOGB'... LAD &ASPHEX BSR ARLSE IC NSL < ET UN SECTEUR DE PLUS DANS LE < POOL GENERAL. LA NSL < (A)=NOMBRE DE SECTEURS ACTUELLEMENT < LIBRES : CPI W < 'HDLGET' ATTEND-IL ??? JNE E93 < ON... < < OUI, 'HDLGET' ETAIT BLOQUE, ET < EN MANQUE (COMME ON DIT...) : < ACT SGETS < REVEIL DE L'ALLOCATEUR. < < NOTA : < 'NUGBC' EST OK POUR < L'ALLOCATEUR 'GET'... < E93: EQU $ PLR X < RESTAURE : < (X)=NOMBRE (+1) DE SECTEURS ENCORE A < RELEASER. E93XXX: EQU $ < CAS DES SECTEURS INEXISTANTS... ADRI P,W < POUR L'ACCES A L'EVENTUEL < SECTEUR SUIVANT. JDX E90 < AU SUIVANT... PLR W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE... LA ARGDEM+ETADEM < (A)='NSP' DU DEMANDEUR : CPI NSPINI < NE SERAIT-CE PAS LA TACHE D'INITIALI- < SATION ??? JE E93XXT < OUI, DONC PAS DE COPIE, EN EFFET, TANT < QUE L'INITIALISATION N'EST PAS TERMINEE < ON NE PEUT FAIRE DE COPIE (VOIR A CE < PROPOS LE MODULE DE 'COPY' DANS < 'HDLHOR'...). SVC SVCM7 < NON, ON DEMANDE UNE COPIE SYNCHRONE SUR < LA ZONE 'SCOPY1'... E93XXT: EQU $ RSR < C'EST LA FIN... < < CAS OU UN SECTEUR RELEASE N'APPARTIENT PAS AU 'GBC' : < E91: EQU $ PSR W < SAUVEGARDE DE L'ADRESSE DE LA DEMANDE < DE RELEASE. PSR X < SAUVEGARDE DU NUMERO DU NOUVEAU 'GBC'. LX NUGBC < ACCES AU 'GBC' PRECEDEMT POUR < ECRITURE DE SA TOGB SUR DK1. BSR AWOGB < SAUVEGARDE DE L'ANCIEN 'GBC'... PLR X < RESTAURE : < (X)=NUMERO DU NOUVEAU 'GBC', BSR AROGB < ET LECTURE DE SA 'TOGB'... STX NUGBC < ET POSITIONNEMENT DU NOUVEAU 'NUGBC'. PLR W < RESTAURE : < (W)=ADRESSE DE LA DEMANDE DE RELEASE. JE E92 < ET C'EST REPARTI... JMP E93XX < N'AYANT PU LIRE LA 'TOGB', ON IGNORE < LE Q-SECTEUR RELEASE... < < < N O T A I M P O R T A N T : < TOUTES LES 'SYSERS' DE L'ALLOCATION/ < RELEASE DISQUE PEUVENT SURVENIR APRES < UNE MAUVAISE REINITIALISATION DU < SYSTEME, OU BIEN APRES QU'UNE < INITIALISATION PIRATE AIT ETE FAITE < (PROGRAMME ESCLAVE EN MODE MAITRE) ; < DANS TOUS LES CAS, POUR RELANCER LE SYSTEME, < IL FAUDRA ETRE PRUDENT, ET PEUT ETRE < INHIBER LA COPIE ('ETASYS')... < <