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