NMPROC:  VAL         "TN"            < NOM SDU PROCESSEUR.
         IDP         "SIMULATEUR DE TABLEAU NOIR - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU PROCESSEUR.
         WORD        0
PIMAGE:  EQU         $
         LRP         L               < A NOTER : P='12 !!!
         BR          -2,L            < ENTRE DANS LE PROCESSEUR 'TN'.
         PAGE
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI  < ADRESSE ITEM1
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI < ADRESSE ITEM2
         PAGE
         EOT         #SIP IMAGE 256#
NOM:     EQU         ZERO+PILE+5-LNOM-2 < NOM DE L'IMAGE VIDEO
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO PROPREMENT DITE
RECORD:  EQU         IMAG+LIMAG      < IMAGE VIDEO DYNAMIQUE.
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20:     VAL         1024/DY         < NBRE DE LIGNES/IMAGE.
X21:     VAL         CNMPL*16        < NBRE DE POINTS/LIGNE.
         IF          X20-X21,,X100,
         IF          ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100:    VAL         0
         PAGE
<
<
<        L O C A L  :
<
<
         IF          ORDI-"T",XWOR%,,XWOR%
LG:      VAL         3*16            < LONGUEUR MOTS DES GRILLES.
A:       VAL         '9249
B:       VAL         '2492
C:       VAL         '4924
<
< TABLES DE COULEUR :
<
GR:      WORD        A;B;C;A;B;C;A;B;C;A;B;C;A;B;C;A
GV:      WORD        C;A;B;C;A;B;C;A;B;C;A;B;C;A;B;C
GB:      WORD        B;C;A;B;C;A;B;C;A;B;C;A;B;C;A;B
         WORD        A;B;C;A;B;C;A;B;C;A;B;C;A;B;C;A
         WORD        C;A;B;C;A;B;C;A;B;C;A;B;C;A;B;C
G:       DZS         LG
NG:      DZS         LG
XWOR%:   VAL         0
         LOCAL
LOC:     EQU         $
<
< MESSAGES ET BUFFERS :
<
MINT:    BYTE        2;'6D
         ASCI        "> "
REP:     WORD        0
MERR:    BYTE        3;'6D
         ASCI        "??"
M1:      BYTE        19;'6D
         ASCI        "ALT-MODE IMMEDIAT!"
M2:      BYTE        18;'6D
         ASCI        "ALT-MODE DIFFERE! "
M3:      BYTE        3;" "
         ASCI        "ON"
<
< DEMANDES A CMS4 :
<
DEMMEM:  WORD        '0004           < DEMANDE D'ALOCATION 8K MOTS.
RELMEM:  WORD        '0004           < DEMANDE DE RETOUR A 4K MOTS.
         WORD        '6000           < ALLOCATION 12K MOTS.
         WORD        '2000
DEMCCI:  WORD        '0001           < APPEL DU CCI.
DEMSGN:  WORD        '0402           < DEMANDE D'ACCES AU SGN OVERLAY.
         WORD        BRANCH-ZERO*2   < @OCTET DE LA BRANCHE.
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMOUT:  WORD        '0202           < SORTIE D'UN MESSAGE.
         WORD        MINT-ZERO*2
         WORD        2
DEMIN:   WORD        '0101           < ENTREE SUR LE TERMINAL.
         WORD        REP-ZERO*2
         WORD        1
         IF          ORDI-"S",XWOR%,,XWOR%
NBTVIN:  VAL         TVIN=0
NBTVIN:  VAL         15-NBTVIN
STABIL:  WORD        '8A01           < DEMANDE DIFFUSION IMAGE STATIQUE.
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
         WORD        TVPV            < SUR LE VERT A PRIORI.
INIMAG:  WORD        '8A01           < DEMANDE LECTURE IMAGE DYNAMIQUE.
         WORD        RECORD-ZERO*2
         WORD        LIMAG*2
         WORD        TVPV+TVIN       < SUR LE VERT A PRIORI.
XWOR%:   VAL         0
<
< RELAIS DIVERS :
<
AIMAG1:  WORD        IMAG-1,X        < ACCES A L'IMAGE STATIQUE.
AIMAG2:  WORD        RECORD-1,X      < ACCES A L'IMAGE DYNAMIQUE.
AIMA1:   WORD        IMAG            < @IMAGE STATIQUE.
AIMA2:   WORD        RECORD          < @IMAGE DYNAMIQUE A PRIORI.
ANOM:    WORD        NOM             < ACCES AU 1ER MOT DU NOM DE
                                     < L'IMAGE STATIQUE (IMAGE 1).
AI2:     WORD        ITEM2-1,X       < ACCES A L'EN-TETE ITEM2.
AOP:     WORD        OP              < INSTRUCTION VARIABLE OR/AND/EOR.
AOPI:    WORD        OPI             < INSTRUCTION VARIABLE ID. A
                                     < AOP, MAIS UTILISEE LORS DES
                                     < OPERATIONS SOUS ALT-MODES
                                     < IMMEDIATS.
         IF          ORDI-"T",XWOR%,,XWOR%
AOP2:    WORD        OP2             < IDEM DANS LE CAS ALT-MODES
XWOR%:   VAL         0
                                     < IMMEDIATS ET COULEUR.
AOVL:    WORD        OVL             < ROUTINE DE CHARGEMENT OVERLAYS.
AGOGE:   WORD        GOGE            < RETOUR A 'GE'.
         IF          ORDI-"T",XWOR%,,XWOR%
ASP1:    WORD        SP1             < ROUTINE MAITRE ENREGISTREMENT TV.
ASP2:    WORD        SP2             < ROUTINE MAITRE DIFFUSION TV.
ASP3:    WORD        SP3             < STABILISATION IMAGE VIDEO.
AWAIT:   WORD        WAIT            < ATTENTE DE CHANGEMENT DE TRAME.
ATIMAG:  WORD        TIMAG
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
ADIF:    WORD        DIFFUS          < DIFFUSION D'UNE IMAGE STATIQUE.
ADIF3:   WORD        DIFF3           < DIFFUSION DES 3 IMAGES.
AENR:    WORD        ENREG           < LECTURE UNE IMAGE DYNAMIQUE.
XWOR%:   VAL         0
APRINT:  WORD        PRINT           < EMISSION D'UN MESSAGE.
ABACK1:  WORD        TABLO2          < 1ER RETOUR ALT-MODE,
ABACK2:  WORD        BACK2           < 2EME RETOUR ALT-MODE,
AINTER:  WORD        INTER           < ADRESSE D'INTERROGATION.
<
< CONSTANTES ET INDICATEURS :
<
NGE:     WORD        "GE"            < NOM DE L'OVERLAY 'GE'.
ACNSYS:  ASCI        ":SYS"          < ACN DU SYSTEME.
NMOTS:   WORD        2*LTNI          < LONGUEUR TOTALE DES 2 ITEMS.
ALIMAG:  WORD        LIMAG           < LONGUEUR MOTS DE L'IMAGE VIDEO.
KIN:     WORD        -1              < COMPTEUR DES ENTRIES DANS 'TN'.
         IF          ORDI-"T",XWOR%,,XWOR%
WAITR:   WORD        10000           < NBRE DE 'JDX $' A EFFECTUER POUR
                                     < TEMPORISER LE RECORD VIDEO.
XWOR%:   VAL         0
NITER:   WORD        1               < A PIORI UNE SEULE ITERATION.
XNITER:  WORD        0               < DECOMPTEUR INITIALISE PAR
                                     < NITER; ON N'UTILISE PAS X
                                     < AFIN DE NE PAS UTILISER LA
                                     < PILE POUR SIMPLIFIER LE
                                     < TRAITEMENT DES ALT-MODES...
SNITER:  WORD        0               < SAVE XNITER.
KMAJ:    WORD        0               < COMPTEUR UTILISE POUR SAVOIR
                                     < A PEU PRES OU APPARAIT UN
                                     < ALT-MODE ISOLE...
SAVE:    WORD        0               < POUR SAUVEGARDER LE CONTENU
                                     < DE A POUR ASSURER UNE REPRISE
                                     < CORRECTE LORS DES ALT-MODES.
XSAVE:   WORD        0               < SAVE LE CONTENU DE X.
         IF          ORDI-"T",XWOR%,,XWOR%
YSAVE:   WORD        0               < SAVE DU REGISTRE Y.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
NBCOMP:  DZS         1               < NOMBRE DE COMPOSANTES A ENTRER.
XWOR%:   VAL         0
ALTM:    WORD        0               < POUR SAVOIR SI UN ALT-MODE
                                     < DOIT ETRE PRIS EN COMPTE
                                     < A LA FIN D'UNE BOUCLE DE
                                     < TRAITEMENT.
IALTM:   WORD        1               < 1 : ALT-MODES PRIS EN COMPTE
                                     <     IMMEDIATEMENT,
                                     < 0 : ALT-MODES DIFFERES JUSQU'
                                     <     A LA FIN DU TRAITEMENT
                                     <     D'UNE TRAME ENTIERE;
                                     < IALTM EST MIS A 0 LORS DE
                                     < L'ENTRY DANS LE PROGRAMME.
MASKI:   WORD        0               < MASQUE D'INVERSION VIDEO (0/-1).
<
< CONSTANTES DE COULEUR :
<
         IF          ORDI-"T",XWOR%,,XWOR%
WORK1:   WORD        0               < VARIABLE DE TRAVAIL.
WORK2:   WORD        0               < VARIABLE DE TRAVAIL.
ICOL:    WORD        0               < 0: NOIR ET BLANC.
MOT0:    WORD        '8880           < MOT DE COULEUR.
IGR:     WORD        0               < 0 : GR ABSENTE.
IGV:     WORD        0               < 0 : GV ABSENTE.
IGB:     WORD        0               < 0 : GB ABSENTE.
AGR:     WORD        GR+LG,X         < ACCES A GR.
AGV:     WORD        GV+LG,X         < ACCES A GV.
AGB:     WORD        GB+LG,X         < ACCES A GB.
AG:      WORD        G+LG,X          < ACCES GRILLE GLOBAL G.
ANG:     WORD        NG+LG,X         < ACCES A .NOT.G.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
COL2:    EQU         $-1             < IMPORTANT : LES INDIC. DOIVENT SE
                                     < SUIVRE OBLIGATOIREMENT !!!!!!!!!!
IRO:     WORD        0               < ENTREE ROUGE ABSENTE.
IVO:     WORD        1               < SORTIE VERTE PRESENTE.
IBO:     WORD        0               < SORTIE BLEUE ABSENTE.
COL1:    DZS         1               < TRES IMPORTANT !!!!!!1!!!!!!!
IRI:     WORD        0               < ENTREE ROUGE ABSENTE.
IVI:     WORD        1               < ENTREE VERTE PRESENTE.
IBI:     WORD        0               < ENTREE BLEUE ABSENTE.
ICOL1:   WORD        COL1,X
ICOL2:   WORD        COL2,X
XWOR%:   VAL         0
<
< PILES DE TRAVAIL :
<
APILE:   WORD        PILE-1          < PILE DE SMC (RETOUR A 'GE').
STACK:   DZS         10              < PILE TEMPORAIRE DE TRAVAIL.
         PAGE
         PROG
         IF          ORDI-"T",XWOR%,,XWOR%
         EOT         #SIP SP1#
         EOT         #SIP SP3#
         EOT         #SIP SP2#
<
<
<        A T T E N T E   C H A N G E M E N T   T R A M E  :
<
<
WAIT:    EQU         $
         PSR         A,B,X,Y         < TRES PRUDENT CE MONSIEUR...
         LAI         NSPTV
         SBT         0               < ACCES PAR NSP.
         WORD        '1E15           < B=@DCT-TV.
         ADRI        2,B             < B=@X(DCT-TV).
         LR          B,A             < DEMANDE DE X(DCT-TV).
         WORD        '1E15           < B=X(DCT-TV).
         LR          B,Y             < SAVE Y=X(DCT-TV).
         LX          WAITR           < INITIALISATION D'UN DECTECTEUR
                                     < DE TIME-OUT SUR LA TV.
WIDEO:   EQU         $
         JDX         NTOUT
         JMP         TOUT            < CAS D'UN TIME-OUT, ON ARRETE.
NTOUT:   EQU         $
         WORD        '1E15           < B=X(DCT-TV).
         CPR         B,Y             < X(DCT-TV) A-T'IL CHANGE, ET
                                     < DONC A-T'ON CHANGE DE TRAME ???
         JE          WIDEO           < NON, ON ATTEND.
TOUT:    EQU         $
         PLR         A,B,X,Y
         RSR
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        D I F F U S I O N   D E   L ' I M A G E   S T A T I Q U E :
<
<
<        ARGUMENT:
<                    A=NUMERO DU PROCESSEUR DE DIFFUSION.
<
<
DIFFUS:  EQU         $
         STA         STABIL+3
         PSR         X
         LAD         STABIL
         SVC         0
         PLR         X
         RSR
<
<
<        D I F F U S I O N   S U R   L E S   C O M P O S A N T E S
<        A C T I V E E S :
<
<
DIFF3:   EQU         $
         CPZ         IRO             < ROUGE VOULU ???
         JE          DIFF31          < NON
         LAI         TVPR            < OUI - LE FAIRE.
         BSR         ADIF
DIFF31:  EQU         $
         CPZ         IVO             < VERT VOULU ???
         JE          DIFF32          < NON
         LAI         TVPV            < OUI - LE FAIRE.
         BSR         ADIF
DIFF32:  EQU         $
         CPZ         IBO             < BLEU VOULU ???
         JE          DIFF33          < NON
         LAI         TVPB            < OUI - LE FAIRE.
         BSR         ADIF
DIFF33:  EQU         $
         RSR
<
<
<        E N T R E E   D E   L ' I M A G E   D Y N A M I Q U E :
<
<
<        ARGUMENT:
<                    A=NUMERO DU PROCESSEUR D'ENTREE.
<
<
ENREG:   EQU         $
         SBT         NBTVIN          < POSITIONNER L'INDICATEUR IN.
         STA         INIMAG+3
         PSR         X
         LAD         INIMAG
         SVC         0
         PLR         X
         RSR
XWOR%:   VAL         0
         PAGE
<
<
<        E M I S S I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE EN MOT.
<
<
PRINT:   EQU         $
         PSR         C,X
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A             < CONVERSION OCTET.
         ADRI        1,A             < ADRESSE OCTET DU MESSAGE.
         STA         DEMOUT+1        < MAJ AMDEM.
         LBY         0,C             < RECUPERATION LONGUER MESSAGE.
         STA         DEMOUT+2        < MAJ CODEM.
         LAD         DEMOUT
         SVC         0               < EMISSION DU MESSAGE.
         PLR         C,X
         RSR
         PAGE
<
<
<        R E T O U R   A   ' G E '  :
<
<
GOGE:    EQU         $
<
< RAZ DES ITEMS 1 ET 2 :
<
         LX          NMOTS           < X=NBRE DE MOTS A RAZER.
GOGE1:   EQU         $
         STZ         &AI2
         JDX         GOGE1
         STZ         &ANOM           < INVALIDATION DU NOM DE
                                     < L'2MAGE 1 A CAUSE DE 'TV'/'TI'
                                     < QUI POURRAIT VOULOIR L'UTILISER
                                     < ENSUITE !!!
<
< PREPARATION DE L'3VERLAY :
<
         LAI         '06
         STBY        DEMSGN          < DEMSGN EST MISE EN MODE 'LOAD
                                     < SOUS :SYS '.
         LA          NGE
         STA         0,W             < LE NOM DE 'GE' EST MIS EN TETE DE
                                     < LA BRANCHE D'OVERLAY.
         LA          APILE
         LR          A,K             < REINITIALISATION DE K SUR LA
                                     < PILE DE SMC.
         LAD         RELMEM
         SVC         0               < RETOUR A 4K MOTS.
<
< TENTATIVE(S) DE CHARGEMENT DE 'GE' :
<
GOGE2:   EQU         $
         LAD         DEMSGN          < A=@DEMSGN , W=@BRANCH.
         BSR         AOVL            < TENTATIVE DE LOAD 'GE'.
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI SI ERREUR ,
         JMP         GOGE2           < ET NOUVELLE TENTATIVE SI !GO.
<
<
<        R E T O U R   A U   C C I  :
<
<
GOCCI:   EQU         $
         LAD         DEMCCI
         SVC         0               < RETOUR CCI,
         JMP         INTER           < ET RETOUR 'TN' SI !GO.
<
<
<        D E F I N I T I O N   D E S   C O U L E U R S  :
<
<
         IF          ORDI-"T",XWOR%,,XWOR%
RKOLOR:  EQU         $
         LA          IGR
         IBT         15              < INVERSION ETAT ROUGE.
         STA         IGR
         JMP         KOLOR
VKOLOR:  EQU         $
         LA          IGV
         IBT         15              < INVERSION ETAT VERT.
         STA         IGV
         JMP         KOLOR
BKOLOR:  EQU         $
         LA          IGB
         IBT         15              < INVERSION ETAT BLEU.
         STA         IGB
<
< MISE A JOUR :
<
KOLOR:   EQU         $
         JAE         KOL1            < ON ENLEVE UNE COULEUR...
         PSR         A
         LAD         M3
         BSR         APRINT          < ENVOI D'UN MESSAGE 'ON'.
         PLR         A
         JMP         KOL2            < ON RAJOUTE UNE COULEUR.
KOL1:    EQU         $               < ON ENLEVE UNE COULEUR.
         LA          IGR
         OR          IGV
         OR          IGB             < A=0 : IL N'Y A PLUS DE COULEUR.
KOL2:    EQU         $               < ON RAJOUTE UNE COULEUR.
         STA         ICOL            < ICOL=0 : NOIR ET BLANC.
         JAE         KOL3            < ON EST EN NOIR ET BLANC.
         LA          MOT0            < ON EST EN COULEUR.
KOL3:    EQU         $
         STA         0,C             < MISE EN PLACE DU MOT DE COULEUR.
         LXI         -LG
<
< GENERATION DE LA GRILLE GLOBALE :
<
KOL6:    EQU         $
         LA          IGR
         MP          &AGR
         STB         WORK1           < WORK1=GR.AND.IGR
         LA          IGV
         MP          &AGV
         STB         WORK2           < WORK2=GV.AND.IGV
         LA          IGB
         MP          &AGB
         LR          B,A             < A=GB.AND.IGB
         OR          WORK1           < CUMUL GR.AND.IGR
         OR          WORK2           < CUMUL GV.AND.IGV
         STA         &AG             < GRILLE GLOBALE.
         EORI        -1
         STA         &ANG            < ET NEGATION DE G.
         JIX         KOL6
         BR          AINTER          < VERS L'INTERROGATION...
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
INCOL:   EQU         $
         LAD         DEMIN           < ENTREE DE LA COMPOSANTE.
         SVC         0
         LBY         REP             < VERIFICATION.
         ADRI        -'30,A
         JAL         RETERR          < ERREUR ...
         CPI         7
         JG          RETERR          < ERREUR ...
         LR          A,B             < SI C'EST 0 OU 4,
         ANDI        3
         JANE        INCOL1
         ADRI        TVPV,B          < ON PASSE SUR TVPV OUT OU IN.
INCOL1:  EQU         $
         LR          B,X             < INVERSER LA COMPOSANTE.
         LA          &ICOL2
         IBT         15
         STA         &ICOL2
         BR          AINTER          < VERS L'INTERROGATION.
XWOR%:   VAL         0
<
<
<        P R O C E S S E U R   D E   S I M U L A T I O N
<        D ' U N   T A B L E A U   N O I R  :
<
<
<        FONCTION :
<                      CE PROCESSEUR MANIPULE 2 IMAGES :
<                    1- IMAGE 1 (IMAG) : CETTE IMAGE EST INITIALISEE
<                    ET UTILISEE ENSUITE PAR 'TV'/'TI' ,
<                    2- IMAGE 2 (RECORD) : CETTE IMAGE DYNAMIQUE EST
<                    ENREGISTREE EN PERMANENCE PAR LA CAMERA VIDEO ;
<
<
         WORD        IMAG
         WORD        LOC+'80
         WORD        BRANCH
IMAGE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATIONS DES 3 BASES.
         LAD         STACK-1
         LR          A,K             < INITIALISATION DE K SUR LA PILE
                                     < DE TRAVAIL DE 'TN'.
         IC          KIN             < DECOMPTE DES ENTRIES.
<
<        T R A I T E M E N T   D E S   A L T - M O D E S  :
<
         JLE         TABLO           < CAS DE LA 1ERE ENTREE.
         CPZ         IALTM           < DIFFERE OU IMMEDIAT ???
         JE          INTER           < IMMEDIAT...
<
< CAS DES ALT-MODES A DIFFERER :
<
         IC          ALTM            < ON FAIT ALTM#0, CELA SERVIRA
                                     < SI LE ALT-MODE EST APPARU
                                     < A L'INTERIEUR DE LA BOUCLE
                                     < DE TRAITEMENT D'IMAGE.
         LA          KMAJ
         JAE         INTER           < PAS DE PROBLEME ON VA INTERROGER.
         TBT         15              < TEST DE LA PARITE DE KMAJ.
         JC          TABLO5          < KMAJ IMPAIR.
<
< CAS OU LE ALT-MODE EST APPARU APRES 'BACK2' :
<
         LA          SNITER
         STA         XNITER          < RESTORE XNITER.
         LA          SAVE            < RESTORE (A),
         LX          XSAVE           < RESTORE (X).
         IF          ORDI-"T",XWOR%,,XWOR%
         LY          YSAVE           < RESTORE (Y).
XWOR%:   VAL         0
         BR          ABACK2          < VERS LA REPRISE DU TRAITEMENT.
<
< CAS OU LE ALT-MODE EST APPARU ENTRE BACK1 ET BACK2 :
<
TABLO5:  EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         CPZR        X               < LE ALT-MODE EST-IL APPARU ENTRE
                                     < LES 2 'XR X,Y' ???
         JG          KOL4            < NON : X>0, Y<=0.
         XR          X,Y             < OUI, ON RESTAURE...
KOL4:    EQU         $
XWOR%:   VAL         0
         BR          ABACK1          < RIEN DE SPECIAL...
<
<
<        1 E R E    E N T R Y
<        T A B L E A U   N O I R  :
<
<
TABLO:   EQU         $
<
< VALIDATION DU DEMANDEUR :
<
         WORD        '1E25           < (A,B)=<ACN> DU DEMANDEUR.
         CP          ACNSYS          < EST-CE :SYS ???
         JNE         GOGE            < NON , RETOUR ...
         LR          B,A
         CP          ACNSYS+1        < EST-CE :SYS ???
         JNE         GOGE            < NON , RETOUR ....
         LAD         DEMMEM
         SVC         0               < DEMANDE D'ALLOCATION 12K.
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          AIMA2           < MISE EN PLACE DE L'ADRESSE
         STA         &ATIMAG         < DE L'IMAGE D'ENREGISTREMENT.
XWOR%:   VAL         0
         JMP         XALTM           < ALLONS METTRE 'TN' EN MODE
                                     < ALT-MODES IMMEDIATS.
<
< INTERROGATION DE L'UTILISATEUR :
<
INTER:   EQU         $
         STZ         ALTM            < RAZ DES ALT-MODES...
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         WORD        '1EC5           < STABILISATION IMAGE 1.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ADIF3           < DIFFUSION IMAGE 1.
XWOR%:   VAL         0
         LAD         MINT
         BSR         APRINT          < ENVOI DE L'INVITATION.
         LAD         DEMIN
         SVC         0               < LECTURE DE LA REPONSE.
         LAI         1
         STA         NITER           < A PRIRI NITER=1.
         LBY         REP             < A=CARACTERE REPONSE UTILISATEUR.
<
<        REPONSES RECONNUES :
<                    F : RETOUR A 'GE' ,
<                    = : @DYNAMIQUE=@STATIQUE (IMAGES) ,
<                    # : @DYNAMIQUE#@STATIQUE (IMAGES) ,
<                    0 : PAS D'INVERSION VIDEO SUR IMAGE DYNAMIQUE ,
<                    1 : INVERSION VIDEO SUR IMAGE DYNAMIQUE ,
<                    N : PAS D'OPERATIONS INTER-IMAGES ,
<                    O : 'OR' ENTRE IMAGES STATIQUE ET DYNAMIQUE ,
<                    A : 'AND' ENTRE LES 2 IMAGES ,
<                    E : 'EOR' ENTRE LES 2 IMAGES.
<                    C : 'EOR' ITERE 2 FOIS ENTRE LES 2 IMAGES,
<                        PERMET DONC DE SIMULER UN CURSEUR.
<                    X : INVERSION DES ALT-MODES DIFFERES/IMMEDIATS.
<                    W : RETOUR AU CCI.
<                    Z : RAZ DE L'IMAGE STATIQUE.
         IF          ORDI-"T",XWOR%,,XWOR%
<                    R : INVERSION ETAT ROUGE,
<                    V : INVERSION ETAT VERT,
<                    B : INVERSION ETAT BLEU.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<                    V : INVERSION DE LA COMPOSANTE COULEUR
<                        DONT ON RENTRE LE NUMERO DERRIERE :
<                        0 : EQUIVALENT A 2.
<                        1 : INVERSION DE L'ETAT SORTIE ROUGE.
<                        2 : INVERSION DE L'ETAT SORTIE VERT.
<                        3 : INVERSION DE L'ETAT SORTIE BLEU.
<                        4 : EQUIVALENT A 6.
<                        5 : INVERSION DE L'ETAT ENTREE ROUGE.
<                        6 : INVERSION DE L'ETAT ENTREE VERT.
<                        7 : INVERSION DE L'ETAT ENTREE BLEU.
<                      L'ETAT INITIAL EST :
<                        ENTREE ET SORTIE VERT ACTIVES,
<                        LES AUTRES INACTIVES.
XWOR%:   VAL         0
<
         CPI         "W"
         JE          GOCCI           < RETOUR TEMPORAIRE AU CCI.
         CPI         "F"
         JE          GOGE            < RETOUR A 'GE'.
         IF          ORDI-"T",XWOR%,,XWOR%
         CPI         "R"
         JE          RKOLOR          < INVERSION ETAT ROUGE.
         CPI         "V"
         JE          VKOLOR          < INVERSION ETAT VERT.
         CPI         "B"
         JE          BKOLOR          < INVERSION ETAT BLEU.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         CPI         "V"
         JE          INCOL           < INVERSION COMPOSANTE.
XWOR%:   VAL         0
         CPI         "X"
         JE          XALTM           < INVERSION DU ALT-MODE.
         LBI         'B2             < 'OR' A PRIORI.
         CPI         "O"
         JE          TABLO3          < DEMANDE D'UN 'OR'.
         LBI         'B3             < 'AND' A PRIORI.
         CPI         "A"
         JE          TABLO3          < 'AND' ENTRE LES 2 IMAGES.
         LBI         'B4             < 'EOR' A PRIORI.
         CPI         "E"
         JE          TABLO3          < 'EOR' ENTRE LES 2 IMAGES.
         IF          ORDI-"T",XWOR%,,XWOR%
         LBI         '1D             < 'NOP' A PRIORI ,
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LBI         '24             < 'NOP' A PRIORI ,
XWOR%:   VAL         0
         CPI         "N"
         JE          TABLO3          < PAS D'OPERATIONS INTER-IMAGES.
         LBI         0               < PAS D'INVERSION VIDEO A PRIORI.
         CPI         "0"
         JE          GMASK           < PAS D'INVERSION VIDEO DYNAMIQUE.
         LBI         -1              < INVERSION VIDEO A PRIORI.
         CPI         "1"
         JE          GMASK           < INVERSION VIDEO DYNAMIQUE.
         LB          AIMA1           < @DYNAMIQUE=@STATIQUE A PRIORI.
         CPI         "="
         JE          GADR            < @DYNAMIQUE=@STATIQUE.
         LB          AIMA2           < @DYNAMIQUE#@STATIQUE A PRIORI.
         CPI         "#"
         JE          GADR            < @DYNAMIQUE#@STATIQUE.
         CPI         "Z"
         JE          RAZ             < INITAILISATION IMAGE STATIQUE.
         CPI         "C"
         JE          CURSOR          < SIMULATION D'UN CURSEUR.
RETERR:  EQU         $
         LAD         MERR
         BSR         APRINT          < ENVOI MESSAGE D'EREUR...
         JMP         INTER           < RIEN COMPRIS, INTERROGATION...
<
< INVERSION DES ALT-MODES IMMEDIATS/DIFFERES :
<
XALTM:   EQU         $
         LAD         M1              < MODE IMMEDIAT A PRIORI.
         LB          IALTM
         IBT         15+16           < INVERSION DU MODE.
         STB         IALTM
         CPZR        B               < QUEL EST LE NOUVEAU MODE ???
         JE          XALTM1          < MODE IMMEDAIAT.
         LAD         M2              < NON, MODE DIFFERE.
XALTM1:  EQU         $
         BSR         APRINT          < ENVOI D'UN MESSAGE...
         JMP         INTER           < VERS L'INTERROGATION...
<
< MISE EN PLACE DE L'@IMAGE DYNAMIQUE :
<
GADR:    EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         STB         &ATIMAG         < @RELATUIVE DE L'IMAGE DYNAMIQUE.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         SLLD        1
         STB         INIMAG+1
XWOR%:   VAL         0
         JMP         INTER
<
< MISE EN PLACE DE L'INVERSION VIDEO DYNAMIQUE :
<
GMASK:   EQU         $
         STB         MASKI
         JMP         INTER
<
< SIMULATION D'UN CURSEUR PAR 2 'EOR' SUCCESSIFS :
<
CURSOR:  EQU         $
         LAI         2
         STA         NITER           < NITER=2.
         LBI         'B4             < CODE DE L'EOR'.
<
< MISE EN PLACE DE L'OPERATION INTER-IMAGES :
<
TABLO3:  EQU         $
         LR          B,A             < A=CODE DE L'OPERATION DEMANDEE.
         STBY        &AOP            < MISE EN PLACE DE L'INSTRUCTION
                                     < VARIABLE INTER-IMAGES.
         STBY        &AOPI           < DE MEME POUR LE MODE IMMEDIAT.
         IF          ORDI-"T",XWOR%,,XWOR%
         STBY        &AOP2           < DE MEME IMMEDIAT+COULEUR.
XWOR%:   VAL         0
         LB          MASKI           < B=MASQUE D'INVERSION VIDEO 0/-1.
<
< BOUCLE DE SIMULATION DU TABLEAU NOIR :
<
TABLO1:  EQU         $
         IF          ORDI-"S",XWOR%,,XWOR%
         LAI         3               < ON FAIT LES TROIS COMPOSANTES.
         STA         NBCOMP
TABL30:  EQU         $
         LA          NBCOMP          < DOIT-ON ENTRER CETTE COMPOSANTE ???
         LR          A,X
         CPZ         &ICOL1
         JE          TABL31          < NON
         BSR         AENR            < ENTREE IMAGE DYNAMIQUE.
XWOR%:   VAL         0
         STZ         KMAJ            < KMAJ=0.
<
< ENTREE D'UNE IMAGE DYNAMIQUE :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP1
         WORD        '1EC5           < ENREGISTREMENT MAITRE DE L'2MAGE
                                     < DYNAMIQUE (IMAGE 2).
         BSR         AWAIT           < ATTENTE DE CHANGEMENT DE TRAME.
                                     < RECORD DE L'IMAGE 2.
<
< VISUALISATION ET MISE A JOUR DE L'2MAGE 1 (STATIQUE) :
<
         LA          ASP2
         WORD        '1EC5           < DIFFUSION MAITRE DE L'IMAGE 1.
<
< MISE A JOUR :
<
XWOR%:   VAL         0
         CPZ         IALTM           < TEST DU MODE COURANT...
         JE          TABL10          < CAS DU MODE IMMEDIAT...
         IF          ORDI-"T",XWOR%,,XWOR%
         BSR         AWAIT           < ATTENTE DE CHANGEMENT DE TRAME.
XWOR%:   VAL         0
<
< CAS DU ALT-MODE DIFFERE :
<
         LA          NITER
         STA         XNITER          < INITIALISATION COMPTEUR.
TABLO4:  EQU         $
         LA          XNITER
         STA         SNITER          < SAVE XNITER.
         LXI         1               < X=INDEX MOT.
         IF          ORDI-"T",XWOR%,,XWOR%
         CPZ         ICOL            < EST-ON EN COULEUR ???
         JE          COL2            < NON, X=1.
         LXI         2               < OUI, X=2, ON SAUTE LE MOT
                                     < DE COULEUR...
         LYI         -LG+1           < Y=INDEX D'ACCES A GR/GV/GB.
COL2:    EQU         $
XWOR%:   VAL         0
TABLO2:  EQU         $
         IC          KMAJ            < KMAJ IMPAIR.
         LA          &AIMAG2         < ACCES A L'IMAGE DYNAMIQUE.
         EOR         MASKI           < INVERSION VIDEO EVENTUELLE DE
                                     < L'IMAGE DYNAMIQUE.
         IF          ORDI-"T",XWOR%,,XWOR%
<
< COLORIAGE EVENTUEL :
<
         CPZ         ICOL            < NOIR ET BLANC ???
         JE          COL3            < ET OUI...
         XR          X,Y             < SAVE (X), ET X=INDEX GR/GV/GB.
         AND         &AG             < A=IMAGE DYNAMIQUE COLORIEE.
         LR          A,B             < ET SAVE DANS B.
         LA          &ANG
         XR          X,Y
         STY         YSAVE           < SAVE (Y).
         AND         &AIMAG1         < A=RESIDU IMAGE STATIQUE.
         ORR         B,A             < A=MODIFICATION A APPORTER
                                     < A L'IMAGE STATIQUE.
COL3:    EQU         $
XWOR%:   VAL         0
OP:      OR          &AIMAG1         < QUE L'ON MODIFIE PAR L'IMAGE
                                     < STATIQUE EVENTUELLEMENT ...
         STX         XSAVE           < SAVE (X),
         STA         SAVE            < SAVE (A).
         IC          KMAJ            < KMAJ PAIR.
BACK2:   EQU         $               < POINT DE RETOUR 2 DES ALT-MODES.
         STA         &AIMAG1         < MAJ DE L'2MAGE 1.
         IF          ORDI-"T",XWOR%,,XWOR%
         ADRI        1,Y
         CPZR        Y
         JL          COL1
         LYI         -LG             < REINITIALISATION A CHAQUE
                                     < PASSAGE A 0.
COL1:    EQU         $
XWOR%:   VAL         0
         ADRI        1,X             < INDEX MOT.
         LR          X,A
         CP          ALIMAG          < EST-ON AU BOUT ???
         JLE         TABLO2          < NON, AU SUIVANT.
         DC          XNITER          < DECOMPTE DES ITERATIONS.
         JG          TABLO4          < ENCORE UNE...
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ADIF3           < DIFFUSION IMAGE.
TABL31:  EQU         $
         DC          NBCOMP          < COMPOSANTE SUIVANTE.
         JG          TABL30
XWOR%:   VAL         0
         STZ         KMAJ            < KMAJ=0...
         CPZ         ALTM            < FAUT-IL ARRETER LE TRAITEMENT ???
         JE          TABLO1          < NON, ON BOUCLE JUSQU'A CE
                                     < QU'UN ALT-MODE NE VIENNE
                                     < ARRETER TOUT CELA.
         BR          AINTER          < ET OUI, ARRET....
<
< CAS DU ALT-MODE IMMEDIAT :
<
TABL10:  EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         CPZ         ICOL            < COULEUR OU NOIR ET BLANC ???
         JNE         TABL20          < COULEUR...
XWOR%:   VAL         0
<
< CAS DU ALT-MODE IMMEDIAT ET NOIR ET BLANC :
<
         LX          ALIMAG          < X=NBRE DE MOTS A TRAITER...
TABL11:  EQU         $
         LA          &AIMAG2         < ACCES IMAGE DYNAMIQUE.
         EORR        B,A             < INVERSION EVENTUELLE.
OPI:     OR          &AIMAG1         < INSTRUCTION VARIABLE DE
                                     < MISE A JOUR DE L'IMAGE
                                     < STATIQUE.
         STA         &AIMAG1         < MAJ IMAGE STATIQUE.
         JDX         TABL11          < MOT PRECEDENT...
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ADIF3           < DIFFUSION IMAGE.
         DC          NBCOMP          < COMPOSANTE SUIVANTE.
         JG          TABL30
XWOR%:   VAL         0
         JMP         TABLO1          < ET ON ITERE JUSQU'A CE
                                     < QU'UN ALT-MODE IMMEDIAT
                                     < N'APPARAISSE...
<
<
<         R A Z   I M A G E   S T A T I Q U E  :
<
<
RAZ:     EQU         $
         LX          ALIMAG          < X=NBRE DE MOTS A RAZER.
         LA          MASKI           < A=VALEUR A DONNER A L'IMAGE
                                     < STATIQUE.
RAZ1:    EQU         $
         STA         &AIMAG1         < INITIALISATION IMAGE
                                     < STATIQUE.
         JDX         RAZ1
         IF          ORDI-"T",XWOR%,,XWOR%
         CPZ         ICOL            < NOIR ET BLANC OU COULEUR ???
         JE          RAZ2            < NOIR ET BALNC.
         LA          MOT0            < DANS LE CAS DE LA COULEUR, IL
         STA         0,C             < FAUT RESTAURER LE MOT DE COULEUR.
RAZ2:    EQU         $
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         BSR         ADIF3           < DIFFUSION IMAGE.
XWOR%:   VAL         0
         BR          AINTER          < ET C'EST TOUT...
         IF          ORDI-"T",XWOR%,,XWOR%
<
< CAS DU ALT-MODE IMMEDIAT ET COULEUR :
<
TABL20:  EQU         $
         LXI         2               < POUR DEPASSER LE MOT DE COULEUR....
         LYI         -LG+1           < INDEX DES GRILLES.
TABL21:  EQU         $
         LA          &AIMAG2         < A=IMAGE DYNAMIQUE.
         EOR         MASKI           < INVERSION EVENTUELLE.
         XR          X,Y             < X=INDEX GRILLE.
         AND         &AG             < A=DYNAMIQUE COLORIEE.
         LR          A,B             < SAVE DANS B.
         LA          &ANG
         XR          X,Y             < X=INDEX IMAGES.
         AND         &AIMAG1         < A=RESIDU IMAGE STATIQUE.
         ORR         B,A
OP2:     OR          &AIMAG1         < MODIFICATION IMAGE STATIQUE.
         STA         &AIMAG1         < MAJ IMAGE STATIQUE.
         ADRI        1,Y             < INDEX GRILLE.
         CPZR        Y
         JL          TABL25          < Y<0.
         LYI         -LG             < Y=-LG SI Y=0.
TABL25:  EQU         $
         ADRI        1,X
         LR          X,A             < INDEX IMAGES.
         CP          ALIMAG          < EST-CE FINI ???
         JLE         TABL21          < NON...
         JMP         TABLO1          < VERS LA TRAME SUIVANTE...
XWOR%:   VAL         0
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI MAUVAISE
                                     < IMPLANTATION !!!
         DZS         X10+1           < HYGIENE ...
         EOT         #SIP GEN PROCESSEUR#



Copyright © Jean-François Colonna, 2022-2022.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2022.