IDP "GENERATEUR DE GALAXIES"
TABLE
ZERO: EQU $
DZS 'C
ASCI "STAR"
BYTE "S";'04
WORD 0 < LONGUEUR DU PROGRAMME.
WORD STAR < ENTRY POINT.
PROG
WORD 0
ENTRY: EQU $
LRP L
BR -2,L < ENTREE DANS LE PROGRAMME.
PAGE
<
<
< F O R M A T P I L E R E C U R S I V I T E :
<
<
DSEC
FPILE: EQU $
CENTR: EQU $ < CENTRE COURANT.
X: WORD 0
Y: WORD 0
Z: WORD 0
DIREC: WORD 0 < VAUT +1 OU -1, SUIVANT QUE
< L'ON INCREMENTE OU DECREMENTE
< LES COORDONNEES.
LONG: WORD 0 < LONGUEUR DE LA BARRE COURANTE.
DX: WORD 0 < DEPLACEMENT
DY: WORD 0 < VERS LE
DZ: WORD 0 < CENTRE SUIVANT.
LPILE: VAL $-FPILE < LONGUEUR DE L'ENTREE.
<
< E N T R E E P R E C E D E N T E :
<
DSEC
FPILEP: EQU $
XP: WORD 0
YP: WORD 0
ZP: WORD 0
DIRECP: WORD 0
LONGP: WORD 0
DXP: WORD 0
DYP: WORD 0
DZP: WORD 0
PAGE
<
<
< L O C A L :
<
<
LOCAL
LOC: EQU $
MODULO: FLOAT 1000001
CTTE1: FLOAT 23
FC360: FLOAT 360
C360: WORD 360
DEUXPI: FLOAT 6.283185
CTTE2: FLOAT 0.57
UN: FLOAT 13
UN1: DZS 2
ARG: DZS 2 < ARGUMENT DES ROUTINES SIN/COS
< EXPRIME EN RADIANS.
RESUL: DZS 2 < RESULTAT DES ROUTINES SIN/COS.
ALPHA: DZS 2 < ANGLE ALEATOIRE,
BETA: DZS 2 < ANGLE ALEATOIRE.
TEMP1: DZS 2 < VARIABLE TEMPORAIRE.
<
< RELAIS DE TABLES ET SOUS-PROGRAMMES :
<
APILE: WORD PILE < PILE DE RECURSIVITE.
ARDN: WORD RDN < CALCUL NOMBRE ALEATOIRE.
ASIN: WORD SIN < CALCUL RSEUL=SIN(ARG).
ACOS: WORD COS < CALCUL RESUL=COS(ARG).
ACAL: WORD CAL < CALCUL RECURSIF DES ETOILES.
ALUM: WORD LUM,X < BRILLANCE DE L'ETOILE.
<
< CONSTANTES D'EDITION GRAPHIQUE :
<
SEG: DZS 4 < SEGMENT GRAPHIQUE COURANT.
SEGX: VAL 1 < COORDONNEE X,
SEGY: VAL 0 < COORDONNEE Y.
OG: WORD '0B03 < OPEN GRAPHIQUE.
WG: WORD '0B0A < ECRITURE GRAPHIQUE.
WORD SEG-ZERO*2
WORD 8
CG: WORD '0B04 < CLOSE GRAPHIQUE.
ESCFS: WORD '0B07 < MISE EN MODE 'SPECIAL POINT
BYTE '1B;'1C;'04;0 < MODE DU 4014.
WGPP: WORD '0B0A < ENVOI D'UN POINT.
WORD SEG-ZERO*2
WORD 4
SIZE: WORD '0B07 < TAILLE D'UNE ETOILE.
BYTE 0;'04 < DANS LE 1ER OCTET.
ERASE: WORD '0B05 < EFFACEMENT ECRAN.
MAX: WORD 1023 < VALIDATION COORDONNEES ECRAN.
LONGI: WORD 200 < LONGUEUR DE LA 1ERE BARRE.
<
< DIVERS :
<
DEMCCI: WORD '0001 < RETOUR AU CCI.
<
< PILES DE TRAVAIL :
<
NIVEAU: VAL 10 < NBRE MAX DE RECURSIVITE.
STACK: DZS 8*NIVEAU < PILE DE TRAVAIL.
PILE: DZS NIVEAU+2*LPILE < PILE DE RECURSIVITE.
<
< TABLE DE BRILLANCE :
<
LUM: EQU $
BYTE '40;'40;'40;'40
BYTE '48;'48;'58;'60
BYTE '68;'70;'78;'78
BYTE '7D;'7D;'7D;'7D
PAGE
PROG
<
<
< C A L C U L R E C U R S I F E T O I L E S :
<
<
< FONCTION :
< SI LA LONGUEUR DE LA BARRE COURANTE
< EST INSUFFISANTE, IL MARQUE LE POINT
< COURANT; PAR CONTRE SI ELLE EST SUFFI-
< SANTE, IL VA EN SES 2 EXTREMITES, OU
< IL GENERE 2 BARRES PLUS PETITES ET
< DE DIRECTIONS ALEATOIRES, ET REPREND
< RECURSIVEMENT LE PROCESSUS.
<
<
USE C,FPILEP < C : ENTREE PRECEDENTE,
USE W,FPILE < W : ENTREE COURANTE.
CAL: EQU $
JMP CAL3 < ????
<
< EDITION DE LA DEMI-BARRE COURANTE :
<
LA X
STA SEG+SEGX
LA Z
STA SEG+SEGY
LA XP
STA SEG+2+SEGX
LA ZP
STA SEG+2+SEGY
LAD OG
SVC 0
LAD WG
SVC 0
CAL3: EQU $
BSR ARDN
ANDI '1F
ADRI 1,A < A=SEUIL ALEATOIRE DE FIN.
CP LONG < ARRET ???
JL CAL1 < NON, ON CONTINUE....
<
< NON, GENERATION D'UNE ETOILE :
<
LA X
JAL CAL2 < PROJECTION INVALIDE.
CP MAX
JG CAL2 < PROJECTION INVALIDE.
STA SEG+SEGX < OK,
STA SEG+2+SEGX < SEGX <-- (X).
LA Z
JAL CAL2 < PROJECTION INVALIDE.
CP MAX
JG CAL2 < PROJECTION INVALIDE.
STA SEG+SEGY < OK,
STA SEG+2+SEGY < SEGY <-- (Y).
LAD OG
SVC 0
LA Y
SLRS 6
LR A,X
LBY &ALUM < A=BRILLANCE DE L'ETOILE.
STBY SIZE+1 < LA COORDONNEE Y DONNE LA TAILLE
LAD SIZE < APPARENTE DE L'ETOILE.
SVC 0
LAD WGPP
SVC 0 < TRACE DE L'ETOILE.
CAL2: EQU $
RSR < ET C'EST TOUT...
<
< G E N E R A T I O N D ' U N N I V E A U
< I N F E R I E U R :
<
CAL1: EQU $
PSR C < SAVE L'ENTREE PRECEDENTE,
LR W,C < C BASE TOUJOURS L'ENTREE
< PRECEDENTE.
ADRI LPILE,W < W BASE L'ENTREE COURANTE.
<
< LONGUEUR DE LA NOUVELLE BARRE :
<
LA LONGP
FLT
FMP CTTE2
FIX
STA LONG
<
< ORIENTATION DE LA NOUVELLE BARRE :
<
BSR ARDN < A=ANGLE DE 0 A 359 DEGRE.
FLT
FDV FC360
FMP DEUXPI
FST ALPHA < ALPHA=ANGLE ALEATOIRE DE 0 A 2*PI.
BSR ARDN < A=ANGLE DE 0 A 359 DEGRE.
FLT
FDV FC360
FMP DEUXPI
FST BETA < BETA=ANGLE ALEATOIRE DE 0 A 2*PI.
<
< CALCUL DES DEPLACEMENTS AUX NOUVEAUX CENTRES :
<
FST ARG < ARG=BETA.
LAD ARG
BSR ASIN < RESUL=SIN(BETA).
LA LONG
SLRS 1 < LONG/2 : DEMI-BARRE.
FLT
FMP RESUL
FST TEMP1 < TEMP1=LONG/2*SIN(BETA).
FLD ALPHA
FST ARG < ARG=ALPHA.
LAD ARG
BSR ASIN < RESUL=SIN(ALPHA).
FLD RESUL < SIN(ALPHA).
FMP TEMP1
FIX
STA DX < DX=(LONG/2)*SIN(BETA)*SIN(ALPHA).
LAD ARG
BSR ACOS < RESUL=COS(ALPHA).
FLD RESUL
FMP TEMP1
FIX
STA DY < DY=(LONG/2)*SIN(BETA)*COS(ALPHA).
FLD BETA
FST ARG < ARG=BETA.
LAD ARG
BSR ACOS < RESUL=COS(BETA).
LA LONG
SLRS 1 < LONG/2 : DEMI-BARRE.
FLT
FMP RESUL
FIX
STA DZ < DZ=(LONG/2)*COS(BETA).
<
< NOUVEAU CENTRE DANS LA DIRECTION +1 :
<
LAI 1
STA DIREC
LA XP
AD DX
STA X < X <-- XP+DX.
LA YP
AD DY
STA Y < Y <-- YP+DY.
LA ZP
AD DZ
STA Z < Z <-- ZP+DZ.
BSR ACAL < VERS LE TRAITEMENT DE CE NOUVEAU
< CENTRE COURANT.
<
< NOUVEAU CENTRE DANS LA DIRECTION -1 :
<
LAI -1
STA DIREC
LA XP
SB DX
STA X < X <-- XP-DX.
LA YP
SB DY
STA Y < Y <-- YP-DY.
LA ZP
SB DZ
STA Z < Z <-- ZP-DZ.
BSR ACAL < VERS LE TRAITEMENT DE CE NOUVEAU
< CENTRE COURANT.
<
< RETOUR AU NIVEAU PRECEDENT :
<
ADRI -LPILE,W
PLR C
RSR < ET C'EST TOUT...
PAGE
<
<
< P R O G R A M M E P R I N C I P A L :
<
<
WORD LOC+'80
STAR: EQU $
LRP L
LA -1,L
LR A,L < INITIALISATION BASE L.
LAD STACK-1
LR A,K < INITIALISATION K.
LA APILE
LR A,W < INITIALISATION DES BASES W,
LR A,C < ET C.
<
< INITIALISATION DE LA PILE DE RECURSIVITE :
<
LA MAX
SLRS 1
STA XP < ON SE PLACE AU CENTRE
STA YP < DE
STA ZP < L'UNIVERS !!!!
<
< GENERATION DE LA GALAXIE :
<
STAR1: EQU $
LAD ERASE
SVC 0
JE STAR2 < OK...
LAD DEMCCI < ERREUR DE !ASSIGN...
SVC 0
JMP STAR1
STAR2: EQU $
LAD ESCFS < MISE EN MODE 'SPECIAL POINT
SVC 0 < PLOT MODE'.
LOOP: EQU $
BSR ARDN
SLLS 1
CP LONGP < EST-CELLE QUE L'ON AVAIT
< AU TOUR PRECEDENT ???
JE LOOP < OUI, ON DOIT EN CHANGER...
STA LONGI < LA LONGUEUR DE LA 1ERE BARRE
STA LONGP < EST ALEATOIRE....
BSR ACAL < TRAITEMENT 1ERE BARRE.
JMP LOOP < ET ON RECOMMENCE...
LAD CG
SVC 0
<
< C'EST FINI...
<
CCI: EQU $
LAD DEMCCI
SVC 0
JMP CCI < ET ON RESTE AU CCI....
PAGE
<
<
< G E N E R A T I O N D ' U N N O M B R E
< A L E A T O I R E :
<
<
< RESULTAT :
< A=NOMBRE ALEATOIRE ENTRE 0 ET 359.
<
<
RDN: EQU $
FLD UN
FMP CTTE1 < CALCUL DE U(N)*CTTE1.
FST UN1 < SAVE TEMPORAIRE.
FDV MODULO < U(N)*CTTE1/MODULO.
FIX
FLT < ENT(U(N)*CTTE1/MODULO).
FMP MODULO
FSB UN1
FNEG
FST UN < U(N) <-- U(N)*CTTE1 MODULO.
FDV FC360
FIX
FLT
FMP FC360
FSB UN
FNEG
FIX < CALCUL DE U(N) MODULO 360.
RSR
PAGE
<
<
< C O S I N U S :
<
<
< SOUS-PROGRAMME DE CALCUL DU COSINUS
< TABLE DE TRANSMISSION POINTEE PAR REGISTRE A
< - MOT1 ET MOT2 : X EN FLOTTANT
< - MOT3 ET MOT4 : Y EN FLOTTANT(RESULTAT)
<
<
LOCAL
ZZZ080: EQU $
ZZZ081: DZS 2 < NB EN FLOTTANT
ZZZ082: DZS 2
ZZZ083: DZS 1 < SIGNE
ZZZ084: WORD '6403;'87ED < 2*PI
ZZZ085: WORD '6402;'87ED < PI
ZZZ086: WORD '6401;'87ED < PI/2
ZZZ087: EQU ZZZ086 < CSTES DU POLYNOME
ZZZ088: WORD 'AD00;'5110
ZZZ089: WORD '51FD;'9A2C
ZZZ090: WORD 'B3F9;'6CCE
ZZZ091: WORD '4FF4;'6BDD
WORD ZZZ080+'80
PROG
COS: EQU $
PSR A,B,L,W
LRP L < INIT. DE LA BASE L
LB -2,L
LR B,L
LR A,W < @ TABLE PARAM.
FLD 0,W
FSB ZZZ086
FNEG
FST ZZZ081
STZ ZZZ083
JAGE ZZZ092
FNEG
FST ZZZ081
IC ZZZ083
ZZZ092: EQU $
FDV ZZZ084
FIX
FLT
FMP ZZZ084
FSB ZZZ081
FNEG
FCAM ZZZ085
JL ZZZ093
FSB ZZZ085
IC ZZZ083
ZZZ093: EQU $
FCAM ZZZ086
JL ZZZ094
FSB ZZZ085
FNEG
ZZZ094: EQU $
FDV ZZZ086
FST ZZZ081
FMP ZZZ081
FST ZZZ082
FMP ZZZ091
FAD ZZZ090
FMP ZZZ082
FAD ZZZ089
FMP ZZZ082
FAD ZZZ088
FMP ZZZ082
FAD ZZZ087
FMP ZZZ081
DC ZZZ083
JNE ZZZ095
FNEG
ZZZ095: EQU $
FST 2,W
PLR A,B,L,W
RSR
PAGE
<
<
< S I N U S :
<
<
< SOUS-PROGRAMME DE CALCUL DU SINUS
< TABLE DE TRANSMISSION POINTEE PAR REGISTRE A
< - MOT1 ET MOT2 : X EN FLOTTANT
< - MOT3 ET MOT4 : Y EN FLOTTANT(RESULTAT)
<
<
LOCAL
ZZZ060: EQU $
ZZZ061: DZS 2 < NB EN FLOTTANT
ZZZ062: DZS 2
ZZZ063: DZS 1 < SIGNE
ZZZ064: WORD '6403;'87ED < 2 PI
ZZZ065: WORD '6402;'87ED < PI
ZZZ066: WORD '6401;'87ED < PI/2
ZZZ067: EQU ZZZ066 < CSTES DU POLYNOME
ZZZ068: WORD 'AD00;'5110
ZZZ069: WORD '51FD;'9A2C
ZZZ070: WORD 'B3F9;'6CCE
ZZZ071: WORD '4FF4;'6BDD
WORD ZZZ060+'80 < RELAI VERS LE LOCAL
PROG
SIN: EQU $
PSR A,B,L,W
LRP L < INIT. DE LA BASE L
LB -2,L
LR B,L
LR A,W < @ TABLE PARAM.
FLD 0,W
FST ZZZ061
STZ ZZZ063
JAGE ZZZ072
FNEG
FST ZZZ061
IC ZZZ063
ZZZ072: EQU $
FDV ZZZ064
FIX
FLT
FMP ZZZ064
FSB ZZZ061
FNEG
FCAM ZZZ065
JL ZZZ073
FSB ZZZ065
IC ZZZ063
ZZZ073: EQU $
FCAM ZZZ066
JL ZZZ074
FSB ZZZ065
FNEG
ZZZ074: EQU $
FDV ZZZ066
FST ZZZ061
FMP ZZZ061
FST ZZZ062
FMP ZZZ071
FAD ZZZ070
FMP ZZZ062
FAD ZZZ069
FMP ZZZ062
FAD ZZZ068
FMP ZZZ062
FAD ZZZ067
FMP ZZZ061
DC ZZZ063
JNE ZZZ075
FNEG
ZZZ075: EQU $
FST 2,W
PLR A,B,L,W
RSR
END STAR
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.