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 < < < 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 : < IERASE: WORD EXIST < EFFACER ('EXIST'), OU NON ('NEXIST') < L'ECRAN 512... IQUIT: WORD EXIST < S'ARRETER ('EXIST') OU PAS ('NEXIST') < APRES CHAQUE IMAGE (POINT D'ARRET). IVIDEO: WORD NEXIST < DOIT-ON GENERE UNE IMAGE SUR LE < DISQUE VIDE ('EXIST') OU PAS ('NEXIST'). RAYON: WORD NILK < RAYON DE LA PARTICULE DE BASE... MRAYON: WORD NILK < POUR DETERMINER LE NOMBRE DE NIVEAUX < UTILISES POUR LA PARTICULE... NIMAGE: WORD NILK < NOMBRE D'IMAGES A GENERER. NFILAM: WORD NILK < NOMBRE DE FILAMENTS A TRACER. NPOINT: WORD NILK < NOMBRE DE POINTS PAR FILAMENT. IDEGRA: WORD EXIST < MODE DE TRACE DES FILAMENTS : < 'EXIST' : DEGRADE, < 'NEXIST' : COULEUR UNIFORME EGALE AU < NUMERO DU FILAMENT. GRARVR: WORD NILK < GRARVR DU GENERATEUR ALEATOIRE... SUPRVR: FLOAT <NILK<NILK<NILK < SUP(RVR), INFRVR: FLOAT <NILK<NILK<NILK < INF(RVR). PASRVR: FLOAT <NILK<NILK<NILK < PAS(SUP,INF). GRARVT: WORD NILK < GRARVT DU GENERATEUR ALEATOIRE... SUPRVT: FLOAT <NILK<NILK<NILK < SUP(RVT), INFRVT: FLOAT <NILK<NILK<NILK < INF(RVT). PASRVT: FLOAT <NILK<NILK<NILK < PAS(SUP,INF). GRARDR: WORD NILK < GRARDR DU GENERATEUR ALEATOIRE... SUPRDR: FLOAT <NILK<NILK<NILK < SUP(RDR), INFRDR: FLOAT <NILK<NILK<NILK < INF(RDR). PASRDR: FLOAT <NILK<NILK<NILK < PAS(SUP,INF). GRARDT: WORD NILK < GRARDT DU GENERATEUR ALEATOIRE... SUPRDT: FLOAT <NILK<NILK<NILK < SUP(RDT), INFRDT: FLOAT <NILK<NILK<NILK < INF(RDT). PASRDT: FLOAT <NILK<NILK<NILK < PAS(SUP,INF). < < RELAIS DIVERS : < ADEB9: WORD DEBUT9 < < CONSTANTES FLOTTANTES DE BASE : < F0: FLOAT <K<K<K < REMISE A ZERO FLOTTANTE... F1: FLOAT <W<K<K < L'UNITE EN FLOTTANT... XXXLOC: VAL YYYFLO < 'YYYFLO'. CALL #SIP UTILITAIRES# < < VARIABLES DE MANOEUVRE : < FWORK1: FLOAT <NILK<NILK<NILK FWORK2: FLOAT <NILK<NILK<NILK < < 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 DE GESTION DES < COORDONNEES POLAIRES : < XGCENT: FLOAT <NILK<NILK<NILK < XGRAPHIQUE(CENTRE DU CERCLE), YGCENT: FLOAT <NILK<NILK<NILK < YGRAPHIQUE(CENTRE DU CERCLE). TETA: FLOAT <NILK<NILK<NILK < ANGLE POLAIRE COURANT, DTETA: FLOAT <NILK<NILK<NILK < ET SON INCREMENT. RHO: FLOAT <NILK<NILK<NILK < RAYON POLAIRE COURANT, DRHO: FLOAT <NILK<NILK<NILK < ET SON INCREMENT. < < PARAMETRES GENERAUX DES GENERATEURS ALEATOIRES : < INF32: FLOAT 32768 INF64: FLOAT 65536 FWORK4: FLOAT <NILK<NILK<NILK FWORK5: FLOAT <NILK<NILK<NILK < < PARAMETRES DU GENERATEUR 'RVR' : < RVR: WORD 4397 < NOMBRE ALEATOIRE COURANT. RVR1: WORD 5189 < CONSTANTE RVR2: WORD 6791 < DE CALCUL DES RVR3:: VAL 19 < NOMBRE ALEATOIRES... RVR4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RVR5: WORD 4021 RVR6:: VAL 23 RVR64: FLOAT <NILK<NILK<NILK < SUPRVR/65536. RVRMIS: FLOAT <NILK<NILK<NILK < 1-(INF/SUP), RVRPIS: FLOAT <NILK<NILK<NILK < 32768*(1+(INF/SUP)). ASPRVR: WORD SPRVR < GENERATEUR ALEATOIRE 2D. < < PARAMETRES DU GENERATEUR 'RVT' : < RVT: WORD 4397 < NOMBRE ALEATOIRE COURANT. RVT1: WORD 5189 < CONSTANTE RVT2: WORD 6791 < DE CALCUL DES RVT3:: VAL 19 < NOMBRE ALEATOIRES... RVT4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RVT5: WORD 4021 RVT6:: VAL 23 RVT64: FLOAT <NILK<NILK<NILK < SUPRVT/65536. RVTMIS: FLOAT <NILK<NILK<NILK < 1-(INF/SUP), RVTPIS: FLOAT <NILK<NILK<NILK < 32768*(1+(INF/SUP)). ASPRVT: WORD SPRVT < GENERATEUR ALEATOIRE 2D. < < PARAMETRES DU GENERATEUR 'RDR' : < RDR: WORD 4397 < NOMBRE ALEATOIRE COURANT. RDR1: WORD 5189 < CONSTANTE RDR2: WORD 6791 < DE CALCUL DES RDR3:: VAL 19 < NOMBRE ALEATOIRES... RDR4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RDR5: WORD 4021 RDR6:: VAL 23 RDR64: FLOAT <NILK<NILK<NILK < SUPRDR/65536. RDRMIS: FLOAT <NILK<NILK<NILK < 1-(INF/SUP), RDRPIS: FLOAT <NILK<NILK<NILK < 32768*(1+(INF/SUP)). ASPRDR: WORD SPRDR < GENERATEUR ALEATOIRE 2D. < < PARAMETRES DU GENERATEUR 'RDT' : < RDT: WORD 4397 < NOMBRE ALEATOIRE COURANT. RDT1: WORD 5189 < CONSTANTE RDT2: WORD 6791 < DE CALCUL DES RDT3:: VAL 19 < NOMBRE ALEATOIRES... RDT4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RDT5: WORD 4021 RDT6:: VAL 23 RDT64: FLOAT <NILK<NILK<NILK < SUPRDT/65536. RDTMIS: FLOAT <NILK<NILK<NILK < 1-(INF/SUP), RDTPIS: FLOAT <NILK<NILK<NILK < 32768*(1+(INF/SUP)). ASPRDT: WORD SPRDT < GENERATEUR ALEATOIRE 2D. < < DONNEES DE TRACE DES FILAMENTS : < FINVER: FLOAT <NILK<NILK<NILK < 'FINVER' VAUT +1 OU -1 ; IL VARIE EN < BASCULE D'UN FILAMENT A L'AUTRE, CE QUI < PERMET DE FAIRE VARIER LEUR ENROULEMENT < GENERAL... < < DONNEES DE TRACE DE LA PARTICULE : < RAYON2: WORD NILK < RAYON CONVERTI EN 'TV'... ACERCL: WORD CERCLE < SOUS-PROGRAMME DE TRACE. PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < CONSTANTES DE CALCUL DES SINUS ET COSINUS : < ASIN: WORD SIN < S/P DE CALCUL DU SINUS, ACOS: WORD COS < ET DU COSINUS. SCWOR1: FLOAT <NILK<NILK<NILK SCWOR2: FLOAT <NILK<NILK<NILK ISIGSC: WORD NILK < SIGNE... DEUXPI: FLOAT 6.2831853 < 2 PI PI3141: FLOAT 3.1415926 < PI PISUR2: FLOAT 1.5707963 < PI/2 POLSC1: FLOAT -0.6459636 < COEFFICIENTS POLSC2: FLOAT 0.7968969E-1 < DU POLSC3: FLOAT -0.4673766E-2 < POLYNOME POLSC4: FLOAT 0.1514842E-3 < SIN(X)/COS(X). < < 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 < < DONNEES DE SAUVEGARDES : < SVSRVR: FLOAT <NILK<NILK<NILK < 'SUPRVR', SVIRVR: FLOAT <NILK<NILK<NILK < 'INFRVR'. SVSRVT: FLOAT <NILK<NILK<NILK < 'SUPRVT', SVIRVT: FLOAT <NILK<NILK<NILK < 'INFRVT'. SVSRDR: FLOAT <NILK<NILK<NILK < 'SUPRDR', SVIRDR: FLOAT <NILK<NILK<NILK < 'INFRDR'. SVSRDT: FLOAT <NILK<NILK<NILK < 'SUPRDT', SVIRDT: FLOAT <NILK<NILK<NILK < 'INFRDT'. < < < C O N S T A N T E M A G I Q U E : < < MAGIK:: VAL 7 < CONSTANTE MAGIQUE... IF K*MAGIK/BASE16(K=FCREST-K,,XEIF%, IF ATTENTION : IL FAUT MAGIK(K)=K POUR IF SIMPLIFIER LES CHOSES EN BASE 16 !!! XEIF%: VAL ENDIF XWOR%3: VAL MAGIK < CONSTANTE MAGIQUE... XWOR%7: VAL K < INITIALISATION DU CUMUL... NTRN DO BASE16 XWOR%7: VAL K=FCDO*XWOR%3/BASE16(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST XWOR%8: VAL K < INITIALISATION DU CUMUL... DO BASE16 XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST TRN IF XWOR%7-XWOR%8,,XEIF%, IF ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK' IF N'OPERE PAS UNE PERMUTATION DES 16 CHIFFRES IF DE 0 A F !!! XEIF%: VAL ENDIF IF K*MAGIK/BASE10(K=FCREST-K,,XEIF%, IF ATTENTION : IL FAUT MAGIK(K)=K POUR IF SIMPLIFIER LES CHOSES EN BASE 10 !!! XEIF%: VAL ENDIF XWOR%3: VAL MAGIK < CONSTANTE MAGIQUE... XWOR%7: VAL K < INITIALISATION DU CUMUL... NTRN DO BASE10 XWOR%7: VAL K=FCDO*XWOR%3/BASE10(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST XWOR%8: VAL K < INITIALISATION DU CUMUL... DO BASE10 XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST TRN IF XWOR%7-XWOR%8,,XEIF%, IF ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK' IF N'OPERE PAS UNE PERMUTATION DES 10 CHIFFRES IF DE 0 A 9 !!! XEIF%: VAL ENDIF AMAGIK: WORD MAGIK ASHUFL: WORD SHUFLE < MODIFICATION DE (X,Y)... 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 $ PSR A,B LR A,B < (B)=NIVEAU DU TRACE. < < TEST DES "HORS-ECRAN" : < LR X,A < (A)=COORDONNEE 'X' ET VALIDATION : JAL POINT1 < HORS-ECRAN... CP VECTNC JG POINT1 < HORS-ECRAN... LR Y,A < (A)=COORDONNEE 'Y' ET VALIDATION : JAL POINT1 < HORS-ECRAN... CP VECTNL JG POINT1 < HORS-ECRAN... < < TRANSCODAGE DU NIVEAU : < PSR X < SAUVEGARDE DE LA COORDONNEE 'X'... LR B,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 : < POINT1: EQU $ PLR A,B 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 < < < G E N E R A T E U R R E D O N N A N T T O U J O U R S < L E M E M E V E C T E U R A L E A T O I R E E N < U N P O I N T D O N N E : < < < ARGUMENT : < (X,Y)=COORDONNEES DU POINT COURANT. < < < RESULTAT : < (A,B)=RVR(XS,YS,GRARVR). < < SPRVR: EQU $ < < GENERATION ALEATOIRE : < LR X,A < (A)=COORDONNEE 'X', EORR B,A < ET ON SE RAMENE SUR UN MOT... STA FWORK4 < SAVE F1(XS)... LR Y,A < (A)=COORDONNEE 'Y', EOR RVR1 < ??!???! STA FWORK5 < SAVE F2(YS)... MP FWORK4 < ET ON CONSTRUIT XR A,B < UNE FONCTION UNIQUE AD FWORK5 < DU NOEUD COURANT, SB FWORK4 < TELLE QUE : < F(X,Y)#F(Y,X), < F(X,Y)=X*Y+Y-X. EORR B,A MP GRARVR < D'OU F(GRARVR,X,Y), TELLE QUE : < F(X,Y)#F(Y,X) AFIN D'EVITER UNE SYMETRIE < PAR RAPPORT A UNE DIAGONALE... EORR B,A MP AMAGIK < DONT ON FAIT UN "SHUFFLING"... EORR B,A < ON CUMULE LES 2 MOTS, < < MISE A L'ECHELLE : < < < NOTA : < ON DOIT POUR METTRE LA < VALEUR 'RVR' A L'ECHELLE < CALCULER L'EXPRESSION : < < (SUP/(-32768))*(-RVR/2+16384+(RVR/2-16384)*(INF/SUP)), < < QUI SE SIMPLIFIE EN : < < (SUP/65536)*(RVR*(1-(INF/SUP))+32768*(1+(INF/SUP))). < FLT < ON FLOTTE 'RVR', FMP RVRMIS < RVR*(1-(INF/SUP)), FAD RVRPIS < RVR*(1-(INF/SUP))+32768*(1+(INF/SUP)), FMP RVR64 < (SUP/65536)*(...). < < ET SORTIE : < RSR PAGE < < < G E N E R A T E U R R E D O N N A N T T O U J O U R S < L E M E M E V E C T E U R A L E A T O I R E E N < U N P O I N T D O N N E : < < < ARGUMENT : < (X,Y)=COORDONNEES DU POINT COURANT. < < < RESULTAT : < (A,B)=RVT(XS,YS,GRARVT). < < SPRVT: EQU $ < < GENERATION ALEATOIRE : < LR X,A < (A)=COORDONNEE 'X', EORR B,A < ET ON SE RAMENE SUR UN MOT... STA FWORK4 < SAVE F1(XS)... LR Y,A < (A)=COORDONNEE 'Y', EOR RVT1 < ??!???! STA FWORK5 < SAVE F2(YS)... MP FWORK4 < ET ON CONSTRUIT XR A,B < UNE FONCTION UNIQUE AD FWORK5 < DU NOEUD COURANT, SB FWORK4 < TELLE QUE : < F(X,Y)#F(Y,X), < F(X,Y)=X*Y+Y-X. EORR B,A MP GRARVT < D'OU F(GRARVT,X,Y), TELLE QUE : < F(X,Y)#F(Y,X) AFIN D'EVITER UNE SYMETRIE < PAR RAPPORT A UNE DIAGONALE... EORR B,A MP AMAGIK < DONT ON FAIT UN "SHUFFLING"... EORR B,A < ON CUMULE LES 2 MOTS, < < MISE A L'ECHELLE : < < < NOTA : < ON DOIT POUR METTRE LA < VALEUR 'RVT' A L'ECHELLE < CALCULER L'EXPRESSION : < < (SUP/(-32768))*(-RVT/2+16384+(RVT/2-16384)*(INF/SUP)), < < QUI SE SIMPLIFIE EN : < < (SUP/65536)*(RVT*(1-(INF/SUP))+32768*(1+(INF/SUP))). < FLT < ON FLOTTE 'RVT', FMP RVTMIS < RVT*(1-(INF/SUP)), FAD RVTPIS < RVT*(1-(INF/SUP))+32768*(1+(INF/SUP)), FMP RVT64 < (SUP/65536)*(...). < < ET SORTIE : < RSR PAGE < < < G E N E R A T E U R R E D O N N A N T T O U J O U R S < L E M E M E V E C T E U R A L E A T O I R E E N < U N P O I N T D O N N E : < < < ARGUMENT : < (X,Y)=COORDONNEES DU POINT COURANT. < < < RESULTAT : < (A,B)=RDR(XS,YS,GRARDR). < < SPRDR: EQU $ < < GENERATION ALEATOIRE : < LR X,A < (A)=COORDONNEE 'X', EORR B,A < ET ON SE RAMENE SUR UN MOT... STA FWORK4 < SAVE F1(XS)... LR Y,A < (A)=COORDONNEE 'Y', EOR RDR1 < ??!???! STA FWORK5 < SAVE F2(YS)... MP FWORK4 < ET ON CONSTRUIT XR A,B < UNE FONCTION UNIQUE AD FWORK5 < DU NOEUD COURANT, SB FWORK4 < TELLE QUE : < F(X,Y)#F(Y,X), < F(X,Y)=X*Y+Y-X. EORR B,A MP GRARDR < D'OU F(GRARDR,X,Y), TELLE QUE : < F(X,Y)#F(Y,X) AFIN D'EVITER UNE SYMETRIE < PAR RAPPORT A UNE DIAGONALE... EORR B,A MP AMAGIK < DONT ON FAIT UN "SHUFFLING"... EORR B,A < ON CUMULE LES 2 MOTS, < < MISE A L'ECHELLE : < < < NOTA : < ON DOIT POUR METTRE LA < VALEUR 'RDR' A L'ECHELLE < CALCULER L'EXPRESSION : < < (SUP/(-32768))*(-RDR/2+16384+(RDR/2-16384)*(INF/SUP)), < < QUI SE SIMPLIFIE EN : < < (SUP/65536)*(RDR*(1-(INF/SUP))+32768*(1+(INF/SUP))). < FLT < ON FLOTTE 'RDR', FMP RDRMIS < RDR*(1-(INF/SUP)), FAD RDRPIS < RDR*(1-(INF/SUP))+32768*(1+(INF/SUP)), FMP RDR64 < (SUP/65536)*(...). < < ET SORTIE : < RSR PAGE < < < G E N E R A T E U R R E D O N N A N T T O U J O U R S < L E M E M E V E C T E U R A L E A T O I R E E N < U N P O I N T D O N N E : < < < ARGUMENT : < (X,Y)=COORDONNEES DU POINT COURANT. < < < RESULTAT : < (A,B)=RDT(XS,YS,GRARDT). < < SPRDT: EQU $ < < GENERATION ALEATOIRE : < LR X,A < (A)=COORDONNEE 'X', EORR B,A < ET ON SE RAMENE SUR UN MOT... STA FWORK4 < SAVE F1(XS)... LR Y,A < (A)=COORDONNEE 'Y', EOR RDT1 < ??!???! STA FWORK5 < SAVE F2(YS)... MP FWORK4 < ET ON CONSTRUIT XR A,B < UNE FONCTION UNIQUE AD FWORK5 < DU NOEUD COURANT, SB FWORK4 < TELLE QUE : < F(X,Y)#F(Y,X), < F(X,Y)=X*Y+Y-X. EORR B,A MP GRARDT < D'OU F(GRARDT,X,Y), TELLE QUE : < F(X,Y)#F(Y,X) AFIN D'EVITER UNE SYMETRIE < PAR RAPPORT A UNE DIAGONALE... EORR B,A MP AMAGIK < DONT ON FAIT UN "SHUFFLING"... EORR B,A < ON CUMULE LES 2 MOTS, < < MISE A L'ECHELLE : < < < NOTA : < ON DOIT POUR METTRE LA < VALEUR 'RDT' A L'ECHELLE < CALCULER L'EXPRESSION : < < (SUP/(-32768))*(-RDT/2+16384+(RDT/2-16384)*(INF/SUP)), < < QUI SE SIMPLIFIE EN : < < (SUP/65536)*(RDT*(1-(INF/SUP))+32768*(1+(INF/SUP))). < FLT < ON FLOTTE 'RDT', FMP RDTMIS < RDT*(1-(INF/SUP)), FAD RDTPIS < RDT*(1-(INF/SUP))+32768*(1+(INF/SUP)), FMP RDT64 < (SUP/65536)*(...). < < ET SORTIE : < RSR PAGE < < < C H A M B A R D E M E N T D E ( X , Y ) : < < < ARGUMENT : < (X,Y)="COORDONNEES LOCALES". < < < RESULTAT : < (X,Y)="COORDONNEES CHAMBARDEES". < < SHUFLE: EQU $ PSR A,B LR X,A MP AMAGIK EORR B,A MP GRARDT EORR B,A MP GRARVT EORR B,A LR A,X < (X)='X' CHAMBARDEE, LR Y,A MP AMAGIK EORR B,A MP GRARDR EORR B,A MP GRARVR EORR B,A LR A,Y < (Y)='Y' CHAMBARDEE. PLR A,B RSR 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' : < < INITIALISATIONS ET < PREPARATION DE L'ANGLE : < #/FST# SCWOR1 < SAVE TEMPORAIRE DE L'ANGLE. STZ ISIGSC JAGE PSC072 BSR AFNEG #/FST# SCWOR1 IC ISIGSC PSC072: EQU $ FDV DEUXPI BSR AFIX BSR AFLT FMP DEUXPI FSB SCWOR1 BSR AFNEG FCAM PI3141 JL PSC073 FSB PI3141 IC ISIGSC PSC073: EQU $ FCAM PISUR2 JL PSC074 FSB PI3141 BSR AFNEG PSC074: EQU $ < < CALCUL DU POLYNOME : < FDV PISUR2 #/FST# SCWOR1 FMP SCWOR1 #/FST# SCWOR2 FMP POLSC4 FAD POLSC3 FMP SCWOR2 FAD POLSC2 FMP SCWOR2 FAD POLSC1 FMP SCWOR2 FAD PISUR2 FMP SCWOR1 DC ISIGSC JNE PSC075 BSR AFNEG PSC075: EQU $ < < ET RETOUR : < BSR ATSFLO RSR PAGE < < < T R A C E D ' U N D I S Q U E : < < < FONCTION : < CE MODULE TRACE UN DISQUE EN < DEGRADE DESTINE A REPRESENTER < UNE SPHERE PROJETEE. < < < ARGUMENTS : < (X,Y)=CENTRE DU DISQUE. < < CERCLE: EQU $ < < INITIALISATIONS : < PSR X,Y LR X,B < (B)='X' DU CENTRE, PSR Y < SAUVEGARDE DE 'Y' DU CENTRE. LA RAYON2 SBR A,X < ON SE PLACE EN HAUT ET A GAUCHE SBR A,Y < D'UN CARRE CIRCONSCRIT AU DISQUE. STX VECTX1 < INITIALISATION DE L'ABSCISSE INITIALE < DE CHAQUE LIGNE, STY VECTY1 < INITIALISATION DE LA COORDONNEE 'Y'. PLR Y < ON A : < (B,Y)=COORDONNEES DU CENTRE. < < BALAYAGE VERTICAL : < LX RAYON2 ADR X,X ADRI Z,X < (X)=NOMBRE DE LIGNES A BALAYER. CERCL1: EQU $ LA VECTX1 PSR A,X < SAUVEGARDE DE L'ABSCISSE INITIALE < DE CHAQUE LIGNE (A) ET DU NOMBRE DE < LIGNES A TRACER (X). < < BALAYAGE HORIZONTAL : < LX RAYON2 ADR X,X ADRI Z,X < (X)=NOMBRE DE LIGNES A BALAYER. CERCL2: EQU $ PSR B < SAUVEGARDE DE LA COORDONNEE 'X' < DU CENTRE. LA VECTX1 < X1, SBR B,A < X1-XC, BSR AFLT #/FST# FWORK1 < X1-XC, FMP FWORK1 < (X1-XC)**2, BSR ASFWOR LA VECTY1 < Y1, SBR Y,A < Y1-YC ((XC,YC) DESIGNE LE CENTRE). BSR AFLT #/FST# FWORK2 < Y1-YC, FMP FWORK2 < (Y1-YC)**2, BSR APFWOR < (X1-XC)**2+(Y1-YC)**2, BSR ARAC < ET CALCUL DE LA DISTANCE DU POINT < COURANT (X1,Y1) AU CENTRE (XC,YC) : BSR ATSFLO BSR AROND CP RAYON2 < EST-ON HORS DU DISQUE ?? JGE CERCL3 < OUI, ON IGNORE CE POINT... SB RAYON2 < NON : NGR A,A < (A)=DISTANCE DU POINT COURANT AU BORD < DU DISQUE. MP MRAYON DV RAYON2 < (A)=NIVEAU(DISTANCE AU CENTRE,Z). ADRI I,A < AFIN D'EVITER LE NOIR... CERCL6: EQU $ PSR X,Y LX VECTX1 LY VECTY1 BSR APOINT < MARQUAGE DE (X,Y) AVEC LE NIVEAU (A). PLR X,Y CERCL3: EQU $ PLR B < RESTAURE L'ABSCISSE DU CENTRE, IC VECTX1 < ET PROGRESSION SUR LA LIGNE, JDX CERCL2 < A CONDITION DE N'ETRE POINT EN BOUT < DE LIGNE... PLR A,X < RESTAURE : < (A)='VECTX1' DE DEBUT DE LIGNE, < (X)=NOMBRE DE LIGNES A TRACER... STA VECTX1 < ON SE PLACE EN DEBUT IC VECTY1 < DE LA NOUVELLE LIGNE, JDX CERCL1 < SI ELLE EXISTE... < < ET RETOUR : < PLR X,Y CERCL4: EQU $ RSR 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' : < LAI PAGER BSR AGPCDA < AFIN D'ATTEINDRE LA MEMOIRE DU '68000' < ET LA MEMOIRE 'SOLAR' QUI LA PRECEDE < AFIN D'Y METTRE 'BUF'... < < SAUVEGARDES DES (SUP,INF)(RDN) : < #/FLD# SUPRVR #/FST# SVSRVR #/FLD# INFRVR #/FST# SVIRVR #/FLD# SUPRVT #/FST# SVSRVT #/FLD# INFRVT #/FST# SVIRVT #/FLD# SUPRDR #/FST# SVSRDR #/FLD# INFRDR #/FST# SVIRDR #/FLD# SUPRDT #/FST# SVSRDT #/FLD# INFRDT #/FST# SVIRDT < < < 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'...). < < RESTAURATION DES (SUP,INF)(RDN) : < #/FLD# SVSRVR #/FST# SUPRVR #/FLD# SVIRVR #/FST# INFRVR #/FLD# SVSRVT #/FST# SUPRVT #/FLD# SVIRVT #/FST# INFRVT #/FLD# SVSRDR #/FST# SUPRDR #/FLD# SVIRDR #/FST# INFRDR #/FLD# SVSRDT #/FST# SUPRDT #/FLD# SVIRDT #/FST# INFRDT < < < I N I T I A L I S A T I O N S : < < INIT01: EQU $ < < INITIALISATION A PRIORI < DES TRACES GRAPHIQUES : < 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. < < < I T E R A T I O N S U R C H A Q U E I M A G E : < < LX NIMAGE < (X)=NOMBRE D'IMAGES A GENERER. FIL100: EQU $ PSR X < < GENERATEUR ALEATOIRE : < #/FLD# INFRVR < BORNE INFERIEURE ('INF'), FDV SUPRVR < INF/SUP, PSR A,B < ET SAVE... FSB F1 < (INF/SUP)-1, FNEG < 1-(INF/SUP), #/FST# RVRMIS < RVRMIS=1-(INF/SUP). PLR A,B < INF/SUP, FAD F1 < 1+(INF/SUP), FMP INF32 < 32768*(1+(INF/SUP)), #/FST# RVRPIS < RVRPIS=32768*(1+(INF/SUP)). #/FLD# SUPRVR < SUP, FDV INF64 < SUP/65536, #/FST# RVR64 < SUP64=SUP/65536. < < GENERATEUR ALEATOIRE : < #/FLD# INFRVT < BORNE INFERIEURE ('INF'), FDV SUPRVT < INF/SUP, PSR A,B < ET SAVE... FSB F1 < (INF/SUP)-1, FNEG < 1-(INF/SUP), #/FST# RVTMIS < RVTMIS=1-(INF/SUP). PLR A,B < INF/SUP, FAD F1 < 1+(INF/SUP), FMP INF32 < 32768*(1+(INF/SUP)), #/FST# RVTPIS < RVTPIS=32768*(1+(INF/SUP)). #/FLD# SUPRVT < SUP, FDV INF64 < SUP/65536, #/FST# RVT64 < SUP64=SUP/65536. < < GENERATEUR ALEATOIRE : < #/FLD# INFRDR < BORNE INFERIEURE ('INF'), FDV SUPRDR < INF/SUP, PSR A,B < ET SAVE... FSB F1 < (INF/SUP)-1, FNEG < 1-(INF/SUP), #/FST# RDRMIS < RDRMIS=1-(INF/SUP). PLR A,B < INF/SUP, FAD F1 < 1+(INF/SUP), FMP INF32 < 32768*(1+(INF/SUP)), #/FST# RDRPIS < RDRPIS=32768*(1+(INF/SUP)). #/FLD# SUPRDR < SUP, FDV INF64 < SUP/65536, #/FST# RDR64 < SUP64=SUP/65536. < < GENERATEUR ALEATOIRE : < #/FLD# INFRDT < BORNE INFERIEURE ('INF'), FDV SUPRDT < INF/SUP, PSR A,B < ET SAVE... FSB F1 < (INF/SUP)-1, FNEG < 1-(INF/SUP), #/FST# RDTMIS < RDTMIS=1-(INF/SUP). PLR A,B < INF/SUP, FAD F1 < 1+(INF/SUP), FMP INF32 < 32768*(1+(INF/SUP)), #/FST# RDTPIS < RDTPIS=32768*(1+(INF/SUP)). #/FLD# SUPRDT < SUP, FDV INF64 < SUP/65536, #/FST# RDT64 < SUP64=SUP/65536. < < INITIALISATIONS DE L'IMAGEUR : < GEN69: EQU $ 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'. GEN69N: EQU $ < < < T R A C E D E L A P A R T I C U L E : < < LA RAYON SARS XXDEDX?XXDEDY STA RAYON2 < VALEUR DU RAYON EN FORMAT 'TV'... IF XXDEDX-XXDEDY,,XEIF%, IF ATTENTION !!! XEIF%: VAL ENDIF #/FLD# XGCENT < X(CENTRE), BSR AROND SARS XXDEDX LR A,X < CONVERSION VIDEO... #/FLD# YGCENT < Y(CENTRE), BSR AROND SARS XXDEDY LR A,Y < CONVERSION VIDEO... BSR ACERCL < ET TRACE DE LA PARTICULE... < < < G E N E R A T I O N D E S F I L A M E N T S : < < #/FLD# F1 #/FST# FINVER < INITIALISATION DE LA BASCULE DES SENS < D'ENROULEMENT... LX NFILAM < (X)=NOMBRE DE FILAMENTS A GENERER, LYI RVR3+RVT3+RDR3+RDT3 < (Y)=POUR LES GENERATEURS 'RVT' ET 'RVR'. FIL01: EQU $ STX VECTNI < ON UTILISE LE NUMERO DE FILAMENT COMME < COULEUR DE TRACE A PRIORI... IF EXIST-K,XEIF%,,XEIF% IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ IDEGRA < EN FAIT, FAUT-IL UN DEGRADE ??? JE FIL31 < NON, LA COULEUR SERA UNIFORME... LAI XXN255 < OUI : STA VECTNI < ON PART DU MAX... FIL31: EQU $ PSR X,Y BSR ASHUFL < CHAMBARDEMENT DE (X,Y)... < < INITIALISATION DU FILAMENT COURANT : < BSR ASPRVR #/FST# RHO < RAYON POLAIRE INITIAL, BSR ASPRVT #/FST# TETA < ANGLE POLAIRE INITIAL. BSR ACOS < COS(TETA), FMP RHO < RHO*COS(TETA), FAD XGCENT < XC+RHO*COS(TETA), BSR AROND STA VECGX2 < ABSCISSE DU POINT DE DEPART. #/FLD# TETA < TETA, BSR ASIN < SIN(TETA), FMP RHO < RHO*SIN(TETA), FAD YGCENT < YC+RHO*SIN(TETA), BSR AROND STA VECGY2 < ORDONNEE DU POINT DE DEPART. < < GENERATION D'UN FILAMENT : < LR X,Y < (Y)=NUMERO DE FILAMENT COURANT, LX NPOINT < (X)=NOMBRE DE POINTS (OU SEGMENTS) < D'UN FILAMENT. < NOAT : (X,Y)=(NUMERO DE POINT,NUMERO DE < FILAMENT) SONT APPELES LES < "COORDONNEES LOCALES", ET < SONT UTILISEES PAR LES GENE- < RATEURS ALEATOIRES... FIL02: EQU $ PSR X,Y BSR ASHUFL < CHAMBARDEMENT DE (X,Y)... LA VECGX2 < POINT LB VECGY2 < PRECEDENT (OU DE DEPART LA PREMIERE < FOIS...), STB VECGY1 < QUI DEVIENT LE STA VECGX1 < POINT COURANT. FIL12: EQU $ BSR ASPRDR #/FST# DRHO < INCREMENT DE RHO, BSR ASPRDT FMP FINVER < AFIN D'INVERSER LE SENS D'ENROULEMENT. #/FST# DTETA < INCREMENT DE TETA. FAD TETA #/FST# TETA < PROGRESSION DE TETA. BSR ACOS < COS(TETA), FMP DRHO < DRHO*COS(TETA), BSR AROND AD VECGX1 STA VECGX2 < X(POINT COURANT). FLT FSB XGCENT #/FST# FWORK4 FMP FWORK4 #/FST# FWORK4 < CARRE D'UN COTE DU TRIANGLE RECTANGLE. #/FLD# TETA < TETA, BSR ASIN < SIN(TETA), FMP DRHO < DRHO*SIN(TETA), BSR AROND AD VECGY1 STA VECGY2 < Y(POINT COURANT). FLT FSB YGCENT #/FST# FWORK5 FMP FWORK5 < CARRE DE L'AUTRE COTE DU TRIANGLE < RECTANGLE, FAD FWORK4 < CARRE DE L'HYPOTHENUSE, BSR ARAC < HYPOTHENUSE, BSR AROND CP RAYON < Y-A-T'IL CONTACT AVEC LA PARTICULE ??? JGE FIL11 < NON, OK... ADRI I,Y < OUI, ON MODIFIE LES ARGUMENTS DU < GENERATEUR 'RDR'... JMP FIL12 < VERS LA REGENERATION DE 'DRHO'... FIL11: EQU $ BSR AVE512 < TRACE DU SEGMENT COURANT... CPZ IDEGRA < EST-ON DANS LE MODE DEGRADE ??? JE FIL32 < NON, UNIFORME... DC VECTNI < OUI, ON DECREMENTE... FIL32: EQU $ PLR X,Y JDX FIL02 < ET PASSAGE AU POINT SUIVANT... #/FLD# FINVER FNEG #/FST# FINVER < BASCULE DU SENS D'ENROULEMENT... PLR X,Y JDX FIL01 < PUIS AU FILAMENT SUIVANT... < < < T R A I T E M E N T D E F I N : < < 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 $ < < GENERATION SUR LE DISQUE 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 $ < < MODIFICATION DES BORNES < DES GENERATEURS ALEATOIRES : < #/FLD# SUPRVR FSB PASRVR #/FST# SUPRVR #/FLD# INFRVR FAD PASRVR #/FST# INFRVR #/FLD# SUPRVT FSB PASRVT #/FST# SUPRVT #/FLD# INFRVT FAD PASRVT #/FST# INFRVT #/FLD# SUPRDR FSB PASRDR #/FST# SUPRDR #/FLD# INFRDR FAD PASRDR #/FST# INFRDR #/FLD# SUPRDT FSB PASRDT #/FST# SUPRDT #/FLD# INFRDT FAD PASRDT #/FST# INFRDT < < PASSAGE A L'IMAGE SUIVANTE : < PLR X < (X)=NOMBRE D'IMAGES A GENERER, JDX FIL101 < PASSAGE A LA SUIVANTE... JMP FIL102 < C'EST FINI... FIL101: EQU $ BSR AGOTO WORD FIL100 < VERS L'IMAGE SUIVANTE... FIL102: EQU $ < < < 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' ET 'K' AU CAS < D'UNE RE-ENTREE PAR UN 'ALT-MODE'... WORD COM+DEPBAS < 'C', WORD LOC+DEPBAS < 'L', WORD STACK-DEPILE < 'K'. BSR AGOTO WORD DEBUT4 < (A)=ADRESSE D'ITERATION SUR ALT-MODE... PAGE < < < U P D A T E S : < < XRAYON:: VAL 32 < RAYON DE LA PARTICULE... $EQU RAYON WORD XRAYON < RAYON DE LA PARTICULE... $EQU MRAYON WORD XRAYON < POUR LE NOMBRE DE NIVEAUX DE COULEUR... $EQU NIMAGE WORD 1 < NOMBRE D'IMAGES A GENERER... $EQU NFILAM WORD XXN255-I-XRAYON < NOMBRE DE FILAMENTS.. $EQU NPOINT WORD XXN255-I-XRAYON < NOMBRE DE POINTS PAR FILAMENT. $EQU XGCENT FLOAT 512 < XGRAPHIQUE(CENTRE DU CERCLE), $EQU YGCENT FLOAT 512 < YGRAPHIQUE(CENTRE DU CERCLE). $EQU GRARVR WORD '1234 < GRARVR DU GENERATEUR ALEATOIRE. $EQU SUPRVR NTRN FLOAT <XRAYON<K<K < SUP(RVR). TRN $EQU INFRVR NTRN FLOAT <XRAYON<K<K < INF(RVR). TRN $EQU PASRVR FLOAT 0 < PAS(RVR). $EQU GRARVT WORD '2345 < GRARVT DU GENERATEUR ALEATOIRE. $EQU SUPRVT NTRN FLOAT 6.28 < SUP(RVT). TRN $EQU INFRVT NTRN FLOAT 0 < INF(RVT). TRN $EQU PASRVT FLOAT 0 < PAS(RVT). $EQU GRARDR WORD '3456 < GRARDR DU GENERATEUR ALEATOIRE. $EQU SUPRDR NTRN FLOAT 5 < SUP(RDR). TRN $EQU INFRDR NTRN FLOAT 1 < INF(RDR). TRN $EQU PASRDR FLOAT 0 < PAS(RDR). $EQU GRARDT WORD '4567 < GRARDT DU GENERATEUR ALEATOIRE. $EQU SUPRDT NTRN FLOAT 0.30 < SUP(RDT). TRN $EQU INFRDT NTRN FLOAT -0.30 < INF(RDT). TRN $EQU PASRDT FLOAT 0.003 < PAS(RDT). 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