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-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.