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'