NMPROC:  VAL         "PA"            < NOM DU PROCESSEUR.
         IDP         "PA - RELEASE 01/06/1979"
         EOT         #SIP DEFINITION CMS5#
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        IMAGE           < ENTRY POINT DU GENERATEUR.
         WORD        0
PIMAGE:  EQU         $               < P='12 !!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         EOT         #SIP DEFINITION ITEM#
ITEM1:   EQU         ZERO+PILE-LTNI
ITEM2:   EQU         ZERO+PILE-LTNI-LTNI
         PAGE
<
< PILE DU PROGRAMME :
<
SSTACK:  VAL         40              < IL FAUT CE QU'IL FAUT...
STACK:   DZS         SSTACK
         EOT         #SIP IMAGE 256#
NOM:     EQU         ZERO+PILE+5-LNOM-2  < NOM DE L'IMAGE VIDEO.
IMAG:    EQU         NOM+LNOM+2      < IMAGE VIDEO.
<
< VALIDATION DU FORMAT DE L'IMAGE (CARREE) :
<
X20:     VAL         1024/DY         < NBRE DE LIGNES/IMAGE.
X21:     VAL         CNMPL*16        < NBRE DE POINTS/LIGNE.
         IF          X20-X21,,X100,
         IF          ATTENTION : L'IMAGE N'EST PAS CARREE !!!
X100:    VAL         0
<
< BUFFER DES SECTEURS SCRATCHES :
<
SECTOR:  EQU         STACK+SSTACK
         DZS         128             < CELA PEUT TOUJOURS SERVIR !!!
         PAGE
<
<
<        L O C A L  :
<
<
         TABLE
M9:      BYTE        5;'6D
         ASCI        "RAZ?"
M10:     BYTE        35;'6D
         ASCI        "MODE (AD=1/SB=2/OR=3/AND=4/EOR=5)="
M1:      BYTE        10;'6D
         ASCI        "LONGUEUR= "
M2:      BYTE        10;'6D
         ASCI        "PATTERN1= "
M3:      BYTE        10;'6D
         ASCI        "PATTERN2= "
M4:      BYTE        4;'6D
         ASCI        "--> "
M5:      BYTE        12;'6D
         ASCI        "HORIZONTAL? "
M6:      BYTE        7;'6D
         ASCI        "PAS X="
M7:      BYTE        7;'6D
         ASCI        "PAS Y="
         LOCAL
LOC:     EQU         $
<
< RELAIS A METTRE EN TETE DU LOCAL AFIN
< D'ABSOLUTISER LES DEPLACEMENTS D'ACCES SIMPLIFIANT
< AINSI L'ECRITURE DES SOUS-PROGRAMMES EN OVERLAY
< IMPLEMENTES DANS L'ITEM2 :
<
<        RESET       00 ('80)
ARESET:  WORD        RESET           < MISE D'UN POINT A 0.
<        SET         01 ('81)
ASET:    WORD        SET             < MISE D'UN POINT A 1.
<        INVER       10 ('82)
AINVER:  WORD        INVER           < INVERSION D'UN POINT.
<        TEST        11 ('83)
ATEST:   WORD        TEST            < TEST DE L'ETAT D'UN POINT.
<        EXISTENCE
AVOISE:  WORD        VOISE           < TEST ETAT ET EXISTENCE.
<
< MESSAGES :
<
AM1:     WORD        M1
AM2:     WORD        M2
AM3:     WORD        M3
AM4:     WORD        M4
AM5:     WORD        M5
AM6:     WORD        M6
AM7:     WORD        M7
AM9:     WORD        M9
AM10:    WORD        M10
REP:     DZS         2               < ENTREE DE NBRES HEXADECIMAUX.
<
< DEMANDES A CMS4 :
<
DEMSGN:  WORD        '0602           < CHARGEMENT DES OVERLAYS.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMCCI:  WORD        '0001           < APPEL DU CCI INTERACTIF.
DEMMEM:  WORD        '0004           < DEMANDE D'ALOCATION 8K MOTS.
RELMEM:  WORD        '0004           < DEMANDE D'ALLOCATION 4K MOTS.
         WORD        '4000
         WORD        '2000
DEMOUT:  WORD        '0202           < ECRITURE DES MESSAGES.
         WORD        0
         WORD        0
DEMIN:   WORD        '0101           < ENTREE SUR '01.
         WORD        REP-ZERO*2
         WORD        4
DEMREP:  WORD        '0101           < LECTURE 1 CARACTERE REPONSE.
         WORD        REP-ZERO*2
         WORD        1
RDK:     WORD        '0C00           < LECTURE SCRATCH DU DISQUE.
         WORD        SECTOR-ZERO*2
         WORD        128*2
         WORD        0               < NUMERO DU SECTEUR.
WDK:     WORD        '0C02           < ECRITURE SCRATCH DU DISQUE.
         WORD        SECTOR-ZERO*2
         WORD        128*2
         WORD        0               < NUMERO DU SECTEUR.
LOADI:   WORD        '0502           < RECUPERATION D'UNE IMAGE.
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
DELI:    WORD        '0302           < DELETE D'UNE IMAGE.
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
STORI:   WORD        '0402
         WORD        NOM-ZERO*2
         WORD        LIMAG+LNOM+2*2
         WORD        2*LNOM
<
< CONSTANTES :
<
KIN:     WORD        -1              < COMPTEUR DES ENTRIES DANS KO.
NGE:     WORD        "GE"            < NOM DU PROCESSEUR GE.
         IF          ORDI-"T",XWOR%,,XWOR%
ACNSYS:  ASCI        ":SYS"
XWOR%:   VAL         0
NMOTS:   WORD        2*LTNI          < NBRE DE MOTS DE ITEM1+ITEM2.
ALIMAG:  WORD        LIMAG           < NBRE DE MOTS DE L'IMAGE.
NMPL:    WORD        CNMPL           < NBRE MOTS DE 16 BITS PAR LIGNE.
NLIG:    WORD        1024/DY-1       < NBRE DE LIGNES/IMAGE-1.
NPPL:    WORD        CNMPL*16-1      < NBRE DE POINTS/LIGNE-1.
PASX:    WORD        0               < PAS DE PARCOURS SUR OX,
PASY:    WORD        0               < PAS DE PARCOURS SUR OY.
ITEST:   WORD        1               < 0 : TEST SUR LA VALEUR 0 DES POINTS,
                                     < 1 : TEST SUR VALEUR 1 DES POINTS.
X:       VAL         1               < COORDONNEE X D'UN POINT.
Y:       VAL         0               < COORDONNEE Y D'UN POINT.
INDIC:   WORD        0               < RESULTAT (0/1) DES TESTS
                                     < VIRTUELS.
SAVE:    WORD        0               < VARIABLE TEMPORAIRE DE 'PS'.
IHORIZ:  WORD        0               < 0=PARCOURS HORIZONTAL,
                                     < 1=PARCOURS VERTICAL.
XPAT:    WORD        0               < INDEX COURANT DE LA PATTERN.
LPAT:    WORD        0               < LONGUEUR DE LA PATTERN
                                     < (DE 1 A 32).
PAT:     DZS         2               < PATTERN RECHERCHEE.
NPAT:    DZS         2               < PATTERN DE REMPLACEMENT.
MPAT:    DZS         2               < MASQUE DE VALIDATION DE
                                     < 'PAT' ET 'NPAT'.
XIMAG:   WORD        0               < X LORS D'UN DEBUT DE COMPARAISON
                                     < ENTRE 'PAT' ET UNE SUITE
                                     < DE BITS DE L'IMAGE,
YIMAG:   WORD        0               < DE MEME Y.
<
< RELAIS DIVERS :
<
ATYP:    WORD        ITEM2+IINDIC    < ACCES AU TYPE DE L'ITEM2.
AITEM2:  WORD        ITEM2+LTN       < POINT D'ENTREE D'UN SOUS-
                                     < PROGRAMME EN OVERLAY
                                     < DANS L'ITEM2.
ASECT:   WORD        SECTOR-1,X      < RELAI DE RAZ BUFFER SECTEUR.
AIMAG1:  WORD        IMAG,X          < ACCES A L'IMAGE VIDEO COURANTE.
AIMAG0:  WORD        0               < POUR METTRE LES SECTEURS
                                     < SCRATCH DANS L'IMAGE COURANTE.
ASECT1:  WORD        SECTOR,X        < ACCES AU SECTEUR COURANT.
AIMAG:   WORD        IMAG-1,X        < RELAI DE RAZ IMAGE COURANTE.
AREP:    WORD        REP,X           < RELAI D'ACCES AUX REPONSES.
ASETV:   WORD        SETV            < MISE D'UN POINT VIRTUEL A 1.
ARSETV:  WORD        RSETV           < MISE D'UN POINT VIRTUEL A 0.
AINVEV:  WORD        INVEV           < INVERSION D'UN POINT VIRTUEL.
ATESTV:  WORD        TESTV           < TEST D'UN POINT VIRTUEL.
AXISTV:  WORD        XISTV           < EXISTENCE VIRTUELLE...
APS:     WORD        PS              < SBT.
APR:     WORD        PR              < RBT.
API:     WORD        PI              < IBT.
APT:     WORD        PT              < TBT.
AOP:     WORD        0               < PS/PR/PI/PT SUIVANT LES BESOINS.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
AEXIST:  WORD        EXIST           < EXISTENCE D'UN POINT.
APILE:   WORD        PILE-1          < PILE DE SMC.
ASTACK:  WORD        STACK-1         < PILE DE KO.
AI1:     WORD        ITEM1-1,X       < RELAI DE RAZ ITEM1.
AI2:     WORD        ITEM2-1,X       < RELAI DE RAZ ITEM1+ITEM2.
         IF          ORDI-"T",XWOR%,,XWOR%
ASP3:    WORD        SP3             < STABILISATION IMAGE VIDEO
                                     < SI :SYS, 0 SINON.
XWOR%:   VAL         0
AINCXY:  WORD        INCXY           < INCREMENTATION DE X ET Y.
AGOGE:   WORD        GOGE            < RETOUR A GE.
APRINT:  WORD        PRINT           < EDITION DES MESSAGES.
AINTER:  WORD        INTER           < INTERROGATION OUI/NON.
AHEX:    WORD        HEX             < CONVERSION ASCI --> BINAIRE.
ACOORD:  WORD        COORD           < ENTREE COORDONNE X/Y.
ACOEF:   WORD        COEF            < ENTREE RAPPORT DE ZOOM.
APAS:    WORD        PAS             < ENTREE D'UN PAS (#0).
ACONTI:  WORD        CONTI           < RETOUR DE LA ZONE SCRATCH
                                     < EN MEMOIRE.
ARAZDK:  WORD        RAZDK           < RAZ DE LA ZONE SCRATCH DK.
AINS:    WORD        INS             < INSTRUCTION VARIABLE DE 'PS'.
ACODE:   WORD        CODE,X          < LISTE DES CODES POSSIBLES
                                     < POUR 'INS' (L'OCTET 0
                                     < EN CONTIENT LE NOMBRE).
CODE:    EQU         $
         BYTE        5;'89;'88;'92;'93;'94
<
< TOPOGRAPHIE MEMOIRE :
<
NSEC:    VAL         LIMAG/128       < NRE DE SECTEURS POUR UNE IMAGE.
XSECR:   VAL         2*LTNI-128
NSECR:   VAL         XSECR/128       < NBRE DE SECTEURS RESIDANTS
                                     < SI PAS DE TRANSFORMATION.
XSECRT:  VAL         LTNI-128
NSECRT:  VAL         XSECRT/128      < NBRE DE SECTEURS RESIDANTS
                                     < SI TRANSFORMATION.
ANCIEN:  WORD        1               < EST INCREMENTE DE 1 A CHAQUE
                                     < MODIFICATION DE LA MEMOIRE
                                     < VIRTUELLE (CONSTITUE DONC
                                     < UNE HORLOGE).
ALS:     WORD        LSECT-1,X       < RELAI D'INITIALISATION DE
                                     < LA LISTE LSECT.
ALSECT:  WORD        LSECT,X         < REALI D'ACCES A LSECT.
ATOPO:   WORD        TOPO-1,X        < RELAI D'ACCES A TOPO.
ASECTC:  WORD        0               < RELAI COURANT D'ACCES A UN
                                     < SECTEUR MANIPULE.
AUSE:    WORD        USE-1,X         < RELAI D'ACCES A USE.
INFINI:  WORD        '7FFF
CSECT:   WORD        0               < MEMORISE LE SECTEUR COURANT.
WDKT:    WORD        '0C02           < ECRITURE 1 SECTEUR TOPO.
         WORD        0
         WORD        128*2
         WORD        0
RDKT:    WORD        '0C00           < LECTURE 1 SECTEUR TOPO.
         WORD        0
         WORD        128*2
         WORD        0
ABUF1:   WORD        PILE-XSECR/128*128*2
                                     < @OCTET DU 1ER BUFFER LIBRE.
ABUF:    WORD        PILE-XSECR/128*128*2
                                     < 1ER BUFFER LIBRE SI PAS TRANS.
ABUFT:   WORD        PILE-XSECRT/128*128*2
                                     < 1ER BUFFER LIBRE SI TRANS.
ANSECR:  WORD        NSECR           < NBRE DE SECTEURS RESIDANTS
                                     < INITIALISE SUR 'PAS TRANS'.
AWSE:    WORD        WSE             < ROUTINE DE REECRITURE
                                     < D'UN SECTEUR TOPO.
AVIRE:   WORD        VIRE            < ROUTINE SUPPRIMANT LA TOPO.
ARESID:  WORD        RESID           < REND LE SECTEUR SCRATCH (B)
                                     < RESIDENT EN MEMOIRE.
<
< LISTE DES SECTEURS REELS (DE 0 A NSEC-1) :
<
LSECT:   EQU         $
         DO          NSEC
         WORD        -1              < INITIALEMENT NON RESIDENT.
<
< LISTE D'OCCUPATION DES BUFFERS (DE 1 A NSECR) :
<
TOPO:    EQU         $
         DO          NSECR
         WORD        -1              < INOCCUPE INITIALEMENT.
<
< COMPTEUR D'USAGE DES BUFFERS :
<
USE:     EQU         $
         DO          NSECR
         WORD        0               < INUTILISE INITIALEMENT.
         PAGE
         PROG
<
<
<        E D I T I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE.
<
<
PRINT:   EQU         $
         PSR         C,X
         LR          A,C             < C=@MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1
         LBY         0,C             < A=LONGUEUR DU MESSAGE.
         STA         DEMOUT+2
         LAD         DEMOUT
         SVC         0               < EDITION DU MESSAGE.
         PLR         C,X
         RSR
<
<
<        I N T E R R O G A T I O N  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    B=0 : REPONSE=OUI,
<                      1 : REPONSE=NON,
<                    CARRY POSITIONNE PAR UN 'CPZR B'.
<
<
INTER1:  EQU         $
         LR          Y,A             < RESTAURE A=@MESSAGE.
INTER:   EQU         $
         LR          A,Y             < SAVE Y=@MESSAGE.
         BSR         APRINT          < EMISSION DU MESSAGE (A).
         LAD         DEMREP
         SVC         0               < ENTREE DE LA REPONSE.
         LBI         0               < B=0 (OUI A PRIORI).
         LBY         REP             < A=CARACTERE REPONDU.
         CPI         "O"
         JE          INTER2          < OUI.
         LBI         1               < B=1 (NON A PRIORI).
         CPI         "N"
         JNE         INTER1          < INCOMPREHENSIBLE...
INTER2:  EQU         $
         CPZR        B               < POSITIONNEMENT CODES CONDITION.
         RSR
         PAGE
<
<
<        R O U T I N E   D E   C R E A T I O N
<        D ' I M A G E S   V I R T U E L L E S  :
<
<
<        ARGUMENT :
<                    X=X DU POINT A TRAITER,
<                    Y=Y DU POINT A TRAITER.
<
<
<        RESULTAT :
<                    LE CARY EST POSITIONNE POUR 'TESTV', DE
<                    PLUS, LE SECTEUR COURANT PEUT CHANGER...
<
<
PS:      EQU         $
         STA         SAVE            < SAUVEGARDE TEMPORAIRE DU
                                     < MOT COURANT DE L'IMAGE.
         LAI         0               < GENERATION D'UN
         SBT         0,X             < MASQUE.
INS:     OR          SAVE            < INSTRUCTION VARIABLE (AD,
                                     < SB, OR, AND, EOR) ENTRE
                                     < LE MASQUE ET LE MOT COURANT.
         RSR
PR:      EQU         $
         RBT         0,X
         RSR
PI:      EQU         $
         IBT         0,X
         RSR
PT:      EQU         $
         CPZ         ITEST           < TEST DU MODE 0/1 DE TEST.
         JNE         PT1             < MODE 1.
         IBT         0,X             < MODE 0.
PT1:     EQU         $
         TBT         0,X
         LAI         1               < A EST DESTRUCTIBLE !!!
         SBCR        A               < CALCUL DU RESULTAT,
         STA         INDIC           < ET TRANSMISSION A 'EXISTV'.
         RSR
<
<        A C C E S   I M A G E   V I R T U E L L E  :
<
SETV:    EQU         $
         LA          APS             < SBT.
         JMP         VIRT
RSETV:   EQU         $
         LA          APR             < RBT.
         JMP         VIRT
TESTV:   EQU         $
         LA          APT             < TBT.
         JMP         VIRT
INVEV:   EQU         $
         LA          API
VIRT:    EQU         $
         STA         AOP             < MISE EN PLACE DE LA ROUTINE
                                     < VARIABLE...
         PSR         B,X,Y
         LR          Y,A
         MP          NMPL            < B=NUMERO 1ER MOT DE LA LIGNE
                                     < CONTENANT LE POINT ARGUMENT.
         LR          X,A
         SLRS        4
         ADR         A,B             < B=NUMERO DU MOT CONTENANT
                                     < LE POINT ARGUMENT.
         LAI         '0F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT ARGUMENT DANS LE
                                     < MOT (B).
         LR          B,A
         SLRD        7               < A=NUMERO DU SECTEUR LE CONTENANT.
         XR          A,B             < B=NUMERO DU SECTEUR.
         SLRS        9               < A=NUMERO DU MOT DANS LE SECTEUR.
         LR          A,Y             < Y=NUMERO DU MOT DANS LE SECTEUR.
         BSR         ARESID          < REND LE SECTEUR (B) RESIDENT.
         XR          X,Y             < X=NUMERO MOT, Y=NUMERO BIT.
         LA          &ASECTC         < ACCES MOT.
         XR          X,Y             < X=NUMERO BIT, Y=NUMERO MOT.
         BSR         AOP             < EXECUTION OPERATION SPECIFIQUE.
         XR          X,Y             < X=NUMERO MOT, Y=NUMERO BIT.
         LB          AOP             < ACCES A LA FONCTION DEMANDEE.
         XR          A,B
         CP          APT             < EST-CE LE TEST VIRTUEL ???
         XR          A,B
         JE          VIRT3           < OUI, DONC PAS DE MISE A JOUR
                                     < DE L'IMAGE VIRTUELLE...
         STA         &ASECTC         < MAJ IMAGE VIRTUELLE.
VIRT3:   EQU         $
         PLR         B,X,Y
         RSR
<
<
<        R E S I D E N C E   D ' U N   S E C T E U R  :
<
<
<        ARGUMENT :
<                    B=NUMERO DU SECTEUR A RENDRE RESIDENT.
<
<
RESID:   EQU         $
         PSR         X,Y
         LR          B,X             < X=SECTEUR REFERENCE.
         LA          &ALSECT
         JAG         VIRT1           < LE SECTEUR REFERENCE EST DEJA
                                     < RESIDENT A L'ADRESSE=(A).
<
< CAS OU LE SECTEUR REFERENCE (X) N'EST PAS RESIDENT :
<
         IC          ANCIEN          < MODIFICATION DE LA
                                     < MEMOIRE VIRTUELLE.
         STX         CSECT           < SAUVEGARDE DE (X).
         LX          ANSECR
         LA          INFINI          < RECHERCHE D'UN BUFFER.
VIRT2:   EQU         $
         CPZ         &ATOPO          < LE BUFFER COURANT EST-IL
                                     < LIBRE ???
         JGE         VIRT4           < OUI, PAR LE SECTEUR (A).
         LR          X,Y             < NON, (Y)=BUFFER CHOISI.
         JMP         VIRT5
VIRT4:   EQU         $
         CP          &AUSE           < EST-IL PEU UTILISE ???
         JL          VIRT10          < NON, ON LE LAISSE.
         LA          &AUSE           < NON, IL DEVIENT LE MINI.
         LR          X,Y             < PEUT-ETRE SERA-T'IL ELU..
VIRT6:   EQU         $
         JDX         VIRT2
<
< OK, ON A TROUVE UN BUFFER (Y)PEU OU PAS UTILISE :
<
VIRT5:   EQU         $
         LR          Y,X             < X=NUMERO DE BUFFER/1.
         BSR         AWSE            < REECRITURE DU SECTEUR TOPO
                                     < ASSOCIE PAR 'TOPO' AU
                                     < BUFFER (X).
         LA          ANCIEN
         STA         &AUSE           < ON MEMORISE AINSI LA 'DATE'
                                     < DE MODIFICATION DU
                                     < BUFFER (X).
         LX          CSECT           < X=SECTEUR A CHARGER.
         LA          WDKT+1          < A=@OCTET DU BUFFER LIBERE.
         STA         RDKT+1          < C'EST LA QU'ON VA LIRE (X).
         SLRS        1               < A=@MOT DU BUFFER.
         STA         &ALSECT         < LE SECTEUR (X) SERA RESIDENT
                                     < A L'ADRESSE (A).
         STX         RDKT+3
         XR          X,Y             < Y=SECTEUR A CHARGER,
                                     < X=NUMERO DU BUFFER.
         STY         &ATOPO          < ON MEMORISE LE NUMERO
                                     < DU SECTEUR (Y) ASSOCIE
                                     < AU BUFFER (X).
         XR          X,Y             < X=SECTEUR A CHARGER,
                                     < Y=NUMERO DU BUFFER.
         LAD         RDKT
         SVC         0               < CHARGEMENT DU SECTEUR.
         LX          CSECT
         LA          &ALSECT         < A=@MOT DU BUFFER.
VIRT1:   EQU         $
         SBT         0               < BIT D'INDEX.
         STA         ASECTC          < GENERATION D'UN RELAI D'ACCES
                                     < TEMPORAIRE AU SECTEUR (X).
         SLLS        1               < CONVERSION EN UNE ADRESSE
                                     < D'OCTET.
         SB          ABUF1
         SLRS        8
         ADRI        1,A             < A=NUMERO DU BUFFER LE CONTENANT.
         LR          A,X
         PLR         X,Y
         RSR
<
< CAS DES SECTEURS TRES UTILISES :
<
VIRT10:  EQU         VIRT6
<
<
<        R E E C R I T U R E   D ' U N   B U F F E R  :
<
<
<        ARGUMENT :
<                    X=NUMERO DE CE BUFFER.
<
<
WSE:     EQU         $
         LR          X,A
         ADRI        -1,A
         SLLS        8
         AD          ABUF1
         STA         WDKT+1          < @OCTET DU BUFFER.
         LA          &ATOPO          < A=SECTEUR ASSOCIE.
         JAL         WSE1            < IL N'EXISTE PAS...
         PSR         X
         STA         WDKT+3          < SI EXISTE MAJ DE WDKT.
         LAD         WDKT
         SVC         0               < REECRITURE DU SECTEUR.
         LX          WDKT+3          < X=SECTEUR ASSOCIE.
         LAI         -1
         STA         &ALSECT         < LE SECTEUR ASSOCIE N'EST
                                     < PLUS RESIDENT.
         PLR         X               < RESTAURE : X=NUMERO BUFFER.
         STA         &ATOPO          < LE BUFFER EST LIBRE.
         STZ         &AUSE           < ET NON UTILISE...
WSE1:    EQU         $
         RSR
<
<
<        R E E C R I T U R E   D E   T O U S   L E S
<        B U F F E R S   E N   S C R A T C H  :
<
<
VIRE:    EQU         $
         PSR         X
         LXI         NSECR           < X=NBRE DE BUFFERS.
VIRE1:   EQU         $
         BSR         AWSE            < ECRITURE DU BUFFER (X).
         JDX         VIRE1
         PLR         X
         RSR
         PAGE
<
<
<        R E T O U R   D E   L A   Z O N E   S C R A T C H
<        E N   M E M O I R E   I M A G E  :
<
<
CONTI:   EQU         $
         STZ         RDK+3           < DEPART SUR LE SECTEUR 0.
         LA          AIMAG1
         RBT         0
         STA         AIMAG0          < INITIALISATION SUR @IMAG.
         LXI         LIMAG/128       < X=NBRE DE SECTEURS.
ECH1:    EQU         $
         PSR         X
         LB          RDK+3           < B=NUMERO DU SECTEUR COURANT.
         BSR         ARESID          < QUE L'ON REND RESIDENT.
         LX          RDK+3
         LA          &ALSECT         < A=@BUFFER QUI LE CONTIENT.
         JAG         ECH2            < OK, IL EST OCCUPE...
         WORD        '1E16           < E R R E U R   P R O G  !!!
ECH2:    EQU         $
         LXI         128             < X=NBRE DE MOTS/SECTEUR.
         LB          AIMAG0          < B=@RECEPTEUR=@IMAGE.
         MOVE                        < GENERATION IMAGE.
         LXI         128             < X=NBRE DE MOTS/SECTEUR.
         ADR         X,B             < PROGRESSION @IMAGE.
         STB         AIMAG0
         IC          RDK+3           < PASSAGE AU SECTEUR SUIVANT.
         PLR         X
         JDX         ECH1
         RSR
<
<
<        R A Z   D E   L A   Z O N E   S C R A T C H  :
<
<
RAZDK:   EQU         $
         STZ         WDK+3           < DEPART SUR LE SECTEUR 0.
         LXI         128
RAZ1:    EQU         $
         STZ         &ASECT          < RAZ DU BUFFER SECTOR.
         JDX         RAZ1
         LXI         LIMAG/128       < NBRE DE BUFFERS SCRATCH
                                     < NECESSAIRE POUR 1 IMAGE.
RAZ2:    EQU         $
         PSR         X               < SAVE LE DECOMPTEUR.
         LB          WDK+3           < B=NUMERO DU SECTEUR COURANT.
         BSR         ARESID          < QUE L'ON REND RESIDENT.
         LX          WDK+3
         LB          &ALSECT         < B=RECEPTEUR=@BUFFER ASSOCIE.
         CPZR        B               < VALIDATION...
         JG          RAZ3            < OK, IL EST OCCUPE..
         WORD        '1E16           < E R R E U R   P R O G  !!
RAZ3:    EQU         $
         LA          ASECT1
         RBT         0               < A=@EMETTEUR DES '0000.
         LXI         128             < X=NBRE DE MOTS A RAZER.
         MOVE                        < RAZ DU SECTEUR COURANT.
         PLR         X               < RESTAURE LE DECOMPTEUR.
         IC          WDK+3           < PASSGE AU SECTEUR SUIVANT.
         JDX         RAZ2            < DECOMPTAGE..
         RSR
         PAGE
<
<
<        M I S E   D ' U N   B I T   A   1  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
SET:     EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL            < CONVERSION DE L'Y DU POINT EN
                                     < UN NUMERO DE MOT.
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < CALCUL DE X MODULO 16 ;
                                     < X=NUMERO DU BIT DANS LE MOT.
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         SBT         0,X             < POSITIONNEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        E F F A C E M E N T   D ' U N   P O I N T  :
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT X ET Y DU POINT.
<                    C=@IMAG (IMAGE VIDEO).
<
<
RESET:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         RBT         0,X             < EFFACEMENT DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        I N V E R S I O N   V I D E O   U N   P O I N T  :
<
<
<        ARGUMENT :
<                    X ET Y CONTIENNENT X ET Y DU POINT A INVERSER.
<                    C=@IMAG (IMAGE VIDEO).
<
<
INVER:   EQU         $
         PSR         B,X,C
         LR          Y,A
         MP          NMPL
         ADR         B,C
         LR          X,A
         SLRS        4
         ADR         A,C             < C=@MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU BIT REPRESENTANT
                                     < LE POINT DANS LE MOT ((C)).
         LA          0,C             < A=MOT CONTENANT LE POINT (X,Y).
         IBT         0,X             < INVERSION VIDEO DU POINT.
         STA         0,C             < MISE A JOUR DE CE MOT.
         PLR         B,X,C
         RSR
<
<
<        T E S T   D ' U N   P O I N T  :
<
<
<        FONCTION DE ITEST :
<                    ITEST=0 : CARY=1 SI POINT=0 ,
<                         =1 : CARY=1 SI POINT=1.
<
<
<        ARGUMENTS :
<                    X ET Y CONTIENNENT L'X ET L'Y DU POINT ,
<                    C=@IMAG.
<
<
<        RESULTAT :
<                    CARY POISITIONNE PAR LE POINT (0/1) 9
<
<
TEST:    EQU         $
         PSR         B,X,C
         LR          Y,A             < A=COORDONNEE Y DU POINT.
         MP          NMPL
         ADR         B,C
         LR          X,A             < A=COORDONNEE X DU POINT.
         SLRS        4
         ADR         A,C             < C#MOT CONTENANT LE POINT (X,Y).
         LAI         'F
         ANDR        A,X             < X=NUMERO DU POINT DANS LE MOT (C)
         LA          0,C
         CPZ         ITEST           < TEST DE LA VALEUR LOGIQUE DU
                                     < POINT.
         JNE         E1022           < CONVENTION NORMALE (1).
         IBT         0,X             < CAS DES CONVENTIONS INVERSEES (1)
E1022:   EQU         $
         TBT         0,X             < TEST DU POINT.
         PLR         B,X,C
         RSR
<
<
<        E X I S T E N C E   E T   C O M P T A G E
<                    D E S   V O I S I N S  :
<
<
<        ARGUMENT :
<                    X,Y = COORDONNEE D'UN VOISIN.
<
<
<        RESULTAT :
<                    B EST INCREMENTE DE 1 SI CE POINT EXISTE
<                      ET EST A 1.
<                    LE CARRY EST NON SIGNIFICATIF !!!!
<
<
VOISE:   EQU         $
         LR          X,A
         JAL         NVOISE          < X INVALIDE.
         CP          NPPL
         JG          NVOISE          < X INVALIDE.
         LR          Y,A
         JAL         NVOISE          < Y INVALIDE.
         CP          NLIG
         JG          NVOISE          < Y INVALIDE.
         BSR         ATEST           < TEST DU POINT EXISTANT (X,Y).
         ADCR        B               < B EST INCREMENTE DE 1
                                     < SI (X,Y) EXISTE.
NVOISE:  EQU         $
         RSR
         PAGE
<
<
<        E X I S T E N C E   E T   V A L E U R   P O I N T  :
<
<
<        ARGUMENT :
<                    X ET Y CONTIENNENT L'X ET L'Y D'UN POINT.
<
<
<        RESULTAT :
<                    A#0 : M(X,Y) N'EXISTE PAS , OU
<                          M(X,Y) EXISTE ET M(X,Y)=0.
<
<
EXIST:   EQU         $
         LR          X,A
         JAL         NEXIST          < X INVALIDE (<0).
         CP          NPPL
         JG          NEXIST          < X INVALIDE (>NPPL).
         LR          Y,A
         JAL         NEXIST          < M(X,Y) N'EXISTE PAS : A<0#0 !!!
         CP          NLIG
         JG          NEXIST          < M(X,Y) N'EXISTE PAS : A>0#0 !!!
<
< CAS OU LE POINT M(X,Y) EXISTE :
<
         BSR         ATEST           < TEST DE LA VALEUR DE M(X,Y).
         LAI         1
         SBCR        A               < A=0 SI M(X,Y)=1.
NEXIST:  EQU         $
         RSR
<
<
<        E X I S T E N C E   V I R T U E L L E  :
<
<
XISTV:   EQU         $
         LR          X,A
         JAL         NXISTV          < POINT VIRTUEL INEXISTANT.
         CP          NPPL
         JG          NXISTV          < POINT VIRTUEL INEXISTANT.
         LR          Y,A
         JAL         NXISTV          < POINT VIRTUEL INEXISTANT.
         CP          NLIG
         JG          NXISTV          < POINT VIRTUEL INEXISTANT.
         BSR         ATESTV          < TEST D'UN POINT VIRTUEL.
         LA          INDIC           < A=RESULTAT DU TEST VIRTUEL.
NXISTV:  EQU         $
         RSR                         < VOIR 'EXIST' POUR (A).
         IF          ORDI-"T",XWOR%,,XWOR%
<
<
<        V I S U A L I S A T I O N   I M A G E  :
<
<
TIMAG:   WORD        IMAG            < ADRESSE RELATIVE IMAGE VIDEO.
SP3:     EQU         $
         LRP         L
         LB          TIMAG-$+1,L     < B=@RELATIVE IMAGE.
         LA          10,W            < A=SLO(ESCLAVE).
         ADR         A,B             < B=@ABSOLUE IMAGE.
         LXI         NSPTV
         BSR         ACADCT,C        < L=@DCT-VIDEO.
         STB         ADM,L           < DEMANDE DE VISUALISATION IMAGE.
         RSR
XWOR%:   VAL         0
<
<
<        I N C R E M E N T A T I O N   X   E T   Y  :
<
<
<        FONCTION :
<                      CETTE ROUTINE INCREMENTE X ET Y AFIN
<                    D'ASSURER UN PARCORS CLASSIQUE DE
<                    L'IMAGE ; S'IL Y A SORTIE DE CELLE-CI,
<                    UN RETOUR A GE EST OPERE...
<
<
INCXY:   EQU         $
         CPZ         IHORIZ          < DIRECTION DE PARCOURS ???
         JNE         INCXY2          < VERTICALE.
<
< PARCOURS HORIZONTAL :
<
         LA          PASX
         ADR         A,X
         LR          X,A
         CP          NPPL            < VALIDATION DE X.
         JLE         INCXY1          < OK.
         LXI         0               < RETOUR EN DEBUT,
         LA          PASY            < ET CHANGEMENT
         ADR         A,Y             < DE LIGNE.
         LR          Y,A
         CP          NLIG            < VALIDATION DE Y.
         JLE         INCXY1          < OK.
INCXY3:  EQU         $
         ADRI        -1,K
         BR          AGOGE           < C'EST FINI : RETOUR A 'GE'.
INCXY1:  EQU         $
         RSR                         < RETOUR NORMAL.
<
< PARCOURS VERTICAL :
<
INCXY2:  EQU         $
         LA          PASY
         ADR         A,Y
         LR          Y,A
         CP          NLIG            < VALIDATION DE Y.
         JLE         INCXY1          < OK.
         LYI         0               < RETOUR 1ERE LIGNE.
         LA          PASX
         ADR         A,X
         LR          X,A
         CP          NPPL            < VALIDATION DE X.
         JLE         INCXY1          < OK.
         JMP         INCXY3          < FIN D'IMAGE.
         PAGE
<
<
<        E N T R E E   U N E   C O O R D O N N E E  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=COORDONNEE (X OU Y).
<
<
COORD1:  EQU         $               < RETOUR EN ERREUR.
         LR          B,A             < RESTAURE A=@MESSAGE.
COORD:   EQU         $
         PSR         X,Y
         LR          A,B             < SAVE B=@MESSAGE.
         BSR         APRINT          < ENVOI DU MESSAGE ARGUMENT.
         LAD         DEMIN
         SVC         0               < ENTREE D'UN NBRE HEXADECIMAL.
         LYI         4               < 4 CHIFFRES MAX A CONVERTIR.
         BSR         AHEX            < ESSAI DE CONVERSION...
         PLR         X,Y
         JNE         COORD1          < ERREUR : ON RECOMMENCE.
         JAL         COORD1          < COORDONNEE<0 : ERREUR..
         CPI         X20-1           < DEBORDEMENT : ERREUR...
         JG          COORD1          < ERREUR...
         RSR                         < OK, (A)=VALEUR HEXA.
<
<
<        E N T R E E   C O E F F I C I E N T  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=COEFFICIENT.
<
<
COEF1:   EQU         $
         LR          B,A             < RESTAURE A=@MESSAGE.
COEF:    EQU         $
         PSR         X,Y
         LR          A,B             < SAVE B=@MESSAGE.
         BSR         APRINT          < ENVOI DU MESSAGE.
         LAD         DEMIN
         SVC         0               < ENTREE DE 4 CARACTERES.
         LYI         4
         BSR         AHEX            < CONVERSION HEXA.
         PLR         X,Y
         JNE         COEF1           < ERREUR SYNTAXE HEXADECIMALE.
         RSR                         < OK...
<
<
<        E N T R E   D ' U N   P A S  :
<
<
<        ARGUMENT :
<                    A=@MESSAGE A EMETTRE.
<
<
<        RESULTAT :
<                    A=PAS#0.
<
<
PAS1:    EQU         $
         LR          B,A             < RESTAURE A=@MESSAGE.
PAS:     EQU         $
         PSR         X,Y
         LR          A,B             < SAVE B=@MESSAGE.
         BSR         APRINT          < ENVOI MESSAGE.
         LAD         DEMIN
         SVC         0               < ENTREE DU PAS.
         LYI         4               < Y=NBRE CARACTERES A DECODER.
         BSR         AHEX            < CONVERSION HEXA-BINAIRE.
         PLR         X,Y
         JNE         PAS1            < ERREUR SYNTAXE.
         JALE        PAS1            < REFUS DE PAS<=0.
         CPI         X20-1           < VALIDATION.
         JG          PAS1            < ERREUR.
         RSR
<
<
<        C O N V E R S I O N   A S C I   -->   B I N A I R E  :
<
<
<        RESULTAT :
<                    A=VALEUR CONVERTIE S'IL N'Y A PAS
<                    D'ERREUR, LES CODES DE CONDITION
<                    L'INDIQUANT.
<
<
HEX:     EQU         $
         PSR         B,X
         LXI         0               < X=INDEX DE 'REP'.
         LBI         0               < B=CUMUL COURANT.
HEX1:    EQU         $
         LBY         &AREP           < A=CARACTERE COURANT DE 'REP'.
         CPI         '04             < EST-CE 'EOT' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         CPI         '0D             < EST-CE 'R/C' ???
         JE          HEX5            < OUI, FIN DE CONVERSION.
         ADRI        -'30,A          < CONVERSION BIANIRE.
         JAL         HEX2            < ERREUR.
         CPI         9               < EST-CE UN CHIFFRE DECIMAL ???
         JLE         HEX3            < OUI.
         ADRI        -"A"+"9"+1,A    < NON.
         CPI         'A              < VALIDATION HEXDECIMALE ???
         JL          HEX2            < ERREUR.
         CPI         'F              < VALIDATION HEXADECIMALE ???
         JG          HEX2            < ERREUR.
HEX3:    EQU         $
         SCRS        4               < CUMUL PARTIEL DE LA
         SCLD        4               < VALEUR A CONVERTIR.
         ADRI        1,X             < PASSAGE AU CARACTERE SUIVANT.
         CPR         X,Y             < EST-CE FINI ???
         JNE         HEX1            < NON.
HEX5:    EQU         $
         LR          B,A             < OUI, A=RESULTAT.
         LBI         0               < B=0 : OK.
HEX4:    EQU         $
         CPZR        B               < POSITIONNEMENT DES CODES
                                     < DE CONDITION SUR ERREUR.
         PLR         B,X
         RSR
HEX2:    EQU         $               < CAS DES ERREURS.
         LBI         1               < B=1#0 : ERREUR.
         JMP         HEX4            < VERS LA SORTIE...
         PAGE
<
<
<        R E T O U R   A   ' G E '  :
<
<
GOGE:    EQU         $
GOGEX:   EQU         $               < ENTRY ALT-MODE.
         BSR         AVIRE           < TOUTE L'IMAGE VIRTUELLE EST
                                     < RENVOYEE EN SCRATCH AVANT
                                     < LE RETOUR A 'GE'.
ERR:     EQU         $               < SORTIE EN ERREUR...
         LAI         BRANCH-ZERO
         LR          A,W             < W=@BRANCH.
<
< RAZ DES ITEMS 1 ET 2 :
<
         LX          NMOTS           < X=NBRE DE MOTS A RAZER.
GOGE1:   EQU         $
         STZ         &AI2
         JDX         GOGE1
<
< MISE EN PLACE DU NOM DE 'GE' :
<
         LA          NGE
         STA         0,W             < (W)=@BRANCH.
<
< RETOUR A 4K, ET SMC :
<
         LA          APILE
         LR          A,K
         LAD         RELMEM
         SVC         0
GOGE2:   EQU         $
         LAD         DEMSGN          < A=@DEMSGN.
         BSR         AOVL            < CHARGEMENT DE 'GE'.
         LAD         DEMCCI
         SVC         0               < RETOUR AU CCI SI ERREUR.
         JMP         GOGE2
         PAGE
<
<
<        R E C H E R C H E   D E   F O R M E S
<                    L I N E A I R E S  :
<
<
<        FONCTION :
<                      CE PROCESSEUR RECHERCHE DES FORMES
<                    DE POINTS LINEAIRES D'AU PLUS 32
<                    POINTS ; LORSQU'IL EN TROUVE UNE,
<                    IL LA REMPLACE PAR UNE AUTRE DE MEME LONGUEUR.
<
<
         WORD        IMAG            < VALEUR BASE C.
         WORD        LOC+'80         < VALEUR BASE L.
         WORD        BRANCH          < VALEUR BASE W.
IMAGE:   EQU         $
         LRP         K
         ADRI        -1,K
         PLR         C,L,W           < INITIALISATION C,L,W.
         LA          ASTACK
         LR          A,K             < INITIALISATION K.
         IC          KIN             < COMPTAGE DES ENTRIES.
         JG          GOGEX           < ABORT SI ALT-MODE.
         LAD         DEMMEM
         SVC         0
         IF          ORDI-"T",XWOR%,,XWOR%
<
< TEST DU NUMERO DE COMTE D'APPEL :
<
         WORD        '1E25           < A,B=ACN.
         CP          ACNSYS
         JNE         INIT1           < ON N'EST PAS SOUS :SYS.
         LR          B,A
         CP          ACNSYS+1
         JE          INIT2           < ON EST SOUS :SYS.
INIT1:   EQU         $
         STZ         ASP3            < PAS DE STABILISATION D'IMAGE.
INIT2:   EQU         $
XWOR%:   VAL         0
<
< MODE DE GENERATION DE L'IMAGE SCRATCH :
<
OPER1:   EQU         $
         LA          AM10
         BSR         APRINT          < EMISSION D'UN MESSAGE.
         LAD         DEMREP
         SVC         0               < ENTREE DU MODE DE GENERATION.
         LBY         REP             < A=MODE CHOISI.
         ADRI        -'30,A          < DECODAGE ASCI-NUMERIQUE.
         JALE        OPER1           < ERREUR.
         LXI         0
         CPBY        &ACODE          < VALIDATION PAR RAPPORT AU
                                     < MODE MAX.
         JG          OPER1           < ERREU.
         LR          A,X             < X=MODE CHOISI.
         LBY         &ACODE          < A=OPERATION ASSOCIEE.
         STBY        &AINS           < QUE L'ON MET DANS 'PS'
                                     < POUR LA ROUTINE 'SETV'.
TR3:     EQU         $
<
< INITIALISATION DU DISQUE :
<
         LA          AM9
         BSR         AINTER          < FAUT-IL RAZER L'IMAGE SCRATCH.
         JNE         RZ1             < NON.
         BSR         ARAZDK
RZ1:     EQU         $
<
< DIRECTION DE PARCOURS :
<
         LA          AM5
         BSR         AINTER
         STB         IHORIZ          < 0=HORIZONTAL, 1=VERTICAL.
<
< PAS DE PARCOURS DE L'IMAGE :
<
         LA          AM6
         BSR         APAS
         STA         PASX
         LA          AM7
         BSR         APAS
         STA         PASY
<
< ENTREE DES FORMES ARGUMENTS :
<
PA1:     EQU         $
         LA          AM1
         BSR         ACOEF           < ENTREE DE LA LONGUEUR.
         JALE        PA1             < ERREUR.
         CPI         32              < VALIDATION.
         JG          PA1             < ERREUR.
         STA         LPAT            < SAVE LONGUEUR.
         LR          A,X             < X=INDEX DU 1ER BIT NON SIGNI-
                                     < FICATIF DES PATTERNS.
         LAI         0               < CLEAR MASK,
         LBI         0               < CLEAR MASK.
PA13:    EQU         $
         XR          A,X
         CPI         32              < EST-ON AU BOUT DE (A,B) ???
         XR          A,X
         JGE         PA17            < OUI, FIN DE MASQUE;
         SBT         0,X             < NON, GENERATION MASQUE...
         ADRI        1,X             < BIT SUIVANT.
         JMP         PA13
PA17:    EQU         $
         STA         MPAT+0          < SAUVEGARDE DU
         STB         MPAT+1          < MASQUE 'MPAT'.
PA2:     EQU         $
         LA          AM2
         BSR         ACOEF           < ENTREE DE 'PAT1'.
         STA         PAT+0
         AND         MPAT+0          < VALIDATION DE 'PAT1'.
         JANE        PA2             < ERREUR.
PA14:    EQU         $
         LA          AM4
         BSR         ACOEF           < ENTREE DE 'NPAT1'.
         STA         NPAT+0
         AND         MPAT+0          < VALIDATION DE 'NPAT1'.
         JANE        PA14            < ERREUR.
         LA          LPAT
         CPI         16              < Y-A-T'IL PLUS DE 16 POINTS ???
         JLE         PA3             < NON, IL SUFFIT....
PA15:    EQU         $
         LA          AM3
         BSR         ACOEF           < ENTREE DE 'PAT2'.
         STA         PAT+1
         AND         MPAT+1          < VALIDATION DE 'PAT2'.
         JANE        PA15            < ERREUR.
PA16:    EQU         $
         LA          AM4
         BSR         ACOEF           < ENTREE DE 'NPAT2'.
         STA         NPAT+1
         AND         MPAT+1          < VALIDATION DE 'NPAT2'.
         JANE        PA16            < ERREUR.
PA3:     EQU         $
<
<        R E C H E R C H E R C H E  :
<
         LXI         0               < POSITIONNEMENT AU
         LYI         0               < DEBUT DE L'IMAGE.
PA4:     EQU         $
         STZ         XPAT            < POSITIONNEMENT AU DEBUT
                                     < DE LA PATTERN CHERCHEE.
         STX         XIMAG           < SAVE LE POINT COURANT
         STY         YIMAG           < DE L'IMAGE.
PA5:     EQU         $
         LBI         0               < INITIALISATION INDICATEUR.
         BSR         AVOISE          < TEST POINT COURANT (X,Y) :
                                     < B=0 : (X,Y)=0 ; B=1 : (X,Y)=1.
         PSR         B,X
         LA          PAT+0           < ACCES A LA PATTERN CHERCHEE.
         LB          PAT+1
         LX          XPAT            < INDEX COURANT PATTERN
         TBT         0,X             < TEST DU BIT COURANT PATTERN.
         LAI         0
         ADCR        A               < A=0 : BIT=0 ; A=1 : BIT=1.
         PLR         B,X
         CPR         A,B
         JNE         PA6
<
< CAS OU L'ON A TROUVE 2 BITS COINCIDANTS :
<
         IC          XPAT            < PROGRESSION DANS LA PATTERN.
         LA          XPAT
         CP          LPAT            < EST-ON AU BOUT DE LA PATTERN ???
         JGE         PA7             < OUI, DONC REMPLACEMENT.
         BSR         AINCXY          < NON, PASSAGE POINT SUIVANT.
         JMP         PA5
<
< CAS DE 2 FORMES COINCIDANTES :
<
PA7:     EQU         $
         LX          XIMAG           < RETOUR AU POINT DE DEBUT
         LY          YIMAG           < DE LA COINCIDENCE.
         STZ         XPAT            < RETOUR DEBUT DE PATTERN.
<
< RECOPIE DE LA NOUVELLE PATTERN :
<
PA8:     EQU         $
         LA          NPAT+0          < ACCES A LA NOUVELLE PATTERN.
         LB          NPAT+1
         PSR         X               < SAVE COORDONNEE X.
         LX          XPAT            < X=INDEX COURANT PATTERN.
         TBT         0,X             < FAUT-IL METTRE UN 1 OU UN 0 ???
         PLR         X               < RESTAURE COORDONNEE X.
         JC          PA9             < METTRE UN 1.
         BSR         ARSETV          < METTRE UN 0.
         JMP         PA10
PA9:     EQU         $
         BSR         ASETV           < METTRE UN 1.
PA10:    EQU         $
         BSR         AINCXY          < PROGRESSION IMAGE.
         IC          XPAT            < PASSAGE AU POINT SUIVANT 'NPAT'
         LA          XPAT
         CP          LPAT            < ET VALIDATION.
         JL          PA8             < AU POINT SUIVANT DE 'NPAT'.
         JMP         PA4             < SI NON, RECHERCHE NOUVELLE
                                     < COINCIDENCE.
<
< CAS DE 2 BITS DIFFERENTS :
<
PA6:     EQU         $
         LX          XIMAG           < RETOUR AU DEBUT DE LA
         LY          YIMAG           < COINCIDENCE.
         BSR         ATEST           < TEST POINT (X,Y).
         JC          PA11            < METTRE UN 1.
         BSR         ARSETV          < ON RECOPIE UN 0.
         JMP         PA12
PA11:    EQU         $
         BSR         ASETV           < ON RECOPIE UN 1.
PA12:    EQU         $
         BSR         AINCXY          < PASSAGE AU POINT IMAGE SUIVANT.
         DC          XPAT
         JGE         PA6             < IL RESTE AU MOINS UN POINT
                                     < A RECOPIER.
         JMP         PA4             < VERS LA RECHERCHE D'UN COINCIDENCE.
         PAGE
<
<
<        I M P L A N T A T I O N  :
<
<
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE VOLONTAIRE
                                     < SI MAUVAISE IMPLANTATION...
         DZS         X10+1           < PAR PROPRETE !!!!
         EOT         #SIP GEN PROCESSEUR#



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