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 < < < 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 : < XWOR%1: VAL W+W < SEUIL DU MODULE, XWOR%2: VAL XWOR%1*XWOR%1 < CARRE DU SEUIL DU MODULE, MODUL: FLOAT <XWOR%2<K<K < 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... ILAMBD: WORD NEXIST < CHOIX DE LA FONCTION ITEREE : < 'NEXIST' : Z <-- Z**2+C, < 'EXIST' : Z <-- LAMBDA*(Z**2+C), < OU 'LAMBDA' EST UN NOMBRE < COMPLEXE DONT LE MODULE < POURRA VALOIR 1... 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. 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 < < 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. < < 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'. 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 PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < 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... 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 < < < 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'. LR Y,A < IMAGINAIRE, FLT FMP DELTAI < MISE DANS LA FENETRE, FAD PI0 < ET TRANSLATION, #/FST# CI < SOIT LA PARTIE IMAGINAIRE DE 'C'. < < 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 #/FST# ZR < ZR <-- CR, #/FLD# CI #/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**2+C : < 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 $ #/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 #/FST# FWORK < ET SAVE... #/FLD# ZR < ZR, 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 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 FSB FWORK < ZR**2-ZI**2, SOIT LA PARTIE REELLE DU 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 < CARRE DU NOMBRE COMPLEXE (ZR,ZI), PSR A,B < ET SAVE... #/FLD# ZR < ZR, 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 < ZR*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 F2 < 2*ZR*ZI, SOIT LA PARTIE IMAGINAIRE DU 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 < CARRE DU NOMBRE COMPLEXE (ZR,ZI), FAD CI 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 < ET ITERATION : PLR A,B FAD CR 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 < Z <-- Z**2+C... CPZ ILAMBD < FAUT-IL MULTIPLIER PAR 'LAMBDA' ??? JE GEN69L < NON... IF NEXIST-K,,XEIF%, IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!! XEIF%: VAL ENDIF FMP LAMBDR < ZR*LR, 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, FMP LAMBDI < ZI*LI, 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 FNEG < -ZI*LI, 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*LR-ZI*LI, 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 PSR A,B < ET SAVE LA FUTURE PARTIE REELLE... #/FLD# ZR < ZR, FMP LAMBDI < ZR*LI, 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, FMP LAMBDR < ZI*LR, 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 < LR*ZI+LI*ZR, 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 < ET ITERATION : PLR A,B #/FST# ZR < Z <-- LAMBDA*(Z**2+C). GEN69L: EQU $ < < 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.0 < A GAUCHE DE LA FENETRE DE DEPART, $EQU PR1D FLOAT 0.5 < A DROITE DE LA FENETRE DE DEPART. $EQU PI0D FLOAT -1.25 < EN BAS DE LA FENETRE DE DEPART, $EQU PI1D FLOAT 1.25 < 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 LAMBDR FLOAT <W<K<K < PARTIE REELLE DE 'LAMBDA', $EQU LAMBDI FLOAT <K<K<K < 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