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# < < < D E F I N I T I O N D E S E S P A C E S : < < DIMGRA:: VAL 3 < ON TRACE DANS L'ESPACE EUCLIDIEN < A 3 DIMENSIONS... DIMGR2:: VAL DIMGRA-I < ET UNE DIMENSION DE MOINS... DIMSPH:: VAL 64 < RAYON MAXIMAL D'UNE SPHERE. 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 < < < D E F I N I T I O N D U B L O C D E S C R I P T E U R < D ' U N P O I N T : < < NPOINT:: VAL 400 < NOMBRE DE POINTS DU NUAGE A GENERER... DSEC DESCPT: EQU $ DCS3D: EQU $ < DEBUT DE LA LISTE DES COORDONNEES < TRI-DIMENSIONNELLES DANS L'ESPACE < EUCLIDIEN DE LA REPRESENTATION GRA- < PHIQUE : DFXS: FLOAT <NILK<NILK<NILK < COORDONNEE 'X', DFYS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Y', DFZS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Z'. IF $-DCS3D/DFLOT-DIMGRA,,XEIF%, IF ATTENTION : LA LISTE DES COORDONNEES EST MAUVAISE !!! XEIF%: VAL ENDIF DRAYON: WORD NILK < RAYON DE LA SPHERE. < < FIN DU DESCRIPTEUR : < LDESCP:: VAL $-DESCPT < LONGUEUR DU DESCRIPTEUR... 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 : < ANPOIN: WORD NPOINT < NOMBRE COURANT DE POINTS DU NUAGE. ADIMGR: WORD DIMGRA < DIMENSION DE L'ESPACE GRAPHIQUE DE < REPRESENTATION. XNIVP:: VAL 4 < PAS IMPLICITE DE PASSAGE D'UN NIVEAU < A L'AUTRE. AXNIVP: WORD XNIVP < PAS COURANT DE PASSAGE D'UN NIVEAU A < L'AUTRE... IERASE: WORD NEXIST < EFFACER ('EXIST'), OU NON ('NEXIST') < L'ECRAN 512... IF XOPT01-EXIST,XOPT1,,XOPT1 IWGPT: WORD EXIST < TRACER ('EXIST') OU PAS ('NEXIST') LE < NUAGE DE POINTS GENERE. XOPT1: VAL ENDIF < < 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# APWORK: EQU APFWOR < POUR LA COMPATIBILITE AVEC LES OVERLAYS < DE " +" (CF. 'SIO...'). < < DONNEES DE CALCUL D'UN < PRODUIT SCALAIRE : < APRSCA: WORD PRSCA < CE SOUS-PROGRAMME CALCULE LE PRODUIT < SCALAIRE DES 2 VECTEURS ARGUMENTS. < < POINT TRI-DIMENSIONNEL COURANT : < CS3D: EQU $ < DEBUT DES COORDONNEES 3D : FXS: FLOAT <NILK<NILK<NILK < COORDONNEE 'X' 3D, FYS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Y' 3D, FZS: FLOAT <NILK<NILK<NILK < COORDONNEE 'Z' 3D. LBUF3D:: VAL $-CS3D < NOMBRE DE MOTS POUR UN POINT 3D... IF LBUF3D/DFLOT-DIMGRA,,XEIF%, IF ATTENTION : INCOHERENCE DANS LES IF DIMENSIONS DE L'ESPACE DE TRACE GRAPHIQUE !!! XEIF%: VAL ENDIF < < DONNEES DE 'MOVE' : < APMOV1: WORD PMOV1 < DEPLACEMENT DU POINT COURANT (DFXS,DFYS, < DFZS) VERS (FXS,FYS,FZS). < < DONNEES DE LA PROJECTION : < FACT: FLOAT <NILK<NILK<NILK < FACTEUR D'ECHELLE... SFACT: FLOAT <NILK<NILK<NILK < SAUVEGARDE DE 'FACT' A CAUSE DES < ALT-MODES INTEMPESTIFS... PZ: FLOAT <NILK<NILK<NILK < POSITION DU POINT DE VUE SUR L'AXE OZ, < QUI EST DEVANT L'ECRAN... TRX: WORD NILK < TRANSLATION DU TRY: WORD NILK < TRACE (VISU ET RASTER). CS2D: EQU $ < DEBUT DES COORDONNEES 2D : YS: WORD NILK < COORDONNEES 2D DU XS: WORD NILK < POINT 3D PROJETE... LBUF2D:: VAL $-CS2D < NOMBRE DE MOTS NECESSAIRES POUR UN POINT, LBUFGR:: VAL LBUF2D+LBUF2D < ET POUR UN VECTEUR. COORDX:: VAL XS-CS2D < INDEX DE LA COORDONNEE 'X', COORDY:: VAL YS-CS2D < INDEX DE LA COORDONNEE 'Y'. APROJ: WORD PROJ < SOUS-PROGRAMME DE PROJECTION 3D --> 2D... IF XOPT01-EXIST,XOPT1,,XOPT1 < < DONNEES DU TRACE GRAPHIQUE : < BUFGR: EQU $ BUFGR1: DZS LBUF2D < ORIGINE D'UN VECTEUR, BUFGR2: DZS LBUF2D < ET EXTREMITE. DEMOG: BYTE NVPOUT;FAVOG < MISE EN GRAPHIQUE DE LA VISU. DEMCG: BYTE NVPOUT;FAVCG < RETOUR EN ALPHA-NUMERIQUE DE LA VISU. DEMWG: BYTE NVPOUT;FAVWG < ECRITURE GRAPHIQUE D'UN VECTEUR. WORD BUFGR=FCTA*NOCMO WORD LBUFGR*NOCMO DEMWD0: BYTE NVPOUT;FAVWD < DEMANDE DE MISE EN MODE NORMAL... BYTE KESC;'60;KEOT DEMWD1: BYTE NVPOUT;FAVWD < DEMANDE DE MISE EN POINTILLES... BYTE KESC;'61;KEOT DEMWD2: BYTE NVPOUT;FAVWD < DEMANDE DE MISE EN TIRETES... BYTE KESC;'63;KEOT < < DEMANDE D'EFFACEMENT < DE L'ECRAN DE LA VISU : < DEMERA: BYTE NVPOUT;FAVER < DEMANDE D'EFFACEMENT DE L'ECRAN DE LA < VISU DE DIALOGUE. XOPT1: VAL ENDIF < < 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 STORP < RANGEMENT D'UN POINT POUR 'POINT'... 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 POUR LE GENERATEUR ALEATOIRE : < XTYPX:: VAL 3571 < TYPE "COORDONNEE X", XTYPY:: VAL XTYPX+567 < TYPE "COORDONNEE Y", XTYPZ:: VAL XTYPY+2391 < TYPE "COORDONNEE Z", XTYPR:: VAL XTYPZ+12491 < TYPE "RAYON DE LA SPHERE". RDN7: WORD 793 < DECOMPTEUR D'ACCES A LA SECONDE, RDN8: WORD 1 < VALEUR COURANTE DE 'RDN7'. RDN9: WORD 0 < SECONDE COURANTE... RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT. RDN1: WORD 5189 < CONSTANTES DE CALCUL RDN3:: VAL 19 < DES NOMBRE ALEATOIRES... RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RDN5: WORD 4021 RDN6:: VAL 23 POINTS: WORD 16807 KRDN1: WORD 0 KRDN2: WORD 0 XKRDN1:: VAL 3 < INCREMENTEUR DE 'KRDN1'. XKRDN2:: VAL 7 < DECOMPTEUR DE 'KRDN2'. ASPRDN: WORD SPRDN < GENERATEUR DE NOMBRES ALEATOIRES. < < DEFINITION DU NUAGE : < AMPOIN: WORD NPOINT < NOMBRE MAXIMAL DE POINTS DU NUAGE. < < DEFINITION DES SPHERES, < APPELEES AUSSI DISQUES : < XNIV0:: VAL 4 < PREMIER NIVEAU DU TRACE... XEPAIS: VAL DIMSPH*XXXMOY+Z < DEFINITION DU PLUS GRAND CARRE CIRCONS- < CRIT A UN DISQUE (SPHERE PROJETEE). AEPAIS: WORD XEPAIS < DEFINITION DU COTE DU CARRE CIRCONS- < CRIT AU DISQUE COURANT, DEPAIS: WORD XEPAIS-Z/XXXMOY < DEFINITION DU RAYON DU DISQUE COURANT. IF DIMSPH*XNIVP-XXN255-Z,XEIF%,XEIF%, IF ATTENTION : IL VA Y AVOIR DEBORDEMENT IF DES NIVEAUX DE GRIS REPRESENTATIFS !!! XEIF%: VAL ENDIF SAVEX: WORD NILK < COORDONNEES DU SAVEY: WORD NILK < CENTRE. ACERCL: WORD CERCLE < REMPLISSAGE D'UN DISQUE... < < VARAIBLES DE MANOEUVRE : < FWORK1: FLOAT <NILK<NILK<NILK FWORK2: FLOAT <NILK<NILK<NILK 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 PAGE < < < P I L E D E T R A V A I L : < < STACK: EQU $ DZS 64 PROG USE W,DESCPT 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 $ $EQU ASTORP WORD POINT < AFIN DE MARQUER VIA LA LISTE 'LNIVO'... $EQU POINT < < 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 APOINT < 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# PAGE < < < D E P L A C E M E N T D U P O I N T C O U R A N T : < < < ARGUMENTS : < (W)=ADRESSE DU DESCRIPTEUR DE POINT COURANT. < < PMOV1: EQU $ < < INITIALISATIONS : < PSR A,B,X < < DEPLACEMENT : < LAD DCS3D < (A)=ADRESSE DE L'EMETTEUR (DESCRIPTEUR < COURANT), LRM B,X WORD CS3D < (B)=ADRESSE DU POINT COURANT, WORD LBUF3D < (X)=NOMBRE DE POINTS A DEPLACER. MOVE < ET MOVE : DESCRIPTEUR --> (FXS,FYS,FZS). < < ET RETOUR : < PLR A,B,X RSR PAGE < < < P R O J E C T I O N 3 D --> 2 D : < < < ARGUMENT : < (FXS,FYS,FZS)=POINT 3D. < < < RESULTAT : < (XS,YS)=POINT 2D PROJETE SUIVANT 'IPROJ'. < < PROJ: EQU $ < < INITIALISATIONS : < PSR A,B < SAUVEGARDES... #/FLD# FZS < < PROJECTION PERSPECTIVE SUR 'OX' : < FDV PZ BSR ATSFLO FSB F1 BSR AFNEG BSR ASFWOR < 1-(FZS/PZ) BSR AFCAZ JNE EOK3 < OK, 1-(FZS/PZ)#0... QUIT XXQUIT < E R R E U R P R O G R A M M E ... EOK3: EQU $ #/FLD# FXS FDV FWORK < FXS/(1-(FZS/PZ)) BSR ATSFLO < < CALCUL DE 'XS' : < FDV FACT < MISE A L'ECHELLE 2D... BSR AROND AD TRX < TRANSLATION 2D... STA XS < < PROJECTION PERSPECTIVE SUR 'OY' : < #/FLD# FYS FDV FWORK < FYS/(1-(FZS/PZ)) BSR ATSFLO < < CALCUL DE 'YS' : < FDV FACT < MISE A L'ECHELLE 2D... BSR AROND AD TRY < TRANSLATION 2D... STA YS < < SORTIE : < PLR A,B < RESTAURATIONS... RSR XXXPRO: VAL YYYFLO < 'YYYFLO'. CALL #SIP UTILITAIRES# PAGE < < < P R O D U I T S C A L A I R E D E 2 V E C T E U R S : < < < ARGUMENTS : < (A)=ADRESSE DU PREMIER VECTEUR 'VECT1', < (B)=ADRESSE DU DEUXIEME VECTEUR 'VECT2'. < < < RESULTAT : < (A,B)=VALEUR DU PRODUIT SCALAIRE... < < < ATTENTION : < AUX BASES 'L' ET 'W' !!! < < PRSCA: EQU $ VECT1X:: MOT O < X(VECT1), VECT1Y:: MOT VECT1X+DFLOT < Y(VECT1), VECT1Z:: MOT VECT1Y+DFLOT < Z(VECT1). VECT2X:: MOT O < X(VECT2), VECT2Y:: MOT VECT2X+DFLOT < Y(VECT2), VECT2Z:: MOT VECT2Y+DFLOT < Z(VECT2). < < INITIALISATIONS : < PSR Y,L,W < SAUVEGARDE DE 2 BASES ; MAIS 'C' NE DOIT < PAS ETRE UTILISEE A CAUSE DU BLOC FLOT- < TANT... LR L,Y < SAUVEGARDE DE 'L' DANS 'Y' POUR POUVOIR < ACCEDER EVENTUELLEMENT LE 'LOCAL'... LR A,L < (L)=BASE DU VECTEUR 'VECT1', LR B,W < (W)=BASE DU VECTEUR 'VECT2'. < < CALCUL DU PRODUIT SCALAIRE : < #/FLD# VECT1X,L < X(1), FMP VECT2X,W < X(1)*X(2), BSR ASFWOR < ET SAVE... #/FLD# VECT1Y,L < Y(1), FMP VECT2Y,W < Y(1)*Y(2), BSR APFWOR < X(1)*X(2)+Y(1)*Y(2), < ET SAVE... #/FLD# VECT1Z,L < Z(1), FMP VECT2Z,W < Z(1)*Z(2), BSR APFWOR < (A,B)=X(1)*X(2)+Y(1)*Y(2)+Z(1)*Z(2), < SOIT LE PRODUIT SCALAIRE DES 2 < VECTEURS 'VECT1' ET 'VECT2'... < ET MISE DANS 'FWORK', ON NE SAIT < JAMAIS... < < ET RETOUR : < PLR Y,L,W RSR PAGE < < < G E N E R A T E U R A L E A T O I R E : < < < ARGUMENT : < (X)=FONCTION DU NUMERO DU POINT COURANT, < (Y)=CODE FONCTION DU TYPE DE COORDONNEE (X/Y/Z). < < < RESULTAT : < (A,B)=NOMBRE ALEATOIRE FLOTTANT. < < SPRDN: EQU $ LA RDN < GENERATION DE NOMBRES ALEATOIRES : EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE... MP RDN1 SCRD RDN3 JANE SPMOYC LR B,A JANE SPMOYC LA KRDN1 ADRI XKRDN1,A SCRS XKRDN2 STA KRDN1 < PROGRESSION DE 'KRDN1'... SPMOYC: EQU $ EORR X,A STA RDN DC RDN8 LA RDN9 < (A)=RDN9 A PRIORI... JNE SPRDN1 < ET BIEN OUI... CE N'EST PAS L'HEURE... LA RDN7 < C'EST L'HEURE D'ALLER CHERCHER STA RDN8 < LA SECONDE COURANTE ??!?!??! ACTD XXXTIM < (A)=HEURE COURANTE EN MULTIPLE DE 2S. STA RDN9 < ET MEMORISATION... SPRDN1: EQU $ EOR RDN STA RDN LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE... MP RDN5 EOR POINTS SCRD RDN6 JANE SPMOYF LR B,A JANE SPMOYF LA KRDN2 ADRI -XKRDN2,A SCRS XKRDN1 STA KRDN2 < PROGRESSION DE 'KRDN2'... SPMOYF: EQU $ EORR Y,A STA RDN4 EOR RDN FLT < (A,B)=NOMBRE ALEATOIRE... 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 (LE RAYON EST XEPAIS-Z/XXXMOY). < < CERCLE: EQU $ < < INITIALISATIONS : < PSR X,Y LR X,B < (B)='X' DU CENTRE, PSR Y < SAUVEGARDE DE 'Y' DU CENTRE. LA DEPAIS 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 DEPAIS < (X)=NOMBRE DE LIGNES A BALAYER. ADRI Z,X 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 DEPAIS < (X)=NOMBRE DE POINTS PAR LIGNE. ADRI Z,X 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 DEPAIS < EST-ON HORS DU DISQUE ?? JGE CERCL3 < OUI, ON IGNORE CE POINT... SB DEPAIS < NON : NGR A,A < ON CALCULE DONC LE NIVEAU DU < POINT QUE L'ON VA TRACER : MP AXNIVP ADRI XNIV0,B STB VENIVO < CE NIVEAU EST PROPORTIONNEL A LA < DISTANCE AU CENTRE... LA VECTX1 LB VECTY1 PSR A,B < SAUVEGARDE DE (X1,Y1) VISU... SARS XXDEDX STA VECTX1 < PASSAGE AUX LR B,A SARS XXDEDY STA VECTY1 < COORDONNEES 512... BSR VECTA1 < ET ON MARQUE LE POINT (X1,Y1)... PLR A,B STA VECTX1 < RESTAURE LES STB VECTY1 < COORDONNEES VISU... CERCL3: EQU $ PLR B < RESTAURE L'ABSCISSE DU CENTRE, DO BIT>XXDEDX 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 DO BIT>XXDEDY IC VECTY1 < DE LA NOUVELLE LIGNE, JDX CERCL1 < SI ELLE EXISTE... < < ET RETOUR : < PLR X,Y RSR PAGE < < < P O I N T D ' E N T R E E : < < DEBUT: EQU $ < < INITIALISATION DES REGISTRES : < LRM C,K WORD COM+DEPBAS < POSITIONNEMENT DE 'C', 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'... < < < E N T R Y D E R E B O U C L A G E : < < #/FLD# FACT < SAUVEGARDE DE 'FACT' #/FST# SFACT < A CAUSE DES ALT- < MODES INTEMPESTIFS... DEBUT4: EQU $ #/FLD# SFACT #/FST# FACT < AU CAS OU UN MALHEUREUX ALT-MODE... < < 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'...). < < VALIDATION DE 'ANPOIN' : < DEBUT9: EQU $ LA ANPOIN < ACCES A 'ANPOIN' : JALE DEBUTA < ERREUR... CP AMPOIN < VALIDATION : JLE DEBUTB < OK... DEBUTA: EQU $ QUIT XXQUIT < E R R E U R P R O G R A M M E ... JMP DEBUT9 < ET ON RE-TESTE !!! DEBUTB: EQU $ < < VALIDATION DE 'AEPAIS' : < DEBUTC: EQU $ LA AEPAIS < (A)=EPAISSEUR DEMANDEE POUR LES < RECTANGLES, JALE DEBUTE < ERREUR... CPI XEPAIS JG DEBUTE < ERREUR... ADRI -Z,A SLRS XXXMOY=K < CALCUL DE XEPAIS-Z/XXXMOY : JALE DEBUTE < ERREUR... JNC DEBUTD < OK, LA DIVISION TOMBE JUSTE... DEBUTE: EQU $ QUIT XXQUIT < 'AEPAIS' DOIT ETRE IMPAIR ET DE VALEUR < VALEUR CONVENABLE... JMP DEBUTC < ET ON RE-TESTE... DEBUTD: EQU $ STA DEPAIS < ET MEMORISATION DE XEPAIS-Z/XXXMOY... < < < G E N E R A T I O N D U N U A G E D E P O I N T S : < < LX ANPOIN < (X)=NOMBRE DE POINTS A GENERER, LRM W WORD LPOINT < (W)=ADRESSE DE BASE DE LA LISTE DES < DESCIPTEURS DE POINTS. GEN1: EQU $ < < GENERATION DES COORDONNEES : < LRM Y WORD XTYPX < (Y)=TYPE "COORDONNEE X". BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE, #/FST# DFXS < CE QUI DONNE 'X' ALEATOIRE. LRM Y WORD XTYPY < (Y)=TYPE "COORDONNEE Y", BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE, #/FST# DFYS < CE QUI DONNE 'Y' ALEATOIRE. #/FLD# F0 #/FST# DFZS < DFZS=0 A PRIORI... LA ADIMGR CPI DIMGRA < COMBIEN DE DIMENSIONS POUR LA VISUALI- < SATION ??? JNE GEN5 < 2... LRM Y < 3... WORD XTYPZ < (Y)=TYPE "COORDONNEE Z", BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE, #/FST# DFZS < CE QUI DONNE 'Z' ALEATOIRE. GEN5: EQU $ < < GENERATION DU RAYON : < LRM Y WORD XTYPR < (Y)=TYPE "RAYON". GEN4: EQU $ BSR ASPRDN < (A,B)=NOMBRE ALEATOIRE, BSR AFABS < SEULE LA VALEUR ABSOLUE EST INTERESSANTE, BSR AFIX < (A)=NOMBRE ENTIER POSITIF ALEATOIRE, XWOR%1: VAL DIMSPH=K IF BIT>XWOR%1-DIMSPH,,XEIF%, IF ATTENTION : 'DIMSPH' DOIT ETRE UNE PUISSANCE DE 2 !!! XEIF%: VAL ENDIF ANDI DIMSPH-N < CALCUL MODULO 'DIMSPH' DU RAYON... JAE GEN4 < NUL, REFUSE... STA DRAYON < OK, MEMORISATION DU RAYON DE LA SPHERE < CENTREE SUR LE POINT COURANT... < < PASSAGE AU DESCRIPTEUR SUIVANT : < ADRI LDESCP,W < PASSAGE AU DESCRIPTEUR SUIVANT, JDX GEN1 < S'IL EXISTE... IF XOPT01-EXIST,XOPT1,,XOPT1 < < < T R A C E D U N U A G E D E P O I N T S : < < IF NEXIST-K,,XEIF%, IF ATTENTION : LE TEST SUIVANT EST IDIOT !!! XEIF%: VAL ENDIF CPZ IWGPT < DOIT-ON TRACER LE NUAGE ??? JE GEN2 < NON... #/FLD# FACT PSR A,B < SAUVEGARDE DE 'FACT'... FDV F05 #/FST# FACT < AFIN DE VOIR L'ENSEMBLE DU DESSIN... LAD DEMERA < OUI : SVC < ON EFFACE L'ECRAN. LX ANPOIN < (X)=NOMBRE DE POINTS A TRACER, LRM W WORD LPOINT < (W)=ADRESSE DE LA LISTE DES DESCRIPTEURS. GEN3: EQU $ PSR X BSR APMOV1 < DEPLACEMENT DU DESCRIPTEUR COURANT (W) < VERS LE POINT COURANT (FXS,FYS,FZS), BSR APROJ < ET PROJECTION 2D --> 3D. LRM A,B,X WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT, WORD BUFGR1 < (B)=ADRESSE DU BUFFER ORIGINE GRAPHIQUE, WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER, MOVE < ET MISE EN PLACE DE L'ORIGINE. LRM B,X WORD BUFGR2 < (B)=ADRESSE DU BUFFER EXTREMITE GRAPHIQUE WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER, MOVE < ET MISE EN PLACE DE L'EXTREMITE. LAD DEMOG SVC < ET ON FAIT UNE MISE EN GRAPHIQUE, PERMET- < TANT PAR LA MEME OCCASION DE NE PAS < CHAINER LES POINTS ENTRE-EUX... LAD DEMWG SVC < TRACE DU POINT COURANT... PLR X < RESTAURE LE DECOMPTE, ADRI LDESCP,W < PASSAGE AU DESCRIPTEUR SUIVANT, JDX GEN3 < S'IL EXISTE... LAD DEMCG SVC < ET RETOUR EN ALPHA-NUMERIQUE... PLR A,B #/FST# FACT < RESTAURATION DE 'FACT'... GEN2: EQU $ XOPT1: VAL ENDIF < < < G E N E R A T I O N D E L ' I M A G E : < < GEN69: EQU $ QUIT XXQUIT < P O U R R E F L E C H I R ... 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'. < < INITIALISATION DES < CONDITIONS DE TRACE : < GEN69N: EQU $ LAI VECTSB STA VECTRS < MISE EN MODE 'SBT', SOIT 'OU-FLOU', LRM A WORD XXN255+Z=K+I STA VEDECA < AFIN D'ECRASER LE NIVEAU ANTERIEUR... < < VISUALISATION DES POINTS DU NUAGE : < LX ANPOIN < (X)=NOMBRE DE POINTS DANS LE NUAGE, LRM W WORD LPOINT < (W)=ADRESSE DE LA BASE DES DEXCRIPTEURS. GEN70: EQU $ PSR X < SAUVEGARDE DU NOMBRE DE POINTS... BSR APMOV1 < DEPLACEMENT DE P(I) --> (FXS,FYS), BSR APROJ < QUE L'ON PROJETTE, LRM A,B,X WORD CS2D < (A)=ADRESSE DU POINT 2D COURANT, WORD BUFGR1 < (B)=ADRESSE DU BUFFER ORIGINE GRAPHIQUE, WORD LBUF2D < (X)=NOMBRE DE MOTS A DEPLACER, MOVE < ET MISE EN PLACE DE L'ORIGINE P(I)... LA DRAYON < (A)=RAYON DE LA SPHERE, STA DEPAIS < CE QUI DONNE LE RAYON DU DISQUE, SLLS XXXMOY=K ADRI Z,A STA AEPAIS < ET LE COTE DU CARRE CIRCONSCRIT... LX BUFGR1+COORDX LY BUFGR1+COORDY BSR ACERCL < VISUALISATION DU POINT COURANT. PLR X < RESTAURE : < (X)=NOMBRE DE POINTS DU NUAGE... ADRI LDESCP,W < PASSAGE AU POINT P(I) SUIVANT, JDX GEN70 < S'IL EXISTE... < < < 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,K < ON REINITIALISE 'C' ET 'K' AU CAS < D'UNE RE-ENTREE PAR UN 'ALT-MODE'... WORD COM+DEPBAS < 'C', WORD STACK-DEPILE < 'K'. BSR AGOTO WORD DEBUT4 < (A)=ADRESSE D'ITERATION SUR ALT-MODE... PAGE < < < L I S T E D E S D E S C R I P T E U R S D E P O I N T S : < < LPOINT: EQU $ IF LPOINT=FCTA,,,XEIF% IF ATTENTION : A CAUSE DE 'VOISEX', TOUTES LES IF ADRESSES DE 'LPOINT' DOIVENT ETRE STRICTEMENT IF POSITIVES !!! XEIF%: VAL ENDIF DO NPOINT DZS LDESCP IF $=FCTA-K,,,XEIF% IF ATTENTION : A CAUSE DE 'VOISEX', IF TOUTES LES ADRESSES DE 'LPOINT' IF DOIVENT ETRE STRICTEMENT POSITIVES !!! XEIF%: VAL ENDIF PAGE < < < U P D A T E S : < < $EQU PZ FLOAT 1000 < POINT DE VUE DE L'OBSERVATEUR. $EQU FACT FLOAT 70 < FACTEUR D'ECHELLE DE LA PROJECTION. $EQU TRX WORD SIZXVI/XXXMOY < X-TRANSLATION GRAPHIQUE. $EQU TRY WORD SIZYVI/XXXMOY < Y-TRANSLATION GRAPHIQUE. $EQU ADIMGR WORD DIMGR2 < DIMENSION DE L'ESPACE GRAPHIQUE. 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