DATE
PROG
TRN
<
<
< D E F I N I T I O N S G E N E R A L E S :
<
<
XUNDEF:: VAL -1 < POUR NE DEFINIR QUE LES 'XX...' DANS LES
< FICHIERS DE DEFINITION...
CALL #SIP DEFINITION CTTE#
<
< PREPARATION DE L'APPEL DE #SIP UTILITAIRES# :
<
XXXDEF: VAL XUNDEF
XXXLOC: VAL XUNDEF
XXXTAB: VAL XUNDEF
XXXPRO: VAL XUNDEF
CALL #SIP UTILITAIRES#
<
<
< D E F I N I T I O N D E L ' I M A G E :
<
<
XXXVEC: VAL XUNDEF < AFIN DE NE DEFINIR QUE LES 'XXVEC'...
CALL #SIP VECTEUR 512#
XXXVEC: VAL XXVEC1 < DEFINITION DES CONSTANTES IMAGE/VECTEUR.
CALL #SIP VECTEUR 512#
PAGE
<
<
< O P T I O N S D ' A S S E M B L A G E :
<
<
XOPT01: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'XOPT01'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
XOPT01:: VAL EXIST < TRACE GRAPHIQUE, ET VERIFICATIONS CROI-
< SEES DES EQUATIONS CALCULEES...
XEIF%: VAL ENDIF
PAGE
<
<
< B A S D E L A M E M O I R E :
<
<
ZERO: EQU $
DZS PEPROG-D+Z
<
< POINT D'ENTREE :
<
ENTRY: EQU $
LRM A,K
WORD DEBUT < POINT D'ENTREE DU PROGRAMME,
WORD STACK-DEPILE < INITIALISATION DE LA PILE.
PSR A
RSR < ON EFFECTUE AINSI UN 'GOTO' 'DEBUT'...
PAGE
<
<
< M E S S A G E S :
<
<
TABLE
<
< BUFFER BANDE :
<
LBUFMT: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'LBUFMT'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
LBUFMT:: VAL 4096
XEIF%: VAL ENDIF
BUFMT: EQU $
DZS LBUFMT/NOCMO
PAGE
<
<
< D E F I N I T I O N D U F O R M A T
< D E S N O M B R E S C O M P L E X E S :
<
<
DSEC
NCA1: EQU $ < NOMBRE COMPLEXE 'ARGUMENT 1' :
NCA1R: FLOAT <NILK<NILK<NILK < PARTIE REELLE,
NCA1I: FLOAT <NILK<NILK<NILK < PARTIE IMAGINAIRE.
DCOMP:: VAL $-NCA1 < LONGUEUR D'UN NOMBRE COMPLEXE.
DSEC
NCA2: EQU $ < NOMBRE COMPLEXE 'ARGUMENT 2' :
NCA2R: FLOAT <NILK<NILK<NILK < PARTIE REELLE,
NCA2I: FLOAT <NILK<NILK<NILK < PARTIE IMAGINAIRE.
IF $-NCA2-DCOMP,,XEIF%,
IF ATTENTION : 'NCA2' EST MAUVAISE !!!
XEIF%: VAL ENDIF
DSEC
NCR: EQU $ < NOMBRE COMPLEXE 'RESULTAT :
NCRR: FLOAT <NILK<NILK<NILK < PARTIE REELLE,
NCRI: FLOAT <NILK<NILK<NILK < PARTIE IMAGINAIRE.
IF $-NCR-DCOMP,,XEIF%,
IF ATTENTION : 'NCR' EST MAUVAISE !!!
XEIF%: VAL ENDIF
<
<
< C O M M O N :
<
<
COMMON
COM: EQU $
<
< MOT DESTINE AU BLOC FLOTTANT :
<
COMFLO: WORD NILK < MOT "BIDON" DESTINE AU BLOC FLOTTANT
< POUR QU'IL Y FIT SES MERDES...
ATSFLO: WORD TSFLO < POUR TESTER DE TEMPS EN TEMPS 'COMFLO'...
<
< INDICATEURS DE CONTROLE :
<
MODUL: FLOAT <NILK<NILK<NILK < SEUIL DE DEFINITION DE LA FRONTIERE
< DE L'ENSEMBLE DE MANDELBROT.
IERASE: WORD NEXIST < EFFACER ('EXIST'), OU NON ('NEXIST')
< L'ECRAN 512...
IVIDEO: WORD NEXIST < ECRIRE ('EXIST') L'IMAGE COURANTE SUR LE
< DISQUE VIDEO OU PAS ('NEXIST').
IQUIT: WORD NEXIST < S'ARRETER ('EXIST') OU PAS ('NEXIST')
< APRES CHAQUE IMAGE (POINT D'ARRET).
PASIX: WORD W < PAS DE BALAYAGE DE L'AXE REEL,
PASIY: WORD W < PAS DE BALAYAGE DE L'AXE IMAGINAIRE.
SIZEX: WORD W < LARGEUR DE MARQUAGE DES POINTS,
SIZEY: WORD W < HAUTEUR DE MARQUAGE DES POINTS.
NIMAGE: WORD NILK < NOMBRE D'IMAGES A GENERER PAR INTER-
< POLATION ENTRE LA FENETRE 'DEPART' ET
< LA FENETRE 'ARRIVEE'.
IBANDE: WORD NEXIST < CHOIX DU MODE D'"ENTREE" DE LA FONCTION :
< 'NEXIST' : ELLE EST CALCULEE A PARTIR
< DE LA FORMULE ALEATOIRE RECUR-
< SIVE,
< 'EXIST' : ELLE EST LUE SUR BANDE, ET
< ALORS ON A INTERET A FAIRE :
< (ALPHA)=0...
ABLOC0: WORD K < NUMERO DU PREMIER BLOC A LIRE SUR LA
< BANDE MAGNETIQUE.
< NOTA : SI (ABLOC0)<0 : ON TRAVAILLE EN
< SEQUENTIEL STRICT, SANS JAMAIS RE-
< INITIALISER L'ADRESSE COURANTE
< SUR LA BANDE...
LAMBDR: FLOAT <NILK<NILK<NILK < PARTIE REELLE DE 'LAMBDA',
LAMBDI: FLOAT <NILK<NILK<NILK < PARTIE IMAGINAIRE DE 'LAMBDA'.
F0R: FLOAT <NILK<NILK<NILK < POUR INITIALISER LE CUMUL
F0I: FLOAT <NILK<NILK<NILK < DE L'ITERATION Z <-- Z**2+C.
TROISR: FLOAT 3.0 < NOMBRE COMPLEXE
TROISI: FLOAT 0.0 < (3.0,0.0).
DEUXR: FLOAT 2.0 < NOMBRE COMPLEXE
DEUXI: FLOAT 0.0 < (2.0,0.0).
ITRACE: WORD NEXIST < INDICATEUR DU TRACE DE LA "TRAJECTOIRE"
< DE LA TRANSFORMATION :
< 'NEXIST' : PAS DE TRACE,
< 'EXIST' : TRACE.
IQUITR: WORD NEXIST < INDICATEUR D'ARRET APRES CHAQUE TRACE
< D'UNE TRAJECTOIRE :
< 'NEXIST' : PAS D'ARRET,
< 'EXIST' : ARRET.
NTRACE: WORD XXNOIR < NIVEAU INITIAL MOINS UN DU TRACE DE LA
< "TRAJECTOIRE" DE LA TRANSFORMATION,
PTRACE: WORD I < PAS D'INCREMENTATION DES NIVEAUX DE
< TRACE (SI (PTRACE)=0, ON TRACE TOUT AVEC
< LE NIVEAU 'NTRACE').
IJULIA: WORD EXIST < INDIQUE LE TYPE DE L'ENSEMBLE QUE L'ON
< CONSTRUIT :
< 'NEXIST' : ENSEMBLE DE MANDELBROT, SOIT :
< INIT : Z <-- CTTE,
< ITER : Z <-- Z**2+COURANT.
< 'EXIST' : ENSEMBLE DE JULIA, SOIT :
< INIT : Z <-- COURANT,
< ITER : Z <-- Z**2+CTTE.
< OU 'CTTE' ET 'COURANT' DESIGNENT RESPEC-
< TIVEMENT UNE CONSTANTE COMPLEXE, ET LE
< NOMBRE COMPLEXE COURANT.
IRAYON: WORD NEXIST < DOIT-ON ('EXIST') OU PAS ('NEXIST')
< VISUALISER LES "RAYONS", C'EST-A-DIRE
< L'ARGUMENT TETA=ARCTG(ZI/ZR) DU NOMBRE
< COMPLEXE (ZR,ZI) OBTENU EN FIN D'ITE-
< RATION.
<
< FENETRE DE DEPART :
<
PR0D: FLOAT <NILK<NILK<NILK < LIMITE REELLE INFERIEURE,
PR1D: FLOAT <NILK<NILK<NILK < LIMITE REELLE SUPERIEURE.
PI0D: FLOAT <NILK<NILK<NILK < LIMITE IMAGINAIRE INFERIEURE,
PI1D: FLOAT <NILK<NILK<NILK < LIMITE IMAGINAIRE SUPERIEURE.
<
< FENETRE D'ARRIVEE :
<
PR0A: FLOAT <NILK<NILK<NILK < LIMITE REELLE INFERIEURE,
PR1A: FLOAT <NILK<NILK<NILK < LIMITE REELLE SUPERIEURE.
PI0A: FLOAT <NILK<NILK<NILK < LIMITE IMAGINAIRE INFERIEURE,
PI1A: FLOAT <NILK<NILK<NILK < LIMITE IMAGINAIRE SUPERIEURE.
<
< FENETRE COURANTE :
<
PR0: FLOAT <NILK<NILK<NILK < LIMITE REELLE INFERIEURE,
PR1: FLOAT <NILK<NILK<NILK < LIMITE REELLE SUPERIEURE.
PI0: FLOAT <NILK<NILK<NILK < LIMITE IMAGINAIRE INFERIEURE,
PI1: FLOAT <NILK<NILK<NILK < LIMITE IMAGINAIRE SUPERIEURE.
<
< DONNEES DE L'INTERPOLATION NON LINEAIRE :
<
F3: FLOAT 3.0
F5: FLOAT 5.0
F6: FLOAT 6.0
F8: FLOAT 8.0
COEF: FLOAT <NILK<NILK<NILK < POIDS DE L'INTERPOLATION BARYCENTRIQUE.
COEFR0: EQU COEF < RAPPORT DE PASSAGE DU PAS REEL INFERIEUR
< P(I) AU PAS P(I+1).
COEFR1: EQU COEF < RAPPORT DE PASSAGE DU PAS REEL SUPERIEUR
< P(I) AU PAS P(I+1).
COEFI0: EQU COEF < RAPPORT DE PASSAGE DU PAS IMAGINAIRE INFE
< RIEUR P(I) AU PAS P(I+1).
COEFI1: EQU COEF < RAPPORT DE PASSAGE DU PAS IMAGINAIRE SUPE
< RIEUR P(I) AU PAS P(I+1).
EPSI: FLOAT <NILK<NILK<NILK < POUR CALCULER 'COEF'...
<
< RELAIS DIVERS :
<
ADEB9: WORD DEBUT9
AINIT1: WORD INIT01
AGEN01: WORD GEN01
AGEN02: WORD GEN02
<
< CONSTANTES FLOTTANTES DE BASE :
<
F0: FLOAT <K<K<K < REMISE A ZERO FLOTTANTE...
F1: FLOAT <W<K<K < L'UNITE EN FLOTTANT...
<
< DONNEES DIVERSES :
<
NIVOC: WORD NILK < NIVEAU COURANT DE MARQUAGE.
XXXLOC: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
<
< DEMANDE DE TEMPORISATION
< APRES EFFACEMENT :
<
TEMPO: BYTE NVPSER;FONDOR
WORD NILK < INUTILE...
WORD XXXMOY < 2 PETITES SECONDES...
XXXLOC: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXVEC: VAL XXVEC2 < DEFINITION DES DONNEES DU VECTEUR 512...
CALL #SIP VECTEUR 512#
APOINT: WORD POINT < SOUS-PROGRAMME DE MARQUAGE D'UN POINT
< DE COORDONNEES (X), DONT LE NIVEAU EST
< CALCULE VIA LA TABLE 'LNIVO'.
ALNIVO: WORD LNIVO,X < TABLE DE CORRESPONDANCE DES NIVEAUX POUR
< LE SOUS-PROGRAMME 'POINT'.
<
< ACCES AUX REGISTRES DE CONTROLE :
<
ACTRL1: WORD RCTRL1
ACTRL2: WORD RCTRL2
<
< DONNEES DES OPERATIONS
< SUR LES NOMBRES COMPLEXES :
<
ZW1: DZS DCOMP < NOMBRE COMPLEXE DE MANOEUVRE 1,
ZW2: DZS DCOMP < NOMBRE COMPLEXE DE MANOEUVRE 2,
ZW3: DZS DCOMP < NOMBRE COMPLEXE DE MANOEUVRE 3,
ZW4: DZS DCOMP < NOMBRE COMPLEXE DE MANOEUVRE 4,
ZW5: DZS DCOMP < NOMBRE COMPLEXE DE MANOEUVRE 5,
ZW6: DZS DCOMP < NOMBRE COMPLEXE DE MANOEUVRE 6.
AZAD: WORD ZAD < ADDITION COMPLEXE,
AZSB: WORD ZSB < SOUSTRACTION COMPLEXE,
AZMP: WORD ZMP < MULTIPLICATION COMPLEXE.
<
< POUR LE CALCUL DU LOGARITHME :
<
POLLO1: FLOAT <NILK<NILK<NILK < VARAIBLE DE MANOEUVRE...
POLLO2: FLOAT <NILK<NILK<NILK
POLLO3: FLOAT <NILK<NILK<NILK
POLLO4: FLOAT 0.7071067 < RACINE(2)/2.
POLLO5: FLOAT 1.2920088 < COEFFICIENTS
POLLO6: FLOAT 2.6398577 < DU
POLLO7: FLOAT 1.656763 < DEVELOPPEMENT.
POLLO8: EQU F05 < CONSTANTE 1/2.
POLLO9: FLOAT 0.6931472 < LN(2).
<
< POUR LE CALCUL DE L'EXPONENTIELLE :
<
POLEX1: EQU POLLO1 < VARIABLE DE MANOEUVRE...
POLEX2: EQU POLLO2
POLEX3: EQU POLLO3
POLEX4: FLOAT 1.442695 < LOG2(E).
POLEX5: WORD NILK < RELEVE DE L'EXPOSANT
POLEX6: EQU F1 < 1.0
POLEX7: FLOAT 2 < 2.
POLEX8: FLOAT 87.417488 < COEFFICIENTS
POLEX9: FLOAT 0.0346573 < DU
POLEY0: FLOAT -17830.91 < DEVELOPPEMENT.
POLEY1: FLOAT 9.9545955
SIGNE: WORD NILK < POUR DETERMINER LE SIGNE DE X**Y...
<
< POUR CALCULER
< LES EXPOSANTS :
<
XXMASK:: VAL MOCG
XX7F:: VAL '7F < MAXIMUM POSITIF,
XX80:: VAL -'80 < MIMIMUM NEGATIF.
<
< CALCUL D'UNE PUISSANCE QUELCONQUE :
<
ARAK: WORD RAK < CALCUL DE LA PUISSANCE P/(2**Q) D'UN
< NOMBRE...
EXPOP: FLOAT <NILK<NILK<NILK < EXPOSANT REEL.
PAGE
<
<
< L O C A L :
<
<
LOCAL
LOC: EQU $
<
< DONNEES D'ITERATION DE LA
< TRANSFORMATION COMPLEXE :
<
ZR: FLOAT <NILK<NILK<NILK < VALEUR COURANTE
ZI: FLOAT <NILK<NILK<NILK < DU CUMUL COMPLEXE.
CR: FLOAT <NILK<NILK<NILK < NOMBRE COMPLEXE
CI: FLOAT <NILK<NILK<NILK < COURANT 'C'.
SCR: FLOAT <NILK<NILK<NILK < ET SAVE
SCI: FLOAT <NILK<NILK<NILK < LE NOMBRE COURANT 'C'...
DELTAR: FLOAT <NILK<NILK<NILK < LARGEUR REELLE DE LA FENETRE,
DELTAI: FLOAT <NILK<NILK<NILK < LARGEUR IMAGINAIRE DE LA FENETRE.
FNC: FLOAT <XMAX+Z<K<K < LARGEUR DE L'ECRAN,
FNL: FLOAT <YMAX+Z<K<K < HAUTEUR DE L'ECRAN.
F2: FLOAT <W+W<K<K
<
< GESTION DU DISQUE VIDEO :
<
BUFVIW: BYTE "J";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIW*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUFVW:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIW: BYTE XWOR%2;FAVW < COMMANDE DE L'ECRITURE SUR LE DISQUE
< VIDEO...
WORD BUFVIW=FCTA*NOCMO
WORD LBUFVW
BUFVIR: DZS W < BUFFER DE LECTURE DES ACQUITTEMENTS.
LBUFVR:: VAL $-BUFVIR*NOCMO
DEMVIR: BYTE XWOR%2;FAVR < LECTURE DES ACQUITTEMENTS DU DISQUE.
WORD BUFVIR=FCTA*NOCMO
WORD LBUFVR
<
< GESTION DU DEROULEUR :
<
NVPMT:: VAL '0B < 'NVP' D'ACCES AU DEROULEUR DE BANDES.
DEMMT: BYTE NVPMT;XFMTWA < DEMANDE D'ECRITURE A ACCES DIRECT.
WORD BUFMT=FCTA*NOCMO
WORD LBUFMT
WORD NILK < ADRESSE DU BLOC COURANT.
DEMMTM: BYTE NVPMT;XFMTTM < DEMANDE D'ECRITURE D'UN 'TAPE-MARK'.
IBUFMT: WORD LBUFMT-Z+I < INDEX COURANT DU BUFFER 'MT',
ZBUFMT: WORD LBUFMT-Z+I < POUR LES TESTS "BUFFER PLEIN"...
ABUFMT: WORD BUFMT,X < ET RELAI D'ACCES...
<
< DONNEES D'ACCES AU CURSEUR :
<
CURSOR: BYTE "N";NILK < CARACTERE DE DEBLOCAGE DU
< CURSEUR (ERREUR A PRIORI).
CURSOY: WORD NILK < COORDONNEE 'Y' D'UN POINT,
CURSOX: WORD NILK < COORDONNEE 'X' D'UN POINT.
LCURSO:: VAL $-CURSOR*NOCMO < LONGUEUR DU BUFFER DE CURSEUR...
NLIN: EQU VECTNL < NBRE DE LIGNES/IMAGE-1.
C3: WORD 3 < POUR MULTIPLIER
C4: WORD 4 < PAR 4/3...
OG: BYTE NVPIN;FAVOG < OPEN GRAPHIQUE DE LA CONSOLE.
CU: BYTE NVPIN;FAVCU < MISE EN FONCTION DU CURSEUR GRAPHIQUE.
WORD K < (AMDEM)=0...
LCU: BYTE NVPIN;FAVRG < LECTURE CURSEUR GRAPHIQUE DE LA CONSOLE.
WORD CURSOR-ZERO*NOCMO
WORD LCURSO
CG: BYTE NVPIN;FAVCG < CLOSE GRAPHIQUE DE LA CONSOLE.
<
< SIMULATION D'UNE REDUCTION
< DE LA PRECISION DU CALCUL :
<
WMODUL: FLOAT <NILK<NILK<NILK < VALEUR DE 'MODUL' APRES REDUCTION
< EVENTUELLE DE LA PRECISION...
XREDUC: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'XREDUC'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
XREDUC:: VAL NEXIST < PAS DE REDUCTION DE PRECISION A PRIORI...
XEIF%: VAL ENDIF
IF XREDUC-EXIST,XEIF%9,,XEIF%9
AREDUC: WORD REDUC < SOUS-PROGRAMME DE SIMULATION...
REDUCA: WORD MMOT < MASQUE SUR LES 16 PREMIERS BITS,
REDUCB: WORD MMOT < MASQUE SUR LES 16 DERNIERS BITS.
XEIF%9: VAL ENDIF
<
< DONNEES DE CALCUL DE 'ARCTG' :
<
ATGT1: FLOAT <NILK<NILK<NILK < ZONE DE TRAVAIL NUMERO 1,
ATGT2: FLOAT <NILK<NILK<NILK < ZONE DE TRAVAIL NUMERO 2,
ATGT3: FLOAT <NILK<NILK<NILK < ZONE DE TRAVAIL NUMERO 3.
ATGSDX: WORD NILK < INDICATEUR "SIGNE DE X ARGUMENT":
< = 0 : POSITIF OU NUL;
< < 0 : NEGATIF.
ATGPSC: FLOAT 0.0548862 < TG(PI/12).
ATGPS2: FLOAT 1.5707963 < PI/2.
ATGPS3: FLOAT 1.0471975 < PI/3.
ATGPS6: FLOAT 0.5235988 < PI/6.
ATGUN: EQU F1
ATGR3: FLOAT 1.7320508 < RACINE(3).
ATGP1: FLOAT 0.6031058 < COEFFICIENTS
ATGP2: FLOAT 0.0516045 < (P1,P2,P3,P4)
ATGP3: FLOAT 0.5591371 < DU
ATGP4: FLOAT 1.4087812 < POLYNOME.
AARCTG: WORD ARCTG < SOUS-PROGRAMME DE CALCUL.
PI: FLOAT 3.1415927 < PI,
DEUXPI: FLOAT 6.2831853 < 2*PI.
F255: FLOAT <XXN255<K<K < POUR PASSER D'UN ANGLE (EN NOMBRE DE
< TOURS) A UN NIVEAU DE GRIS...
<
< CONSTANTES DE CALCUL DES SINUS ET COSINUS :
<
ASIN: WORD SIN < S/P DE CALCUL DU SINUS,
ACOS: WORD COS < ET DU COSINUS.
COS061: FLOAT <NILK<NILK<NILK < NOMBRE FLOTTANT,
COS062: FLOAT <NILK<NILK<NILK
COS063: WORD NILK < SIGNE.
PI3141: FLOAT 3.1415926 < PI,
PISUR2: FLOAT 1.5707963 < PI/2.
COS067: EQU PISUR2 < COEFFICIENTS DU POLYNOME :
COS068: WORD 'AD00;'5110
COS069: WORD '51FD;'9A2C
COS070: WORD 'B3F9;'6CCE
COS071: WORD '4FF4;'6BDD
PAGE
<
<
< T A B L E D E T R A N S C O D A G E D E S N I V E A U X :
<
<
< ARGUMENTS D'ASSEMBLAGE :
< ND=DIVISEUR DES NIVEAUX DE 'LNIVO' (0 OU 2),
< NI=TRANSLATION DES NIVEAUX DE 'LNIVO' (0 OU 128)...
<
<
NI: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'NI'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
NI:: VAL XXNOIR < LE NIVEAU INITIAL SERA LE NIVEAU NOIR.
XEIF%: VAL ENDIF
ND: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'ND'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
ND:: VAL W < PAS DE DIVISEUR DES NIVEAUX...
XEIF%: VAL ENDIF
LNIVO: EQU $
NTRN
XWOR%1: VAL NIV256+NOCMO-E/NOCMO
XWOR%2: VAL NIV256/NOCMO(K=FCREST
TRN
XWOR%3: VAL NIV256+XWOR%2
< INCREMENT DES OCTETS GAUCHES,
XWOR%4: VAL XWOR%3+NOCMO-Z
< INCREMENT DES OCTETS DROITS.
NTRN
<*******************************************************************************
DO XWOR%1
BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3/ND+NI;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4/ND+NI
XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT,
<*******************************************************************************
TRN
IF XWOR%2-K,,XEIF%,
XWOR%5: VAL XWOR%5(MOCG < DANS LE CAS D'UNE TABLE DE LONGUEUR
< IMPAIRE, ON EFFACE LE DERNIER OCTET
< GENERE,
$EQU $-D < ON REVIENT D'UN MOT EN ARRIERE,
WORD XWOR%5 < ET ON REGENERE LE DERNIER MOT...
XEIF%: VAL ENDIF
NLS
DO XC512
FLOAT <NILK<NILK<NILK < LIGNE PRECEDENTE.
LST
PAGE
<
<
< P I L E D E T R A V A I L :
<
<
STACK: EQU $
DZS 64
PROG
XXXVEC: VAL XXVEC3 < DEFINITION DES PROGRAMMES VECTEUR 512...
CALL #SIP VECTEUR 512#
PAGE
<
<
< M A R Q U A G E D ' U N P O I N T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME MARQUE
< LE POINT ARGUMENT (X,Y) AVEC
< COMME NIVEAU, LE NIVEAU ARGU-
< MENT (A) TRANSCODE VIA LA TA-
< BLE 'LNIVO', CE QUI PERMET PAR
< EXEMPLE LA SUPERPOSITION DE
< PLUSIEURS IMAGES, EN FAISANT
< QUE LEURS TABLES 'LNIVO' SOIENT
< COMPLEMENTAIRES...
<
<
< ARGUMENTS :
< (A)=NIVEAU,
< (X,Y)=COORDONNEES DU POINT.
<
<
< RESULTAT :
< (A)=NIVEAU TRANSCODE.
<
<
POINT: EQU $
<
< TRANSCODAGE DU NIVEAU :
<
PSR X < SAUVEGARDE DE LA COORDONNEE 'X'...
LR A,X < (X)=NIVEAU ARGUMENT,
LBY &ALNIVO < (A)=NIVEAU TRANSCODE,
PLR X < RESTAURE :
< (X)=COORDONNEE 'X'.
<
< MARQUAGE DU POINT :
<
BSR ASTORP < MARQUAGE : (X,Y) <-- (A)...
<
< ET RETOUR :
<
RSR
PAGE
<
<
< T E S T P E R I O D I Q U E D E ' C O M F L O ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST
< APPELE DERRIERE CHAQUE
< 'FDV' EXPLICITE AINSI
< QU'APRES LES APPELS DE
< 'RAC' ET 'CRAMR'...
<
<
TSFLO: EQU $
PSR A
LA COMFLO < TEST DE 'COMFLO' PAR UN 'LA' AFIN DE NE
< PAS MODIFIER LES CODES (CARY & CO)...
JAE TSFLO1 < OK...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
< ON A :
< (A)=INDICATEURS FLOTTANTS...
< BIT 0 : UNDERFLOW,
< BIT 1 : OVERFLOW,
< BIT 2 : DIVISION PAR ZERO,
< BIT 3 : 'FIX' IMPOSSIBLE.
STZ COMFLO < PUIS RAZ, CAR CES INDICATEURS SONT
< REMANENTS...
TSFLO1: EQU $
PLR A
RSR
XXXPRO: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXPRO: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
PAGE
<
<
< O P E R A T I O N S S U R L E S N O M B R E S
< C O M P L E X E S :
<
<
< FONCTION :
< CES MODULES REALISENT LES OPERATIONS
< DE BASE (+,-,*) SUR LES NOMBRES COMPLEXES
< DE TELLE FACON QUE LE 'RESULTAT' PUISSE
< ETRE L'UN DES 2 'ARGUMENTS'.
<
<
< ARGUMENTS :
< (A)=ADRESSE DE 'ARGUMENT 1',
< (B)=ADRESSE DE 'ARGUMENT 2',
< (Y)=ADRESSE DE 'RESULTAT'.
<
<
USE C,NCA1
USE L,NCA2
USE W,NCR
<
<
< A D D I T I O N :
<
<
ZAD: EQU $
PSR A,B
PSR C,L,W < SAUVEGARDE DES BASES CAR ON VA LES
< UTILISER COMME POINTEURS.
LR A,C < 'ARGUMENT 1',
LR B,L < 'ARGUMENT 2',
LR Y,W < 'RESULTAT'.
#/FLD# NCA1R
FAD NCA2R
PSR A,B < SAVE LA PARTIE REELLE 'RESULTAT'...
#/FLD# NCA1I
FAD NCA2I
#/FST# NCRI < PARTIE IMAGINAIRE 'RESULTAT'.
PLR A,B
#/FST# NCRR < PARTIE REELLE 'RESULTAT'.
PLR C,L,W < RESTAURATIONS...
PLR A,B
RSR < ET RETOUR...
<
<
< S O U S T R A C T I O N :
<
<
ZSB: EQU $
PSR A,B
PSR C,L,W < SAUVEGARDE DES BASES CAR ON VA LES
< UTILISER COMME POINTEURS.
LR A,C < 'ARGUMENT 1',
LR B,L < 'ARGUMENT 2',
LR Y,W < 'RESULTAT'.
#/FLD# NCA1R
FSB NCA2R
PSR A,B < SAVE LA PARTIE REELLE 'RESULTAT'...
#/FLD# NCA1I
FSB NCA2I
#/FST# NCRI < PARTIE IMAGINAIRE 'RESULTAT'.
PLR A,B
#/FST# NCRR < PARTIE REELLE 'RESULTAT'.
PLR C,L,W < RESTAURATIONS...
PLR A,B
RSR < ET RETOUR...
<
<
< M U L T I P L I C A T I O N :
<
<
ZMP: EQU $
PSR A,B
PSR C,L,W < SAUVEGARDE DES BASES CAR ON VA LES
< UTILISER COMME POINTEURS.
LR A,C < 'ARGUMENT 1',
LR B,L < 'ARGUMENT 2',
LR Y,W < 'RESULTAT'.
#/FLD# NCA1I
FMP NCA2I
PSR A,B
#/FLD# NCA1R
FMP NCA2R
XR C,K
FSB -DFLOT+DEPILE,C
XR C,K
ADRI -DFLOT,K
PSR A,B < SAVE LA PARTIE REELLE 'RESULTAT'...
#/FLD# NCA1I
FMP NCA2R
PSR A,B
#/FLD# NCA2I
FMP NCA1R
XR C,K
FAD -DFLOT+DEPILE,C
XR C,K
ADRI -DFLOT,K
#/FST# NCRI < PARTIE IMAGINAIRE 'RESULTAT',
PLR A,B
#/FST# NCRR < PARTIE REELLE 'RESULTAT'.
PLR C,L,W < RESTURATIONS...
PLR A,B
RSR < ET RETOUR...
USE L
USE C
PAGE
<
<
< C A L C U L S I N U S E T C O S I N U S :
<
<
< ARGUMENT :
< A,B = ANGLE EN RADIANS,
<
<
< RESULTAT :
< A,B = LIGNE TRIGONOMETRIQUE DEMANDEE.
<
<
COS: EQU $ < ENTRY 'COSINUS' :
FSB PISUR2 < A,B = TETA-PI/2,
BSR AFNEG < A,B = PI/2-TETA.
SIN: EQU $ < ENTRY 'SINUS' :
FST COS061 < SAVE TEMPORAIRE DE L'ANGLE.
STZ COS063
JAGE COS072
BSR AFNEG
FST COS061
IC COS063
COS072: EQU $
FDV DEUXPI
BSR AFIX
BSR AFLT
FMP DEUXPI
FSB COS061
BSR AFNEG
FCAM PI3141
JL COS073
FSB PI3141
IC COS063
COS073: EQU $
FCAM PISUR2
JL COS074
FSB PI3141
BSR AFNEG
COS074: EQU $
FDV PISUR2
FST COS061
FMP COS061
FST COS062
FMP COS071
FAD COS070
FMP COS062
FAD COS069
FMP COS062
FAD COS068
FMP COS062
FAD COS067
FMP COS061
DC COS063
JNE COS075
BSR AFNEG
COS075: EQU $
RSR
PAGE
<
<
< C A L C U L D ' U N E P U I S S A N C E
< Q U E L C O N Q U E R E E L L E ' P ' :
<
<
< ARGUMENT :
< (A,B)=NOMBRE 'N' ARGUMENT,
<
<
< RESULTAT :
< (A,B)='N' A LA PUISSANCE P.
<
<
RAK: EQU $
PSR Y
<
<
< L O G N E P E R I E N :
<
<
LOGN: EQU $
STZ SIGNE < =0 : SIGNE "+" A PRIORI...
FCAZ
JGE LOGN1 < POSITIF...
IC SIGNE < =1 : SIGNE "-"...
LOGN1: EQU $
LR A,Y
FABS
ANDI XXMASK
#/FST# POLLO3
FAD POLLO4
#/FST# POLLO2
LR Y,A
SWBR A
SARS XXMASK=K
FLT
#/FST# POLLO1
#/FLD# POLLO3
FSB POLLO4
FDV POLLO2
#/FST# POLLO3
FMP POLLO3
FNEG
FAD POLLO7
#/FST# POLLO2
#/FLD# POLLO6
FDV POLLO2
FAD POLLO5
FMP POLLO3
FSB POLLO8
FAD POLLO1
FMP POLLO9
<
<
< G E S T I O N D U S I G N E D E L ' E X P O S A N T :
<
<
PSR A,B < SAVE LE 'LOG'...
#/FLD# EXPOP
FABS
BSR AROND < ON PREND LA PARTIE ENTIERE (PAR EXCES
< OU PAR DEFAUT) DE LA VALEUR ABSOLUE DE
< L'EXPOSANT...
TBT NBITMO-B < QUELLE EST SA PARITE ???
JC RAK1 < IMPAIRE, 'SIGNE' RESTE TEL QUEL...
STZ SIGNE < PAIRE : ON FORCE "+" (SIGNE INCHANGE)...
RAK1: EQU $
PLR A,B < RESTAURATION DU LOG,
FMP EXPOP < ET ON CALCULE P*LOG...
<
<
< E X P O N E N T I E L L E :
<
<
EXP: EQU $
FMP POLEX4
#/FST# POLEX3
FIX
STA POLEX5
FLT
FCAM POLEX3
JNV EXPON3
#/FLD# POLEX6
#/FST# POLEX3
JMP EXPON5
EXPON3: EQU $
CPZ POLEX3
JGE EXPON4
DC POLEX5
LA POLEX5
FLT
EXPON4: EQU $
FSB POLEX3
FNEG
#/FST# POLEX2
FMP POLEX2
#/FST# POLEX1
FAD POLEX8
#/FST# POLEX3
#/FLD# POLEY0
FDV POLEX3
FAD POLEX1
FMP POLEX9
FAD POLEY1
FSB POLEX2
#/FST# POLEX3
#/FLD# POLEX7
FMP POLEX2
FDV POLEX3
FAD POLEX6
#/FST# POLEX3
EXPON5: EQU $
SWBR A
SARS XXMASK=K
AD POLEX5
CPI XX7F
JG $ < E R R E U R P R O G R A M M E ...
CPI XX80
JGE EXPON6
#/FLD# F0 < ON PREND LE MINIMUM...
JMP EXPON7
EXPON6: EQU $
XWOR%1: VAL XXMASK=K
XWOR%1: VAL -XWOR%1
ANDI XXMASK>XWOR%1
STA POLEX5
LA POLEX3
ANDI XXMASK
AD POLEX5
EXPON7: EQU $
CPZ SIGNE < PRISE EN COMPTE DU SIGNE SIMULE :
JE EXP1 < POSITIF, ON LAISSE LE RESULTAT TEL QUEL..
FNEG < NEGATIF, ON INVERSE...
EXP1: EQU $
BSR ATSFLO
PLR Y
RSR
PAGE
<
<
< C A L C U L D E L A F O N C T I O N ' A R C T G ' :
<
<
< ARGUMENT:
< (A,B)=VALEUR ARGUMENT.
<
<
< RESULTAT:
< (A,B)='ARCTG' DE L'ARGUMENT EN RADIANS.
<
<
ARCTG: EQU $
<
< SAUVEGARDES ET INITIALISATIONS.
<
PSR X,L
STZ ATGSDX < ARGUMENT 'X' POSITIF OU NUL A PRIORI.
FCAZ
JGE ARCTG1
DC ATGSDX < ARGUMENT 'X' NEGATIF.
ARCTG1: EQU $
FABS < U = ABS(X).
FCAM ATGUN
JGE ARCTG2
<
< U < 1 : J RECOIT 0.
<
LXI K
JMP ARCTG3
ARCTG2: EQU $
<
< U >= 1 : J RECOIT 2 ET U RECOIT 1/U.
<
LXI W+W < J = 2.
FST ATGT1
FLD ATGUN
FDV ATGT1 < U = 1/U.
ARCTG3: EQU $
FCAM ATGPSC < COMPARER U A TG(PI/12).
JG ARCTG4
<
< U <= TG(PI/12) : J RECOIT J+2.
<
ADRI I+I,X < J = J + 2.
JMP ARCTG5
ARCTG4: EQU $
<
< U > TG(PI/12) : J RECOIT J+1 ET
< U RECOIT (U * RACINE(3) - 1) / (RACINE(3) + U).
<
ADRI I,X < J = J + 1.
FST ATGT1
FMP ATGR3
FSB ATGUN
PSR A,B
FLD ATGR3
FAD ATGT1
FST ATGT1
PLR A,B
FDV ATGT1 < U=(U*RACINE(3)-1)/(RACINE(3)+U).
ARCTG5: EQU $
<
< FORMER Y = U * P(U ** 2) LES COEFFICIENTS DU POLYNOME ETANT ATGP1, ATGP2
< ATGP3 ET ATGP4. ON CALCULE :
< Y = U * (P1 - P2 * U ** 2 + (P3 / (P4 + U ** 2)).
<
FST ATGT1 < TRAV1 = U.
FMP ATGT1
FST ATGT3 < TRAV3 = U ** 2.
FAD ATGP4
FST ATGT2
FLD ATGP3
FDV ATGT2
FAD ATGP1
PSR A,B
FLD ATGP2
FMP ATGT3
FST ATGT3
PLR A,B
FSB ATGT3 < Y = P(U ** 2).
FMP ATGT1 < Y = U * P( U ** 2).
FST ATGT1 < TRAV1 = U * P (U ** 2).
<
< BRANCHEMENT SELON VALEUR DE J (REGISTRE 'X').
<
ADRI -I-I,X
CPZR X
JE ARCTG6
JL ARCTG7
ADRI -I,X
CPZR X
JE ARCTG8
<
< FAIRE Y = PI / 2 - Y.
<
FLD ATGPS2
JMP ARCTG9
ARCTG8: EQU $
<
< FAIRE Y = PI / 3 - Y.
<
FLD ATGPS3
ARCTG9: EQU $
FSB ATGT1 < - Y.
JMP ARCTG6
ARCTG7: EQU $
<
< FAIRE Y = PI / 6 + Y.
<
FAD ATGPS6
ARCTG6: EQU $
<
< AFFECTER A Y LE SIGNE DU X ARGUMENT.
<
CPZ ATGSDX < SIGNE DU X ARGUMENT.
JL ARCTGA
<
< X ARGUMENT POSITIF OU NUL, IL FAUT QUE Y LE SOIT.
<
FCAZ
JGE ARCTGB
FNEG
JMP ARCTGB
ARCTGA: EQU $
<
< X ARGUMENT NEGATIF, IL FAUT QUE Y LE SOIT.
<
FCAZ
JL ARCTGB
FNEG
ARCTGB: EQU $
<
< RESTAURATIONS ET FIN...
<
PLR X,L
RSR
PAGE
IF XREDUC-EXIST,XEIF%9,,XEIF%9
<
<
< S I M U L A T I O N D ' U N E P R E C I S I O N
< D E C A L C U L I N F E R I E U R E :
<
<
< ARGUMENT :
< (A,B)=NOMBRE FLOTTANT SUR 32 BITS,
< (REDUCA,REDUCB)=MASQUE SUR 32 BITS DES 32 BITS DE (A,B)
< A CONSERVER.
<
<
< RESULTAT :
< (A,B)=NOMBRE FLOTTANT EN PRECISION REDUITE.
<
<
REDUC: EQU $
AND REDUCA < REDUCTION DES 16 PREMIERS BITS,
XR A,B
AND REDUCB < REDUCTION DES 16 DERNIERS BITS.
XR A,B
RSR
XEIF%9: VAL ENDIF
PAGE
<
<
< P O I N T D ' E N T R E E :
<
<
DEBUT: EQU $
<
< INITIALISATION DES REGISTRES :
<
LRM C,L,K
WORD COM+DEPBAS < POSITIONNEMENT DE 'C',
WORD LOC+DEPBAS < DE 'L',
WORD STACK-DEPILE < ET DE 'K'.
<
< CONNEXION A LA 'CDA' :
<
CPZ IBANDE < GENERE-T'ON UNE BANDE ???
JNE GEN51 < OUI, PAS DE CONNEXION 'CDAJ'...
LAI PAGER
BSR AGPCDA < AFIN D'ATTEINDRE LA MEMOIRE DU '68000'
< ET LA MEMOIRE 'SOLAR' QUI LA PRECEDE
< AFIN D'Y METTRE 'BUF'...
GEN51: EQU $
<
<
< E N T R Y D E R E B O U C L A G E :
<
<
DEBUT4: EQU $
DEBUT9: EQU $
<
< MODIFICATION A PRIORI DU 'PRESC' :
<
LRM A
WORD DEBUT5 < POUR 'XXXPRE'...
ACTD XXXPRE < ON CHANGE ALORS SYSTEMATIQUEMENT APRES
< PASSAGE ICI LE 'PRESC' DU PROGRAMME, AFIN
< DE REVENIR SUR LA VISUALISATION APRES
< CHAQUE ALT-MODE (VIA 'DEBUT5'...).
<
< INITIALISATION A PRIORI
< DU TRACE DES "TRAJECTOIRES" :
<
LRM A,B,X,Y
WORD CORBT?BANTI=FMASK(K=FCINST
WORD MMOT
WORD K
WORD COSBT?VELODD=FMASK(K?VECTSB=FCINST
STA VECANT < PAS D'ANTI-ALIASING,
STB VEPOIN < PAS DE POINTILLE,
STX VEDECA < PAS DE DECALAGE DES NIVEAUX,
STY VECTRS < MODE 'SBT' EN LOGIQUE BINAIRE.
<
< PREPARATION DE LA VALEUR
< DE SEUIL DU MODULE DES
< NOMBRES COMPLEXES :
<
#/FLD# MODUL
IF XREDUC-EXIST,XEIF%9,,XEIF%9
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
XEIF%9: VAL ENDIF
#/FST# WMODUL
<
< INITIALISATION DU GESTIONNAIRE
< DE BANDES MAGNETIQUES (A PRIORI) :
<
LA ABLOC0
JAL INIT20 < ON FERA DU SEQUENTIEL STRICT...
STA DEMMT+ARGESC < ADRESSE DU PREMIER BLOC A LIRE,
INIT20: EQU $
STZ IBUFMT < POUR FORCER LA PREMIERE LECTURE...
<
< CALCUL DES PAS D'INTERPOLATIONS :
<
< NOTONS 'D', 'C' ET 'A' RESPECTIVE-
< MENT UNE COORDONNEE DE 'DEPART',
< 'COURANTE' ET D''ARRIVEE'. NOTONS
< AUSSI 'K' LE RAPPORT DE PASSAGE DE
< L'IMAGE 'I' A L'IMAGE 'I+1'.
< ON CHOISIT UNE RELATION BARYCENTRI-
< QUE DU TYPE :
<
< C=K*C+(1-K)*A,
<
< SOIT :
<
< C=K*(C-A)+A,
<
< AVEC INITIALEMENT :
<
< C=D.
<
< CALCUL DE 'COEF' :
<
< ON PREND :
< COEF=EPSI**(1/(N-1)),
<
LA NIMAGE < (A)=NOMBRE D'IMAGES A GENERER...
CPI W
JLE INT01 < IL N'Y EN A QU'UNE SEULE...
ADRI -I,A < IL Y EN A PLUS D'UNE, LE NOMBRE DE PAS
< ET DONC LE NOMBRE D'IMAGES MOINS UNE...
FLT
#/FST# FWORK < ET SAVE...
#/FLD# F1 < 1,
FDV FWORK < 1/(N-1),
#/FST# EXPOP < ET SAVE...
#/FLD# EPSI < EPSI,
BSR ARAK < ELEVATION A LA PUISSANCE (EXPOP)...
#/FST# COEF < COEF=EPSI**(1/(N-1)).
INT01: EQU $
<
< INITIALISATION DE LA
< FENETRE COURANTE :
<
#/FLD# PR0D
#/FST# PR0 < LIMITE REELLE INFERIEURE,
#/FLD# PR1D
#/FST# PR1 < LIMITE REELLE SUPERIEURE.
#/FLD# PI0D
#/FST# PI0 < LIMITE IMAGINAIRE INFERIEURE,
#/FLD# PI1D
#/FST# PI1 < LIMITE IMAGINAIRE SUPERIEURE.
<
< CHARGEMENT DU NOMBRE D'IMAGES :
<
LX NIMAGE < (X)=NOMBRE D'IMAGES A GENERER.
<
<
< I N I T I A L I S A T I O N S :
<
<
INIT01: EQU $
PSR X < SAUVEGARDE DU NOMBRE D'IMAGES A
< GENERER...
<
< DEFINITION DE LA FENETRE
< D'OBSERVATION DE L'ENSEMBLE
< DE MANDELBROT :
<
#/FLD# PR1 < DROITE,
FSB PR0 < DROITE-GAUCHE,
FDV FNC < (DROITE-GAUCHE)/512,
#/FST# DELTAR < SOIT LA LARGEUR REELLE...
#/FLD# PI1 < HAUT,
FSB PI0 < HAUT-BAS,
FDV FNL < (HAUT-BAS)/512,
#/FST# DELTAI < SOIT LA HAUTEUR REELLE...
<
<
< G E N E R A T I O N D E L ' I M A G E :
<
<
GEN69: EQU $
CPZ IBANDE < GENERE-T'ON UNE BANDE ???
JNE GEN69N < OUI, PAS D'EFFACEMENT...
CPZ IERASE < FAUT-IL EFFACER ???
JE GEN69N < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
<
< EFFACEMENT DE L'ECRAN :
<
XWOR%1: VAL NIV256=K
IF BIT>XWOR%1-NIV256,,XWOR%,
IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
IF LES PLANS EST ABSURDE !!!
XWOR%: VAL ENDIF
LAI NIV256-MASK)MOCD
STA MCDAJ
LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION...
BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS...
LAI ERASE
STA MCDAJ
LA ARCMD
BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
< TION DE TOUS LES REGISTRES...
LAD TEMPO
SVC < ET ON FAIT UN PETIT DODO...
LAI XCTRL1
STA MCDAJ
LA ACTRL1
BSR APWCDA < INITIALISATION DE 'CTRL1'.
LAI XCTRL2
STA MCDAJ
LA ACTRL2
BSR APWCDA < INITIALISATION DE 'CTRL2'.
<
< RECUPERATION DE L'IMAGE :
<
GEN69N: EQU $
LY VECTNL < (Y)=PARTIE IMAGINAIRE,
GEN01: EQU $
LX VECTNC < (X)=PARTIE REELLE.
GEN02: EQU $
PSR X,Y < SAUVEGARDE DE (REELLE,IMAGINAIRE)...
<
< INITIALISATION DE LA TRACE
< DES "TRAJECTOIRES" :
<
CPZ ITRACE < FAUT-IL TRACER LES "TRAJECTOIRES" ???
JE GEN60 < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
LR X,A < OUI :
SLLS XXDEDX
STA VECGX2 < INITIALISATION DU
LR Y,A
SLLS XXDEDY
STA VECGY2 < VECTEUR A TRACER.
LA NTRACE
STA VECTNI < ET DU NIVEAU INITIAL...
GEN60: EQU $
<
< PASSAGE DES COORDONNEES
< ECRAN (X,Y) AU NOMBRE
< COMPLEXE 'C' COURANT :
<
LR X,A < REELLE,
FLT
FMP DELTAR < MISE DANS LA FENETRE,
FAD PR0 < ET TRANSLATION,
#/FST# CR < SOIT LA PARTIE REELLE DE 'C',
#/FST# SCR < ET SAVE A CAUSE DE "JULIA"...
LR Y,A < IMAGINAIRE,
FLT
FMP DELTAI < MISE DANS LA FENETRE,
FAD PI0 < ET TRANSLATION,
#/FST# CI < SOIT LA PARTIE IMAGINAIRE DE 'C',
#/FST# SCI < ET SAVE A CAUSE DE "JULIA"...
<
< INITIALISATION DU CUMUL 'Z' :
<
#/FLD# F0R
NLS
IF XREDUC-EXIST,XEIF%9,,XEIF%9
LST
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
NLS
XEIF%9: VAL ENDIF
LST
#/FST# ZR
#/FLD# F0I
NLS
IF XREDUC-EXIST,XEIF%9,,XEIF%9
LST
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
NLS
XEIF%9: VAL ENDIF
LST
#/FST# ZI
CPZ IJULIA < QUEL EST L'ENSEMBLE A CONSTRUIRE ???
JE GEN70 < 'MANDELBROT' : LES INITIALISATIONS SONT
< DONC BONNES.
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST PRECEDENT EST IDIOT !!!
XEIF%: VAL ENDIF
<
< CAS DE L'ENSEMBLE DE 'JULIA', IL
< FAUT PERMUTER (CR,CI) ET (ZR,ZI) :
<
#/FLD# ZR < ZR,
PSR A,B
#/FLD# ZI < ZI,
PSR A,B
#/FLD# CR
FNEG
#/FST# ZR < ZR <-- -CR,
#/FLD# CI
FNEG
#/FST# ZI < ZI <-- -CI,
PLR A,B
#/FST# CI < CI <-- ANCIEN ZI,
PLR A,B
#/FST# CR < CR <-- ANCIEN ZR.
GEN70: EQU $
<
< ITERATION DE LA TRANSFORMATION
< Z <-- Z**3-3*(C**2)*Z+LAMBDA+2*(C**3) :
<
NIVCUR:: VAL XXN255 < NIVEAU DE MARQUAGE DU CURSEUR.
LIMITE:: VAL NIVCUR+Z-I < NOMBRE D'ITERATIONS MAXIMAL ACCEPTE.
< (LIMITE A CAUSE DU CURSEUR...)
LRM X
WORD LIMITE < (X)=NOMBRE D'ITERATIONS.
GEN03: EQU $
LRM A,B,Y
WORD ZR;ZR;ZW1
BSR AZMP < Z**2,
LRM A,B,Y
WORD ZR;ZW1;ZW1
BSR AZMP < Z**3.
LRM A,B,Y
WORD ZR;TROISR;ZW2
BSR AZMP < -3*Z,
LRM A,B,Y
WORD SCR;SCR;ZW3
BSR AZMP < C**2,
LRM A,B,Y
WORD ZW2;ZW3;ZW4
BSR AZMP < 3*Z*(C**2).
LRM A,B,Y
WORD ZW1;ZW4;ZW6
BSR AZSB < Z**3-3*Z*(C**2).
LRM A,B,Y
WORD SCR;ZW3;ZW1
BSR AZMP < C**3,
LRM A,B,Y
WORD DEUXR;ZW1;ZW1
BSR AZMP < 2*(C**3),
LRM A,B,Y
WORD LAMBDR;ZW1;ZW2
BSR AZAD < LAMBDA+2*(C**3).
LRM A,B,Y
WORD ZW6;ZW2;ZR
BSR AZAD < Z**3-3*Z*(C**2)+LAMBDA+2*(C**3).
#/FLD# ZR < ZR...
<
< TRACE EVENTUELLE DE LA "TRAJECTOIRE"
< DE LA TRANSFORMATION (ON MARQUE LE
< CHAINAGE (Z(N),(Z(N+1))) :
<
CPZ ITRACE < FAUT-IL TRACER LES "TRAJECTOIRES" ???
JE GEN61 < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
PSR A,B < SAVE 'ZR'.
LA VECTNI
AD PTRACE
STA VECTNI < NIVEAU DE TRACE DU VECTEUR COURANT.
LA VECGX2
LB VECGY2
STB VECGY1 < ET
STA VECGX1 < CHAINAGE DE L'ORIGINE...
#/FLD# ZR
FSB PR0
FDV DELTAR
FIX
SLLS XXDEDX
STA VECGX2 < GENERATION DE LA
#/FLD# ZI
FSB PI0
FDV DELTAI
FIX
SLLS XXDEDY
STA VECGY2 < NOUVELLE EXTREMITE...
BSR AVE512 < ET TRACE DE LA "TRAJECTOIRE"...
PLR A,B < RESTAURE 'ZR'...
GEN61: EQU $
<
< TEST DE CONVERGENCE :
<
FMP ZR < ZR**2,
NLS
IF XREDUC-EXIST,XEIF%9,,XEIF%9
LST
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
NLS
XEIF%9: VAL ENDIF
LST
#/FST# FWORK < ET SAVE...
#/FLD# ZI < ZI,
NLS
IF XREDUC-EXIST,XEIF%9,,XEIF%9
LST
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
NLS
XEIF%9: VAL ENDIF
LST
FMP ZI < ZI**2,
NLS
IF XREDUC-EXIST,XEIF%9,,XEIF%9
LST
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
NLS
XEIF%9: VAL ENDIF
LST
FAD FWORK < ZR**2+ZI**2, SOIT LE CARRE DU MODULE
NLS
IF XREDUC-EXIST,XEIF%9,,XEIF%9
LST
BSR AREDUC < SIMULATION D'UN MANQUE DE PRECISION
< DANS LES CALCULS...
NLS
XEIF%9: VAL ENDIF
LST
< DU NOMBRE COMPLEXE (ZR,ZI).
FCAM WMODUL < EST-ON DANS OU HORS DE L'ENSEMBLE ???
JGE GEN04 < ON VIENT D'EN SORTIR...
JDX GEN03 < A PRIORI ON Y RESTE, ON CONTINUE DONC
< L'ITERATION DE : Z <-- Z**2+C...
ADRI I,X < POUR RETOMBER SUR NOS PIEDS...
GEN04: EQU $
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
CPZ IRAYON < FAUT-IL TRACER LES RAYONS ???
< (NOTA : ON APPELLE "RAYON" LES ARGUMENTS
< TETA=ARCTG(ZI/ZR) DES NOMBRES COMPLEXES
< OBTENUS EN FIN D'ITERATION.
JE GEN80 < NON, LE NIVEAU DE MARQUAGE SERA LE NOMBRE
< D'ITERATIONS.
<
< OUI, LA COULEUR DE MARQUAGE
< SERA LE "RAYON" :
<
FCMZ ZR < LA TANGENTE NE SERAIT-ELLE PAS INFINIE ??
JNE GEN81 < NON...
#/FLD# ATGPS2 < OUI, L'ARGUMENT VAUT DONC +/- PI/2.
FCMZ ZI < "+" OU "-" ???
JGE GEN82 < +PI/2.
FNEG < -PI/2,
FAD DEUXPI < OU 3*PI/2...
JMP GEN82 < VERS LE CALCUL DU NIVEAU...
GEN81: EQU $
#/FLD# ZI < 'ZR' N'EST PAS NUL,
FDV ZR < ON CALCULE DONC LA TANGENTE DE L'ARGUMENT
FABS < AFIN DE CALCULER L'ARC-TANGENTE DANS
< LE SEGMENT (0,PI/2)...
BSR AARCTG < PUIS L'ARC-TANGENTE.
FCMZ ZR
JGE GEN83
FCMZ ZI
JGE GEN84
FAD PI < ZR<0 ET ZI<0 : PI+ARCTG...
JMP GEN89
GEN84: EQU $
FSB PI
FNEG < ZR<0 ET ZI>=0 : PI-ARCTG...
JMP GEN89
GEN83: EQU $
FCMZ ZI
JGE GEN85
FSB DEUXPI
FNEG < ZR>=0 ET ZI<0 : 2*PI-ARCTG...
JMP GEN89
GEN85: EQU $ < ZR>=0 ET ZI>=0 : ARCTG...
GEN89: EQU $
GEN82: EQU $
FDV DEUXPI < QUE L'ON PASSE DE 'RADIANS' EN NOMBRE
< DE TOURS,
FMP F255 < ET QUE L'ON CONVERTIT EN NIVEAU...
BSR AROND
JMP GEN86 < VERS SA MISE EN PLACE...
<
< MARQUAGE DES POINTS AVEC
< LE NOMBRE D'ITERATIONS :
<
GEN80: EQU $
IF Z-I,,XEIF%,
IF ATTENTION : CE QUI SUIT EST IDIOT !!!
XEIF%: VAL ENDIF
ADRI -Z,X < AFIN DE CALCULER UN NIVEAU DE GRIS...
LR X,A < (A)=NIVEAU DE GRIS DU POINT COURANT,
GEN86: EQU $
PLR X,Y < (X,Y)=POINT COURANT,
<
< MARQUAGE DU POINT (X,Y) :
<
PSR X,Y < ON LE SAUVE...
STA NIVOC < AINSI QUE LE NIVEAU COURANT...
LR X,B < (B)=COORDONNEE 'X'.
LX SIZEY < (X)=HAUTEUR DES POINTS.
GEN10: EQU $
PSR B,X
LX SIZEX < (X)=LARGEUR DES POINTS.
GEN11: EQU $
LR B,A < (A)=COORDONNEE 'X' ET VALIDATION :
JAL GEN12 < HORS-ECRAN...
CP VECTNC
JG GEN12 < HORS-ECRAN...
LR Y,A < (A)=COORDONNEE 'Y' ET VALIDATION :
JAL GEN12 < HORS-ECRAN...
CP VECTNL
JG GEN12 < HORS-ECRAN...
LA NIVOC < LE POINT COURANT EST DANS L'ECRAN :
< (A)=NIVEAU A MARQUER...
XR B,X
<
< CHOIX DU MODE DE GENERATION :
<
CPZ IBANDE < EN FAIT DOIT-ON ECRIRE UNE BANDE ???
JE GEN21 < NON...
<
< OUI, GENERATION D'UNE BANDE :
<
PSR A,X
LX IBUFMT < (X)=INDEX DE L'OCTET COURANT,
STBY &ABUFMT < (A)=OCTET COURANT...
ADRI I,X < ET PREPARATION DE
STX IBUFMT < L'ACCES SUIVANT...
<
< TEST DE L'ETAT DU BUFFER :
<
LR X,A < (A)=INDEX COURANT :
CP ZBUFMT < LE BUFFER A-T'IL ETE VIDE (OU EST-CE
< L'ETAT INITIAL) ???
JL GEN31 < NON...
<
< CAS OU LE BUFFER EST PLEIN :
<
GEN32: EQU $
LAD DEMMT < (A)=ADRESSE DE LA DEMANDE,
SVC < QUE L'ON ENVOIE...
JE GEN33 < OK...
QUIT XXQUIT < E R R E U R D ' A S S I G N A T I O N..
JMP GEN32 < ET ON RE-TENTE...
GEN33: EQU $
IC DEMMT+ARGESC < PREPARATION DE L'ADRESSE DU BLOC SUIVANT,
STZ IBUFMT < (A)=INDEX DU PREMIER OCTET.
GEN31: EQU $
PLR A,X
JMP GEN20 < THAT'S ALL...
<
< NON, ON GENERE UNE IMAGE :
<
GEN21: EQU $
BSR APOINT < MARQUAGE DU POINT (X,Y) AVEC LE
< NIVEAU (A)...
GEN20: EQU $
XR B,X
GEN12: EQU $
ADRI I,B < BALAYAGE HORIZONTAL...
JDX GEN11
PLR B,X < RESTAURATION DE L'ABSCISSE (B) DE DEBUT
< DE LIGNE...
ADRI I,Y < BALAYAGE VERTICAL...
JDX GEN10
PLR X,Y < ET RESTAURATION DU POINT COMPLEXE
< COURANT...
<
< ARRET EVENTUEL APRES CHAQUE POINT :
<
CPZ IQUITR < FAUT-IL S'ARRETER ???
JE GEN62 < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
QUIT XXQUIT < OUI...
GEN62: EQU $
<
< PASSAGE AU POINT (X,Y) ET
< DONC AU NOMBRE COMPLXE 'C' SUIVANT :
<
LR X,A
SB PASIX < PROGRESSION REELLE,
LR A,X
JAL GEN02X < OUI...
BR AGEN02 < NON...
GEN02X: EQU $
LR Y,A < OUI...
SB PASIY < PROGRESSION IMAGINAIRE,
LR A,Y
JAL GEN01X < OUI...
BR AGEN01 < NON...
GEN01X: EQU $
<
< OUI, TRAITEMENT DE FIN...
<
CPZ IQUIT < FAUT-IL S'ARRETER ???
JE GEN410 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
QUIT XXQUIT < OUI...
GEN410: EQU $
CPZ IBANDE < A-T'ON GENERE UNE BANDE ???
JNE GEN400 < OUI, PAS D'ECRITURE VIDEO...
CPZ IVIDEO < FAUT-IL ECRIRE ???
JE GEN400 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
PSR X < OUI :
LAD DEMVIW
SVC < ON ECRIT L'IMAGE COURANTE...
LAD DEMVIR
SVC < ET ON ATTEND L'ACQUITTEMENT...
PLR X
GEN400: EQU $
<
< PASSAGE A L'IMAGE SUIVANTE :
<
PLR X < (X)=NOMBRE D'IMAGES A GENERER...
JDX INT02
CPZ IBANDE < A-T'ON GENERE UNE BANDE ???
JE GEN41 < NON...
LAD DEMMTM
SVC < OUI, ON ECRIT UN 'TAPE-MARK'...
GEN41: EQU $
QUIT XXQUIT < C'EST FINI...
BR ADEB9 < ET ON ITERE EVENTUELLEMENT...
<
< INTERPOLATION :
<
INT02: EQU $
#/FLD# PR0 < C,
FSB PR0A < C-A,
FMP COEFR0 < (C-A)*K,
FAD PR0A < (C-A)*K+A,
#/FST# PR0 < NOUVELLE LIMITE REELLE INFERIEURE...
#/FLD# PR1 < C,
FSB PR1A < C-A,
FMP COEFR1 < (C-A)*K,
FAD PR1A < (C-A)*K+A,
#/FST# PR1 < NOUVELLE LIMITE REELLE SUPERIEURE...
#/FLD# PI0 < C,
FSB PI0A < C-A,
FMP COEFI0 < (C-A)*K,
FAD PI0A < (C-A)*K+A,
#/FST# PI0 < NOUVELLE LIMITE IMAGINAIRE INFERIEURE...
#/FLD# PI1 < C,
FSB PI1A < C-A,
FMP COEFI1 < (C-A)*K,
FAD PI1A < (C-A)*K+A,
#/FST# PI1 < NOUVELLE LIMITE IMAGINAIRE SUPERIEURE...
BR AINIT1 < ET ON PASSE A L'IMAGE SUIVANTE...
<
<
< E N T R Y A L T - M O D E :
<
<
DEBUT5: EQU $
QUIT XXQUIT < A T T E N T E ...
LRM C,L,K < ON REINITIALISE 'C', 'L' ET 'K' AU CAS
< D'UNE RE-ENTREE PAR UN 'ALT-MODE'...
WORD COM+DEPBAS < 'C',
WORD LOC+DEPBAS < 'L',
WORD STACK-DEPILE < 'K'.
<
< GESTION DU CURSEUR GRAPHIQUE :
<
CURS01: EQU $
LAD OG
SVC 0 < OPEN GRAPHIQUE.
LAD CU
SVC 0 < MISE EN FONCTION CURSEUR.
LAD LCU
SVC 0 < LECTURE DU CURSEUR.
<
< PASSAGE DE L'ESPACE GRAPHIQUE
< A L'ESPACE MOYENNE DEFINITION :
<
LA CURSOY < Y(CURSEUR).
MP C4 < POUR ATTEINDRE
DV C3 < TOUTE LA VIDEO...
SLRS SIZYVI/XL512=K < REDUCTION VIDEO.
LR A,Y < Y=Y(CURSEUR VIDEO).
LA CURSOX < X(CURSEUR).
SLRS SIZXVI/XC512=K < REDUCTION VIDEO.
LR A,X < X=X(CURSEUR VIDEO).
LBY CURSOR < A=COMMANDE ASSOCIEE.
<
< ANALYSE DE LA COMMANDE :
<
< COMMANDES RECONNUES :
<
< C : MARQUAGE SEUL DU CURSEUR,
< F : MEMORISATION DE LA FENETRE D'ARRIVEE REDUITE
< AU POINT COURANT (X,Y),
< G : VERS LE DEBUT DU PROCESSUS DE GENERATION...
<
CPI "C"
JNE CURS03 < ???
<
< MARQUAGE DU CURSEUR SEUL :
<
LAI NIVCUR
BSR APOINT < MARQUAGE DU POINT (X,Y) AVEC LE NIVEAU
< MAXIMAL...
JMP CURS01 < ET ON ITERE LE CURSEUR...
CURS03: EQU $
CPI "F"
JNE CURS02 < ???
<
< MEMORISATION DE LA FENETRE
< D'ARRIVEE (IDENTIQUE ET RE-
< DUITE AU POINT VISE) :
<
LR X,A < X,
FLT
FMP DELTAR < X*(DROITE-GAUCHE)/512,
FAD PR0 < GAUCHE+X*(DROITE-GAUCHE)/512,
#/FST# PR0A < SOIENT LES LIMITES INFERIEURES
#/FST# PR1A < ET SUPERIEURES REELLES.
LR Y,A < Y,
FLT
FMP DELTAI < Y*(HAUT-BAS)/512,
FAD PI0 < BAS+Y*(HAUT-BAS)/512,
#/FST# PI0A < SOIENT LES LIMITES BASSES
#/FST# PI1A < ET HAUTES IMAGINAIRES.
JMP CURS01 < ET ON ITERE LE CURSEUR...
CURS02: EQU $
CPI "G"
JNE CURS01 < ???
<
< LANCEMENT DE LA GENERATION
< DE L'ENSEMBLE :
<
BSR AGOTO
WORD DEBUT4 < (A)=ADRESSE D'ITERATION SUR ALT-MODE...
PAGE
<
<
< U P D A T E S :
<
<
$EQU PR0D
FLOAT -2.2 < A GAUCHE DE LA FENETRE DE DEPART,
$EQU PR1D
FLOAT +2.2 < A DROITE DE LA FENETRE DE DEPART.
$EQU PI0D
FLOAT -2.2 < EN BAS DE LA FENETRE DE DEPART,
$EQU PI1D
FLOAT +2.2 < EN HAUT DE LA FENETRE DE DEPART.
$EQU NIMAGE
WORD W < NOMBRE D'IMAGES A GENERER.
$EQU EPSI
FLOAT 0.000010 < EPSILON DE CALCUL DE 'COEF'.
<
< DEFINITION DE LA FENETRE D'ARRIVEE ('NUMFAR') :
<
FAR01:: VAL K < FENETRE D'ARRIVEE STANDARD.
FAR02:: VAL '0@@@@+I < FENETRE D'ARRIVEE HOMOTHETIQUE NON ROTEE.
FAR03:: VAL '0@@@@+I < FENETRE D'ARRIVEE DANS LES FILAMENTS.
FARNN:: VAL '0@@@@ < DERNIERE FENETRE...
NUMFAR: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'NUMFAR'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
NUMFAR:: VAL FARNN < DERNIERE FENETRE A PRIORI...
XEIF%: VAL ENDIF
IF NUMFAR-FAR01,XEIF%,,XEIF%
$EQU PR0A
FLOAT -0.73000 < A GAUCHE DE LA FENETRE D'ARRIVEE,
$EQU PR1A
FLOAT -0.73000 < A DROITE DE LA FENETRE D'ARRIVEE.
$EQU PI0A
FLOAT 0.22429 < EN BAS DE LA FENETRE D'ARRIVEE,
$EQU PI1A
FLOAT 0.22429 < EN HAUT DE LA FENETRE D'ARRIVEE.
XEIF%: VAL ENDIF
IF NUMFAR-FAR02,XEIF%,,XEIF%
$EQU PR0A
FLOAT -1.792 < A GAUCHE DE LA FENETRE D'ARRIVEE,
$EQU PR1A
FLOAT -1.745 < A DROITE DE LA FENETRE D'ARRIVEE.
$EQU PI0A
FLOAT -0.25 < EN BAS DE LA FENETRE D'ARRIVEE,
$EQU PI1A
FLOAT 0.25 < EN HAUT DE LA FENETRE D'ARRIVEE.
XEIF%: VAL ENDIF
IF NUMFAR-FAR03,XEIF%,,XEIF%
$EQU PR0A
FLOAT -0.234254 < A GAUCHE DE LA FENETRE D'ARRIVEE,
$EQU PR1A
FLOAT -0.234254 < A DROITE DE LA FENETRE D'ARRIVEE.
$EQU PI0A
FLOAT 0.828110 < EN BAS DE LA FENETRE D'ARRIVEE,
$EQU PI1A
FLOAT 0.828110 < EN HAUT DE LA FENETRE D'ARRIVEE.
XEIF%: VAL ENDIF
$EQU MODUL
XWOR%1: VAL 10 < "RAYON" COURANT...
XWOR%2: VAL XWOR%1*XWOR%1 < CARRE DU "RAYON"...
FLOAT <XWOR%2<K<K < POUR LE TEST DE DIVERGENCE...
$EQU LAMBDR
FLOAT <XWOR%1<K<K < PARTIE REELLE DE 'LAMBDA',
$EQU LAMBDI
FLOAT 0.0 < PARTIE IMAGINAIRE DE 'LAMBDA'.
$EQU F0R
FLOAT <K<K<K < VALEUR INITIALE DU CUMUL
$EQU F0I
FLOAT <K<K<K < DE Z <-- Z**2+I.
PAGE
<
<
< T A B L E D E S S Y M B O L E S :
<
<
IF '00000000000@,XEIF%,,XEIF%
EST
XEIF%: VAL ENDIF
DATE
END DEBUT
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.