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