< 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...
Copyright © Jean-François COLONNA, 2011-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2011-2024.