< S I S C M S 5 10 PAGE PAGE < < < E N T R Y A U T O R I S A T I O N ' A L T - M O D E ' : < < < FONCTION : < CE SOUS-PROGRAMME EST APPELE < PAR LA GRAMMAIRE DU 'CCI' ; IL < PERMET DE REVEILLER UN UTILISA- < TEUR APRES UNE COMMANDE "!W...". < < WAKUP: EQU $ BSR ASMMK <<<< MASQUAGE GENERAL DES IT LA IDESC-DCTESC,W RBT IDESCA < AUTORISATION DES 'ALT-MODE'. STA IDESC-DCTESC,W BSR ASMDK <<<< DEMASQUAGE GENERAL DES IT RSR < RETOUR AU CCI. PAGE < < < P A T C H M A N U E L D E L ' E S P A C E < M E M O I R E D E L ' E S C L A V E : < < < FONCTION : < CE SOUS-PROGRAMME EST APPELE < PAR LA GRAMMAIRE DU 'CCI' A LA < SUITE DE LA COMMANDE "!P" ; CETTE < COMMANDE, EN PLUS DE BLOQUER LE < SYSTEME, REND RESIDENT EN MEMOIRE < MAITRE L'ESPACE MEMOIRE DE L'UTI- < LISATEUR L'AYANT FRAPPEE. < LA COMMANDE "!P" AVAIT ETE < INTRODUITE POUR DES RAISONS HIS- < TORIQUES, DU TEMPS OU LES SEULS < PATCHES D'UN PROGRAMME NE POU- < VAIENT QUE PASSER PAR LE PUPI- < TRE... < < < I N I T I A L I S A T I O N D U P A T C H : < < < ARGUMENT : < (W)=ADRESSE DCT(ESCLAVE). < < < P A T C H M A N U E L : < < < ARGUMENT : < (W)=ADRESSE DCT(ESCLAVE). < < PATCH: EQU $ BSR ASYSER < P A T C H M A N U E L ... < < < E N T R Y D E B U G U T I L I S A T E U R : < < IPATCH: EQU $ < BLOCAGE DU SWAPPING ESCLAVE. PATCHD: EQU $ LA FSERV-DCTESC,W < LA ROUTINE DE FIN DE SERVICE < EST-ELLE DEJA POSITIONNEE ??? JAE Z1160 < NON, C'EST BON... < < CAS OU FSERV EST DEJA POSITIONNEE : < CP AABORT < 2 ALT-MODES ONT-ILS ETE FRAPPES < PENDANT LE DEBUG ??? JE Z1160 < OUI, ON VA LES IGNORER... CP AGOBPE < 1 ALT-MODE A-T'IL ETE FRAPPE ??? JE Z1160 < OUI, IL EST IGNORE... BSR ASYSER < E R R E U R S Y S T E M E ... < < DEBLOCAGE DU SWAPPING ESCLAVE EN FIN DE SERVICE : < Z1160: EQU $ LA AISWAP STA FSERV-DCTESC,W < (RE-)POSITIONNEMENT DE FSERV. RSR CALL #SISP CMS5 DOL1# < < < I N V E R S I O N D U B L O C A G E / < D E B L O C A G E D U S W A P P I N G : < < < FONCTION : < CE SOUS-PROGRAMME EST APPELE < EN FIN DE SERVICE, A LA DEMAN- < DE DU 'CCI', ET INVERSE L'ETAT < DE BLOCAGE/DEBLOCAGE DU SWAPPING < DE L'UTILISATEUR. < < < ARGUMENT : < (W)=ADRESSE DEMSER. < < ISWAP: EQU $ BSR ASMMK <<<< MASQUAGE GENERAL DES IT LA DEMSWP-DEMSER+XXNSP,W IBT BINNSP < INVERSION DU BLOCAGE/DEBLOCAGE. STA DEMSWP-DEMSER+XXNSP,W STZ FSERV-DEMSER,W < RAZ DE LA ROUTINE DE FIN < DE SERVICE. BSR ASMDK <<<< DEMASQUAGE GENERAL DES IT RSR CALL #SISP CMS5 DOL2# PAGE < < < D C T - T E L E T Y P E D E S E R V I C E : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTTYS: EQU $ PSTTYS: WORD K;K;K;K;COM+DEPCS;DCTTYS;NIL;PILTYS;HANDLR;SMST;SO;SE #@ASCI " TYS" < #SISP CMS5 ASCI# WORD XIOID0 < IOID. WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC. WORD XXLOC0 < SEMLOC. DZS LSEM WORD NIL < TETE. WORD NIL < QUEUE. WORD XXCHV0 < SCHVID. DZS LSEM WORD XXSIT0 < SIT. DZS LSEM WORD SPHEX0 < SPHEX. DZS LSEM WORD HDLTYS < ES. WORD ITTYS < RIT. WORD K;K < ETAT. WORD COSBT?B0SIT=FMASK(K=FCINST < BITSEM : < B0SIT=1 : REVEIL SI DEFSEC ET SI < BETA(SIT)<0 WORD XXNTRY;TRYVID WORD K < HSTATS. XWOR%2: VAL 2 WORD XWOR%2 < TESTO#0 : TIME-OUT A TESTER... WORD COSBT?FGW=FMASK(K=FCINST WORD XFONBA < DCTFUP ("ALTITUDES" DES FONCTIONS). < < < Z O N E V A R I A B L E : < < VARTYS: EQU $ IF VARTYS-DCTTYS-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < ARGUMENTS DES 'SIO' : < WORD ACTTY1?FPHCMD < ARGUMENT DE SIO SORTIE COMMANDE OPTYS:: VAL $-D-VARTYS WORD ACTTY1?FPHETA < ARGUMENT SIO ENTREE MOT D'ETAT ETATYS:: VAL $-D-VARTYS WORD ACTTY1?FPHOUT < ARGUMENT SIO SORTIE INFORMATION SORTYS:: VAL $-D-VARTYS < < RELAIS DIVERS : < WORD NILX < RELAI VERS LE BUFFER COURANT. BUFTYS:: VAL $-D-VARTYS WORD DATE,X < RELAI INDEXE VERS LA DATE/HEURE. DATYS:: VAL $-D-VARTYS WORD TYSM1 < @ROUTINE D'ENVOI MESSAGE 1. ATYSM1:: VAL $-D-VARTYS WORD TYSM2 < ROUTINE D'ENVOI DE MESSAGE 2. ATYSM2:: VAL $-D-VARTYS < < MESSAGES DIVERS : < MOTOR:: VAL $-VARTYS < MISE EN ROUTE DU MOTEUR. BYTE W;KNUL METYS:: VAL $-VARTYS < MESSAGE INITIAL VERS TTYS "!!". XXTYS3:: VAL 6 < NOMBRE DE CARACTERES IMPRIMABLES, XXTYS1:: VAL 4 < NOMBRE DE 'NULL'S LES PRECEDANT. NTRN XXTYS1: VAL XXTYS1+NOCMO-E/NOCMO*NOCMO+NOCMO-Z TRN BYTE XXTYS1+XXTYS3;KNUL < LONGUEUR ; PREMIER CARACTERE. NTRN DO XXTYS1/NOCMO BYTE KNUL;KNUL < MISE EN ROUTE DU MOTEUR... TRN XWOR%1: VAL $-ZERO < SAUVEGARDE DU '$'... BYTE KCR;KLF;KPE;KPE;KNUL;KNUL < MESSAGE PROPREMENT DIT... XWOR%2: VAL $-ZERO < '$' APRES... IF XWOR%2-XWOR%1*NOCMO-XXTYS3,,XEIF%, IF ATTENTION : 'XXTYS3' EST MAUVAIS !!! XEIF%: VAL ENDIF X22:: VAL HNAME-DCT0 ESCTYS:: VAL $-VARTYS-X22 #@ASCI " US " < #SISP CMS5 ASCI# < IDENTIFICATION DU NIVEAU DES < DES ESCLAVES. WORD NILK RGCC:: VAL $-D-VARTYS < RANG DU CARACTERE EN COURS DANS < LE BUFFER MESSAGE WORD NILK NCREST:: VAL $-D-VARTYS < NOMBRE DE CARACTERES RESTANT A < EMETTRE POUR LE MESSAGE EN COURS < < < P I L E : < < CALL #SISP CMS5 DOL2# PILTYS: EQU $-DEPILE XWPILE: VAL LPILEH+10 CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R D E G E S T I O N D E < L A T E L E T Y P E D E S E R V I C E : < < < FONCTION : < CE HANDLER EST CHARGE DE L'EMISSION/RECEPTION < DES MESSAGES DE TTYS. AVANT TOUTE EMISSION DE < DE MESSAGE (SI DEMANDE), LE HANDLER EMET VERS L'OPERATEUR < TEUR UN MESSAGE '!!' PRECEDE DE 'RC''LF', ET < SUIVIT DU NOM DU DEMANDEUR DU MESSAGE, PAR < EXEMPLE : < !!LP1... < < ENSUITE 2 POSSIBILITES : < 1- AMDEM=K : LE HANDLER ARRETE LA SON TRAVAIL, < 2- AMDEM#0 : ECRITURE DU MESSAGE ARGUMENT. < < USE W,DEM0 USE L,DCT0 HDLTYS: EQU $ < < INITIALISATION DE LA TTYS : < LAI MOMINI < MOT DE COMMANDE "RESET", SIO VAR+OPTYS < SIO DE COMMANDE : < AINSI, LES IT NE SONT PAS VALIDEES < POUR L'INSTANT MAIS CA NE DURERA PAS... < < ENVOI DES MESSAGE D'EN-TETE : < LAD VAR+MOTOR < (A)=ADRESSE DU MESSAGE DE MISE EN ROUTE < DU MOTEUR, SBT BITX < BIT D'INDEXATION. STA VAR+BUFTYS < GENERATION DU RELAI INDIRECT BSR VAR+ATYSM2 < ET MISE EN ROUTE DU MOTEUR... XWOR%9: VAL I+I LXI XWOR%9 BSR ADODO < ET ON FAIT UN PETIT DODO AFIN D'ATTENDRE < QUE LE MOTEUR TOURNE... LAD VAR+METYS < (A)=@EN-TETE DES MESSAGES OPERATEUR SBT BITX < BIT D'INDEXATION. STA VAR+BUFTYS < GENERATION DU RELAI INDIRECT < INDEXE VERS L'EN-TETE. BSR VAR+ATYSM2 < ENVOI DE '!!'. < < ENVOI DE LA DATE ET DE L'HEURE : < LA VAR+DATYS < ACCES AU RELAI INDEX DATE/HEURE. STA VAR+BUFTYS < GENERATION DU RELAI VERS LE < BUFFER TYS COURANT. LBI LKDATE < NBRE DE CARACTERES DU MESSAGE < DE DATE/HEURE. LXI K < INDEX 1ER CARACTERE DE LA DATE. BSR VAR+ATYSM1 < ENVOI DE LA DATE ET DE L'HEURE. < < ENVOI DE L'IDENTIFICATEUR DU DEMANDEUR : < LA ARGDEM+ETADEM < (A)=NSP DU DEMANDEUR. CPI NSPACT < EST-CE LE NIVEAU ESCLAVE (PAR < HANDLER DE SERVICE INTERPOSE...) JE E875 < OUI. < < CAS D'UN HANDLER SYSTEME : < LR A,X < (X)=NSP DU HANDLER SYSTEME < DEMANDEUR DE TTYS (TTY1). PSR L BSR ACADCT < (A)=@DCT-DEMANDEUR (X). PLR L JMP E860 < < CAS D'UN ESCLAVE DEMANDEUR : < E875: EQU $ LAD VAR+ESCTYS < DANS LE CAS OU @DCT=K, C'EST < LE NIVEAU ESCLAVE QUI APPELLE < PAR HANDLER DE SERVICE INTERPOSE. E860: EQU $ ADRI HNAME-DCT0,A < (A)=@NOM DU DEMANDEUR. SBT BITX < BIT D'INDEXATION. STA VAR+BUFTYS < GENERATION DU RELAI INDIRECT < INDEXE VERS L'IDENTIFICATEUR < DU DEMANDEUR. BSR VAR+ATYSM2 < ENVOI IDENTIFICATEUR. < < E/S TTYS PROPREMENT DITE : < LA ARGDEM+AMDEM < UN ECHANGE EST-IL REELLEMENT < DEMANDE ??? JAE E827 < NON, ON ARRETE LA... < < PREPARATION DE L'E/S : < BSR AMEM < RENVOIE : < (A)=RELAI INDIRECT INDEXE VERS < LE BUFFER DEMANDEUR, < (X)=K OU 1 SUIVANT QUE LE 1ER < OCTET EST GAUCHE OU DROIT. STA VAR+BUFTYS < GENERATION DU RELAI VERS LE < BUFFER DEMANDEUR. LB ARGDEM+CODEM < (B)=COMPTE OCTET SUPPOSE VALIDE. CPZR B JG SYSR91 < OK. BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < METTRE UN BON 'CODEM'... < SYSR91: EQU $ LA ARGDEM+OPDEM < TEST DU SENS DE L'ECHANGE. CPI FGW JE SYSR92 < C'EST UNE ECRITURE, OK. BSR ASYSER < E R R E U R S Y S T E M E ... SYSR92: EQU $ < < E N V O I D ' U N M E S S A G E : < BSR VAR+ATYSM1 < ENVOI DU MESSAGE DEMANDEUR. < < SORTIE DU HANDLER : < E827: EQU $ < < RAZ DE L'ETAT : < STZ ETAT0 RSR < < < E N V O I D E M E S S A G E S S U R T T Y S : < < < < M E S S A G E 1 : < < < ARGUMENTS : < (B)=COMPTE OCTETS, < (X)=RANG DU 1ER OCTET DANS LE BUFFER, < BUFTYS=ADRESSE DU BUFFER DU MESSAGE. < < TYSM1: EQU $ < < NOTA : < ON VALIDE LES INTERRUPTIONS 'TTYS' < ENTRE CHAQUE CARACTERE, CAR EN EFFET, < LE 'RECOVERY' PEUT PASSER ENTRE CHAQUE < CARACTERE... < STX VAR+RGCC < RANG CARACTERE EN COURS (INDEX). XXTYS2:: VAL 2 < INCREMENT TRES UTILE DU NOMBRE D'OCTETS < REEL DU MESSAGE... IF XXTYS2,,XEIF%, ADRI XXTYS2,B < UTILE ??!?!???! XEIF%: VAL ENDIF STB VAR+NCREST < NOMBRE DE CARACTERES RESTANT A ECHANGER. < < BOUCLE CARACTERE PAR CARACTERE : < TYSM1A: EQU $ LAI MOMRW?MOMSTR < MOT DE COMMANDE 'VALIT OUT', SIO VAR+OPTYS < SIO DE COMMANDE : LES IT SONT VALIDEES... BSR ACSWIT < ON ATTEND L'INTERRUPTION ; ON RAPPELLE < QUE C'EST DANS LA TACHE HARDWARE ASSO- < CIEE QUE SE FONT LES 'SIO' D'ECHANGE, < AINSI QUE L'INCREMENTATION DE 'RGCC', < ET LA DECREMENTATION DE 'NCREST'. CPZ VAR+NCREST < TEST DU COMPTE DE CARACTERE RESIDUEL ??? JG TYSM1A < L'INTERRUPTION EST ARRIVEE, MAIS, CE < N'EST PAS ENCORE LA FIN D'ECHANGE... < < SORTIE : < RSR < L'IT EST ARRIVEE ET C'EST LA FIN < DE L'ECHANGE. < < < M E S S A G E 2 : < < < ARGUMENTS : < BUFTYS=ADRESSE DU BUFFER DU MESSAGE, < OCTET0(MESSAGE)=COMPTE D'OCTETS. < < TYSM2: EQU $ LXI K < INDEX D'ACCES AU COMPTE < D'OCTETS DU MESSAGE. LBY &VAR+BUFTYS < COMPTE D'OCTETS CPI HZERO < TEST DU COMPTE D'OCTETS : SI CELUI-CI < EST INFERIEUR AU CODE DU "0", IL EST < PRIS TEL QUEL, SINON, IL EST CONSIDERE < COMME ETANT EXPRIME EN ASCI, ET DONC < CONVERTI... JL E835XX < (A)=COMPTE D'OCTETS REELS... ANDI BIT>NBITCX-N < ON NE CONSERVE QUE LES BITS 12-15. E835XX: EQU $ LR A,B < (B)=LONGUEUR DU MESSAGE XXTYS4:: VAL MOCG=K/NBITOC < LES NOMS DE 'HDL' COMMENCENT SUR < L'OCTET1 ET NON L'OCTET0. LXI XXTYS4 < (X)=RANG DU 1ER CARACTERE DU MESSAGE BSR VAR+ATYSM1 < ENVOI DU MESSAGE A TTYS. RSR < < < I N T E R R U P T I O N S T T Y S : < < < ARGUMENTS: < (B)=0 : SOUS-NIVEAU NORMAL, < =1 : SOUS-NIVEAU D'EXCEPTION. < < VAR+BUFTYS : RELAI INDEXE VERS LE MESSAGE A EMETTRE, < VAR+RGCC : INDEX DU CARACTERE COURANT, < VAR+NCREST : NOMBRE DE CARACTERES ENCORE A EMETTRE. < < < TRAITEMENT: < < 1 - POUR UN SOUS-NIVEAU NORMAL : < ON EMET LE CARACTERE COURANT, ON < INCREMENTE 'RGCC' ET ON DECREMEN- < TE 'NCREST'. < < 2 - POUR UN SOUS-NIVEAU D'EXCEP- < TION : ON LIT LE MOT D'ETAT POUR < FAIRE RETOMBER LE SOUS-NIVEAU. < < DANS LES DEUX CAS, ON REVEILLE < BIEN ENTENDU LE 'HANDLER'... < < < RAPPEL: < LE SOUS-NIVEAU NORMAL RESTE DEMANDEUR JUSQU'A < L'EXECUTION D'UN SIO D'ECHANGE. < LE SOUS-NIVEAU EXCEPTION RESTE DEMANDEUR JUSQU'A < L'EXECUTION D'UN SIO D'ENTREE MOT D'ETAT. < < ITTYS: EQU $ CPZR B < ALORS SOUS-NIVEAU NORMAL OU EXCEPTION ??? JNE E835 < SOUS-NIVEAU D'EXCEPTION... < < SOUS-NIVEAU NORMAL, < ON VA ECHANGER UN CARACTERE : < DC VAR+NCREST < NOMBRE DE CARACTERES RESTANT... LA VAR+NCREST < NOMBRE DE CARACTERES RESTANT, CPI XXTYS2 < EST-ON SUR LES CARACTERES RESIDUELS ??? JGE E835X < NON, LE MESSAGE PROPREMENT DIT... JAGE E835Y < OUI, ET CE SONT DES 'NULL'S... LAI MOMINI < C'EST FINI, ON FAIT 'RESET'... SIO VAR+OPTYS JMP E834 < VERS LE TEST DE L'ECHANGE EN COURS... E835Y: EQU $ LAI KNUL < (A)=CARACTERE A EMETTRE='NULL'. JMP E835Z < ALLONS EMETTRE... E835X: EQU $ LX VAR+RGCC < RANG CARACTERE EN COURS, LBY &VAR+BUFTYS < (A)=CARACTERE A EMETTRE... E835Z: EQU $ SIO VAR+SORTYS < SORTIE DU CARACTERE COURANT... IC VAR+RGCC < ET PASSAGE AU CARACTERE SUIVANT... JMP E834 < VERS LA SORTIE... < < SOUS-NIVEAU D'EXCEPTION : < E835: EQU $ SIO VAR+ETATYS < ENTREE DU MOT D'ETAT : TBT ETACAD < TEST DE 'FORMAT ERROR' ??? JNC SYSR93 < NON, OK... BSR ASYSER < E R R E U R F A T A L E ... SYSR93: EQU $ TBT ETABRK < TEST DE L'ERREUR DE CADENCE ??? JNC SYSR94 < NON, OK... BSR ASYSER < E R R E U R F A T A L E ... SYSR94: EQU $ < < FIN DE TRAITEMENT : < E834: EQU $ BSR ATEC < Y A-T-IL UN ECHANGE EN COURS? JE E8341 < NON NE RIEN FAIRE, C'EST UNE INTERRUP- < TION PARASITE... BSR ARVHDL < OUI, DANS LES DEUX CAS, ON REVEILLE LE < HANDLER 'HDLTYS'... E8341: EQU $ RSR PAGE < < < M E S S A G E D E ' J E ' E T ' E J ' < V E R S ' T Y S ' : < < < ARGUMENTS : < (W)=ADRESSE DEMANDE VERS 'TYS', < (Y)=ADRESE DCT(PERIPHERIQUE-IN). < < MJEEJ: EQU $ LR Y,A < (A)=ADRESSE DE LA 'DCT' DU PERIPHERIQUE < D'ENTREE (DIT "IN"), SLLS NOCMO=K < ET CONVERSION EN UNE ADRESSE-OCTET. X21:: VAL HNAME-DCT0 X21: VAL X21*NOCMO+XXTYS4 ADRI X21,A < (A)=ADRESSE-OCTET DU NOM DU PERIPHERI- < QUE "IN". STA ARGDEM+AMDEM < ET MISE DANS LA DEMANDE A TTYS. BSR ACHAND < ENVOI DE LA DEMANDE SUR TTYS. BSR ACHANW < ATTENTE DE LA FIN DE SORTIE DU < MESSAGE DE JE SUR TTYS. RSR PAGE < < < C O N S T A N T E S B A N D E S M A G N E T I Q U E S : < < PILEMT:: VAL 20 < INCREMENT DE GENERATION DE LA PILE < DU DEROULEUR DE BANDES MAGNETIQUES. XXMT1:: VAL 200 < DETECTEUR DE TIME-OUT : IL EST TRES < GRAND PARCE QUE LA BANDE EST LONGUE !!! XXMT3:: VAL 4 < SOUS-DETECTEUR DE TIME-OUT UTILISE PAR < 'MTLAN' LORS D'OPERATION DONT ON < CONNAIT LA DUREE... XXMT4:: VAL 6 < INCREMENT DU SOUS-DETECTEUR DE TIME-OUT ; < EN EFFET, SI L'ON SE TROUVE EN TIME-OUT < ON SE TROUVE EN GENERAL SUR UNE PARTIE < VIERGE DE BANDE MAGNETIQUE ; SOIT 'L' < LA LONGUEUR QU'ON A AINSI PARCOURU ; < LA FONCTION SUIVANTE PEUT ELLE AUSSI < SE METTRE EN TIME-OUT. IL FAUT DONC < QUE PROGRESSEIVEMENT LE DETECTEUR < AUGMENTE D'AMPLITUDE AFIN QU'UNE < FONCTION ALLANT DANS L'AUTRE SENS AIT < LE TEMPS DE PARCOURIR AU MOINS 'L' (DANS < LE CAS D'UN SEUL TIME-OUT), AFIN DE < SORTIR DE LA ZONE VIERGE... IF XXMT4-XXMT3,,,XEIF% IF ATTENTION, L'INCREMENT DOIT ETRE DE DUREE IF SUPERIEUR A LA VALEUR DE BASE !!! XEIF%: VAL ENDIF XNMT0:: VAL K < NUMERO DE L'UNITE DE DEROULEUR SUR < LE COULPEUR 'MT1', XUNMT0:: VAL '6000 < EMPLCAEMENT DE CE NUMERO POUR LA < FONCTION 'F5', XUBMT0:: VAL 0 < BIT SELECTIONNANT POUR 'F5' LA DENSITE < D'ENREGISTREMENT : 0=1600 BPI ET SINON < 1=800 BPI, XWOR%1: VAL XUNMT0=K XWOR%2: VAL XNMT0>XWOR%1 < CADRAGE DU NUMERO D'UNITE, XUMT0:: VAL CORBT?XUBMT0=FMASK(K?XWOR%2=FCINST < ARGUMENT DE LA FONCTION 'F5' : 1600 BPI < SUR L'UNITE 0... < < FONCTIONS D'ACCES AU HANDLER 'MT1' : < XFMTR:: VAL FGR < FONCTION DE LECTURE SEQUENTIELLE. XFMTW:: VAL FGW < FONCTION D'ECRITURE SEQUENTIELLE. XFMTAD:: VAL XBITQ < BIT DISCRIMINANT LES ACCES SEQUENTIELS < DES ACCES DIRECTS ; ON PREND 'XBITQ', < AFIN DE POUVOIR ECHANGER 'DKU' ET 'MT1'.. XFMTRA:: VAL COSBT?XFMTAD=FMASK(K?XFMTR=FCINST < FONCTION DE LECTURE A ACCES DIRECT. XFMTWA:: VAL COSBT?XFMTAD=FMASK(K?XFMTW=FCINST < FONCTION D'ECRITURE A ACCES DIRECT. XFMTRW:: VAL '03 < FONCTION DE REMBOBINAGE ('REWIND'). XFMTTM:: VAL '04 < FONCTION D'ECRITURE D'UN 'TAPE-MARK'. XFMTPO:: VAL '05 < FONCTION D'ACCES AU NUMERO DE BLOC < COURANT SUR LA BANDE. XFMTFB:: VAL '06 < POSITIONNEMENT DE LA BANDE DERRIERE < LE PROCHAIN 'TAPE-MARK'. XFMINI:: VAL '07 < FONCTION TRES SPECIALE, QUI N'A D'INTERET < QU'APRES LE "!ASSIGN X=MT1", ET QUI < SUPPRIME LE REMBOBINAGE QUI LE SUIT < LORS DU PREMIER ECHANGE... XFMATV:: VAL '0B < DEMANDE D'ACCES A 'MEMTV' LORS DES < ENTREES-SORTIES, PLUTOT QU'A L'ESPACE < UTILISATEUR... XFMA0:: VAL '0C < DEMANDE D'ACCES A L'ESPACE UTILISATEUR < LORS DES ENTREES-SORTIES (IL S'AGIT LA < DE L'ETAT INITIAL...). XWOR%3: VAL K XWOR%3: VAL COSBT?XFMTR=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTW=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTRA=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTWA=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTRW=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTTM=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTPO=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTFB=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMINI=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMATV=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMA0=FMASK(K?XWOR%3=FCINST XXMT2:: VAL XWOR%3 < LISTE DES FONCTIONS RECONNUES. <******************************************************************************* XWOR%F: VAL XFMTR XFMTR: @VAL '0@@@@ < FONCTION DE LECTURE SEQUENTIELLE 'MT'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTW XFMTW: @VAL '0@@@@ < FONCTION D'ECRITURE SEQUENTIELLE 'MT'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTRA XFMTRA: @VAL '0@@@@ < FONCTION DE LECTURE ALEATOIRE 'MT'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTWA XFMTWA: @VAL '0@@@@ < FONCTION D'ECRITURE ALEATOIRE 'MT'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTRW XFMTRW: @VAL '0@@@@ < FONCTION DE REMBOBINAGE 'MT'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTTM XFMTTM: @VAL '0@@@@ < FONCTION D'ECRITURE D'UN 'TAPE-MARK'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTPO XFMTPO: @VAL '0@@@@ < FONCTION D'ACCES AU NUMERO DE BLOC. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMTFB XFMTFB: @VAL '0@@@@ < POSITIONNEMENT DERRIERE UN 'TAPE-MARK'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMINI XFMINI: @VAL '0@@@@ < SUPPRESSION DE 'RW' APRES "!ASSIGN". CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMATV XFMATV: @VAL '0@@@@ < DEMANDE D'ACCES A 'MEMTV'. CALL #SISP CMS5 GEN CTE# <******************************************************************************* <******************************************************************************* XWOR%F: VAL XFMA0 XFMA0: @VAL '0@@@@ < DEMANDE DE RETOUR A L'ESPACE UTILISATEUR. CALL #SISP CMS5 GEN CTE# <******************************************************************************* < < "ALTITUDE" DES FONCTIONS : < XWOR%3: VAL K XWOR%3: VAL COSBT?XFMTR=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTW=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTRA=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTWA=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTRW=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTTM=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTPO=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMTFB=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMINI=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMATV=FMASK(K?XWOR%3=FCINST XWOR%3: VAL COSBT?XFMA0=FMASK(K?XWOR%3=FCINST XXMTUP:: VAL XWOR%3 < LISTE DES ALTITUDES PAR FONCTION... < < FORMAT DE LA COMMANDE DE CHARGEMENT : < MTREV:: VAL 0 < BIT DE SENS (0=AVANT, 1=ARRIERE). MTWCCM:: VAL 1 < ECRITURE D'UN ENREGISTREMENT. MTWFM:: VAL 2 < ECRITURE D'UN 'TAPE-MARK'. MTGAP:: VAL 3 < INSCIPTION D'UN 'GAP'. MTFSR:: VAL 4 < SAUT EN AVANT. MTRCC:: VAL 5 < LECTURE D'UN ENREGISTREMENT. MTCLR:: VAL 6 < CLEAR... MTREW:: VAL 7 < REMBOBINAGE. MTOFL:: VAL 8 < MISE OFF-LINE. MTSTM:: VAL 9 < SAUT DE 'TAPE-MARK'. MTTHR1:: VAL 11 < LECTURE SEUIL HAUT, PERMET LA VALIDATION < D'UNE ECRITURE... MTTHR2:: VAL 12 < LECTURE SEUIL BAS... MTEDIT:: VAL 13 < PERMET LES ENREGISTREMENTS EN MODE "EDIT" MTTRD:: VAL 14 < FONCTION DE MAINTENANCE ET DE DIAGNOSTIC, < QUI PERMET L'ACCES AUX POSTAMBULES... MTSTSP:: VAL 15 < UTILISE POUR LES SAUTS... < < DIFFERENTES COMMANDES DE CHARGEMENT (POUR 'MTF7') : < XWOR%1: VAL K XWOR%1: VAL COSBT?MTRCC=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTTRD=FMASK(K?XWOR%1=FCINST MT0402:: VAL XWOR%1 < 'TEST READ FORWARD' : TEST EN LECTURE < VANT (POUR LA MAINTENANCE). XWOR%1: VAL K XWOR%1: VAL COSBT?MTRCC=FMASK(K?XWOR%1=FCINST MT0400:: VAL XWOR%1 < 'READ FORWARD' : LECTURE AVANT D'UN BLOC. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREV=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTRCC=FMASK(K?XWOR%1=FCINST MT8400:: VAL XWOR%1 < 'READ REVERSE' : LECTURE ARRIERE D'UN < BLOC. XWOR%1: VAL K XWOR%1: VAL COSBT?MTWCCM=FMASK(K?XWOR%1=FCINST MT4000:: VAL XWOR%1 < 'WRITE ONE RECORD' : ECRITURE D'UN BLOC < DANS LE SENS AVANT. XWOR%1: VAL K XWOR%1: VAL COSBT?MTWCCM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTEDIT=FMASK(K?XWOR%1=FCINST MT4004:: VAL XWOR%1 < 'WRITE EDIT ONE RECORD' : ECRITURE < D'UN BLOC DANS LE SENS AVANT DANS LE < MODE EDITION. XWOR%1: VAL K XWOR%1: VAL COSBT?MTFSR=FMASK(K?XWOR%1=FCINST MT0800:: VAL XWOR%1 < 'SPACE FORWARD ONE RECORD' : SAUT AVANT < D'UN BLOC. XWOR%1: VAL K XWOR%1: VAL COSBT?MTFSR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTSTSP=FMASK(K?XWOR%1=FCINST MT0801:: VAL XWOR%1 < 'SPACE FORWARD N RECORDS' : SAUT EN AVANT < DE N BLOCS. XWOR%1: VAL K XWOR%1: VAL COSBT?MTFSR=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTSTM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTSTSP=FMASK(K?XWOR%1=FCINST MT0841:: VAL XWOR%1 < 'SPACE FORWARD ONE TAPE-MARK' : SAUT EN < AVANT D'UN 'TAPE-MARK'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREV=FMASK(K?XWOR%1=FCINST MT8000:: VAL XWOR%1 < 'SPACE REVERSE ONE RECORD' : SAUT EN < ARRIERE D'UN BLOC. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREV=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTSTSP=FMASK(K?XWOR%1=FCINST MT8001:: VAL XWOR%1 < 'SPACE REVERSE N RECORDS' : SAUT EN < ARRIERE DE 'N' BLOCS. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREV=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTSTM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTSTSP=FMASK(K?XWOR%1=FCINST MT8041:: VAL XWOR%1 < 'SPACE REVERSE ONE TAPE-MARK' : SAUT EN < ARRIERE D'UN 'TAPE-MARK'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREV=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTEDIT=FMASK(K?XWOR%1=FCINST MT8004:: VAL XWOR%1 < 'SPACE REVERSE EDIT MODE' : SAUT EN < ARRIERE D'UN BLOC EN MODE EDIT. XWOR%1: VAL K XWOR%1: VAL COSBT?MTWFM=FMASK(K?XWOR%1=FCINST MT2000:: VAL XWOR%1 < 'WRITE TAPE-MARK' : ECRITURE D'UN 'TAPE- < MARK'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTGAP=FMASK(K?XWOR%1=FCINST MT1000:: VAL XWOR%1 < 'ERASE THREE INCHES GAP' : INSCRIPTION < D'UN GAP DE 3 POUCES. XWOR%1: VAL K XWOR%1: VAL COSBT?MTWFM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTGAP=FMASK(K?XWOR%1=FCINST MT3000:: VAL XWOR%1 < 'ERASE THREE INCHES GAP AND WRITE ONE < TAPE-MARK'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTWCCM=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTGAP=FMASK(K?XWOR%1=FCINST MT5000:: VAL XWOR%1 < 'ERASE THREE INCHES GAP AND WRITE ONE < RECORD'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREW=FMASK(K?XWOR%1=FCINST MT0100:: VAL XWOR%1 < 'REWIND'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTOFL=FMASK(K?XWOR%1=FCINST MT0080:: VAL XWOR%1 < 'OFF-LINE'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTREW=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTOFL=FMASK(K?XWOR%1=FCINST MT0180:: VAL XWOR%1 < 'REWIND THEN OFF-LINE'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTCLR=FMASK(K?XWOR%1=FCINST MT0200:: VAL XWOR%1 < 'CLEAR'. < < FORMAT DE LA COMMANDE DE LANCEMENT : < MTL11:: VAL 11 MTL12:: VAL 12 MTL13:: VAL 13 MTL15:: VAL 15 < < DIFFERENTES COMMANDES DE LANCEMENT (POUR 'MTF3') : < XWOR%1: VAL K XWOR%1: VAL COSBT?MTL11=FMASK(K?XWOR%1=FCINST MT0010:: VAL XWOR%1 < COMMANDE 'CLEAR POGRAMME'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTL13=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTL15=FMASK(K?XWOR%1=FCINST MT0005:: VAL XWOR%1 < COMMANDE 'LANCEMENT FONCTION'. XWOR%1: VAL K XWOR%1: VAL COSBT?MTL12=FMASK(K?XWOR%1=FCINST XWOR%1: VAL COSBT?MTL15=FMASK(K?XWOR%1=FCINST MT0009:: VAL XWOR%1 < COMMANDE 'FIN DE BLOC'. < < FORMAT DU MOT D'ETAT 'A' (ON DISPOSE DEJA < DES BITS 'ETAOPE', 'ETAFBK', 'ETAVIO', < 'ETAPAR', 'ETACAD' ET 'ETADEF') : < ETMT10:: VAL 10 < DOIT ETRE A 0 ET INDIQUE 1600 BPI... ETMT9:: VAL 9 < DONNE LA PARITE DU NOMBRE D'OCTETS LUS < DANS UN BLOC. ETMT8:: VAL ETARIL < ETMT8=1 : ON VIENT DE DETECTER LE STICKER < DE FIN DE BANDE EN MARCHE AVANT. ETMT7:: VAL ETAFBS < ETMT7=1 : LE DEROULEUR EST EN DEBUT < DE BANDE. ETMT6:: VAL ETABRK < ETMT6=1 LORSQUE : < - ON VIENT D'ECRIRE UN 'TAPE-MARK', < - ON VIENT DE SAUTER UN 'TAPE-MARK', < - ON VIENT DE LIRE UN 'TAPE-MARK'. ETMT5:: VAL ETADOG < INDIQUE QUE LA COMMANDE EST REJETEE < PARCE QUE : < - LE DEROULEUR EST OFF-LINE, < - UN REMBOBINAGE EST EN COURS, < - UN RETOUR ARRIERE EST DEMANDE ALORS < QU'ON EST AU DEBUT DE BANDE, < - ON VEUT ECRIRE SUR UNE BANDE PROTEGEE. ETMT4:: VAL 4 < ETMT4=0 : LE DEROULEUR NE PEUT RECEVOIR < AUCUN ORDRE, ON TROUVE DONC < ICI LE SIGNAL.NOT.OCCAR. < < 'ETAT' LORSQUE LA DEMANDE < COURANTE EST ABORTEE : < XETATX:: VAL XTOSIT-I < VALEUR DONNEE A 'ETAT0' LORSQUE LA DEMAN- < DE COURANTE (LONGUE EN GENERAL) A ETE < ABORTEE VIA SON BIT 'XBABOR'... < < LISTE DES ERREURS RECONNUES : < <******************************************************************************* ERMT1:: VAL '41 < ECRITURE D'UN 'TAPE-MARK' IMPOSSIBLE : < LA BANDE EST SUREMENT DEFECTUEUSE... ERMT2:: VAL '0@@@@+I < UNE ADRESSE-OCTET IMPAIRE OU UNE LONGUEUR < EN OCTETS IMPAIRES SONT DONNEES. ERMT3:: VAL '0@@@@+I < L'ECHANGE DEMANDE EST TROP LONG. ERMT4:: VAL '0@@@@+I < UNE ECRITURE EST DEMANDEE SUR UNE < BANDE PROTEGEE. ERMT5:: VAL '0@@@@+I < UNE ECRITURE/LECTURE EST IMPOSSIBLE : LA < BANDE EST SUREMENT DEFECTUEUSE, OU BIEN < UN 'TAPE-MARK' A ETE DETECTE... ERMT6:: VAL '0@@@@+I < TIME-OUT... ERMT7:: VAL '0@@@@+I < ERREUR DE PARITE OU DE CADENCE. ERMT8:: VAL '0@@@@+I < ON A TROUVE PLUS DE 2**15 BLOCS SUR < LA BANDE... ERMT9:: VAL '0@@@@+I < LE NUMERO DE BLOC DEMANDE DANS 'ASDEM' < EST SUPERIEUR A 2**15... ERMT10:: VAL '0@@@@+I < FIN DE BANDE RENCONTREE LORS D'UNE < ENTREE-SORTIE. ERMT11:: VAL '0@@@@+I < COMMANDE REFUSEE LORSQUE LA BANDE EST < EN FIN DE BANDE... ERMT12:: VAL '0@@@@+I < COMMANDE 'XFMINI' NE SUIVANT PAS LE < "!ASSIGN X=MT1" IMMEDIATEMENT... ERMT13:: VAL '0@@@@+I < UNE ENTREE-SORTIE EST DEMANDEE SUR < 'MEMTV', ALORS QUE 'DKU' EST ASSIGNE ; < A NOTER QUE 'DKU' PEUT ETRE ASSIGNE A < L'UTILISATEUR QUI S'EST ASSIGNE 'MT1', < ON AGIT AINSI PARCE QUE C'EST PLUS < SIMPLE ; CETTE ERREUR EST INTRODUITE < AFIN D'ASSURER LA PROTECTION DE < 'MEMTV' PAR "!ASSIGN N=DKU"... ERMT14:: VAL '0@@@@+I < LA DEMANDE COURANTE A ETE ABORTEE VIA < SON BIT 'XBABOR'... <******************************************************************************* <******************************************************************************* XWOR%F: VAL ERMT5 ERMT5: @VAL '0@@@@ < CODE D'ERREUR : 'TAPE-MARK' RECONTRE. CALL #SISP CMS5 GEN CTE# <******************************************************************************* PAGE < < < D C T B A N D E M A G N E T I Q U E 1 : < < CALL #SISP CMS5 CHECK# CALL #SISP CMS5 DOL1# DCTMT1: EQU $ PSTMT1: WORD K;K;K;K;COM+DEPCS;DCTMT1;NIL;PILMT1;HANDLR;SMST;SO;SE #@ASCI " MT1" < #SISP CMS5 ASCI# WORD XIOID0 < IOID : METTRE 'NSPLP1;NOUSER', AU CAS < OU L'ON VOUDRAIT ENTRER DES TRAVAUX A < PARTIR DE 'MT1'... @!L :ACN* IF KOL1=FCGET-KCCI,,XEIF%, IF ATTENTION : IL FAUT UN "!" EN TETE DE LA CARTE !!! XEIF%: VAL ENDIF XWOR%1: VAL KOLTED=FMASK+KOL1=FVAL XWOR%1: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%1 XWOR%2: VAL KOLF=FMASK+KOLTES=FVAL XWOR%2: VAL KOLC=FMASK+KSTAR=FVAL?XWOR%2 XWOR%3: VAL XWOR%1=XWOR%2 < RECHERCHE DU LIMITEUR ","... IF XWOR%3-KOL0-KOLON,XEIF%,, IF ATTENTION : IL MANQUE LE LIMITEUR "*" !!! XEIF%: VAL ENDIF XLPLOG:: VAL XWOR%3-KOL1+Z < LONGUEUR EN OCTETS DE LA CARTE !L. XWOR%4: VAL NOCMO=K XWOR%5: VAL -XWOR%4 IF XLPLOG>XWOR%5>XWOR%4-XLPLOG,,XEIF%, IF ATTENTION : LA LONGUEUR DE !L :ACN<EOT> DOT ETRE IF PAIRE SI L'ON VEUT DES JOBS ENTRANT SUR 'MT1' !!! XEIF%: VAL ENDIF WORD NFILTR WORD FILTRS WORD XTALOC < ETALOC=XTALOC : 'MT1' N'EST PAS PARTA- < GEABLE... 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 HDLMT WORD ITMT WORD K;K < ETAT WORD COSBT?B0SIT=FMASK(K=FCINST < BITSEM WORD XXNTRY;TRYVID < NTRIES & FRTRY. WORD K < HSTATS. WORD XXMT1 < TESTO#0 : TIME-OUT A TESTER... WORD XXMT2 < LISTE DES FONCTIONS AUTORISEES. WORD XXMTUP < LISTE DES "ALTITUDES" DES FONCTIONS. < < < Z O N E V A R I A B L E : < < VARMT: EQU $ VARMT1: EQU $ IF VARMT-DCTMT1-DCTFIX,,XEIF%, IF ATTENTION : LA ZONE FIXE DE LA 'DCT' EST MAUVAISE !!! XEIF%: VAL ENDIF < < POUR INITIALISER LE DEROULEUR : < WORD K INIMT:: VAL $-D-VARMT < INIMT=K : UN "!ASSIGN" A ETE EMIS, ET < AUCUNE COMMANDE NE LA ENCORE < SUIVI... < INIMT#0 : CA Y EST, LA PREMIERE COMMANDE < SUIVANT LE "!ASSIGN" EST < ARRIVEE... < < OPERANDES DES 'SIO' D'ACCES AU DEROULEUR : < WORD ACMT1?FPHIN MTF0:: VAL $-D-VARMT < FONCTION D'ENTREE INFORMATION. WORD ACMT1?FPHOUT MTF1:: VAL $-D-VARMT < FONCTION DE SORTIE INFORMATION 1. WORD ACMT1?FPHETA MTF2:: VAL $-D-VARMT < FONCTION D'ENTREE DU MOT D'ETAT 'A'. WORD ACMT1?FPHCMD MTF3:: VAL $-D-VARMT < FONCTION DE SORTIE DE COMMANDE DE < LANCEMENT. WORD ACMT1?FPHDUM MTF4:: VAL $-D-VARMT < FONCTION DE TEST... WORD ACMT1?FPHSAD MTF5:: VAL $-D-VARMT < FONCTION DE SORTIE D'INFORMATION 2. WORD ACMT1?FPHETB MTF6:: VAL $-D-VARMT < FONCTION D'ENTREE DU MOT D'ETAT 'B'. WORD ACMT1?FPHCME MTF7:: VAL $-D-VARMT < FONCTION DE SORTIE DE COMMANDE DE < CHARGEMENT. < < 'CCB' D'ACCES AU DEROULEUR DE BANDE : < WORD K EXADMT:: VAL $-D-VARMT < POUR INITIALISER 'CCBMT0', WORD K ADMT:: VAL $-D-VARMT < POUR INITIALISER 'CCBMT2'. CCBMT:: VAL $-VARMT < 'CCB' D'ACCES AU DEROULEUR DE BANDES. WORD K CCBMT0:: VAL $-D-VARMT < MOT 0 BYTE CCBHDC?XSNMT1;0 < MOT 1 : < BIT0 : MODE 'HDC', < BIT1-7 : NUMERO DU NIVEAU D'INTERRUPTION < NORMALE, < BIT11-15 : NUMERO DU JEU DE REGISTRES. < 'HDC' ALLOUES. WORD NIL CCBMT2:: VAL $-D-VARMT < MOT 2 : ADRESE-MOT DU BUFFER. WORD NILK CCBMT3:: VAL $-D-VARMT < MOT 3 : COMPTE DE MOTS. WORD ACMT1 CCBMT4:: VAL $-D-VARMT < MOT 4 : ADRESSE DU COUPLEUR. WORD NILK NOCTMT:: VAL $-D-VARMT < NOMBRE D'OCTETS REELLEMENT ECHANGES, < FUTUR 'CODEM'... < < CONSTANTES GENERALES : < WORD '3FF0 LMMT:: VAL $-D-VARMT < LONGUEUR MAXIMALE D'UN ECHANGE EXPRIMEE < EN MOTS. < < SOUS-DETECTEUR DE TIME-OUT : < WORD XXMT3 SDTOMT:: VAL $-D-VARMT < SOUS-DETECTEUR DE TIME-OUT : CELUI-CI < PROGRESSE EN FONCTION DE LA RENCONTRE < DE TIME-OUT... < < RELAIS : < WORD HDLMTO ADLMTO:: VAL $-D-VARMT < SORTIE NORMALE DE 'HDLMT'. WORD HDLMTE ADLMTE:: VAL $-D-VARMT < SORTIE EN ERREUR DE 'HDLMT'. WORD MTREB AMTREB:: VAL $-D-VARMT < SOUS-PROGRAMME DE REMBOBINAGE ET DE < REINITIALISATION DU DEROULEUR. WORD MTDEF AMTDEF:: VAL $-D-VARMT < REINITIALISATION SUITE A UN MALHEUREUX < DEFAUT SECTEUR... WORD MTLAN AMTLAN:: VAL $-D-VARMT < LANCEMENT D'UNE OPERATION DE COURTE < DUREE ET ATTENTE DE L'INTERRUPTION DE < FIN AVEC TEST DU DEFAUT SECTEUR, ET < DETECTION DES PETITS TIME-OUT... < < COMMANDES DE CHARGEMENT : < WORD MT0100 FT0100:: VAL $-D-VARMT < FONCTION DE REMBOBINAGE. WORD MT4000 FT4000:: VAL $-D-VARMT < FONCTION 'WRITE ONE RECORD'. WORD MT2000 FT2000:: VAL $-D-VARMT < FONCTION 'WRITE ONE TAPE MARK'. WORD MT0400 FT0400:: VAL $-D-VARMT < FONCTION 'READ FORWARD ONE RECORD'. WORD MT0200 FT0200:: VAL $-D-VARMT < FONCTION 'CLEAR'. WORD MT0800 FT0800:: VAL $-D-VARMT < FONCTION 'SPACE FORWARD ONE RECORD'. WORD MT8000 FT8000:: VAL $-D-VARMT < FONCTION 'SPACE REVERSE ONE RECORD'. < < DEMANDE D'ACCES A 'TTYS' LORSQUE LE DEROULEUR < DE BANDES MAGNETIQUE N'EST PAS OPERATIONNEL : < BYTE NSPTYS;XDSYM TYSMT1:: VAL $-D-VARMT < DEMANDE D'ACCES A 'TTYS' DEPUIS 'MT1'. WORD FGW < ECRITURE... DZS LDEM0+VARMT-$+TYSMT1 XXTMT2:: VAL 4 < TEMPORISATION ENTRE 2 ENVOIS A 'TTYS'. WORD MTOPER AMTOPE:: VAL $-D-VARMT < SOUS-PROGRAMME D'APPEL DE L'OPERATEUR < LORSQUE LE DEROULEUR N'EST PAS OPERA- < TIONNEL... < < POSITION DES TETES SUR LA BANDE : < WORD K ADBMT:: VAL $-D-VARMT < NUMERO DU BLOC COURANT ; CELUI-CI NE < PREND PAS EN COMPTE LES EVENTUELS < 'TAPE-MARK' RENCONTRES... WORD MTPOS AMTPOS:: VAL $-D-VARMT < SOUS-PROGRAMME DE POSITIONNEMENT < DE LA BANDE SUR LE BLOC DEMANDE. < (VOIR LE BIT 'XFMTAD') < < < P I L E : < < CALL #SISP CMS5 DOL2# PILMT1: EQU $-DEPILE XWPILE: VAL LPILEH+PILEMT CALL #SISP CMS5 GENPIL2# CALL #SISP CMS5 CHECK# PAGE < < < H A N D L E R D E G E S T I O N D E S D E R O U L E U R S < D E B A N D E S M A G N E T I Q U E S : < < < FONCTION : < CE HANDLER PREND EN CHARGE LA < GESTION REENTRANTE DU OU DES DEROULEURS < DE BANDES MAGNETIQUES GERES PAR LE < SYSTEME CMS5. < < < FONCTIONS D'ACCES : < XFMTR='00 : LECTURE SEQUENTIELLE, < XFMTW='02 : ECRITURE SEQUENTIELLE, < XFMTRA='08 : LECTURE EN ACCES DIRECT, < XFMTWA='0A : ECRITURE EN ACCES DIRECT (?!??!?!), < XFMTRW='03 : REMBOBINAGE, < XFMTTM='04 : ECRITURE D'UN 'TAPE-MARK', < XFMTPO='05 : ACCES A L'ADRESSE COURANTE DANS 'BOX'. < XFMTFB='06 : POSITIONNEMENT DERRIERE LE PROCHAIN < 'TAPE-MARK'. < XFMINI='07 : NE PAS FAIRE DE 'REWIND' INITIAL < APRES LE "!ASSIGN X=MT1" ; CETTE < FONCTION DOIT ETRE LA PREMIERE < RECUE APRES LE "!ASSIGN", SINON, < ELLE EST REFUSEE. < XFMATV='0B : LES ENTREES-SORTIES CONCERNERONT 'MEMTV', < (SAUF SI 'DKU' EST ASSIGNE, AUQUEL CAS < LES ENTREES-SORTIES SERONT REFUSEES AU < FUR ET A MESURE) ; A NOTER QU'ALORS < QUE 'AMDEM' RELATIVISEE DANS L'ESPACE < MEMOIRE UTILISATEUR DESIGNE ALORS UN < MORCEAU DE 'MEMTV'... < XFMA0='0C : LES ENTREES-SORTIES CONCERNERONT L'ESPACE < MEMOIRE UTILISATEUR (ETAT INITIAL). < < < NOTA SUR LE "!ASSIGN" : < EN GENERAL, APRES UN "!ASSIGN" < SUR UN DEROULEUR DE BANDES, UNE < SEQUENCE D'INITIALISATION PAR < 'REWIND' A LIEU LORS DE L'EXECUTION < DE LA PREMIERE FONCTION INCIDENTE, < SAUF SI CELLE-CI EST 'XFMINI'... < < < ARGUMENT : < (L)=ADRESSE DE LA 'DCTMT', < (W)=ADRESSE DE LA DEMANDE. < < < RESULTAT : < BOX=NOMBRE DE CARACTERES ECHANGES DANS LE CAS D'UNE < ENTREE-SORTIE NORMALEMENT TERMINEE, < =NUMERO DE BLOC COURANT ('ADBMT') POUR TOUTES LES < ERREURS RENCONTREES, LORS DE L'ECRITURE D'UN < 'TAPE-MARK', D'UN REMBOBINAGE ET DE LA < FONCTION 'XFMTPO'. < < < NOTA : < 'HDLMT' N'EXPLOITE PAS LE < CONTENU DE 'A' QUI DONNE LE < 'NSPTYP' DE LA DEMANDE... < < USE L,DCT0 USE W,DEM0 HDLMT: EQU $ < < TEST PRELIMINAIRE DU DEROULEUR : < HDLMT2: EQU $ LAI XUMT0 SIO VAR+MTF5 < SELECTION DE L'UNITE DE BANDES, LAI MT0010 SIO VAR+MTF3 < ON FAIT A PRIORI UN 'CLEAR PROGRAMME'... SIO VAR+MTF2 < ET ENTREE DU MOT D'ETAT 'A' : STA ETAT0 < QUE L'ON MEMORISE... TBT ETAOPE < ALORS EST-IL OPERATIONNEL ??? JC HDLMT1 < OUI, OK... BSR VAR+AMTOPE < NON, ON AVERTIT L'OPERATEUR... JMP HDLMT2 < ET ON RETESTE... < < CAS D'UN DEROULEUR OPERATIONNEL : < HDLMT1: EQU $ < < < I N I T I A L I S A T I O N ? ? ? < E T C H A N G E M E N T D E S E S P A C E S < M E M O I R E A C C E D E ( ' M E M T V ' ) : < < LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : CPI XFMINI < EST-CE L'INHIBITION DU 'REWIND' INITIAL < SUITE A "!ASSIGN" ??? JNE HDLMU1 < NON... LAI ERMT12 < OUI, ON CONSIDERE A PRIORI QU'ELLE NE < SUIT PAS IMMEDIATEMENT LE "!ASSIGN"... CPZ VAR+INIMT < LE SUIT-ELLE EN REALITE ??? JNE HDLMTL < ET BIEN NON, IL Y A EU AU MOINS UNE < AUTRE COMMANDE ENTRE "!ASSIGN" ET LA < FONCTION 'XFMINI', (A)=CODE D'ERREUR... IC VAR+INIMT < OK, ELLE EST LA PREMIERE, ON FAIT COMME < SI LA SEQUENCE D'INITIALISATION ETAIT < EFFECTUEE... JMP HDLMTM < ET C'EST TOUT, ON SORT AVEC LA 'BOX'... HDLMU1: EQU $ < < NE SERAIT-CE PAS LE CHANGEMENT < D'ESPACE MEMOIRE ACCEDE : < LBI XEXA0 < (B)=ACCES A L'ESPACE UTILISATEUR A PRIORI CPI XFMA0 < ALORS ??? JE HDLMU3 < OUI, ACCES A L'ESPACE UTILISATEUR... LBI XEXATV < NON, (B)=ACCES A 'MEMTV', CPI XFMATV < ALORS ??? JNE HDLMU4 < NON, IL S'AGIT D'UNE AUTRE FONCTION... HDLMU3: EQU $ < CAS DES FONCTIONS 'XFMA0' ET 'XFMATV' : STB VAR+EXADMT < POUR INITIALISER CORRECTEMENT LE MOT 0 < DU 'CCB' DE 'MT'... JMP HDLMTM < ET C'EST TOUT, ON SORT AVEC LA 'BOX'... < < CAS DES AUTRES FONCTIONS : < HDLMU4: EQU $ CPZ VAR+INIMT < DANS LE CAS DES AUTRES FONCTIONS (DIFFE- < RENTES DE 'XFMINI'), FAUT-IL INITIALISER, < C'EST-A-DIRE SUIT-ON LE "!ASSIGN" ??? JNE HDLMU2 < NON... BSR VAR+AMTREB < OUI, ON FAIT UNE SEQUENCE D'INITIALI- < SATION PAR 'REWIND', JNC HDLMTP < PAS DE CHANCE, "TIME-OUT", ON SORT < EN ERREUR SANS AVOIR FAIT LA SEQUENCE < D'INITIALISATION... IC VAR+INIMT < OK, TOUT S'EST BIEN PASSE ; ON MEMORISE < QUE L'INITIALISATION EST FAITE, ET ON < PASSE A LA FONCTION DEMANDEE... HDLMU2: EQU $ < < < T E S T D E L A F O N C T I O N : < < LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : CPI XFMTRW < EST-CE LE REMBOBINAGE ??? JE HDLMT7 < FONCTION DE REMBOBINAGE. CPI XFMTPO < EST-CE L'ACCES A LA POSITION ??? JE HDLMTM < OUI... LB ETAT0 TBT NBITMO+ETMT8 < EST-ON EN FIN DE BANDE ??? JNC HDLMTY < NON, ALLONS FAIRE CE QUI EST DEMANDE... LAI ERMT11 < ERREUR 'COMMANDE REFUSEE EN FIN DE < BANDE'. JMP HDLMTL < VERS LA SORTIE EN ERREUR... HDLMTY: EQU $ CPI XFMTFB < EST-CE UN POSITIONNEMENT DERRIERE LE < PROCHAIN 'TAPE-MARK' ??? JE HDLMB1 < OUI... CPI XFMTTM < EST-CE L'ECRITURE D'UN 'TAPE-MARK'. JNE HDLMT3 < NON, DONC IL S'AGIT D'UNE ENTREE-SORTIE.. < < < E C R I T U R E D ' U N ' T A P E - M A R K ' : < < HDLMT8: EQU $ LA VAR+FT2000 SIO VAR+MTF7 < CHARGEMENT DE LA FONCTION 'WRITE < TAPE-MARK', LAI MT0005 SIO VAR+MTF3 < ET LANCEMENT DE CETTE FONCTION... BSR ACSWIT < ATTENTE DE FIN D'OPERATION : BSR ATHDS < EST-CE UNE FIN VERITABLE, OU BIEN EST-CE < UN DEFAUT SECTEUR ??? JNC HDLMTV < OK, PAS DE DEFAUT SECTEUR... BSR VAR+AMTDEF < REINITIALISATION GENERALE LORS D'UN < DEFAUT SECTEUR, JMP HDLMT2 < ET ON RECOMMENCE... HDLMTV: EQU $ LA ETAT0 < NON, UNE FIN NORMALE : CPI XTOSIT < EST-CE UN TIME-OUT ??? JE HDLMTP < OUI... TBT ETAVIO < NON, Y-A-T'IL EU VIOL ??? JC ADLMTD < OUI, OH QUEL SCANDALE !!! TBT ETAOPE < NON, LE DEROULEUR EST-IL OPERATIONNEL ??? JC HDLMTJ < OUI... BSR VAR+AMTOPE < NON, ON AVERTIT L'OPERATEUR... JMP HDLMT8 < ET ON ITERE L'OPERATION... HDLMTJ: EQU $ TBT ETMT6 < L'ECRITURE DU 'TAPE-MARK' A-T'ELLE < ETE FAITE ??? LAI ERMT1 < NON A PRIORI... JNC HDLMTL < EFFECTIVEMENT, LA BANDE EST SUREMENT < MAUVAISE : AU DEMANDEUR DE DECIDER... < < < P O S I T I O N C O U R A N T E E T S O R T I E S : < < HDLMTM: EQU $ LX VAR+ADBMT BSR ASTBOX < 'BOX' RECOIT EVENTUELLEMENT LE NUMERO < DE BLOC COURANT DANS LE CAS DE LA < FNCTION DE REMBOBINAGE, DE LA FONCTION < D'ECRITURE D'UN 'TAPE-MARK', ET ENFIN < DE LA FONCTION 'XFMTPO'... BR VAR+ADLMTO < SORTIE NORMALE DE 'HDLMT'... HDLMTL: EQU $ BR VAR+ADLMTE < SORTIE EN ERREUR DE 'HDLMT'... < < < P O S I T I O N N E M E N T D E R R I E R E L E < P R O C H A I N ' T A P E - M A R K ' : < < HDLMB1: EQU $ BSR VAR+AMTPOS < POSITIONNEMENT... JC HDLMB2 < CAS DES DEFAUTS (TIME-OUT, FIN DE < BANDE,...). JMP HDLMTM < OK, ON EST DERRIERE UN 'TAPE-MARK'... < < < F O N C T I O N D E R E M B O B I N A G E : < < HDLMT7: EQU $ BSR VAR+AMTREB < REINITIALISATION DU DEROULEUR... JNC HDLMTP < ET BIEN, IL Y A TIME-OUT !!! JMP HDLMTM < TOUT S'EST BIEN PASSE... < < < T R A I T E M E N T D E S T I M E - O U T : < < HDLMTP: EQU $ LAI XUMT0 SIO VAR+MTF5 < RESELECTION DE L'UNITE... LAI MT0009 SIO VAR+MTF3 < COMMANDE 'FIN DE BLOC' POUR LE CANAL... SIO VAR+MTF2 < (A)=MOT D'ETAT : TBT ETAOPE < LE DEROULEUR EST-IL OPERATIONNEL ??? JNC HDLMTW < NON, ON LE LAISSE TEL QUEL... LA VAR+FT0200 SIO VAR+MTF7 < OUI, IL N'EST DONC PAS EN REMBOBINAGE, < ET ON ESSAYE DE FAIRE UN 'CLEAR' DESSUS.. LAI MT0005 SIO VAR+MTF3 < LANCEMENT DU 'CLEAR'... LAI MT0010 SIO VAR+MTF3 < ON FAIT A PRIORI UN 'CLEAR PROGRAMME'... LA ARGDEM+OPDEM TBT XFMTAD < EST-ON SUR UNE FONCTION AVEC POSI- < TIONNEMENT ??? JC HDLMTW < OUI, ON RESTE DONC OU L'ON EST AFIN < QUE LA 'BOX' RECOIVE LE NUMERO DU < BLOC COURANT, ET DEFINISSE DONC AINSI < LA FIN LOGIQUE DE LA BANDE : C'EST DONC < UNE METHODE SIMPLE POUR LA CONNAITRE < (DEMANDER LA LECTURE EN ACCES DIRECT < DU BLOC 2**15...). BSR VAR+AMTREB < NON, ON FORCE ALORS UN REMBOBINAGE... HDLMTW: EQU $ LAI ERMT6 JMP HDLMTL < PROVISOIREMENT, ON SORT EN ERREUR ; EN < EFFET JE NE SAIS PAS TRES BIEN QUOI < FAIRE D'AUTRE ???!!?! < < < A U T R E S F O N C T I O N S : < < HDLMT3: EQU $ TBT XFMTAD < EST-CE UN ACCES DIRECT ??? JNC HDLMTS < NON... CPZ ARGDEM+ASDEM < OUI, ALORS VALIDONS 'ASDEM' : JGE HDLMTS < OK, ELLE EST POSITIVE OU NULLE... LAI ERMT9 < ET BIEN NON, ELLE NE PEUT ETRE NEGATIVE, < SOUS PEINE DE COMPLIQUER LES TESTS DE < POSITION SUR LA BANDE... JMP HDLMTL < VERS LA SORTIE EN ERREUR... HDLMTS: EQU $ < < < F O N C T I O N D E L E C T U R E / E C R I T U R E : < < HDLMTT: EQU $ < < RECUPERATION DES ARGUMENTS : < LA NSPTYP TBT TYPAD < 'AMDEM' EST-IL UNE ADRESSE MOT ??? LA ARGDEM+AMDEM JC HDLMTA < OUI, (A)=ADRESSE-MOT DU BUFFER. SLRS NOCMO=K < NON, CONVERSION EN UNE ADRESSE MOT. JC HDLMT9 < ERREUR : L'ADDRESSE OCTET ETAIT IMPAIRE ! HDLMTA: EQU $ STA VAR+ADMT < MISE EN PLACE DE L'ADRESSE MOT DU < BUFFER DANS L'EXTENSION DU 'CCB'... LA VAR+EXADMT < (A)=VALEUR D'INITIALISATION DE 'CCB0', CPI XEXATV < EST-CE L'ACCES A 'MEMTV' ??? JNE HDLMU5 < NON, OK... PSR X,L < OUI : LXI NSPDKU BSR ACADCT < (A)=(L)=ADRESSE DE 'DCTDKU', CPZ ETALOC < 'DKU' EST-IL LOUE ??? PLR X,L LAI ERMT13 < (A)=CODE D'ERREUR A PRIORI... JL HDLMTE < EFFECTIVEMENT, 'DKU' EST DEJA LOUE (IL < EST PEUT-ETRE D'AILLEURS ASSIGNE A CET < UTILISATEUR QUI POSSEDE LE DEROULEUR DE < BANDES...) ; DANS CE CAS L'ACCES A < 'MEMTV' EST REFUSE POUR GARANTIR SON < INTEGRITE... LA ARGDEM+ETADEM CPI NSPACT < EST-CE BIEN UN UTILISATEUR QUI EST < DEMANDEUR DE L'ACCES A 'MEMTV' ??? JNE HDLMU5 < NON, ON LAISSE 'CCBMT2' INTACT... XWOR%5: VAL NOCMO=K < (EN EFFET, LES TRANSLATIONS D'ADRESSE < AU NIVEAU DE 'HDLSVC' SE FONT SUR < DES ADRESSES D'OCTETS...) XWOR%1: VAL -DADR < OUI, ON REFAIT DE L'ADRESSE ABSOLUE < UNE ADRESSE RELATIVE... RDOE < (A)=(SLO), SLLS XWOR%1+XWOR%5 < (A)=(SLO) MODULO 32K (EN OCTETS), SLRS XWOR%5 < (A)=(SLO) MODULO 32K (EN MOTS), SB VAR+ADMT < LES ADRESSES MEMOIRES D'ENTREES-SORTIES < ETANT TRANSLATEES ET ABSOLUTISEES RELA- < TIVEMENT A DES PAGES DE 32K, ON A : NGR A,A < (A)=ADRESSE MEMOIRE PRECISEE DANS UNE < PAGE DE 32K, ADRI -SLOESC,A < (N'OUBLIONS PAS L'EN-TETE DE L'ESPACE < MEMOIRE UTILISATEUR...) XWOR%4: VAL YY7*TZPROG < YY7*TZPROG DONNE LA TAILLE EN MOTS DE < L'ESPACE MEMOIRE UTILISATEUR MAX... XWOR%2: VAL XWOR%4=K XWOR%2: VAL NBITMO-B-XWOR%2 RBT XWOR%2 < (A)=ADRESSE MEMOIRE PRECISEE DANS UNE < PAGE DE 16K MOTS (TAILLE MAXIMALE < DE L'ESPACE UTILISATEUR). XWOR%3: VAL MEMTV0>XWOR%1 < ADRESSE DE 'MEMTV' MODULO 64K... IF XWOR%3-K,,XEIF%, ADRI XWOR%3,A < TRANSLATION DANS 'MEMTV'... XEIF%: VAL ENDIF STA VAR+ADMT < ON OBTIENT AINSI L'ADRESSE DE L'ECHANGE < RELATIVEMENT A 'MEMTV' (A NOTER QUE < LE BUFFER DANS L'ESPACE UTILISATEUR < QUE DESIGNE AUSSI CETTE ADRESSE SI ON < ENLEVE L'EXTENSION 'CCBMAE' NE SERT A < RIEN... NTRN IF XWOR%4+LK-E/LK-RTLIMA,XEIF%,, IF ATTENTION : IL FAUT RAJOUTER DES TESTS IF DE VIOLATION DE 'MEMTV' !!! XEIF%: VAL ENDIF TRN HDLMU5: EQU $ LA ARGDEM+CODEM < (A)=NOMBRE D'OCTETS A ECHANGER : SLRS NOCMO=K < ET CONVERSION EN UN NOMBRE DE MOTS, JC HDLMT9 < ERREUR : LA LONGUEUR OCTETS EST IMPAIRE ! CP VAR+LMMT < N'EST-ELLE PAS TROP GRANDE ??? JG HDLMTB < ET OUI, ERREUR !!! STA VAR+CCBMT3 < MISE EN PLACE DU NOMBRE DE MOTS A < ECHANGER DANS LE 'CCB'. < < DISCRIMINATION DU SENS DE L'OPERATION : < LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : LB VAR+MTF0 < (B)='READ' A PRIORI, LX VAR+FT0400 < (X)='FONCTION READ FORWARD' A PRIORI. XWOR%1: VAL FGW?FGR=K TBT NBITMO-B-XWOR%1 < ALORS, ENTREE OU SORTIE ??? JNC HDLMTC < 0 : 'READ'... LB VAR+MTF1 < (B)='WRITE', LX VAR+FT4000 < (X)='FONCTION WRITE FORWARD'. LA ETAT0 < IL S'AGIT D'UNE ECRITURE, TBT ETAVIO < ALORS LA BANDE NE SERAIT-ELLE PAS < PROTEGEE (ANNEAU ENLEVE) ??? ADLMTD: JC HDLMTD < OUI, ERREUR !!! < (ET RELAI VERS 'HDLMTD') HDLMTC: EQU $ STB VAR+CCBMT4 < MISE EN PLACE DE LA FONCTION ET DE < L'ADRESSE DU COUPLEUR DANS LE 'CCB'... BSR VAR+AMTPOS < POSITIONNEMENT EVENTUEL (SUIVANT LE < BIT 'XFMTAD' DE 'OPDEM') DE LA BANDE... < (NOTA : C'EST UN SOUS-PROGRAMME POUR < EVITER DES PROBLEMES DE 'JMP'...) HDLMB2: JC HDLMTZ < ERREUR 'FIN DE BANDE LORS D'UN < ACCES DIRECT... < (ET RELAI) < ATTENTION : CE PEUT ETRE AUSSI UN TIME- < OUT (VOIR EN EFFET LA VALEUR DE < 'XTOSIT' QUI CONTIENT 'ETMT8') !!! < < ALLOCATION DU JEU DE REGISTRES 'HDC' : < PSR X LAD VAR+CCBMT SVC SVCM4 < ALLOCATION D'UN JEU DE REGISTRES 'HDC', < ET MISE DANS LE 'CCB'... PLR X < < LANCEMENT DE L'ECHANGE : < HDLMTF: EQU $ LAI XUMT0 SIO VAR+MTF5 < ON RESELECTIONNE LE COUPLEUR, AU CAS < OU ON BOUCLERAIT ICI SUR UN DEFAUT < SECTEUR. LAD VAR+CCBMT < (A)=ADRESSE DU 'CCB', PSR X SVC SVCM6 < ADRESSE SUR 20 BITS DANS LE 'CCB'... PLR X BSR ASDIPI < 'CCB' QUE L'ON ENVOIE A 'PROIOP'... LR X,A < (A)=FONCTION DE LECTURE OU D'ECRITURE, BSR VAR+AMTLAN < LANCEMENT DE LA FONCTION, ET ATTENTE < DE FIN AVEC DETECTION DU DEFAUT SECTEUR < ET DES PETITS TIME-OUT... JNC HDLMTU < OK, IL N'Y A PAS EU DE DEFAUT SECTEUR... BSR VAR+AMTDEF < IL Y A EU UN DEFAUT SECTEUR, ON PROCEDE < DONC A UNE REINITIALISATION GENERALE... JMP HDLMTF < ET ON RECOMMENCE... HDLMTU: EQU $ < < ACCES AU COMPTE-RENDU D'ECHANGE : < LA VAR+CCBMT0 SBT BCCBCR STA VAR+CCBMT0 < GENERATION D'UN 'CCB' DE COMPTE-RENDU, LAD VAR+CCBMT < (A)=ADRESSE DU 'CCB' DE COMPTE-RENDU, BSR ASDIPI < QUE L'ON ENVOIE A 'PROIOP'... LA VAR+CCBMT3 < (A)=INDICATION SUR LE COMPTE RESIDUEL... JAGE HDLMTN < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < REGARDER LES 2 PREMIERS BITS DE 'A' !!! < HDLMTN: EQU $ TBT BCCBDC < EST-CE LE DEFSEC/CLEAR ??? JC HDLMTF < OUI, ON ITERE SUR UN DEFAUT SECTEUR... SLLS NOCMO=K < CONVERSION DU NOMBRE DE MOTS RESIDUELS < EN UN NOMBRE D'OCTETS RESIDUELS, SB ARGDEM+CODEM < AUX QUELS ON RETRANCHE LE NOMBRE < D'OCTETS DEMANDE, CE QUI DONNE : NGR A,X < (X)=NOMBRE D'OCTETS REELLEMENT LUS, STX VAR+NOCTMT < ET MEMORISATION POUR ASSURER LA COMPA- < TIBILITE AVEC 'CR' ET 'VIS'... BSR ASTBOX < QUE L'ON TRANSMET EVENTUELLEMENT PAR < LA 'BOX' DE LA DEMANDE... < < RELEASE DU JEU DE REGISTRES 'HDC' : < PSR X LAD VAR+CCBMT SVC SVCM5 < DESALLOCATION DU JEU DE REGSITRES 'HDC' < UTILISES DANS L'ECHANGE PRECEDENT... PLR X < < TEST DES CONDITIONS DE RETOUR : < HDLMTZ: EQU $ LA ETAT0 < (A)=MOT D'ETAT 'A' OBTENU LORS DE < L'INTERRUPTION D'EXCEPTION... CPI XTOSIT < EST-CE UN TIME-OUT ??? JE HDLMTP < OUI... CPI XETATX < EST-CE UN ABORT PAR 'XBABOR' ??? JE HDLMT4 < OUI... TBT ETAOPE < NON, LE DEROULEUR EST-IL OPERATIONNEL ??? JC HDLMTI < OUI, OK... BSR VAR+AMTOPE < NON, ON AVERTIT L'OPERATEUR... JMP HDLMTT < ET ON RETENTE... HDLMTI: EQU $ TBT ETMT8 < EST-ON EN FIN DE BANDE ??? JC HDLMTX < OUI, ERREUR... TBT ETADEF < EST-CE UNE ERREUR DE PARITE/CADENCE ??? JC HDLMTQ < OUI... TBT ETAFBK < LA FONCTION A-T'ELLE ETAIT REMPLIE ??? JNC HDLMTK < NON, ERREUR !!! < (LA BANDE EST MAUVAISE PAR EXEMPLE...) < < MISE A JOUR DE LA POSITION SUR LA BANDE : < IC VAR+ADBMT < COMPTAGE DU BLOC QUI VIENT D'ETRE LU < OU ECRIT... JLE HDLMTR < ET BIEN NON, CELA FAIT TROP !!! LA VAR+NOCTMT STA ARGDEM+CODEM < MISE A JOUR DU 'CODEM' AVEC LE NOMBRE < D'OCTETS REELLEMENT ECHANGES, AFIN D'ETRE < COMPTATIBLE AVEC 'CR' ET 'VIS'... JMP HDLMTO < OK, C'EST BON, ON SORT... < < RETOURS EN ERREUR : < HDLMT9: EQU $ LAI ERMT2 < ERREUR 'IMPARITE SUR UNE ADRESSE OU < UN COMPTE OCTETS'. JMP HDLMTE < VERS LA SORTIE EN ERREUR... HDLMTB: EQU $ LAI ERMT3 < ERREUR 'ECHANGE TROP LONG'. JMP HDLMTE < VERS LA SORTIE EN ERREUR... HDLMTD: EQU $ LAI ERMT4 < ERREUR 'BANDE PROTEGEE EN ECRITURE'. JMP HDLMTE < VERS LA SORTIE EN ERREUR... HDLMTK: EQU $ LAI ERMT5 < ERREUR 'BANDE MAUVAISE' (EN FAIT, IL < S'AGIT EN GENERAL D'UN "TAPE-MARK"...). JMP HDLMTE < VERS LA SORTIE EN EREUR... HDLMTQ: EQU $ BSR VAR+AMTREB < ET ON FORCE UN REMBOBINAGE... LAI ERMT7 < ERREUR 'PARITE/CADENCE'. JMP HDLMTE < VERS LA SORTIE EN ERREUR... HDLMTR: EQU $ LAI ERMT8 < ERREUR 'TROP DE BLOCS SUR LA BANDE'. JMP HDLMTE < VERS LA SORTIE EN ERREUR... HDLMT4: EQU $ LAI ERMT14 < ERREUR : LA DEMANDE COURANTE EST ABORTEE < VIA SON BIT 'XBABOR'... BSR VAR+AMTREB < ET ON FORCE UN REMBOBINAGE... JMP HDLMTE < VERS LA SORTIE EN ERREUR... HDLMTX: EQU $ BSR VAR+AMTREB < ON FORCE UN REMBOBINAGE... < (AFIN DE NE PAS DECHARGER LA BANDE !!!) LAI ERMT10 < ERREUR 'FIN BANDE LORS D'UNE E/S'. JMP HDLMTE < VERS LA SORTIE EN ERREUR... < < < S O R T I E O K : < < HDLMTO: EQU $ STZ ETAT0 < ON INDIQUE AINSI QUE TOUT EST BON... < < < S O R T I E : < < HDLMT6: EQU $ < < PREPARATION DE LA GESTION DES TIME-OUT : < LBI XXMT3 < (B)=VALEUR DE BASE A PRIORI... LA ETAT0 CPI ERMT6 < VIENT-ON DE SOUFFRIR D'UN TIME-OUT ??? JNE HDLMB3 < NON, DONC ON SE MET SUR LA VALEUR DE < BASE DU SOUS-DETECTEUR DE TIME-OUT... LB VAR+SDTOMT < OUI : ADRI XXMT4,B < ON AUGMENTE LE SOUS-DETECTEUR COURANT, < AFIN D'AVOIR EN PARTICULIER LE TEMPS < AU PROCHAIN COUP DE REVENIR DANS UNE < ZONE NON VIERGE DE LA BANDE... HDLMB3: EQU $ STB VAR+SDTOMT < PROCHAIN SOUS-DETECTEUR DE TIME-OUT... < < SORTIE GENERALE : < RSR < < < S O R T I E E N E R R E U R : < < HDLMTE: EQU $ STA ETAT0 < 'A' DONNE UN CODE D'ERREUR... LX VAR+ADBMT BSR ASTBOX < TRANSMISSION EVENTUELLE DU NUMERO DE < BLOC COURANT 'ADBMT' A CHAQUE ERREUR < RENCONTREE. JMP HDLMT6 < ET ON SORT... PAGE < < < T R A I T E M E N T D E S I N T E R R U P T I O N S < S U R D E R O U L E U R D E B A N D E S : < < < FONCTION : < CE MODULE EST APPELE LORS DELA < RECEPTION D'UNE INTERRUPTION SUR UN < DEROULEUR DE BANDES MAGNETIQUES ; < IL RECUPERE ALORS LES MOTS D'ETAT < 'A' ET 'B' ET REVEILLE (EN GENERAL) < LE HANDLER ASSOCIE... < < < ARGUMENT : < (B)=0 : IL S'AGIT D'UNE INTERRUPTION NORMALE !!! < =1 : IL S'AGIT D'UNE INTERRUPTION D'EXCEPTION, < ET C'EST EN FAIT CELA QUI EST NORMAL... < < ITMT: EQU $ CPZR B < ALORS NORMAL OU EXCEPTION ??? JNE ITMT1 < OK, EXCEPTION... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT UNE INTERRUPTION < NORMALE PEUT ARRIVER JUSQU'AU SOFT !!! < ITMT1: EQU $ SIO VAR+MTF2 STA ETAT0 < ENTREE DU MOT D'ETAT 'A', SIO VAR+MTF6 STA ETAT1 < ET DU MOT D'ETAT 'B'... BSR ATEC < Y-A-T'IL UN ECHANGE EN COURS ??? JE ITMT2 < NON, C'EST TOUT... BSR ARVHDL < OUI, ON REVEILLE DONC LE HANDLER < ASSOCIE QUI POURRA TESTER LES MOTS < D'ETAT 'A' ET 'B'. ITMT2: EQU $ RSR PAGE < < < A V E R T I S S E M E N T O P E R A T E U R : < < < FONCTION : < CE MODULE SE CONTENTE D'ALERTER < L'OPERATEUR VIA 'TTYS', PUIS LUI FAIT < FAIRE UN PETIT DODO, ET C'EST TOUT... < < MTOPER: EQU $ PSR A,X LAD VAR+TYSMT1 XR A,W < (W)=ADRESSE DE LA DEMANDE, ET < (A)=SAUVEGARDE DU 'W' ANTERIEUR. BSR ACHAND < ENVOI DE LA DEMANDE, BSR ACHANW < ATTENTE DE FIN D'EMISSION 'TTYS'... LR A,W < ET ENFIN, RESTAURE 'W'... LXI XXTMT2 BSR ADODO < ET UN PETIT DODO... EN ATTENDANT QUE < TOUT S'ARRANGE... PLR A,X RSR PAGE < < < A C C E S D I R E C T S U R L A B A N D E : < < < FONCTION : < ETANT DONNE LE NUMERO DE BLOC COURANT < 'ADBMT' SUR LA BANDE, CE SOUS-PRO- < GRAMME PERMET SI CELA EST DEMANDE < PAR LE BIT 'XFMTAD' DE 'OPDEM' DE < POSITIONNER LA BANDE SUR UN BLOC DE < NUMERO DONNE PAR 'OPDEM' ; POUR DES < RAISONS DE SIMPLICITE, LES NUMEROS < DE BLOCS SONT SUR 15 BITS, AFIN D'ETRE < POSITIFS... < ON PROCEDE PAR DES SAUTS DE 1 BLOC, < SACHANT QUE LES 'TAPE-MARKS' NE SONT < PAS COMPTABILISES... < < < RESULTAT : < CARY=1 : LA FIN DE BANDE A ETE RENCONTREE LORS < D'UN ACCES DIRECT ; IL PEUT AUSSI < S'AGIR D'UN TIME-OUT OU BIEN ENFIN < D'UNE DEMANDE D'ABORT VIA 'XBABOR'... < < MTPOS: EQU $ PSR A,B,X,Y LA ARGDEM+OPDEM < (A)=FONCTION DEMANDEE : CPI XFMTFB < EST-CE UN POSITIONNEMENT DERRIERE LE < PROCHAIN 'TAPE-MARK' ??? JE MTPOSD < OUI... TBT XFMTAD < EST-CE UN ACCES DIRECT ??? JNC MTPOS1 < NON, DONC IL S'AGIT DU MODE SEQUENTIEL, < ON N'A DONC PAS A SE POSITIONNER... MTPOSD: EQU $ < < CAS OU IL FAUT SE POSITIONNER : < MTPOSB: EQU $ LA ARGDEM+ASDEM < (A)=NUMERO DU BLOC DEMANDE, SB VAR+ADBMT < (A)=BLOC DEMANDE-BLOC COURANT, CE QUI < DONNE DONC L'AMPLITUDE DU SAUT... JAE MTPOS2 < UN VRAI MIRACLE, ON Y EST DEJA... LY VAR+FT0800 < ET BIEN NON : (Y)=FONCTION 'SPACE FORWARD < ONE RECORD' A PRIORI... LBI I < POUR INCREMENTER... JAG MTPOS3 < EFFECTIVEMENT IL FAUT ALLER DE L'AVANT... LY VAR+FT8000 < ET BIEN NON, (Y)=FONCTION 'SPACE REVERSE < ONE RECORD', LBI -I < POUR DECREMENTER... NGR A,A < ET ABSOLUTISATION DE L'AMPLITUDE... MTPOS3: EQU $ LR A,X < (X)=NOMBRE DE BLOCS (NON COMPTES LES < 'TAPE-MARKS') A SAUTER... < < POSITIONNEMENT PAR SAUTS UNITAIRES : < MTPOS4: EQU $ LA NSPTYP < ACCES AU 'NSPTYP' DE LA BANDE : TBT XBABOR < UN ABORT EST-IL DEMANDE ??? JC MTPOSX < OUI, ON ARRETE LA... LR Y,A < (A)=FONCTION 'SPACE FORWARD/REVERSE < ONE RECORD', BSR VAR+AMTLAN < LANCEMENT DE LA FONCTION, ET ATTENTE < DE FIN AVEC DETECTION DU DEFAUT SECTEUR < ET DES PETITS TIME-OUT... JNC MTPOSA < OK, IL N'Y A PAS EU DE DEFAUT SECTEUR... BSR VAR+AMTREB < ET OUI, MON PAUVRE MONSIEUR, IL EST DONC < PLUS PRUDENT DE TOUT RECOMMENCER... JMP MTPOSB < VERS LE CALCUL DE L'AMPLITUDE... MTPOSA: EQU $ LA ETAT0 < IL N'Y A PAS EU DE DEFAUT SECTEUR : CPI XTOSIT < EST-CE UN TIME-OUT... JE MTPOS2 < OUI (MAIS CE TEST EST EN FAIT REDONDANT < AVEC CELUI DE 'ETMT8')... IF COSBT?ETMT8=FMASK(K?XTOSIT=FCINST-XTOSIT,,XEIF%, IF ATTENTION : 'XTOSIT' NE CONTIENT PAS LE IF BIT 'ETMT8', DONC LES TESTS QUI SUIVENT IF VONT MERDER !!! VOIR EN PARTICULIER IF LE 'JC HDLMTZ'... XEIF%: VAL ENDIF TBT ETAOPE < LE DEROULEUR EST-IL OPERATIONNEL ??? JC MTPOS9 < OUI, OK... BSR VAR+AMTOPE < NON, AVERTISSONS... JMP MTPOS4 < ET RETENTONS... MTPOS9: EQU $ TBT ETMT8 < A-T'ON RENCONTRE LA FIN DE BANDE ??? JC MTPOS2 < OUI, ON ARRETE LA... TBT ETMT7 < ET LE DEBUT DE BANDE ??? JNC MTPOSC < NON PLUS, OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT ON A PU < TOMBER SUR LE DEBUT DE BANDE, < ALORS QUE C'EST IMPOSSIBLE !!! < (VOIR 'ADBMT' ET 'ASDEM') < EN FAIT, SEUL UN REMBOBINAGE < MANUEL (ET DISCRET...) DE LA < BANDE PEUT L'EXPLIQUER !!! < JMP MTPOS2 < ET ON ARRETE AUSSI... MTPOSC: EQU $ TBT ETMT6 < MAIS, N'A-T'ON PAS SAUTE UN 'TAPE-MARK' ? JC MTPOS5 < ET OUI, ON NE LE COMPTE PAS COMME < BLOC DE DONNEES... LA VAR+ADBMT < NON, DONC ON COMPTABILISE LE BLOC < QUE L'ON A SAUTE : ADR B,A < EN AVANT OU EN ARRIERE... STA VAR+ADBMT JAGE MTPOS7 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE COMMENT LE NUMERO DE < BLOC COURANT A PU DEVENIR NEGATIF < SOIT PAR DECREMENTATION, SOIT PAR < DEBORDEMENT LORS D'UNE INCREMENTATION !!! < MTPOS7: EQU $ JMP MTPOS6 MTPOS5: EQU $ LA ARGDEM+OPDEM CPI XFMTFB < S'AGIT'IL D'UN POSITIONNEMENT DERRIERE < LE PROCHAIN 'TAPE-MARK' ??? JE MTPOS2 < OUI, LA FONCTION EST DONC REMPLIE... ADRI I,X < NON, DANS LE CAS OU UN 'TAPE-MARK' A ETE < SAUTE, IL FAUT L'IGNORER, ET DONC FAIRE < UNE ITERATION DE PLUS... CPZR X < VALIDATION... JG MTPOS8 < OK... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE, MAIS EN FAIT, LA < BANDE PEUT ETRE PLEINE DE 'TAPE-MARKS' !!! < MTPOS8: EQU $ MTPOS6: EQU $ JDX MTPOS4 < VERS LE SAUT DU BLOC SUIVANT EVENTUEL... MTPOS2: EQU $ MTPOS1: EQU $ LA ETAT0 TBT ETMT8 < ET ON POSITIONNE LE 'CARY' SUR L'INDI- < CATEUR DE FIN DE BANDE... PLR A,B,X,Y RSR < ET C'EST TOUT... < < CAS DES ABORTS DU POSI- < TIONNEMENT VIA 'XBABOR' : < MTPOSX: EQU $ LAI XETATX IF COSBT?ETMT8=FMASK(K?XETATX=FCINST-XETATX,,XEIF%, IF ATTENTION : 'XETATX' NE CONTIENT PAS LE IF BIT 'ETMT8', DONC LES TESTS QUI SUIVENT IF VONT MERDER !!! VOIR EN PARTICULIER IF LE 'JC HDLMTZ'... XEIF%: VAL ENDIF STA ETAT0 < ON DONNE A 'ETAT0' UNE VALEUR SPECIALE < MEMORISANT CET ABORT... JMP MTPOS2 < ET ON SORT COMME POUR UN TIME-OUT... PAGE < < < L A N C E M E N T D ' U N E F O N C T I O N < E T A T T E N T E D E F I N : < < < FONCTION : < CE MODULE LANCE UNE FONCTION < ARGUMENT, GEREE PAR INTERRUPTION < DONT ON SAIT QU'ELLE SERA RELATIVEMENT < BREVE (LECTURE/ECRITURE D'UN BLOC < OU SAUT D'UN SEUL BLOC). IL ATTEND < LA FIN DE CETTE FONCTION EN AYANT < MIS EN PLACE UN DETECTEUR DE PETITS < TIME-OUT ; ENFIN, IL REGARDE SI UN < DEFAUT SECTEUR N'EST PAS APPARU... < < < ARGUMENT : < (A)=FONCTION A LANCER. < < < RESULTAT : < (CARY)=1 : UN DEFAUT SECTEUR EST APPARU. < < MTLAN: EQU $ PSR A,B SIO VAR+MTF7 < CHARGEMENT DE LA FONCTION ARGUMENT (A), LA TESTO LB TIMOUT PSR A,B < SAUVEGARDE DE 'TESTO' ET 'TIMOUT' < COURANTS... LA VAR+SDTOMT STA TESTO < MISE EN PLACE DU DETECTEUR DE STA TIMOUT < TIME-OUT DE COURTES DUREES... LAI MT0005 SIO VAR+MTF3 < PUIS LANCEMENT DE LA FONCTION ARGUMENT... BSR ACSWIT < ET ENFIN, ATTENTE DE L'INTERRUPTION... PLR A,B STB TIMOUT < RESTAURATION DU 'TIMOUT' ET STA TESTO < DU 'TESTO' ANTERIEURS... BSR ATHDS < MAIS, EST-CE UNE FIN VERITABLE, OU < BIEN UN DEFAUT SECTEUR ??? PLR A,B RSR PAGE < < < R E I N I T I A L I S A T I O N D U D E R O U L E U R < P A R R E M B O B I N A G E : < < < FONCTION : < CE MODULE REPOSITIONNE LE DEROULEUR < EN DEBUT DE BANDE ET REMET A 0 LE < NUMERO DE BLOC COURANT... < < < RESULTAT : < LE 'CARY' EST POSITIONNE TEL QUE : < JC <REMBOBINAGE OK>, < JNC <TIME-OUT>. < < MTREB: EQU $ PSR A MTREB7: EQU $ STZ VAR+ADBMT < POSITIONNEMENT DU NUMERO DE BLOC < COURANT EN DEBUT DE BANDE. LA VAR+FT0100 SIO VAR+MTF7 < CHARGEMENT DE LA FONCTION 'REWIND', LAI MT0005 SIO VAR+MTF3 < ET LANCEMENT DE CETTE FONCTION... < < ATTENTE DE FIN DE REMBOBINAGE : < LAI XUMT0 SIO VAR+MTF5 < RESELECTION DE L'UNITE 0 (ON NE SAIT < JAMAIS AVEC LA SEMS...). LA VAR+FT0200 SIO VAR+MTF7 < CHARGEMENT DE LA FONCTION 'CLEAR', LAI MT0005 SIO VAR+MTF3 < ET LANCEMENT DE CETTE FONCTION... BSR ACSWIT < ATTENTE DE L'INTERRUPTION DE FIN DE < REMBOBINAGE GENEREE GRACE AU 'CLEAR'... BSR ATHDS < EST-CE UNE FIN VERITABLE OU BIEN UN < DEFAUT SECTEUR ??? JC MTREB7 < LORS D'UN DEFAUT SECTEUR, ON ITERE < L'OPERATION DE REMBOBINAGE... LA ETAT0 < LORS D'UNE FIN VERITABLE, ON REGARDE < COMMENT CELA S'EST-IL PASSE : CPI XTOSIT < EST-CE UN TIME-OUT ??? JE MTREBP < OUI... TBT ETMT7 < NON, ALORS EST-ON AU DEBUT DE BANDE ??? JC MTREBM < OUI, ON EST BON... BSR VAR+AMTOPE < NON, BIZARRE BIZZARE ???!?!?! JMP MTREB7 < APRES AVOIR AVERTIT L'OPERATEUR, ON < RECOMMENCE CETTE OPERATION... < < CAS DU TIME-OUT : < MTREBP: EQU $ RBT ETMT7 < ON FAIT COMME SI ON N'ETAIT PAS EN < DEBUT DE BANDE (CE QUI EST D'AILLEURS < SUREMENT VRAI)... < < SORTIE DU MODULE : < MTREBM: EQU $ TBT ETMT7 < POUR LE TEST EN RETOUR PERMETTANT < DE SAVOIR S'IL Y A EU TIME-OUT... PLR A RSR PAGE < < < R E I N I T I A L I S A T I O N S U I T E A U N < D E F A U T S E C T E U R : < < < FONCTION : < LORS D'UNE OPERATION ECRIVANT OU LISANT < LA BANDE, SI UN DEFAUT SECTEUR EST DETECTE, < ON REVIENT EN DEBUT DE BANDE (ET DONC ON < REMET A 0 LE NUMERO DE BLOC COURANT), ET < SE REPOSITIONNE SUR LE BLOC COURANT D'AVANT < LE DEFAUT SECTEUR... < < MTDEF: EQU $ PSR A,B < < REINITIALISATION DU COUPLEUR : < LAI MT0010 SIO VAR+MTF3 < COMMANDE 'CLEAR PROGRAMME'. LAI XUMT0 SIO VAR+MTF5 < SELECTION DE L'UNITE... < < REPOSITIONNEMENT DE LA BANDE : < LA ARGDEM+OPDEM LB ARGDEM+ASDEM PSR A,B < SAUVEGARDE DE 'OPDEM' ET 'ASDEM'... SBT XFMTAD < ON FORCE A PRIORI LE BIT D'ACCES < DIRECT DE 'OPDEM', LB VAR+ADBMT STB ARGDEM+ASDEM < ON FAIT COMME SI LE BLOC COURANT ETAIT STA ARGDEM+OPDEM < LE BLOC DEMANDE EN ACCES DIRECT... < (ASTUCE SUPER !!!) BSR VAR+AMTREB < ON REVIENT EN DEBUT DE BANDE, CE QUI EST < QUELQUE CHOSE D'ABSOLU... BSR VAR+AMTPOS < ET ON SE REPOSITIONNE SUR LE BLOC < COURANT D'AVANT LE DEFAUT SECTEUR... JNC MTDEF1 < OK, PAS DE FIN DE BANDE... BSR ASYSER < E R R E U R S Y S T E M E ... < < QUE FAIRE ??? < COMPRENDRE CE QUE L'ON FAIT EN FIN DE BANDE !!! < MTDEF1: EQU $ PLR A,B STB ARGDEM+ASDEM < ET ENFIN, ON RESTAURE 'ASDEM', STA ARGDEM+OPDEM < ET 'OPDEM'... PLR A,B RSR < ET C'EST TOUT... PAGE < < < I N I T I A L I S A T I O N D ' U N D E R O U L E U R < D E B A N D E S M A G N E T I Q U E S L O R S D E < L A R E C E P T I O N D ' U N ! A S S I G N : < < < FONCTION : < LORS DE LA RECEPTION D'UN !ASSIGN < RELATIF A UN DEROULEUR DE BANDES MA- < GNETIQUES DANS LE 'CCI', ON LE REINITIA- < LISE EN MEMORISANT CETTE ASSIGNATION < ET EN ATTENDANT LA PREMIERE FONCTION < RECUE PAR LE HANDLER POUR FAIRE UN < 'REWIND' SAUF S'IL S'AGIT DE LA < FONCTION 'XFMINI' QUI L'INHIBE... < < < ARGUMENT : < (B)='NSP' DU DEROULEUR DE BANDES EN CAUSE, < (L)=ADRESSE DE LA 'DCT' DE SERVICE ACTUEL- < LEMENT UTILISEE. < < MTINI: EQU $ PSR X,L LR B,X < (X)='NSP' DU DEROULEUR DEMANDE, BSR ACADCT < (A)=L=ADRESSE DE SA 'DCT'. < NOTA : IL NE S'AGIT PAS D'UNE PHASE < CRITIQUE, CAR EN EFFET SI ON EST < ICI C'EST QUE LE DEROULEUR EST < ASSIGNE PAR CET UTILISATEUR, ET < DONC LE HANDLER ASSOCIE NE PEUT < ETRE ACTIF SIMULTANEMENT !!! STZ VAR+INIMT < INIMT=K : MEMORISATION D'UNE SEQUENCE < D'INITIALISATION A EFFECTUER... LAI XEXA0 STA VAR+EXADMT < ACCES A L'ESPACE UTILISATEUR A PRIORI... PLR X,L RSR < ET RETOUR...