NMPROC:  VAL         "SC"            < NOM DU PROCESSEUR.
         IDP         "SC - RELEASE 14/03/1980"
         IDP         "GENERATEUR DE FILMS VIDEOS"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
ENTRY:   WORD        SCENE           < @ENTRY POINT DU PROCESSEUR.
         WORD        0
PSCENE:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         PAGE
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI  < @ITEM1.
ITEM2:   EQU         ITEM1-LTNI      < @ITEM2.
         EOT         #SIP IMAGE 256#
IMAG:    EQU         ZERO+PILE+5     < L'IMAGE VIDEO EST IMPLANTEE AU
                                     < BOUT DES 4 PREMIERS K-MOTS.
NOM:     EQU         ITEM1           < LE NOM DE L'IMAGE VIDEO EST MIS
                                     < DANS L'EN-TETE DE L'ITEM1.
EOT:     EQU         IMAG-2          < CONTIENT UN EOT MIS PAR 'TV'.
LONG:    EQU         IMAG-1          < CONTIENT UN NBRE NEGATIF S'IL S'
                                     < AGIT BIEN D'UNE IMAGE VIDEO.
                                     < (-3 , -2 , -1)
                                     < A T T E N T I O N  : EOT ET
                                     < LONG SONT EN RECOUVREMENT AVEC
                                     < LA PILE DE SODOME !!!!!
                                     < (DE MEME QUE LE 1ER MOT DE IMAG)
         PAGE
<
<
<        P I L E   D E   R E C U R S I V I T E  :
<
<
<        FORMAT :
<                      LA PILE 'PIR' EST FAITE D'ENTREE DOUBLE-
<                    MOTS ASSURANT LA RECURSIVITE DU LANGAGE
<                    DE DESCRIPTION DES SCENARI.
<
<
IR:      VAL         0               < MOT0 : CAUSE DE L'EMPILEMENT :
                                     < BIT1=1 : PUSH POUR REPETITIONS ,
                                     < BIT2=1 : PUSH POUR APPEL PROG.,
                                     < BIT3=1 : PUSH POUR SAUT PROG.
CODREP:  VAL         '40             < PUSH POUR REPETITIONS.
BITREP:  VAL         1               < BIT DE REPETITIONS.
CODPRO:  VAL         '20             < PUSH POUR APPEL PROGRAMME.
BITPRO:  VAL         2               < BIT APPEL PROGRAMME.
                                     < A T T E N T I O N  : BITPRO
                                     < UTILISE AVEC BITDEF SIGINFIE
                                     < QU'ON APPELLE UN PROGRAMME
                                     < AVEC CHGT D'ITEM COURANT.
CODDEF:  VAL         '10             < PUSH POUR DEFINITION PROGRAMME.
BITDEF:  VAL         3               < BIT DE SAUT DEFINITION PROG.
CDCP:    VAL         1               < MOT1 : COMPTE DES 'DO' , ET
                                     < LE COMPTE ALGEBRIQUE DES
                                     < PARENTHESES.
CD:      VAL         2*CDCP+0        < OCTET0(MOT1)=NBRE DE REPETITIONS
                                     < RESTANT A FAIRE (INDEX DE TYPE
                                     < OCTET) ,
CP:      VAL         2*CDCP+1        < OCTET1(MOT1)=COMPTE ALGEBRIQUE
                                     < DES PARENTHESES RENCONTREES
                                     < SOUS CE NIVEAU :
                                     < '(' : +1 ,
                                     < ')' : -1.
LEPR:    VAL         2               < NBRE DE MOTS OCCUPES PAR UNE
                                     < ENTREE DE LA PILE PIR.
LPR:     VAL         12              < NBRE D'ENTREES DE PIR.
         PAGE
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
< RELAIS A METTRE EN TETE DU LOCAL, AFIN
< D'ABSOLUTISER LES DEPLACEMENTS D'ACCES SIMPLI-
< FIANT AINSI L'ECRITURE DE PROGRAMMES EN OVERLAY
< DANS LES BIBLIOTHEQUES :
<
<        RESET       00 ('80)
ARESET:  WORD        RESET           < MISE D'UN POINT A 0 (NOIR).
<        SET         01 ('81)
ASET:    WORD        SET             < MISE D'UN POINT A BLANC (1).
<        INVER       10 ('82)
AINVER:  WORD        INVER           < INVERSION D'UN POINT.
<        TEST        11 ('83)
ATEST:   WORD        TEST            < TEST DE L'ETAT D'UN POINT (X,Y).
<
< DEMANDES A CMS4 :
<
DEMSGN:  WORD        '0402           < DEMANDE D'OVERLAY SGN.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
         IF          ORDI-"T",XWOR%,,XWOR%
DELSGN:  WORD        '0302           < DEMANDE DELETE SGN LORS DES
                                     < APPELS DE 'TI'.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
DEMOVA:  WORD        '0602           < CHARGEMENT OVERLAY ' A'.
         WORD        IMAG+LIMAG-ZERO*2 < ADRESSE D'IMPLANTATION.
         WORD        '1000           < 2 K MOTS MAXI.
         WORD        -1
ARUNA:   WORD        XRUNA           < RUN OVERLAY ' A'.
IOVA:    WORD        1               < INDICATEUR CHARGEMENT OVERLAY ' A':
                                     < = 0 : IL A DEJA ETE CHARGE,
                                     < = 1 : IL N'A PAS ENCORE ETE CHARGE.
XWOR%:   VAL         0
DEMBIB:  WORD        '0502           < CHARGEMENT DES BIBLIOTHEQUES.
         WORD        0               < @OCTET ITEM.
         WORD        2*LTNI
         WORD        -1
DEMTV:   WORD        '0502           < CHARGEMENTS DES IMAGES VIDEOS.
         WORD        NOM-ZERO*2
         WORD        IMAG-NOM+LIMAG*2
         WORD        EOT-NOM*2       < DEPLACEMENT D'ACCES A LA VALEUR.
DEMOUT:  WORD        '0202           < DEMANDE ECRITURE SU OUT.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR OCTET  DU MESSAGE.
DERASE:  WORD        '0205           < EFFACEMENT DE L'ECRAN.
OG:      WORD        '0B03           < OG SUR LA VISU D'EMISSION.
CG:      WORD        '0B04           < CG SUR LA VISU D'EMISSION.
WG:      WORD        '0B0A           < ECRITURE GRAPHIQUE SUR LE
                                     < VISU D'EMISSION.
         WORD        IMAG-ZERO*2
         WORD        0               < LA LONGUEUR EST VARIABLE.
COPY:    WORD        '0B07           < DEMANDE DE MAKE-COPY.
         BYTE        '1B;'17;'8D;'04 < ESC,CTRL-W,R/C,EOT.
DERASF:  WORD        '0B05           < ERASE LA VISU D'EMISSION.
DIRECT:  WORD        '0B07           < ECRITURE DIRECTE SUR LA
                                     < VISU D'EMISSION.
         BYTE        '1B;0           < 'ESC'-<CARACTERE>.
         BYTE        '04;0
DEMMEM:  WORD        '0004           < DEMANDE DE 8K MOTS.
RELMEM:  WORD        '0004           < RETOUR A 4K MOTS.
         WORD        '4000
         WORD        '2000
         IF          ORDI-"S",XWOR%,,XWOR%
DEMM10:  WORD        '0004           < DEMANDE DE 10 K MOTS (A CAUSE DE
         DZS         1               < L'OVERLAY ' A'.
         WORD        '5000
XWOR%:   VAL         0
SLEEP:   WORD        '0005           < DEMANDE DE TEMPORISATION DE
                                     < DUREE VARIABLE.
         WORD        0
SAVE:    WORD        0               < ZONE DE SAUVEGARDE TEMPORIARE.
DEMCCI:  WORD        '0001           < RETOUR AU CCI.
<
< RELAIS DIVERS :
<
         IF          ORDI-"T",XWOR%,,XWOR%
ASP3:    WORD        SP3             < ROUTINE MAITRE DE STABILI-
                                     < SATION DE L'IAMGE VIDEO.
                                     < (SI =0 : CE N'EST PAS :SYS !!!)
ASP5:    WORD        SP5             < ROUTINE DE MISE EN MARCHE DU
                                     < DU SYSTEME VIDEO , OU 0 SI
                                     < LE NUMERO DE COMPTE EST # DE :SYS
ASP6:    WORD        SP6             < ARRETE DE LA VIDEO OU 0 SI
                                     < ACN # DE :SYS.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
STDKU:   WORD        '8A01           < STABILISATION IMAGE,
         WORD        IMAG-ZERO*2
         WORD        LIMAG*2
VTVCTL:  WORD        0               < INDICATEURS DE COULEUR...
DTVCTL:  WORD        TVPV            < DERNIERE COMPOSANTE TV UTILISEE.
XWOR%:   VAL         0
AGOGE:   WORD        GOGE            < RELAI VERS LE MODULE D'APPEL GE.
AGOGER:  WORD        GOGER           < RETOUR A L'APPELANT AU CAS
                                     < OU UN ALT-MODE EST FRAPPE.
AGOCCI:  WORD        GOCCI           < RETOUR AU CCI.
ALOOPB:  WORD        LOOPB           < RETOUR DE L'INTERPRETEUR.
ALOOP:   WORD        LOOP            < BOUCLE DE L'INTERPRETEUR.
XOFF:    WORD        E962            < INTERPRETEUR SI CTRL-X-OFF.
ASVC:    WORD        RSVC            < EXECUTION D'UN SVC.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
AGTK:    WORD        GTK             < ACCES AUN CARACTERE A CODER.
ACHGTI:  WORD        CHGTI           < CHANGEMENT D'ITEM COURANT.
AGTCAR:  WORD        GETCAR          < ACCES A UN CARACTERE POUR CAODER.
APILE:   WORD        PILE-1          < POUR INITIALISER K.
AI1:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM1 A PRIORI.
AIC:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM COURANT.
AIR:     WORD        ZERO+PILE-LTNI+LTN,X
                                     < RELAI VERS L'ITEM DANS LEQUEL
                                     < ON FAIT LA RECHERCHE D'UN
                                     < PROGRAMME.
X1:      VAL         LEPR*LPR-LEPR   < NBRE DE MOTS OCCUPES PAR LA
                                     < PILE DE RECURSIVITE-LEPR.
BPR:     WORD        PIR             < BASE DE LA PILE DE RECURISIVITE.
TPR:     WORD        PIR+X1          < TOP DE LA PILE DE RECURSIVITE.
APRC:    WORD        PIR,X           < ENTREE COURANTE DE LA PILE
                                     < DE RECURSIVITE.
         IF          ORDI-"T",XWOR%,,XWOR%
ASCENE:  WORD        SCENE           < @POINT D'ENTREE PRINCIPAL 'SC'.
ARET:    WORD        RETURN          < @POINT D'ENTREE UTILISE LORS
                                     < DES RETOURS A 'SC' FAITS PAR 'TI'
AENT:    WORD        ENTRY           < @ DE L'@ DU POINT D'ENTREE
                                     < DU PROCESSEUR 'SC'.
XWOR%:   VAL         0
<
< CONSTANTES DIVERSES :
<
C100:    WORD        '100            < CONSTANTE D'INTERPRETATION.
CFFF:    WORD        '0FFF           < RAZ DES BITS 0,1,2,3.
RETSVC:  WORD        0               < CONDITIONS DE RETOUR D'UN SVC.
CTTE:    WORD        1
ARGF:    WORD        -1              < INDEX DE LA 1ERE PRIMITIVE
                                     < DE L'ARGUMENT FORMEL COURANT.
IEG:     WORD        0               < INDEX COURANT DU SCENARIO ;
                                     < IL DONNE L'INSTRUCTION COURANTE.
NOMARG:  WORD        -1              < SAUVEGARDE DE L'INDEX INITIAL
                                     < D'UN NOM D'IMAGE, LORSQUE CELUI-
                                     < CI EXISTE (POUR LES APPELS 'TI').
ACCEB:   WORD        LTNI            < CONSTANTE DE CHANGEMENT D'ITEM
                                     < COURANT :
                                     < ACCEB>0 : ITEM COURANT=ITEM1 ,
                                     < ACCEB<0 : ITEM COURANT=ITEM2.
ALTNI2:  WORD        2*LTNI          < LONGUEUR MAX TOTALE D'UN
                                     < ITEM (EN-TETE+CORPS).
NCP:     WORD        NBCAR*NBLIG     < NBRE DE CARACTERES D'UN ITEM.
LDESS:   WORD        2*LIMAG         < LONGUEUR MAX D'UN DESSIN
                                     < DE SUMULATION FLOPPY.
AGON1:   WORD        N1              < NOEUD D'ACCES A LA PRIMITIVE
                                     < SUIVANTE LORS DE L'ANALYSE
                                     < SYNTAXIQUE DU LANGAGE.
AGON22:  WORD        N22             < NOEUD DE BRANCHEMENT LORS
                                     < DE LA RENCONTRE DE CARACTERES
                                     < HORS-LA PAGE (GET CARACTER).
F3:      WORD        0               < VARIABLE DE CODAGE DES <NOM>.
WHOCAL:  WORD        0               < CONTIENT LE MODCAL EN COURS
                                     < LORS DE L'APPEL DE SC.
NCALL:   WORD        $+1,X;"GE";"EI"
NSC:     WORD        "SC"            < NOM DU PROCESSEUR 'SC'.
NTI:     WORD        "TI"            < NOM DE L'OVERLAY 'TI'.
ACNSYS:  ASCI        ":SYS"          < NUMERO DE COMPTE DU SYSTEME.
KIN:     WORD        -1              < COMPTEUR DES ENTREES DANS 'SC' :
                                     < -1 : 1ERE ENTREE ,
                                     < 0 : LORS D'UN ALT-MODE.
         IF          ORDI-"T",XWOR%,,XWOR%
VIDEON:  WORD        0               < 0 : LA VIDEO EST A METTRE EN
                                     <     MARCHE ,
                                     < 1 : LA VIDEO EST A ARRTEER.
XWOR%:   VAL         0
<
< CONSTANTES VIDEOS :
<
I1:      WORD        ITEM1           < @ITEM1.
XI1:     WORD        ITEM1,X         < RELAI D'ACCES A L'EN-TETE ITEM1.
ASI1:    WORD        SI1             < @ZONE DE SAVE EN-TETE ITEM1.
SI1:     DZS         LNOM+2          < ZONE DE SAVE EN-TETE ITEM1.
ALONG:   WORD        LONG            < RELAI D'ACCES A LA VALIDATION
                                     < DE L'IMAGE VIDEO.
<
< GENERATION DE SOCIETES :
<
AIMAG:   WORD        IMAG            < @IMAGE VIDEO.
XIMAG:   WORD        IMAG-1,X        < ACCES IMAGE PAR JDX.
ALIMAG:  WORD        LIMAG           < LONGUEUR EN MOTS DE L'IMAGE.
MAND5:   WORD        '5555           < QUADRILLAGE IMPAIR.
MANDA:   WORD        'AAAA           < QUADRILLAGE PAIR.
DELX:    WORD        2               < PROGRESSION INITIALE DE X.
DELY:    WORD        2               < PROGRESSION INITIALE DE Y.
OENTRY:  WORD        0               < 0 : FAIRE LE JEU DE LA VIE.
                                     < #0 : APPEL DES OVERLAYS EN
                                     < BIBLIOTHEQUES ($).
BASCUL:  WORD        1               < INDICATEUR DU QUADRILLAGE
                                     < COURANT POUR LES SOCIETES (+-1).
VOISIN:  WORD        0               < NBRE DE VOISINS D'UN POINT
                                     < Y COMPRIS CELUI-CI S'IL EXISTE.
STACK:   DZS         10              < PILE DE GENERATIUON DES SOCIETES.
         DZS         3               < ET BIN OUI CA SUFFISAIT PAS ..!!?
AOP:     WORD        OP              < @INSTRUCTION VARIABLE SCRS/SCLS.
<
< CONSTANTES SONORES :
<
ASP:     WORD        SP              < ROUTINE MAITRE DE SORTIE CU1.
AOCTAV:  WORD        OCTAV           < ADRESSE DE L'OCTAVE DEMANDE.
ANPER:   WORD        NPER            < ADRESSE DU NBRE DE PERIODES.
ATEMPO:  WORD        TEMPO           < ADRESSE DE LA TEMPRISATION
                                     < DES FREQUENCES.
AASIG:   WORD        ASIG            < ADRESSE DE L'ADRESSE DU
                                     < SIGNAL TRANSMIS A SP.
<
< SINUSOIDE :
<
SINUS:   EQU         $
         BYTE        128-0;128-9;128-17;128-26;128-34;128-42
         BYTE        128-50;128-57;128-64;128-70;128-77;128-82
         BYTE        128-87;128-90;128-93;128-97;128-98;128-99
         BYTE        128-100;128-99;128-98;128-97;128-93;128-90
         BYTE        128-87;128-82;128-77;128-70;128-64;128-57
         BYTE        128-50;128-42;128-34;128-26;128-17;128-9
         BYTE        128+0;128+9;128+17;128+26;128+34;128+42
         BYTE        128+50;128+57;128+64;128+70;128+77;128+82
         BYTE        128+87;128+90;128+93;128+97;128+98;128+99
         BYTE        128+100;128+99;128+98;128+97;128+93;128+90
         BYTE        128+87;128+82;128+77;128+70;128+64;128+57
         BYTE        128+50;128+42;128+34;128+26;128+17;128+9
SIN:     EQU         $
         WORD        SINUS-$*2       < -NBRE D'ECHANTILLONS.
         PROG
         IF          ORDI-"S",XWOR%,,XWOR%
OVA:     ASCI        " A    "        < NOM DE L'OVERLAY ' A'.
         WORD        '04D0           < EOT ETC...
         WORD        '1F00
         WORD        0
FOVA:    EQU         $
XOVA:    VAL         FOVA-OVA        < LONGUEUR 'EN-TETE' OVERLAY ' A'.
XRUNA:   EQU         IMAG+LIMAG+XOVA < ADRESSE ENTRY DANS ' A'.
XWOR%:   VAL         0
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
TIMAG:   WORD        IMAG            < ADRESSE RELATIVE DE L'IMAGE.
         EOT         #SIP SP3#
XWOR%:   VAL         0
         PAGE
<
<
<        E X E C U T I O N   D ' U N   S V C  :
<
<
<        ARGUMENT :
<                    A=@DEMANDE A CMS4.
<
<
<        RESULTATS :
<                    RETSVC=CONDITION S DE RETOUR DE CMS4 ,
<                    INDICATEURS POSITIONNES.
<
<
RSVC:    EQU         $
         PSR         X
         SVC         0               < APPEL DE CMS4.
         STX         RETSVC          < RENVOI DES CONDITIONS DE
                                     < RETOUR DE CMS4.
         PLR         X
         RSR
         PAGE
<
<
<        R E T O U R   A U   C C I  :
<
<
GOCCI:   EQU         $
E10:     EQU         $
         LAD         DEMCCI
E11:     EQU         $
         BSR         ASVC            < EXECUTION D'UN SVC.
         RSR                         < RETOUR LORS D'UN !GO.
         PAGE
<
<
<        R E T O U R   E N   E R R E U R  :
<
<
<        CONDITIONS DE RETOUR :
<                    CDRET=0 : RETOUR OK ,
<                    CDRET=2 : RETOUR SUITE A UN ALT-MODE.
<                              (OU BIEN CTRL-X-OFF LORS D'1N FLOPPY)
<
<
GOGER:   EQU         $
         LAI         2               < A=CONDITION D'ERREUR (2).
         JMP         GOBAC           < VERS LE RETOUR ...
<
<
<        R E T O U R   G E  :
<
<
GOGE:    EQU         $
         LAI         "I"             < TYPE 'FILM DIGITAL'.
         STBY        SI1+IINDIC      < L'ITEM COURANT RECOIT LE TYPE
                                     < FILM DIGITAL LORSQUE L'ON
                                     < SORT DE SC SANS ERREUR ...
                                     < (CECI EST FAIT DANS LA ZONE DE
                                     < SAUVEGARDE DE L'EN-TETE DE
                                     < L'ITEM , AVANT QUE CELLE-CI NE
                                     < SOIT RESTAUREE !!!)
         LAI         0               < A=CONDITION DE RETOUR OK (0).
GOBAC:   EQU         $
         STA         CDRET,W         < RANGEMENT DES CONDITIONS
                                     < DE RETOUR DE SC.
         STZ         MODCAL,W        < RAZ DU MODCAL A PRIORI.
<
< RESTAURATION DE L'EN-TETE DE L'ITEM1 :
< (AU CAS PAR EXEMPLE D'UN ALT-MODE MAL
< PLACE PENDANT LE CHARGEMENT D'1NE
< IMAGE VIDEO...)
<
         LA          ASI1
         LB          I1
         LXI         LNOM+1
         MOVE                        < RESTAURATION DE (I1) PAR (SI1).
<
< RETOUR A 4K MOTS :
<
         LAD         RELMEM
         SVC         0               < DEMANDE DE RETOUR A 4K MOTS.
         IF          ORDI-"T",XWOR%,,XWOR%
<
< DELETE A PRIORI DE LA BRANCHE DE SAUVEGARDE :
<
         WORD        '1E45           < RENVOIE : A=<IDESC>.
         ADRI        '30,A           < CONVERSION ASCI DE L'<IDESC>.
         STBY        2,W             < ET MISE EN TETE DE LA BRANCHE.
         LAD         DELSGN
         SVC         0               < DELETE DE LA BRANCHE DE SAU-
                                     < VEGARDE ; LE RETOUR EST
                                     < INDIFFERENT !!!
         LAI         '20
         STBY        2,W             < SUPPRESION DE L'IDESC>.
XWOR%:   VAL         0
<
< RETOUR A L'APPELANT (GE/EI) :
<
         LX          WHOCAL          < X=NUMERO DE LA BRANCHE DE
                                     < RETOUR DE SC.
         LA          &NCALL          < RECUPERATION DU NOM DE LA
                                     < BRANCHE DE RETOUR DE SC.
         STA         0,W             < LE NOM DE 'GE' EST MIS EN TETE
                                     < DE LA BRANCHE D'OVERLAY.
         LAI         '06             < NVP DE 6OAD SOUS :SYS.
         STBY        DEMSGN          < MISE DE DEMSGN EN MODE DE
                                     < LOAD SOUS :SYS.
         LAD         DEMSGN
         BSR         AOVL            < TENTATIVE DE CHARGEMENT DE 'GE'.
         JMP         E10             < ET VERS LE CCI SI ERREUR.
<
<
<        E R R E U R  :
<
<
ERREUR:  EQU         GOCCI
<
<
<        D E M A N D E   D E   P A U S E  :
<
<
<        ARGUMENT :
<                    SAVE EST LE CODEM DE LA DEMANDE 'SLEEP'.
<
<
PAUSE:   EQU         $
         LAD         SLEEP
         BSR         ASVC            < MISE EN ATTENTE.
         RSR                         < ET C'EST TOUT ...
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        A P P E L   E T   R E T O U R   D E   ' T I '  :
<
<
<        FONCTION :
<                      CE MODULE ASSURE L'APPEL ET LE
<                    RETOUR DU PROCESSEUR 'TI' ; ON PEUT
<                    AINSI , DANS 'SC' EFFECTUER TOUTES
<                    LES OPERATION S SUR IMAGE DE 'TV'.
<                      DANS CE CAS ON SAUVEGARDE POUR
<                    CHAQUE UTILISATEUR UNE COPIE DE
<                    'SC' (A CAUSE DES PPILES ET DES
<                    CONSTANTES DE TRAVAIL) , DONT LE
<                    NOM EST :
<                                    'SC<SPACE><SPACE><IDESC><SPACE>'.
<
<
<        A P P E L   ' T I '  :
<
<        TRANSMISSION DES ARGUMENTS :
<                    MODCAL=INDEX CARACTERE COURANT ,
<                           BIT0=0 : L'APPEL DE SC A EU LIEU PAR GE ,
<                           BIT0=1 : L'APPEL DE SC A EU LIEU PAR EI ,
<                    CDRET=RELAI VERS L'ITEM COURANT.
<
CALLTI:  EQU         $
         WORD        '1E45           < RENVOIE : A=<IDESC>.
         ADRI        '30,A           < CONVERSION ASCI DE L'IDESC.
         STBY        2,W             < MISE DE L'IDESC EN TETE
                                     < DE LA BRANCHE D'OVERLAY.
                                     < LE NOM DE LA BRANCHE EST DONC :
                                     < 'SC<SPACE><SPACE><IDESC><SPACE>'.
<
<        A T T E N T I O N  :
<                      ON FAIT CDRET#0 AVANT DE CHANGER
<                    LA VALEUR DE L'ENTRY POINT DE SC ;
<                    EN EFFET , TI RENVOIE UN CDRET=0 ;
<                    AINSI SI UN ALT-MODE EST FRAPPE PENDANT
<                    CALLTI , ON FERA UN ENTRY VERS 'RETURN'
<                    QUE L'3N POURRA DISTINGUER D'UN RETOUR
<                    DE TI PAR LA VALEUR DE CDRET !!!
<
         LA          AIC
         STA         CDRET,W         < TRANSMISSION DU RELAI VERS
                                     < L'ITEM COURANT PAR CDRET.
         LA          ARET
         STA         &AENT           < MISE EN PLACE DU POINT D'ENTREE
                                     < SECONDIARE A UTILISER LORS
                                     < LORS DU RETOUR DE 'TI'.
CALL1:   EQU         $
         LAD         DELSGN
         SVC         0               < DELETE PRELIMINAIRE DE LA
                                     < BRANCHE DE SAUVEGADRE.
         STZ         OENTRY          < SUPPRESSION A PRIORI DES SOUS-
                                     < PROGRAMMES EN OVERLAY ; EN EFFET
                                     < IL Y A DE GRANDES CHANCES QUE
                                     < 'TI' ECRASE L'ITEM1 !!!
         LAI         '04
         STBY        DEMSGN          < DEMSGN EST MISE EN MODE STORE.
         LAD         DEMSGN
         SVC         0               < SAUVEGARDE DE L'OVERLAY COU-
                                     < RANT DE SC , SOUS L'IDESC ...
         LA          WHOCAL          < RECUPERATION DE LA NATURE DE
                                     < L'APPELANT DE SC.
         SCRS        1               < ON MET L'APPELANT DE SC EN BIT0
                                     < DU REGISTRE A.
         OR          IEG             < ET ON CONCATENE L'INDEX COURANT.
         STA         MODCAL,W        < TRANSMISSION DE L'INDEX
                                     < CARACTERE COURANT A 'TI'.
         LA          NTI
         STA         0,W             < MISE EN PLACE DU NOM DE 'TI'.
         LAI         '20
         STBY        2,W             < SUPPRESSION DE L'IDESC.
         LAI         '06             < DEMSGN EST MISE EN MODE
         STBY        DEMSGN          < LOAD SOUS :SYS.
         LB          NOMARG          < TRANSMISSION PAR LE REGISTRE B
                                     < DE L'EVENTUEL NOMARG A 'TI'.
         LAD         DEMSGN
         BSR         AOVL            < TENTATIVE DE CHARGEMENT DE 'TI'.
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI SI L'APPEL
                                     < DE 'TI' EST IMPOSSIBLE.
         LA          NSC
         STA         0,W             < RESTAURE L'EN-TETE DE L'OVERLAY
         JMP         CALLTI          < AVANT D'IETER L'APPEL DE TI.
<
<        R E T O U R   D E   ' T I '  :
<
         WORD        N1              < VALEUR DE LA BASE C.
         WORD        LOC+'80         < VALEUR DE LA BASE L.
         WORD        BRANCH          < VALEUR DE LA BASE W.
RETURN:  EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATION DES 3 BASES.
         LA          APILE
         LR          A,K             < INITIALISATION DU REGISTRE
                                     < K SUR LA PILE DE SODOME.
         LA          MODCAL,W
         STA         IEG             < MISE A JOUR DE L'INDEX DE
                                     < RECUPERATION DES CARACTERES.
         STZ         MODCAL,W        < REINITIALISATION DE MODCAL.
         LAI         '20
         STBY        2,W             < SUPPRESSION DE L'IDESC EN TETE.
         LA          ASCENE
         STA         &AENT           < RESTAURATION DU POINT D'ENTREE
                                     < PRINCIPAL DE 'SC'.
         CPZ         CDRET,W         < EST-CE UN VRAI RETOUR DE TI ???
         JNE         GOGER           < NON , ILS'AGIT D'UN
                                     < ALT-MODE RECU PENDANT CALLTI ;
                                     < ON RETOURNE DONC A GE ....
         BR          ALOOP           < VERS LA BOUCLE DE L'INTERPRETEUR.
XWOR%:   VAL         0
         PAGE
         IF          ORDI-"S",XWOR%,,XWOR%
<
<        A P P E L   D E   L A   B R A N C H E   '   A '.
<
<          C'EST L'EX-TI QUI ETAIT UTILISE SUR T1600. EN SOLAR, SC CHARGE
<        AU LIEU DE TI, LA BRANCHE ' A' , JUSTE DERRIERE L'IMAGE RESIDENTE.
<          CETTE BRANCHE EST CHARGEE UNE FOIS POUR TOUTES, ELLE EXIGE DE
<        SC QU'IL PASSE A 10K.
<          A CHAQUE APPEL, SC LUI PASSE DES ARGUMENTS PAR REGISTRES:
<
<                    - 'B' INDEX IMAGE ARGUMENT EVENTUELLE.
<                    - 'X' INDEX ITEM COURANT.
<                    - 'Y' INDEX CARACTERE COURANT.
<
<        ET L'APPELLE PAR 'BSR'. AU RETOUR, ' A' FOURNIT LE NOVEL INDEX
<        COURANT DANS 'A'.
<
CALLTI:  EQU         $
         CPZ         IOVA            < ' A' A-T-IL DEJA ETE CHARGE ?
         JE          CALLA1
<
< DEMADE 10 K MOTS ET CHARGEMENT DE ' A'.
<
         LAD         DEMM10
         SVC         0
<
         LRM         A,B,X
         WORD        OVA             < ADRESSE DESCRIPTION EN-TETE DE ' A'.
         WORD        IMAG+LIMAG      < C'EST LA QUE SERA IMPLANTE ' A'.
         WORD        XOVA            < LONGUEUR EN-TETE DE ' A'.
         MOVE
< ON PEUT MAINTENANT FAIRE LA DEMANDE DE CHARGEMENT.
         LAD         DEMOVA
         SVC         0
         JE          CALLA2
         WORD        '1E16
         JMP         CALLTI          < ON REESSAIE...
CALLA2:  EQU         $
         STZ         IOVA            < ' A' EST CHARGE UNE FOIS POUR TOUTES.
CALLA1:  EQU         $
<
< TRANSMISSION DES ARGUMENTS.
<
         LB          NOMARG          < INDEX IMAGE ARGUMENT EVENTUELLE.
         LX          AIC             < ADRESSE ITEM COURANT.
         LY          IEG             < INDEX CARACTERE COURANT.
<
< APPEL.
<
         BSR         ARUNA
         LRM         C,L,W,K
         WORD        N1
         WORD        LOC+'80
         WORD        BRANCH
         WORD        PILE-1
<
< RETOUR DE ' A' : STOCKER LE NOUVEL INDEX COURANT.
<
         STA         IEG
         BR          ALOOP           < VERS LA BOUCLE DE L'INTERPRETEUR.
XWOR%:   VAL         0
         PAGE
<
<
<        M I S E   D ' U N   P O I N T   A   0  :
<
<
RESET:   EQU         $
         PSR         X,C             < SAVE X ET C.
         ADR         B,X             < CAHNGEMENT DE QUADRILLAGE.
         LR          Y,A
         ADR         B,A             < CHANGEMENT DE QUADRILLAGE.
         SLLS        4               < CONVERSION DE Y EN UN NUMERO DE MOT.
         ADR         A,C
         LR          X,A
         SLRS        4               < CONVERSION DE X EN UN NEMERO DE
                                     < MOT.
         ADR         A,C
         LAI         'F              < MASQUE DE MODULO 16.
         ANDR        A,X             < CALCUL DU NUMERO DE BIT.
         LA          0,C             < ACCES AU MOT CONTENAT LE POINT.
         RBT         0,X             < MORT DU POINR M(X,Y).
         STA         0,C             < MAJ DE L'IMAGE VIDEO.
         PLR         X,C             < RESTAURE X ET C.
         RSR
         PAGE
<
<
<        M I S E   D ' U N   P O I N T   A   1  :
<
<
SET:     EQU         $
         PSR         X,C             < SAVE LA COORDONNEE X ET
                                     < L'@IMAGE VIDEO.
         ADR         B,X             < CHANGEMENT DE QUADRILLAGE.
         LR          Y,A
         ADR         B,A             < CHANGEMENT DE QUADRILLAGE.
         SLLS        4               < CONVERSION DE LA
                                     < COORDONNEE Y EN UN
                                     < NUMERO DE MOT.
         ADR         A,C
         LR          X,A
         SLRS        4               < CONVERSION DE LA COORDONNEE
                                     < X EN UN NUMERO DE MOT.
         ADR         A,C
         LAI         'F              < MASQUE DE MODULO 16.
         ANDR        A,X             < X=NUMERO DU POINT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT.
         SBT         0,X             < NAISSANE DE M(X,Y).
         STA         0,C             < MAJ DE LHIMAGE VIDEO.
         PLR         X,C             < RESTAURE X ET C.
         RSR
         PAGE
<
<
<        I N V E R S I O N   D ' U N   P O I N T  :
<
<
INVER:   EQU         $
         PSR         X,C
         ADR         B,X             < CHANGEMENT DE QUADRILLAGE.
         LR          Y,A
         ADR         B,A             < CHANGEMENT DE QUADRILLAGE.
         SLLS        4               < CONVERSION Y EN NUMERO-MOT.
         ADR         A,C
         LR          X,A
         SLRS        4               < CONVERSION X EN NUMERO-MOT.
         ADR         A,C
         LAI         'F              < MASQUE MODULO 16.
         ANDR        A,X             < CALCUL DU NUMERO DE BIT.
         LA          0,C             < ACCES AU BON MOT ...
         IBT         0,X             < INVERSION DU BON POINT.
         STA         0,C             < MAJ DE L'IMAGE.
         PLR         X,C
         RSR
         PAGE
<
<
<        T E S T   D E S   V O I S I N S   D ' U N   P O I N T  :
<
<
<        FONCTION :
<                      CETTE ROUTINE CALCULE LE NBRE DE
<                    VOISINS IMMEDIATS D'UN POINT
<                    VIDEO Y COMPRIS CELUI-CI S'IL
<                    EXISTE.
<
<
<        RESULTAT :
<                    A=0 : LE POINT EXISTE ET EST A 1 ,
<                     #0 : LE POINT N'EXISTE PAS (HORS L'ESPACE) ,
<                          OU BIEN IL EST A 0 ,
<                    VOISIN<--(VOISIN)+1 SI (A)=0.
<
<
TEST:    EQU         $
         LR          X,A
         ANDI        'FF00           < AFIN DE VOIR SI (X) EST DANS
                                     < LE SEGMENT (0,255).
         JANE        TEST1           < LE POINT N'EXISTE PAS.
         LR          Y,A
         ANDI        'FF00           < POUR VOIR SI Y EST DANS LE
                                     < SEGMENT (0,255).
         JANE        TEST1           < LE POINT N'EXISTE PAS.
<
< CAS OU LE POINT (X,Y) EST DANS L'ESPACE :
<
         PSR         X,C             < SAVE LA COORDONNEE X ET L'
                                     < ADRESSE DE L'IMAGE VIDEO.
         LR          Y,A
         IF          CNMPL-16,,X100,
         IF          ATTENTION : CNMPL EST MAUVAIS !!!
X100:    VAL         0
         SLLS        4               < CONVERSION DE (Y) EN UN NUMERO DE MOTS.
         ADR         A,C             < PROGRESSION @IMAGE.
         LR          X,A             < COORDONNEE X DU POINT.
         SLRS        4               < CONVERSION EN UN NUMERO DE MOT.
         ADR         A,C             < C=@MOT CONTENANT LE POINT.
         LAI         'F              < MASQUE DE MODULO 16.
         ANDR        A,X             < X=NUMERO DE BIT DANS LE MOT (C).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         TBT         0,X             < TEST DU POINT (X,Y).
         LAI         -1              < A#0 A PRIORI.
         ADCR        A               < A=0 SI LE POINT EST A 1.
         PLR         X,C             < RESTAURE C ET X.
         JANE        TEST1           < CAS OU LE POINT EST A 0.
         IC          VOISIN          < SI LE POINT EST A 1 , ON
                                     < LE COMPTABILISE DANS VOISIN.
<
< SORTIE DE LA ROUTINE :
<
TEST1:   EQU         $
         RSR
         PAGE
<
<
<        G E N E R A T I O N   D ' U N E   S O C I E T E  :
<
<
<        FONCTION :
<                    1- ENTRY=0 :
<                      LES SOCIETES VIVENT EN BASCULE SUR 2
<                    QUADRILLAGE IMBRIQUES ET CONTENUS
<                    DANS UNE IMAGE VIDEO . CETTE ROUTINE FAIT PASSER
<                    D'UNE GENERATION A LA SUIVANTE ,
<                    EN CHANGEANT DE QUADRILLAGE.
<
<                    2- ENTRY#0=@ITEM1/@ITEM2 :
<                      DANS CES CONDITIONS, L'IMAGE COURANTE
<                    EST EXPLOREE POINT A POINT, ET EN
<                    CHACUN DE CEUX-CI, ON APPELLE LA ROUTINE
<                    SITUEE EN OVERLAY DANS LA BIBLIOTHEQUE ($).
<
<
<        BASCUL :
<                    BASCULE=0 : PAS DE BASCULE DE QUADRILLAGE.
<                    BASCULE=1 : QUADRILLAGE PAIR VERS QUADRILLAGE IMPAIR ,
<                    BASCUL=-1 : IMPAIR VERS PAIR.
<
<
LIFE:    EQU         $
         LAD         STACK-1
         XR          A,K             < SAVE LE K DE SODOME , ET
                                     < REINITIALISE LE REGISTRE K.
         PSR         A,C             < SAVE LE K DE SODOME DANS A ,
                                     < LA BASE C DE L'INTERPRETEUR.
         LA          AIMAG
         LR          A,C             < C=@IMAGE VIDEO.
         CPZ         OENTRY          < QUE FAIRE ???
         JE          GOLIF           < ENTRY=0 : JEU DE LA VIE.
<
< APPEL DES OVERLAYS :
<
         LBI         0               < PAS DE BASCULE SUR LE QUADRILLAGE
         LYI         0               < INITIALISATION COORDONNEE Y.
OV2:     EQU         $
         LXI         0               < INITIALISATION COORDONNEE X.
OV1:     EQU         $
         PSR         B,W             < SAVE BASCUL ET @BRANCH.
         PSR         X,Y,C,L         < PAR EXTREME PRUDENCE.
         BSR         &OENTRY         < APPEL DE LA ROUTINE EN OVERLAY.
         PLR         X,Y,C,L         < RESTAURE...
         PLR         B,W             < RESTAURE BASCUL ET @BRANCH.
         ADRI        1,X             < SINON, PROGRESSSION DE X.
         LR          X,A
         CPI         CNMPL*16-1      < ET VALIDATION.
         JLE         OV1             < OK
         ADRI        1,Y             < PROGRESSION COORDONNEE Y.
         LR          Y,A
         CPI         1024/DY-1       < ET VALIDATION.
         JLE         OV2             < OK.
         LXI         0               < C'EST FINI : RETOUR OK : X=0.
         JMP         RETLIF          < ET ON S'EN VA ...
<
< JEU DE LA VIE :
<
GOLIF:   EQU         $
         LB          BASCUL          < B=INDICATEUR DE QUADRILLAGE COURANT.
<
< PARCOURS DU QUADRILLAGE COURANT :
<
EE1:     EQU         $
         LYI         0               < Y=COORDONNEE Y INITIALE.
         CPZR        B               < TEST DU QUADRILLAGE COURANT.
         ADCR        Y               < Y=0/1 SUIVANT LE QUADRILLAGE.
<
< PARCOURS D'UNE LIGNE DU QUADRILLAGE :
<
EE2:     EQU         $
         LXI         0               < X=COORDONNEE X INITIALE.
         CPZR        B               < TEST DU QUADRILLAGE COURANT.
         ADCR        X               < X=0/1 SUIVANT LE QUADRILLAGE.
<
< TEST DU VOISANNIAGE DU POINT COURANT (X,Y).
<
EE6:     EQU         $
         STZ         VOISIN          < INITIALISATION DU COMPTEUR.
         LA          DELX
         ADR         A,X
         BSR         ATEST           < TEST DU POINT M(X+1,Y).
         LA          DELY
         SBR         A,Y
         BSR         ATEST           < TEST DU POINT M(X+1,Y-1).
         LA          DELX
         SBR         A,X
         BSR         ATEST           < TEST DU POINT M(X,Y-1).
         LA          DELX
         SBR         A,X
         BSR         ATEST           < TEST DU POINT M(X-1,Y-1).
         LA          DELY
         ADR         A,Y
         BSR         ATEST           < TEST DU POINT M(X-1,Y).
         LA          DELY
         ADR         A,Y
         BSR         ATEST           < TEST DU POINT M(X-1,Y+1).
         LA          DELX
         ADR         A,X
         BSR         ATEST           < TEST DU POINT M(X,Y+1).
         LA          DELX
         ADR         A,X
         BSR         ATEST           < TEST DU POINT M(X+1,Y+1).
         LA          DELX
         SBR         A,X
         LA          DELY
         SBR         A,Y
         BSR         ATEST           < TEST DU POINT M(X,Y).
         JAE         EE3             < LE POINT M(X,Y) EST A 1.
<
< ACS OU M(X,Y) EST A 0 (IL NE PEUT ETRE INEXISTANT!!!) :
<
         LA          VOISIN
         CPI         3               < LE POINT M(X,Y) QUI EST A 0 A-T'IL
                                     < 3 VOISINS EXACTEMENT ???
         JNE         EE4             < NON RIEN A FAIRE.
<
< CAS DE 3 VOISINS : NAISSANCE DE M(X,Y) :
<
EE7:     EQU         $               < CAS DE LA SURVIE DE M(X,Y).
         BSR         ASET            < MISE DU POINT (X,Y) A 1.
         JMP         EE4             < PASSAGE AU POINT SUIVANT.
<
< CAS OU M(X,Y) EST A 1 :
<
EE3:     EQU         $
         LA          VOISIN          < ACCES AU NOMBRE DE VOISINS
                                     < Y COMPRIS M(X,Y) LUI-MEME.
         CPI         4               < Y-EN-A-T'IL PLUS DE 4 ???
         JG          EE5             < OUI , M(X,Y) DOIT MOURUR.
         CPI         2               < EN-A-T'IL MOINS DE 2 ???
         JG          EE7             < NON , IL VA SURVIVRE.
<
< MORT DE M(X,Y) PAR MANQUE DE RELATIONS OU PAR ETOUFFEMENT :
<
EE5:     EQU         $
         BSR         ARESET          < MISE DU POINT (X,Y) A 0.
<
< CHANGEMENT DE POINT COURANT :
<
EE4:     EQU         $
         LA          DELX
         ADR         A,X
         LR          X,A             < VALIDATION DU NOUVEL X.
         ANDI        'FF00
         JAE         EE6             < OK , ON EST SUR LA LIGNE.
         LA          DELY            < SINON , CHANGEMENT DE LIGNE.
         ADR         A,Y
         LR          Y,A             < VALIDATION DE Y.
         ANDI        'FF00
         JAE         EE2             < OK , ON EST DANS L'IMAGE.
<
< SINON ON CHANGE DE QUADRILLAGE ET ON S'EN VA :
<
         NGR         B,A             < INVERSION DE L'INDICATEUR.
         STA         BASCUL          < ET MAJ DE CELUI-CI.
         LX          ALIMAG          < X=LONGUEUR-MOTS DE L'IMAGE.
         LY          MAND5           < QUADRILLAGE IMPAIR A PRIORI.
         JAL         EE8             < OK , C'ETAIT B=1.
         LY          MANDA           < QUADRILLAGE PAIR SI B=-1/0.
<
< REINITIALISATION DE L'UN DES 2 QUADRILLAGES :
<
EE8:     EQU         $
         LA          &XIMAG          < ACCES UN MOT DE L'IMAGE.
         ANDR        Y,A             < CONSERVATION QUADRILLAGE (Y).
         STA         &XIMAG          < ET MAJ DE L'IMAGE.
         JDX         EE8             < AU MOT SUIVANT.
RETLIF:  EQU         $
         PLR         A,C             < RESTAURE LE C DE L'INTERPRETEUR ,
         LR          A,K             < ET RESTAURE LE K DE SODOME.
         RSR                         < RETOUR ...
<
<
<        P A S S A G E   A U   Q U A D R I L L A G E   2  :
<
<
ESP2:    EQU         $
         LBI         -1              < POUR FAIRE BASCUL=-1.
<
<
<        R E T O U R   A U   Q U A D R I L L A G E   I N I T I A L  :
<
<
<        ARGUMENT :
<                    B=1.
<
<
ESP1:    EQU         $
         STB         BASCUL          < BASCUL <-- 1.
         RSR
<
<
<        P A S   D E   B A S C U L E   D E
<        Q U A D R I L L A G E  :
<
<
<        ARGUMENT :
<                    B=0.
<
<
NBASC:   EQU         ESP1
<
<
<        C H A N G E M E N T   D E S   P A S   D E   X   E T   D E   Y :
<
<
PASX:    EQU         $
         LA          CTTE            < RECUPERATION CTTE COURANTE.
         ADR         A,A             < QUE L'ON DOUBLE AFIN DE
                                     < PARCOURIR CORRECTEMENT LES
                                     < 2 QUADRILLAGES.
         STA         DELX            < MAJ DU PAS DE X.
         RSR
PASY:    EQU         $
         LA          CTTE            < RECUPERATION DE CTTE COURANTE.
         ADR         A,A             < QUE L'ON DOUBLE.
         STA         DELY            < ET MAJ DU PAS DE Y.
         RSR
         PAGE
<
<
<        T R A N S F O R M A T I O N   I T E R A T I V E   I M A G E  :
<
<
<        I N C R E M E N T A T I O N   I M A G E  :
<
<
<        FONCTION :
<                    1- SI QUADRILLAGE 1 (BASCUL=+1) : ON INCREMENT
<                    CHAQUE MOT DE L'IMAGE DE (CTTE) ,
<                    2- SI QUADRILLAGE 2 (BASCUL=-1) : ON DECREMENTE
<                    CHAQUE MOT DE L'IMAGE DE (CTTE).
<
<
IPLUS:   EQU         $
         LA          BASCUL
         MP          CTTE            < B=+/-(CTTE).
         LX          ALIMAG          < X=NBRE DE MOTS D'UNE IMAGE.
IPLUS1:  EQU         $
         LA          &XIMAG          < A=MOT COURANT DE L'IMAGE.
         ADR         B,A             < INCREMENTATION DE L'IMAGE.
         STA         &XIMAG          < MAJ DE L'IMAGE.
         JDX         IPLUS1          < AU MOT PRECEDENT.
         RSR                         < ET C'EST TOUT ....
<
<
<        D E C A L A G E   C I R C U L A I R E  :
<
<
<        FONCTION :
<                    1- SI QUADRILLAGE 1 (BASCUL=+1) : DECALAGE
<                    A DROITE CIRCULAIRE DE CHAQUE MOT DE
<                    L'IMAGE DE (CTTE) BITS ,
<                    2- SI QUADRILLAGE 2 (BASCUL=-1) : IDEM A GAUCHE.
<
<
IROT:    EQU         $
         LA          &AOP            < ACCES A L'INSTRUCTION VARIABLE.
         RBT         8               < DECALAGE A DROITE A PRIORI.
         CPZ         BASCUL          < GAUCHE OU DROITE ???
         JG          IROT1           < A DROITE : OK.
         SBT         8               < ET BIEN NON , A GAUCHE.
IROT1:   EQU         $
         STA         &AOP            < MAJ INSTRUCTION VARIABLE.
         LY          CTTE            < Y=AMPLITUDE ABSOLUE DU
                                     < DECALAGE.
         LX          ALIMAG          < X=NBRE DE MOTS A FAIRE TOURNER.
IROT2:   EQU         $
         LA          &XIMAG          < ACCES AU MOT COURANT.
         XR          X,Y
OP:      SCRS        0,X             < ROTATION DE +/- (CTTE).
         XR          X,Y
         STA         &XIMAG          < MAJ MOT COURANT.
         JDX         IROT2           < AU MOT PRECDENT.
         RSR                         < ET C'EST TOUT.
         PAGE
<
<
<        E R E U R S   D ' E X E C U T I O N  :
<
<
<        FONCTION :
<                      METTRE EN EXPOSANT SI CELA EST
<                    POSSIBLE LE CARACTERE AYANY ETE
<                    RECONNU COMME EN ERREUR.
<
<
<        RETOUR TOUJOURS EN ERREUR (X#0).
<
<
CARUP:   EQU         $
         LA          IEG             < A=INDEX D'EXECUTION.
         LR          A,X             < A NOTER : X=(IEG)#0 !!!
         CP          NCP             < EST-CE UN HORS LA PAGE ???
         JGE         E510            < OUI , RIEN A FAIRE ...
         ADRI        -1,X            < NON , RETOUR SUR LE CARACTERE
                                     < PRECEDENT.
         LBY         &AIC            < A=CARACTERE ERRONE.
         ORI         '80             < POSITIONNEMENT DU BIT0.
         STBY        &AIC            < ET MAJ DE CE CARACTERE.
E510:    EQU         $
         RSR                         < RETOUR AVEC (X)#0 9
         PAGE
<
<
<        R E C U P E R A T I O N   D ' U N E   C O N S T A N T E  :
<
<
<        ARGUMENT :
<                    Y=CARACTERE COURANT ; SI Y='@' , LA
<                      CONSTANTE CALCULEE SERA (CTTE).
<
<
<        RESULTAT :
<                    X=0 : SAVE=CONSTNATE CHERCHEE ,
<                    X#0 : ERREUR.
<
<
REPET1:  EQU         $
         LXI         1               < ERREUR A PRIORI.
         LR          Y,A             < A=CARACTERE COURANT.
         ADRI        -'30,A          < CONVERSION BINAIRE
         JALE        E17             < ERREUR : NON RECONNU.
         CPI         9               < EST-CE UN CHIFFRE DE 1 A 9 ???
         JLE         E18             < OUI , OK ....
         ADRI        -'41+'39+1,A    < TRANSLATION PAR RAPPORT A 'A'.
         CPI         9               < VALIDATION.
         JL          E17             < ERREUR , NON RECONNU.
         JG          E308            < OK.
<
< CAS DU CARACTERE '@' :
<
         LA          CTTE            < LA CONSTANTE CHERCHEE EST (CTTE).
E308:    EQU         $
E18:     EQU         $
         STA         SAVE            < OK , LA CONSTANTE CHERCHEE
                                     < EST CORRECTE.
         LXI         0               < DONC RETOUR OK.
E17:     EQU         $               < SORTIE DE LA ROUTINE.
         RSR
<
<
<        T R A N S M I S S I O N   C O N S T A N T E  :
<
<
<        ARGUMENT :
<                    SAVE=CONSTANTE.
<
<
<        RESULTAT :
<                    Y=CONSTANTE CHERCHEE.
<
<
REPET2:  EQU         $
         LY          SAVE
         RSR                         < ON SE MOQUE DE (X) ....
         PAGE
<
<
<        M O D I F I C A T I O N   C T T E  :
<
<
SCTTE:   EQU         $
         LA          SAVE
         STA         CTTE
         RSR                         < RETOUR INDIFFERENT.
         PAGE
<
<
<        E D I T I O N   D ' U N   M E S S A G E  :
<
<
<        FONCTION :
<                      EDITER UN MESSAGE DONT LE 1ER
<                    CARACTERE EST A L'INDEX (SAVE) , ET
<                    LE DERNIER A L'INDEX (IEG)-1.
<
<
TEXTE:   EQU         $
         LA          IEG
         ADRI        -1,A            < RETOUR SUR LE '!'.
         SB          SAVE            < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2        < MAJ DE DEMOUT.
         LA          AIC
         SLLS        1
         AD          SAVE            < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1        < MAJ DE DEMOUT.
         LAD         DEMOUT
         BSR         ASVC            < EDITION DU MESSAGE.
         JNE         E21             < CAS DES CTRL-X-OFF.
         RSR                         < OK , RETOUR.
<
<        S O R T I E S   E N   C T R L - X - O F F  :
<
E21:     EQU         $
         ADRI        -1,K            < ANNULATION DU BSR D'APPEL.
         LA          AGON22          < A=@NOEUD DES CTRL-X-OFF.
         BR          XOFF            < VERS UN RETOUR DIRECT A
                                     < LA BOUCLE DE L'INTERPRETEUR.
         PAGE
<
<
<        E F F A C E M E N T   E C R A N  :
<
<
ERASE:   EQU         $
         LAD         DERASE
         BSR         ASVC
         LAD         DERASF
         BSR         ASVC            < ON EFFACE AUSSI LA VISU
                                     < D'EMISSION SI ELLE EXISTE ...
         RSR
         PAGE
<
<
<        M A K E - C O P Y  :
<
<
<        FONCTION :
<                      FAIRE UN HARD-COPY SUR LA
<                    VISU D'EMISSION.
<
<
<        A T T E N T I O N  :
<                      LA TEMPORISATION EST A LA CHARGE DU
<                    PROGRAMME (PRIMITIVE '!'), AFIN DE
<                    PERMETTRE DES HARD-COPIES DE L'ECRAN,
<                    AINSI QUE DES TELECOMMANDES DE CAMERAS...
<
<
<        RETOUR EN ERREUR SI LA VISU D'EMISSION N'EST
<        PAS ASSIGNEE !!!
<
<
MCOPY:   EQU         $
         LAD         COPY
         SVC         0               < ENVOI DE LA DEMANDE DE HARD-COPY.
MCOPY1:  EQU         $
         RSR                         < RETOUR AVEC (X).
         PAGE
<
<
<        C O M M A N D E   D U   4 0 1 4  :
<
<
<        FONCTION :
<                      PERMET D'ENVOYER LES CARACTERES
<                    DE CHANGEMENT DE MODE GARPHIQUE
<                    AU T4014.
<
<
<        ARGUMENT :
<                    Y=CARACTERE A ENVOYER APRES CODAGE.
<
<
COMAND:  EQU         $
         ADRI        '20,Y           < TRANSLATION MINUSCULE DU
                                     < <CARACTERE> ARGUMENT.
         LA          DIRECT+1
         ANDI        'FF00           < OCTET0(A)='ESC'.
         ORR         Y,A             < A='ESC'-<CARACTERE COMMANDE>.
         STA         DIRECT+1        < MAJ DE LA DEMANDE.
E1700:   EQU         $
         LAD         DIRECT
         SVC         0               < ECRITURE DIRECTE SUR LA VISU
                                     < D'EMISSION.
         JE          E1701           < OK.
<
< CHANGEMENT DE VISU D'EMISSION :
<
         LAI         '02
         STBY        DIRECT          < ON REMPLACE LE NVP '0B PAR
                                     < LE NVP '02 (VISU OUT).
         JMP         E1700           < VERS UNE NOUVELLE TENTATIVE.
E1701:   EQU         $
         RSR
         PAGE
<
<
<        S A V E   N O M   C H E R C H E  :
<
<
<        RESULTAT :
<                    SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE ,
<                    X EST INDIFFERENT.
<
<
SAVNOM:  EQU         $
         LA          IEG             < A=INDEX COURANT.
         STA         SAVE            < QUE L'ON TRANSMET PAR SAVE.
         RSR                         < QUELQUE SOIT (X).
<
<
<        L A N C E M E N T   P R O G R A M M E  :
<
<
<        ARGUMENT :
<                    SAVE=INDEX DE LA 1ERE COMMANDE DU
<                         PROGRAMME APPELE (SUIVANT '(' ).
<
<
<        RESULTAT :
<                    X#0 TOUJOURS.
<
<
START:   EQU         $
         LX          SAVE            < A NOTER (X)#0 !!!
         STX         IEG             < CHANGEMENT DE L'INDEX COURANT ...
         RSR
<
<
<        A C C E S   A   U N   C A R A C T E R E  :
<
<
<        FONCTION :
<                      RECUPERER LES NOMS DE PROGRAMME
<                    APPELE PAR CARACTERE.
<
<
<        ARGUMENT :
<                    X=INDEX DU CARACTERE DEMANDE.
<
<
<        RESULTAT :
<                    A=CARACTERE SI OK ,
<                    X<--(X)+1 SI OK ,
<                    RETOUR DIRECT EN 'E81' SI LE CARACTERE
<                    DEMANDE EST HORS-LA PAGE.
<
<
GETCAR:  EQU         $
         LR          X,A
         CP          NCP             < VALIDATION DE L'INDEX ARGUMENT.
         JE          E80             < ERREUR : HORS LA PAGE ; A NOTER
                                     < QUE (X)>NCP N'EST APS UNE
                                     < ERREUR , C'EST UN SAUT D'UN
                                     < ITEM A L'AUTRE !!!
         LBY         &AIR            < A=CARACTERE COURANT LORSQUE
                                     < L'INDEX EST VALIDE.
         ADRI        1,X             < PROGRESSION DE L'INDEX.
         RSR
<
< CAS DES SORTIES EN ERREUR :
<
E80:     EQU         $
         ADRI        -1,K            < ANNULATION DU BSR D'APPEL.
         JMP         E81             < RETOUR DIRECT A L'APPELANT.
<
<
<        R E C H E R C H E   D ' U N   P R O G R A M M E  :
<
<
<        FONCTION :
<                      RECHERCHER LA DEFINITION D'UN
<                    PROGRAMME DONT ON SE DONNE LE NOM.
<
<
<        ARGUMENT :
<                    SAVE=INDEX DU 1ER CARACTERE DU NOM
<                         CHERCHE , C'EST-A-DIRE LE 1ER
<                         QUI SUIT LE '&' D'APPEL.
<
<
<        RESULTAT :
<                    X#0 : LE PROGRAMME CHERCHE N'EXISTE PAS.
<                    X=0 : LE PROGRAMME CHERCHE EXISTE , ET ALORS :
<                    SAVE=INDEX DE LA 1ERE COMMANDE DU
<                    PROGRAMME , SOIT LA 1ERE SUIVANT '('.
<
<
<        R E C H E R C H E   E N   B I B L I O T H E Q U E  :
<
<
LOOKPB:  EQU         $
         LX          OENTRY          < LA BIBLI COURANTE EST-ELLE 'P' ???
         CPZR        X
         JNE         E81             < TYPE 'P' : RECHERCHE PROGRAMME
                                     < REFUSEE; DE PLUS (X)#0...
         LA          SAVE
         AD          ACCEB           < L'INDEX D'ACCES AU NOM CHERCHE
                                     < EST TRANSLATE DE FACON A ETRE
                                     < ACCESSIBLE DE L'AUTRE ITEM.
         AD          ACCEB           < (TRANSLATION OCTET).
         STA         SAVE
         LA          AIC
         SB          ACCEB           < L'ITEM DE RECHERCHE N'EST
                                     < PAS L'ITEM COURANT.
         JMP         E200            < VERS LA RECHERCHE.
<
<
<        R E C H E R C H E   D A N S   L ' I T E M   C O U R A N T  :
<
<
LOOKP:   EQU         $
         LA          AIC             < LA RECHERCHE SE FAIT DANS L'ITEM
                                     < COURANT.
E200:    EQU         $
         STA         AIR             < MISE EN PLACE DU RELAI DE
                                     < RECHERCHE COURANT.
         RBT         0               < RAZ DU BIT INDEX.
         STA         F3              < SAVE TEMPORAIRE DE L'@ITEM
                                     < DE RECHERCHE DANS F3.
         LXI         0               < INITIALISATION DE L'INDEX DE
                                     < RECHERCHE.
<
< BOUCLE DE RECHERCHE :
<
E71:     EQU         $
         LAI         ">"             < A=OCTET DE DEBUT DE DEVINITION
                                     < D'UN NOM DE PROGRAMME.
         LB          F3              < B=@ZONE DE RECHERCHE.
         LY          NCP             < Y=NBRE D'OCTETS DANS LA ZONE.
         SBS                         < RECHERCHE DE '>' ???
         JC          E81             < '>' NON TROUVE.
         ADRI        1,X             < OK , ON A TROUVE '>' , ET ON
                                     < LE DEPASSE.
E422:    EQU         $
<
< CAS OU ON A TROUVE LA DEFINITION D'UN PROGRAMME :
<
         LY          SAVE            < ^INDEX NOM CHERCHE ,
                                     < X=INDEX NOM TROUVE.
<
< COMPRARAISON DU NOM CHERCHE Y) ET DU
< NOM DEFINI (X) :
<
E72:     EQU         $
         BSR         AGTCAR          < ACCES A UN CARACTERE DE L'ITEM.
         LR          A,B             < B=CARACTERE COURANT DE LA
                                     < DEFINITION.
         XR          X,Y
         BSR         AGTCAR          < A=CARACTERE COURANT DU NOM
                                     < CHERCHE.
         XR          X,Y
         CPR         A,B             < TEST DE COINCIDENCE ???
         JE          E72             < OK , ON CONTINUE A COMPARER.
<
< CAS D'UNE NON-COINCIDENCE :
<
         CPI         ";"             < EST-CE LA FIN DU NOM CHERCHE ???
         JNE         E71             < NON.
<
< CAS DE LA FIN DU NOM CHERCHE :
<
         LR          B,A
         CPI         "("             < EST-CE AUSSI LA FIN DU NOM
                                     < DEFINI ???
         JNE         E71             < NON.
<
< CAS OU ON A TROUVE LA BONNE DEFINITION :
<
E987:    EQU         $               < ENTRY APPEL DE L'ARGUMENT
                                     < FORMEL COURANT.
         STX         SAVE            < TRANSMISSION DE L'INDEX DU 1ER
                                     < CARACTERE DE LA DEFINITION.
         LXI         0               < RETOUR OK.
<
< SORTIE DE LA ROUTINE :
<
E81:     EQU         $               < ENTRY HORS-LA PAGE.
         RSR                         < RETOUR AVEC (X).
<
<
<        A P P E L   A R G U M E N T   F O R M E L   C O U R A N T  :
<
<
CARGF:   EQU         $
         LX          ARGF            < X=INDEX PRESUME DE LA 1ERE
                                     < PRIMITIVE DE L'ARGUMENT
                                     < FORMEL.
         CPZR        X               < EXISTE-T'IL ???
         JL          E81             < NON , ERREUR ....
         JMP         E987            < OUI , C'EST BON ...
<
<
<        R E N C O N T R E   A R G U M E N T
<        F O R M E L   C O U R A N T  :
<
<
DARGF:   EQU         $
         LX          IEG             < X=INDEX DE LA 1ERE PRIMITIVE
                                     < DE L'ARGUMENT FORMEL RECONTRE.
         STX         ARGF            < ET TRANSMISSION PAR ARGF.
         RSR                         < RETOUR AVEC (X)#0.
<
<
<        I N I T I A L I S A T I O N   D E   Y  :
<
<
<        ARGUMENT :
<                    B=VALEUR A DONNER A Y.
<
<
<        RESULTAT :
<                    Y=QUELQUE CHOSE.
<
<
SETY:    EQU         $
         LR          B,Y             < INITIALUSATION DE (Y).
         RSR
         PAGE
<
<
<        V A L I D A T I O N   B I B L I O T H E Q U E  :
<
<
<        ARGUMENT :
<                    Y=0 : BIBLI DE NOM VIDE ($;),
<                     =1 : BIBLI DE NOM NON VIDE.
<
<
CHECKB:  EQU         $
         LX          ACCEB
         NGR         X,X
         ADRI        IINDIC-LTN,X    < X=INDEX MOT DU TYPE.
         ADR         X,X             < X=INDEX-OCTET DU TYPE.
         STZ         OENTRY          < TYPE 'T' OU 'I' A PRIORI ...
         LBY         &AIC            < A=TYPE DE L'ITEM.
         LXI         0               < OK A PRIORI ...
         CPI         "P"             < EST-CE EN FAIT UN PROGRAMME ???
         JNE         CHECK2          < NON...
<
< ACS DES PROGRAMMES :
<
         LA          AIR             < ACCES A SON ADRESSE EN-TETE.
         RBT         0               < RAZ DU BIT INDEX.
         ADRI        LTN,A           < ON DEPASSE SON EN-TETE.
         STA         OENTRY          < OENTRY RECOIT LE POINT D'ENTREE
                                     < DE L'OVERLAY DE TRAITEMENT
                                     < DE L'IMAGE COURANTE.
                                     < DE PLUS : ENTRY#0.
         CPZR        Y               < $; OU PAS ???
         JNE         CHECK1          < APPEL BIBLI NORMAL...
<
< ACS DES APPELS OVERLAYS IMPLICITES :
<
         LAD         STACK-1
         XR          A,K             < SAVE A=@PILE, ET INITIALISE
                                     < K SUR UNE GROSSE PILE...
         PSR         A,W             < SAVE (K) ET @BRANCH...
         PSR         X,Y,C,L         < SAVE C, L AINSI QUE X ET Y PAR
                                     < COMPATIBILITE AVEC 'LIFE'.
         LA          AIMAG
         LR          A,C             < A=C=@IMAG.
         BSR         &OENTRY         < APPEL DE L'OVERLAY.
         PLR         X,Y,C,L
         PLR         A,W
         LR          A,K             < RESTAURE LE REGISTRE K.
         JMP         CHECK1          < ET C'EST FINI...
<
<
<        V A L I D A T I O N   P R O G R A M M E   I N I T I A L  :
<
<
CHECKT:  EQU         $
         LXI         IINDIC-LTN*2    < INDEX OCTET.
E205:    EQU         $
         LBY         &AIC            < A=TYPE DE L'ITEM COURANT.
         LXI         0               < TYPE RECONNU A PRIORI.
CHECK2:  EQU         $
         CPI         "T"             < EST-CE UN TEXTE ???
         JE          CHECK1          < OUI , OK.
         CPI         "I"             < EST-CE UN FILM DIGITAL ???
         JE          CHECK1          < OUI , OK.
         LXI         1               < ERREUR : TYPE NON RECONNU.
CHECK1:  EQU         $
         RSR                         < RETOUR AVEC (X).
         PAGE
<
<
<        C H A R G E M E N T   D E S   B I B L I O T H E Q U E S  :
<
<
<        ROLE DES BIBLIS $; :
<                      L'APPEL PAR $;, PROVOQUE UN APPEL
<                    IMPLICITE DU PROGRAMME EN OVERLAY
<                    S'IL EXISTE, C'EST-A-DIRE S'IL A
<                    ETE CHARGE PRECEDEMMENT...
<
<
<        ARGUMENTS :
<                    B=0 ,
<                    IEG=INDEX 1ER CARACTERE <NOM-BIBLIOTHEQUE>.
<
<
<        RESULTAT :
<                    Y=0 : APPEL PAR $;,
<                     =1 : APPEL DIFFERENT DE $;.
<
<
LOADB:   EQU         $
<
<        C O D A G E   D E   < N O M >  :
<
         LA          AIC             < A=@MOT ITEM COURANT.
         SB          ACCEB           < CHANGEMENT D'ITEM.
         ADRI        -LTN,A          < A=@EN-TETE DE L'AUTRE ITEM.
         STA         AIR             < AIR=RELAI EN-TETE AUTRE ITEM.
         SLLS        1               < A=@OCTET EN-TETE AUTRE ITEM.
         STA         DEMBIB+1        < MISE EN PLACE @OCTET DU BUFFER.
<
< INITIALISATION DU CODEUR :
<
         STZ         F3              < F3=0.
         LYI         3               < 3 MOTS A METTRE A 'SPACE'.
         LXI         0               < INDEX DE MISE A 'SPACE'.
         LAI         '20
         SBT         2               < A='SPACE''SPACE'.
E211:    EQU         $
         STA         &AIR
         ADRI        1,X
         CPR         X,Y
         JNE         E211
         LYI         -1              < Y=INDEX DE <NOMC>.
<        ON A ICI :
<                    B=0 (ARG1).
E500:    EQU         $
         BSR         AGTK            < A=K(SAV)).
         JE          E212            < RENCONTRE DU ';' DE FIN DE <NOM>.
         STBY        &AIR            < C(X)=K(SAVE).
         LR          Y,A
         CPI         2
         JL          E500            < RECUPERATION DE C(1) , C(2) , C(3).
<
< CODAGE DES CARACTERES K(4),...,K(L) :
<
E213:    EQU         $
         BSR         AGTK            < A=K(I) , I=4,...,L.
         JE          E214            < ARRET SUR ';' DE FIN DE <NOM>.
         ADR         Y,A             < PONDERATION DU CARACTERE (A) PAR
                                     < SA POSITION (Y).
         EORR        A,B             < CALCUL DE F2.
         ADR         A,B             < CALCUL DE F2.
         EOR         F3              < CALCUL DE F3.
         SCLS        1
         STA         F3              < CALCUL DE F3.
         JMP         E213            < PASSAGE AU CARACTERE SUIVANT.
<
< FIN DE CODAGE :
<
E214:    EQU         $
         LBY         F3
         AD          F3
         ANDI        '7F             < MISE DE F3 SUR 7 BITS.
         CPI         "Z"
         JLE         E215
         ADRI        -'30,A
E215:    EQU         $
         CPI         " "
         JG          E216
         ADRI        '30,A
E216:    EQU         $
         XR          A,B             < B=F3 ; A=F2.
         ANDI        '7F             < MISE DE F2 SUR 7 BITS.
         CPI         "Z"
         JLE         E217
         ADRI        -'30,A
E217:    EQU         $
         CPI         "0"
         JGE         E218
         ADRI        '20,A
         JMP         E217
E218:    EQU         $
         SWBR        A,A
         ORR         B,A
         LXI         2
         STA         &AIR            < STORE : C(5)=F2 ET C(6)=F3.
E212:    EQU         $
         LR          Y,A             < A=LONGUEUR DE <NOM>.
         JAE         NOMVID          < Y=0 : APPEL PAR $;.
         ADRI        '30,A           < CONVERSION ASCI.
         LXI         3
         STBY        &AIR            < STORE : C(4)=F1=LONGUEUR(<NOM>).
         LXI         6
         LAI         '04
         STBY        &AIR            < MISE EN PLACE D'UN EOT DE
                                     < FIN DE <NOMC>.
<
<        C H A R G E M E N T   D E   L A   B I B L I O T H E Q U E  :
<
         LYI         1               < Y=DECOMPTEUR DE TENTATIVES.
         LAI         5               < A=NVP DE LOAD SOUS <ACN>.
<
< BOUCLE DES TENTATIVES :
<
E206:    EQU         $
<        ON A ICI :
<                    A=NVP D'ACCES AU SGN ,
<                    Y=DECOMPTEUR DE TENTATIVES.
         STBY        DEMBIB          < MISE EN PLACE DU NVP D'ACCES.
         LAD         DEMBIB
         SVC         0               < ACCES AU SGN.
         JE          E220            < OK , LOAD SUCCESSFUL ...
<
< ACS DES RETOURS EN ERREUR :
<
         ADRI        -1,Y            < DECOMPTE DES TENTATIVES.
         CPZR        Y
         JL          E207            < C'ETAIT LA 2EME TENTATIVE ...
         LAI         6               < C'ETAIT LA 1ERE ; A=NVP
                                     < DE LOAD SOUS :SYS.
         JMP         E206            < VERS LA 2EME TENTATIVE.
<
< VALIDATION DU TYPE D'1NE BIBLIOTHEQUE :
<
E220:    EQU         $
         LXI         7
         LBY         &AIR            < A=TYPE DE L'ITEM CHARGE.
         LXI         'C9             < X='I'+'80 (ITEM).
         SBR         A,X             < X=0 SI TYPE ITEM.
<
< SORTIE DE LA ROUTINE :
<
E207:    EQU         $
         LYI         1               < Y=1 : APPEL DIFFERENT DE $;.
NOMVID:  EQU         $               < Y=0 : APPEL $;.
         RSR
<
<
<        A C C E S   C A R A C T E R E   A   C O D E R  :
<
<
<        ARGUMENT :
<                    Y=LONGUEUR COURANTE DE <NOM> ,
<                    SAVE=INDEX DU CARACTERE COURANT.
<
<
<        RESULTAT :
<                    SAVE<--(SAVE)+1 ,
<                    A=CARACTERE COURANT ,
<                    Y<--(Y)+1 ,
<                    X<--(Y) ,
<                    ET LES INDICATEURS SUR LA PRESENCE DE ';'.
<
<
GTK:     EQU         $
         ADRI        1,Y             < PROGRESSION LONGUEUR <NOM>.
         LX          SAVE            < X=INDEX COURANT CARACTERE.
         IC          SAVE            < SAVE=INDEX CARACTERE SUIVANT.
         LBY         &AIC            < A=CARACTERE COURANT DE <NOM>.
         CPI         ";"             < TEST DE FIN DE <NOM>.
         LR          Y,X             < X=INDEX DE RANGEMENT DES 3
                                     < PREMIERS CARACTERES.
         RSR
         PAGE
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        M I S E   E N   M A R C H E   M A I T R E
<        D E   L A   V I D E O  :
<
<
SP5:     EQU         $
         LXI         NSPTV           < X=NSP DU SYSTEME VIDEO.
         BSR         ACADCT,C        < RENVOIE : L=@DCT-VIDEO.
         CPZ         TETE,L          < TEST DE L'ETAT DU SYSTEME VIDEO ???
         JNE         SP51            < LE SYSTEME VIDEO EST DEJA
                                     < EST DEJA EN MARCHE , OU BIEN
                                     < UNE DEMANDE D'ARRET EST EN
                                     < TRAITEMENT : ON NE PEUT RIEN
                                     < FAIRE !!!
         LXI         NSPHOR
         BSR         ACADCT,C        < RENVOIE : L=@DCTHOR.
         LAI         NSPTV
         STA         NSPUP,L         < DEMANDE DE REACTIVATION DU
                                     < SYSTEME VIDEO.
SP51:    EQU         $
         RSR                         < ET C'EST TOUT.
<
<
<        A R R E T   M A I T R E
<        D E   L A   V I D E O  :
<
<
SP6:     EQU         $
         LXI         NSPTV
         BSR         ACADCT,C        < RENVOIE : L=@DCT-VIDEO.
         CPZ         TETE,L          < TEST DE L'ETAT DU SYSTEME
                                     < VIDEO ???
         JGE         SP61            < DEJA ARRETE , ON NE FAIT RIEN.
         LAI         1
         STA         TETE,L          < S'IL EST EN MARCHE , ON
                                     < DEMANDE SON ARRET.
SP61:    EQU         $
         RSR                         < RETOU ...
XWOR%:   VAL         0
<
<
<        D E M A N D E   D ' I N V E R S I O N   D U
<        S Y S T E M E   V I D E O  :
<
<
<        FONCTION :
<                      CE SYSTEME BISTABLE APPELE PAR '+'
<                    SOUS L'ACN DU SYSTEME PERMET DE METTRE
<                    ON/OFF LE SYSTEME VIDEO EN BASCULE.
<                      CHAQUE EXECUTION DE COMMANDE EST
<                    SUIVIE D'UNE TEMPORISATION DE 1
<                    SECONDE AFIN DE NE PAS AVOIR DE
<                    PROBLEME DE SYNCHRONISATION , EN
<                    PARTICULIER AVEC LE NSPUP DE
<                    HDLHOR ...
<                      ENFIN IL EST RECOMMANDE DE COMMENCER
<                    TOUT PROGRAMME PAR '++' QUI AURA
<                    POUR BUT DE METTRE ON (EVENTUELLE-
<                    MENT) PUIS OFF (SUREMENT) !!!
<
<
<        RESULTAT :
<                    X#0 SI L'ACN N'EST PAS :SYS.
<
<
         IF          ORDI-"S",XWOR%,,XWOR%
<
<
<        NOTA :
<                      SUR SOLAR, ON PEUT METTRE LA VIDEO OFF PAR
<                    LA COMMANDE "+0", ET LA REMETTRE ON SUR UNE
<                    DES COMPOSANTES PAR "+1", "+2" OU "+3".
<                      CEPENDANT, LA COMMANDE "+" RESTE VALABLE.
<                    SI LA VIDEO EST ON, ELLE EST MISE OFF.
<                    SI ELLE EST OFF, ELLE EST MISE ON SUR LA
<                    DERNIERE COMPOSANTE UTILISEE (1 AU DEPART);
<                    CECI PEUT TRES BIEN NE PAS AGIR SI LA
<                    DERNIERE COMMANDE ETAIT "+0".
<
<
XWOR%:   VAL         0
ONOFF:   EQU         $
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          VIDEON          < ACCES A L'INDICATEUR D'ETAT
                                     < PRESUME DU SYSTEME VIDEO.
         JAE         VON             < =0 : IL FAUT METTRE EN MARCHE.
<
< ARRET DU SYSTEME VIDEO :
<
VOFF:    EQU         $
         DC          VIDEON          < REMISE DE VIDEON A 0.
         LA          ASP6            < ACCES A LA ROUTINE MAITRE
                                     < D'ARRET DE LA VIDEO.
         JAE         ONOFF1          < ERREUR : CE N'EST PAS :SYS.
         WORD        '1EC5           < SI :SYS : ARRET MAITRE.
ONOFF2:  EQU         $
         LAI         1
         STA         SLEEP+2         < MISE EN PLACE D'UNE TEMPORI-
                                     < SATION DE 1 SECONDE.
         LAD         SLEEP
         SVC         0               < TEMPORISATION 1 SECONDE , ET
                                     < RETOUR AVEC X=0.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LX          IEG             < PRELEVER LE CARACTERE SUIVANT.
         LBY         &AIC
         ADRI        -"0",A          < SI C'EST "0", "1", "2" OU "3"
         JAL         ONOFF4
         CPI         3
         JG          ONOFF4
         STA         VTVCTL          < POSITIONNER LE NUMERO DE COMPOSANTE
         STA         DTVCTL          < A DIFFUSER ET LE DERNIER NUMERO
                                     < UTILISE.
         IC          IEG             < AVANCER LE POINTEUR POUR
                                     < SAUTER CE CARACTERE.
ONOFF5:  EQU         $
         LAD         STDKU
         SVC         0               < STABILISATION DE L'IMAGE...
         LXI         0               < POSITIONNER LE CODE DE RETOUR.
         JMP         ONOFF3
ONOFF4:  EQU         $
                                     < LE CARACTERE "+" EST SEUL.
         LA          VTVCTL          < TEST DE L'ETAT ACTUEL.
         JAE         ONOFF6
         STZ         VTVCTL          < LA VIDEO ETAIT ON. ON LA MET OFF.
         JMP         ONOFF5
ONOFF6:  EQU         $
         LA          DTVCTL          < LA VIDEO ETAIT OFF.
         STA         VTVCTL          < ON LA MET ON SUR LA DERNIERE
                                     < COMPOSANTE UTILISEE.
         JMP         ONOFF5
XWOR%:   VAL         0
ONOFF3:  EQU         $
         RSR                         < SORTIE DE LA ROUTINE.
ONOFF1:  EQU         $
         LXI         1               < RETOUR EN EREUR (X#0).
         JMP         ONOFF3          < VERS LA SORTIE ...
         IF          ORDI-"T",XWOR%,,XWOR%
<
< MISE EN MARCHE DE LA VIDEO :
<
VON:     EQU         $
         IC          VIDEON          < MISE DE VIDEON A 1.
         LA          ASP5            < ACCES LA ROUTINE MAITRE DE
                                     < MISE EN MARCHE.
         JAE         ONOFF1          < ERREUR : CE N'EST PAS :SYS.
         WORD        '1EC5           < SI :SYS : MISE EN MARCHE ...
         JMP         ONOFF2          < VERS LA SORTIE OK.
XWOR%:   VAL         0
         PAGE
<
<
<        N O M   I M A G E   V I D E O  :
<
<
<        RESULTAT :
<                    SAVE=INDEX 1ER CARACTERE DU NOM PRESUME.
<
<
SNIMAG:  EQU         $
         LA          IEG
         ADRI        -1,A            < RETOUR SUR LA PRIMITIVE
                                     < NON RECONNUE.
         STA         SAVE            < AND SAVE ....
         RSR                         < RETOUR INDIFFERENT.
<
<
<        T E N T A T I V E   L O A D   I M A G E  :
<
<
LOADI:   EQU         $
<
< VALIDATION LONGUEUR DU NOM :
<
         LA          IEG             < A=INDEX DE ';'+1.
         SB          SAVE
         ADRI        -1,A            < A=LONGUEUR DU NOM IMAGE.
         CPI         LNOM*2          < VALIDATION DE LA LONGUEUR ???
         JG          E1305           < ERREUR.
<
< SAVE EN-TETE ITEM1 :
<
         LB          ASI1            < B=@ZONE DE SAVE.
         LA          I1              < A=@EN-TETE ITEM1.
         LXI         LNOM+1          < X=NBRE DE MOTS A SAUVER.
         MOVE                        < ET SAUVEGARDE.
<
< MISE EN PLACE DU NOM DE L'IMAGE PRESUMEE :
<
         LX          SAVE            < X=INDEX DU NOM DANS L'ITEM
                                     < COURANT.
         STX         NOMARG          < POUR UN EVENTUEL APPEL DE 'TI'.
         LYI         0               < Y=INDEX DE TRANSFERT.
E1301:   EQU         $
         LBY         &AIC            < A=CARACTERE COURANT DU NOM.
         ADRI        1,X             < PROGRESSION INDEX.
         XR          X,Y
         CPI         ";"             < EST-CE LA FIN DU NOM ???
         JE          E1302           < OUI.
         STBY        &XI1            < ET NON , ON DEPLACE DONC LE
                                     < CARACTERE COURANT.
         ADRI        1,X             < PROGRESSION INDEX.
         XR          X,Y
         JMP         E1301           < AU CARACTERE SUIVANT.
E1302:   EQU         $
         LAI         '04             < ';' EST REMPLACE PAR UN 'EOT'.
         STBY        &XI1            < FIN DU NOM.
<
< TENTATIVE DE CHARGEMENT DE L'IMAGE :
<
         LAI         '05
         STBY        DEMTV           < NVP DE LOAD SOUS <ACN>.
         LAD         DEMTV
         SVC         0               < ACCES AU SGN.
         JE          E1306           < OK , IMAGE TROUVEE.
         LAI         '06
         STBY        DEMTV           < NVP DE LOAD SOUS :SYS.
         LAD         DEMTV
         SVC         0               < 2EME APPEL DU SGN.
E1306:   EQU         $
         PSR         X               < SAVE LES CONDITIONS DE RETOUR.
<
< RESTAURATION EN-TETE DE L'ITEM1 :
<
         LA          ASI1            < A=#ZONE DE SAVE.
         LB          I1              < B=@EN-TETE ITEM1.
         LXI         LNOM+1          < X=NBRE DE MOTS A RESTAURER.
         MOVE                        < RESTAURATION.
<
< TEST DES CONDITIONS D'EXECUTION :
<
         PLR         X               < RESTAURE LES CONDITIONS DU SGN.
         CPZR        X               < COMMENT CELA S'EST-IL PASSE ???
         JNE         E1300           < ERREUR : X#0.
         LA          &ALONG          < A=INDICATEUR DE LA NATURE
                                     < DE L'IMAGE CHARGEE.
         CPI         -3              < VALIDATION VIDEO ???
         JL          E1305           < ERREUR : NI VIDEO , NI FLOPPY.
         JAGE        E1317           < CAS D'UNE SIMULATION FLOPPY.
<
<        C A S   D ' U N E   I M A G E   V I D E O  :
<
         IF          ORDI-"T",XWOR%,,XWOR%
         LA          ASP3
         JAE         E1300           < ON N'EST PAS SOUS :SYS !!!
         WORD        '1EC5           < DEMANDE MAITRE DE STABILISATION.
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
         LAD         STDKU
         SVC         0               < STABILISATION IMAGE...
XWOR%:   VAL         0
         JMP         E1300           < ET C'EST TOUT ....
<
<        C A S   D ' U N   D E S S I N   F L O P P Y  :
<
E1317:   EQU         $
         CP          LDESS           < LE DESSIN CHARGE EST-IL TROP
                                     < GRAND ???
         JLE         E1637           < NON , ON CONSERVA SA LONGUEUR.
         LA          LDESS           < ET OUI , IL FAUT LE TRONQUER !!!
E1637:   EQU         $
         STA         WG+2            < MISE EN PLACE DE LA LONGUEUR
                                     < DU DESSIN A EDITER ...
E1600:   EQU         $
         LAD         OG
         SVC         0               < OG DE LA VISU D'EMISSION.
         JE          E1601           < OK , OG ACCEPTE.
<
< CHANGEMENT DE VISU D'EMISSION :
<
         LAI         '02             < NVP='0B EST REMPLACE PAR
                                     < LE NVP='02 (VISU OUT).
         STBY        COPY            < SUR COPY.
         STBY        OG              < SUR OG.
         STBY        WG              < SUR WG.
         STBY        CG              < ET SUR CG.
         LAD         OG
         SVC         0               < 2EME TENTATIVE D'OPEN GRAPHIQUE.
         JNE         E5000           < ERREUR : ON EST PROBABLEMENT EN
                                     < BATCH : L'ERREUR EST IRREMEDIABLE
<
< AFFICHAGE DESSIN EN SIMULATION FLOPPY :
<
E1601:   EQU         $
         LAD         WG
         SVC         0               < AFFICHAGE EN GRAPHIQUE (LES
                                     < POINTS SONT DEJA EN ASCI...)
         LAD         CG
         BSR         ASVC            < CG DE LA VISU D'EMISSION EN
                                     < SAUVEGARDANT LES CONDITIONS
                                     < DE RETOUR DU WG.
         CPZR        X               < COMMENT S'ETAIT PASSE LE WG ???
         JE          E1300           < OK , TOUT S'EST BIEN PASSE.
         BR          AGOGER          < IL Y A EU UN CTRL-X-OFF FORT
                                     < PROBABLEMENT : ON S'EN VA !!!
E5000:   EQU         $               < CAS DU BATCH.
         BR          AGOGE           < RETOUR OK SI BATCH.
<
< RETOUR DE LA ROUTINE :
<
E1305:   EQU         $               < SORTIES EN ERREUR.
         LXI         1               < ON RENVOIE X#0.
E1300:   EQU         $
         RSR
         PAGE
<
<
<        G E S T I O N   D E S   E N C H A I N E M E N T S
<        D ' I M A G E S   V I D E O S  :
<
<
<        PHILOSOPHIE :
<                      CE PROCESSEUR PERMET D'ENCHAINER
<                    LES IMAGES VIDEOS SYNTHETIQUES
<                    GENEREES PAR 'TV' EN DES SEQUENCES
<                    DE FILM ; DE PLUS UN LANGAGE ALGO-
<                    RITHMIQUE DU TYPE G2/G3 PERMET DE
<                    DEFINIR DES BOUCLES ITERATIVES D'IMAGES ,
<                    DES SOUS-FILMS , DES BIBLIOTHEQUES
<                    DE SEQUENCES (CINEMATHEQUES)...
<
<
<        SYNTAXE :
<
<        <K>::=<CARACTERE NON RESERVE>
<        <N>::=<CHIFFRE BASE 36>
<        <N>::=@
<        <IMAGE>::=<K>...<K>;
<        <IMAGE>::=-<K>...<K>;
<        <PAUSE>::=!<N>
<        <POINT D'ARRET>::=.
<        <APPEL BIBLIOTHEQUE>::=$<NOM BIBLIOTHEQUE>;
<        <APPEL FILM>::=&<NOM FILM>;
         IF          ORDI-"T",XWOR%,,XWOR%
<        <ARRET/MARCHE VIDEO>::=+
XWOR%:   VAL         0
         IF          ORDI-"S",XWOR%,,XWOR%
<        <ARRET/MARCHE VIDEO>::=<INVERSION VIDEO>/<FIXATION COMPOSANTE>
<        <INVERSION VIDEO>::=+
<        <FIXATION COMPOSANTE>::=+<NUMERO DE COMPOSANTE>
<        <NUMERO DE COMPOSANTE>::=0/1/2/3
XWOR%:   VAL         0
<        <APPEL ARGUMENT FORMEL>::='
<        <FIN DE FILM>::=/
<        <EFFACEMENT ECRAN VISU>::=0
<        <APPEL 'TI'>::=*
<        <RETOUR A L'ESPACE SOCIAL INITIAL>::=1
<        <PASSAGE SUR LE QUADRILLAGE 2>::=2
<        <PAS DE BASCULE SUR LE QUADRILLAGE>::=3
<        <TRANSFORMATION SOCIALE>::=4
<                    (LA BIBLI COURANTE EST ALORS DE TYPE 'T'/'I')
<        <APPEL OVERLAY>::=4
<        <APPEL OVERLAY>::=$;
<                    (LA BIBLI COURANTE EST ALORS DE TYPE 'P')
<        <PAS DE PARCOURS DE X>::=5
<        <PAS DE PARCOURS DE Y>::=6
<        <SEQUENCE>::=<TRANSFORMATION SOCIALE>
<        <SEQUENCE>::=<RETOUR A L'ESPACE SOCIAL INITIAL>
<        <SEQUENCE>::=<PASSAGE SUR LE QUADRILLAGE 2>
<        <SEQUENCE>::=<PAS DE BASCULE SUR LE QUADRILLAGE>
<        <SEQUENCE>::=<PAS DE PARCOURS DE X>
<        <SEQUENCE>::=<PAS DE PARCOURS DE Y>
<        <IMAGE+(CTTE) SI '1'>::=7
<        <IMAGE-(CTTE) SI '2'>::=7
<        <DECALAGE A DROITE IMAGE DE (CTTE) SI '1'>::=8
<        <DECALAGE A GAUCHE IMAGE DE (CTTE) SI '2'>::=8
<        <SEQUENCE>::=7/8
<        <ELEMENT NEUTRE>::=;
<        <ELEMENT NEUTRE>::=<SPACE>
<        <COMMENTAIRE>::=<<TEXTE>;
<        <MESSAGE>::=<<TEXTE>!
<        <SON>::="<TEXTE>!
<        <OCTAVE>::=,<CHIFFRE DE 0 A 9>
<        <COMMANDE VISU>::=:<CARACTERE>
<        <MAKE COPY>::=9
<        <DEFINITION ARGUMENT FORMEL>::==(<SEQUENCE>)
<        <DEFINITION NOM FILM>::=>(<SEQUENCE>)
<        <ITERATION>::=%<N>(<SEQUENCE>)
<        <APPEL FILM EN BIBLIOTHEQUE>::=?<NOM FILM>;
<        <MODIFICATION CTTE>::=@<N>
<        <SEQUENCE>::=<ELEMENT NEUTRE>
<        <SEQUENCE>::=<IMAGE>
<        <SEQUENCE>::=<SEQUENCE><IMAGE>
<        <SEQUENCE>::=<ARRET/MARCHE VIDEO>
<        <SEQUENCE>::=<DEFINITION NOM FILM>
<        <SEQUENCE>::=<DEFINITION ARGUMENT FORMEL>
<        <SEQUENCE>::=<APPEL 'TI'><COMMANDES 'TI'>
<        <SEQUENCE>::=<COMMENTAIRE>
<        <SEQUENCE>::=<MESSAGE>
<        <SEQUENCE>::=<SON>
<        <SEQUENCE>::=<OCTAVE>
<        <SEQUENCE>::=<COMMANDE VISU>
<        <SEQUENCE>::=<EFFACEMENT ECRAN VISU>
<        <SEQUENCE>::=<MAKE COPY>
<        <SEQUENCE>::=<MODIFICATION CTTE>
<        <SEQUENCE>::=<APPEL FILM EN BIBLIOTHEQUE>
<        <SEQUENCE>::=<POINT D'ARRET>
<        <SEQUENCE>::=<PAUSE>
<        <SEQUENCE>::=<APPEL BIBLIOTHEQUE>
<        <SEQUENCE>::=<APPEL FILM>
<        <SEQUENCE>::=<APPEL ARGUMENT FORMEL>
<        <SEQUENCE>::=<ITERATION>
<        <SEQUENCE>::=<SEQUENCE>...<SEQUENCE>
<        <SEQUENCE>::=(<SEQUENCE>)
<        <SEQUENCE>::=<FIN DE FILM>
<        <FILM>::=<SEQUENCE>
<        <FILM>::=<FILM><SEQUENCE>
<        <FILM>::=<FILM><FIN DE FILM>
<
<
<        <CARACTERE> A ENVOYER AU 4014 :
<        (LORS DE <COMMANDE>)
<
<        @           NORMAL Z AXIS AND NORMAL VECTORS OR ALPHA
<        A           NORMAL Z AXIS AND DOTTED LINE VECTORS
<        B           NORMAL Z AXIS AND DOT-DASHED VECTORS
<        C           NORMAL Z AXIS AND SHORT-DASHED VECTORS
<        D           NORMAL Z AXIS AND LONG-DASHED VECTORS
<        G           NORMAL Z AXIS
<        H           DEFOCUSED Z AXIS AND NORMAL VECTORS OR ALPHA
<        I           DEFOCUSED Z AXIS AND DOTTED VECTORS
<        J           DEFOCUSED Z AXIS AND DOT-DASHED VECTORS
<        K           DEFOCUSED Z AXIS AND SHORT-DASHED VECTORS
<        L           DEFOCUSED Z AXIS AND LONG-DASHED VECTORS
<        O           DEFOCUSED Z AXIS
<        P           WRITE-THRU MODE AND NORMAL VECTORS OR ALPHA
<        Q           WRITE-THRU MODE AND DOTTED VECTORS
<        R           WRITE-THRU MODE AND DOT-DASHED VECTORS
<        S           WRITE-THRU MODE AND SHORT-DASHED VECTORS
<        T           WRITE-THRU MODE ANS LONG-DASHED VECTORS
<        W           WRITE-THRU MODE
<
<
         WORD        COM0            < INITIALISATION INTERPRETEUR.
         WORD        LOC+'80
         WORD        BRANCH
SCENE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATION DES 3 BASES.
         LA          APILE           < A=@PILE DE SODOME.
         LR          A,K             < INITIALISATION DE K.
         IC          KIN             < COMPTAGE DES ENTREES.
         JE          E1310           < CAS DE LA 1ERE ENTREE.
         BR          AGOGER          < CAS DE L'ENTREE SUIVANTE SUITE
                                     < A UN ALT-MODE : ON RETOURNE A GE.
<
< DEMANDE D'ALLOCATION 8K MOTS :
<
E1310:   EQU         $               < 1ERE ENTREE.
         LA          MODCAL,W        < RECUPERATION DU MODCAL D'APPEL ,
         STA         WHOCAL          < QUE L'ON SAVE DANS WHOCAL.
         LAD         DEMMEM
         SVC         0
<
< TEST DU NUMERO DE COMPTE D'APPEL :
<
         IF          ORDI-"S",XWOR%,,XWOR%
         STZ         ASP             < PAS DE SON...
XWOR%:   VAL         0
         IF          ORDI-"T",XWOR%,,XWOR%
         WORD        '1E25           < (A,B)=<ACN>.
         CP          ACNSYS
         JNE         E4000           < CE N'EST PAS :SYS.
         LR          B,A
         CP          ACNSYS+1
         JE          E4001           < C'EST :SYS , OK ...
E4000:   EQU         $               < CAS OU L'ON N'EST PAS SOUS :SYS ...
         STZ         ASP3            < PAS DE DEMANDE DE STABILISATION
                                     < DE L'IMAGE VIDEO.
         STZ         ASP             < L'ACCES AU SYSTEME DU SON
                                     < EST IMPOSSIBLE ...
         STZ         ASP5            < PAS DE MISE EN MARCHE VIDEO.
         STZ         ASP6            < PAS D'ARRET DE LA VIDEO ...
XWOR%:   VAL         0
E4001:   EQU         $               < CAS OU C'EST :SYS , YOUPI !!!
<
< SAVE L'EN-TETE DE L'ITEM1 :
< (POUR SE PREMUNIR CONTRE LES ALT-MODES
< MAL PLACES LORS DES CHARGEMENTS
< DES IMAGES VIDEOS...)
<
         LB          ASI1
         LA          I1
         LXI         LNOM+1
         MOVE                        < SAVE (I1) DANS (SI1).
         JMP         LOOP            < ET C'EST PARTI ....
         PAGE
<
<
<        P R I M I T I V E   G E T   C A R A C T E R E  :
<
<
<        RESULTAT :
<                    Y=CARACTERE COURANT (IEG) DE L'ITEM
<                      COURANT ; RETOUR DIRECT PAR 'N22'
<                      SI CE CARACTERE EST HORS-LA PAGE.
<
<
PRIMG:   EQU         $
         LX          IEG             < X=INDEX COURANT D'EXECUTION.
<
< VALIDATION DE IEG :
<
         LR          X,A
         CP          NCP             < VALIDATION.
         LA          AGON22          < A=@NOEUD D'ERREUR A PRIORI ...
         JGE         E962            < EFFECTIVEMENT , HORS-LA PAGE ...
<
< ACCES AU CARACTERE COURANT :
<
         LBY         &AIC
         LR          A,Y             < Y=CARACTERE COURANT.
         IC          IEG             < PREPARATION DE L'ACES AU
                                     < CARACTERE SUIVANT.
         JMP         PRIMA           < VERS UN RETOUR OK.
         PAGE
<
<
<        I N T E R P R E T E U R   D E S   P R O G R A M M E S
<        D E   S E Q U E N C E S   V I D E O S  :
<
<
<        F O R M A T   D E S   P R I M I T I V E S  :
<
<                    OCTET0=FONCTION (NOM DE LA PRIMITIVE) ,
<                           BIT0=1 (TOUJOURS) ,
<                           BIT1=0 : MOT2 (ET EVENTUELLEMENT MOT3)
<                                    PRESENT(S).
<                               =1 : L'EXECUTION EST SEQUENTIELLE
<                                    (ON PASSE A LA PRIMITIVE SUIVANTE
<                                    EN FAISANT +2 SUR LA BASE C).
<                           BIT2=1 : ARG2 EST ABSENT.
<                           BIT3=1 : LE NOEUD SUIVANT EST N1 (QUELQUE
<                                    SOIENT LES CONDITIONS DE RETOUR).
<                    OCTET1=ARG1 ,
<                    MOT1=ARG2 ,
<                    MOT2=@PRIMITIVE SUIVANTE EN CAS D'ERREUR (A
<                         CONDITION QUE BIT1(MOT0)=0) ,
<                    MOT3=@PRIMITIVE SUIVANTE SI OK (A CONDITION
<                         QUE BIT1(MOT0)=0).
<
<
PR:      VAL         0               < NOM DE LA PRIMITIVE + ARG1.
BSEQ:    VAL         1               < BIT INDICATEUR DE PRIMITIVE
                                     < SEQUENTIELLE SI =1.
PBSEQ:   VAL         '40             < POUR POSITIONNER LE BIT 'BSEQ'.
LPRIM:   VAL         2               < LPRIM=1 : ARG2 EST ABSENT.
PLPRIM:  VAL         '20             < POUR POSITIONNER LE BIT 'LPRIM'.
GON1:    VAL         3               < BIT INDIQUANT QUE LE NOEUD
                                     < SUIVANT EST N1 (SI =1).
PGON1:   VAL         '10             < POUR POSITIONNER LE BIT 'GON1'.
ARG2:    VAL         1               < ARGUMENT2.
ADER:    VAL         2               < @PRIMITIVE SUIVANTE SI ERREUR.
ADOK:    VAL         3               < @PRIMITIVE SUIVANTE SI OK.
<
<
<        FONCTION    ARG1            ARG2
<
<        PC                          @ROUTINE    CALL.
<-------------------------------------------------------------------------------
<        PCI                         @NOEUD      CALL ROUTINE RELAYEE
<                                                PAR LE NOEUD D'@ (ARG2)
<-------------------------------------------------------------------------------
<        PT          CODE-ASCI                   TEST CARACTERE.
<-------------------------------------------------------------------------------
<        PUSH                                    EMPILEMENT DANS PIR.
<-------------------------------------------------------------------------------
<        PULL                                    DEPILEMENT DE PIR.
<-------------------------------------------------------------------------------
<        PG                                      ACCES AU CARACTERE
<                                                COURANT DE L'ITEM.
<-------------------------------------------------------------------------------
<        PTD                                     TEST DIRECT DES
<                                                CARACTERES DE 'SPACE'
<                                                A 'Z'.
<
<
<        UTILISATION DES REGISTRES :
<                    B=ARG1 ,
<                    X=NOM PRIMITIVE , PUIS CONDITIONS DE
<                      RETOUR DE CELLE-CI (0 SI OK).
<                    Y=CARACTERE COURANT (IEG) EN GENERAL.
<                    C=@PRIMITIVE COURANTE.
<                    W=@BRANCH.
<
<
<        P R I M I T I V E S   A   A D R E S S E ( S )  :
<
PC:      VAL         1+'80           < CALL.
PCI:     VAL         2+'80           < CALL INDIRECT.
PUSH:    VAL         3+'80+PLPRIM    < EMPILEMENT DANS PIR SANS ARG2.
PULL:    VAL         4+'80+PLPRIM    < DEPILEMENT DE PIR SANS ARG2.
PG:      VAL         5+'80+PLPRIM    < GET CARACTERE SANS ARG2.
PTD:     VAL         6+'80+PLPRIM    < TEST DIRECT DE CARACTERE.
PT:      VAL         7+'80           < TEST CARACTERE.
<
<        A T T E N T I O N  :
<                      'PTM' DOIT ETRE LA DERNIERE PRIMITIVE
<                    A CAUSE DE LA TABLE DE L'INTERPRETEUR.
<
PTM:     VAL         PT+PLPRIM       < TEST SANS ARG2.
<
<        P R I M I T I V E S   S E Q U E N T I E L L E S  :
<
PCS:     VAL         PC+PBSEQ        < CALL SEQUENTIEL.
PUSHS:   VAL         PUSH+PBSEQ      < PUSH SEQUENTIEL.
PULLS:   VAL         PULL+PBSEQ      < PULL SEQUENTIEL.
PGS:     VAL         PG+PBSEQ        < GET CARACT. SEQUENTIEL.
<
<
<        P R I M I T I V E   C A L L  :
<
<
PRIMCI:  EQU         $
         LA          ARG2,C          < A=@NOEUD RELAI DE LA ROUTINE.
         LR          A,C             < C=@NOUVEAU NOEUD.
PRIMC:   EQU         $
         BSR         ARG2,C          < APPEL DE LA ROUTINE ARGUMENT.
         JMP         LOOPB           < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
<        T E S T   D I R E C T   C A R A C T E R E  :
<
<
PRIMTD:  EQU         $
         LR          Y,A             < A=Y=CARACTERE COURANT A TESTER.
E979:    EQU         $
         LXI         1               < RETOUR EN ERREUR A PRIORI.
         CPI         "Z"             < VALIDATION SUPERIEURE.
         JG          LOOPB           < ERREUR.
         CPI         "A"             < EST-CE UNE LETTRE 'A' A 'Z' ???
         JL          INFA            < NON, INFERIEUR A 'A'.
         LAI         "A"             < OUI, TOUTES LES LETTRES SONT
                                     < RENDUES EQUIVALENTES A 'A' ...
INFA:    EQU         $
         ADRI        -'20,A          < TRANSLATION PAR RAPPORT A 'SPACE'
         JAL         LOOPB           < ERREUR.
         LXI         0               < RETOUR OK.
         ADR         A,C             < TRANSLATION DE LA BASE C POUR
                                     < ATTEINDRE LE RELAI DU NOUVEAU
                                     < NOEUD.
         LA          ADER,C          < ACCES A L'@PRIMITIVE DE (Y).
         JMP         E962            < VERS LA BOUCLE DE L'INTERPORETEUR
<
<
<        P R I M I T I V E   G O T O  :
<
<
PRIMA:   EQU         $
         LXI         0               < UN RETOUR OK SUFFIT.
<
<
<        R E T O U R   D E S   P R I T I V E S  :
<
<
LOOPB:   EQU         $
         LA          PR,C            < POUR TESTER LES INDICATEURS.
         TBT         GON1            < DOIT-ON ALLER EN N1 ???
         JNC         E961            < NON.
         LA          AGON1           < OUI : A=@NOEUD N1.
         JMP         E962            < VERS LE SAUT EN N1.
E961:    EQU         $
         TBT         LPRIM           < ARG2 EST-IL ABSENT ???
         SBCR        C               < SI OUI ON REMONTE D'UNE UNITE.
         ADRI        ADER-PR,C       < PRIMITIVE SEQUENTIELLE A PRIORI.
         TBT         BSEQ            < EST-CE SEQUENTIEL ???
         JC          LOOP            < OUI , PRIMITIVE SEQUENTIELLE.
<
< CAS DES PRIMITIVES A ADRESSE : TEST
< DES CONDITIONS DE RETOUR (X) :
<
         CPZR        X               < COMMENT CELA S'EST-IL PASSE ???
         JNE         E2              < MAL : RETOUR PAR ADER.
         ADRI        ADOK-ADER,C     < BIEN , RETOUR PAR ADOK.
E2:      EQU         $
         LA          0,C             < ACCES A L'@PRIMITIVE SUIVANTE.
         JAL         LOOP            < EN FAIT ON VIENT DE RECUPERER
                                     < LA PRIMITIVE SUIVANTE , ET
                                     < NON PAS SON ADRESSE ...
E962:    EQU         $
         LR          A,C             < C POINTE LA PRIMITIVE SUIVANTE.
<
<
<        B O U C L E   D E   L ' I N T E R P R E T E U R  :
<
<
LOOP:    EQU         $
         LAI         0               < NETTOYAGE DE A.
         LB          PR,C            < ACCES A LA PRIMITIVE COURANTE.
         DV          C100            < DECONCATENATION :
                                     < B=ARG1 ,
                                     < A=NOM DE LA PRIMITIVE (C).
         ANDI        'F              < ON SUPPRIME LES INDICATEURS.
         ADRP        A               < VERS LE TRAITEMENT DE (A).
<
<        T A B L E   D ' A I G U I L L A G E  :
<
         JMP         PRIMC           < PRIMITIVE CALL.
         JMP         PRIMCI          < PRIMITIVE CALL INDIRECT.
         JMP         PRIMPS          < PRIMITIVE PUSH.
         JMP         PRIMPL          < PRIMITIVE PULL.
         JMP         PRIMG           < PRIMITIVE GET CARACTERE.
         JMP         PRIMTD          < PRIMITIVE TEST DIRECT CARACTERE.
<
<
<        P R I M I T I V E   T E S T   C A R A C T E R E  :
<
<
<        ARGUMENT :
<                    Y=CARACTERE COURANT ,
<                    B=ARG1=CARACTERE ATTENDU.
<
<
PRIMT:   EQU         $
         LXI         1               < NON RECONNAISSANCE A PRIORI.
         CPR         Y,B             < TEST CARACTERE ???
         JNE         LOOPB           < NON RECONNAISSANCE : X#0 9
         JMP         PRIMA           < RECONNAISSANCE : RETOUR OK.
<
<
<         P U S H   R E C U R S I V I T E  :
<
<
<        ARGUMENTS :
<                    B=0 : COMPTER UNIQUEMENT LES '(' ,
<                    B#0=CAUSE DU PUSH : EMPILEMENT REEL DANS PIR ;
<                     ='40 : PUSH POUR REPEAT ,
<                     ='20 : PUSH POUR APPEL PROGRAMME ,
<                     ='10 : PUSH POUR SAUT DEFINITION PROGRAMME ,
<                     ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC
<                                CHANGEMENT D'ITEM COURANT.
<                    Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU (SI
<                      B#0).
<
<
PRIMPS:  EQU         $
         CPZR        B               < EST-CE UN VRAI PUSH ???
         JE          E15             < NON SEULEMENT COMPTER '('.
<
< CAS DES PUSH VERITABLES :
<
         LA          APRC            < ACCES AU RELAI COURANT DE PIR.
         RBT         0               < RAZ DU BIT INDEX.
         LXI         CDCP            < RETOUR EN ERREUR A PRIORI.
         CP          TPR             < EST-ON AU SOMMET DE PIR ???
         JGE         LOOPB           < OUI , RETOUR EN ERREUR.
         LA          APRC
         ADRI        LEPR,A          < NON CALCUL @ENTREE SUIVANTE.
         STA         APRC            < MAJ DU RELAI COURANT DE PIR.
<
< INITIALISATION DE LA NOUVELLE ENTREE DE PIR :
<
         SWBR        Y,A             < Y=COMPTE DE REPETITIONS.
         ORI         1               < CP=1 : COMPTE PARENTHESES.
         STA         &APRC           < RANGEMENT DE CD ET CP.
         LXI         IR              < RETOUR OK.
         SWBR        B,A             < OCTET0(A)=CAUSE DU PUSH.
         AD          IEG             < ET CONCATENATION INDEX COURANT.
         TBT         BITREP          < EST-CE UN PUSH POUR REPEAT ???
         SBCR        A               < SI OUI , RETOUR SUR '('.
         STA         &APRC
<
< TEST D'UN CHANGEMENT D'ITEM :
<
         TBT         BITPRO
         JNC         PRIMA           < CE N'EST PAS UN APPEL PROGRAMME.
         TBT         BITDEF          < CAS D'UN APPEL PROG. Y-A-T'IL
                                     < DE PLUS CHANGEMENT D'ITEM ???
         JNC         PRIMA           < NON , RETOUR OK.
         BSR         ACHGTI          < SI OUI , CHANGEMENT D'ITEM.
E201:    EQU         $
         JMP         PRIMA           < VERS UN RETOUR OK A LOOPB.
<
<        C O M P T E   D E S   ' ( '  :
<
E15:     EQU         $
         LXI         CP
         LBY         &APRC           < ACCES AU COMPTE ALGEBRIQUE.
         ADRI        1,A             < ET UNE DE PLUS.
         TBT         7               < OVERFLOW DANS L'OCTET ???
         JC          LOOPB           < OUI , RETOUR EN ERREUR ...
         STBY        &APRC           < NON , OK.
         JMP         PRIMA           < VERS UN RETOUR OK.
<
<
<        P U L L   R E C U R S I V I T E  :
<
<
<        ARGUMENT :
<                    B#0 : PULL VERITABLE ,
<                     =0 : DECOMPTER UNIQUEMENT LES ')'.
<
<
PRIMPL:  EQU         $
<
< DECOMPTE DES PARENTHESES :
<
         LXI         CP
         LBY         &APRC           < A=CP COURANT SOUS CE NIVEAU.
         JAE         LOOPB           < TROP DE ')' : RETOUR EN ERREUR.
         ADRI        -1,A
         STBY        &APRC           < MAJ DU CP COURANT.
         JANE        PRIMA           < RETOUR OK SANS PULL.
<
< CAS OU CP=0 :
<
         CPZR        B               < TEST DU MODE D'APPEL.
         JE          LOOPB           < RETOUR EN ERREUR.
E101:    EQU         $
         LXI         CD
         LBY         &APRC           < A=CD COURANT.
         JAE         PRIMA           < CAS DE LA 1ERE ENTREE DANS PIR ,
                                     < IL NE FAUT PAS DEPILER ...
         ADRI        -1,A            < DECOMPTE DES REPETITIONS.
         JANE        E14             < IL RESTE AU MOINS UNE REPETITION.
<
< CAS CD=0 : PULL VERITABLE :
<
         LA          APRC
         RBT         0               < ACCES A L'@ENTREE COURANTE.
         LXI         1               < RETOUR EN ERREUR A PRIORI.
         CP          BPR             < EST-ON AU BAS DE LA PILE ???
         JLE         LOOPB           < OUI , RETOUR EN ERREUR.
E90:     EQU         $
         LA          APRC
         ADRI        -LEPR,A         < NON , RETOUR SUR L'ENTREE
                                     < PRECEDENTE.
         STA         APRC            < ET MAJ DU RELAI COURANT.
         JMP         PRIMA           < VERS UN RETOUR OK.
<
< ACS OU CD#0 : 2L RESTE AU MOINS UNE REPETITION :
<
E14:     EQU         $
         STBY        &APRC           < MAJ DU CD COURANT.
         LXI         IR
         LA          &APRC
         LR          A,B             < B=ENTREE IR DE PIR.
         TBT         BITPRO          < EST-CE UN RETOUR PROGRAMME ???
         AND         CFFF            < RAZ DES BITS 0,1,2,3.
         STA         IEG             < A=INDEX DE DEBUT DE REPETITION.
         JNC         LOOPB           < CE N'EST PAS UN RETOUR PROGRAMME
                                     < ON FAIT UN RETOUR OK.
<
< CAS D'UN RETOUR DE PROGRAMME :
<
         TBT         16+BITDEF       < CHANGEMENT D'ITEM COURANT ???
         JNC         E90             < NON , JUSTE UN PULL RECURSIVITE.
         BSR         ACHGTI          < ET OUI , CHGT D'ITEM COURANT.
         JMP         E90             < VERS LE PULL RECURSIVITE.
<
<
<        C H A N G E M E N T   D ' I T E M   C O U R A N T  :
<
<
CHGTI:   EQU         $
         LA          ACCEB
         NGR         A,A             < INVERSION DE LA CONSTANTE
                                     < DE TRANSLATION.
         STA         ACCEB           < ET MAJ.
         AD          AIC
         STA         AIC             < TRANSLATION DU RELAI D'ACCES
                                     < A L'ITEM COURANT.
         RSR
         PAGE
<
<
<        P R O G R A M M E   I N T E R P R E T A T I F
<        D E   G E S T I O N   D E S   S E Q U E N C E S
<                    V I D E O S  :
<
<
COM0:    EQU         $
         BYTE        PC;0
         WORD        CHECKT          < VALIDATION TYPE ITEM COURANT.
         WORD        N700            < ERREUR : PAS TYPE 'T' ...
<
<        A C C E S   C O M M A N D E   C O U R A N T E  :
<
N1:      BYTE        PGS;0           < ACCES CARACTERE COURANT.
<
<        A N A L Y S E   D E   L A   C O M M A N D E  :
<
         BYTE        PTD;0           < TEST DIRECT CARACTERE.
         WORD        N22             < CAS DES CARACTERES HORS 'SPACE'-Z
         WORD        N1              < 'SPACE' EST NEUTRE.
         WORD        N750            < ! PAUSE DE N SECONDES.
         WORD        N3000           < " SEQUENCE SONORE
         WORD        N610            < #
                                     < # : A NA PAS UTILSER COMME
                                     < NOM DE PRIMITIVE CAR IL EST
                                     < SOUVANT LE 1ER CARACTERE DU
                                     < NOM D'UNE IMAGE.
         WORD        N302            < $ APPEL BIBLIOTHEQUE
         WORD        N8              < % BOUCLE D'ITERATION
         WORD        N7              < & APPEL GLOBAL PROGRAMME
         WORD        N941            < ' APPEL ARGUMENT FORMEL
         WORD        N14             < ( OPEN RECURSIVITE
         WORD        N15             < ) CLOSE RECURSIVITE
         WORD        N3200           < * APPEL 'TI'
         WORD        N5000           < + ARRET/MARCHE VIDEO
         WORD        N3100           < , CHANGEMENT D'OCTAVE
         WORD        N4010           < - APPEL NOM IMAGE VIDEO/FLOPPY
         WORD        N23             < . POINT D'ARRET (RETOUR CCI)
         WORD        N22             < / RETOUR A L'APPELANT (GE)
         WORD        N21             < 0 EFFACEMENT DE L'ECRAN
         WORD        N5100           < 1 RETOUR AU QUADRILLAGE 1.
         WORD        N5103           < 2 PASSAGE AU QUADRILLAGE 2
         WORD        N5102           < 3 PAS DE BASCULE SUR LE QUADRILLAGE.
         WORD        N5101           < 4 TRANSFORMATION SOCIALE
                                     < (OU APPEL OVERLAY SUIVANT
                                     < LE TYPE DE LA BIBLI COURANTE)
         WORD        N5104           < 5 PAS DE PARCOURS DE X
         WORD        N5105           < 6 PAS DE PARCOURS DE Y
         WORD        N6000           < 7 IMAGE+/- (CTTE)
         WORD        N6001           < 8 DECALAGE IMAGE DE +/- (CTTE)
         WORD        N4000           < 9 MAKE COPY VISU EMISSION.
         WORD        N2000           < : COMMANDE DIRECTE DU T4014
         WORD        N1              < ; ELEMENT NEUTRE
         WORD        N340            < < COMMENTAIRE OU TEXTE A EDITER
         WORD        N1001           < = DEFINITION ARGUMENT FORMEL
         WORD        N16             < > DEFINITION DE PROGRAMME
         WORD        N860            < ? APPEL DIRECT PROG EN BIBLI
         WORD        N31             < @ MODIFICATION DE CTTE
         WORD        N610            < A B ... X Y Z
<
<        R E T O U R   A U   C C I  :
<
N23:     BYTE        PC+PGON1;0
         WORD        GOCCI           < RETOUR CCI PUIS VERS N1 SI !GO.
<
<        E R R E U R S   D ' E X E C U T I O N  :
<
N24:     EQU         $
N25:     EQU         $
N27:     EQU         $
         BYTE        PC+PGON1;0
         WORD        CARUP           < MISE EN EXPOSANT DU CARACTERE
                                     < EN ERREUR.
<
<        R E T O U R   A   ' G E '  :
<
N22:     BYTE        PCS;0
         WORD        GOGE            < RETOUR A GE , ET VERS N1
                                     < SI ERREUR DE CHARGEMENT.
N700:    EQU         N22
<
<        A P P E L   ' T I '  :
<
N3200:   BYTE        PC+PGON1;0
         WORD        CALLTI          < VERS L'APPEL DE L'OVERLAY 'TI'.
<
<        G E S T I O N   D E S   S O C I E T E S  :
<
N5100:   BYTE        PC+PGON1;1      < A NOTER : B=1.
         WORD        ESP1            < RETOUR AU QUADRILLAGE 1.
N5101:   BYTE        PC+PGON1;0
         WORD        LIFE            < PASSAGE A LA GENERATION SUIVANTE.
N5102:   BYTE        PC+PGON1;0      < A NOTER : B=0.
         WORD        NBASC
N5103:   BYTE        PC+PGON1;0
         WORD        ESP2            < PASSAGE AU QUADRILLAGE 2.
N5104:   BYTE        PC+PGON1;0
         WORD        PASX            < CHANGEMENT DE DELX.
N5105:   BYTE        PC+PGON1;0
         WORD        PASY            < CHANGEMENT DE DELY.
<
<        T R A N S F O R M A T I O N S   I T E R A T I V E S  :
<
N6000:   BYTE        PC+PGON1;0
         WORD        IPLUS           < INCREMENTATION/DECREMENTATION.
N6001:   BYTE        PC+PGON1;0
         WORD        IROT            < DECALAGE CIRCULAIRE IMAGE.
<
<        E F F A C E M E N T   E C R A N  :
<
N21:     BYTE        PC+PGON1;0
         WORD        ERASE           < EFFACEMENT DE L'ECRAN.
<
<        M A K E   C O P Y  :
<
N4000:   EQU         $
         BYTE        PC;0
         WORD        MCOPY
         WORD        N27             < ERREUR D'ASSIGNATION.
         WORD        N1              < OK , VERS LA COMMANDE SUIVANTE.
<
<        C O M M A N D E   D I R E C T E   D U   T 4 0 1 4  :
<
N2000:   EQU         $
         BYTE        PGS;0           < RECUPERATION DE LA COMMANDE (Y).
         BYTE        PC+PGON1;0
         WORD        COMAND          < ENVOI DE LA COMMANDE DIRECTE.
<
<        A R R E T / M A R C H E   V I D E O  :
<
N5000:   EQU         $
         BYTE        PC;0
         WORD        ONOFF
         WORD        N27             < ERREUR DE NUMERO DE COMPTE ...
         WORD        N1              < OK : ARRET/MARCHE EN BASCULE ...
<
<        T R A I T E M E N T   D E S   ' ( '   S I M P L E S  :
<
N14:     BYTE        PUSH;0          < POUR FAIRE UNIQUEMENT +1 SUR CP.
         WORD        N27             < TROP DE '(' : ABORT ...
         WORD        N1              < OK.
<
<        T R A I T E M E N T   D E S   ' ) '  :
<
N15:     BYTE        PULL;1          < PULL VERITABLE.
         WORD        N27             < ERREUR : TROP DE ')' 9..
         WORD        N1
<
<        C O M M E N T A I R E   O U   T E X T E   A   E D I T E R  :
<
N340:    BYTE        PCS;0
         WORD        SAVNOM          < SAVE INDEX 1ER CARACTERE.
N800:    BYTE        PGS;0           < ACCES CARACTERE COURANT (Y).
         BYTE        PTM;";"         < FIN DE COMMENTAIRE ???
         BYTE        PT;"!"          < FIN DE MESSAGE ???
         WORD        N1              < FIN DE COMMENTAIRE , VERS N1.
         WORD        N800            < NI L'UN , NI L'AUTRE , AU SUIVANT
         BYTE        PC+PGON1;0      < EDITION DU TEXTE.
         WORD        TEXTE           < VERS N22 SI CTRL-X-OFF ...
<
<        D E F I N I T I O N   A R G U M E N T   F O R M E L
<                    C O U R A N T  :
<
N1001:   EQU         $
         BYTE        PGS;0           < ACCES AU CARACTERE COURANT (Y).
         BYTE        PTM;"("         < EST-CE UNE '(' ???
         WORD        N27             < NON , ERREUR ...
         BYTE        PC;0            < OUI , OK.
         WORD        DARGF           < SAVE L'INDEX DU 1ER CARACTERE
                                     < DE L'ARGUMENT FORMEL.
         WORD        N1000           < VERS LE SAUT DEFINITION PROG.
<
<        A P P E L   A R G U M E N T   F O R M E L  :
<
N941:    EQU         $
         BYTE        PC;0
         WORD        CARGF
         WORD        N27             < ERREUR : PAS D'ARG. FORMEL.
         WORD        N942            < OK.
<
<        D E M A N D E   D E   R E P E T I T I O N S  :
<
N8:      EQU         $
         BYTE        PGS;0
         BYTE        PC;0
         WORD        REPET1          < RECUPERATION NBRE ITERATIONS.
         WORD        N27             < ERREUR : NBRE ERRONE.
N30:     BYTE        PGS;0
         BYTE        PTM;"("         < EST-CE UNE '(' ???
         WORD        N27             < NON , ERREUR ...
         BYTE        PCS;0
         WORD        REPET2          < Y=NBRE REPETITIONS.
         BYTE        PUSH;CODREP     < PUSH RECURSIVITE.
         WORD        N27             < ERREUR : OVERSTACK ...
         WORD        N1              < OK , ET C'EST PARTI ...
<
<        M O D I F I C A T I O N   C O N S T A N T E  :
<
N31:     EQU         $
         BYTE        PGS;0
         BYTE        PC;0
         WORD        REPET1          < RECUPERATION CONSTANTE.
         WORD        N27             < ERREUR DE CONSTANTE.
         BYTE        PC+PGON1;0
         WORD        SCTTE           < OK , MAJ CONSTANTE ...
<
<        S A U T   D E F I N I T I O N   P R O G R A M M E  :
<
N16:     EQU         $
         BYTE        PGS;0
         BYTE        PTM;"("         < EST-CE UNE '(' ???
         WORD        N16             < BOUCLAGE JUSQU'A TROUVER '('.
N1000:   EQU         $               < ENTRY ARGUMENT FORMEL COURANT.
         BYTE        PCS;1           < A NOTER : B=1 !!!
         WORD        SETY            < POUR FAIRE CD=1.
         BYTE        PUSH;CODDEF     < EMPILEMENT LORS DE '('.
         WORD        N27             < ERREUR D'OVERSTACK.
N63:     BYTE        PGS;0
         BYTE        PTM;"("         < EST-CE UNE '(' ???
         BYTE        PT;")"          < EST-CE UNE ')' ???
         WORD        N64             < CAS DES '('.
         WORD        N63             < ON BOUCLE SUR LES UATRES
                                     < CARACTERES (# DE '(' ET ')').
         BYTE        PULL;0          < -1 SUR CP POUR ')'.
         WORD        N65             < ARRET SUR CP=0.
         WORD        N63             < BOUCLAGE SI CP#0.
N64:     BYTE        PUSH;0          < +1 SUR CP POUR '('.
         WORD        N25             < ERREUR : OVERSTACK.
         WORD        N63             < OK , BOUCALGE.
N65:     BYTE        PUSHS;0         < POUR FAIRE CP=1 A LA FIN DE
                                     < LA DEFINITION.
         BYTE        PULL;1          < PULL VERITABLE DE FIN DE
                                     < RECURSIVITE.
         WORD        N25             < ERREUR : OVERSTACK.
         WORD        N1              < OK , COMMANDE SUIVANTE.
<
<        A P P E L   P R O G R A M M E  :
<
N7:      EQU         $
N411:    EQU         $
         BYTE        PCS;0
         WORD        SAVNOM          < SAVE=INDEX 1ER CARACTERE NOM.
N80:     BYTE        PGS;0
         BYTE        PTM;";"         < EST-CE LA FIN DU NOM ???
         WORD        N80             < NON , BOUCLAGE JUSQU'A ';' 9
         BYTE        PC;0
         WORD        LOOKP           < RECHERCHE DEFINITION PROGRAMME.
         WORD        N300            < LE PROGRAMME N'EXISTE PAS DANS
                                     < L'ITEM COURANT.
N942:    EQU         $
         BYTE        PCS;2           < A NOTER : B=2 !!!
         WORD        SETY            < POUR FAIRE : Y=2.
         BYTE        PUSH;CODPRO     < PUSH RECURSIVITE.
                                     < (AVEC CD=2).
         WORD        N27             < ERREUR : OVERSTACK.
N301:    BYTE        PC+PGON1;0
         WORD        START           < LANCEMENT DU PROGRAMME TROUVE.
<
<        A P P E L   D I R E C T   P R O G R A M M E
<        E N   B I B L I O T H E Q U E  :
<
N860:    EQU         $
         BYTE        PCS;0
         WORD        SAVNOM          < SAV)=INDEX 1ER CARACTERE NOM.
N861:    BYTE        PGS;0
         BYTE        PTM;";"         < EST-CE LA FIN DE NOM ???
         WORD        N861            < NON , ON BOUCLE JUSQU'A ';'.
<
<        R E C H E R C H E   E N   B I B L I O T H E Q U E  :
<
N300:    BYTE        PC;0
         WORD        CHECKB          < VALIDATION BIBLIOTHEQUE.
         WORD        N25             < ERREUR DE TYPE ...
         BYTE        PC;0
         WORD        LOOKPB          < OK , RECHERCHE EN BIBLIOTHEQUE.
         WORD        N25             < ERREUR : PROGRAMME INEXISTANT ...
         BYTE        PCS;2
         WORD        SETY            < Y=2.
         BYTE        PUSH;CODPRO+CODDEF
                                     < PUSH RECURISIVITE AVEC
                                     < CHANGEMENT ITEM COURANT.
         WORD        N27             < ERREUR : OVERSTACK.
         WORD        N301            < OK , START DANS LE PROGRAMME.
<
<        C H A R G E M E N T   B I B L I O T H E Q U E  :
<
N302:    EQU         $
         BYTE        PCS;0
         WORD        SAVNOM          < SAVE=INDEX 1ER CARACTERE NOM.
N303:    BYTE        PGS;0
         BYTE        PTM;";"         < EST-CE LA FIN DE NOM ???
         WORD        N303            < ON BOUCLE JUSQU'A ';' ...
         BYTE        PC;0
         WORD        LOADB           < TENTATIVE DE CHARGEMENT DE
                                     < LA BIBLIOTHEQUE.
         WORD        N25             < ERREUR DE BIBLIOTHEQUE.
         BYTE        PC;0
         WORD        CHECKB          < VALIDATION BIBLIOTHEQUE.
         WORD        N25             < ERREUR DE TYPE.
         WORD        N1              < OK.
<
<        D E M A N D E   D E   P A U S E  :
<
N750:    EQU         $
         BYTE        PGS;0
         BYTE        PC;0
         WORD        REPET1          < SAVE=DUREE DE LA PAUSE EN
                                     < SECONDES.
         WORD        N27             < ERREUR DE DUREE.
         BYTE        PC+PGON1;0
         WORD        PAUSE           < PAUSE DE (SAVE) SECONDES.
<
<        A P P E L   N O M   I M A G E
<        V I D E O / F L O P P Y  :
<
N4010:   BYTE        PC;0
         WORD        SAVNOM          < SAVE LE 1ER CARACTERE DU NOM.
         WORD        N1500           < VERS LA RECUPERATION DU NOM.
         WORD        N1500           < VERS LA RECUPERATION DU NOM.
<
<
<        P R I M I T I V E S   N O N   R E C O N N U E S  :
<        E S S A I   I M A G E   V I D E O  :
<
<
N610:    EQU         $
         BYTE        PCS;0
         WORD        SNIMAG          < SAVE 1ER CARACTERE NOM IMAGE.
N1500:   BYTE        PGS;0
         BYTE        PTM;";"         < EST-CE ';' DE FIN DE NOM ???
         WORD        N1500           < BOUCLAGE JUSQU'A ';'.
         BYTE        PC;0
         WORD        LOADI           < TENTATIVE DE LOAD IMAGE VIDEO.
         WORD        N25             < ERREUR D'IMAGE (N'EXISTE PAS ,
                                     < OU MAUVAIS TYPE...)
         WORD        N1              < OK , COMMANDE SUIVANTE.
<
<        S E Q U E N C E   S O N O R E  :
<
N3000:   EQU         $
         BYTE        PCS;0
         WORD        SAVNOM          < SAVE LE 1ER CARACTERE DU SON.
N3001:   BYTE        PGS;0           < RECUPERATION 'SON' COURANT.
         BYTE        PTM;"!"         < EST-CE LA FIN DE SON ???
         WORD        N3001           < NON , ON CONTINUE A RECUPERER.
         BYTE        PC;0
         WORD        SON             < SI OUI , ON TENTE D'EMETTRE LE
                                     < SON RECUPERE.
         WORD        N25             < ERREUR : CE N'EST PAS :SYS ...
         WORD        N1              < OK , PRIMITIVE SUIVANTE.
<
<        C H A N G E M E N T   D ' O C T A V E  :
<
N3100:   EQU         $
         BYTE        PGS;0           < RECUPERATION DU CARACTERE SUIVANT
         BYTE        PC;0
         WORD        MOCTAV          < TENTATIVE DE CHANGEMENT OCTAVE.
         WORD        N27             < ERREUR D'OCTAVE.
         WORD        N1              < OK , VERS LA PRIMITIVE SUIVANTE.
         PAGE
<
<
<        S E Q U E N C E   S O N O R E  :
<
<
<        FONCTION :
<                      TRANSMET AU CONVERTISSEUR DIGITAL
<                    ANALOGIQUE SI CELA EST POSSIBLE LE
<                    SON DONT ON RECUPERE LA DESCRIPTION.
<
<
SON:     EQU         $
         LXI         1               < ERREUR A PRIORI ...
         CPZ         ASP             < EST-ON SOUS :SYS ???
         JE          SON1            < NON , ON ABORTE ...
<
< CAS D'UNE DEMANDE SOUS :SYS :
<
         LX          SAVE            < X=INDEX DU 1ER CARACTERE DU SON.
SON2:    EQU         $
         LBY         &AIC            < RECUPERATION DU SON COURANT.
         CPI         "!"             < EST-CE AL FIN DU SON ???
         JE          SON3            < OUI.
         JL          SON4            < 'SPACE' EST NEUTRE ...
         ADRI        -'5F,A          < TRANSCAODAGE.
         NGR         A,A             < ET REMISE EN POSITIF.
         STA         &ATEMPO         < CE QUI DONNE LA TEMPORISATION
                                     < DE FREQUENCE D'ECHANTILLONS.
         LA          ASP
         WORD        '1EC5           < EXECUTION MAITRE DE SP.
SON4:    EQU         $               < CAS DU 'SPACE'.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         JMP         SON2            < AU SUIVANT.
<
< SORTIE DE LA ROUTINE :
<
SON3:    EQU         $
         LXI         0               < RETOUR OK.
SON1:    EQU         $
         RSR
<
<
<        C H A N G E M E N T   D ' O C T A V E  :
<
<
<        ARGUMENT :
<                    Y=CARACTERE SUIVANT ','.
<
<
MOCTAV:  EQU         $
         LXI         1               < RETOUR EN ERREUR A PRIORI.
         LR          Y,A             < A=OCTAVE DEMANDE.
         ADRI        -'30,A          < CONVERSION BINAIRE.
         JAL         MOCTER          < ERREUR DE NUMERO D'3CTAVE.
         CPI         9               < EST-CE UN CHIFFRE DE 0 A 9 ???
         JG          MOCTER          < ERREUR DE NUMERO OCTAVE.
         STA         &AOCTAV         < OK , C'EST UN CHIFFRE DE 0 A 9 ,
                                     < IL DEVIENT L'OCTAVE COURANT.
         LXI         0               < RETOUR OK.
MOCTER:  EQU         $
         RSR                         < RETOUR ...
         PAGE
<
<
<        E C H A N T I L L O N A G E   M A I T R E   S O N  :
<
<
<        ARGUMENT :
<                    W=@DCT-ESCLAVE ,
<                    OCTAV=OCTAVE DESIRE (0,1,2,...) ,
<                    NPER=NBRE DE PERIODES A DECRIRE POUR UN SIGNAL ,
<                    TEMPO=TEMPO DE DILATATION DES FREQUENCES
<                          D'ECHANTILLONAGE ,
<                    ASIG=ADRESSE RELATIVE DU DESCRIPTEUR SIGNAL.
<
<
<        FORMAT DU SIGNAL :
<                    MOT0=-NBRE D'ECHANTILLONS PAR PERIODE ,
<                    OCTETS PRECEDENTS=AMPLITUDES D'ECHANTILLONAGE.
<
<
         LOCAL
LOC1:    EQU         $
NPER:    WORD        50              < NBRE IMPLICITE DE PERIODES
                                     < PAR SIGNAL.
TEMPO:   WORD        0               < TEMPO D'ECHANTILLONAGE.
OCTAV:   WORD        0               < OCTAVE DESIRE.
ASIG:    WORD        SIN             < ADRESSE RELATIVE DU SIGNAL
                                     < IMPLICITE.
ALECH:   WORD        0               < RELAI INDEX ABSOLU VERS LE
                                     < SIGNAL.
CU1:     WORD        WCUS            < ECRITURE SUR LE CU SON.
         PROG
         WORD        LOC1+'80
SP:      EQU         $
         LRP         L
         LA          -1,L            < A=BASE L RELATIVE.
         AD          10,W            < TRANSLATION PAR SLO.
         LR          A,L             < L=BASE L ABSOLUE.
         LA          ASIG            < ADRESSE RELATIVE DU SIGNAL.
         AD          10,W            < TRANSLATION PAR LE SLO.
         SBT         0               < BIT INDEX.
         STA         ALECH           < MISE EN PLACE DU RELAI ABSOLU
                                     < VERS LE SIGNAL.
         LA          OCTAV
         LR          A,C             < C=OCTAVE DEMANDE.
<
< GENERATION DU SIGNAL :
<
         LXI         0
         LY          &ALECH          < Y=-NBRE D'ECHANTILLONS.
         LX          NPER            < X=DUREE=NBRE DE PERIODES.
SP1:     EQU         $
         LR          X,B             < SAVE LE NBRE DE PERIODES.
<
< GENERATION D'UNE PERIODE :
<
         LR          Y,X             < X=-NBRE D'ECHANTILLONS.
SP2:     EQU         $
         PSR         X               < SAVE X.
         LX          TEMPO           < X=TEMPORISATION DE DILATATION.
         SLLS        0,X             < DECALAGE DU DUREE VARIABLE
                                     < PERMETTANT DE FAIRE VARIER LA
                                     < FREQUENCE D'ECHANTILLONAGE.
         PLR         X               < RESTAURE X.
         LBY         &ALECH          < A=AMPLITUDE COURANTE SIGNAL.
         SIO         CU1             < ET ENVOI SUR LE CU1.
         ADR         C,X             < PRISE EN COMPTE DE L'OCTAVE.
         JIX         SP2             < VERS L'AMPLITUDE SUIVANTE.
         LR          B,X             < RESTAURE LE NBRE DE PERIODES.
         JDX         SP1             < A LA PERIODE SUIVANTE.
         RSR
         PAGE
<
<
<        P I L E   D E   R E C U R S I V I T E  :
<
<
PIR:     EQU         $
         WORD        0;0             < 1ERE ENTREE DE PIR.
         DZS         X1              < PILE DE RECURSIVITE.
         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 VOLONTAIRE D'ASSEMBLAGE
                                     < SI MAUVAISE IMPLANTATION.
         DZS         X10+1
         EOT         #SIP GEN PROCESSEUR#



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