PROG
         IDP         "SIMULATEUR BOS SUR CMS"
         IDP         "JOHN F. COLONNA - LIONEL BAIZE"
         IDP         "03 NOVEMBRE 1981"
         ENT         DRVLP
         ENT         DRVCR
         ENT         DRVMT
         ENT         DRVDP
         ENT         DRVTTY
         ENT         DRVGPI
         ENT         LOCLP
         ENT         LOCCR
         ENT         LOCMT
         ENT         LOCDP
         ENT         LOCTTY
         ENT         LOCGPI
         ENT         ECHLP
         ENT         ECHCR
         ENT         ECHMT
         ENT         ECHDP
         ENT         ECHTTY
         ENT         ECHGPI
         PAGE
<
<
<        C O N S T A N T E S  :
<
<
I:       VAL         1
EOT:     VAL         '04             < CODE DE LA FIN DE MESSAGE.
VAR:     VAL         " "             < CARACTERE VARIABLE DE "!ASSIGN".
EGAL:    VAL         "="
SAVE:    VAL         "S"             < POUR DESASSIGNER...
LCARTE:  VAL         80              < LONGUEUR D'UNE CARTE.
SLO16:   VAL         4               < POUR CONVERTIR LES SLO EN ADRESSES DE
                                     < MOTS...
NOCMO:   VAL         2               < NOMBRE D'OCTETS PAR MOT.
NBITMO:  VAL         16              < NOMBRE DE BITS PAR MOT.
MOCG:    VAL         'FF00           < OCTET GAUCHE,
MOCD:    VAL         '00FF           < ET OCTET DROIT.
DNOCMO:  VAL         1               < CONVERSION OCTETS --> MOTS.
BITSIG:  VAL         0               < BIT DE SIGNE.
ETAOPE:  VAL         15              < PERIPHERIQUE OPERATIONNEL.
NTS:     VAL         128             < NOMBRE DE TACHES SOFTWARES...
DECAL:   VAL         256             < POUR DECALER DE 8...
         PAGE
<
<
<        F O R M A T   D E   L A   ' C D A G '  :
<
<
         DSEC
CDA:     EQU         $
VCDA:    WORD        0               < VERROU D'ACCES A LA 'CDAG' DESTINE
                                     < A BOS :
                                     < 0 : 'CDAG' LIBRE,
                                     < 1 : 'CDAG' OCCUPEE.
IOCB:    BYTE        0;0             < IOCB D'ECHANGE (FONCTION,PERIPHERIQUE).
MFIOCB:  VAL         MOCG            < FONCTION BOS,
MPIOCB:  VAL         MOCD            < PERIPHERIQUE BOS.
IOCB1:   VAL         $-IOCB
IOCB2:   VAL         IOCB1+I
IOCB3:   VAL         IOCB2+I
IOCB4:   VAL         IOCB3+I
IOCB5:   VAL         IOCB4+I
IOCB6:   VAL         IOCB5+I
LIOCB:   VAL         IOCB6           < LONGUEUR DU CORPS DE L'IOCB...
         DZS         LIOCB
LIOCB:   VAL         $-IOCB          < ??!?!?!
BIOCBS:  VAL         8
MFU:     VAL         '7F
MFON:    VAL         'FF00
FU1:     VAL         '0D             < PREMIERE 'FUDK',
FU2:     VAL         '39             < DERNIERE 'FUDK'...
FU3:     VAL         '15             < PREMIERE 'FU' LIBRE,
FU4:     VAL         '23             < DERNIERE 'FU' LIBRE.
NFUTTY:  VAL         '03             < FU DU 'TTY'...
SCDA:    WORD        0               < MOT DE SYNCHRONISATION CMS--> BOS :
                                     < 0 : OPERATION EN COURS,
                                     < 1 : OPERATION ACHEVEE.
LBUF:    VAL         4*1024
BUFCDA:  DZS         LBUF            < BUFFER D'ECHANGE BOS<-->CMS...
XVCDA:   VAL         VCDA-CDA        < POUR ATTEINDRE 'VCDA',
XSCDA:   VAL         SCDA-CDA        < 'SCDA',
XIOCB:   VAL         IOCB-CDA        < ET 'IOCB'...
         PAGE
<
<
<        P E R I P H E R I E   B O S  :
<
<
FUTTY:   VAL         '0203
FUCR:    VAL         '0707
FULP:    VAL         '0808
FUMT:    VAL         '0909
FUDK:    VAL         FU1*DECAL+FU2
FUGPI:   VAL         FU3+1*DECAL+FU3+1
<
<
<        F O N C T I O N S   B O S  :
<
<
RWDU:    VAL         '47             < REMBOBINAGE+LOCAL MT,
RWD:     VAL         '48             < REMBOBINAGE MT,
WEOF:    VAL         '49             < ECRITURE TAPE-MARK MT,
WGAP:    VAL         '4A             < EFFACEMENT MT,
BSRCD:   VAL         '4B             < SAUT ARRIERE 1 ENREGISTREMENT MT,
FSRCE:   VAL         '4C             < SAUT AVANT 1 ENREGISTREMENT MT,
BSFILE:  VAL         '4D             < SAUT ARRIERE TAPE-MARK MT,
FSFILE:  VAL         '4E             < SAUT AVANT TAPE-MARK MT,
BSRCDN:  VAL         '4F             < SAUT ARRIERE N ENREGISTREMENTS MT,
FSRCDN:  VAL         '50             < SAUT AVANT N ENREGISTREMENTS MT.
TRL:     VAL         '41             < PERFORATION AVANCE BANDE TTY,
FDP:     VAL         '43             < RECUPERATION DES DEFAUTS TTY,
POFF:    VAL         '47             < HORS-TENSION LECTEUR DE CARTES.
PGPH:    VAL         '40             < SAUT DE PARAGRAPHE LP,
PAGE:    VAL         '42             < SAUT DE PAGE LP.
ROU:     VAL         '50             < READ ONLY UNIT DK,
RWU:     VAL         '51             < READ AND WRITE UNIT DK,
MVHD:    VAL         '52             < MOUVEMENT DES TESTES DK.
FOUT:    VAL         '20             < SORTIE,
FOUTTY:  VAL         '22             < SORTIE SUR 'TTY',
FIN:     VAL         '00             < ENTREE.
FOUTDK:  VAL         '30             < SORTIE SUR 'DKM',
FINDK:   VAL         '10             < ENTREE SUR 'DKM'.
BCODAR:  VAL         1               < BIT D'ENTREE SUR CODE D'ARRET.
BFONSP:  VAL         0               < BIT 'FONCTION SPECIALE' (SI =0).
         PAGE
<
<
<        T U P   E T E N D U E  :
<
<
         DSEC        TUP
OPEBCC:  WORD        0
OPBCC:   WORD        0
PERIAD:  WORD        0
ASPPTY:  WORD        0
ABCC:    WORD        0
MANOV:   WORD        0
BCCCAL:  WORD        0
RH:      EQU         BCCCAL
RL:      WORD        0
CHAR:    WORD        0
ERREUR:  WORD        0
SEMFSP:  WORD        0
FSTCAR:  EQU         SEMFSP
CTRCAR:  WORD        0
RELAI1:  WORD        0
RELAI:   WORD        0
CODSYN:  WORD        0
ETAT:    WORD        0
MASQUE:  WORD        0
ATABEV:  WORD        0
INDICA:  WORD        0
IDLENB:  WORD        0
CHNTUP:  WORD        0
<
<
<        T U P   S T A N D A R D  :
<
<
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,
BCDA:    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         $
         EXT         TBS
         WORD        0
ATBS:    WORD        TBS,X           < POUR LA CORRESPONDANCE SU --> FU.
         WORD        0
         EXT         TBF
ATBF:    WORD        TBF-1,X         < RELAI VERS LA LISTE DES 'FU'...
         EXT         TBCOM
ATBCOM:  WORD        TBCOM-1,X       < POUR LES TRANSLATIONS D'ADRESSES DK.
         DZS         3+1+10
         EXT         TBADK
ATBADK:  WORD        TBADK,X         < IDEM...
         WORD        0
NFUDK:   WORD        0               < NOMBRE DE FU DK...
         DZS         4
ASPST:   WORD        SPST
AVERIF:  WORD        VERIFA
         DZS         12
ALAMEM:  WORD        LAMEM
ASTAME:  WORD        STAMEM
         DZS         16
AOCFON:  WORD        OCFON
ALIBCN:  WORD        LIBCN
         WORD        0
MASKES:  WORD        0
         DZS         3
ASPLD:   WORD        SPLD
AINTUP:  WORD        INITUP
         DZS         3
ASPWT:   WORD        SPWAIT
ASPLAR:  WORD        SPLAR
ASPSTA:  WORD        SPSTAR
         DZS         19
ASPEC:   WORD        SPECAR
ASPEE:   WORD        SPEE
ASPSC:   WORD        SPSC
ASPSF:   WORD        SPSF
         DZS         3
ASPLIN:  WORD        SPLIN
ASPSTI:  WORD        SPSTIN
         PAGE
<
<
<        L O C A L   D U   D R I V E R   R E E N T R A N T  :
<
<
         LOCAL
LOC:     EQU         $
LOCMT:   EQU         $
LOCCR:   EQU         $
LOCLP:   EQU         $
LOCDP:   EQU         $
LOCTTY:  EQU         $
LOCGPI:  EQU         $
LXCDA:   VAL         BUFCDA-CDA      < LONGUEUR DE L'EN-TETE DE 'CDA'.
XCDA:    DZS         LXCDA           < EN-TETE DE LA 'CDA'.
AXCDA:   WORD        XCDA            < ADRESSE DE L'EN-TETE DE 'CDA' DANS LE
                                     < LOCAL.
AAIGUI:  WORD        AIGUIL,X        < RELAI D'ACCES VERS LES MODULES DU
                                     < DRIVER REENTRANT.
AIGUIL:  WORD        APUSI;INIECH;FONCSP;DFOSYN;ACLEAR;AKILL
TBADK1:  WORD        0               < POUR LES EXTENSIONS D'ADRESSE SUR 'DKU'.
ADMEMA:  WORD        0               < ADRESSE ABSOLUE DU BUFFER...
TRANS:   WORD        0               < TRANSLATION DE LA 'CDA'...
<
< ZONE DE PATCH :
<
         DZS         16
         PAGE
<
<
<        D R I V E R   R E E N T R A N T   D E   S I M U L A T I O N
<        D E   B O S   S U R   C M S   L E   F A B U L E U X  :
<
<
<        NOTA :
<                    BOS=BANCALE OPERATING SYSTEM,
<                       =BOSSU OPERATING SYSTEM,
<                       =BOITEUX OPERATING SYSTEM,
<                    CMS=COLONNA MONITEUR SUPER,
<                       =COLONNA MONITOR SUPERBE,
<                       =COLONNA MONITOR SYMPHONIQUE...
<
<
<        FONCTION :
<                      CE DRIVER REENTRANT SIMULE LES
<                    PERIPHERIQUES 'TTY', 'CR', 'LP', 'MT'
<                    ET 'DP'. A CETTE FIN, TOUTES LES
<                    DEMANDES D'ENTREES-SORTIES SUR 'BOS'
<                    SONT TRANSMISES VIA LA 'CDA' A
<                    'CMS' ; LA 'CDA' POSSEDE BIEN
<                    ENTENDU UNE EN-TETE ASSURANT D'UNE
<                    PAR LA SYNCHRONISATION ET LE
<                    TRANSFERT DES ARGUMENTS ET D'AUTRE
<                    PART UN BUFFER.
<                      POUR SIMPLIFIER LES CHOSES, CE
<                    DRIVER LORSQU'IL PREND LA MAIN
<                    POUR L'UN QUELCONQUE DES PERIPHERIQUES
<                    MASQUE LES INTERRUPTIONS, ET ATTEND
<                    UN SIGNAL DE FIN D'OPERATION DE 'CMS'
<                    POUR RENDRE LA MAIN A 'IOCS'...
<
<
         PROG
         USE         L,LOC
         USE         C,COMMUN+128
         USE         W,STATUS
DRVLP:   EQU         $
DRVCR:   EQU         $
DRVMT:   EQU         $
DRVDP:   EQU         $
DRVTTY:  EQU         $
DRVGPI:  EQU         $
         BR          &AAIGUI         < VERS LE MODULE SPECIFIQUE (X)...
<
<
<        P O U R   L E   M O D E   P R O G R A M M E  :
<
<
ECHLP:   EQU         $
ECHCR:   EQU         $
ECHMT:   EQU         $
ECHDP:   EQU         $
ECHTTY:  EQU         $
ECHGPI:  EQU         $
         JMP         $               < PARCQU'ON NE DOIT JAMAIS Y PASSER !!!
         RSR
<
<
<        P U S I   ( X = 0 )  :
<
<
APUSI:   EQU         $
         LAI         0
         SBT         ETAOPE
         RSR                         < TOUT EST OK...
<
<
<        K I L L   ( X = 5 )  :
<
<
AKILL:   EQU         $
         LXI         2
         RSR
<
<
<        I T   E X C E P T I O N   ( X = 3 )  :
<
<
DFOSYN:  EQU         $
         JMP         $               < ON NE PEUT JAMAIS Y PASSER !!!
         RSR
<
<
<        P O S I T I O N N E M E N T   ( X = 2 )  :
<
<
FONCSP:  EQU         $
         JMP         INIECH          < ET OUI, EXECUTION DES POSITIONNEMNTS.#.
         RSR
<
<
<        C L E A R   ( X = 4 )  :
<
<
ACLEAR:  EQU         $
         BSR         AINTUP
         RSR
         PAGE
<
<
<        I N I T I A L I S A T I O N   E C H A N G E
<                    E T   E C H A N G E   ( X = 1 )  :
<
<
<        ARGUMENT :
<                    W=ADRESSE DE LA 'TUP' STANDARD.
<
<
         DZS         64              < ZONE DE PATCH...
INIECH:  EQU         $
<
< TRUANDAGE POUR 'TTYS' :
<
         LA          STATUS
         SBT         CNL
         STA         STATUS          < TOUS LE PERIPHERIQUES UTILISANT LE SIMU-
                                     < LATEUR SONT CONSIDERES COMME FONCTIONNANT
                                     < EN MODE CANAL...
<
< MISE DE L'ADRESSE ABSOLUE DE 'IOCB' DANS 'Y' :
<
         LA          TYPECH          < TESTONS VOIR S'IL FAUT TRANSLATER
                                     < L'ADRESSE DE 'IOCB' (C'EST VRAIMENT LE
                                     < B..., DONC 'BOS' VEUT DIRE AUSSI
                                     < BORDELIQUE OPERATING SYSTEM).
         TBT         SPOOL1
         JC          ECH5            < UTILISATION DU POOL BUFFER ==> PAS
                                     < DE TRANSLATION D'ADRESSE...
         TBT         TCARRY
         JC          ECH5            < NON...
         TBT         TSVCS
         JNC         ECH5            < NON...
ECH9:    EQU         $               < TRANSLATION DE L'ADRESSE 'IOCB' :
         RDOE
         SLLS        SLO16
         ADR         A,Y             < Y=ADRESSE ABSOLUE DE 'IOCB'...
ECH5:    EQU         $
<
< MISE EN PLACE A PRIORI DES RELAIS DE 'CDA' :
<
         PSR         W
         LRM         A,B,W
         WORD        '1000           < DEBUT DE LA 'CDA' EN '64K',
         WORD        '17FF           < ET FIN EN '96K'...
         WORD        '18             < ADRESSE DEBANALISEE DE L'ADRESSE 'CDA'.
         STA         0,W             < DEFINITION
         STB         1,W             < DE LA 'CDA'.
         PLR         W
<
< IDENTIFICATION DU SYSTEME :
<
         RDSI
         ANDI        '1F             < A=NUMERO DU PROCESSEUR...
         SLLS        14              < PAS TRES JOLI...
                                     < EN FAIT :
                                     < 14 C'EST 32/2*1024=0...
         STA         TRANS           < POUR TRANSLATER LA 'CDAG'...
<
< VALIDATION PREALABLE DE LA 'CDA' :
<
         LAI         CDA-CDA
         AD          TRANS           < TRANSLATION DE LA 'CDA'...
         LB          AXCDA
         LXI         LXCDA
         RCDA
                                     < ACCES A L'EN-TETE COURANTE DE 'CDA' :
         CPZ         XCDA+XVCDA      < ALORS SYNCHRO VALIDE ???
         JG          $               < NON...
         STZ         XCDA+XSCDA      < OUI, ON INITIALISE
         STZ         XCDA+XVCDA      < LES
         IC          XCDA+XVCDA      < VERROUS DE SYNCHRONISATION...
<
< RECUPERATION DE 'IOCB' :
<
         LAD         XCDA+XIOCB
         LR          A,B             < B=ADRESSE 'IOCB' DANS LE LOCAL,
         LR          Y,A             < A=ADRESSE ABSOLUE DE 'IOCB',
         LXI         LIOCB           < X=LONGUEUR 'IOCB',
         MOVE                        < RECUPERATION DE 'IOCB' DANS LE LOCAL...
         LA          XCDA+XIOCB      < ACCES AU MOT DE FONCTION :
         TBT         BIOCBS          < DISCRIMINATION SU/FU...
         ANDI        MFU             < A=SU/FU,
         LR          A,X             < X=SU/FU,
         JNC         ECH4            < X=UN NUMERO DE 'FU'...
         LBY         &ATBS           < CONVERSION SU-->FU,
         LR          A,X             < X=NUMERO DE 'FU' ASSOCIE A LA 'SU'.
         LA          XCDA+XIOCB
         ANDI        MFON            < A=FONCTION DEMANDEE,
         ORR         X,A             < CONCATENATION DU NUMERO DE 'FU',
         STA         XCDA+XIOCB      < ET MISE A JOUR 'IOCB'...
ECH4:    EQU         $
<
< TRANSLATION DES ADRESSES DISQUES POUR LES 'FUDK' :
<
         LR          X,A             < A=NUMERO DE 'FU' :
         CPI         FU3             < EST-CE UNE 'FU' LIBRE ???
         JL          ECH20           < NON...
         CPI         FU4             < EST-CE UNE 'FU' LIBRE ???
         JLE         ECH6            < OUI, DONC PAS UNE 'FUDK'...
ECH20:   EQU         $
         CPI         FU1             < EST-CE UNE 'FUDK' ???
         JL          ECH6            < NON...
         CPI         FU2             < EST-CE UNE 'FUDK' ???
         JG          ECH6            < NON...
         LA          &ATBCOM
         ANDI        MOCD
         LR          A,X             < X=NUMERO DU DISQUE SUPPORTANT 'FUDK',
         LA          ATBADK
         AD          NFUDK
         STA         TBADK1          < GENERATION SYSTEMATIQUE DE CE REALI,
                                     < MERCI LA 'SEMS'...
         LA          XCDA+XIOCB+IOCB5  < A=POIDS FAIBLE DE L'ADRESSE,
         AD          &ATBADK           < TRANSLATION,
         STA         XCDA+XIOCB+IOCB5
         LA          XCDA+XIOCB+IOCB6  < A=POIDS FORT,
         ADCR        A                 < PROPAGATION DE LA RETENUE,
         AD          &TBADK1           < TRANSLATION,
         STA         XCDA+XIOCB+IOCB6
         JANE        $               < ON REFUSE LES GRANDES ADRESSES !!!
ECH6:    EQU         $
<
< TRANSLATION DE L'ADRESSE DU BUFFER :
<
         LA          FONC
         ANDI        MAE             < (A)=EXTENSION D'ADRESSE :
         JANE        $               < MERDE ALORS, ON EST AU-DELA DE 64K, IL
                                     < FAUT DONC MODIFIER LA LECTURE/ECRITURE
                                     < DU BUFFER ARGUMENT DANS LA 'CDA', EN
                                     < PASSANT PAR LA MEMOIRE BASSE...
         LA          ADMEM
         STA         ADMEMA          < A PRIORI...
         LA          STATUS
         TBT         CNL             < MODE CANAL OU PROGRAMME ???
         JC          ECH7            < MODE CANAL, ON NE TRANSLATE PAS...
         RDOE
         SLLS        SLO16           < A=SLO EN MOTS...
         AD          ADMEMA          < MODE PROGRAMME,
         STA         ADMEMA          < ON TRANSLATE...
ECH7:    EQU         $
<
< DEPLACEMENT DU BUFFER SI ECRITURE :
<
         LA          CONTOC
         JAGE        ECH1            < LECTURE...
         RBT         BITSIG
         ADRI        NOCMO-1,A
         SLRS        DNOCMO
         LR          A,X             < X=NOMBRE DE MOTS CONCERNES...
         LAI         BUFCDA-CDA      < A=ADRESSE DU BUFFER DANS LA 'CDA',
         AD          TRANS           < TRANSLATION DE LA 'CDA'...
         LB          ADMEMA          < B=ADRESSE ABSOLUE DU BUFFER,
         WCDA
                                     < SIMULATION DE L'ECRITURE...
ECH1:    EQU         $
<
< ENVOI DE LA DEMANDE DE SIMULATION A 'CMS' :
<
         LAI         CDA-CDA
         AD          TRANS           < TRANSLATION DE LA 'CDA'...
         LB          AXCDA
         LXI         LXCDA
         WCDA
                                     < ON ENVOIE A 'CMS' LA DEMANDE D'E/S
                                     < A SIMULER...
<
< ATTENTE DE FIN DE SIMULATION :
<
ECH2:    EQU         $
         LXI         LXCDA
         RCDA
         CPZ         XCDA+XVCDA      < ALORS EST-CE FINI ???
         JE          $               < ???!??!?!
         JG          ECH2            < NON, ON ATTEND...
         LA          XCDA+XSCDA      < L'INFORMATION EST-ELLE INTEGRE ???
         JAE         ECH2            < NON, ON ATTEND...
         JAG         ECH10           < CAS NORMAL...
<
< CAS DES BREAKS :
<
         PSR         Y,W
         LYI         COUP4           < 4 BREAKS A PRIORI...
         CPI         -4
         JE          ECH8            < OUI...
         LYI         COUP1           < NON, 1 COUP...
         CPI         -1
         JNE         $               < ?!?!?!
ECH8:    EQU         $
         LXI         NFUTTY
         LA          &ATBF
         LR          A,W             < W=ADRESSE DE LA FU TTY...
         LA          MODEFO
         LR          Y,X
         SBT         0,X             < MISE DE 1/4 COUPS...
         STA         MODEFO
         LR          Y,A
         CPI         COUP4
         JNE         ECH11
         ACTD        4               < CAS DES 4 COUPS (ET NON PAS DES 3 COUPS).
ECH11:   EQU         $
         PLR         Y,W
ECH10:   EQU         $
<
< DEPLACEMENT DU BUFFER SI LECTURE :
<
         LA          CONTOC
         JALE        ECH3            < C'ETAIT UNE ECRITURE...
         ADRI        NOCMO-1,A
         SLRS        DNOCMO
         LR          A,X             < X=NOMBRE DE MOTS A DEPLACER,
         LAI         BUFCDA-CDA      < A=ADRESSE RELATIVE A 'CDA' DU BUFFER,
         AD          TRANS           < TRANSLATION DE LA 'CDA'...
         LB          ADMEMA          < B=ADRESSE ABSOLUE DU BUFFER...
         RCDA
                                     < SIMULATION DE LA LECTURE...
<
< COMPTE-RENDU DE L'ECHANGE :
<
ECH3:    EQU         $
         XR          Y,W             < W=ADRESSE ABSOLUE DE 'IOCB'...
         LX          IOCB2,W
         XR          Y,W
         STZ         CONTOC
         XR          Y,W
         STZ         IOCB4,W
         IC          IOCB4,W         < IOCB4=SEMAPHORE DE FIN D'E/S...
         XR          Y,W
<
< FIN DE LA SIMULATION :
<
         LXI         6               < 'IOCS' N'A RIEN A FAIRE...
         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.