DF'SIOH BENSON 1'
ED'SIOH BENSON 1'
IN0
         PAGE
         IDP         "SIOH BENSON 1"
<
<
<        S O R T I E   I M A G E   S U R   B E N S O N   1  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    RESIDENTE SUR LE BENSON AVEC
<                    DES NIVEAUX DE GRIS.
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         2
BUFCU:   DZS         LBUFCU
BUFCU0:  EQU         BUFCU
BUFCU1:  EQU         BUFCU0+1
DEMCU2:  BYTE        '0B;'02         < ENVOI D'UN POINT A LA BENSON...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA BENSON...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         A,X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ENVOI DE L'OCTET COURANT,
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         A,X
         RSR
<
<
<        C O N S T A N T E S  :
<
<
DELTA::  VAL         4               < COTE DES CARRES REPRESENTANT LES
                                     < POINTS DE L'IMAGE.
XWOR%1:  VAL         DELTA=0
         IF          1>XWOR%1-DELTA,,XWOR%,
         IF          DELTA DOIT ETRE UNE PUISSANCE DE 2 !!!
XWOR%:   VAL         0
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '04
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JANE        SPU1            < NON...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROSIE LES AXES
< X,Y DE L'IMAGE ET DE LA
< BENSON, A CAUSE DU DEFILEMENT
< DU PAPIER)
<
SPU1:    EQU         $
XWOR%1:  VAL         DELTA=0
         LA          YR
         SLLS        XWOR%1          < ON REALISE UNE HOMOTHETIE,
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LA          XR
         SLLS        XWOR%1
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         BSR         ASPGPR          < A=NIVEAU(XR,YR)...
         ADRI        -NIVMAX,A
         NGR         A,A             < ON FAIT UNE INVERSION VIDEO...
XWOR%1:  VAL         13              < AMPLITUDE DU DECALAGE...
         SLLS        XWOR%1
         ORI         DELTA           < COTE SELON X...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LAI         DELTA
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU2:    EQU         $
<
< FIN :
<
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON 1'
DF'SIOH BENSON 2'
ED'SIOH BENSON 2'
IN0
         PAGE
         IDP         "SIOH BENSON 2"
<
<
<        S O R T I E   I M A G E   S U R   B E N S O N   2  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    SCRATCH SUR LE BENSON AVEC
<                    DES NIVEAUX DE GRIS.
<
<
<        ARGUMENTS :
A0::     VAL         0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE
                                     < L'IMAGE (QUI N'EST PAS CELUI DE LA
                                     < BENSON...).
A1::     VAL         A0+1            < FACTEUR D'ECHELLE SUR L'AXE 'Y' DE
                                     < L'IMAGE.
A2::     VAL         A1+1            < 0=OPEN (INITIALISATION DEBUT D'IMAGE),
                                     < SINON, PAS D'INITIALISATION...
A3::     VAL         A2+1            < 0=CLOSE (EN FIN D'IMAGE)...
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         128
BUFCU:   EQU         IMAGR+200       < EN RECOUVREMENT IMAGE RESIDENTE...
BUFCU0:  WORD        0
BUFCU1:  WORD        0
DEMCU2:  BYTE        '0B;'02         < ENVOI D'UN POINT A LA BENSON...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA BENSON...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
ABUFCU:  WORD        BUFCU,X         < RELAI D'ACCES AU BUFFER 'CU2',
IBUFCU:  WORD        0               < ET SON INDEX COURANT...
DELTAX:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE LA
                                     < BENSON (QUI N'EST PAS CELUI DE L'IMAGE).
DELTAY:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'Y' BENSON.
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         A,X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LX          IBUFCU
         STA         &ABUFCU         < MISE DANS LE BUFFER...
         ADRI        1,X
         STX         IBUFCU          < POUR LE MOT SUIVANT,
         LR          X,A
         SLLS        NOCMO=0
         CP          DEMCU2+2        < MAIS, NE SERAIT-CE PAS FINI ???
         JL          SPCU3           < NON...
         STZ         IBUFCU          < OUI, ON REINITIALISE,
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ET ON ENVOIE LE BUFFER COURANT...
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         A,X
         RSR
<
<
<        C O N S T A N T E S  :
<
<
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21             < 'START PLOT VECTOR'.
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '02             < 'END PLOT VECTOR'.
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JANE        SPU1            < NON...
<
< ENTREE DES FACETEURS D'ECHELLE :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         DELTAY          < SUR 'X' DE L'IMAGE ET 'Y' DE BENSON...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         DELTAX          < SUR 'Y' DE L'IMAGE ET 'X' DE BENSON...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JANE        SPU4            < PAS D'OPEN...
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
SPU4:    EQU         $
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROSIE LES AXES
< X,Y DE L'IMAGE ET DE LA
< BENSON, A CAUSE DU DEFILEMENT
< DU PAPIER)
<
SPU1:    EQU         $
         LA          YR
         STA         YS
         MP          DELTAX          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LA          XR
         STA         XS
         MP          DELTAY          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         BSR         ASPGPS          < A=NIVEAU(XS,YS)...
         ADRI        -NIVMAX,A
         NGR         A,A             < ON FAIT UNE INVERSION VIDEO...
XWOR%1:  VAL         13              < AMPLITUDE DU DECALAGE...
         SLLS        XWOR%1
         OR          DELTAY          < COTE SELON Y...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LA          DELTAX          < COTE SELON X...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JANE        SPU5            < PAS DE CLOSE...
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU5:    EQU         $
         LX          IBUFCU          < X=INDEX DU MOT COURANT,
         CPZR        X               < Y-A-T'IL UN BUFFER EN ATTENTE ???
         JE          SPU2            < NON, C'EST FINI...
         LA          DEMCU2+1        < OUI,
         LB          DEMCU2+2        < ON SAUVEGARDE
         PSR         A,B             < 'DEMCU2'...
         ADRI        -NOCMO,A
         STA         DEMCU2+1        < AFIN D'ATTEINDRE
         LBI         NOCMO+NOCMO
         STB         DEMCU2+2        < LE MOT1 DU 'CU2'...
         LAD         DEMCU2
SPU3:    EQU         $
         PSR         X
         SVC         0               < ENVOI DES MOTS...
         PLR         X
         DO          NOCMO
         IC          DEMCU2+1        < PROGRESSION DE L'ADRESSE BUFFER...
         JDX         SPU3            < AU SUIVANT...
         PLR         A,B
         STA         DEMCU2+1        < ET ON RESTAURE
         STB         DEMCU2+2        < 'DEMCU2'...
SPU2:    EQU         $
<
< FIN :
<
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   E N   ' V '  :
<
<
SPV:     EQU         $
         FLD         F0
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON 2'
DF'SIOH BENSON 3'
ED'SIOH BENSON 3'
IN0
         PAGE
         IDP         "SIOH BENSON 3"
         $EQU        $-48            < A T T E N T I O N...
         IDP         "ATTENTION : EST EN RECOUVREMENT DE -48 MOTS !!!"
<
<
<        S O R T I E   I M A G E   S U R   B E N S O N   3  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    SCRATCH SUR LE BENSON AVEC
<                    DES NIVEAUX DE GRIS EN UTILISANT
<                    LA MEMOIRE DES COULEURS, ET EN
<                    CALCULANT LA LUMINANCE 'Y', SUIVANT
<                    LA FORMULE :
<                                    Y=0,30*R+0,59*V+0,11*B.
<
<
<        ARGUMENTS :
A0::     VAL         0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE
                                     < L'IMAGE (QUI N'EST PAS CELUI DE LA
                                     < BENSON...).
A1::     VAL         A0+1            < FACTEUR D'ECHELLE SUR L'AXE 'Y' DE
                                     < L'IMAGE.
A2::     VAL         A1+1            < 0=OPEN (INITIALISATION DEBUT D'IMAGE),
                                     < SINON, PAS D'INITIALISATION...
A3::     VAL         A2+1            < 0=CLOSE (EN FIN D'IMAGE)...
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         128
BUFCU:   EQU         IMAGR+200       < EN RECOUVREMENT IMAGE RESIDENTE...
BUFCU0:  WORD        0
BUFCU1:  WORD        0
DEMCU2:  BYTE        '0B;'02         < ENVOI D'UN POINT A LA BENSON...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA BENSON...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
ABUFCU:  WORD        BUFCU,X         < RELAI D'ACCES AU BUFFER 'CU2',
IBUFCU:  WORD        0               < ET SON INDEX COURANT...
DELTAX:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE LA
                                     < BENSON (QUI N'EST PAS CELUI DE L'IMAGE).
DELTAY:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'Y' BENSON.
SAVNIV:  EQU         DELTAX          < SAUVEGARDE DU MOT COURANT DE LA
                                     < MEMOIRE DES COULEURS.
MEMAD:   EQU         DELTAY          < ADRESSE DU MOT COURANT DE LA MEMOIRE
                                     < DES COULEURS.
MC:      EQU         BUFCU+LBUFCU    < MEMOIRE DES LUMINANCES 'Y'.
LMC::    VAL         NIVMAX+1        < LONGUEUR DE 'LMC'...
AMC:     WORD        MC,X            < RELAI VERS 'MC'...
NNIV::   VAL         16              < NOMBRE DE NIVEAUX PAR CANAL.
ASP1:    WORD        SP1             < S/P DE RECUPERATION D'UN NIVEAU DE GRIS,
ASP2:    WORD        SP2             < S/P DE CALCUL DE LA LUMINANCE.
F030:    FLOAT       0.30            < COEFFICIENT DE 'R',
F059:    FLOAT       0.59            < COEFFICIENT DE 'V',
F011:    FLOAT       0.11            < COEFFICIENT DE 'B'.
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         A,X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LX          IBUFCU
         STA         &ABUFCU         < MISE DANS LE BUFFER...
         ADRI        1,X
         STX         IBUFCU          < POUR LE MOT SUIVANT,
         LR          X,A
         SLLS        NOCMO=0
         CP          DEMCU2+2        < MAIS, NE SERAIT-CE PAS FINI ???
         JL          SPCU3           < NON...
         STZ         IBUFCU          < OUI, ON REINITIALISE,
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ET ON ENVOIE LE BUFFER COURANT...
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         A,X
         RSR
<
<
<        C A L C U L   D ' U N   N I V E A U   D E   G R I S  :
<
<
SP1:     EQU         $
         LAI         0               < CLEAR 'A',
         LB          SAVNIV          < B=MOT COURANT DE LA MEMOIRE,
         SLLD        NNIV=0          < A=NIVEAU DE GRIS COURANT,
         STB         SAVNIV          < ET SATUVEGARDE DU MOT COURANT...
         FLT                         < RENVOI DU NIVEAU DE GRIS EN FLOTTANT...
         RSR
<
<
<        C U M U L   D E   L A   L U M I N A N C E  :
<
<
SP2:     EQU         $
         FAD         FWORK
         FST         FWORK
         RSR
<
<
<        C O N S T A N T E S  :
<
<
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21             < 'START PLOT VECTOR'.
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '02             < 'END PLOT VECTOR'.
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JANE        SPU1            < NON...
<
< CALCUL DE LA LUMINANCE DES POINTS DE L'IMAGE :
<
         LAI         NSPCOL
         SBT         0
         ACTD        1               < B=ADRESSE DE LA MEMOIRE DES COULEURS,
         STB         MEMAD           < QUE L'ON SAUVEGARDE...
         LXI         0               < X=INDEX DES NIVEAUX DE GRIS.
GCOUL1:  EQU         $
         FLD         F0
         FST         FWORK           < INITIALISATION DE LA LUMINANCE...
         LA          MEMAD           < A=ADRESSE DU MOT COURANT,
         ACTD        1               < QUE L'ON RECUPERE DANS 'B',
         SLLD        NNIV=0          < ET QUE L'ON CADRE...
         STB         SAVNIV
         BSR         ASP1            < RECUPERATION DU BLEU,
         FMP         F011
         BSR         ASP2
         BSR         ASP1            < RECUPERATION DU VERT,
         FMP         F059
         BSR         ASP2
         BSR         ASP1            < RECUPERATION DU ROUGE,
         FMP         F030
         BSR         ASP2
         FIX
         STA         &AMC            < SAUVEGARDE DE LA LUMINANCE EQUIVALENTE
                                     < DU NIVEAU DE GRIS=(X)...
         IC          MEMAD           < AU MOT SUIVANT,
         ADRI        1,X
         LR          X,A
         CPI         NIVMAX          < S'IL EXISTE...
         JLE         GCOUL1          < ET OUI...
<
< ENTREE DES FACTEURS D'ECHELLE :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         DELTAY          < SUR 'X' DE L'IMAGE ET 'Y' DE BENSON...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         DELTAX          < SUR 'Y' DE L'IMAGE ET 'X' DE BENSON...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JANE        SPU4            < PAS D'OPEN...
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
SPU4:    EQU         $
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROSIE LES AXES
< X,Y DE L'IMAGE ET DE LA
< BENSON, A CAUSE DU DEFILEMENT
< DU PAPIER)
<
SPU1:    EQU         $
         LA          YR
         STA         YS
         MP          DELTAX          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LA          XR
         STA         XS
         MP          DELTAY          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         BSR         ASPGPS          < A=NIVEAU(XS,YS)...
         LR          A,X             < X=NIVEAU DE GRIS,
         LA          &AMC            < A=LUMINANCE REELLE DE CE POINT.
XWOR%1:  VAL         12              < AMPLITUDE DU DECALAGE...
         SLLS        XWOR%1
         OR          DELTAY          < COTE SELON Y...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LA          DELTAX          < COTE SELON X...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JANE        SPU5            < PAS DE CLOSE...
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU5:    EQU         $
         LX          IBUFCU          < X=INDEX DU MOT COURANT,
         CPZR        X               < Y-A-T'IL UN BUFFER EN ATTENTE ???
         JE          SPU2            < NON, C'EST FINI...
         LA          DEMCU2+1        < OUI,
         LB          DEMCU2+2        < ON SAUVEGARDE
         PSR         A,B             < 'DEMCU2'...
         ADRI        -NOCMO,A
         STA         DEMCU2+1        < AFIN D'ATTEINDRE
         LBI         NOCMO+NOCMO
         STB         DEMCU2+2        < LE MOT1 DU 'CU2'...
         LAD         DEMCU2
SPU3:    EQU         $
         PSR         X
         SVC         0               < ENVOI DES MOTS...
         PLR         X
         DO          NOCMO
         IC          DEMCU2+1        < PROGRESSION DE L'ADRESSE BUFFER...
         JDX         SPU3            < AU SUIVANT...
         PLR         A,B
         STA         DEMCU2+1        < ET ON RESTAURE
         STB         DEMCU2+2        < 'DEMCU2'...
SPU2:    EQU         $
<
< FIN :
<
SPV:     EQU         $               < C O M P O S A N T E   E N   ' V '.
SPW:     EQU         $               < C O M P O S A N T E   E N   ' W '.
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON 3'
DF'SIOH BENSON 4'
ED'SIOH BENSON 4'
IN0
         PAGE
         IDP         "SIOH BENSON 4"
         $EQU        $-48            < A T T E N T I O N...
         IDP         "ATTENTION : EST EN RECOUVREMENT DE -48 MOTS !!!"
<
<
<        S O R T I E   I M A G E   S U R   B E N S O N   4  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    SCRATCH SUR LE BENSON AVEC
<                    DES NIVEAUX DE GRIS EN UTILISANT
<                    LA MEMOIRE DES COULEURS, ET EN
<                    CALCULANT LA LUMINANCE 'Y', SUIVANT
<                    LA FORMULE :
<                                    Y=0,30*R+0,59*V+0,11*B.
<                      DE PLUS CE MDULE TRAVAILLE
<                    EN MODE CANAL...
<
<
<        ARGUMENTS :
A0::     VAL         0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE
                                     < L'IMAGE (QUI N'EST PAS CELUI DE LA
                                     < BENSON...).
A1::     VAL         A0+1            < FACTEUR D'ECHELLE SUR L'AXE 'Y' DE
                                     < L'IMAGE.
A2::     VAL         A1+1            < 0=OPEN (INITIALISATION DEBUT D'IMAGE),
                                     < SINON, PAS D'INITIALISATION...
A3::     VAL         A2+1            < 0=CLOSE (EN FIN D'IMAGE)...
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         1024
BUFCU:   EQU         IMAGR+200       < EN RECOUVREMENT IMAGE RESIDENTE...
BUFCU0:  WORD        0
BUFCU1:  WORD        0
DEMCU2:  BYTE        '0B;'0A         < ENVOI D'UN POINT A LA BENSON...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA BENSON...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
ABUFCU:  WORD        BUFCU,X         < RELAI D'ACCES AU BUFFER 'CU2',
IBUFCU:  WORD        0               < ET SON INDEX COURANT...
DELTAX:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE LA
                                     < BENSON (QUI N'EST PAS CELUI DE L'IMAGE).
DELTAY:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'Y' BENSON.
SAVNIV:  EQU         DELTAX          < SAUVEGARDE DU MOT COURANT DE LA
                                     < MEMOIRE DES COULEURS.
MEMAD:   EQU         DELTAY          < ADRESSE DU MOT COURANT DE LA MEMOIRE
                                     < DES COULEURS.
MC:      EQU         BUFCU+LBUFCU    < MEMOIRE DES LUMINANCES 'Y'.
LMC::    VAL         NIVMAX+1        < LONGUEUR DE 'LMC'...
AMC:     WORD        MC,X            < RELAI VERS 'MC'...
NNIV::   VAL         16              < NOMBRE DE NIVEAUX PAR CANAL.
ASP1:    WORD        SP1             < S/P DE RECUPERATION D'UN NIVEAU DE GRIS,
ASP2:    WORD        SP2             < S/P DE CALCUL DE LA LUMINANCE.
F030:    FLOAT       0.30            < COEFFICIENT DE 'R',
F059:    FLOAT       0.59            < COEFFICIENT DE 'V',
F011:    FLOAT       0.11            < COEFFICIENT DE 'B'.
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         A,X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LX          IBUFCU
         STA         &ABUFCU         < MISE DANS LE BUFFER...
         ADRI        1,X
         STX         IBUFCU          < POUR LE MOT SUIVANT,
         LR          X,A
         SLLS        NOCMO=0
         CP          DEMCU2+2        < MAIS, NE SERAIT-CE PAS FINI ???
         JL          SPCU3           < NON...
         STZ         IBUFCU          < OUI, ON REINITIALISE,
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ET ON ENVOIE LE BUFFER COURANT...
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         A,X
         RSR
<
<
<        C A L C U L   D ' U N   N I V E A U   D E   G R I S  :
<
<
SP1:     EQU         $
         LAI         0               < CLEAR 'A',
         LB          SAVNIV          < B=MOT COURANT DE LA MEMOIRE,
         SLLD        NNIV=0          < A=NIVEAU DE GRIS COURANT,
         STB         SAVNIV          < ET SATUVEGARDE DU MOT COURANT...
         FLT                         < RENVOI DU NIVEAU DE GRIS EN FLOTTANT...
         RSR
<
<
<        C U M U L   D E   L A   L U M I N A N C E  :
<
<
SP2:     EQU         $
         FAD         FWORK
         FST         FWORK
         RSR
<
<
<        C O N S T A N T E S  :
<
<
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21             < 'START PLOT VECTOR'.
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '02             < 'END PLOT VECTOR'.
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JANE        SPU1            < NON...
<
< CALCUL DE LA LUMINANCE DES POINTS DE L'IMAGE :
<
         LAI         NSPCOL
         SBT         0
         ACTD        1               < B=ADRESSE DE LA MEMOIRE DES COULEURS,
         STB         MEMAD           < QUE L'ON SAUVEGARDE...
         LXI         0               < X=INDEX DES NIVEAUX DE GRIS.
GCOUL1:  EQU         $
         FLD         F0
         FST         FWORK           < INITIALISATION DE LA LUMINANCE...
         LA          MEMAD           < A=ADRESSE DU MOT COURANT,
         ACTD        1               < QUE L'ON RECUPERE DANS 'B',
         SLLD        NNIV=0          < ET QUE L'ON CADRE...
         STB         SAVNIV
         BSR         ASP1            < RECUPERATION DU BLEU,
         FMP         F011
         BSR         ASP2
         BSR         ASP1            < RECUPERATION DU VERT,
         FMP         F059
         BSR         ASP2
         BSR         ASP1            < RECUPERATION DU ROUGE,
         FMP         F030
         BSR         ASP2
         FIX
         STA         &AMC            < SAUVEGARDE DE LA LUMINANCE EQUIVALENTE
                                     < DU NIVEAU DE GRIS=(X)...
         IC          MEMAD           < AU MOT SUIVANT,
         ADRI        1,X
         LR          X,A
         CPI         NIVMAX          < S'IL EXISTE...
         JLE         GCOUL1          < ET OUI...
<
< ENTREE DES FACTEURS D'ECHELLE :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         DELTAY          < SUR 'X' DE L'IMAGE ET 'Y' DE BENSON...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         DELTAX          < SUR 'Y' DE L'IMAGE ET 'X' DE BENSON...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JANE        SPU4            < PAS D'OPEN...
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
SPU4:    EQU         $
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROSIE LES AXES
< X,Y DE L'IMAGE ET DE LA
< BENSON, A CAUSE DU DEFILEMENT
< DU PAPIER)
<
SPU1:    EQU         $
         LA          YR
         STA         YS
         MP          DELTAX          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LA          XR
         STA         XS
         MP          DELTAY          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         BSR         ASPGPS          < A=NIVEAU(XS,YS)...
         LR          A,X             < X=NIVEAU DE GRIS,
         LA          &AMC            < A=LUMINANCE REELLE DE CE POINT.
XWOR%1:  VAL         12              < AMPLITUDE DU DECALAGE...
         SLLS        XWOR%1
         OR          DELTAY          < COTE SELON Y...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LA          DELTAX          < COTE SELON X...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JANE        SPU5            < PAS DE CLOSE...
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU5:    EQU         $
         LX          IBUFCU          < X=INDEX DU MOT COURANT,
         CPZR        X               < Y-A-T'IL UN BUFFER EN ATTENTE ???
         JE          SPU2            < NON, C'EST FINI...
         LB          DEMCU2+2        < SAUVEGARDE DU COMPTE D'OCTETS,
         LA          IBUFCU
         SLLS        NOCMO=0
         STA         DEMCU2+2        < ET MISE EN PLACE DU COMPTE D'OCTETS
                                     < RESIDUEL,
         LAD         DEMCU2
         SVC         0               < QUE L'ON ENVOIE A 'CU2'...
         STB         DEMCU2+2        < ET ON RESTAURE...
SPU2:    EQU         $
<
< FIN :
<
SPV:     EQU         $               < C O M P O S A N T E   E N   ' V '.
SPW:     EQU         $               < C O M P O S A N T E   E N   ' W '.
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON 4'
DF'SIOH BENSON 5'
ED'SIOH BENSON 5'
IN0
         PAGE
         IDP         "SIOH BENSON 5"
         $EQU        $-48            < A T T E N T I O N...
         IDP         "ATTENTION : EST EN RECOUVREMENT DE -48 MOTS !!!"
<
<
<        S O R T I E   I M A G E   S U R   B E N S O N   5  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    SCRATCH SUR LE BENSON AVEC
<                    DES NIVEAUX DE GRIS EN UTILISANT
<                    DES NIVEAUX DE GRIS DE LA
<                    BENSON LIES DIRECTEMENT ET
<                    ARBITRAIREMENT A CEUX DE L'IMAGE
<                    DE TV SANS UTILISER LES TABLES
<                    DE COLORIAGE AFIN D'ASSURER
<                    UN RENDU MAX...
<                      DE PLUS CE MODULE TRAVAILLE
<                    EN MODE CANAL...
<
<
<        ARGUMENTS :
A0::     VAL         0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE
                                     < L'IMAGE (QUI N'EST PAS CELUI DE LA
                                     < BENSON...).
A1::     VAL         A0+1            < FACTEUR D'ECHELLE SUR L'AXE 'Y' DE
                                     < L'IMAGE.
A2::     VAL         A1+1            < 0=OPEN (INITIALISATION DEBUT D'IMAGE),
                                     < SINON, PAS D'INITIALISATION...
A3::     VAL         A2+1            < 0=CLOSE (EN FIN D'IMAGE)...
A4::     VAL         A3+1            < =NOMBRE D'ITERATIONS SUR CHAQUE POINT
                                     <  DANS L'ESPOIR D'AMELIORER LES NOIRS...
                                     <  (CE N'EST PAS DU RACISME...)
A5::     VAL         A4+1            < TRANSLATION SUR OY EN NBRE DE POINTS TV.
A8::     VAL         8               < PREMIERE COULEUR (0=NOIR), LA DEU-
                                     < XIEME (1=ROUGE) AURA LE NUMERO 9, ET AINS
                                     < AINSI DE SUITE... (TRANSLATION DE 'A8').
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         1024
BUFCU:   EQU         IMAGR+200       < EN RECOUVREMENT IMAGE RESIDENTE...
BUFCU0:  WORD        0
BUFCU1:  WORD        0
DEMCU2:  BYTE        '0B;'0A         < ENVOI D'UN POINT A LA BENSON...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA BENSON...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
ABUFCU:  WORD        BUFCU,X         < RELAI D'ACCES AU BUFFER 'CU2',
IBUFCU:  WORD        0               < ET SON INDEX COURANT...
DELTAX:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE LA
                                     < BENSON (QUI N'EST PAS CELUI DE L'IMAGE).
DELTAY:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'Y' BENSON.
ANIV:    WORD        NIV,X           < ACCES A LA TABLE D'ASSOCIATION ENTRES
                                     < LES NIVEAUX DE GRIS DE L'IMAGE DE TV ET
                                     < CEUX DE LA BENSON :
NIV:     EQU         $
XBLANC:: VAL         -1              < CODE DU VRAI BLANC...
         WORD        16+XBLANC       < NIVEAU=0,
         WORD        -7+XBLANC       < NIVEAU=1,
         WORD        14+XBLANC       < NIVEAU=2,
         WORD        13+XBLANC       < NIVEAU=3,
         WORD        10+XBLANC       < NIVEAU=4,
         WORD        7+XBLANC        < NIVEAU=5,
         WORD        2+XBLANC        < NIVEAU=6,
         WORD        0+XBLANC        < NIVEAU=7.
NIVO:    WORD        0               < MEMORISATION DU NIVEAU BENSON COURANT.
F100:    FLOAT       256             < POUR RECUPERER LES NIVEAUX DE GRIS
                                     < DEMANDES...
FLAG:    WORD        '0000           < FLAG COURANT A CONCATENER SUR 'DELTAX',
FLAG6:   WORD        'C000           < VALEUR A DONNER POUR OBTENIR LES
                                     < PATTERNS VARIEES, '0000 DONNANT LES
                                     < NIVEAUX DE GRIS...
NITER:   WORD        1               < NOMBRE D'ITERATIONS DE CHAQUE POINT.
TRANSY:  WORD        0               < TRANSLATION SUR OY (EN POINTS TV).
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         A,X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LX          IBUFCU
         STA         &ABUFCU         < MISE DANS LE BUFFER...
         ADRI        1,X
         STX         IBUFCU          < POUR LE MOT SUIVANT,
         LR          X,A
         SLLS        NOCMO=0
         CP          DEMCU2+2        < MAIS, NE SERAIT-CE PAS FINI ???
         JL          SPCU3           < NON...
         STZ         IBUFCU          < OUI, ON REINITIALISE,
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ET ON ENVOIE LE BUFFER COURANT...
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         A,X
         RSR
<
<
<        C O N S T A N T E S  :
<
<
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21             < 'START PLOT VECTOR'.
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '02             < 'END PLOT VECTOR'.
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JANE        SPU1            < NON...
<
< ENTREE DES FACTEURS D'ECHELLE :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         DELTAY          < SUR 'X' DE L'IMAGE ET 'Y' DE BENSON...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         DELTAX          < SUR 'Y' DE L'IMAGE ET 'X' DE BENSON...
<
< ENTREE DE L'ITERATION SUR CHAQUE POINT :
<
         LXI         A4
         BSR         ASPCT
         BSR         AROND
         JALE        $               < ??!???!
         STA         NITER
<
< ENTREE DE LA TRANSLATION OY :
<
         LXI         A5
         BSR         ASPCT
         BSR         AROND
         STA         TRANSY
<
< REDEFINITION EVENTUELLE DES ASSOCIATIONS
< NIVEAU DE GRIS TV --> NIVEAU DE GRIS BENSON :
<
         LXI         0               < (X)=INDEX COULEUR.
COUL3:   EQU         $
         ADRI        A8,X            < (X)=A8+COULEUR=INDEX ARGUMENT :
         BSR         ASPCT           < ACCES A L'ARGUMENT (X) :
         FCAM        F1              < EST-CE 1.0 (INCHANGE) ???
         JE          COUL2           < PAS DE MODIF...
         FMP         F100            < NON, LE NIVEAU DE GRIS BENSON ASSOCIE
                                     < VAUT DONC 256 FOIS L'ARGUMENT, CAR
                                     < ILS SONT PRESENTES DE LA FACON SUIVANTE :
                                     < A000X 000N 0100, OU 'N' EST LE NIVEAU
                                     < DE GRIS ASSOCIE A LA COULEUR TV DE
                                     < NUMERO 'X'-A8...
         BSR         AROND
         ADRI        XBLANC,A        < TRANSLATION ; EN ARGUMENTS ON TROUVE :
                                     < 16=NOIR,
                                     < ...
                                     < 1=PREMIER GRIS,
                                     < 0=VRAI BLANC,
                                     < -1=PREMIERE PATTERN (1),
                                     < ...
                                     < -12=DOUZIEME PATTERN (12).
         ADRI        -A8,X           < (X)=NUMERO COULEUR,
         STA         &ANIV           < MEMORISATION DU NIVEAU DE GRIS BENSON
                                     < ASSOCIE (A)...
COUL2:   EQU         $
         ADRI        1,X             < PASSAGE A LA COULEUR SUIVANTE,
         LR          X,A             < SI ELLE EXISTE :
         CPI         NIVMAX          < ???
         JLE         COUL3           < OUI...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JANE        SPU4            < PAS D'OPEN...
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
SPU4:    EQU         $
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROSIE LES AXES
< X,Y DE L'IMAGE ET DE LA
< BENSON, A CAUSE DU DEFILEMENT
< DU PAPIER)
<
SPU1:    EQU         $
         LA          YR
         STA         YS
         LA          XR
         STA         XS
         BSR         ASPGPS
         LR          A,X             < (X)=NIVEAU IMAGE TV,
         LA          &ANIV           < (A)=NIVEAU BENSON...
         STA         NIVO            < QUE L'ON SAVE...
         CPI         XBLANC          < EST-CE LE VRAI BLANC ???
         JE          SPU9            < LE BLANC NE SE TRACE PAS...
         LX          NITER           < (X)=NOMBRE D'ITERATIONS SUR CHAQUE POINT.
SPU10:   EQU         $
         PSR         X
         LA          YS
         MP          DELTAX          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LA          XS
         AD          TRANSY          < TRANSLATION SUR OY (BENSON),
         MP          DELTAY          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         LA          NIVO            < NIVEAU DE GRIS BENSON...
XWOR%1:  VAL         12              < AMPLITUDE DU DECALAGE...
         STZ         FLAG            < GRISES A PRIORI...
         CPI         XBLANC          < MAIS EN REALITE ???
         JG          SPU8            < OUI, GRISES...
         ADRI        -XBLANC-XBLANC,A  < NON, PATTERNS DIVERSES...
         NGR         A,A             < (A)=NUMERO DE PATTERN,
         LX          FLAG6
         STX         FLAG            < POUR LES PATTERNS...
SPU8:    EQU         $
         SLLS        XWOR%1
         OR          DELTAY          < COTE SELON Y...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LA          DELTAX          < COTE SELON X...
         OR          FLAG            < DISCRIMINATION GRISES/PATTERNS...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
         PLR         X
         JDX         SPU10           < ITERATION EVENTUELLE...
SPU9:    EQU         $               < CAS DU BLANC...
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JANE        SPU5            < PAS DE CLOSE...
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU5:    EQU         $
         LX          IBUFCU          < X=INDEX DU MOT COURANT,
         CPZR        X               < Y-A-T'IL UN BUFFER EN ATTENTE ???
         JE          SPU2            < NON, C'EST FINI...
         LB          DEMCU2+2        < SAUVEGARDE DU COMPTE D'OCTETS,
         LA          IBUFCU
         SLLS        NOCMO=0
         STA         DEMCU2+2        < ET MISE EN PLACE DU COMPTE D'OCTETS
                                     < RESIDUEL,
         LAD         DEMCU2
         SVC         0               < QUE L'ON ENVOIE A 'CU2'...
         STB         DEMCU2+2        < ET ON RESTAURE...
SPU2:    EQU         $
<
< FIN :
<
SPV:     EQU         $               < C O M P O S A N T E   E N   ' V '.
SPW:     EQU         $               < C O M P O S A N T E   E N   ' W '.
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON 5'
DF'SIOH BENSON 6'
ED'SIOH BENSON 6'
IN0
         PAGE
         IDP         "SIOH BENSON 6"
         $EQU        $-64            < A T T E N T I O N...
         IDP         "ATTENTION : EST EN RECOUVREMENT DE -64 MOTS !!!"
<
<
<        S O R T I E   I M A G E   S U R   B E N S O N   6  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    SCRATCH SUR LE BENSON AVEC
<                    DES NIVEAUX DE GRIS EN UTILISANT
<                    DES NIVEAUX DE GRIS DE LA
<                    BENSON LIES DIRECTEMENT ET
<                    ARBITRAIREMENT A CEUX DE L'IMAGE
<                    DE TV SANS UTILISER LES TABLES
<                    DE COLORIAGE AFIN D'ASSURER
<                    UN RENDU MAX...
<                      DE PLUS CE MODULE TRAVAILLE
<                    EN MODE CANAL...
<                      IL PERMET D'ELIMINER LES
<                    BORDS DE L'IMAGE, PROCEDE
<                    A UNE TRANSLATION SUIVANT
<                    L'AXE X DE LA BENSON, FAIT
<                    UN CENTRAGE AUTOMATIQUE, ET
<                    ENFIN LES SORT DANS LE SENS
<                    DE LA HAUTEUR (X-TV ET X-BENSON
<                    COINCIDENT).
<
<
<        ARGUMENTS :
A0::     VAL         0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE
                                     < L'IMAGE TV ET DE BENSON...
                                     < (CONTRAIREMENT A #SIO BENSON 4/5# !!!)
A1::     VAL         A0+1            < FACTEUR D'ECHELLE SUR L'AXE 'Y' DE
                                     < L'IMAGE.
A2::     VAL         A1+1            < 0=OPEN (INITIALISATION DEBUT D'IMAGE),
                                     < SINON, PAS D'INITIALISATION...
A3::     VAL         A2+1            < 0=CLOSE (EN FIN D'IMAGE)...
A4::     VAL         A3+1            < OCTET0=X(PREMIERE LIGNE IMAGE TV),
                                     < OCTET1=X(DERNIERE LIGNE IMAGE TV).
A5::     VAL         A4+1            < OCTET0=Y(PREMIERE COLONNE IMAGE TV),
                                     < OCTET1=Y(DERNIERE COLONNE IMAGE TV).
A6::     VAL         A5+1            < OCTET0=TRANSLATION SUR OX,
                                     < OCTET1=TRANSLATION SUR OY.
A8::     VAL         8               < PREMIERE COULEUR (0=NOIR), LA DEU-
                                     < XIEME (1=ROUGE) AURA LE NUMERO 9, ET AINS
                                     < AINSI DE SUITE... (TRANSLATION DE 'A8').
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         1024
BUFCU:   EQU         IMAGR+200       < EN RECOUVREMENT IMAGE RESIDENTE...
BUFCU0:  WORD        0
BUFCU1:  WORD        0
DEMCU2:  BYTE        '0B;'0A         < ENVOI D'UN POINT A LA BENSON...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA BENSON...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
ABUFCU:  WORD        BUFCU,X         < RELAI D'ACCES AU BUFFER 'CU2',
IBUFCU:  WORD        0               < ET SON INDEX COURANT...
DELTAX:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE LA
                                     < BENSON (QUI N'EST PAS CELUI DE L'IMAGE).
DELTAY:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'Y' BENSON.
ANIV:    WORD        NIV,X           < ACCES A LA TABLE D'ASSOCIATION ENTRES
                                     < LES NIVEAUX DE GRIS DE L'IMAGE DE TV ET
                                     < CEUX DE LA BENSON :
NIV:     EQU         $
XBLANC:: VAL         -1              < CODE DU VRAI BLANC...
         WORD        16+XBLANC       < NIVEAU=0,
         WORD        -7+XBLANC       < NIVEAU=1,
         WORD        14+XBLANC       < NIVEAU=2,
         WORD        13+XBLANC       < NIVEAU=3,
         WORD        10+XBLANC       < NIVEAU=4,
         WORD        7+XBLANC        < NIVEAU=5,
         WORD        2+XBLANC        < NIVEAU=6,
         WORD        0+XBLANC        < NIVEAU=7.
NIVO:    WORD        0               < MEMORISATION DU NIVEAU BENSON COURANT.
F100:    FLOAT       256             < POUR RECUPERER LES NIVEAUX DE GRIS
                                     < DEMANDES...
FLAG:    WORD        '0000           < FLAG COURANT A CONCATENER SUR 'DELTAX',
FLAG6:   WORD        'C000           < VALEUR A DONNER POUR OBTENIR LES
                                     < PATTERNS VARIEES, '0000 DONNANT LES
                                     < NIVEAUX DE GRIS...
TRANOX:  WORD        0               < TRANSLATION SUR OX (EN POINTS TV).
TRANOY:  WORD        0               < TRANSLATION SUR OY (EN POINTS TV).
COL0:    WORD        0               < X(PREMIERE COLONNE IMAGE),
COLN:    WORD        NPOLM1          < X(DERNIERE COLONNE IMAGE).
LIG0:    WORD        0               < Y(PREMIERE LIGNE IMAGE),
LIGN:    WORD        NLIGM1          < Y(DERNIERE LIGNE IMAGE).
PREM:    WORD        0               < INDICATEUR DE PREMIER PASSAGE.
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LX          IBUFCU
         STA         &ABUFCU         < MISE DANS LE BUFFER...
         ADRI        1,X
         STX         IBUFCU          < POUR LE MOT SUIVANT,
         LR          X,A
         SLLS        NOCMO=0
         CP          DEMCU2+2        < MAIS, NE SERAIT-CE PAS FINI ???
         JL          SPCU3           < NON...
         STZ         IBUFCU          < OUI, ON REINITIALISE,
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ET ON ENVOIE LE BUFFER COURANT...
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         X
         LAI         0               < EN EFFET, BEAUCOUP D'APPEL A 'SPCU'
                                     < REMETTAIT 'A' A 0 APRES ; POUR GAGNER
                                     < DE LA PLACE, ON LE FAIT ICI...
         RSR
<
<
<        C O N S T A N T E S  :
<
<
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21             < 'START PLOT VECTOR'.
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '02             < 'END PLOT VECTOR'.
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         CPZ         PREM            < PREMIER PASSAGE ???
         JG          SPU1            < NON...
         IC          PREM            < OUI, DONC INITIALISONS :
<
< ENTREE DES FACTEURS D'ECHELLE :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         DELTAX          < SUR 'X' DE L'IMAGE ET 'X' DE BENSON...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         DELTAY          < SUR 'Y' DE L'IMAGE ET 'Y' DE BENSON...
<
< ENTREE DU CADRE DE L'IMAGE :
<
         LXI         A4
         BSR         ASPCT
         BSR         AROND
XCADRE:: VAL         NBITOC
         SLRD        XCADRE
         STA         LIG0            < X(PREMIERE LIGNE IMAGE TV),
         LAI         0
         SLLD        XCADRE
         STA         LIGN            < X(DERNIERE LIGNE IMAGE TV).
         LXI         A5
         BSR         ASPCT
         BSR         AROND
         SLRD        XCADRE
         STA         COL0            < Y(PREMIERE COLONNE IMAGE TV),
         LAI         0
         SLLD        XCADRE
         STA         COLN            < Y(DERNIERE COLONNE IMAGE TV).
<
< ENTREE DE LA TRANSLATION OX/OY :
<
         LXI         A6
         BSR         ASPCT
         BSR         AROND
         SLRD        XCADRE
         SB          COL0            < POUR PERMETTRE LA REALISATION DE FRES-
                                     < QUES D'IMAGES CONTIGUES...
         STA         TRANOX          < TRANSLATION SUR OX,
         LAI         0
         SLRD        XCADRE          < (B)=TRANSLATION DEMANDEE SUR OY,
         LAI         -NLIGM1         < POUR TENIR COMPTE DES LIGNES 'LIGN'
         AD          LIGN            < A 'NPOLM1' QUI SONT ELIMINEES...
         ADR         B,A             < D'OU :
         STA         TRANOY          < TRANSLATION SUR OY.
<
< REDEFINITION EVENTUELLE DES ASSOCIATIONS
< NIVEAU DE GRIS TV --> NIVEAU DE GRIS BENSON :
<
         LXI         0               < (X)=INDEX COULEUR.
COUL3:   EQU         $
         ADRI        A8,X            < (X)=A8+COULEUR=INDEX ARGUMENT :
         BSR         ASPCT           < ACCES A L'ARGUMENT (X) :
         FCAM        F1              < EST-CE 1.0 (INCHANGE) ???
         JE          COUL2           < PAS DE MODIF...
         FMP         F100            < NON, LE NIVEAU DE GRIS BENSON ASSOCIE
                                     < VAUT DONC 256 FOIS L'ARGUMENT, CAR
                                     < ILS SONT PRESENTES DE LA FACON SUIVANTE :
                                     < A000X 000N 0100, OU 'N' EST LE NIVEAU
                                     < DE GRIS ASSOCIE A LA COULEUR TV DE
                                     < NUMERO 'X'-A8...
         BSR         AROND
         ADRI        XBLANC,A        < TRANSLATION ; EN ARGUMENTS ON TROUVE :
                                     < 16=NOIR,
                                     < ...
                                     < 1=PREMIER GRIS,
                                     < 0=VRAI BLANC,
                                     < -1=PREMIERE PATTERN (1),
                                     < ...
                                     < -12=DOUZIEME PATTERN (12).
         ADRI        -A8,X           < (X)=NUMERO COULEUR,
         STA         &ANIV           < MEMORISATION DU NIVEAU DE GRIS BENSON
                                     < ASSOCIE (A)...
COUL2:   EQU         $
         ADRI        1,X             < PASSAGE A LA COULEUR SUIVANTE,
         LR          X,A             < SI ELLE EXISTE :
         CPI         NIVMAX          < ???
         JLE         COUL3           < OUI...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JANE        SPU4            < PAS D'OPEN...
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
SPU4:    EQU         $
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROISE LES XY
< TV ET BENSON AFIN DE PERMETTRE
< L'ENCHAINEMENT D'IMAGES DE
< TYPE FRESQUES...)
<
SPU1:    EQU         $
         LA          YR
         CP          COL0
         JL          SPU2            < HORS-CADRE...
         CP          COLN
         JG          SPU2            < HORS-CADRE...
         STA         XS
         LA          XR
         CP          LIG0
         JL          SPU2            < HORS-CADRE...
         CP          LIGN
         JG          SPU2            < HORS-CADRE...
         STA         YS
         BSR         ASPGPS
         LR          A,X             < (X)=NIVEAU IMAGE TV,
         LA          &ANIV           < (A)=NIVEAU BENSON...
         STA         NIVO            < QUE L'ON SAVE...
         CPI         XBLANC          < EST-CE LE VRAI BLANC ???
         JNE         SPU10           < NON, ALLONS TRACER...
         LA          XS              < OUI :
         CP          COLN            < EST-CE LA DERNIERE LIGNE ???
         JNE         SPU9            < NON, LE VRAI BLANC NE SE TRACE PAS...
         LA          YS              < OUI :
         CP          LIGN            < EST-CE LE DERNIER POINT ???
         JNE         SPU9            < NON, LE VRAI BALNC NE SE TRACE PAS...
         STZ         NIVO            < OUI : ON TRICHE, ON VA MARQUER UN NIVEAU
                                     < VOISIN DU BLANC AFIN DE POSITIONNER
                                     < CORRECTEMENT LE PAPIER...
SPU10:   EQU         $
         LA          XS
         AD          TRANOX          < TRANSLATION SUR OX...
         MP          DELTAX          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LAI         NLIGM1
         SB          YS              < LES AXES OY TV ET BENSON SON INVERSES...
         AD          TRANOY          < TRANSLATION SUR OY...
         MP          DELTAY          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         LA          NIVO            < NIVEAU DE GRIS BENSON...
XWOR%1:  VAL         12              < AMPLITUDE DU DECALAGE...
         STZ         FLAG            < GRISES A PRIORI...
         CPI         XBLANC          < MAIS EN REALITE ???
         JG          SPU8            < OUI, GRISES...
         ADRI        -XBLANC-XBLANC,A  < NON, PATTERNS DIVERSES...
         NGR         A,A             < (A)=NUMERO DE PATTERN,
         LX          FLAG6
         STX         FLAG            < POUR LES PATTERNS...
SPU8:    EQU         $
         SLLS        XWOR%1
         OR          DELTAY          < COTE SELON Y...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LA          DELTAX          < COTE SELON X...
         OR          FLAG            < DISCRIMINATION GRISES/PATTERNS...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
SPU9:    EQU         $               < CAS DU BLANC...
         LA          XS
         CP          COLN
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          YS              < ON EST SUR LA DERNIERE LIGNE :
         CP          LIGN            < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JANE        SPU5            < PAS DE CLOSE...
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU5:    EQU         $
         LX          IBUFCU          < X=INDEX DU MOT COURANT,
         CPZR        X               < Y-A-T'IL UN BUFFER EN ATTENTE ???
         JE          SPU2            < NON, C'EST FINI...
         LB          DEMCU2+2        < SAUVEGARDE DU COMPTE D'OCTETS,
         LA          IBUFCU
         SLLS        NOCMO=0
         STA         DEMCU2+2        < ET MISE EN PLACE DU COMPTE D'OCTETS
                                     < RESIDUEL,
         LAD         DEMCU2
         SVC         0               < QUE L'ON ENVOIE A 'CU2'...
         STB         DEMCU2+2        < ET ON RESTAURE...
SPU2:    EQU         $
<
< FIN :
<
SPV:     EQU         $               < C O M P O S A N T E   E N   ' V '.
SPW:     EQU         $               < C O M P O S A N T E   E N   ' W '.
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON 6'
DF'SIOH BENSON OFFLINE'
ED'SIOH BENSON OFFLINE'
IN0
         PAGE
         IDP         "SIOH BENSON OFFLINE"
         $EQU        $-48            < A T T E N T I O N...
         IDP         "ATTENTION : EST EN RECOUVREMENT DE -48 MOTS !!!"
<
<
<        S O R T I E   I M A G E   B E N S O N   O F F   L I N E  :
<
<
<        FONCTION :
<                      CE MODULE ENVOIE L'IMAGE
<                    SCRATCH SUR LE 'MT' AVEC
<                    DES NIVEAUX DE GRIS EN UTILISANT
<                    LA MEMOIRE DES COULEURS, ET EN
<                    CALCULANT LA LUMINANCE 'Y', SUIVANT
<                    LA FORMULE :
<                                    Y=0,30*R+0,59*V+0,11*B.
<                      DE PLUS CE MDULE TRAVAILLE
<                    EN MODE CANAL...
<
<
<        ARGUMENTS :
A0::     VAL         0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE
                                     < L'IMAGE (QUI N'EST PAS CELUI DE LA
                                     < 'MT'...).
A1::     VAL         A0+1            < FACTEUR D'ECHELLE SUR L'AXE 'Y' DE
                                     < L'IMAGE.
A2::     VAL         A1+1            < 0=OPEN (INITIALISATION DEBUT D'IMAGE),
                                     < SINON, PAS D'INITIALISATION...
A3::     VAL         A2+1            < 0=CLOSE (EN FIN D'IMAGE)...
<
<
         LOCAL
FLOC:    EQU         $
LBUFCU:: VAL         1024
BUFCU:   EQU         IMAGR+200       < EN RECOUVREMENT IMAGE RESIDENTE...
BUFCU0:  WORD        0
BUFCU1:  WORD        0
DEMCU2:  BYTE        '0B;'02         < ENVOI D'UN POINT A LA 'MT'...
         WORD        BUFCU-ZERO*NOCMO
         WORD        LBUFCU*NOCMO
ASPCU:   WORD        SPCU            < ENVOI D'UN OCTET A LA 'MT'...
VECTOR:  WORD        'C000           < TYPE DU VECTEUR...
ABUFCU:  WORD        BUFCU,X         < RELAI D'ACCES AU BUFFER 'CU2',
IBUFCU:  WORD        0               < ET SON INDEX COURANT...
DELTAX:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'X' DE LA
                                     < 'MT' (QUI N'EST PAS CELUI DE L'IMAGE).
DELTAY:  WORD        0               < FACTEUR D'ECHELLE SUR L'AXE 'Y' 'MT'.
SAVNIV:  EQU         DELTAX          < SAUVEGARDE DU MOT COURANT DE LA
                                     < MEMOIRE DES COULEURS.
MEMAD:   EQU         DELTAY          < ADRESSE DU MOT COURANT DE LA MEMOIRE
                                     < DES COULEURS.
MC:      EQU         BUFCU+LBUFCU    < MEMOIRE DES LUMINANCES 'Y'.
LMC::    VAL         NIVMAX+1        < LONGUEUR DE 'LMC'...
AMC:     WORD        MC,X            < RELAI VERS 'MC'...
NNIV::   VAL         16              < NOMBRE DE NIVEAUX PAR CANAL.
ASP1:    WORD        SP1             < S/P DE RECUPERATION D'UN NIVEAU DE GRIS,
ASP2:    WORD        SP2             < S/P DE CALCUL DE LA LUMINANCE.
F030:    FLOAT       0.30            < COEFFICIENT DE 'R',
F059:    FLOAT       0.59            < COEFFICIENT DE 'V',
F011:    FLOAT       0.11            < COEFFICIENT DE 'B'.
<
<
<        E N V O I   D ' U N   O C T E T  :
<
<
         PROG
SPCU:    EQU         $
         PSR         A,X
MASKCU:: VAL         '3FFF
         STA         BUFCU0
         LRM         A
         WORD        MASKCU
         AND         BUFCU0
         STA         BUFCU1          < RECUPERATION DES DONNEES.
         LRM         A
         WORD        MASKCU
         EOR         BUFCU1
         STA         BUFCU1          < INVERSION BINAIRE DES DONNEES.
         LRM         A
         WORD        MASKCU)MFFFF
         AND         BUFCU0          < RECUPERATION DES 2 PREMIERS BITS,
         OR          BUFCU1
         STA         BUFCU1          < GENERATION DU BUFFER...
         LX          IBUFCU
         STA         &ABUFCU         < MISE DANS LE BUFFER...
         ADRI        1,X
         STX         IBUFCU          < POUR LE MOT SUIVANT,
         LR          X,A
         SLLS        NOCMO=0
         CP          DEMCU2+2        < MAIS, NE SERAIT-CE PAS FINI ???
         JL          SPCU3           < NON...
         STZ         IBUFCU          < OUI, ON REINITIALISE,
         LAD         DEMCU2
SPCU4:   EQU         $
         SVC         0               < ET ON ENVOIE LE BUFFER COURANT...
         JE          SPCU3           < OK...
         QUIT        1               < ERREUR D'ASSIGNATION...
         JMP         SPCU4           < ON RETENTE...
SPCU3:   EQU         $
         PLR         A,X
         RSR
<
<
<        C A L C U L   D ' U N   N I V E A U   D E   G R I S  :
<
<
SP1:     EQU         $
         LAI         0               < CLEAR 'A',
         LB          SAVNIV          < B=MOT COURANT DE LA MEMOIRE,
         SLLD        NNIV=0          < A=NIVEAU DE GRIS COURANT,
         STB         SAVNIV          < ET SATUVEGARDE DU MOT COURANT...
         FLT                         < RENVOI DU NIVEAU DE GRIS EN FLOTTANT...
         RSR
<
<
<        C U M U L   D E   L A   L U M I N A N C E  :
<
<
SP2:     EQU         $
         FAD         FWORK
         FST         FWORK
         RSR
<
<
<        C O N S T A N T E S  :
<
<
LINEF::  VAL         '808A           < LINE FEED.
XOPEN::  VAL         '8000
RASTER:: VAL         '80E0           < MISE EN MODE RASTER.
GRAPH::  VAL         '80E8           < SELECTION DU MODE GRAPHWARE.
XCOD1::  VAL         '00
XCOD2::  VAL         '21             < 'START PLOT VECTOR'.
XCOD3::  VAL         'C0
XCOD4::  VAL         '00
XCOD5::  VAL         '00
XCOD6::  VAL         '00
XCOD7::  VAL         '20
XCOD8::  VAL         '01
XCOD11:: VAL         '00
XCOD12:: VAL         '02             < 'END PLOT VECTOR'.
XCOD13:: VAL         'C0
XCOD14:: VAL         '00
XCOD15:: VAL         '00
XCOD16:: VAL         '00
XCOD17:: VAL         '20
XCOD18:: VAL         '00
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         LA          XR              < EST-CE LE PREMIER POINT DE L'IMAGE ???
         OR          YR
         JANE        SPU1            < NON...
<
< CALCUL DE LA LUMINANCE DES POINTS DE L'IMAGE :
<
         LAI         NSPCOL
         SBT         0
         ACTD        1               < B=ADRESSE DE LA MEMOIRE DES COULEURS,
         STB         MEMAD           < QUE L'ON SAUVEGARDE...
         LXI         0               < X=INDEX DES NIVEAUX DE GRIS.
GCOUL1:  EQU         $
         FLD         F0
         FST         FWORK           < INITIALISATION DE LA LUMINANCE...
         LA          MEMAD           < A=ADRESSE DU MOT COURANT,
         ACTD        1               < QUE L'ON RECUPERE DANS 'B',
         SLLD        NNIV=0          < ET QUE L'ON CADRE...
         STB         SAVNIV
         BSR         ASP1            < RECUPERATION DU BLEU,
         FMP         F011
         BSR         ASP2
         BSR         ASP1            < RECUPERATION DU VERT,
         FMP         F059
         BSR         ASP2
         BSR         ASP1            < RECUPERATION DU ROUGE,
         FMP         F030
         BSR         ASP2
         FIX
         STA         &AMC            < SAUVEGARDE DE LA LUMINANCE EQUIVALENTE
                                     < DU NIVEAU DE GRIS=(X)...
         IC          MEMAD           < AU MOT SUIVANT,
         ADRI        1,X
         LR          X,A
         CPI         NIVMAX          < S'IL EXISTE...
         JLE         GCOUL1          < ET OUI...
<
< ENTREE DES FACTEURS D'ECHELLE :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND
         STA         DELTAY          < SUR 'X' DE L'IMAGE ET 'Y' DE 'MT'...
         LXI         A1
         BSR         ASPCT
         BSR         AROND
         STA         DELTAX          < SUR 'Y' DE L'IMAGE ET 'X' DE 'MT'...
<
< CAS DU PREMIER POINT : IL
< FAUT INITIALISER LA MACHINE :
<
         LXI         A2
         BSR         ASPCT
         BSR         AROND
         JANE        SPU4            < PAS D'OPEN...
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        RASTER
         BSR         ASPCU
         LRM         A
         WORD        XOPEN
         BSR         ASPCU
         LRM         A
         WORD        GRAPH
         BSR         ASPCU
         LAI         XCOD1
         BSR         ASPCU
         LAI         XCOD2
         BSR         ASPCU
         LAI         XCOD3
         BSR         ASPCU
         LAI         XCOD4
         BSR         ASPCU
         LAI         XCOD5
         BSR         ASPCU
         LAI         XCOD6
         BSR         ASPCU
         LAI         XCOD7
         BSR         ASPCU
         LAI         XCOD8
         BSR         ASPCU
SPU4:    EQU         $
<
< CAS DE TOUS LES POINTS :
< (NOTA : ON CROSIE LES AXES
< X,Y DE L'IMAGE ET DE LA
< 'MT', A CAUSE DU DEFILEMENT
< DU PAPIER)
<
SPU1:    EQU         $
         LA          YR
         STA         YS
         MP          DELTAX          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'X',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'X'...
         LA          XR
         STA         XS
         MP          DELTAY          < ON REALISE UNE HOMOTHETIE,
         LR          B,A
         OR          VECTOR
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'Y' ET DU TYPE
                                     < DU VECTEUR,
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'Y'...
         BSR         ASPGPS          < A=NIVEAU(XS,YS)...
         LR          A,X             < X=NIVEAU DE GRIS,
         LA          &AMC            < A=LUMINANCE REELLE DE CE POINT.
XWOR%1:  VAL         12              < AMPLITUDE DU DECALAGE...
         SLLS        XWOR%1
         OR          DELTAY          < COTE SELON Y...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DY',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DY'...
         LA          DELTAX          < COTE SELON X...
         SLRD        NBITOC
         BSR         ASPCU           < ENVOI DU DEBUT DE 'DX',
         LAI         0
         SLLD        NBITOC
         BSR         ASPCU           < ENVOI DE LA FIN DE 'DX'...
         LA          YR
         CPI         NLIGM1
         JL          SPU2            < ON N'EST PAS SUR LA DERNIERE LIGNE...
         LA          XR              < ON EST SUR LA DERNIERE LIGNE :
         CPI         NPOLM1          < EST-CE LE DERNIER POINT ???
         JL          SPU2            < NON...
<
< CAS DU DERNIER POINT DE L'IMAGE :
<
         LXI         A3
         BSR         ASPCT
         BSR         AROND
         JANE        SPU5            < PAS DE CLOSE...
         LAI         XCOD11
         BSR         ASPCU
         LAI         XCOD12
         BSR         ASPCU
         LAI         XCOD13
         BSR         ASPCU
         LAI         XCOD14
         BSR         ASPCU
         LAI         XCOD15
         BSR         ASPCU
         LAI         XCOD16
         BSR         ASPCU
         LAI         XCOD17
         BSR         ASPCU
         LAI         XCOD18
         BSR         ASPCU
SPU5:    EQU         $
         LX          IBUFCU          < X=INDEX DU MOT COURANT,
         CPZR        X               < Y-A-T'IL UN BUFFER EN ATTENTE ???
         JE          SPU2            < NON, C'EST FINI...
         LB          DEMCU2+2        < SAUVEGARDE DU COMPTE D'OCTETS,
         LA          IBUFCU
         SLLS        NOCMO=0
         STA         DEMCU2+2        < ET MISE EN PLACE DU COMPTE D'OCTETS
                                     < RESIDUEL,
         LAD         DEMCU2
         SVC         0               < QUE L'ON ENVOIE A 'CU2'...
         STB         DEMCU2+2        < ET ON RESTAURE...
SPU2:    EQU         $
<
< FIN :
<
SPV:     EQU         $               < C O M P O S A N T E   E N   ' V '.
SPW:     EQU         $               < C O M P O S A N T E   E N   ' W '.
         FLD         F0
         RSR
:F
:F
< <<'SIOH BENSON OFFLINE'
DF'SIOH RASTER MT 1'
ED'SIOH RASTER MT 1'
IN0
         PAGE
         IDP         "SIOH RASTER MT 1"
<
<
<        R A S T E R   M T   1  :
<
<
<        FONCTION :
<                      CE MODULE PREND L'IMAGE RESIDENTE
<                    ET GENERE SUR L'UNITE '0B (DEROULEUR
<                    DE BANDES MT1) AUTANT D'ENREGISTREMENTS
<                    QU'IL Y A DE LIGNES DANS L'IMAGE ;
<                    CHAQUE ENREGISTREMENT CONTIENT AUTANT
<                    D'OCTETS QU'IL Y A DE POINTS SUR UNE
<                    LIGNE ; ENFIN CHAQUE OCTET CONTIENT
<                    SUR 4 BITS LE NIVEAU DE ROUGE, OU DE
<                    VERT, OU DE BLEU (SUIVANT 'A0') CONTENU
<                    DANS LE REGISTRE DE COLORIAGE ASSOCIE
<                    AU POINT COURANT.
<
<
<        ARGUMENTS :
A0::     VAL         0               < SELECTION DE LA COULEUR QUE L'ON VA
                                     < EDITER :
                                     < 1 --> R,
                                     < 2 --> V,
                                     < 3 --> B.
XPR::    VAL         1               < ROUGE,
XPV::    VAL         2               < VERT,
XPB::    VAL         3               < BLEU.
         LOCAL
FLOC:    EQU         $
PREM:    WORD        -1              < INDICATEUR DE PREMIER PASSAGE.
<
< TABLES DE COULEURS :
<
MEMAD:   WORD        0               < ADRESSE DU REGISTRE DE COULEUR COURANT.
ATC:     WORD        0               < RELAI VERS LA LISTE COURANTE.
TCR:     EQU         $               < ROUGE.
         DZS         NIVMAX+1
ATCR:    WORD        TCR,X
TCV:     EQU         $               < VERT.
         DZS         NIVMAX+1
ATCV:    WORD        TCV,X
TCB:     EQU         $
         DZS         NIVMAX+1
ATCB:    WORD        TCB,X
NNIV::   VAL         16              < NOMBRE DE NIVEAUX PAR COULEUR.
<
< GESTION DU BUFFER MT1 :
<
BUFMT1:  EQU         $
         DZS         NMOTL*NBITMO/NOCMO
ABUMT1:  WORD        BUFMT1,X        < REALI D'ACCES.
IBUMT1:  WORD        0               < INDEX COURANT DE 'BUFMT1'...
<
< SORTIE DU BUFFER MT1 :
<
DEMMT1:  BYTE        '0B;'02         < ECRITURE D'UNE LIGNE RASTER.
         WORD        BUFMT1-ZERO*NOCMO
         WORD        NMOTL*NBITMO
<
< RELAIS :
<
ASP1:    WORD        SP1             < GENERATION DES TABLES DE COULEURS.
         PROG
<
<
<        G E N E R A T I O N   D E S   T A B L E S   D E   C O U L E U R S  :
<
<
SP1:     EQU         $
         LAI         0               < CLEAR 'A',
         SLLD        NNIV=0          < DECONCATENATION D'UNE COULEUR,
         ADRI        -NNIV+1,A
         NGR         A,A             < REMISE DANS LE BON SENS...
         RSR
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         CPZ         PREM            < EST-CE LE PREMIER PASSAGE ???
         JGE         SPU1            < NON...
         IC          PREM            < OUI, ON LE MEMORISE...
         STZ         IBUMT1          < ON EN PROFITE POUR INITIALISER L'INDEX
                                     < DU BUFFER MT1...
<
< ENTREE DES PARAMETRES :
<
         LXI         A0
         BSR         ASPCT
         BSR         AROND           < (A)=NUMERO DE LA COULEUR CHOISIE :
         LB          ATCR            < ROUGE A PRIORI...
         CPI         XPR
         JE          SPU2            < ROUGE...
         LB          ATCV            < VERT A PRIORI...
         CPI         XPV
         JE          SPU2            < VERT...
         LB          ATCB            < BLEU A PRIORI...
         CPI         XPB
         JE          SPU2            < BLEU...
         JMP         $               < ?!?!??!
SPU2:    EQU         $
         STB         ATC             < MISE EN PLACE DU RELAI VERS LA TABLE
                                     < COURANTE DES COULEURS...
<
< RECUPERATION DES REGISTRES DE COULEURS :
<
         LAI         NSPCOL
         SBT         0
         ACTD        1               < (B)=ADRESSE DE LA MEMOIRE DES COULEURS,
         STB         MEMAD           < QUE L'ON SAUVEGARDE...
         LXI         0               < (X)=INDEX DES NIVEAUX DE GRIS.
SPU3:    EQU         $
         LA          MEMAD
         ACTD        1               < (B)=REGISTRE DE COULEURS COURANT,
         SLLD        NNIV=0          < QUE L'ON CADRE A GAUCHE DANS 'B'...
         BSR         ASP1
         STA         &ATCB           < RECUPERATION DU BLEU,
         BSR         ASP1
         STA         &ATCV           < DU VERT,
         BSR         ASP1
         STA         &ATCR           < ET ENFIN DU ROUGE...
         IC          MEMAD           < PASSAGE AU REGISTRE SUIVANT,
         ADRI        1,X
         LR          X,A
         CPI         NIVMAX
         JLE         SPU3            < S'IL EXISTE...
<
< REMPLISSAGE DU BUFFER :
<
SPU1:    EQU         $
         BSR         ASPGPR          < (A)=NIVEAU(XR,YR),
         LR          A,X
         LA          &ATC            < (A)=NIVEAU DE 'R'/'V'/'B' ASSOCIE AU
                                     <     NIVEAU DE GRIS CONTENU DANS 'X'.
         LX          IBUMT1          < (X)=INDEX COURANT DE REMPLISSAGE,
         STBY        &ABUMT1         < ET ON MEMORISE LE NIVEAU DE 'R'/'V'/'B'
                                     < DANS LE BUFFER...
         ADRI        1,X             < PASSAGE A L'OCTET SUIVANT,
         LR          X,A
         ANDI        NPOLM1          < ET CET INDEX EST CALCULE MODULO LA
                                     < LONGUEUR D'UNE LIGNE...
         STA         IBUMT1          < ET ENFIN ON LE MEMORISE...
         JANE        SPU4            < OK, ON N'EST PAS EN BOUT DE LIGNE...
<
< CAS D'UN BOUT DE LIGNE,
< VIDAGE DU BUFFER :
<
SPU5:    EQU         $
         LAD         DEMMT1
         SVC         0               < TENTATIVE D'ECRITURE,
         JE          SPU6            < OK...
         QUIT        1               < SI ERREUR, ON RETOURNE AU 'CCI',
         JMP         SPU5            < ET ON RETENTE...
<
< SORTIE :
<
SPU6:    EQU         $
SPU4:    EQU         $
         FLD         VARU
         RSR
<
<
<        C O M P O S A N T E   E N  ' V '  :
<
<
SPV:     EQU         $
         FLD         VARV
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         F0
         RSR
:F
:F
< <<'SIOH RASTER MT 1'
DF'SIOH RASTER MT 2'
ED'SIOH RASTER MT 2'
IN0
         PAGE
         IDP         "SIOH RASTER MT 2"
<
<
<        R A S T E R   M T   2  :
<
<
<        FONCTION :
<                      CE MODULE TRANSFERT BRUTALEMENT
<                    LA MEMOIRE D'IMAGE SUR L'UNITE
<                    ASSIGNEE A '0B,
<
<
<        ARGUMENTS :
<                    NEANT...
<
<
         LOCAL
FLOC:    EQU         $
<
< CONSTANTES :
<
PREM:    WORD        -1              < INDICATEUR DE PREMIER PASSAGE.
FINITE:  FLOAT       100000          < POUR FORCER UN OVERCREEN...
<
< ECRITURE SUR L'UNITE 'OB :
<
NVPSAV:: VAL         '0B             < 'NVP' UTILISE...
DEMMT1:  BYTE        NVPSAV;'0B      < COMMUTATION SUR 'MEMTV'...
DEMMT2:  BYTE        NVPSAV;'02      < ECRITURE 'MEMTV' --> 'MT1'...
         WORD        0
         WORD        LIMAG*3*2
         WORD        0
         PROG
<
<
<        C O M P O S A N T E   E N   ' U '  :
<
<
SPU:     EQU         $
         CPZ         PREM            < EST-CE LE PREMIER PASSAGE ???
         JGE         SPU4            < NON...
         IC          PREM            < OUI, ON LE MEMORISE...
<
< ENTREE DES PARAMETRES :
<
SPU1:    EQU         $
<
< GENERATION DE LA BANDE :
<
SPU5:    EQU         $
         LAD         DEMMT1
         SVC         0               < TENTATIVE DE COMMUTATION SUR 'MEMTV'...
         JE          SPU9            < OK...
         QUIT        1               < SI ERREUR, ON RETOURNE AU 'CCI',
         JMP         SPU5            < ET ON RETENTE...
SPU9:    EQU         $
         LAD         DEMMT2
         SVC         0               < ET ECITURE 'MEMTV' --> 'MT1'...
         JE          SPU8            < OK...
         QUIT        1               < ?!?!??!?!
         JMP         SPU9            < ET ON ITERE...
SPU8:    EQU         $
<
< SORTIE :
<
SPU6:    EQU         $
SPU4:    EQU         $
         IF          NPOLM1-NLIGM1,,XWOR%,
         IF          ATTENTION : CE QUI SUIT EST IDIOT !!!
XWOR%:   VAL         0
         LAI         NPOLM1?NLIGM1
         BSR         AFLT
         FST         FXR             < ON FORCE XR ET
         FST         FYR             < YR POUR STOPPER LA TRANSFORMATION...
         FLD         FINITE          < OVERSCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N  ' V '  :
<
<
SPV:     EQU         $
         FLD         FINITE          < OVERSCREEN...
         RSR
<
<
<        C O M P O S A N T E   E N   ' W '  :
<
<
SPW:     EQU         $
         FLD         FINITE          < OVERSCREEN...
         RSR
:F
:F
< <<'SIOH RASTER MT 2'



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.