PAGE
IDP "DRIVER GPI32 MODE CANAL"
IDP "AUTHOR : JOHN F. COLONNA"
IDP "LABORATORY : LACTAMME (X-CNET)"
IDP "DATE : 14 MARS 1982"
<
<
< D R I V E R M O D E C A N A L G P I 3 2 :
<
<
< FONCTION :
< CE DRIVER STANDARD COMPATIBLE 'IOCS'
< EST DESTINE A GERER UN 'GPI32' PILOTANT
< UNE IMPRIMANTE ELECTROSTATIQUE BENSON.
<
<
ENT LOCBEN
ENT DRVBEN
NBITMO: VAL 16 < NOMBRE DE BITS PAR MOT...
NTS: VAL 128 < NOMBRE DE TACHES SOFTWARES...
NOCMO: VAL 2 < NOMBRE D'OCTETS PAR MOT (ET OUI, DES
< FOIS QU'UN 32 BITS APPARAISSE !!???!??!).
NOCMOK: VAL 1 < ATTENTION : NOCMO=2**NOCMOK...
E: VAL 1 < POUR FAIRE DES DIVISIONS PAR EXCES...
K: VAL 0 < POUR CLEARER...
NBITOC: VAL NBITMO/NOCMO < NOMBRE DE BITS PAR OCTET (IL Y A PEU DE
< CHANCE QUE CELA CHANGE, MAIS OU BIEN ON
< PARAMETRE, OU BIEN ON NE PARAMETRE PAS..)
MOCD: VAL '00FF < POUR ATTEINDRE L'OCTET DROIT DE 'A'.
I: VAL 1 < POUR INCREMENTER...
BINDEX: VAL 0 < BIT D'INDEX DANS UN MOT.
PAGE
<
<
< T U P S T A N D A R D :
<
<
DSEC TUP
<
< DONNEES DE CONVERSION DES OCTETS EN MOTS :
<
SAVSLO: WORD 0 < SAUVEGARDE DE 'SLO',
SAVSLE: WORD 0 < DE 'SLE',
SAVX: WORD 0 < ET ENFIN DE 'X'...
SAVY: WORD 0 < SANS OUBLIER 'Y'...
SFONC: WORD 0 < SAUVEGARDE DE 'FONC',
SADMEM: WORD 0 < SAUVEGARDE DE 'ADMEM',
SCONT: WORD 0 < SAUVEGARDE DE 'CONTOC'.
IBUF: WORD 0 < ET SON INDEX COURANT...
<
< 'TUP' PROPREMENT DITE :
<
STATUS: WORD 0 < ETAT DU PERIPHERIQUE CODE SUR UN CERTAIN
< NOMBRE DE BITS :
SATTCH: VAL 0 < L'UNITE EST "SUPER-ATTACHEE",
ATTCH: VAL 1 < L'UNITE EST "ATTACHEE",
SPEC: VAL 2 < BIT LIBRE POUR UN USAGE SPECIAL,
SPOOL: VAL 3 < L'ECHANGE COURANT UTILISE LE POOL-BUFFER,
BITENC: VAL 4 < UN ECHANGE EST EN COURS,
BITDEF: VAL 5 < UN DEFAUT A EU LIEU AU COURS DE L'ECHANGE
< COURANT, OBLIGEANT A L'ABANDONNER,
CNL: VAL 6 < LE PERIPHERIQUE FONCTIONNE EN MODE CANAL,
SINDIC: VAL 7 < INDICATEUR CARACTERISANT LA 'FU' EN
< ECHANGE SUR LA 'PU'.
DIVERS: VAL '00FF < BITS SPECIFIQUES...
MODEFO: WORD 0 < MOT D'ETAT DE L'UNITE PHYSIQUE.
< CE MOT CONTIENT ENTRE AUTRES BITS :
DEFO: VAL 0 < UNITE PHYSIQUE EN DEFAUT,
COUP4: VAL 1 < INDICATION 4 BREAKS,
COUP1: VAL 2 < INDICATION 1 BREAK,
VNOOP: VAL 5 < COUPLEUR NON OPERATIONNEL,
VAL1: VAL 13 < SIGNAL 'VAL1' (DOIT ETRE A 0),
BUSY1: VAL 15 < SIGNAL .NOT.'BUSY1' (DOIT ETRE A 1).
FUVOIE: WORD 0 < OCTET GAUCHE=NUMERO DE 'FU' EN COURS
< D'ECHANGE,
< OCTET DROIT =INUTILISE...
INDRIV: WORD 0 < ADRESSE DU DRIVER (CHARGE LORS DE LA
< CONFIGURATION DU SYSTEME).
ECHDRV: WORD 0 < ADRESSE DU MODULE DE L'ENTRETIEN DE
< L'ECHANGE (INUTILISE EN CANAL...).
BASEL: WORD 0 < VALEUR DE LA BASE 'L' DU DRIVER : CETTE
< VALEUR EST FIXEE A LA CONFIGURATION DU
< SYSTEME.
VALSLO: WORD 0 < VALEUR DU REGISTRE 'SLO' DU DEMANDEUR
< DE L'ECHANGE,
VALSLE: WORD 0 < VALEUR DU REGISTRE 'SLE' DU DEMANDEUR
< DE L'ECHANGE.
ADIOCB: WORD 0 < ADRESSE DE L'IOCB DE L'ECHANGE EN COURS,
< IL EST A NOTER QUE CETTE ADRESSE, EST
< SOIT ABSOLUE, SOIT TRANSLATABLE, ET
< QU'IL N'EST PAS TOUJOURS TRES FACILE
< DE FAIRE LA DISTINCTION !!!
FONC: WORD 0 < MOT DE FONCTION, CORRESPONDANT EN FAIT
< AU PREMIER MOT DU 'CCB' ; SON FORMAT
< EST LE SUIVANT :
CR: VAL 4 < BIT INDIQUANT (A 1) QU'UN COMPTE-RENDU
< EST DEMANDE,
B: VAL 7 < BIT INDIQUANT (A 0) QU'IL S'AGIT D'UN
< CANAL MOT,
NIO: VAL '0030 < NUMERO DU PROCESSEUR D'ENTREES-SORTIES
< (POSITIONNE A LA CONFIGURATION DU
< SYSTEME),
MAE: VAL '000F < EXTENSION D'ADRESSE AU DELA DE 64K...
NMAE: VAL 'FFF0 < NMAE=MAE.EOR.'FFFF
DADR: VAL 4 < AMPLITUDE DES DECALAGES DE CALCUL DES
< EXTENSIONS D'ADRESSE, ET DE (SLO,SLE).
FADR: VAL 16 < FADR=2**DADR
CONTEX: WORD 0 < DEUXIEME MOT DU 'CCB' ; SON FORMAT EST
< LE SUIVANT :
DC: VAL 'C000 < TYPE DU CANAL :
< 00=LDC,
< 11=MDC,
< 10=HDC.
ITN: VAL '7F00 < NIVEAU D'INTERRUPTION NORMALE (VALEUR
< DEFINIE A LA CONFIGURATION DU SYSTEME),
CONNEX: VAL '00F0 < 0000=COUPLEUR STANDARD,
CCN: VAL '000F < NUMERO DE CONTEXTE HARDWARE (EN MODE
< CANAL 'HDC').
ADMEM: WORD 0 < TROISIEME MOT DU 'CCB' ; IL DONNE LES
< POIDS FAIBLES DE L'ADRESSE MEMOIRE
< DU BUFFER CONCERNE.
CONTOC: WORD 0 < QUATRIEME MOT DU 'CCB' ; IL DONNE LE
< NOMBRE DE MOTS SUR LEQUEL PORTE L'ECHAN-
< GE (MALGRE SON NOM...).
SENS: VAL 0 < LE BIT 'SENS' DE 'CONTOC' INDIQUE LE
< SENS DE L'ECHANGE (ICI, TOUJOURS UNE
< SORTIE...).
ADPERI: WORD 0 < CINQUIEME MOT DU 'CCB' ; IL DONNE
< L'ADRESSE PHYSIQUE DU COUPLEUR (VALEUR
< FIXEE A LA CONFIGURATION DU SYSTEME).
FPERI: VAL 'FFF8 < EMPLACEMENT DE LA FONCTION DANS 'ADPERI',
< PRISE DANS LA LISTE SUIVANTE :
FWRITE: VAL '0001 < ECRITURE,
FFONC: VAL '0003 < SORTIE FONCTION,
FCMDE: VAL '0007 < SORTIE COMMANDE.
F0: VAL 0 < FONCTION FIN DE BLOC ET INHIBITION IT OUT
F3: VAL 3 < COMMANDE D'ACTIVATION DES INTERRUPTIONS.
TABCOD: WORD 0 < ADRESSE DE LA TABLE DES CODES D'ARRET,
< INUTILISEE ICI...
TYPECH: WORD 0 < CARACTERISATION DE L'ECHANGE ; CE MOT
< EST DECOUPE EN BITS :
PLUS64: VAL 0 < ECHANGE AVEC INTERFACE SYSTEME,
CDA: VAL 1 < ECHANGE AVEC UN BUFFER EN 'CDA',
SPOOL1: VAL 2 < ECHANGE AVEC UTILISATION DU POOL-BUFFER,
CDA64: VAL 3 < ECHANGE AVEC INTERFACE SYSTEME OU
< BUFFER EN CDA (?!??!?!?),
TCARRY: VAL 4 < APPELANT EN MODE MAITRE,
VERCDA: VAL 5 < VERIFICATION D'UNE ADRESSE EN 'CDA',
TSVCS: VAL 6 < VALEUR DU BIT 'SVCS' DU REGISTRE 'ST'
< A L'INITIALISATION DE L'ECHANGE,
INDIC: VAL 7 < TYPE D'ADRESSAGE (0=ADRESSAGE D'UN IOCB,
< (1=ADRESSAGE D'UN BUFFER),
FSP: VAL 8 < L'ECHANGE EN COURS EST UNE FONCTION
< SPECIALE (SI 1),
ERFUSU: VAL 15 < UNITE NON GEREE PAR'IOCS'...
SUPATT: WORD 0 < SEMAPHORE PRIVE DE "SUPER-ATTACHEMENT",
SEMATT: WORD 0 < SEMAPHORE PRIVE D'"ATTACHEMENT",
SEMGEN: WORD 0 < SEMAPHORE D'EXCLUSION D'ACCES A CETTE
< RESSOURCE,
FILSEM: DZS NTS/NBITMO < ET SA FILE D'ATTENTE...
LTUP: VAL $-STATUS < LONGUEUR DE LA 'TUP' DU 'GPI32'...
PAGE
<
<
< C O M M O N D ' I O C S :
<
<
DSEC COMIOC
COMMUN: EQU $+128
DZS 36
AMASK: WORD MASK < MASQUAGE DES INTERRUPTIONS,
ADMASK: WORD DMASK < ET DEMASQUAGE...
DZS 12
AIPLIB: WORD IPLIB < S/P DE LIBERATION DU CANAL.
AIPINI: WORD IPINI < S/P D'INITIALISATION DU CANAL.
DZS 5
AETAPE: WORD ETAPU < S/P DE LECTURE DU MOT D'ETAT REEL.
DZS 3
ALIBCN: WORD LIBCN
DZS 6
AINTUP: WORD INITP
DZS 11
ASPCCN: WORD SPCCN < S/P DE GESTION DES REGISTRES 'HDC'.
PAGE
<
<
< L O C A L D U D R I V E R R E E N T R A N T :
<
<
LOCAL
<
< INTERFACE DU DRIVER AVEC LE
< MONDE EXTERIEUR (LES 2 MOTS
< QUI SUIVENT DOIVENT ETRE LES
< PREMIERS MOTS GENERES) :
<
LOCBEN: EQU $+128
WORD DRVBEN < POINT D'ENTREE DU DRIVER,
BYTE 0;LTUP < LONGUEUR DE LA 'TUP'.
<
< RELAIS DE SOUS-PROGRAMMES, ET
< DES DIFFERENTS MODULES COMPO-
< SANT LE DRIVER :
<
AFPUSI: WORD FPUSI1 < ACCES AU MOT D'ETAT DU COUPLEUR.
AAIGUI: WORD AIGUIL,X < RELAI D'ACCES VERS LES MODULES DU
< DRIVER :
AIGUIL: WORD FPUSI;INITIA;FPOS;ECHDP;FCLEAR;FKILL
ADEFO1: WORD DEFO1 < DEFAUT A L'INITIALISATION DE L'ECHANGE.
<
< DONNEES DE CONVERSION DES OCTETS EN MOTS :
<
ABUF: WORD BUF,X < RELAI VERS LE BUFFER DE CONVERSION,
LBUF: VAL 132+8*NOCMO < LONGUEUR MAXIMALE DU BUFFER DE CONVER-
< SION, CE QUI IMPLIQUE :
< CONTOC<=(LBUF/NOCMO)...
LMAX: WORD LBUF/NOCMO < POUR VALIDER 'CONTOC'...
<
< ZONE DE PATCH :
<
PATCHL: EQU $
DZS 2
<
< BUFFER DE CONVERSION DES OCTETS EN MOTS :
<
GRAPH0: VAL 'FFFF < VALEUR ATTENDUE DANS LE BUFFER ARGUMENT
< SUR 'LGRAPH' MOTS POUR QU'IL S'AGISSE
< D'UNE DEMANDE D'ACTIVATION DU GRAPHWARE.
IGRAPH: WORD 'BFFF;'BF1F;'BFFF;'BF17
LGRAPH: VAL $-IGRAPH < DONNEES A ENVOYER POUR ACTIVER LE GRAPH-
< WARE EN MODE GRAPHIQUE.
BUF: DZS LBUF < QUEL DOMMAGE...
PROG
USE C,COMMUN
USE L,LOCBEN
USE W,STATUS
PAGE
<
<
< D R I V E R G E R A N T U N C O U P L E U R
< ' G P I 3 2 ' C O N N E C T E A U N E
< I M P R I M A N T E E L E C T R O S T A T I Q U E
< B E N S O N :
<
<
< FONCTION :
< CE DRIVER ECRIT AUX NORMES 'IOCS'
< PERMET LA GESTION D'UN 'GPI32' EN
< MODE CANAL COUPLE A UNE IMPRIMANTE
< ELECTROSTATIQUE BENSON ; IL TRANSMET
< LES MOTS ARGUMENTS EN LEUR FAISANT
< SUBIR LE DECOUPAGE EN 2 MOTS INVERSES
< BIT A BIT SUR L'OCTET DE DROITE ; DE
< PLUS, LORSQUE LE BUFFER ARGUMENT
< FAIT 'LGRAPH' (=4) MOTS DE LONG, ET
< QUE CHACUN DE CES MOTS CONTIENT 'IBUF'
< (='FFFF), LE DRIVER 'DRVBEN' L'INTER-
< PRETE COMME UNE DEMANDE D'ACTIVATION
< DU GRAPHWARE.
<
<
< NOTA IMPORTANT :
< LES ECHANGES SONT TRONQUES A LBUF/NOCMO MOTS !!!
<
<
DRVBEN: EQU $
BR &AAIGUI < ALLONS VERS LE MODULE SPECIFIQUE (X).
<
< ZONE DE PATCH :
<
PATCH2: EQU $
DZS 8
<
< CODES DE RETOUR PAR LE REGISTRE 'X' :
<
VALX0: VAL 0 < ECHANGE EN COURS,
VALX1: VAL 1 < RENVOI DU MOT D'ETAT DANS 'A',
VALX2: VAL 2 < DEFAUT DU COUPLEUR,
VALX3: VAL 3 < DEFAUT DE FONCTIONNEMENT DU CANAL,
VALX6: VAL 6 < FIN DE FONCTION SPECIALE.
PAGE
<
<
< E N T R E E D U M O T D ' E T A T :
<
<
FPUSI: EQU $ < ENTREE AVEC (X)=0.
LA STATUS < ACCES A L'ETAT COURANT :
TBT BITENC < Y-A-T'IL UN ECHANGE EN COURS ???
JNC FPUSI1 < NON...
<
< CAS OU IL Y A UN ECHANGE EN COURS :
<
LAI 0
SBT DEFO
JMP FPUSI2 < VERS LA SORTIE AVEC (A) NE CONTENANT
< QUE LE BIT 'DEF0' A 1...
<
< CAS OU IL N'Y A PAS D'ECHANGE EN COURS :
<
FPUSI1: EQU $
BSR AETAPE < ACCES AU MOT D'ETAT PHYSIQUE DU
< COUPLEUR DANS 'A',
SLRD NBITMO < A=0, ET B=MOT D'ETAT PHYSIQUE...
TBT NBITMO+BUSY1 < TEST DE .NOT.BUSY1 ???
JNC FPUSI3 < .NOT.BUSY1=0 : IL Y A UN DEFAUT...
TBT NBITMO+VAL1 < .NOT.BUSY1=1, TESTONS 'VAL1' ???
JNC FPUSI2 < .NOT.BUSY1=1 ET VAL1=0, OK...
<
< DEFAUT PHYSIQUE DU COUPLEUR :
< (VOIR 'VAL1' ET/OU .NOT.BUSY1)
<
FPUSI3: EQU $
SBT VNOOP < ON POSITIONNE LE BIT 'VNOOP' DANS 'A',
< INDIQUANT AINSI LA NON OPERATIONNALITE
< DU COUPLEUR...
<
< COUPLEUR OK, ET RETOUR :
<
FPUSI2: EQU $
LXI VALX1 < X INDIQUE QUE 'A' CONTIENT 'MODEFO'...
RSR
PAGE
<
<
< I N I T I A L I S A T I O N D E L ' E C H A N G E :
<
<
INITIA: EQU $ < APPEL AVEC (X)=1.
BSR AFPUSI < ACCES AU MOT D'ETAT DANS 'A',
JAE INIT8 < OK...
BR ADEFO1 < ET BIEN, IL Y A UN DEFAUT, ON VA DONC
< ABORTER L'ECHANGE...
INIT8: EQU $
<
< CAS OU L'ETAT DU COUPLEUR EST BON :
<
LA CONTOC
RBT SENS < A PRIORI...
STA CONTOC
<
< CONVERSION DES OCTETS EN MOTS :
<
RDOE
<
<
< A T T E N T I O N :
< ENTRE 'RDOE' ET 'WOE', ETANT DONNE
< QUE LE BIT 'SVCS' PEUT ETRE A 1, ON NE
< PEUT UTILISER LA PILE, SOUS PEINE D'AVOIR
< UNE VIOLATION MEMOIRE, LE (SLO,SLE)
< QUE L'ON CALCULE N'ENCADRANT QUE LE
< BUFFER !!!
<
<
STA SAVSLO < SAUVEGARDE DE (SLO,SLE) COURANTS...
STB SAVSLE < (SANS PILE !!!)
LB FONC < (B)=FONC,
STB SFONC < ET SAUVEGARDE...
LA ADMEM < (A)=ADMEM,
STA SADMEM < ET SAUVEGARDE...
SCRD DADR < (A)='SLO' BASANT LE BUFFER ARGUMENT,
LR B,Y < ET SAUVEGARDE DU FUTUR DEPLACEMENT PAR
< RAPPORT A 'SLO'...
LRM B
WORD LBUF/NOCMO+FADR-E/FADR
ADR A,B < (B)='SLE' CLOTURANT LE BUFFER ARGUMENT,
WOE < ENCADREMENT DU BUFFER ARGUMENT PAR LES
< REGISTRES (SLO,SLE).
LR Y,B
LAI K
SLLD DADR
LR A,Y < (Y)=DEPLACEMENT PAR RAPPORT A 'SLO'
< PERMETTANT D'ATTEINDRE LE PREMIER MOT
< DU BUFFER ARGUMENT.
STZ IBUF < INITIALISATION DE L'INDEX DE 'BUF'.
LA CONTOC < (A)=NOMBRE D'OCTETS ARGUMENTS A ECHANGER,
STA SCONT < ET SAUVEGARDE...
ADRI NOCMO-E,A < POUR CALCULER UN NOMBRE DE MOTS...
SLRS NOCMOK < (A)=NOMBRE DE MOTS A ECLATER...
<
< ACTIVATION EVENTUELLE DU GRAPHWARE :
<
CPI LGRAPH < (CONTOC)='LGRAPH' ???
JNE INIT4 < NON, C'EST LE FONCTIONNEMENT NORMAL...
LR A,X < (X)=NOMBRE DE MOTS A TESTER...
STY SAVY < ET SAUVEGARDE DE 'Y'...
INIT5: EQU $
LAR < (A)=MOT COURANT DU BUFFER,
CPI GRAPH0 < EST-CE UNE DEMANDE D'INITIALISATION ???
JNE INIT6 < NON...
ADRI I,Y < PEUT-ETRE, ALLONS VOIR LE MOT SUIVANT...
JDX INIT5 < S'IL EXISTE...
LRM A,B,X < AYANT TROUVE UNE DEMANDE D'ACTIVATION
< DU GRAPHWARE :
WORD IGRAPH;BUF;LGRAPH
STX CONTOC
MOVE < ON INITIALISE LE BUFFER A ENVOYER...
JMP INIT7 < ET ON VA L'ENVOYER...
<
< MODE NORMAL TRANSPARENT :
<
INIT6: EQU $
LY SAVY < ON RESTAURE 'Y',
LAI LGRAPH < ET 'A'...
INIT4: EQU $
LX LMAX < (X)=POUR VALIDER 'CONTOC',
CPR X,A < ALORS ???
JG INIT2 < (X)=LE MAX ECHANGEABLE...
LR A,X < OK, (X)=NOMBRE DE MOTS DEMANDES...
INIT2: EQU $ < (X)=MAX(CONTOC,LBUF/NOCMO)=NOMBRE
< D'ITERATIONS A EFFECTUER POUR LA
< CONVERSION DES MOTS EN OCTETS...
INIT3: EQU $ < BOUCLE DE CONVERSION : ON VA METTRE
< CHAQUE OCTET ARGUMENT DANS UN MOT DE
< 'BUF' (QUEL GACHIS...) :
STX SAVX < SAUVEGARDE DU DECOMPTE DES ITERATIONS.
< (SANS PILE !!!)
LX IBUF < (X)=INDEX COURANT DE 'BUF',
LAR < (A)=MOT COURANT DU BUFFER ARGUMENT DE
< DEPLACEMENT (Y) PAR RAPPORT A 'SLO'...
SLRD NBITOC < (A)=OCTET GAUCHE=PREMIER OCTET, ET
< (B)=SAUVEGARDE DU DEUXIEME OCTET...
EORI MOCD < ET EN PLUS, IL FAUT INVERSER...
STA &ABUF < ET ENFIN, RANGEMENT DE L'OCTET GAUCHE
< DANS 'BUF'.
ADRI I,X < PROGRESSION DE L'INDEX...
LAI K
SLLD NBITOC < (A)=OCTET DROIT,
EORI MOCD < INVERSION,
STA &ABUF < ET MISE DANS 'BUF'...
ADRI I,X < PROGRESSION DE L'INDEX,
STX IBUF < ET SAUVEGARDE...
LX SAVX < RESTAURATION DU DECOMPTE DES ITERATIONS,
ADRI I,Y < PASSAGE AU MOT SUIVANT DU BUFFER,
JDX INIT3 < S'IL EXISTE...
INIT7: EQU $
LA ABUF
RBT BINDEX
STA ADMEM < C'EST 'BUF' QU'ON VA ECHANGER...
LA FONC
ANDI NMAE
STA FONC < ET IL EST EN MEMOIRE BASSE...
LA SAVSLO
LB SAVSLE
<
<
< A T T E N T I O N :
< ON PEUT REUTILISE LA PILE
< ETANT DONNE QUE L'ON A RESTAURE
< LES REGISTRES (SLO,SLE) ARGUMENTS.
<
<
WOE < ET ENFIN, RESTAURATION DE (SLO,SLE)...
<
< TRANSMISSION DES ARGUMENTS AU CANAL :
<
LA ADPERI
ANDI FPERI
ORI FWRITE
STA ADPERI < MISE DE LA FONCTION D'ECRITURE.
BSR ASPCCN < ALLOCATION D'UN JEU DE REGISTRES CANAUX
< DANS LE CAS DU CANAL 'HDC'...
LB STATUS
SBT NBITMO+SPEC
STB STATUS < ON MEMORISE L'ALLOCATION EVENTUELLE D'UN
< JEU DE REGISTRES 'HDC'.
BSR AIPINI < ET ENVOI DE 'IPI' AU CANAL...
LA SFONC
STA FONC < RESTAURATION DE 'FONC' INITIAL,
LA SADMEM
STA ADMEM < AINSI QUE DE 'ADMEM',
LA SCONT
STA CONTOC < ET ENFIN DE 'CONTOC'...
JNC INIT1 < OK, L'INITIALISATION S'EST BIEN PASSE...
<
< CAS D'UN DEFAUT CANAL LORS DE L'INITIALISATION :
<
DEFO3: EQU $
LXI VALX3 < X=DEFAUT FONCTIONNEMENT CANAL...
RSR
<
< OK, LE LANCEMENT DE L'ECHANGE S'EST BIEN FAIT :
<
INIT1: EQU $
BSR AMASK < MASQUAGE DES INTERRUPTIONS,
LA ADPERI
ANDI FPERI
ORI FCMDE
STA ADPERI < MISE EN MODE SORTIE COMMANDE...
LAI F3
SIO ADPERI < ET LANCEMENT DE L'ECHANGE, PAR AUTORISA-
< TION DES INTERRUPTIONS NORMALES DU
< CANAL...
BSR ADMASK < DEMASQUAGE DES INTERRUPTIONS...
LA ADPERI
ANDI FPERI
STA ADPERI < ET ON CLEAR...
<
< FIN DE L'INITIALISATION DE L'ECHANGE :
<
LR Y,A
LXI VALX0 < X=ECHANGE EN COURS...
RSR
PAGE
<
<
< F O N C T I O N S P E C I A L E :
<
<
FPOS: EQU $ < APPEL AVEC : (X)=2...
LXI VALX6 < X=FIN DE FONCTION SPECIALE...
RSR
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
< D E P R O G R A M M E :
<
<
ECHDP: EQU $ < APPEL AVEC : (X)=3...
BSR AFPUSI < RENVOIE :
< A=MOT D'ETAT 'PU',
< B=MOT D'ETAT REEL,
< X=VALX1.
PSR A < SAVE LE MOT D'ETAT 'PU'...
LA ADPERI
ANDI FPERI
ORI FCMDE
STA ADPERI < MISE EN MODE SORTIE FONCTION,
LAI F0
SIO ADPERI < ET ON INHIBE LES INTERRUPTIONS OUT...
LA ADPERI
ANDI FPERI
ORI FFONC
STA ADPERI < MISE EN MODE SORTIE COMMANDE,
LAI F0
SIO ADPERI < ON ENVOIE UNE SIO DE FIN DE BLOC, QUI
< A POUR EFFET (APRES LECTURE DU MOT
< D'ETAT' D'INHIBER LES INTERRUPTIONS
< NORMALE DU CANAL...
LA ADPERI
ANDI FPERI
STA ADPERI < ET ON CLEAR...
PLR A < RESTAURE LE MOT D'ETAT 'PU'...
JAE ECHDP1 < OK, TOUT S'EST BIEN PASSE...
<
< CAS DES DEFAUTS RENCONTRES EN FIN D'ECHANGE :
<
BSR AIPLIB < LIBERATION DU CANAL,
JC DEFO3 < ET ENCORE UN, AU NIVEAU DU CANAL...
DEFO1: EQU $
LB STATUS
SBT NBITMO+BITDEF
STB STATUS < ON LE MEMORISE DANS 'STATUS'...
LR A,Y
JMP FKILL1 < ET ON ABORTE...
<
< TRAITEMENT DE LA FIN D'ECHANGE :
<
ECHDP1: EQU $
LXI VALX6 < X=INDICATION DE FIN D'ECHANGE...
BSR AIPLIB < ET ENFIN, ON FAIT LE COMPTE-RENDU...
JC DEFO3 < ET BIEN, IL Y A U DEFAUT CANAL !!!
CPZ CONTOC < OK, COMMENT EST LE COMPTE DE MOTS
< RESIDUEL ???
JNE DEFO3 < NON NUL, C'EST DONC UN DEFAUT CANAL...
JMP LIBCTX < OK, ON VA LIBERER LE CANAL...
PAGE
<
<
< I N I T I A L I S A T I O N D E L ' U N I T E
< P H Y S I Q U E :
<
<
FCLEAR: EQU $ < APPEL AVEC : (X)=4.
BSR AMASK < MASQUAGE DES INTERRUPTIONS.
BSR AINTUP < INITIALISATION DE LA 'TUP' :
< SEMATT <-- 1,
< SUPATT <-- 1,
< SEMGEN <-- 1.
BSR ADMASK < DEMASQUAGE DES INTERRUPTIONS.
RSR
PAGE
<
<
< A B O R T D ' U N E C H A N G E :
<
<
FKILL: EQU $ < APPEL AVEC : (X)=5.
LXI VALX2 < RETOUR AVEC : X=DEFAUT COUPLEUR...
FKILL1: EQU $
LR Y,A
RSR
PAGE
<
<
< L I B E R A T I O N D U C A N A L :
<
<
LIBCTX: EQU $
LB STATUS
TBT NBITMO+SPEC < Y-A-T'IL EU INITIALISATION ???
JNC LIBCTY < NON, RIEN A FAIRE...
RBT NBITMO+SPEC < OUI,
STB STATUS
BSR ALIBCN < ON LIBERE...
LIBCTY: EQU $
RSR
END
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.