DF'SIOD ATTRACTEUR 1' ED'SIOD ATTRACTEUR 1' IN0 PAGE IDP "SIOD ATTRACTEUR 1" $EQU $-64 < A T T E N T I O N... IDP "ATTENTION : EST EN RECOUVREMENT DE -64 MOTS !!!" < < < A T T R A C T E U R E T R A N G E 1 : < < < FONCTION : < CE MODULE CALCULE L'ATTRACTEUR < D'EQUATION SUIVANTE : < < X(N+1)=A1*X(N)**2+A2*X(N)*Y(N)+A3*Y(N)**2+A4*X(N)+A5*Y(N)+A6 < Y(N+1)=A7*X(N)**2+A8*X(N)*Y(N)+A9*Y(N)**2+A10*X(N)+A11*Y(N)+A12 < C(N+1)=A13*X(N)+A14*Y(N)+A15 < < OU C(N+1) DESIGNE LA COULEUR < MODULO 'NIVMAX'... < < PUIS ON MARQUE LE POINT : < XS=FK*X(N+1)+TRX, < YS=FK*Y(N+1)+TRY, < AVEC LA COULEUR C(N+1) MODULO 'NIVMAX'. < < < ATTRACTEUR DE HENON : < IL S'OBTIENT EN FAISANT TOUS < COEFFICIENTS A(I) NULS, SAUF : < < A1=-7/5, < A5=1, < A6=1, < A10=3/10. < < < A T T E N T I O N : < MARQUE LE POINT (0,0) !!! < < < PARAMETRES : A0:: VAL 0 < NOMBRE DE POINTS A CALCULER. A1:: VAL A0+1 < SUITE DES COEFFICIENTS DE X(N+1). A2:: VAL A1+1 A3:: VAL A2+1 A4:: VAL A3+1 A5:: VAL A4+1 A6:: VAL A5+1 A7:: VAL A6+1 < SUITE DES COEFFICIENTS DE Y(N+1). A8:: VAL A7+1 A9:: VAL A8+1 A10:: VAL A9+1 A11:: VAL A10+1 A12:: VAL A11+1 A13:: VAL A12+1 < SUITE DES COEFFICIENTS DE C(N+1). A14:: VAL A13+1 A15:: VAL A14+1 < < < L O C A L : < < LOCAL FLOC: EQU $ XA1: FLOAT 0 XA2: FLOAT 0 XA3: FLOAT 0 XA4: FLOAT 0 XA5: FLOAT 0 XA6: FLOAT 0 XA7: FLOAT 0 XA8: FLOAT 0 XA9: FLOAT 0 XA10: FLOAT 0 XA11: FLOAT 0 XA12: FLOAT 0 XA13: FLOAT 0 XA14: FLOAT 0 XA15: FLOAT 0 XNP1: FLOAT 0 < MEMORISE LE POINT COURANT X(N+1), YNP1: FLOAT 0 < Y(N+1). ASPU3: WORD SPU3 < RELAI... PROG < < < C O M P O S A N T E E N ' U ' : < < SPU: EQU $ < < RECUPERATION DES PARAMETRES : < LXI A1 BSR ASPCT FST XA1 LXI A2 BSR ASPCT FST XA2 LXI A3 BSR ASPCT FST XA3 LXI A4 BSR ASPCT FST XA4 LXI A5 BSR ASPCT FST XA5 LXI A6 BSR ASPCT FST XA6 LXI A7 BSR ASPCT FST XA7 LXI A8 BSR ASPCT FST XA8 LXI A9 BSR ASPCT FST XA9 LXI A10 BSR ASPCT FST XA10 LXI A11 BSR ASPCT FST XA11 LXI A12 BSR ASPCT FST XA12 LXI A13 BSR ASPCT FST XA13 LXI A14 BSR ASPCT FST XA14 LXI A15 BSR ASPCT FST XA15 < < INITIALISATION DE X(N) ET Y(N) : < FLD VARU FST XNP1 < X(N)=VARU, FLD VARV FST YNP1 < Y(N)=VARV. < < ENTREE DU NOMBRE D'ITERATIONS : < LXI A0 BSR ASPCT BSR AROND LR A,X < (X)=NOMBRE DE POINTS A CALCULER... JAG SPU1 QUIT 1 < ?!???! SPU1: EQU $ < < BOUCLE D'ITERATION : < SPU3: EQU $ FLD XA1 FMP XNP1 FMP XNP1 < A1*X(N)**2. FST FWORK FLD XA2 FMP XNP1 FMP YNP1 < A2*X(N)*Y(N). FAD FWORK FST FWORK FLD XA3 FMP YNP1 FMP YNP1 < A3*Y(N)**2. FAD FWORK FST FWORK FLD XA4 FMP XNP1 < A4*X(N). FAD FWORK FST FWORK FLD XA5 FMP YNP1 < A5*Y(N). FAD XA6 < A6. FAD FWORK PSR A,B < FUTUR X(N+1). FLD XA7 FMP XNP1 FMP XNP1 < A7*X(N)**2. FST FWORK FLD XA8 FMP XNP1 FMP YNP1 < A8*X(N)*Y(N). FAD FWORK FST FWORK FLD XA9 FMP YNP1 FMP YNP1 < A9*Y(N)**2. FAD FWORK FST FWORK FLD XA10 FMP XNP1 < A10*X(N). FAD FWORK FST FWORK FLD XA11 FMP YNP1 < A11*Y(N). FAD XA12 < A12. FAD FWORK PSR A,B < FUTUR Y(N+1). FLD XA13 FMP XNP1 < A13*X(N). FST FWORK FLD XA14 FMP YNP1 < A14*Y(N). FAD XA15 < A15. FAD FWORK BSR AROND ANDI NIVMAX < CALCUL DE LA COULEUR MODULO 'NIVAMX', STA FWORK < ET SAVE... PLR A,B < RECUPERATION DE Y(N+1) FST YNP1 FMP FK BSR AROND < POUR LE CALCUL DE 'YS' : AD TRY < TRANSLATION, STA YS < QUE L'ON STORE, QUELQU'IL SOIT... PLR A,B < RECUPERATION DE X(N+1), FST XNP1 < QUE L'ON MEMORISE... FMP FK BSR AROND < POUR LE CALCUL DE 'XS' : AD TRX < TRANSLATION, JAL SPU2 < HORS-ECRAN... CPI NPOLM1 < ??? JG SPU2 < HORS-ECRAN... STA XS LA YS < TEST DE 'YS' : JAL SPU2 < 'YS' HORS-ECRAN... CPI NLIGM1 < ??? JG SPU2 < HORS-ECRAN... LA FWORK < (A)=COULEUR DE (XS,YS), BSR ASPRPS < QUE L'ON MARQUE... < < FIN DE L'ITERATION : < SPU2: EQU $ JDX SPU4 < A L'ITERATION SUIVANTE... JMP SPU5 SPU4: EQU $ BR ASPU3 < RELAI... SPU5: EQU $ < < < C O M P O S A N T E E N ' V ' E T ' W ' : < < SPV: EQU $ SPW: EQU $ FLD F0 RSR :F :F < <<'SIOD ATTRACTEUR 1' DF'SIOD CHIFFRAGE 1' ED'SIOD CHIFFRAGE 1' IN0 PAGE IDP "SIOD CHIFFRAGE 1" < < < C H I F F R A G E 1 : < < < FONCTION : < CE MODULE DEFINIT UNE < TRANSFORMATION 'T' TELLE QUE < T*T=1 ; ELLE PERMET DONC EN < L'APPLIQUANT DE CHIFFRER UNE < IMAGE, ET EN LA REAPPLIQUANT < DE LA DECHIFFRER. ELLE UTILISE < LA CONSTANTE MAGIQUE... < < LOCAL FLOC: EQU $ MAGIC:: VAL 7 < FABULEUSE CONSTANTE MAGIQUE... ACHIFR: WORD TCHIFR,X < RELAI D'ACCES A LA LISTE DE CHIFFRAGE... FCREST:: VAL 'FD00 < ACCES AU RESTE D'UNE DIVISION... NBITCX:: VAL NBITMO/NBRHEX < NOMBRE DE BITS PAR CHIFFRE HEXA-DECIMAL. TCHIFR: EQU $ < TABLE DE CHIFFRAGE : XWOR%2: VAL NBITMO-NBITCX DO BASE16 WORD 0=FCDO)MFFFF+1+BASE16-1*MAGIC/BASE16(0=FCREST>XWOR%2 PCHIFR: WORD CHIFRE < S/P DE CHIFFRAGE... PROG < < < M O D U L E D E C H I F F R A G E : < < < ARGUMENT : < (A,B)=COORDONNEE A CHIFFRER. < < < RESULTAT : < (A,B)=COORDONNEE CHIFFREE. < < CHIFRE: EQU $ FIX < (A)=COORDONNEE ENTIERE, LR A,B < QUE L'ON MET DANS 'B', LAI 0 < ET CLEAR DE 'A'... LXI NBRHEX < NOMBRE DE TOURS A FAIRE. CHIFR1: EQU $ SCLD NBITCX < (A)=CHIFFRE HEXA COURANT, PSR X LR A,X LA &ACHIFR < ET CHIFFRAGE... PLR X JDX CHIFR1 < ET AU CHIFFRE SUIVANT... SCRD NBITMO-NBITCX < (A)=COORDONNE ENTIERE CHIFFREE, FLT < ET CONVERSION FLOTTANTE... RSR < < < C O O R D O N N E E E N ' U ' : < < SPU: EQU $ FLD VARU BSR PCHIFR < CHIFFRAGE DE 'VARU'. RSR < < < C O O R D O N N E E N ' V ' : < < SPV: EQU $ FLD VARV BSR PCHIFR < CHIFFRAGE DE 'VARV'. RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ FLD F0 < ON NE BOUGE PAS... RSR :F :F < <<'SIOD CHIFFRAGE 1' DF'SIOD CHIFFRAGE 2' ED'SIOD CHIFFRAGE 2' IN0 PAGE IDP "SIOD CHIFFRAGE 2" < < < C H I F F R A G E 2 : < < < FONCTION : < CE MODULE CALCULE LE < NOMBRE (XR,YR,NIVEAU(XR,YR)), < QUI TIENT DONC SUR 19 BITS < NUMEROTES DE 0 A 18 ; IL < PROCEDE SUIVANT LES ARGUMENTS < 'A0',...,'A12' A UNE PERMUTATION < DE CES 19 BITS, PUIS ON DECON- < CATENE, CE QUI DONNE (XS,YS, < NIVEAU(XS,YS)). < < < ARGUMENTS : A0:: VAL 0 < PREMIER INDICE DE PERMUTATION... < < < L O C A L : < < LOCAL FLOC: EQU $ MOCG:: VAL 'FF00 MOCD:: VAL '00FF K:: VAL 0 < < ZONE DE PERMUTATION : < SAVE: EQU $ SAVE1: WORD 0 < CONTIENDRA (XS,YS), SAVE2: WORD 0 < ET NIVEAU(XS,YS)... < < CONSTANTES : < FINITE: FLOAT 1000000 < INFINI... PROG < < < C O M P O S A N T E E N ' U ' : < < SPU: EQU $ FLD FINITE < POUR FAIRE UN OVER-SCREEN... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ FLD FINITE < POUR FAIRE UN OVER-SCREEN... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ < < CALCUL DU NOMBRE INITIAL : < STZ SAVE1 < CLEAR DES STZ SAVE2 < 19 BITS... BSR ASPGPR < (A)=NIVEAU(XR,YR), SLRD NCOOL < QUE L'ON POUSSE DANS 'B', LA XR < (A)=(0,XR), SWBR A,A < (A)=(XR,0), OR YR < (A,B)=(XR,YR,NIVEAU(XR,YR),...). LXI 0 < (X)=INDEX DES BITS... < < BOUCLE DE PERMUTATION : < SPW1: EQU $ TBT 0,X < TEST DU BIT COURANT : JNC SPW2 < OK, NUL, DEJA CLEARE... PSR A,B,X < A 1 : ON VA LE PERMUTER : BSR ASPCT < RECUPERATION DE LA CONSTANTE D'INDEX (X), BSR AROND < QUE L'ON MET EN ENTIER, JAL $ < !??!???! CPI NBITMO+NCOOL JGE $ < ???!??!?!! LR A,X < (X)=PERMUTATION(X)... LAD SAVE < (A)=ADRESSE DE LA LISTE PERMUTEE... SBTM A0,X < ET ON GENERE LA LISTE PERMUTEE... PLR A,B,X SPW2: EQU $ ADRI 1,X < PASSAGE AU BIT SUIVANT... XR A,X CPI NBITMO+NCOOL < S'IL EXISTE ??? XR A,X JL SPW1 < OUI... < < GENERATION D'UN POINT : < LA SAVE1 ANDI MOCD STA YS < GENERATION DE SON 'Y', LA SAVE1 SLRS MOCG=K STA XS < DE SON 'X', LAI 0 LB SAVE2 SLLD NCOOL < ET DE SON NIVEAU DANS (A)... BSR ASPRPS < ET ON LE MARQUE... < < GENERATION DE LA COMPOSANTE : < FLD F0 RSR :F :F < <<'SIOD CHIFFRAGE 2' DF'SIOD CONVOLUTION 1' ED'SIOD CONVOLUTION 1' IN0 PAGE IDP "SIOD CONVOLUTION 1" < < < N O Y A U D E C O N V O L U T I O N 1 : < < < FONCTION : < CE MODULE EN CHAQUE POINT (XR,YR)=(XS,YS) < CALCULE : < SIGMA(NIVEAU(XR,YR)*CT(I)), OU 'CT' DESIGNE < UNE CONSTANTE DE TRAVAIL, ET 'I' L'INDICE < DE SOMMATION VARIANT DE 1 AU NOMBRE DE < POINTS 'NPM' DE LA SPIRALE. ENSUITE < LE POINT (XS,YS) RECOIT COMME NIVEAU < LE SIGMA DIVISE PAR 'NPM', LE TOUT < CALCULE MODULO 'NIVMAX'... < ENSUITE, APRES "NORMALISATION" < (MULTIPLICATION PAR 'MCUMUL' < ET DIVISION PAR LE NOMBRE < DE POINTS 'FNP' DE LA SPIRALE), < SI CETTE SOMME SE TROUVE ENTRE < LE MIN ('A25') ET LE MAX ('A26'), < LE POINT EST MARQUE ; ON PEUT AINSI < FAIRE DES OPERATIONS DE MORPHOLO- < GIE MATHEMATIQUE : < < 1 - EROSION : ON NE GARDE UN POINT < QUE SI TOUTE LA SPIRALE CORRESPON- < DANTE EST ENTIEREMENT PLEINE DE < POINTS, DONC : < MIN=MAX=VALEUR MAX DU SIGMA. < < 2 - DILATATION : ON MARQUE UN POINT < DES QUE LA SPIRALE CORRESPONDANTE < CONTIENT UN POINT, DONC : < MIN=1, < MAX=VALEUR MAX DU SIGMA. < < < ARGUMENTS : A20:: VAL '20 < NOMBRE DE POINTS 'NPM' DE CHAQUE SPIRALE, A21:: VAL A20+1 < PAS DE LA SPIRALE (+1 EN GENERAL), A22:: VAL A21+1 < QUE FAIRE LORS DE LA SORTIE HORS DE < L'INTERVALLE (0,NIVMAX) : < -1 : NIVEAUX<0 --> NOIR, < NIVEAUX>NIVMAX --> NOIR, < 0 : NIVEAUX CALCULES MODULO NIVMAX+1, < +1 : NIVEAUX<0 --> NOIR, < NIVEAUX>NIVMAX --> NIVMAX. A23:: VAL A22+1 < DIVISEUR DE 'CUMUL'. A24:: VAL A23+1 < MULTIPLICATEUR DE SIGMA/FNP. A25:: VAL A24+1 < MIN(MCUMUL*SIGMA/FNP), A26:: VAL A25+1 < MAX(MCUMUL*SIGMA/FNP). < < < L O C A L : < < LOCAL FLOC: EQU $ PASQ: WORD 0 < ARGUMENT 'A21'. DELTAX: WORD 0 DELTAY: WORD 0 LB: WORD 0 < LONGUEUR DES LB0: WORD 0 < BRANCHES DE LA SPIRALE. NP: WORD 0 < NOMBRE DE POINT COURANT, FNP: FLOAT 0 < IDEM EN FLOTTANT. NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE. CUMUL: FLOAT 0 < SIGMA SUR LA SPIRALE. DCUMUL: FLOAT 1 < DIVISEUR DE 'CUMUL'... MCUMUL: FLOAT 1 < MULTIPLICATEUR DE SIGMA/FNP. FMIN: FLOAT 0 < MIN(MCUMUL*SIGMA/FNP), FMAX: FLOAT 0 < MAX(MCUMUL*SIGMA/FNP). MODET: WORD 0 < ARGUMENT 'A22'. FINFIN: FLOAT 100000 < INFINI... ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE... IPREM: WORD 0 < INDICATEUR DE PREMIERE ENTREE... < < < C O M P O S A N T E E N ' U ' : < < PROG SPU: EQU $ < < TEST DU PREMIER POINT, ET < INITIALISATION DU Z-BUFFER : < LA IPREM < EST-CE LA PREMIERE FOIS ??? JANE SPU2 < NON... IC IPREM < OUI, INITIALISATION... < < DEFINITION DE LA SPIRALE : < LXI A20 BSR ASPCT FST FNP BSR AROND JALE $ < ?!?!?!?!!!!! CPI A20 < VALIDATION... JGE $ < ??!??!?! STA NPM < NOMBRE DE POINTS MAX... LXI A21 BSR ASPCT BSR AROND JALE $ < !??!?!?! STA PASQ < PAS DE PARCOURS... < < ENTREE DU MODE DE TRACE : < LXI A22 BSR ASPCT BSR AROND STA MODET < < ENTREE DU NORMALISATEUR : < LXI A23 BSR ASPCT FST DCUMUL < < ENTREE DU MIN/MAX : < LXI A24 BSR ASPCT FST MCUMUL < MULTIPLICATEUR DE SIGMA/FNP, LXI A25 BSR ASPCT FST FMIN < MIN(MCUMUL*SIGMA/FNP), LXI A26 BSR ASPCT FST FMAX < MAX(MCUMUL*SIGMA/FNP). < < CALCUL DE LA COMPOSANTE EN 'U' : < SPU2: EQU $ FLD FINFIN < POUR UN OVER-SCREEN... RSR < ?!???! < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ FLD FINFIN < POUR UN OVER-SCREEN... RSR < ???!? < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ LA XR LB YR PSR A,B < SAUVEGARDE DU POINT COURANT... < < CALCUL DU POINT COURANT : < FLD VARU FDV KFU FDV KUZ FST FWORK LA TRX FLT FAD FWORK FIX STA XS < COORDONNEE 'X' DU PREMIER SOMMET, STA XR < CENTRE DE LA SPIRALE... FLD VARV FDV KFV FDV KVZ FST FWORK LA TRY FLT FAD FWORK FIX STA YS < COORDONNEE 'Y' DU PREMIER SOMMET, STA YR < CENTRE DE LA SPIRALE... < < CONVOLUTION PROPREMENT DITE : < BSR ASPIR < MARQUAGE DU POINT COURANT (XS,YS)=(XR,YR) < < RETOUR : < PLR A,B STA XR < RESTAURATION STB YR < DU POINT COURANT... FLD F0 < ET PAS DE DEPLACEMENT... RSR < < < S O M M A T I O N S U R U N E S P I R A L E < C E N T R E E S U R ( X S , Y S ) D E S < N I V E A U X D E S E S P O I N T S : < < SPIR: EQU $ < < INITIALISATION DE LA SPIRALE : < LA XR LB YR PSR A,B < SAUVEGARDE DU POINT (XR,YR). FLD F0 FST CUMUL < CUMUL <-- 0. STZ NP < NP=NOMBRE DE POINTS TRAITES. LA PASQ STA DELTAX < DELTAX <-- +1, STZ DELTAY < DELTAY <-- 0. LAI 1 STA LB0 < INITIALISATION DE LA LONGUEUR DU < PREMIER BRAS DE LA SPIRALE. SPMOY8: EQU $ < < PARCOURS D'UN BRAS : < SPMOY1: EQU $ LA LB0 STA LB < LONGUEUR DU BRAS COURANT. < < TRAITEMENT DU POINT COURANT : < SPMOY2: EQU $ IC NP < COMPTAGE DES POINTS TRAITES : LA NP CP NPM < FINI ??? JG SPMOY3 < OUI... LA XR < NON : JAL SPMOY4 < LE POINT EST HORS-ECRAN... CPI NPOLM1 JG SPMOY4 < HORS-ECRAN... LA YR JAL SPMOY4 < HORS-ECRAN... CPI NLIGM1 JG SPMOY4 < HORS-ECRAN... BSR ASPGPR < A=NIVEAU(XR,YR), FLT < NIVEAU DU POINT COURANT, LX NP < (X)=NUMERO DU POINT COURANT (DE 1 A NPM), ADR X,X FMP &ACT < ET ON PONDERE LE NIVEAU PAR CT(X), FAD CUMUL FST CUMUL < PUIS ON CUMULE... SPMOY4: EQU $ LA XR AD DELTAX < CHANGEMENT DE STA XR LA YR AD DELTAY < POINT COURANT (XS,YS). STA YR DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE : JG SPMOY2 < OK, IL EN RESTE... CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER < LA LONGUEUR COURANTE DES BRANCHES ??? JNE SPMOY5 < NON (DX#0) ... IC LB0 < OUI (DX=0) ... SPMOY5: EQU $ LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE < (0,-1,1,0)... STA DELTAX < DELTAX=-DELTAY, STB DELTAY < DELTAY=DELTAX. JMP SPMOY1 < VERS LA BRANCHE SUIVANTE < < GENERATION DU POINT (XS,YS) : < SPMOY3: EQU $ FLD CUMUL < VALEUR DU SIGMA, FST FWORK < QUE L'ON SAUVEGARDE... FDV FNP < QUE L'ON RAMENE AU NOMBRE DE POINTS, FMP MCUMUL < QUE L'ON PONDERE... FCAM FMIN < ALORS : JL SPMOYA < TROP PETIT : POINT IGNORE... FCAM FMAX < ALORS : JG SPMOYA < TROP GRAND : POINT IGNORE... FLD FWORK < OK, ON EST ENTRE 'MIN' ET 'MAX', < RECUPERONS LE SIGMA... FDV DCUMUL < NORMALISATION... BSR AROND CPZ MODET < QUEL EST LE MODE DE TRACE ??? JNE SPMOY6 < PAR SEUILLAGE... ANDI NIVMAX < PAR MODULO... JMP SPMOY7 < VERS LA GENERATION... SPMOY6: EQU $ JAG SPMOY9 < LE NIVEAU N'EST PAS NOIR... LAI 0 < NOIR, OU NEGATIF --> NOIR... JMP SPMOY7 < VERS LE TRACE... SPMOY9: EQU $ CPI NIVMAX JLE SPMOY7 < ON EST DANS L'INTERVALLE (0,NIVMAX)... CPZ MODET < HORS DE CET INTERVALLE, QUEL EST LE < MODE DE TRACE ??? LAI 0 < A PRIORI : NIVEAU>NIVMAX --> NOIR... JL SPMOY7 < ET OUI, VERS LA GENERATION... LAI NIVMAX < ET NON : NIVEAU>NIVMAX --> NIVMAX... SPMOY7: EQU $ BSR ASPRPS < ET ON LE MARQUE... SPMOYA: EQU $ PLR A,B STA XR < RESTAURATION DE STB YR < (XR,YR)... RSR :F :F < <<'SIOD CONVOLUTION 1' DF'SIOD GRAPHIQUE 1' ED'SIOD GRAPHIQUE 1' IN0 PAGE IDP "SIOD GRAPHIQUE 1" < < < G R A P H I Q U E 1 : < < < FONCTION : < CE MODULE PREND L'IMAGE RESIDENTE, < DEFINIT UNE GRILLE (PASIX,PASIY), Y < CALCULE EN CHAQUE NOEUD LE NIVEAU < MOYEN DES POINTS CONTENUS DANS LA < MAILLE COURANTE ; A PARTIR DE LA < IL GENERE DANS L'ITEM1 (EN QUEUE) < UN PROGRAMME GRAPHIQUE EQUIVALENT SOUS < LA FORME : < >X((((D < = / < = / < < = / < Y)))) < OU : < X=NOM A DONNER AU SOUS-PROGRAMME, < Y=CARACTERE DE FIN CARACTERISTIQUE DE < LA MATRICE DEFINIE... < < < ARGUMENTS : A0:: VAL 0 < INDEX D'INSERTION DU PREMIER CARACTERE < DANS L'ITEM1, A1:: VAL A0+1 < 'PASIX', A2:: VAL A1+1 < 'PASIY'. A3:: VAL A2+1 < NOM 'X' DU SOUS-PROGRAMME, A4:: VAL A3+1 < CARACTERE 'Y' DE FIN... A5:: VAL A4+1 < OPTIMISATION EN BOUT DE LIGNE : < =0 : OUI, ON REDUIT LA LIGNE, < #0 : NON, ON LA LAISSE INTEGRALE... < < < L O C A L : < < LOCAL FLOC: EQU $ PREM: WORD -1 < INDICATEUR DE PREMIER PASSAGE... XA3: WORD 0 < NOM DU SOUS-PROGRAMME, XA4: WORD 0 < ET CARACTERE DE FIN 'Y'... XA5: WORD 0 < PARAMETRE D'OPTIMISATION EN BOUT DE < LIGNE. KXA5: WORD 0 < COMPTEUR DES "-"... INDEX0: WORD 0 < INDEX COURANT DE L'ITEM1 (POUR INSERER). ANLIG1: WORD NLIGM1 AINFIN: WORD INFINI < A CAUSE DE LA BASE 'L'... PASIX: WORD 0 < PAS SUR 'X', PASIY: WORD 0 < PAS SUR 'Y'. LIGC: WORD -1 < NUMERO DE GRILLE HORIZONTALE COURANTE, COLC: WORD -1 < NUMERO DE GRILLE VERTICALE COURANTE. CUMUL: WORD 0 < SIGMA(NIVEAUX(XR,YR)) DANS UNE MAILLE. NPTS: WORD 0 < NOMBRE DE POINTS DANS UNE MAILLE. NCPM: WORD NBCAR*NBLIG-LNOM < POUR NE PAS DEBORDER... BCDA: WORD 0 < BUFFER DE LA 'CDA', ABCDA: WORD BCDA SAVEC: WORD 0 < CARACTERE COURANT POUR L'ITEM1... TCDA: WORD SAVIT1+LTN < ADRESSE DU PREMIER CARACTERE DE L'ITEM1 < DANS LA 'CDA'... ASTIT: WORD STIT < INSERTION D'UN CARACTERE DANS ITEM1... ASPM: WORD SPM < S/P D'INSERTION DES "-"... ASPMT: WORD SPMT < INSERTION DES "-" SI NECESSAIRE... < < < C A R A C T E R E S G R A P H I Q U E S : < < XKSUP:: VAL ">" < DEBUT DE SOUS-PROGRAMME GRAPHIQUE. XKPG:: VAL "(" XKPD:: VAL ")" XKDEBP:: VAL "D" < DEBUT DU SOUS-PROGRAMME GRAPHIQUE. XKDEBL:: VAL "=" < DEBUT DE LIGNE DE MATRICE, XKFIN:: VAL "/" < ET FIN. XKNUL:: VAL "-" < CARACTERE D'ESPACEMENT... < < < R A N G E M E N T D A N S I T E M 1 : < < < ARGUMENTS : < (A)=CARACTERE, < (INDEX0)=INDEX COURANT. < < < RESULTAT : < INDICATEURS SUIVANT QU'AVANT L'INSERTION IL Y A < DEBORDEMENT DANS L'ITEM1... < < PROG STIT: EQU $ PSR A,B,X,Y LBI 0 < CLEAR 'B', STA SAVEC < CARACTERE A RANGER, LA INDEX0 CP NCPM < Y-A-T'IL PRE-DEBORDEMENT ??? JGE STIT1 < OUI, ON NE FAIT RIEN... SLRD NOCMO=0 < POUR CONVERTIR EN UN INDEX-MOT, AD TCDA < (A)=ADRESSE DU MOT EN CDA CONTENANT LE < CARACTERE, LR B,Y < (Y)=0 : OCTET GAUCHE, < #0 : OCTET DROIT. LB ABCDA < (B)=ADRESSE MEMOIRE UTILISATEUR, LXI 1 < ET ON DEPLACE UN MOT... PSR A,X RCDA LA BCDA < (A)=MOT COURANT, CPZR Y < OCTET DROIT OU GAUCHE ??? JNE STIT2 < DROIT... SWBR A,A < GAUCHE, ON PERMUTE... STIT2: EQU $ ANDI 'FF00 < CLEAR, OR SAVEC < ET CONCATENATION... JNE STIT3 < OCTET DROIT... SWBR A,A < GAUCHE, ON REPERMUTE... STIT3: EQU $ STA BCDA PLR A,X WCDA LA INDEX0 < (A)=INDEX COURANT... IC INDEX0 < POUR LE CARACTERE SUIVANT... CP NCPM < POUR RESTAURER LES INDICATEURS... STIT1: EQU $ PLR A,B,X,Y RSR < < < I N S E R T I O N D E S " - " : < < SPM: EQU $ PSR A,X < SAUVEGARDES... LX KXA5 < (X)=NOMBRE DE REPETITIONS DE "-" : CPZR X < Y-EN-A-T'IL ??? JE SPM1 < NON, ON SORT... LAI XKNUL < OUI, (A)=CARACTERE 'ESPACE'... SPM2: EQU $ BSR ASTIT < INSERTION D'UN "-", JDX SPM2 < AU SUIVANT... STZ KXA5 < ET ON RAZE LE COMPTE D'ITERATIONS... SPM1: EQU $ PLR A,X RSR < < < I N S E R T I O N D E S " - " S I N E C E S S A I R E : < < SPMT: EQU $ CPZ XA5 < FAUT-IL OPTIMISER LES BOUTS DE < LIGNE ??? JE SPMT1 < OUI... BSR ASPM < NON, INSERTION DE (KXA5) CARACTERES "-" < EN BOUT DE LIGNE, SPMT1: EQU $ STZ KXA5 < RAZ DU COMPTE D'ITERATIONS... RSR < < < C O M P O S A N T E E N ' U ' : < < SPU: EQU $ < < SAUVEGARDE DE (XR,YR), ET < SYMETRIE PAR RAPPORT A OX : < LA YR LB XR PSR A,B SB ANLIG1 NGR A,A STA YR < SYMETRIE/OX... < < TEST DE PREMIERE FOIS : < CPZ PREM < PREMIERE FOIS ??? JGE SPU1 < NON... IC PREM < OUI... < < ENTREE DES ARGUMENTS : < LXI A0 BSR ASPCT BSR AROND JALE $ STA INDEX0 < INDEX DE RANGEMENT DANS L'ITEM1, LXI A1 BSR ASPCT BSR AROND JALE $ STA PASIX < PAS EN 'X', LXI A2 BSR ASPCT BSR AROND JALE $ STA PASIY < PAS EN 'Y'. LXI A3 BSR ASPCT BSR AROND JALE $ STA XA3 < NOM DU SOUS-PROGRAMME, LXI A4 BSR ASPCT BSR AROND JALE $ STA XA4 < CARACTERE DE FIN... LXI A5 BSR ASPCT BSR AROND STA XA5 < < INITIALISATION DU BOUT DE ITEM1 : < LX INDEX0 PSR X < SAVE 'INDEX0'... LAI " " < (A)=CARACTERE DE CLEAR, SPU2: EQU $ BSR ASTIT < MISE A BLANC DU BOUT DE ITEM1... JL SPU2 < AU SUIVANT... PLR X STX INDEX0 < ET RESTAURATION DE ITEM1... < < INITIALISATION DU SOUS-PROGRAMME GRAPHIQUE : < LAI XKSUP BSR ASTIT < > LA XA3 BSR ASTIT < >X LAI XKPG BSR ASTIT < >X( BSR ASTIT < >X(( BSR ASTIT < >X((( BSR ASTIT < >X(((( LAI XKDEBP BSR ASTIT < >X((((D < < TRAITEMENT DU POINT COURANT : < SPU1: EQU $ LA XR SARD NBITMO DV PASIX CPZR B < EST-ON EN UN NOEUD ??? JNE SPU3 < NON, RIEN A FAIRE... LR A,X < PEUT-ETRE : < (X)=NUMERO DE GRILLE VERTICALE, LA YR SARD NBITMO DV PASIY CPZR B < EST-ON EN UN NOEUD ??? JNE SPU3 < NON, RIEN A FAIRE... LR A,Y < OUI : < (Y)=NUMERO DE GRILLE HORIZONTALE. < < CAS D'UN NOEUD DE LA GRILLE : < CP LIGC < VIENT-ON DE CHANGER DE LIGNE ??? JE SPU4 < NON... STA LIGC < OUI : CPZ COLC < DE PLUS, EST-CE LA PREMIERE ??? JL SPU5 < OUI... BSR ASPMT < NON, INSERTION DES "-" AVEC TEST... LAI XKFIN < PUIS, BSR ASTIT < FERMONS LA LIGNE PRECEDENTE, SPU5: EQU $ STX COLC < MEMORISONS LA COLONNE COURANTE... LAI XKDEBL BSR ASTIT < ET OUVRONS LA NOUVELLE LIGNE... < < CALCUL DU NIVEAU MOYEN D'UNE MAILLE : < SPU4: EQU $ STZ NPTS < RAZ DU NOMBRE DE POINTS, STZ CUMUL < ET DU CUMUL DES NIVEAUX... LA XR LX PASIX PSR A < SAVE 'XR'. SPU6: EQU $ < BOUCLE HORIZONTALE : LA YR PSR A,X < SAVE 'YR' ET 'PASIX' COURANT... LX PASIY SPU7: EQU $ < BOUCLE VERTICALE : IC NPTS < COMPTAGE DES POINTS, BSR ASPGPR < (A)=NIVEAU(XR,YR), AD CUMUL < ET STA CUMUL < CUMULE... IC YR < AU POINT VERTICAL SUIVANT... JDX SPU7 PLR A,X STA YR < RESTAURATION DE 'YR', IC XR < PASSAGE A LA COLONNE SUIVANTE, JDX SPU6 PLR A STA XR < RESTAURATION DE 'XR'. LA CUMUL SARD NBITMO DV NPTS < CALCUL DU NIVEAU MOYEN, ADRI "0",A < CONVERSION 'ASCI', CPI "0" < EST-CE LE NOIR ??? JNE SPU9 < NON... IC KXA5 < OUI, COMPTAGE... JMP SPU3 < ET ON DIFFERE L'INSERTION, AU CAS OU < IL S'AGIRAIT D'UN BOUT DE LIGNE... SPU9: EQU $ BSR ASPM < INSERTION PRELIMINAIRE DE "-" EN < ATTENTE... BSR ASTIT < RANGEMENT DU NIVEAU MOYEN COURANT. < < TEST DE FIN D'IMAGE : < SPU3: EQU $ LA XR CPI NPOLM1 JNE SPU8 < NON... LA YR JANE SPU8 < NON... < < FERMETURE DU SOUS-PROGRAMME GRAPHIQUE : < BSR ASPMT < INSERTION DES "-" EN ATTENTE AVEC TEST... LAI XKFIN BSR ASTIT < / LA XA4 BSR ASTIT < /Y LAI XKPD BSR ASTIT < /Y) BSR ASTIT < /Y)) BSR ASTIT < /Y))) BSR ASTIT < /Y)))) < < SORTIE : < SPU8: EQU $ PLR A,B STB XR STA YR FLD &AINFIN RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ FLD &AINFIN RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ FLD F0 RSR :F :F < <<'SIOD GRAPHIQUE 1' DF'SIOD LUMINANCE 1' ED'SIOD LUMINANCE 1' IN0 PAGE IDP "SIOD LUMINANCE 1" < < < C A L C U L D E L A L U M I N A N C E D E < L ' I M A G E : < < < FONCTION : < CE MODULE CALCULE LA LUMINANCE < DE L'IMAGE RESIDENTE SUIVANT LA < FORMULE : < Y=AR*R+AV*V+AB*B-ARV*(R+V)-AVB*(V+B)-ARB*(R+B)-ARVB*(R+V+B) < OU 'R', 'V' ET 'B' SONT CALCULES < A PARTIR DES REGISTRES DE COULEUR... < < < ARGUMENTS : A0:: VAL 0 < =0 : IGNORER LES POINTS NOIRS, < #0 : LES PRENDRE EN COMPTE... A1:: VAL A0+1 < FACTEUR MULTIPLICATIF DE LA LUMINANCE < MOYENNE. A2:: VAL A1+1 < REGLAGE DU TELEVISEUR... < < LOCAL FLOC: EQU $ < < TABLE DES LUMINANCES ABSOLUES : < LMC:: VAL NIVMAX+1 < NOMBRE DE LUMINANCES A MEMORISER. MC: EQU $ < TABLE DES LUMINANCES ABSOLUES. DO LMC FLOAT 0 AMC: WORD MC,X < RELAI VERS LA LISTE DES LUMINANCES. NNIV:: VAL 16 < NOMBRE DE NIVEAUX PAR CANAL. < < RELAIS : < ASP1: WORD SP1 < S/P DE RECUPERATION D'UN NIVEAU DE GRIS, ASP2: WORD SP2 < S/P DE CALCUL DE LA LUMINANCE. ASPU1: WORD SPU1 < RELAI... < < DEFINITION DE LA LUMINANCE : < FAR: FLOAT 0.575 FAV: FLOAT 0.680 FAB: FLOAT 0.510 FARV: FLOAT -0.290 FARB: FLOAT -0.236 FAVB: FLOAT -0.255 FARVB: FLOAT 0.1695 FLR: FLOAT 0 < LUMINANCE ROUGE SEUL, FLV: FLOAT 0 < LUMINANCE VERT SEUL, FLB: FLOAT 0 < LUMINANCE BLEU SEUL. F16: FLOAT <NNIV<0<0 < < CONSTANTES : < F10000: FLOAT 10000 < POUR FAIRE DES OVER-SCREEN... MEMAD: WORD 0 < ADRESSE COURANTE EN REGISTRES DE < COULEUR. SAVNIV: WORD 0 < VARAIABLE DE TRAVAIL. XA0: WORD 0 < DISCRIMINATEUR DES POINTS NOIRS... FLOG2: FLOAT 0.69315 < LOG(2). F2: FLOAT 2 F40: FLOAT 40 XA1: FLOAT 0 < CONSTANTE MULTIPLICATIVE. XTV: FLOAT 0 < REGLAGE DU TELEVISEUR. XCUMUL: FLOAT 0 < SIGMA(LUMINANCE DES POINTS). XNPT: FLOAT 0 < NOMBRE DE POINTS TRAITES. < < DONNEES DE CALCUL DE EXP(X) : < XNITER:: VAL 8 < PRECISION DU DEVELOPPEMENT DE EXP(X). FWORK3: FLOAT 0 < VARAIBLE DE TRAVAIL... < < EDITION DE LA LUMINANCE : < MLUM: BYTE '6D;" " ASCI "LUM=" MLUMX: ASCI "XXXX" ASCI " DIAPH=" MDIAPH: ASCI "YYYY" LMLUM:: VAL $-MLUM*NOCMO AMLUM: WORD MLUM,X < RELAI DE GENERATION DE "XXXX". DEMLUM: WORD '0202 < EDITION DE LA LUMINANCE... WORD MLUM-ZERO*NOCMO WORD LMLUM AHEXEX: WORD HEXEX < CONVERSION BINAIRE --> ASCI... F10: FLOAT <BASE10<0<0 C10: WORD BASE10 C16: WORD BASE16 < < < C A L C U L D ' U N N I V E A U D E G R I S : < < PROG 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... ADRI -NNIV+1,A NGR A,A < NOIR=0 ET BLANC=15... 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 V E R S I O N B I N A I R E --> A S C I : < < < ARGUMENT : < A=VALEUR, < X=INDEX D'INSERTION... < < HEXEX: EQU $ < < CONSTANTES : < NBITCX:: VAL 4 < NOMBRE DE BITS PAR CHIFFRE HEXA, HA:: VAL "A" HNEUF:: VAL "9" Z:: VAL 1 I:: VAL 1 HZERO:: VAL "0" < < INITIALISATION : < LR A,B < (B)=NOMBRE A CONVERTIR... LYI NBITMO/NBITCX < 4 CONVERSIONS A FAIRE. < < BOUCLE DE DECODAGE : < Z324: EQU $ LAI 0 < INITIALISATION DE A. SLLD NBITCX < RECUPERATION D'UN NBRE DE < 4 BITS DANS B. CPI BASE10-Z < LA CONVERSION EST-ELLE EN CHIFFRE ? JLE Z325 < OUI , C'EST UN CHIFFRE. ADRI HA-HNEUF-Z,A < CAS D'UNE LETTRE. Z325: EQU $ ADRI HZERO,A < CONVERSION EN ASCI. STBY &AMLUM < ET RANGEMENT DANS LE TEXTE. ADRI I,X < PROGRESSION DE L'INDEX < DU TEXTE. ADRI -I,Y < DECOMPTE DES CONVERSIONS. CPZR Y JG Z324 < C'EST PAS FINI .... < < SORTIE : < RSR < < < 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 JAE SPU20 < OUI... BR ASPU1 < NON... SPU20: EQU $ < < 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, FST FLB BSR ASP1 < RECUPERATION DU VERT, FST FLV BSR ASP1 < RECUPERATION DU ROUGE, FST FLR FMP FAR BSR ASP2 < +AR*R, FLD FLV FMP FAV BSR ASP2 < +AV*V, FLD FLB FMP FAB BSR ASP2 < +AB*B, SPU10: EQU $ FCMZ FLR JE SPU11 FCMZ FLV JE SPU11 FLD FLR FAD FLV FMP FARV BSR ASP2 < +ARV*(R+V), SPU11: EQU $ FCMZ FLV JE SPU12 FCMZ FLB JE SPU12 FLD FLV FAD FLB FMP FAVB BSR ASP2 < +AVB*(V+B), SPU12: EQU $ FCMZ FLR JE SPU13 FCMZ FLB JE SPU13 FLD FLR FAD FLB FMP FARB BSR ASP2 < +ARB*(R+B), SPU13: EQU $ FCMZ FLR JE SPU14 FCMZ FLV JE SPU14 FCMZ FLB JE SPU14 FLD FLR FAD FLV FAD FLB FMP FARVB BSR ASP2 < +ARVB*(R+V+B)... SPU14: EQU $ FCAM F16 < SATURATION ??? JLE SPU9 < NON... FLD F16 < OUI... SPU9: EQU $ FST &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 PARAMETRES : < LXI A0 BSR ASPCT FIX STA XA0 < DISCRIMINATEUR DES POINTS NOIRS. LXI A1 BSR ASPCT FST XA1 < CONSTANTE MULTIPLICATIVE. LXI A2 BSR ASPCT FST XTV < REGLAGE DU TELEVISEUR... BSR AROND < VALIDATION : XTV0:: VAL 10 < MIN, XTV1:: VAL 22 < MAX... CPI XTV0 JL $ < !??!?!??!! CPI XTV1 JG $ < ??!?!? < < INITIALISATIONS : < FLD F0 FST XCUMUL < SIGMA(LUMINANCE), FST XNPT < NOMBRE DE POINTS TRAITES. < < CAS DE TOUS LES POINTS : < SPU1: EQU $ BSR ASPGPS < A=NIVEAU(XS,YS)... LR A,X < X=NIVEAU DE GRIS, FLD &AMC < (A,B)=LUMINANCE ABSOLUE DE CE POINT. FCAZ < LE POINT EST-IL NOIR REELLEMENT ??? JNE SPU3 < NON, ON LE TRAITE... CPZ XA0 < OUI, FAUT-IL L'IGNORER ??? JE SPU4 < OUI, ON IGNORE LES POINTS REELLEMENT < NOIRS... SPU3: EQU $ < LE POINT N'EST PAS NOIR, OU BIEN IL < L'EST ET IL FAUT LE TRAITER... FAD XCUMUL FST XCUMUL < CUMUL DES LUMINANCES ABSOLUES. FLD XNPT FAD F1 FST XNPT < ET COMPTAGE DES POINTS. SPU4: EQU $ < < TEST DE FIN : < 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 : < FLD XCUMUL FDV XNPT FST FWORK < FWORK=LUMINANCE MOYENNE CALCULEE. FLD F40 < 40, FDV XTV < 40/REGLAGE, FST FWORK1 FLD FWORK < LUMINANCE, FDV F2 < LUMINANCE/2, FSB FWORK1 < LUMINANCE/2-40/REGLAGE, FAD F2 < LUMINANCE/2-40/REGLAGE+2, < LOG(DIAPHRAGME)=L/2-40/R+2, FMP FLOG2 < POUR CALCULER EXP(LOG(DIAPHRAGME)) EN < BASE 2... < < CALCUL DE L'EXPONENTIELLE : < FST FWORK1 < FWORK1=LOG(DIAPHRAGME)*LOG(2). FLD F1 FST FWORK2 < FWORK2=VALEUR COURANTE DU DEVELOPPEMENT, LXI XNITER < (X)=NOMBRE DE TOURS... SPU8: EQU $ LR X,A FLT FST FWORK3 < 1/N, FLD FWORK1 < LOG(DIAPH)*LOG(2), FDV FWORK3 < LOG(DIAPH)*LOG(2)/N, FMP FWORK2 < (LOG(DIAPH)*LOG(2)/N)*CUMUL, FAD F1 < (LOG(DIAPH)*LOG(2)/N)*CUMUL+1, FST FWORK2 < NOUVEAU CUMUL, JDX SPU8 < AU TERME PRECEDENT... < < EDITION DE LA LUMINANCE ET DU DIAPHRAGME : < FMP F10 BSR AROND < (A)=16*DIAPHRAGME... LXI NBITMO/NBITCX SPU6: EQU $ SARD NBITMO DV C10 PSR B < DECONCATENATION DES CHIFFRES DECIMAUX, JDX SPU6 LYI 0 < INITIALISATION DU CUMUL, LXI NBITMO/NBITCX SPU7: EQU $ LR Y,A MP C16 PLR Y ADR B,Y < ET RECONCATENATION HEXA-DECIMALE... JDX SPU7 LR Y,A LXI MDIAPH-MLUM*NOCMO BSR AHEXEX < CONVERSION ASCI DU DIAPHRAGME... FLD FWORK < RECUPERATION DE LA LUMINANCE, FMP XA1 < QUE L'ON "TRANSLATE"... BSR AROND < (A)=LUMINANCE MOYENNE, < =SIGMA(LUMINANCE ABSOLUE)*A1*FKONS/ < NOMBRE DE POINTS. LXI MLUMX-MLUM*NOCMO BSR AHEXEX < CONVERSION ASCI DE LA LUMINANCE... LAD DEMLUM SVC 0 < < SORTIE : < 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 F10000 RSR :F :F < <<'SIOD LUMINANCE 1' DF'SIOD MOVE RDN 1' ED'SIOD MOVE RDN 1' IN0 PAGE IDP "SIOD MOVE RDN 1" < < < M O V E R D N 1 : < < < FONCTION : < POUR CHAQUE POINT (XR,YR), ON < PREND LE NIVEAU N=NIVEAU(XR,YR) < DANS 'TV2' ; ON CALCULE ALORS 3 < NOMBRE ALEATOIRES, QUI VONT < FORMER UN VECTEUR DEPLACEMENT < APPLIQUE A (XR,YR) ; DONC AINSI < TOUS LES POINTS AYANT LA MEME < COULEUR ASSOCIEE DANS 'TV2' AURONT < LE MEME DEPLACEMENT ALEATOIRE... < < VECTEURS DEPLACEMENTS : < A03 <= A00*RDN1(N)+A01*SIN(A02) <= A04, < A08 <= A05*RDN2(N)+A06*SIN(A07) <= A09, < A0D <= A0A*RDN3(N)+A0B*SIN(A0C) <= A0E. < < < PARAMETRES : A00:: VAL 0 A01:: VAL A00+1 A02:: VAL A01+1 A03:: VAL A02+1 < MIN(DELTA(X)), A04:: VAL A03+1 < MAX(DELTA(X)). A05:: VAL A04+1 A06:: VAL A05+1 A07:: VAL A06+1 A08:: VAL A07+1 < MIN(DELTA(Y)), A09:: VAL A08+1 < MAX(DELTA(Y)). A0A:: VAL A09+1 A0B:: VAL A0A+1 A0C:: VAL A0B+1 A0D:: VAL A0C+1 < MIN(DELTA(Z)), A0E:: VAL A0D+1 < MAX(DELTA(Z)). A0F:: VAL A0E+1 < PREMIER GENERATEUR ALEATOIRE, A10:: VAL A0F+1 < SECOND GENERATEUR ALEATOIRE, A11:: VAL A10+1 < TROISIEME GENERATEUR ALEATOIRE. < < LOCAL FLOC: EQU $ PREM: WORD -1 < INDICATEUR DE PREMIER PASSAGE. < < PARAMETRES : < XFA00: FLOAT 0 XFA01: FLOAT 0 XFA02: FLOAT 0 XFA03: FLOAT 0 XFA04: FLOAT 0 XFA05: FLOAT 0 XFA06: FLOAT 0 XFA07: FLOAT 0 XFA08: FLOAT 0 XFA09: FLOAT 0 XFA0A: FLOAT 0 XFA0B: FLOAT 0 XFA0C: FLOAT 0 XFA0D: FLOAT 0 XFA0E: FLOAT 0 PARAM1: FLOAT 0 PARAM2: FLOAT 0 PARAM3: FLOAT 0 < < VARIABLES DE MANOEUVRE : < FWORK4: FLOAT 0 FWORK5: FLOAT 0 XFSUP: FLOAT 0 < BORNE SUP COURANTE, XFINF: FLOAT 0 < BORNE INF COURANTE. < < PARAMETRES DE GENERATION RDN : < INFIN1: FLOAT 32768 < INFINI ENTIER, INFIN2: FLOAT 16384 < INFINI ENTIER/2... < < RELAIS : < ASPRDN: WORD SPRDN < GENERATION ALEATOIRE. PROG < < < C O M P O S A N T E E N ' U ' : < < SPU: EQU $ < < ENTREE DES PARAMETRES : < CPZ PREM < EST-CE LA PREMIERE FOIS ??? JGE SPU1 < NON... IC PREM < OUI, ON ENTRE LES PARAMETRES : LXI A00 BSR ASPCT FST XFA00 LXI A01 BSR ASPCT FST XFA01 LXI A02 BSR ASPCT FST XFA02 LXI A03 BSR ASPCT FST XFA03 LXI A04 BSR ASPCT FST XFA04 LXI A05 BSR ASPCT FST XFA05 LXI A06 BSR ASPCT FST XFA06 LXI A07 BSR ASPCT FST XFA07 LXI A08 BSR ASPCT FST XFA08 LXI A09 BSR ASPCT FST XFA09 LXI A0A BSR ASPCT FST XFA0A LXI A0B BSR ASPCT FST XFA0B LXI A0C BSR ASPCT FST XFA0C LXI A0D BSR ASPCT FST XFA0D LXI A0E BSR ASPCT FST XFA0E LXI A0F BSR ASPCT FST PARAM1 LXI A10 BSR ASPCT FST PARAM2 LXI A11 BSR ASPCT FST PARAM3 < < CALCUL DE 'X' : < SPU1: EQU $ FLD XFA03 FST XFINF < BORNE INFERIEURE, FLD XFA04 FST XFSUP < BORNE SUPERIEURE, FLD PARAM1 < (A,B)=PARAMETRE INITIAL... BSR ASPRDN < RDN1, FMP XFA00 < A00*RDN1, FST FWORK4 FLD XFA02 < A02, BSR ASIN < SIN(A02), FMP XFA01 < A01*SIN(A02), FAD FWORK4 < A00*RDN1+A01*SIN(A02), FAD VARU < ET ENFIN, ON TRANSLATE LA COORDONNEE < 'U' COURANTE... RSR < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ < < CALCUL DE 'Y' : < FLD XFA08 FST XFINF < BORNE INFERIEURE, FLD XFA09 FST XFSUP < BORNE SUPERIEURE, FLD PARAM2 < (A,B)=PARAMETRE INITIAL... BSR ASPRDN < RDN2, FMP XFA05 < A05*RDN2, FST FWORK4 FLD XFA07 < A07, BSR ASIN < SIN(A07), FMP XFA06 < A06*SIN(A07), FAD FWORK4 < A05*RDN2+A06*SIN(A07), FAD VARV < ET ENFIN, ON TRANSLATE LA COORDONNEE < 'V' COURANTE... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ < < CALCUL DE 'Z' : < FLD XFA0D FST XFINF < BORNE INFERIEURE, FLD XFA0E FST XFSUP < BORNE SUPERIEURE, FLD PARAM3 < (A,B)=PARAMETRE INITIAL... BSR ASPRDN < RDN3, FMP XFA0A < A0A*RDN3, FST FWORK4 FLD XFA0C < A0C, BSR ASIN < SIN(A0C), FMP XFA0B < A0B*SIN(A0C), FAD FWORK4 < A0A*RDN3+A0B*SIN(A0C), < CE QUI DONNE LA COMPOSANTE 'W'... RSR PAGE < < < G E N E R A T I O N A L E A T O I R E : < < < ARGUMENTS : < (A,B)=CONSTANTE D'INITIALISATION, < (XFINF,XFSUP)=BORNES COURANTES. < < < RESULTAT : < (A,B)=NOMBRE FLOTTANT ALEATOIRE COMPRIS < ENTRE LA BORNE INF ET LE BORNE < INFERIEURE, ET FONCTION DE (A) < ET DU NIVEAU(XR,YR) DANS 'TV2'. < < SPRDN: EQU $ PSR A,B < SAUVEGARDE DE LA CONSTANTE INITIALE. < < ACCES A 'TV2' : < LA CTCDA STA XCTCDA < POUR ACCEDER A 'TV2'... LA XS LB YS PSR A,B < SAUVEGARDE DE (XS,YS), LA XR LB YR STB YS < ON FAIT : STA XS < (XS,YS)=(XR,YR)... BSR ASPGPS < (A)=NIVEAU(XS,YS), BSR AFLT BSR ASIN < POUR RIRE... EORR B,A SWBR A,A BSR AFLT FST FWORK < QUE L'ON FLOTTE, ET SAUVEGARDE... PLR A,B STB YS < RESTAURATION STA XS < DE (XS,YS), STZ XCTCDA < ET RETOUR A 'TV1'... < < GENERATION ALEATOIRE : < PLR A,B FAD FWORK < A LAQUELLE ON AJOUTE LE NIVEAU < DU POINT (XR,YR) DANS 'TV2', BSR ASIN < DONT ON PREND LE SINUS, EORR B,A < QUE L'ON CONVERTIT EN ENTIER, SWBR A,A < POUR GENERER DU NEGATIF... BSR AFLT < PUIS EN FLOTTANT... < < NORMALISATION : < FMP F05 < RDN/2, PSR A,B < SAVE RDN/2... FAD INFIN2 < (RDN+INFINI)/2, FST FWORK4 FLD XFSUP < BORNE SUPERIEURE COURANTE, FMP FWORK4 FST FWORK4 PLR A,B < RDN/2, FSB INFIN2 < (RDN-INFINI)/2, FST FWORK5 FLD XFINF < BORNE INFERIEURE COURANTE, FMP FWORK5 FST FWORK5 FLD FWORK4 FSB FWORK5 FDV INFIN1 < MISE A L'ECHELLE... < < SORTIE : < RSR :F :F < <<'SIOD MOVE RDN 1' DF'SIOD FACETTES 1' ED'SIOD FACETTES 1' IN0 PAGE IDP "SIOD FACETTES 1" < < < R E C U P E R A T I O N D E S F A C E T T E S 1 : < < < FONCTION : < CE MODULE RECUPERE LES < FACETTES "X/YYXXT" GENEREES < PAR LA COMBINAISON DE " +" < ET DU PROGRAMME DE MAILLAGE ; < A CHAQUE PASSAGE DANS 'SPU', < ON RECHERCHE LA FACETTE SUIVANTE < ET ON LA VISUALISE SUR L'ECRAN < APRES LUI AVOIR FAIT SUBIR LA < MATRICE DE TRANSFORMATION COU- < RANTE.. < < < ARGUMENTS : A0:: VAL 0 < DERNIER CARACTERE ATTENDU POUR LE NOM < DES FACETTES : < "0" : POUR LES FACETTES "INTERNES", < "1" A "6" : POUR LES FACETTES "EXTERNES". A1:: VAL A0+1 < MOT 0 DE LA DEMANDE GRAPHIQUE, A2:: VAL A1+1 < MOT 1 DE LA DEMANDE GRAPHIQUE. < < < < < L O C A L : < < LOCAL FLOC: EQU $ IPREM: WORD 0 < INDICATEUR DE PREMIER PASSAGE... IFINI: WORD 0 < =0 : ON PEUT EXPLORER LE CATALOGUE, < #0 : ON A FINI L'EXPLORATION... < < RELAIS DIVERS : < AMATRB: WORD MATRB < ACCES A LA MATRICE DE TRANSFORMATION. APROJB: WORD PROJB < PROJECTION 2D --> 3D. AVISU: WORD VISU < PASSAGE 'TV' --> 'VISU'... < < CONSTANTES : < XA0: WORD 0 < DERNIER CARACTERE ATTENDU POUR CHAQUE < NOM DE FACETTE ("0" : FACETTES INTERNES, < ET DE "1" A "6" POUR LES FACETTES EXTER- < NES). FINITE: FLOAT 1000000 < POUR UN OVERS-SCREEN... < < FACETTES PROJETTEES : < CA2D: EQU $ < SOMMET 'A' 2D : XSA: WORD 0 < X(A), YSA: WORD 0 < Y(A). CB2D: EQU $ < SOMMET 'B' 2D : XSB: WORD 0 < X(B), YSB: WORD 0 < Y(B). CC2D: EQU $ < SOMMET 'C' 2D : XSC: WORD 0 < X(C), YSC: WORD 0 < Y(C). < < < D E F I N I T I O N D E S F A C E T T E S : < < ANFACE: WORD NFACET,X < RELAI D'ACCES AU NOM DE LA FACETTE. NFACET: ASCI "X/" < NOM DES FACETTES "X/YYXX"... NFACE1: ASCI "YYXX" < DESTINE A CONTENIR L'INDICE TOPOLOGIQUE. NFACE2: BYTE "Z";EOT LNFACE:: VAL $-NFACET*NOCMO < LONGUEUR DU NOM D'UNE FACETTE... CF3D: EQU $ < DEBUT DE LA LISTE DES SOMMETS : CA3D: EQU $ < SOMMET 'A' : FXSA: FLOAT 0 < XA, FYSA: FLOAT 0 < YA, FZSA: FLOAT 0 < ZA. LBUF3D:: VAL $-CA3D NA3D: EQU $ < VECTEUR NORMAL EN 'A' : XNA: FLOAT 0 < XN(A), YNA: FLOAT 0 < YN(A), ZNA: FLOAT 0 < ZN(A). VARUA: FLOAT 0 < UA, VARVA: FLOAT 0 < VA. IDENTA: BYTE 0;0 < IDENTA. CB3D: EQU $ < SOMMET 'B' : FXSB: FLOAT 0 < XB, FYSB: FLOAT 0 < YB, FZSB: FLOAT 0 < ZB. NB3D: EQU $ < VECTEUR NORMAL EN 'B' : XNB: FLOAT 0 < XN(B), YNB: FLOAT 0 < YN(B), ZNB: FLOAT 0 < ZN(B). VARUB: FLOAT 0 < UB, VARVB: FLOAT 0 < VB. IDENTB: BYTE 0;0 < IDENTB. CC3D: EQU $ < SOMMET 'C' : FXSC: FLOAT 0 < XC, FYSC: FLOAT 0 < YC, FZSC: FLOAT 0 < ZC. NC3D: EQU $ < VECTEUR NORMAL EN 'C' : XNC: FLOAT 0 < XN(C), YNC: FLOAT 0 < YN(C), ZNC: FLOAT 0 < ZN(C). VARUC: FLOAT 0 < UC, VARVC: FLOAT 0 < VC. IDENTC: BYTE 0;0 < IDENTC. PLAN3D: EQU $ < DEFINITION DU PLAN : PLANAF: FLOAT 0 < A=XN, PLANBF: FLOAT 0 < B=YN, PLANCF: FLOAT 0 < C=ZN, PLANDF: FLOAT 0 < D. LFACET:: VAL $-NFACET*NOCMO < LONGUEUR TOTALE NOM+VALEUR D'UNE FACETTE. < < DONNEES D'ACCES A UNE FACETTE : < DEMSGN: BYTE '00;'02 < DEMANDE D'ACCES AU 'SGN' : WORD NFACET-ZERO*NOCMO WORD 0 < LA LONGUEUR VARIE SUIVANT LE 'NVP'... WORD -1 XRAC: WORD 0 < NOMBRE DE CARACTERES DE LA RACINE "X/", SXRAC: WORD 0 < (SXRAC)=(XRAC)-Z. ASPSGN: WORD SPSGN < SOUS-PROGRAMME D'ACCES AU 'SGN'... < < DONNEES GRAPHIQUES : < BGRAPH: EQU $ MODE1: BYTE '00;'00 < OCTET GAUCHE=QUE FAIRE DES POINTS ANTE- < RIEURS DANS 'MEMTV', < OCTET DROITE=POINTILLES. MODE2: BYTE '01;'B0 < OCTET GAUCHE=TYPE DE LOGIQUE, < OCTET DROITE=LA COULEUR DU TRACE SUR < LES 4 DERNIERS BITS. YV1: WORD 0 < Y1 VIDEO, XV1: WORD 0 < X1 VIDEO. YV2: WORD 0 < Y2 VIDEO, XV2: WORD 0 < X2 VIDEO. YG1: WORD 0 < Y1 GRAPHIQUE, XG1: WORD 0 < X1 GRAPHIQUE. YG2: WORD 0 < Y2 GRAPHIQUE, XG2: WORD 0 < X2 GRAPHIQUE. LGRAPH:: VAL $-BGRAPH DEMGRA: WORD TVDKU < DEMANDE D'INTERPOLATION 12K... WORD BGRAPH-ZERO*NOCMO WORD LGRAPH*NOCMO WORD 0 PROG PAGE < < < A P P E L D U ' S G N ' : < < < FONCTION : < CE SOUS-PROGRAMME PERMET < D'APPELER LE 'SGN' POUR < CONNAITRE SOIT LE SUIVANT < SERIE, SOIT LE SUIVANT PA- < RALLELE DE LA CHAINE DE CA- < RACTERES COURANTE. < < < ARGUMENT : < (A)='NVPLON', 'NVPNXS' OU 'NVPNXP', < (X)=INDEX DU CARACTERE COURANT. < < < RESULTAT : < (A)=CODES D'ERREUR EVENTUELS. < < SPSGN: EQU $ < < INITIALISATIONS : < PSR X < SAUVEGARDE DE L'INDEX COURANT... STBY DEMSGN < MISE EN PLACE DU 'NVP' CHOISI... < < VALIDATIONS : < CPZR X JGE SPSGN1 < OK... QUIT 1 < E R R E U R P R O G R A M M E... SPSGN1: EQU $ < < ACCES AU 'SGN' : < CPI '80?SGNLON JNE SPSGN2 < CE N'EST PAS 'LON'... LAI LFACET < CAS DE 'LON', ON MET ON PLACE LA LONGUEUR < NOM+VALEUR... JMP SPSGN3 SPSGN2: EQU $ < CAS DE 'NXP' ET 'NXS' : LR X,A < ON CALCULE LA LONGUEUR DE LA CHAINE ADRI 1,A < COURANTE... SPSGN3: EQU $ STA DEMSGN+2 < MISE EN PLACE DE LA LONGUEUR < COURANTE. LAD DEMSGN SVC 0 < APPEL DU 'SGN'. < < ET RETOUR : < LR X,A < A=CONDITIONS DE RETOUR. PLR X < RESTAURE X COURANT. RSR PAGE < < < P A S S A G E ' T V ' --> ' V I S U ' : < < VISU: EQU $ < < CONVERSION DE 'X' : < LA XS SLLS DEDX STA XS < < CONVERSION DE 'Y' : < LRM A WORD NLIGM1 SB YS SLLS DEDY STA YS < < ET RETOUR : < RSR PAGE < < < A C C E S A L A M A T R I C E D E T R A N S F O R M A T I O N < P O U R U N S O M M E T D E L A F A C E T T E : < < < ARGUMENT : < (A)=ADRESSE DU SOMMET. < < MATRB: EQU $ LRM B,X WORD FXS WORD LBUF3D MOVE < LE SOMMET EST MIS DANS LE POINT < COURANT, AFIN QUE 'MATR' FONCTIONNE < CORRECTEMENT... PSR L < SAVE LE 'L' LOCAL... LRM L WORD LOC+'80 < ET MISE DE 'L' DE " +"... USE L,LOC+'80 LAD FXS < (A)=ADRESSE DES COORDONNEES A TRANS- < FORMER, BSR AMATR < ET TRANSFORMATION GEOMETRIQUE... PLR L < RESTAURE LE 'L' LOCAL... USE L RSR PAGE < < < P R O J E C T I O N : < < < ARGUMENT : < (FXS,FYS,FZS)=POINT 3D. < < < RESULTAT : < (A)=YS, < (XS,YS)=POINT 2D. < < PROJB: EQU $ PSR L < SAVE LE 'L' LOCAL... LRM L WORD LOC+'80 < ET MISE DE 'L' DE " +"... USE L,LOC+'80 BSR APROJ < PROJECTION 2D --> 3D... PLR L < RESTAURE LE 'L' LOCAL... USE L RSR PAGE < < < C O M P O S A N T E E N ' U ' : < < SPU: EQU $ CPZ IFINI < A-T'ON FINI L'EXPLORATION DU CATALOGUE ?? JNE SPU3 < OUI, ON SORT... < < < P A R C O U R S D U C A T A L O G U E " X / " : < < LX SXRAC < (X)=A PRIORI LA VALEUR SAUVEGARDEE < DE 'XRAC'... CPZ IPREM < EST-CE LA PREMIERE FOIS ??? JG E102 < NON, ON GARDE 'X', ET ON VA CHERCHER LE < NOM SUIVANT... < < INITIALISATIONS DES CONSTANTES : < IC IPREM < OUI, IL FAUT INITIALISER 'X'... LXI A0 BSR ASPCT BSR AROND STA XA0 < ENTREE DU DERNIER CARACTERE DES NOMS < DES FACETTES... LXI A1 BSR ASPCT BSR AROND STA MODE1 < PREMIER MOT DE MODE GRAPHIQUE, LXI A2 BSR ASPCT BSR AROND STA MODE2 < DEUXIEME MOT DE MODE GRAPHIQUE. < < INITIALISATION DU PARCOURS : < LXI NFACE1-NFACET*NOCMO STX XRAC < (XRAC)=LONGUEUR DE LA RACINE, ADRI -1,X < < B O U C L E D E R E C U P E R A T I O N : < E100: EQU $ LAI '89 < (A)='NVPNXS'... BSR ASPSGN < DEMANDE DE NEXT-SERIE. CPI '05 < TEST DU CODE D'ERREUR. JE E103 < IL N'Y A PAS DE NEXT SERIE... JAE E101 < OK, LE NEXT-SERIE EXISTE. LR X,A CP XRAC < EST-ON DE RETOUR SUR LA RACINE ??? JL E106 < OUI, ON ARRETE LE PARCOURS DU CATALOGUE. ADRI -1,X < DANS LES AUTRES CAS D'ERREURS, < ON FAIT UN RETOUR ARRIERE, CAR < EN EFFET ON NE DOIT PLUS SAVOIR < OU L'ON EN EST SUITE A UN < DELETE SIMULTANE... JMP E100 < N'ETANT PAS DE RETOUR SUR < LA RACINE, ON CONTINUE. < < CAS OU IL Y A UN NEXT-SERIE : < E101: EQU $ ADRI 1,X LBY &ANFACE < RECUPERATION DE CE NEXT-SERIE. CPI EOT < EST-CE UNE FIN DE NOM ??? JNE E100 < NON, ON CONTINUE A RECUPERER. ADRI -1,X < OUI, MAIS LBY &ANFACE < RECUPERONS LE CARACTERE PRECEDENT : ADRI 1,X CP XA0 < EST-CE LA CARACTERE PARAMETRE ATTENDU ??? JNE E102 < NON, LE NOM EST IGNORE... < < ACCES A LA VALEUR COURANTE : < LAI '80?SGNLON < (A)='NVPLON' (SOUS ":SYS"...). BSR ASPSGN < CHARGEMENT DE LA VALEUR... ACTD 3 < ACCES A LA TAILLE DE LA VALEUR CHARGEE : LR B,A < (A)=NOMBRE D'OCTETS OCCUPES : CPI LFACET-LNFACE < EST-CE BIEN CE QUE L'ON ATTEND ??? JNE E102 < NON, ON L'IGNORE... < < < T R A I T E M E N T D E L A F A C E T T E < C O U R A N T E : < < PSR A,B,X < < TRANSFORMATION ET PROJECTION DE 'A' : < LAD CA3D BSR AMATRB < TRANSFORMATION GEOMETRIQUE DE 'A', BSR APROJB < PROJECTION DE 'A'. BSR AVISU < ET MISE AU FORMAT VISU... LA XS STA XSA LA YS STA YSA < < TRANSFORMATION ET PROJECTION DE 'B' : < LAD CB3D BSR AMATRB < TRANSFORMATION GEOMETRIQUE DE 'B', BSR APROJB < PROJECTION DE 'B'. BSR AVISU < ET MISE AU FORMAT VISU... LA XS STA XSB LA YS STA YSB < < TRANSFORMATION ET PROJECTION DE 'C' : < LAD CC3D BSR AMATRB < TRANSFORMATION GEOMETRIQUE DE 'C', BSR APROJB < PROJECTION DE 'C'. BSR AVISU < ET MISE AU FORMAT VISU... LA XS STA XSC LA YS STA YSC < < TRACE GRAPHIQUE : < LB XSA STB XG1 LB YSA STB YG1 LB XSB STB XG2 LB YSB STB YG2 LAD DEMGRA SVC 0 < TRACE DE 'AB'... LB XSC STB XG1 LB YSC STB YG1 SVC 0 < TRACE DE 'CB'... LB XSA STB XG2 LB YSA STB YG2 SVC 0 < TRACE DE 'CA'... < < FIN DE LA FACETTE COURANTE : < PLR A,B,X SPU2: EQU $ STX SXRAC < ON SAUVEGARDE 'X' POUR LE TOUR SUIVANT... SPU3: EQU $ < CAS OU L'EXPLORATION DU CATALOGUE < EST ACHEVEE... FLD FINITE < POUR UN OVERSCREEN... RSR < < RECHERCHE DU NEXT-PARALLELE : < E102: EQU $ E103: EQU E102 < ENTRY DE 1ERE RECHERCHE NEXT- < SERIE (CF. RACINE D'UN CATALOGUE) LAI '88 BSR ASPSGN < RECHERCHE NEXT-PARALLELE. CPI '05 < TEST DU CODE D'ERREUR. JE E105 < CAS DU NEXT-PARALLELE QUI < N'EXISTE PAS... JANE E100 < AUTRES CAS DU SUREMENT A UN < DELETE SIMULTANE QUI DESORIENTE!!! < < CAS OU IL Y A UN NEXT-PARALLELE : < E104: EQU $ ADRI 1,X LBY &ANFACE < RECUPERATION DE CELUI-CI. ADRI -1,X STBY &ANFACE < ET ON LE MET A SA BONNE PLACE. JMP E100 < ET RETOUR A LA BOUCLE DE < RECUPERATION. < < CAS OU IL N'Y A PAS DE NEXT-PARALLELE : < E105: EQU $ ADRI -1,X < RETOUR ARRIERE DANS LE NOM. LR X,A < POUR VALIDATION. CP XRAC < EST-ON DE RETOUR SUR LA RACINE ??? JGE E102 < NON, ON CONTINUE... < < FIN DE PARCOURS : < E106: EQU $ IC IFINI < AFIN DE NE PLUS EXPLORER... JMP SPU3 < ET ON SORT SANS RIEN FAIRE... < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ FLD FINITE < POUR UN OVER-SCREEN... RSR < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ FLD FINITE < POUR UN OVERS-SCREEN... RSR :F :F < <<'SIOD FACETTES 1' DF'SIOD AUTOMATE 1' ED'SIOD AUTOMATE 1' IN0 PAGE IDP "SIOD AUTOMATE 1" < < < A U T O M A T E S C E L L U L A I R E S 1 : < < < FONCTION : < CE MODULE EXAMINE EN CHAQUE < POINT LA PATTERN DES VOISINS < (DEFINIE PAR UNE SPIRALE DE < 'A20' POINTS DEFINIS PAR LES < LISTES DE NIVEAUX 'A01', 'A02',...) < S'IL Y A COINCIDENCE, LE < POINT CENTRAL EST MARQUE AVEC < LA COULEUR 'A22', SINON, IL < EST EFFACE AVEC 'A23'... LE MOT < COINCIDENCE SIGNIFIANT QUE LE < NIVEAU DU POINT COURANT DE LA < SPIRALE EN COURS D'EXPLORATION < EST A 1 DANS LA LISTE COURANTE < (DE MEME RANG QUE LE POINT) 'AX'. < < < ARGUMENTS : A20:: VAL '20 < NOMBRE DE POINTS 'NPM' DE CHAQUE SPIRALE, A21:: VAL A20+1 < PAS DE LA SPIRALE (+1 EN GENERAL), A22:: VAL A21+1 < COULEUR DE MARQUAGE, A23:: VAL A22+1 < COULEUR D'EFFACEMENT. A24:: VAL A23+1 < COMMENT GERER LES "HORS-ECRAN" : < =0 : FAIRE COMME S'IL Y AVAIT COINCIDENCE < #0 : PAS DE COINCIDENCE ==> EFFACAGE < IMMEDIAT... < < < L O C A L : < < LOCAL FLOC: EQU $ PASQ: WORD 0 < ARGUMENT 'A21'. DELTAX: WORD 0 DELTAY: WORD 0 LB: WORD 0 < LONGUEUR DES LB0: WORD 0 < BRANCHES DE LA SPIRALE. NP: WORD 0 < NOMBRE DE POINT COURANT, FNP: FLOAT 0 < IDEM EN FLOTTANT. NPM: WORD 0 < NOMBRE DE POINTS ENTIER DE LA SPIRALE. COULMA: WORD 0 < COULEUR DE MARQUAGE ('A22'), COULRA: WORD 0 < COULEUR D'EFFACEMENT ('A23'). OVSCR: WORD 0 < GESTION DES "HORS-ECRAN" : < =0 : POURSUIVRE L'EXPLORATION DE LA < SPIALE COMME S'IL Y AVAIT EU < COINCIDENCE, < #0 : EFFACER IMMEDIATEMENT... FINFIN: FLOAT 100000 < INFINI... ASPIR: WORD SPIR < CALCUL DU SIGMA SUR UNE SPIRALE... IPREM: WORD 0 < INDICATEUR DE PREMIERE ENTREE... < < < C O M P O S A N T E E N ' U ' : < < PROG SPU: EQU $ < < TEST DU PREMIER POINT, ET < INITIALISATION DU Z-BUFFER : < LA IPREM < EST-CE LA PREMIERE FOIS ??? JANE SPU2 < NON... IC IPREM < OUI, INITIALISATION... < < DEFINITION DE LA SPIRALE : < LXI A20 BSR ASPCT FST FNP BSR AROND JALE $ < ?!?!?!?!!!!! CPI A20 < VALIDATION... JGE $ < ??!??!?! STA NPM < NOMBRE DE POINTS MAX... LXI A21 BSR ASPCT BSR AROND JALE $ < !??!?!?! STA PASQ < PAS DE PARCOURS... < < ENTREE DES COULEURS : < LXI A22 BSR ASPCT BSR AROND STA COULMA < COULEUR DE MARQUAGE, LXI A23 BSR ASPCT BSR AROND STA COULRA < COULEUR D'EFFACEMENT. < < GESTION DES "HORS-ECRAN" : < LXI A24 BSR ASPCT BSR AROND STA OVSCR < < CALCUL DE LA COMPOSANTE EN 'U' : < SPU2: EQU $ FLD FINFIN < POUR UN OVER-SCREEN... RSR < ?!???! < < < C O M P O S A N T E E N ' V ' : < < SPV: EQU $ FLD FINFIN < POUR UN OVER-SCREEN... RSR < ???!? < < < C O M P O S A N T E E N ' W ' : < < SPW: EQU $ LA XR LB YR PSR A,B < SAUVEGARDE DU POINT COURANT... < < CALCUL DU POINT COURANT : < FLD VARU FDV KFU FDV KUZ FST FWORK LA TRX FLT FAD FWORK FIX STA XS < COORDONNEE 'X' DU PREMIER SOMMET, STA XR < CENTRE DE LA SPIRALE... FLD VARV FDV KFV FDV KVZ FST FWORK LA TRY FLT FAD FWORK FIX STA YS < COORDONNEE 'Y' DU PREMIER SOMMET, STA YR < CENTRE DE LA SPIRALE... < < CONVOLUTION PROPREMENT DITE : < BSR ASPIR < MARQUAGE DU POINT COURANT (XS,YS)=(XR,YR) < < RETOUR : < PLR A,B STA XR < RESTAURATION STB YR < DU POINT COURANT... FLD F0 < ET PAS DE DEPLACEMENT... RSR < < < S O M M A T I O N S U R U N E S P I R A L E < C E N T R E E S U R ( X S , Y S ) D E S < N I V E A U X D E S E S P O I N T S : < < SPIR: EQU $ < < INITIALISATION DE LA SPIRALE : < LA XR LB YR PSR A,B < SAUVEGARDE DU POINT (XR,YR). STZ NP < NP=NOMBRE DE POINTS TRAITES. LA PASQ STA DELTAX < DELTAX <-- +1, STZ DELTAY < DELTAY <-- 0. LAI 1 STA LB0 < INITIALISATION DE LA LONGUEUR DU < PREMIER BRAS DE LA SPIRALE. SPMOY8: EQU $ < < PARCOURS D'UN BRAS : < SPMOY1: EQU $ LA LB0 STA LB < LONGUEUR DU BRAS COURANT. < < TRAITEMENT DU POINT COURANT : < SPMOY2: EQU $ IC NP < COMPTAGE DES POINTS TRAITES : LA NP CP NPM < FINI ??? JG SPMOY3 < OUI... LA XR < NON : JAL SPMOYB < LE POINT EST HORS-ECRAN... CPI NPOLM1 JG SPMOYB < HORS-ECRAN... LA YR JAL SPMOYB < HORS-ECRAN... CPI NLIGM1 JG SPMOYB < HORS-ECRAN... BSR ASPGPR < A=NIVEAU(XR,YR), LR A,Y < (Y)=NIVEAU DU POINT COURANT. LX NP < (X)=NUMERO DU POINT COURANT (DE 1 A NPM), BSR ASPCT < ACCES A LA LISTE DES NIVEAUX : BSR AFIX < (A)=LISTE DES NIVEAUX SIGNIFICATIFS (1), LR Y,X < (X)=NIVEAU DU POINT COURANT, TBT 0,X < ALORS, Y-A-T'IL COINCIDENCE ??? JNC SPMOYC < NON, ON EFFACE IMMEDIATEMENT... SPMOY4: EQU $ < OUI, ON POURSUIT L'EXPLORATION... LA XR AD DELTAX < CHANGEMENT DE STA XR LA YR AD DELTAY < POINT COURANT (XS,YS). STA YR DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE : JG SPMOY2 < OK, IL EN RESTE... CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER < LA LONGUEUR COURANTE DES BRANCHES ??? JNE SPMOY5 < NON (DX#0) ... IC LB0 < OUI (DX=0) ... SPMOY5: EQU $ LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE < (0,-1,1,0)... STA DELTAX < DELTAX=-DELTAY, STB DELTAY < DELTAY=DELTAX. JMP SPMOY1 < VERS LA BRANCHE SUIVANTE < < GESTION DES "HORS-ECRAN" : < SPMOYB: EQU $ CPZ OVSCR < QUE FAIRE ??? JE SPMOY4 < FAIRE COMME S'IL Y AVAIT EU COINCIDENCE.. SPMOYC: EQU $ LA COULRA < NON, < (A)=COULEUR D'EFFACEMENT... JMP SPMOY7 < VERS L'EFFACEMENT... < < GENERATION DU POINT (XS,YS) : < SPMOY3: EQU $ LA COULMA < (A)=COULEUR DE MARQUAGE... SPMOY7: EQU $ BSR ASPRPS < ET ON LE MARQUE, OU ON L'EFFACE... SPMOYA: EQU $ PLR A,B STA XR < RESTAURATION DE STB YR < (XR,YR)... RSR :F :F < <<'SIOD AUTOMATE 1'