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