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
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.