IDP "ESPACE - RELEASE 08/10/1979" IDP "JOHN F. COLONNA" < < < E D I T E U R G R A P H I Q U E < T R I - D I M E N S I O N N E L : < < PROG DIM: VAL 3 SIZE: VAL 1024 < NBRE DE POINTS LINEAIRES < ADRESSABLES D'UN ECRAN. ZERO: EQU $ DZS '10 < POUR L'INTERFACE CMS5... WORD GRAPH < ADRESSE DU POINT D'ENTREE. < < Z O N E D E R E S T A R T : < LOCAL WORD 0 < POUR FAIRE $=$+1. PROG PGRAPH: EQU $ < A NOTER : P='12 !!!!! WORD '1E16 < CAS DES ALT-MODES... JMP PGRAPH < NE PAS INSISTER.... PAGE < < < E S P A C E L I B R E D E T R A V A I L : < < < DANS LE 2 DERNIERS K MEMOIRE < DES 6K DEMANDES. PAGE < < M A T R I C E S D E T R A N S F O R M A T I O N : < TABLE TC: VAL 1 < NUMERO DE LA 1ERE TRANSFORMATION. MATRIX: EQU $ < < TRANSFORMATIONS LIBRES LAISSEES A LA < LIBRE DISPOSITION DE L'UTILISATEUR (INITIALISEES < PAR L'ELEMENT NEUTRE) : < TUS1: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 1;0;0;0;1;0;0;0;1 WORD 1 < < NBRE DE TRANSFORMATIONS LIBRES : < NTUS: VAL TC-TUS1 < < ROTATION DE +16 DEGRE AUTOUR DE OX : < TRPOX: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 25 WORD 25;0;0;0;24;-7;0;7;24 WORD 22 < < ROTATION DE +16 DEGRE AUTOUR DE OY : < TRPOY: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 25 WORD 24;0;7;0;25;0;-7;0;24 WORD 22 < < ROTATION DE +16 DEGRE AUTOUR DE OZ : < TRPOZ: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 25 WORD 24;-7;0;7;24;0;0;0;25 WORD 22 < < ROTATION DE -16 DEGRE AUTOUR DE OX : < TRMOX: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 25 WORD 25;0;0;0;24;7;0;-7;24 WORD 22 < < ROTATION DE -16 DEGRE AUTOUR DE OY : < TRMOY: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 25 WORD 24;0;-7;0;25;0;7;0;24 WORD 22 < < ROTATION DE -16 DEGRE AUTOUR DE OZ : < TRMOZ: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 25 WORD 24;7;0;-7;24;0;0;0;25 WORD 22 < < ROTATION DE +PI/2 AUTOUR DE OX : < TR1OX: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 1;0;0;0;0;-1;0;1;0 WORD 4 < < ROTATION DE +PI/2 AUTOUR DE OY : < TR1OY: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 0;0;1;0;1;0;-1;0;0 WORD 4 < < ROTATION DE +PI/2 AUTOUR DE OZ : < TR1OZ: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 0;-1;0;1;0;0;0;0;1 WORD 4 < < ROTATION DE -PI/2 AUTOUR DE OX : < TR3OX: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 1;0;0;0;0;1;0;-1;0 WORD 4 < < ROTATION DE -PI/2 AUTOUR DE OY : < TR3OY: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 0;0;-1;0;1;0;1;0;0 WORD 4 < < ROTATION DE -PI/2 AUTOUR DE OZ : < TR3OZ: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 0;1;0;-1;0;0;0;0;1 WORD 4 < < SYMETRIE PLANNE PARALLELE A OX : < TSPOX: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD -1;0;0;0;1;0;0;0;1 WORD 2 < < SYMETRIE PLANNE PARALLELE A OY : < TSPOY: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 1;0;0;0;-1;0;0;0;1 WORD 2 < < SYMETRIE PLANNE PARALLELE A OZ : < TSPOZ: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 1;0;0;0;1;0;0;0;-1 WORD 2 < < SUBSTITUTION OX,OY : < TEXY: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 0;1;0;1;0;0;0;0;1 WORD 2 < < SUBSTITUTION OY,OZ : < TEYZ: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 1;0;0;0;0;1;0;1;0 WORD 2 < < SUBSTITUTION OZ,OX : < TEZX: VAL TC TC: VAL TC+1 < +1 SUR LE NUMERO TRANSFORMATION. WORD 0 WORD 0;0;1;0;1;0;1;0;0 WORD 2 < < NOMBRE DE TRANSFORMATIONS RECONNUES : < NT: VAL TC-1 < < L I S T E D E S C U R S E U R S V I R T U E L S : < NCV: VAL 20 < NBRE DE CURSEURS VIRTUELS. < < L I S T E D E S E C H E L L E S C O U R A N T E S : < NSCAL: VAL 20 < NBRE D'ECHELLES COURANTES. < < L I S T E D E S T R A N S F O R M A T I O N S < C O U R A N T E S : < NTC: VAL 20 < NBRE DE TRANSFORMATIONS COURANTES. PAGE < < < C O M M O N : < < COMMON COM: EQU $ WORD 0 < POUR LE BLOC FLOTTANT !!! < < A C C E S A L ' I N T E R P R E T E U R : < AINT: WORD INT < PASSAGE AU MODE INTERPRETATIF , < AVEC ((K)) COMME ARGUMENT. AINTA: WORD INTA < PASSAGE AU MODE INTERPRETATIF , < AVEC (A) COMME ARGUMENT. < < L I S T E D E S D E S C R I P T E U R S < D E C O N T E X T E : < LCON: WORD $+1,X WORD CONCV < DESCRIPTEUR 0 (CURSEUR VIRTUEL). WORD CONSCA < DESCRIPTEUR 1 (ECHELLE). WORD CONTC < DESCRIPTEUR 2 (TRANSFORMATION). < < C U R S E U R V I R T U E L : < DIMCV: VAL 2 < UNE COORDONNEE OCCUPERA 2 MOTS < LORSQU'ELLE EST EN FLOTTANT. CV: EQU $ DZS 2*DIMCV*DIM X: VAL 0*DIMCV Y: VAL 1*DIMCV Z: VAL 2*DIMCV CVL: EQU CV < CURSEUR VIRTUEL RAPPORTE AU < REFERENTIEL LOCAL INSTANTANE. CVG: EQU DIMCV*DIM+CV < CURSEUR VIRTUEL GLOBAL < RAPPORTE A L'ECRAN TRI-DI- < MENSIONNEL DE LA VISU (!!!!). XL: EQU CVL+X YL: EQU CVL+Y ZL: EQU CVL+Z XG: EQU CVG+X YG: EQU CVG+Y ZG: EQU CVG+Z < < CONTEXTE CURSEUR VIRTUEL COURANT : < CONCV: EQU $ NUMCV: WORD 0 < NUMERO*2*DIM DU CURSEUR < VIRTUEL COURANT. ALCV: WORD LCV < ADRESSE DE LA LISTE DES < CURSEURS VIRTUELS. C6: WORD 2*DIMCV*DIM < CONSTANTE MULTIPLICATIVE. ANCV: WORD NCV < NBRE MAX DE CV COURANTS. ACV: WORD CV < @CURSEUR VIRTUEL COURANT. WORD 0 < POINTEUR DE PILE (MODE PS/PL). < < D E P L A C E M E N T V E C T O R I E L D E C V : < DV: EQU $ DZS DIMCV*DIM < LE VECTEUR DV CONTIENT LES < DEPLACEMENT DE CV LORS DES < COMMANDES 1,2,3,4,5,6. < < F A C T E U R S D ' E C H E L L E : < DX: WORD 1 < INITIALISE A 1 POINT SUR OX. DY: WORD 1 < INITIALISE A UN POINT SUR OY. DZ: WORD 1 < INITIALISE A UN POINT SUR OZ. SCALE: WORD 1 < FACTEUR D'ECHELLE COMMUN < A DX,DY,DZ. < < CONTEXTE ECHELLE COURANTE : < CONSCA: EQU $ NUMSCA: WORD 0 < NUMERO*(DIM+1) DE L'ECHELLE < COURANTE. ALSCAL: WORD LSCAL < ADRESSE DE LA LISTE DES < ECHELLES COURANTES. CSCAL: WORD DIM+1 < CONSTANTE DE TRANSLATION ET < CONSTANTE MULTIPLICATIVE. ANSCAL: WORD NSCAL < NBRE MAX D'ECHELLES COURANTES. ASCA: WORD DX < ADRESSE DE L'ECHELLE COURANTE. WORD 0 < POINTEUR DE PILE (MODE PS/PL). < < S E G M E N T C O U R A N T : < SEG: EQU $ DZS 2*DIMCV*DIM SEGORG: EQU SEG < ORIGINE DU SEGMENT COURANT. SEGEXT: EQU DIMCV*DIM+SEG < EXTREMITE DU SEGMENT COURANT. < < P R O J E C T I O N D U S E G M E N T C O U R A N T : < SEG2: EQU $ < PROJECTION PLANNE DE SEGC. < < NOTA : < LES 4 PREMIERS MOTS DE SEG2 < CONTIENNENT M1 ET M2 , ET LES < 4 DERNIERS N1 ET N2. < DO 4 DZS 2 < COUPLE (Z,X). DZS 2 < TAMPON DE PRUDENCE (CF. LE CAS < OU 2 POINTS NON OVERCREEN < ONT ETE DECOUVERTS ; LORS DE < LA RECHERCHE DU POINT D'INTER- < SECTION SUIVANT , W POINTE A LA < SUITE DE 'INTER' .....) SEGOR2: EQU SEG2 < PROJECTION DE L'ORIGINE < DU SEGMENT COURANT. SEGEX2: EQU SEG2+2 < PROJECTION DE L'EXTREMITE DU < SEGMENT COURANT. < < EXTREMITES M1 ET M2 DU SEGMENT COURANT PROJETE : < NZ: VAL 0 < COORDONNEE VERTICALE DE M1/M2. NX: VAL 1 < COORDONNEE HORIZONTALE DE M1/M2. X1: EQU SEGOR2+NX < X(M1). Z1: EQU SEGOR2+NZ < Z(M1). X2: EQU SEGEX2+NX < X(M2). Z2: EQU SEGEX2+NZ < Z(M2). < < EQUATION DE LA DROITE SUPPORT DU SEGMENT < COURANT PROJETE SUR L'ECRAN : < P1: WORD 0 < P1=Z2-Z1. MP1: WORD 0 < MP1=-P1. P2: WORD 0 < P2=X2-X1. P3: DZS 2 < P3=X2*Z1-X1*Z2. < (DOUBLE PRECISION). < < DEFINITION DES POINTS M1,M2,N1,N2 : < (DANS LA ZONE SEG2) < M1: VAL 0 M2: VAL 2 N1: VAL 4 N2: VAL 6 < < POINTS D'INTERSECTION DE LA DROITE M1M2 AVEC L'ECRAN : < INTER: EQU SEG2+N1 < SOIENT N1 ET N2 CES 2 POINTS , < S'ILS EXISTENT. < < CONSTANTE DE TRAVAIL : < INFINI: WORD '8000 ACALX: WORD CALX < CALCUL DE X , Z ETANT DONNE. ACALZ: WORD CALZ < CALCUL DE Z , X ETANT DONNE. < (SUR LA DROITE M1M2). AOVS: WORD OVS < TEST DES OVER-SCREEN. BORNE: WORD SIZE-1 < COORDONNEE MAXIMALE ACCESSIBLE < EN X ET Z SUR L'ECRAN. < < T R A N S F O R M A T I O N S G E O M E T R I Q U E S < E L E M E N T A I R E S : < < FORMAT : < LES TRANSFORMATIONS GEOMETRIQUES ELEMENTAIRES < SONT DEFINIES A L'AIDE DE MATRICES < ORTHOGONALES 3*3 , DONT LE FORMAT EST LE < SUIVANT : < < M=DIV,(A11,A12,A13,A21,A22,A23,A31,A32,A33),PERIOD. < DIV: VAL 0 < DIV EST LE DIVISEUR DES COEF- < FICIENTS ENTIERS DES MATRICES < DE TRANSFORMATIONS ; SI CELUI-CI < VAUT 0 , IL EST ASSIMILE A 1. A11: VAL 1 A12: VAL 2 A13: VAL 3 A21: VAL 4 A22: VAL 5 A23: VAL 6 A31: VAL 7 A32: VAL 8 A33: VAL 9 PERIOD: VAL 10 < PERIOD DONNE LE 'DEGRE' < D'IDEMPOTENCE DE CHAQUE < TRANSFORMATION T : < SI PERIOD=N : < T*T*...(N FOIS)...*T=O. < (ELEMENT NEUTRE). CTE1: VAL DIM*DIM+2 < NBRE D'ELEMENTS D'1NE MATRICE. < < TRANSFORMATION COURANTE : < TRANSN: WORD TRANST,X < RELAI INDEX INDIRECT VERS TRANST. TRANSC: DZS 2 < 1 BIT PAR TRANSFORMATION < ELEMENTAIRE PRESENTE. < < CONTEXTE TRANSFORMATION COURANTE : < CONTC: EQU $ NUMTC: WORD 0 < NUMERO*(NT+2/2+2) DE LA < TRANSFORMATION COURANTE. ALTC: WORD LTC < ADRESSE DE LA LISTE DES < TRANSFORMATIONCS COURANTES. CTC: WORD NT+2/2+2 < CONSTANTE MULTIPLICATIVE ET < DE TRANSLATION. ANTC: WORD NTC < NBRE MAX DE TRANSFORMATIONS < COURANTES. ATC: WORD TRANST < @TRANSFORMATION COURANTE. WORD 0 < POINTEUR DE PILE (MODE PS/PL). < < CONSTANTES DE TRAVAIL : < AMAT: WORD MATRIX-CTE1 < @ DE LA MATRICE 0 DES TRANSFOR- < MATIONS ORTHOGONALES. AMATC: WORD 0 < RELAI VERS LA MATRICE DE LA < TRANSFORMATION ELEMENTAIRE < COURANTE. AMATCX: WORD 0 < RELAI INDEXE VERS LA MATRICE < DE LA TRANSFORMATION ELEMENTAIRE < COURANTE. C11: WORD CTE1 < NBRE D'ELEMENTS D'1NE MATRICE < DE TRANSFORMATION ELEMENTAIRE. ACOMP: WORD COMPUT < ROUTINE OPERANT LES PRODUITS < MATRICIELS PARTIELS. ACOMPF: WORD FCOMPU < IDENTIQUE A 'COMPUT' EN FLOTTANT. < < P R O J E C T I O N P L A N N E : < < < PSEUDO-MATRICE DE PROJECTION PLANNE : < MPROJ: WORD 5 WORD 4 < COSINUS(PROJECTION)=4/5. WORD 3 < SINUS(PROJECTION)=3/5. C512: WORD SIZE/2 < POUR ATTEINDRE LE CENTRE REEL < DE L'ECRAN. APROJ: WORD PROJ < ROUTINE DE PROJECTION D'1N < POINT DU 3-ESPACE SUR LE < PLAN DE L'ECRAN. < < C O N S T A N T E S D E R E C U R S I V I T E : < ATEST: WORD TEST < ADRESSE D'UNE INSTRUCTION DE < TEST (JMP/JE/JNE/...) MODIFIEE < DYNAMIQUEMENT. < < D E M A N D E S A C M S 4 : < OG: WORD '0203 < MISE EN GRAPHIQUE DE LA VISU. CG: WORD '0204 < RETOUR EN ALPHA-NUMERIQUE. WG: WORD '020A < ECRITURE GRAPHIQUE. WORD SEGOR2-ZERO*2 WORD 8 < 'ECRITURE' D'UN SEGMENT. DERASE: WORD '0205 < EFFACEMENT DE L'ECRAN. DCOPY: WORD '0B07 < HARD COPY, OU CAMERA... BYTE '1B;'17;'8D;'1D TEMPO: WORD 5;0;15 < TEMPORISATION DU PROGRAMME. CCI: WORD '0001 < RETOUR AU CCI. DEMCCI: EQU CCI < RETOUR AU CCI. < < C O N S T A N T E S G E N E R A L E S : < DUMY1: WORD 0 < WORKING STORAGE (TEMPORARY). DUMY2: WORD 0 < WORKING STORAGE (TEMPORARY). FLW1: FLOAT 0 FLW2: FLOAT 0 FAROND: FLOAT 0.5 FZERO: FLOAT 0 CUMUL: FLOAT 0 < POUR LE CALCUL DES PRODUITS MATRICIELS : < DONNE LE CUMUL LIGNE... F512: FLOAT 512 PAROND: WORD AROND < PROGRAMME D'ARRONDI DES FLOTTANTS... < < C O N S T A N T E S I N T E R P R E T A T I V E S : < ATINT: WORD TINT < ROUTINE DES TEST DU MODE < INTERPRETATIF. ALIST: WORD 0 < RELAI VERS LA LISTE A INTERPRETER < (=0 EN MODE NON INTERPRETATIF). SAVEA: WORD 0 < POUR INITIALISER A AVANT CHAUQE < APPEL INTERPRETATIF DE PRIMITIVE. SAVEB: WORD 0 < DE MEME POUR B. SAVEX: WORD 0 < IDEM POUR X. < < DONNEES DE GENERATION DE SEQUENCES 1/2/3/4/5/6 : < ZZASEQ: WORD ZZSEQ < RELAI MOT SUR 'ZZSEQ'. ZZPCS: DZS 1 < POINTEUR COURANT (OCTET) SUR 'ZZSEQ'. ZZAOS: WORD BZSEQ < RELAI OCTET SUR ZZSEQ. ZZAOSF: WORD BZSEQF < RELAI SUR FIN DE 'ZZSEQ'. < (POUR VALIDATIONS) ZZINF: WORD '8000 < L' "INFINI". ZZK: DZS 1 < UNITE COURANTE.. ZZPRIM: DZS 1 < PRIMITIVE COURANTE. ZZACAL: WORD ZZCAL < S/P DE CALCUL ET GENERATION. AZZGEN: WORD ZZGEN < S/P DE GENERATION DES SEQUENCES. < < DONNEES UTILISEES PAR LES S/P 'ZZCMT' ET 'ZZTRS'. < < DIMM:: VAL DIM*DIMCV < 'DIM' POUR COORDONNEES EN FLOTTANT. ZZTRAV: DZS DIMM < ZONE DE TRAVAIL. $EQU ZZTRAV DZS DIMCV ZZST: DZS DIMCV < SINUS TETA-ROTATION. DZS DIMCV ZZCT: DZS DIMCV < COSINUS TETA-ROTATION. ASIN: WORD XASIN < S/P DE CALCUL DE SINUS. ACOS: WORD XACOS < S/P DE CALCUL DE COSINUS. AZZCMT: WORD ZZCMT < S/P DE CALCUL D'UNE MATRICE DE TRANS- < FORMATION DONT LES COEFFICIENTS SONT < EXPRIMES EN FLOTTANT. AZZTRS: WORD ZZTRS < S/P DE TRANSFORMATION DE COORDONNEES < (X,Y,Z) FLOTTANTES, AU MOYEN DE LA < MATRICE 'ZZMAT'. < < P R I M I T I V E S D U S Y S T E M E : < PRIM: EQU $ AERR: WORD ERREUR < TRAITEMENT DES ERREURS. < < PRIMITIVES DE RECURSIVITE : < ABR: WORD BOREC < 'BEGIN' RECURSIVITE. AER: WORD EOREC < 'END' RECURSIVITE INCONDITIONNELLE AERI: WORD EORECI < 'END' RECURSIVITE 'JIX'. AERD: WORD EORECD < 'END' RECURSIVITE 'JDX'. APG: WORD PG < BEGIN RECURSIVITE INTERPRETATIVE. APD: WORD PD < END RECURSIVITE JDX INTERPRET. ASDES: WORD SDES < APPEL DE SOUS-DESSIN. ACALL: WORD CALL < APPEL TRANSLATABLE DE ROUTINE. AGO: WORD GO < GOTO INCONDITIONNEL. AGOGE: WORD GOGE < GOTO SI 'GE'. AGONE: WORD GONE < GOTO SI 'NE'. AGOGT: WORD GOGT < GOTO SI 'GT'. AGOLT: WORD GOLT < GOTO SI 'LT'. AGOEQ: WORD GOEQ < GOTO SI 'EQ'. AGOLE: WORD GOLE < GOTO SI 'LE'. < < PRIMITIVES DE TRANSFORMATIONS : < AT: WORD TRANS < AJOUT TRANSFORMATION ELEM. ART: WORD RTRANS < SUPPRESION TRANSFORMATION ELEM. AVIDE: WORD VIDE < RETOUR A L'ELEMENT NEUTRE. ACT: WORD CREAT < CREATION TRANSFORMATION USER. APX: WORD PX < PROJECTION PARALLELE A OX. APY: WORD PY < PROJECTION PARALLELE A OY. APZ: WORD PZ < PROJECTION PARALLELE A OZ. ATRPM: WORD TRPM < MEMORISATION ROTATION. ATQ13: WORD TQ13 < MEMORISATION QUADRATURE. ATUS: WORD TUS < MEMORISATION TRANSFO. USER. ATSP: WORD TSP < MEMORISATION SYMETRIE. ATECH: WORD TECH < MEMORISATION SUBSTITUTION. < < PRIMITIVES D'ECHELLE : < AMS: WORD MSCALE < MODIFICATION DE 'SCALE'. AMDX: WORD MDX < MODIFICATION DE DX. AMDY: WORD MDY < MODIFICATION DE DY. AMDZ: WORD MDZ < MODIFICATION DE DZ. AMD: WORD MD < MODIFICATION DE DX,DY,DZ. AMDXP: WORD MDXP < INCREMENTATION DE DX. AMDYP: WORD MDYP < INCREMENTATION DE DY. AMDZP: WORD MDZP < INCREMENTATION DE DZ. AMDXM: WORD MDXM < DECREMENTATION DE DX. AMDYM: WORD MDYM < DECREMENTATION DE DY. AMDZM: WORD MDZM < DECREMENTATION DE DZ. AMP: WORD MP < INCREMENTATION DE DX,DY,DZ. AMM: WORD MM < DECREMENTATION DE DX,DY,DZ. < < PRIMITIVES DE CHANGEMENT DE CONTEXTE : < AMCV: WORD MCV < POSITIONNEMENT ABSOLU CV COURANT. AMCVA: WORD MCVA < POSIT. ABS. CV COURANT , ARG. (A) ACHCV: WORD CHCV < CHANGEMENT DU CV COURANT. ACHSCA: WORD CHSCA < CHANGEMENT ECHELLE COURANTE. ACHTC: WORD CHTC < CHANGEMENT TRANS. COURANTE. APSCV: WORD PSCV < PUSH CV. APLCV: WORD PLCV < PULL CV. APSSCA: WORD PSSCA < PUSH SCALE. APLSCA: WORD PLSCA < PULL SCALE. APSTC: WORD PSTC < PUSH TC. APLTC: WORD PLTC < PULL TC. < < PRIMITIVES DE DEPLACEMENT ET DE TRACE : < AD1: WORD D1 < 1 : DEPLACEMENT DELTA(X)>0. AD2: WORD D2 < 2 : DEPLACEMENT DELTA(Y)>0. AD3: WORD D3 < 3 : DEPLACEMENT DELTA(Z)>0. AD4: WORD D4 < 4 : DEPLACEMENT DELTA(X)<0. AD5: WORD D5 < 5 : DEPLACEMENT DELTA(Y)<0. AD6: WORD D6 < 6 : DEPLACEMENT DELTA(Z)<0. APA: WORD PA < A : ORIGINE D'UN SEGMENT. APB: WORD PB < B : EXTREMITE SEQUENTIELLE SEG. ACI: WORD GOCCI < F : RETOUR AU CCI. AERAS: WORD ERASE < E : EFFACEMENT DE L'ECRAN. AO: WORD CVO < O : MISE CV COURANT A L'ORIGINE. AFIN: WORD FININT < P : FIN DE LISTE A INTERPRETER. APS: WORD PS < S : EXTREMITE ETOILEE SEGMENT. < < PRIMITIVES REGISTRES : < ARA: WORD RA < INITIALISATION REGISTRE A. ARB: WORD RB < INITIALISATION REGISTRE B. ARX: WORD RX < INITIALISATION REGISTRE X. AEGAL: WORD EGAL < RECUPERATION CTTE HEXADECIMALE. < < ACCES A LA GRAMMAIRE ET AUX PRIMITIVES : < APRIM: WORD PRIM-COM-'80 < POUR RECONSTITUER UN DEPLACEMENT < DANS LE COOMON D'ACCES AUX < ROUTINES PRIMITIVES. ACRINT: WORD CRINT < ADRESSE DU BSR DYNAMIQUE < D'ACCES AUX PRIMITIVES. ACHSGR: WORD CHSGR < ADRESSE DU 'LA' DYNAMIQUE < DE CHANGEMENT DE GRAMMAIRE. AG0: WORD G0 < ADRESSE DE LA GRAMMAIRE INITIALE. AGT1: WORD GT1 < GRAMMAIRE DES TRANSFORMATIONS. AGTRPM: WORD GTRPM < GRAMMAIRE DES ROTATIONS. AGTQ13: WORD GTQ13 < GRAMMAIRE DES QUADRATURES. AGTUS: WORD GTUS < GRAMMAIRE DES TRANSFO. USER. AGTSP: WORD GTSP < GRAMMAIRE DES SYMETRIES. AGTECH: WORD GTECH < GRAMMAIRE DES SUBSTITUTIONS. AGPL: WORD GPL < GRAMMAIRE DES PUSH C/S/T. AGPS: WORD GPS < GRAMMAIRE DES PULL C/S/T. AGPRO: WORD GPRO < GRAMMAIRE DES PROJECTIONS. AGREG: WORD GREG < GRAMMAIRE DES REGISTRES. AGPM: WORD GPM < GRAMMAIRE +/- SUR DELTA X/Y/Z. AGINI: WORD GINI < GRAMMAIRE INITIALISATIONS. < < < G R A M M A I R E I N T E R P R E T A T I V E : < < < FORMAT : < CHAQUE ENTREE EST FAITE D'UN MOT < DONT LE FORMAT EST LE SUIVANT : < OCTET0=CARACTERE A RECONNAITRE ('00 < INDIQUE UNE FIN D'ALTERNATIVE) , < OCTET1=SI BIT0=0 : INDEX D'ACCES A LA PRIMITIVE < ASSOCIE PAR RAPPORT A 'PRIM'. < SI BIT0=1 : INDEX D'ACCES A L'ADRESSE < DE LA NOUVELLE GRAMMAIRE. < UNE SUITE D'ALTERNATIVES REPRESENTE < UN PARALLELE. < < < G R A M M A I R E I N I T I A L E : < < G0: EQU $ BYTE "1";AD1-PRIM BYTE "2";AD2-PRIM BYTE "3";AD3-PRIM BYTE "4";AD4-PRIM BYTE "5";AD5-PRIM BYTE "6";AD6-PRIM BYTE "B";APB-PRIM BYTE "A";APA-PRIM BYTE "$";AFIN-PRIM BYTE "S";APS-PRIM BYTE "T"+'80;AGT1-PRIM < VERS LA GRAMMAIRE DES TRANSFO. BYTE "(";APG-PRIM < BEGIN RECURSIVITE. BYTE ")";APD-PRIM < END RECURSIVITE JDX. BYTE "&";ASDES-PRIM BYTE "M"+'80;AGINI-PRIM BYTE "=";AEGAL-PRIM BYTE "R"+'80;AGREG-PRIM BYTE "D"+'80;AGPM-PRIM < < PRIMITIVES PEU FREQUENTES : < BYTE ";"+'80;AG0-PRIM < SEPARATEUR FACULTATIF. BYTE "E";AERAS-PRIM BYTE "F";ACI-PRIM BYTE "P"+'80;AGPRO-PRIM BYTE "O"+'80;AGPL-PRIM BYTE "I"+'80;AGPS-PRIM BYTE "C";ACI-PRIM BYTE '00;AERR-PRIM < FIN DU PARALLELE. < < < G R A M M A I R E D E S T R A N S F O R M A T I O N S : < < GT1: EQU $ BYTE "R"+'80;AGTRPM-PRIM BYTE "Q"+'80;AGTQ13-PRIM BYTE "U"+'80;AGTUS-PRIM BYTE "S"+'80;AGTSP-PRIM BYTE "E"+'80;AGTECH-PRIM BYTE "+";AT-PRIM BYTE "-";ART-PRIM BYTE "0";AVIDE-PRIM BYTE '00;AERR-PRIM < FIN DU PARALLELE. < < < G R A M M A I R E D E S R O T A T I O N S : < < GTRPM: EQU $ BYTE "1";ATRPM-PRIM < +16 DEGRE AUTOUR DE OX. BYTE "2";ATRPM-PRIM < +16 DEGRE AUTOUR DE OY. BYTE "3";ATRPM-PRIM < +16 DEGRE AUTOUR DE OZ. BYTE "4";ATRPM-PRIM < -16 DEGRE AUTOUR DE OX. BYTE "5";ATRPM-PRIM < -16 DEGRE AUTOUR DE OY. BYTE "6";ATRPM-PRIM < -16 DEGRE AUTOUR DE OZ. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S Q U A D R A T U R E S : < < GTQ13: EQU $ BYTE "1";ATQ13-PRIM < +PI/2 AUTOUR DE OX. BYTE "2";ATQ13-PRIM < +PI/2 AUTOUR DE OY. BYTE "3";ATQ13-PRIM < +PI/2 AUTOUR DE OZ. BYTE "4";ATQ13-PRIM < -PI/2 AUTOUR DE OX. BYTE "5";ATQ13-PRIM < -PI/2 AUTOUR DE OY. BYTE "6";ATQ13-PRIM < -PI/2 AUTOUR DE OZ. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S T R A N S F O . U S E R : < < GTUS: EQU $ BYTE "1";ATUS-PRIM BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S S Y M E T R I E S : < < GTSP: EQU $ BYTE "1";ATSP-PRIM BYTE "2";ATSP-PRIM BYTE "3";ATSP-PRIM BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S S U B S T I T U T I O N S : < < GTECH: EQU $ BYTE "1";ATECH-PRIM < SUBSTITUTION DE OX,OY. BYTE "2";ATECH-PRIM < SUBSTITUTION DE OY,OZ. BYTE "3";ATECH-PRIM < SUBSTITUTION DE OZ,OX. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E I N I T I A L I S A T I O N < E C H E L L E S : < < GINI: EQU $ BYTE "S";AMS-PRIM < INITIALISATION 'SCALE'. BYTE "1";AMDX-PRIM < INITIALISATION DELTA(X). BYTE "2";AMDY-PRIM < INITIALISATION DELTA(Y). BYTE "3";AMDZ-PRIM < INITIALISATION DELTA(Z). BYTE "D";AMD-PRIM < INITIALISATION DES 3 DELTAS. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S P U S H : < < GPS: EQU $ BYTE "C";APSCV-PRIM < PUSH CURSEUR VIRTUEL. BYTE "S";APSSCA-PRIM < PUSH SCALE. BYTE "T";APSTC-PRIM < PUSH TRANSFORMATION. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S P U L L : < < GPL: EQU $ BYTE "C";APLCV-PRIM < PULL CURSEUR VIRTUEL. BYTE "S";APLSCA-PRIM < PULL SCALE. BYTE "T";APLTC-PRIM < PULL TRANSFORMATION. BYTE "R";AO-PRIM < RETOUR A L'ORIGINE DU CV. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S P R O J E C T I O N S : < < GPRO: EQU $ BYTE "1";APX-PRIM < PROJECTION PARALLELE A OX. BYTE "2";APY-PRIM < PROJECTION PARALLELE A OY. BYTE "3";APZ-PRIM < PROJECTION PARALLELE A OZ. BYTE '00;AERR-PRIM < FIN DE PARALLELE. < < < G R A M M A I R E D E S R E G I S T R E S : < < GREG: EQU $ BYTE "A";ARA-PRIM < SELECTION REGISTRE A. BYTE "B";ARB-PRIM < SELECTION REGISTRE B. BYTE "X";ARX-PRIM < SELECTION REGISTRE X. BYTE '00;AERR-PRIM < FIN DE PRARLLELE. < < < G R A M M A I R E D E S M O D I F I C A T I O N S : < < GPM: EQU $ BYTE "1";AMDXP-PRIM < INCREMENTATION DELTA(X). BYTE "2";AMDYP-PRIM < INCREMENTATION DE DELTA(Y). BYTE "3";AMDZP-PRIM < INCREMENTATION DE DELTA(Z). BYTE "4";AMDXM-PRIM < DECREMENTATION DELTA(X). BYTE "5";AMDYM-PRIM < DECREMENTATION DELTA(Y). BYTE "6";AMDZM-PRIM < DECREMENTATION DELTA(Z). BYTE "+";AMP-PRIM < INCREMENTATION DES 3 DELTAS. BYTE "-";AMM-PRIM < DECREMENTATION DES 3 DELTAS. BYTE '00;AERR-PRIM < FIN DE PARALLELE. PROG PAGE < < < S Y N T A X E I N T E R P R E T A T I V E : < < < 'TR'('1'/'2'/'3'/'3'/'4'/'5'/'6')::=<DESIGNATION DE TRPOX(1), < TRPOY(2) , TRPOZ(3) , TRMOX(4) , TRMOY(5) , < TRMOZ(6)> , < 'TQ'('1'/'2'/'3'/'4'/'5'/'6')::=<DESIGNATION TR1OX(1) , TR1OY < (2) , TR1OZ(3) , TR3OX(4) , TR3OY(5) , TR3OZ(6)> , < 'TU1'::=<DESIGNATION DE TUS1> , < 'TS'('1'/'2'/'3')::=<DESIGNATION DE TSPOX(1) , < TSPOY(2) , TSPOZ(3)> , < 'TE'('1'/'2'/'3')::=<DESIGNATION DE TEXY(1) , < TEYZ(2) , TEZX(3)> , < 'T0'::=<RETOUR A L'ELEMENT NEUTRE> , < 'T+'::=<AJOUT TRANSFORMATION ELEMENTAIRE> , < 'T-'::=<SUPPRESSION TRANSFORMATION ELEMENTAIRE> , < '1'::=<DEPLACEMENT X POSITIF> , < '2'::=<DEPLACEMENT Y POSITIF> , < '3'::=<DEPLACEMENT Z POSITIF> , < '4'::=<DEPLACEMENT X NEGATIF> , < '5'::=<DEPLACEMENT Y NEGATIF> , < '6'::=<DEPLACEMENT Z NEGATIF> , < 'A'::=<ORIGINE D'UN SEGMENT> , < 'B'::=<EXTREMITE SEQUENTIELLE D'UN SEGMENT> , < 'S'::=<EXTREMITE ETOILEE D'UN SEGMENT> , < '$'::=<FIN DE LISTE INTERPRETATIVE> , < 'P'('1'/'2'/'3')::=<PROJECTION PARALLELE A OX/OY/OZ> , < 'E'::=<EFFACEMENT DE L'ECRAN> , < 'F'::=<RETOUR AU 'CCI'>, < 'OR'::=<RETOUR DU CURSEUR VIRTUEL A L'ORIGINE> , < 'I'('C'/'S'/'T')::=<PUSH CV/SCALE/TRANSFORMATION> , < 'O'('C'/'S'/'T')::=<PULL CV/SCALE/TRANSFORMATION> , < 'D'('1'/'2'/'3')::=<INCREMENTATION DELTA(X(1)/Y(2)/Z(3))> , < 'D'('4'/'5'/'6')::=<DECREMENTATION DELTA(X(4)/Y(5)/Z(6))> , < 'D'('+'/'-')::=<INCREMENTATION/DECREMENTATION DES 3 DELTAS> , < 'MS'::=<INITIALISATION DE SCALE AVEC (B)> , < 'M'('1'/'2'/'3')::=<INITIALISATION DE DELTA(X(1)/Y(2)/Z(3)) < AVEC (B)> , < 'MD'::=<INITIALISATION DES 3 DELTAS AVEC (B)> , < '='::=<DECLARATION CONSTANTE> , < 'R'('A'/'B'/'X')::=<INITIALISATION DE A/B/X AVEC CONSTANTE> , < '('::=<BEGIN RECURSIVITE> , < ')'::=<END RECURSIVITE JDX> , < '&'::=<APPEL DE SOUS-DESSIN (ROUTINE/TEXTE)> , PAGE < < < I N T E R P R E T E U R G R A P H I Q U E : < < < FONCTION : < CETTE ROUTINE APPELEE PAR UN BSR < EXPLICITE , PERMET DE TRAVAILLER EN < MODE INTERPRETATIF , C'EST-A-DIRE < DE DONNER LES ORDRES GRAPHQUES SOUS < FORME DE TEXTES ASCI. < < < NOTA : < 'INT' PERMET UNE INTERPRETATION < TRANSLATABLE DES TEXTES , C'EST-A-DIRE < SANS CONNAITRE LEUR ADRESSE PAR L'INTER- < MEDIAIRE D'UNE BASE. < < < ARGUMENT : < A=@DU TEXTE ASCI A INTERPRETER POUR 'INTA' , < MOT(K)=@DU TEXTE ASCI A INTERPRETER POUR 'INT' , < C'EST-A-DIRE LE MOT SUIVANT LE BSR < CONTIENT L'@DU TEXTE ASCI. < < < UTILISATION DES REGISTRES : < Y=CARACTERE RECONNU , < L=BASE DE LA GRAMMAIRE COURANTE , < A=SAVEA , < B=SAVEB , < X=SAVEX. < < INT: EQU $ < ENTRY 'ARGUMENT ((K))'. LR K,W < W POINTE L'ADRESSE DE L'ADRESSE < DU TEXTE A INTERPRETER. IC 0,W < CALCUL DE L'ADRESSE REELLE < DE RETOUR A L'APPELANT. PLR W < W=ADRESSE+1 DU TEXTE A < INTERPRETER. ADRI 1,K < ANNULATION DES EFFETS DU 'PLR'. PSR A,B,X,Y < SAVE LES REGISTRES DE L'APPELANT. LA -1,W < A=@DU TEXTE A INTERPRETER. JMP E142 < VERS L'INTERPRETATION. INTA: EQU $ < ENTRY 'ARGUMENT (A)'. PSR A,B,X,Y < SAVE LES REGISTRES DE L'APPELANT. < < INITIALISATION DE L'INTERPRETATION : < E142: EQU $ LB ALIST PSR B,L,W < SAVE ALIST , L & W. SBT 0 < GENERATION DU BIT INDEX. STA ALIST < MISE EN PLACE DU RELAI INDEXE < INDIRECT D'ACCES AU TEXTE. LXI 0 < INDEX DU TEXTE A INTERPRETER. LA AG0 LR A,L < L=@GRAMMAIRE INITIALE. < < BOUCLE D'INTERPRETATION : < E50: EQU $ LBY &ALIST < RECUPERATION DU CARACTERE < COURANT DU TEXTE. JAE E151 < PRIMITIVE 'ELEMENT NEUTRE' < ('00). CPI '20 JE E151 < PRIMITIVE 'ELEMENT NEUTRE' < ('SPACE'). LR A,Y < Y=CARACTERE COURANT. < < ANALYSE DU CARACTERE COURANT : < PSR L < SAVE GRAMMAIRE COURANTE. E300: EQU $ LBY 0,L < RECUPERATION DU CARACTERE < CONTENU DANS LE NOEUD COURANT < DE LA GRAMMIRE (L). JAE E301 < CAS OU ON EST TOMBE SUR LA FIN < D'UN PARALLELE , ON ABANDONNE < L'ANALYSE. RBT 8 < RAZ A PRIORI DU BIT DE DISCRI- < MINATION DES PRIMITIVES ET < DES CHANGEMENTS DE GRAMMAIRE. CPR A,Y < LE CARACTERE CONTENU DANS LE < NOEUD EST-IL LE CARACTERE < COURANT DU TEXTE ???? JE E301 < OUI , C'EST BON .... ADRI 1,L < SINON , ON PASSE AU NOEUD SUIVANT < DE LA GRAMMAIRE COURANTE. JMP E300 < VERS LA POURSUITE DE L'ANALYSE. < < TRAITEMENT DES CARACTERES RECONNUS , < OU DES FIN DE PARALLELES : < E301: EQU $ LA 0,L ANDI 'FF < RECUPERATION DE L'INDEX D'ACCES < A LA PRIMITIVE ASSOCIEE. AD APRIM < CALCUL DU DEPLACEMENT DANS LE < COMMON POUR ACCES AU RELAI < VERS LA PRIMITIVE. CPZ 0,L < DISCRIMINATION DES APPELS DE < PRIMITIVES , DES CHANGEMENTS < DE GRAMMAIRES. PLR L < RESTAURE LA GRAMMAIRE COURANTE. JL E302 < CAS D'UN CHANGEMENT DE GRAMMAIRE. < < CAS D'UN APPEL DE PRIMITIVES : < STA &ACRINT LAI '46 < CODE DU 'BSR' BASE PAR 'C'. STBY &ACRINT < GENERATION D'UN BSR D'ACCES < A LA PRIMITIVE ASSOCIEE AU < CARACTERE RECONNU. < < PREPARATION DES REGISTRES : < PSR X < SAVE L'INDEX COURANT DU TEXTE. LA SAVEA LB SAVEB LX SAVEX < NOTA : < Y=CARACTERE COURANT RECONNU. CRINT: BSR AFIN < BSR DYNAMIQUE D'ACCES ALA < PRIMITIVE COURANTE (INITIALISE < AVEC UNE FIN D'INTERPRETATION). < < RETOUR DES PRIMITIVES : < < < A T T T E N T I O N : < LA BASE L A PU ETRE MODIFIEE PAR < LA PRIMITIVE DONT ON REVIENT , < AFIN D'ACCEDER A UNE AUTRE GRAMMAIRE. < STA SAVEA < SAVE LE REGISTRE A EN RETOUR. STB SAVEB < SAVE LE REGISTRE B EN RETOUR. STX SAVEX < SAVE LE REGISTRE X EN RETOUR. PLR X < RESTAURE INDEX COURANT DU TEXTE. < < ENTRY POUR RECURSIVITE INTERPRETATIVE : < E151: EQU $ < ENTRY POUR LES PRIMITIVES < 'ELEMENT NEUTRE' ('00 , 'SPACE'). ADRI 1,X < PASSAGE AU CARACTERE SUIVANT. JMP E50 < VERS L'INTERPRETATION DU < CARACTERE SUIVANT. < < CAS D'UN CHANGEMENT DE GRAMMAIRE : < E302: EQU $ STA &ACHSGR LAI '50 < CODE DU 'LA' BASE PAR 'C'. STBY &ACHSGR < GENERATION D'UN 'LA' D'ACCES < A L'ADRESSE DE LA NOUVELLE < GRAMMAIRE. CHSGR: LA AG0 < 'LA' DYNAMIQUE DE RECUPERATION < DE L'ADRESSE D'1NE GRAMMAIRE ; < INITIALISE AVEC 'AG0'. LR A,L < L=@DE LA NOUVELLE GRAMMAIRE. JMP E151 < VERS L'ACCES AU CARACTERE < SUIVANT. < < F I N D ' I N T E R P R E T A T I O N : < FININT: EQU $ ADRI -2,K < AFIN D'ANNULER LES EFFETS DU < 'BSR AFIN' ET DU 'PSR X' DE < SAUVEGARDE DE L'INDEX DU TEXTE , < LES INVERSES (RSR ET PLR) NE < SERONT PAS EXECUTES .... PLR B,L,W < RESTAURE ALIST , L & W. STB ALIST PLR A,B,X,Y < RESTAURATION DES REGISTRES < DE L'APPELANT. RSR < RETOUR A L'APPELANT. < < < T E S T D U M O D E E T R E T O U R A L A < G R A M M A I R E I N I T I A L E : < < < FONCTION : < CETTE ROUTINE PERMET EN MODE INTERPRETATIF < DE RESTAURER LA GRAMMAIRE INITIALE < DANS LA BASE L. < < TINT: EQU $ CPZ ALIST < TEST DU MODE INTERPRETATIF ??? JE E320 < RIEN A FAIRE , ON EST EN MODE < NON INTERPRETATIF. < < CAS DU MODE INTERPRETATIF : < LR A,L < SAVE A DANS L. LA AG0 < A=@GRAMMAIRE INITIALE. XR A,L < RESTAURE A & L. E320: EQU $ RSR < < C A S D E S E R R E U R S : < E51: EQU $ BSR AERR < AFIN D'AVOIR DANS LA PILE K < L'ADRESSE D'ERREUR. ERREUR: EQU $ ACTD < ON FAIT TRAPPER LE PROGRAMME. JMP ERREUR < BOUCLAGE. PAGE < < < I N T E R P R E T A T I O N D E < L A R E C U R S I V I T E : < < < FONCTION : < CES 2 ROUTINES PERMETTENT UNE < STRUCTURE RECURSIVE DES TEXTES < A INTERPRETER. < < < B E G I N R E C U R S I V I T E : < < PG: EQU $ < '('. BSR ABR < APPEL DU 'BEGIN RECURSIVITE'. < < ENTRY POUR END RECURSIVITE JDX AVEC (X)#0 : < STX SAVEX < SAVE LE REGISTRE X ... LX -2,W < RESTAURE L'INDEX DE L'INTER- < PRETEUR (POINTANT SUR '('). JMP E151 < VERS L'INTERPRETATION DU < CARACTERE SUIVANT '('. < < < E N D R E C U R S I V I T E J D X : < < PD: EQU $ < APRES SODOME , ON AURA TOUT VU.... PLR X,W < X=INDEX DE L'INTERPRETEUR , < POINTANT SUR ')' ; DE PLUS < ON ECRASE W POUR ANNULER < LES EFFETS DU 'BSR APD'. PSR A,X < AINSI , ON RE-SAUVEGARDE L' < INDEX DE L'2NTERPRETEUR < DECALE D'UN MOT DANS LA PILE. ADRI -2,K < CETTE SAUVEGARDE N'EST QUE < TEMPORAIRE , ET NON MEMORISEE < DANS LE REGISTRE K. < (K POINTE LE CONTEXTE DE < RECURSIVITE (X)). BSR AERD < APPEL DE LA FIN DE RECURSIVITE < DE TYPE JDX. < < CAS OU LE CONTEXTE DE RECURSIVITE (X) PASSE PAR 0 : < STX SAVEX LX 4,W < X=INDEX DE L'INTERPRETEUR , < POINTANT SUR ')'. ADRI -2,K < ON RETABLIT LA PILE K. JMP E151 < VERS L'ACCES AU CARACTERE < SUIVANT ')'. PAGE < < < A P P E L I N T E R P R E T A T I F D E < S O U S - D E S S I N : < < < FONCTION : < CETTE ROUTINE PERMET A PARTIR < D'UN TEXTE INTERPRETATIF D'EN < APPELER UN AUTRE , OU BIEN UN SOUS- < DESSIN EN LANGAGE MACHINE. < L'ADRESSE DU SOUS-DESSIN (TEXTE/ < ROUTINE) EST SITUEE DANS LE MOT < SUIVANT IMMEDIATEMENT LE CARACTERE < D'APPEL '&' . SI LE BIT0 DE < L'ADRESSE EST A 0 , IL S'AGIT D'1NE < ROUTINE , SINON , IL S'AGIT D'UN < TEXTE. < < < BIT0(ADRESSE)=0 : APPEL ROUTINE , < BIT0(ADRESSE)=1 : APPEL TEXTE. < FIN D'UN SOUS-TEXTE : '$' , < FIN D'UNE SOUS-ROUTINE : 'RSR'. < < SDES: EQU $ LR K,W < W POINTE L'ADRESSE DE RETOUR. LA -1,W < ACCES A L'INDEX CARACTERE < DE L'INTERPRETEUR. ADRI 2,A < POUR ATTEINDRE LE MOT SUIVANT < LE CARACTERE COURANT. SLRS 1 < CONVERSION EN UN INDEX MOT. LR A,X < X=INDEX DE L'ADRESSE DU < SOUS-DESSIN (TEXTE/ROUTINE). LA &ALIST < A=@DU SOUS-DESSIN. JAGE E410 < CAS DE L'APPEL D'UNE ROUTINE. < < CAS DE L'APPEL D'UN TEXTE : < BSR AINTA < ENTREE RECURSIVE DANS L'INTER- < PRETEUR AVEC A COMME ARGUMENT. < < RETOUR DES SOUS-DESSINS : < '$' POUR LES TEXTES , < 'RSR' POUR LES ROUTINES. < E411: EQU $ ADR X,X < L'INDEX MOT EST CONVERTI < EN UN INDEX OCTET. ADRI 1,X < ET PASSAGE SUR L'OCTET1 DE < L'ADRESSE. ADRI -2,K < AFIN DE SUPPRIMER LES EFFETS < DU 'BSR ASDES' ET DU 'PSR X' , < QUI SONT SAUTES. JMP E151 < VERS L'INTERPRETATION DU < CARACTERE SUIVANT. < < CAS DE L'APPEL DE ROUTINES : < E410: EQU $ LA ALIST PSR A,X,L < SAVE ALIST , X & L. STZ ALIST < RETOUR AU MODE NON INTERPRETATIF. BSR &1,W < APPEL DE LA ROUTINE A L'AIDE < DE L'ANCIEN ALIST QUI EST < PRESENTEMENT DANS LA PILE K. PLR A,X,L < RESTAURATION ALIST , X & L. STA ALIST JMP E411 < VERS LE RETOUR DES SOUS-DESSINS. PAGE < < < I N T E R P R E T A T I O N D E S < T R A N S F O R M A T I O N S : < < < FONCTION : < CES PRIMITIVES PERMETTENT DE < MEMORISER DANS 'SAVEA' LE NOM DE < LA TRANSFORMATION DEMANDEE. < < < ARGYMENT : < Y=1 CARACTERE ASCI (DE "1" A "6"). < < < RESULTAT : < A=NOM DE LA TRANSFORMATION DEMANDEE. < < TRPM: EQU $ < ENTRY ROTATIONS. LAI TRPOX-"1" < ACCES A LA 1ERE ROTATION. JMP E310 TQ13: EQU $ < ENTRY QUADRATURES. LAI TR1OX-"1" < ACCES A LA 1ERE QUADRATURE. JMP E310 TUS: EQU $ < ENTRY TRANSFORMATION USER. LAI TUS1-"1" < ACCES A LA 1ERE TRANSFO. USERR. JMP E310 TSP: EQU $ < ENTRY SYMETRIES. LAI TSPOX-"1" < ACCES A LA 1ERE SYMETRIE. JMP E310 TECH: EQU $ < ENTRY SUBSTITUTIONS. LAI TEXY-"1" < ACCES A LA 1ERE SUBSTITUTION. < < MEMORISATION DU NOM DE LA TRANSFORMATION DEMANDEE : < E310: EQU $ ADR Y,A < ON AJOUTE LE CARACTERE ASCI < (DE "1" A "6") A (A). < < RETOUR A LA GRAMMAIRE INITIALE : < BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE? RSR < ET C'EST TOUT .... PAGE < < < I N T E R P R E T A T I O N D E S R E G I S T R E S : < < < FONCTION : < CES ROUTINES PERMETTENT D'INITIALISER < L'UN DES REGISTRES A,B,X UTILISE < PAR LES PRIMITIVES. < < < C O N S T A N T E H E X A D E C I M A L E : < < < FONCTION : < CETTE ROUTINE RECUPERE UNE CONSTANTE < HEXADECIMALE DANS LA LISTE INTER- < PRETATIVE ; ELLE EST LIMITEE A < GAUCHE PAR LE SIGNE 'EGAL' ('=') , < ET A DROITE PAR LE 1ER CARACTERE NON < RECONNU. < < < RESULTAT : < DUMY2=VALEUR DE LA CONSTANTE , < MAJ DE L'INDEX CARACTERE DE L'INTERPRETEUR. < < EGAL: EQU $ LR K,W < AFIN DE BASER LA PILE DE < L'2NTERPRETEUR. PSR A,B,X LX -1,W < X=INDEX CARACTERE COURANT DE < L'INTERPRETEUR. LBI 0 < NETTOYAGE DU REGISTRE DE CUMUL. < < BOUCLE DE RECUPERATION : < E400: EQU $ ADRI 1,X < PROGRESSION INDEX CARACTERE. LBY &ALIST < RECUPERATION 1 CARACTERE < DE LA LISTE INTERPRETATIVE. ADRI -'30,A < DECONVERSION ASCI. JAL E401 < ARRET DE LA RECUPERATION. CPI 9 < EST-CE UN CHIFFRE DEVIMAL ??? JLE E402 < OUI. ADRI -'41+'39+1,A < TRANSLATION VERS LES LETTRES. CPI 'A JL E401 < ARRET SUR LE 1ER CARACTERE < NON RECONNU. CPI 'F JG E401 < ARRET DE LA RECHERCHE. < < CUMUL DE LA CONSTANTE : < E402: EQU $ SCRS 4 < CADRAGE GAUCHE DANS A. SCLD 4 < CUMUL DANS B. JMP E400 < AU CARACTERE SUIVANT. < < ARRET DE LA RECHERCHE SUR LE 1ERE CARACTERE NON RECONNU : < E401: EQU $ STB DUMY2 < SAVE TEMPORAIRE DANS DUMY2. ADRI -1,X < RETOUR ARRIERE (CF. L'INTERTEUR). STX -1,W < MISE A JOUR DE L'INDEX CARACTERE < COURANT DE L'INTERPRETEUR. PLR A,B,X < RESTAURE. RSR < ET RETOUR .... < < < I N I T I A L I S A T I O N D E S R E G I S T R E S : < < < FONCTION : < CES ROUTINES PERMETTENT D'INTIALISER < SAVEA/SAVEB/SAVEX PAR L'INTERMEDIAIRE < DE L'INTERPRETEUR. < < < ARGUMENT : < DUMY2=VALEUR A DONNER A A/B/X. < < RA: EQU $ LA DUMY2 < INITIALISATION DE A. JMP E403 RB: EQU $ LB DUMY2 < INITIALISATION DE B. JMP E403 RX: EQU $ LX DUMY2 < INITIALISATION DE X. E403: EQU $ BSR ATINT < RESTAURATION DE LA GRAMMAIRE < INITIALE ??? RSR PAGE < < < G E S T I O N T R A N S L A T A B L E < D E L A R E C U R S I V I T E : < < < FONCTION : < CES ROUTINES PERMETTENT DE DEFINIR < DYNAMIQUEMENT DES BLOCS DE RECURSIVITE : < 1- BOREC : DEFINIT UN 'BEGIN' BLOC , < 2- EOREC : DEFINIT UNE FIN DE BLOC AVEC RETOUR < INCONDITIONNEL AU 'BEGIN' DE CE BLOC. < 3- EORECI : DEFINIT UNE FIN DE BLOC DE < TYPE 'JIX' , < 4- EORECD : DEFINIT UNE FIN DE BLOC DE < TYPE 'JDX' . , < 5- ENFIN L'INSTRUCTION 'RSR' PERMET DE < DEFINIR UNE FIN DE BLOC DE TYPE 'PROCEDURE' , < APPELEE PAR UN 'BSR' (CF. CALL). < < < NOTA : < LE REGISTRE X FAIT PARTIE DU < CONTEXTE DE RECURSIVITE , ET < EST DONC EMPILER/DEPILER LORS < DES BEGIN/END. < < < E N D R E C U R S I V I T E I N C O N D I T I O N N E L L E < < EOREC: EQU $ PLR X,W < RESTAURE LE CONTEXTE X , < ET DE PLUS FAIT K<--(K)-1 , < EN ECRASANT LE REGISTRE W. < (ON ANNULE DONC LE 'BSR EOREC') < S'IL N'Y A PAS EU D'ERREURS < D'UTILISATION , W POINTE SUR < L'ADRESSE DE L'ADRESSE DE < RETOUR DU 'BSR BOREC' ASSOCIE. < < < B E G I N R E C U R S I V I T E : < < BOREC: EQU $ LR K,W < ON MET DANS W L'ADRESSE DE < L'ADRESSE DE RETOUR SITUEE DANS < LA PILE K , APRES LE 'BSR < ABOREC'. PSR X < SAVE LE CONTEXTE X. BR 0,W < PERMET DE FAIRE UN RETOUR A < LA SUITE DU 'BSR ABOREC' SANS < DEPILER (D'OU LA RECURSIVITE). < < < E N D R E C U R S I V I T E ' J I X ' : < < EORECI: EQU $ PLR X,W < RESTAURE LE CONTEXTE X , ET < ANNULE LES EFFETS DU 'BSR < AEORECI' EN ECRASANT W. JIX BOREC < DANS LE CAS OU (X)#0 , ON FAIT < UN FIN DE RECURSIVITE INCON- < DITIONNELLE. < < CAS OU X=0 (JDX & JIX) : < E141: EQU $ ADRI -1,K < ON SUPPRIME LE 'BSR ABOREC'. LR K,W < (W)+3 POINTE DONC SUR L'ADRESSE < DE L'ADRESSE DE RETOUR DU < 'BSR AORECI/D'. BR 3,W < RETOUR DU 'BSR AORECI/D'. < < < E N D R E C U R S I V I T E J D X : < < EORECD: EQU $ PLR X,W < RESTAURE LE CONTEXTE X , ET < ANNULE LES EFFETS DU 'BSR < AORECD' EN ECRASANT W. JDX BOREC < DANS LE CAS OU (X)#0 : ON FAIT < UN RETOUR INCONDITIONNEL. JMP E141 < CAS OU X=0 : RETOUR DU < 'BSR AEORECD' < < < A P P E L T R A N S L A T A B L E D E R O U T I N E S : < < < FONCTION : < CETTE PRIMITIVE PERMET D'APPELER UNE < ROUTINE (SOUS-GRAPHE,...) SANS QUE < L'ADRESSE DE CELLE-CI SOIT DANS UNE ZONE < BASEE. < < < ARGUMENT : < MOT(K) : @DE LA ROUTINE (DANS LE MOT SUIVANT < LE BSR). < < CALL: EQU $ LR K,W < W POINTE L'ADRESSE DU MOT < SUIVANT LE 'BSR ACALL'. IC 0,W < CALCUL DE L'ADRESSE DE RETOUR < REELLE DU 'BSR ACALL'. PLR W < W CONTIENT MAINTENANT L'ADRESSE < DE RETOUR , SOIT L'ADRESSE+1 < DE L'ADRESSE DE LA ROUTINE < A APPELER. ADRI 1,K < ANNULATION DU 'PLR W' , POUR < FAIRE UN 'RSR' CORRECT DANS < LA ROUTINE APPELEE. BR -1,W < ENTREE DANS LA ROUTINE SANS BSR. < < < G O T O T R A N S L A T A B L E S : < < < FONCTION : < CES ROUTINES PERMETTENT DE FAIRE < DES BRANCHEMENTS CONDITIONNELS/ < INCONDITIONNELS SANS BASE ET SANS < DEPLACEMENT. < < < ARGUMENTS : < C & V POUR LES BRANCHEMENTS CONDITIONNELS , < MOT(K) : @ DE BRANCHEMENT SI CONDITION VERIFIEE. < < GO: EQU $ < GOTO INCONDITIONNEL. PSR A LAI '00 JMP E170 < VERS LE TEST. GOGE: EQU $ < GOTO SI 'GE'. PSR A LAI '01 JMP E170 < VERS LE TEST. GONE: EQU $ < GOTO SI 'NE'. PSR A LAI '02 JMP E170 < VERS LE TEST. GOGT: EQU $ < GOTO SI 'GT'. PSR A LAI '03 JMP E170 < VERS LE TEST. GOLT: EQU $ < GOTO SI 'LT'. PSR A LAI '05 JMP E170 < VERS LE TEST. GOEQ: EQU $ < GOTO SI 'EQ'. PSR A LAI '06 JMP E170 < VERS LE TEST. GOLE: EQU $ < GOTO SI 'LE'. PSR A LAI '07 < < MISE EN PLACE DE L'INSTRUCTION DYNAMIQUE DE TEST : < E170: EQU $ STBY &ATEST < MISE EN PLACE DU CODE OPERATION < DE L'INSTRUCTION DE TEST ('TEST') PLR A < < A T T E N T I O N : < IL NE FAUT PAS UTILISER D'INSTRUCTIONS < MODIFIANT LES INDICATEURS C & V PUISQU'ON < DOIT LES TTESTER EN 'TEST'. < LR K,W < W POINTE L'ADRESSE DU MOT < SUIVANT LE 'BSR' D'APPEL. TEST: JMP E171 < INSTRUCTION DYNAMIQUE DE < BRANCHEMENT SI 'CONDITION < VERIFIEE'. < < CAS D'UNE CONDITION NON VERIFIEE : < IC 0,W < CALCUL DE L'ADRESSE DE RETOUR < REELLE DU BSR. RSR < RETOUR EN SEQUENCE POUR < 'CONDITION NON VERIFIEE'. < < CAS D'1NE CONDITION VERIFIEE : < E171: EQU $ PLR W < W=@+1 DU MOT SUIVANT LE 'BSR' ; < DE PLUS AINSI ON RETABLIT LA < PILE K , CAR ON VA SORTIR DE < LA ROUTINE SANS 'RSR'. BR 0,W < SORTIE EN RUPTURE DE SEQUENCE < POUR 'CONDITION VERIFIEE'. PAGE < < < P R I M I T I V E : R E T O U R A U C C I : < < GOCCI: EQU $ PSR A,X < AU CAS OU ON FERAIT !GO. E191: EQU $ < CAS DES RETOURS EN ERREUR < DES CHARGEMENTS D'OVERALY. LAD CCI E180: EQU $ < ENTRY 'ERASE'. SVC 0 PLR A,X RSR < DIFFICILE , N'EST-IL PAS .... PAGE < < < P R I M I T I V E E R < D ' E F F A C E M E N T E C R A N : < < ERASE: EQU $ PSR A,X < QUELLE PRUDENCE !!! LAD DERASE JMP E180 < VERS L'EXECUTION DE L'ERASE. PAGE < < < H A R D - C O P Y : < < COPY: EQU $ PSR A,X LAD DCOPY SVC 0 < ENVOI DE L'ORDRE DE COPY, LAD TEMPO JMP E180 < PUIS DE TEMPORISATION... PAGE < < < C U R S E U R V I R T U E L C O U R A N T : < < < FONCTION : < CES QUELQUES ROUTINES PERMETTENT < DE DEPLACER EN ABSOLU LE CURSEUR < VIRTUEL COURANT , DE LE METTRE A < L'ORIGINE , ET ENFIN DE CHANGER DE < CHANGER DE CURSEUR VIRTUEL COURANT. < < < M I S E A L ' O R I G I N E C V : < < CVO: EQU $ PSR A,B,X,W FLD FZERO FST XG FST YG FST ZG < < ENTRY POUR POSITIONNEMENT ABSOLU DU CV : < E90: EQU $ FLD FZERO FST XL FST YL FST ZL BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE ?? PLR A,B,X,W RSR < < < P O S I T I O N N E M E N T A B S O L U C V : < < < ARGUMENT : < 1- MCV : < (K)=@LISTE COORDONNEES (X,Y,Z) A DONNER < AU CV COURANT , < 2- MCVA : < A=@ D'1NE LISTE DE COORDONNEES (X,Y,Z) < A DONNER AU CV COURANT. < < < NOTA : < 1-LES COORDONNEES LOCALES SONT RAZEES !!!! < 2-LES COORDONNEES GLOBALES SONT DONNEES < EN FLOTTANT. < < MCV: EQU $ LR K,W < W POINTE L'ADRESSE DE L' < ADRESSE DE LA LISTE DE COORDONNEE < A DONNER AU CV COURANT. IC 0,W < CALCUL DE L'ADRESSE REELLE < DE RETOUR. PLR W < W=@+1 DE LA LISTE DES COOR- < DONNEES (X,Y,Z). ADRI 1,K < RATTRAPAGE DU PLR. PSR A,B,X LA -1,W < A=@LISTE (X,Y,Z). JMP E170A < VERS LE POSITIONNEMENT. MCVA: EQU $ PSR A,B,X,W E170A: EQU $ < ENTRY 'MCV'. ADRI -1,A < POUR PERMETTRE UNE INDEXATION < PAR RAPPORT A 1. SBT 0 < POSITIONNEMENT DU BIT INDEX. STA DUMY1 < GENERATION DU RELAI D'ACCES < A LA LISTE DES COORDONNEES. LAD ZG LR A,W < W=@DE LA DERNIERE COORDONNEE < GLOBALE DU CV COURANT. LXI DIMCV*DIM < NBRE DE COORDONNEES GLOBALES < DU CV. < < BOUCLE DE DEPLACEMENT GLOBAL DU CV : < E91: EQU $ LA SCALE FLT < PRISE EN COMPTE DE L'ECHELLE GLOABLE. ADRI -1,X < 'FLOAT' SUR 2 MOTS !!! FMP &DUMY1 < RECUPERATION DES ARGUMENTS, FST 0,W < SAUVEGARDE DES NOUVELLES COORDONNEES < GLOBALES... ADRI -DIMCV,W < PASSAGE A LA COORDONNEE < GLOBALE PRECEDENTE DU CV COURANT. JDX E91 < SUIVANT. JMP E90 < VERS LA MISE A L'ORIGINE DES < COORDONNEES LOCALES DU CV < COURANT. < < TRAITEMENT DES ERREURS : < E92: EQU $ BSR AERR < POUR CONNAITRE L'ADRESSE < D'ERREUR. < < < C H A N G E M E N T D E C V C O U R A N T : < < < FONCTION : < ON PEUT A L'AIDE DE CETTE ROUTINE < CHANGER DE CV COURANT , AVEC OU < SANS SAUVEGARDE , ET AVEC OU SANS < REINITIALISATION. < < < ARGUMENT : < A=NUMERO DU NOUVEAU CV (COMPRIS ENTRE 0 ET NCV-1) , < B=FONCTION DEMANDEE : < BIT15(B)=1 : SAUVEGARDE DU CV COURANT < DANS SA ZONE , < BIT14(B)=1 : INITIALISATION DE CV , AVEC LE < CV DONT LE NUMERO EST DANS A. < < CHCV: EQU $ PSR A,B,X,Y LXI 0 < MEMORISATION CHANGEMENT < CURSEUR VIRTUEL COURANT. JMP CHGCON < VERS LE CHANGEMENT DE CONTEXTE. < < < C H A N G E M E N T E C H E L L E C O U R A N T E : < < < FONCTION & ARGUMENT IDENTIQUES A CV , MAIS < APPLIQUES A L'ECHELLE COURANTE. < < CHSCA: EQU $ PSR A,B,X,Y LXI 1 < MEMORISATION CHANGEMENT < ECHELLE COURANTE. JMP CHGCON < VERS LE CHANGEMENT DE CONTEXTE. < < < C H A N G E M E N T D E T R A N S F O R M A T I O N < C O U R A N T E : < < < FONCTION & ARGUMENTS IDENTIQUES A CV , < MAIS APPLIQUES A TC. < < CHTC: EQU $ PSR A,B,X,Y LXI 2 < MEMORISATION CHANGEMENT DE TC. JMP CHGCON < VERS LE CHANGEMENT DE CONTEXTE. < < < C H A N G E M E N T D E C O N T E X T E < C O U R A N T : < < < FONCTION : < ON DISTINGUE DANS LE SYSTEME 3 CONTEXTES < DIFFERENTS : < - LE CURSEUR VIRTUEL , < - LA TRANSFORMATION COURANTE , < - L'ECHELLE COURANTE ; < CHAQUN D'EUX EST DECRIT PAR UN < DESCRIPTEUR DE CONTEXTE , DONT LE FORMAT < EST LE SUIVANT : NUM: VAL 0 < MOT0 : NUMERO CONTEXTE COURANT. AL: VAL 1 < MOT1 : @LISTE DE LA ZONE DE < SAVE DES CONTEXTES. CT: VAL 2 < MOT2 : CONSTANTE DE TRANSLATION. AN: VAL 3 < MOT3 : NBRE MAX DE CONTEXTES. ACON: VAL 4 < MOT4 : @CONTEXTE COURANT (TC,....) KCON: VAL 5 < MOT5 : POINTEUR DE PILE , LORS- < -QUE LES CONTEXTES SONT < UTILISES EN PUSH/PULL. < < < ARGUMENT : < CF. LA ROUTINE 'CHCV' , AVEC DE PLUS : < X=NUMERO DU DESCRIPTEUR UTILISE : < =0 : CV , < =1 : ECHELLE , < =2 : TRANSFORMATION (TC). < < < NOTA : < W=@DESCRIPTEUR DE CONTEXTE. < < CHGCON: EQU $ LX &LCON LR X,W < W=@DESCRIPTEUR DE CONTEXTE. E112: EQU $ < ENTRY MODE PUSH/PULL. JAL E92 < ERREUR DE NUMERO DE CONTEXTE. CP AN,W < VALIDATION. JGE E92 < ERREUR DE NUMERO DE CONTEXTE. LR B,Y < Y=FONCTION DEMANDEE. MP CT,W < CALCUL DU NUMERO DE CONTEXTE < DEMANDE AFIN D'Y ACCEDER < DANS LA LISTE DE SAVE. STB DUMY1 < SAVE LE DEPLACEMENT VERS LE < CONTEXTE DEMANDE DANS DUMY1. < < VALIDATION DE LA FONCTION : < LR Y,A < A=FONCTION DEMANDEE. JAL E92 < ERREUR DE FONCTION. CPI 3 < (BIT14 & BIT15). JG E92 < ERREUR DE FONCTION. < < SAUVEGARDE EVENTUELLE DU CONTEXTE COURANT : < TBT 15 < SAVE CONTEXTE EST-IL DEMANDE ??? JNC E102 < NON ... LA AL,W AD NUM,W LR A,B < B=RECEPTEUR=@ZONE CONTENANT < LE CONTEXTE COURANT. LA ACON,W < A=@EMETTEUR=@CONTEXTE COURANT. LX CT,W < NBRE DE MOTS A DEPLACER. MOVE < SAVE LE CONTEXTE COURANT. < < INITIALISATION EVENTUELLE DU CONTEXTE : < E102: EQU $ LR Y,B < B=FONCTION DEMANDEE. TBT 14+16 < INITIALISATION CONTEXTE DEMANDEE? LB ACON,W < B=RECEPTEUR=@CONTEXTE. LA DUMY1 STA NUM,W < MEMORISATION DU NUMERO DU < NOUVEAU CONTEXTE COURANT. JNC E101 < NON PAS D'INITIALISATION ... AD AL,W < A=@EMETTEUR=@ZONE DE SAVE < DU CONTEXTE DEMANDE. LX CT,W < NBRE DE MOTS A DEPLACER. MOVE < INITIALISATION CONTEXTE COURANT. < < SORTIE DE LA ROUTINE : < E101: EQU $ BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE? PLR A,B,X,Y RSR < < < C H A N G E M E N T S D E C O N T E X T E S < E N M O D E P U S H / P U L L : < < < FONCTION : < CES PRIMITIVES PERMETTENT D'UTILISER < LES ZONES DE SAUVEGARDE DE CONTEXTE EN < MODE PUSH/PULL , LE NUMERO DU < CONTEXTE 'DEMANDE' ETANT GERE COMME < UN POINTEUR DE PILE (KCON). < < < NOTA : < PAS D'ARGUMENTS. < < < P U S H C V : < < PSCV: EQU $ PSR A,B,X,Y LXI 0 < MEMORISATION 'CV'. LBI 1 < BIT15(B)=1 : SAVE CONTEXTE. JMP E110 < VERS LE TRAITEMENT DES PUSH. < < < P U L L C V : < < PLCV: EQU $ PSR A,B,X,Y LXI 0 < MEMORISATION 'CV'. LBI 2 < BIT14(B)=1 : INIT. CONTEXTE. JMP E111 < VERS LE TRAITEMENT DES PULL. < < < P U S H E C H E L L E : < < PSSCA: EQU $ PSR A,B,X,Y LXI 1 < MEMORISATION 'SCALE'. LBI 1 < BIT15(B)=1 : SAVE CONTEXTE. JMP E110 < VERS LE TRAITEMENT DES PUSH. < < < P U L L E C H E L L E : < < PLSCA: EQU $ PSR A,B,X,Y LXI 1 < MEMORISATION 'SCALE'. LBI 2 < BIT14(B)=1 : INIT. CONTEXTE. JMP E111 < VERS LE TRAITEMENT DES PULL. < < < P U S H T R A N S F O R M A T I O N : < < PSTC: EQU $ PSR A,B,X,Y LXI 2 < MEMORISATION 'TC'. LBI 1 < BIT15(B)=1 : SAVE CONTEXTE. JMP E110 < VERS LE TRAITEMENT DES PUSH. < < < P U L L T R A N S F O R M A T I O N : < < PLTC: EQU $ PSR A,B,X,Y LXI 2 < MEMORISATION 'TC'. LBI 2 < BIT14(B)=1 : INIT. CONTEXTE. JMP E111 < VERS LE TRAITEMENT DES PULL. < < < P U S H C O N T E X T E : < < < ARGUMENT : < X=NUMERO DU DESCRIPTEUR DE CONTEXTE , < B=1. < < E110: EQU $ LX &LCON LR X,W < W=@CONTEXTE DONT ON FAIT LE PUSH. LA KCON,W < A=POINTEUR DE PILE DU CONTEXTE. IC KCON,W < PROGRESSION POINTEUR DE PILE < DU CONTEXTE SANS VERIFICATION. JMP E112 < VERS LE CHANGEMENT DE CONTEXTE. < < < P U L L C O N T E X T E : < < < ARGUMENT : < X=NUMERO DU DESCRIPTEUR DONT ON ON FAIT LE PULL , < B=2. < < E111: EQU $ LX &LCON LR X,W < W=@DESCRIPTEUR DU CONTEXTE < DONT ON FAIT LE PULL. DC KCON,W < DECREMENTATION DU POINTEUR < DE PILE DU CONTEXTE SANS < VERIFICATION. LA KCON,W < A=POINTEUR DE PILE DU CONTEXTE. JMP E112 < VERS LE CHANGEMENT DE CONTEXTE. PAGE < < < M O D I F I C A T I O N S D E < S C A L E , D X , D Y , D Z : < < < < FONCTION : < CES PRIMITIVES PERMETTENT DE < MODIFIER SCALE,DX,DY,DZ , ET < D'INCREMENTER/DECREMENTER DX,DY,DZ < A PARTIR DE SCALE. < < < M O D I F I C A T I O N D E S C A L E : < < < ARGUMENT : < B=VALEUR A DONNER A SCALE. < < MSCALE: EQU $ CPZR B < VALIDATION DE LA NOUVELLE VALEUR. JLE E80 < ERREUR. STB SCALE < MODIFICATION DE SCALE. BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE? RSR < < TRAITEMENT COMMUN DES ERREURS : < E80: EQU $ BSR AERR < POUR CONNAITRE L'ADRESSE D'ERREUR < < < M O D I F I C A T I O N D E D X : < < < ARGUMENT : < B=VALEUR A DONNER A DX. < < MDX: EQU $ PSR A,B < PAR PRUDENCE. LAD DX < A=@DX. JMP E81 < VERS L'EXECUTION. < < < M O D I F I C A T I O N D E D Y : < < < ARGUMENT : < B=VALEUR A DONNER A DY. < < MDY: EQU $ PSR A,B < QUEL LUXE !!! LAD DY < A=@DY. JMP E81 < VERS L'EXECUTION. < < < M O D I F I C A T I O N D E D Z : < < < ARGUMENT : < B=VALEUR A DONNER A DZ. < < MDZ: EQU $ PSR A,B < PRUDENCE .... LAD DZ < A=@DZ. < < TRONC COMMUN AUX MODIFICATIONS DE DX,DY,DZ : < E81: EQU $ LR A,W < W=@DX/DY/DZ. LR B,A < A=VALEUR A DONNER A DX/DY/DZ. MP SCALE < PRISE EN COMPTE DU FACTEUR < D'ECHELLE. JANE E80 < ERREUR : OVERFLOW. LR B,A < A=VALEUR DU RESULTAT. < < ENTRY 'OPERATION SUR DX,DY,DZ' : < E86: EQU $ JALE E80 < ERREUR : OVERFLOW DU RESULTAT. CP BORNE < VALIDATION ... JG E80 < ERREUR : OVERFLOW DU RESULTAT. STA 0,W < RANGEMENT DE LA NOUVELLE VALEUR < DE DX/DY/DZ SI OK. < < SORTIES DES ROUTINES : < E132: EQU $ < CAS OU LE +/- PORTE SUR UN DELTA < POUR LEQUEL L'AXE CORRESPONDANT < EST L'AXE DE PROJECTION. BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE?? PLR A,B RSR < < < M O D I F I C A T I O N D E D X & D Y & D Z : < < < ARGUMENT : < B=VALEUR A DONNER A DX & DY & DZ. < < MD: EQU $ BSR AMDX < MODIFICATION DE DX. BSR AMDY < MODIFICATION DE DY. BSR AMDZ < MODIFICATION DE DZ. RSR < AIN'T IT HARD ???? < < < D X <--- ( D X ) + ( S C A L E ) : < < MDXP: EQU $ PSR A,B LAD DX < A=@DX. JMP E82 < VERS LE TRONC COMMUN. < < < D Y <--- ( D Y ) + ( S C A L E ) : < < MDYP: EQU $ PSR A,B LAD DY < A=@DY. JMP E82 < VERS LE TRONC COMMUN. < < < D Z <--- ( D Z ) + ( S C A L E ) : < < MDZP: EQU $ PSR A,B LAD DZ < A=@DZ. < < TRONC COMMUN A + SUR DX/DY/DZ : < E82: EQU $ LBI 0 < B=0 : MEMORISATION '+'. JMP E83 < VERS LE TRONC COMMUN. < < < D X <--- ( D X ) - ( S C A L E ) : < < MDXM: EQU $ PSR A,B LAD DX < A=@DX. JMP E84 < VERS LE TRONC COMMUN. < < < D Y <--- ( D Y ) - ( S C A L E ) : < < MDYM: EQU $ PSR A,B LAD DY < A=@DY. JMP E84 < VERS LE TRONC COMMUN. < < < D Z <--- ( D Z ) - ( S C A L E ) : < < MDZM: EQU $ PSR A,B LAD DZ < A=@DZ. < < TRONC COMMUN A - SUR DX/DY/DZ : < E84: EQU $ LBI 1 < B=1 : MEMORISATION '-'. < < TRONC COMMUN A +/- SUR DX/DY/DZ : < E83: EQU $ LR A,W < W=@DX/DY/DZ. CPZ 0,W < Y-A-T'IL UNE PROJECTION < PARALLELE A CET AXE ??? JE E132 < OUI , EN CONSEQUENCES , ON < NE MODIFIE PAS CE DELTA !! LA SCALE < A=+SCALE. CPZR B < DISCRIMINATION OPERATION +/-. JE E85 < C'EST UN '+' QUI EST DEMANDE. NGR A,A < A=-SCALE SI '-' DEMANDE. E85: EQU $ AD 0,W < A=DX/DY/DZ+/-SCALE. JMP E86 < VERS LA VALIDATION DU RESULTAT : < < < A J O U T D E S C A L E A D X & D Y & D Z : < < MP: EQU $ BSR AMDXP < DX<--(DX)+(SCALE). BSR AMDYP < DY<--(DY)+(SCALE). BSR AMDZP < DZ<--(DZ)+(SCALE). RSR < < < M O I N S S C A L E S U R D X & D Y & D Z : < < MM: EQU $ BSR AMDXM < DX<--(DX)-(SCALE). BSR AMDYM < DY<--(DY)-(SCALE). BSR AMDZM < DZ<--(DZ)-(SCALE). RSR < < < P R O J E C T I O N S P A R A L L E L E S A U X A X E S : < < < FONCTION : < CES 3 PRIMITIVES PERMETTENT DE < PROJTER LES DESSINS SUR LES PLANS < DE COORDONNEES , C'EST-A-DIRE < PARALLELEMENT AUX AXES. < < < P R O J E C T I O N S U R ( O Y , O Z ) : < PX: EQU $ STZ DX < PROJECTION PARALLELE A OX. JMP E340 < VERS LA SORTIE .... < < P R O J E C T I O N S U R ( O X , O Z ) : < PY: EQU $ STZ DY < PROJECTION PARALLELE A DY. JMP E340 < VERS LA SORTIE .... < < P R O J E C T I O N S U R ( O X , O Y ) : < PZ: EQU $ STZ DZ < PROJECTION PARALLELE A DZ. E340: EQU $ BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE?? RSR PAGE < < < D E F I N I T I O N D E L A < T R A N S F O R M A T I O N C O U R A N T E : < < < FONCTION : < CETTE PRIMITIVE PERMET DE METTRE A JOUR , < OU DE REMETTRE A L'ETAT ELEMENT < NEUTRE , LA TRANSFORMATION COURANTE. < ELLE TIENT COMPTE DES DEGRES D'IDEMPOTENCE < DE CHAQUE TRANSFORMATION ELEMENTAIRE. < ON A ACCES A 3 FONCTIONS DIFFERENTES : < - T<--ELEMENT NEUTRE , < - T<--T+T(X) , < - T<--T-T(X). < < < ARGUMENT : < A=NUMERO DE LA TRANSFORMATION ELEMENTAIRE QUE < L'ON VEUT AJOUTER OU RETRANCHER A LA < TRANSFORMATION COURANTE , < A=0 : ON REMET LA TRANSFORMATION COURANTE < A L'ETAT ELEMENT NEUTRE. < < < S U P P R E S S I O N T R A N S F O R M A T I O N < E L E M E N T A I R E : < RTRANS: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LBI 0 < MEMORISATION 'SUPPRESSION D'UNE < TRANSFORMATION ELEMENTAIRE'. JMP E75 < VERS L'EXECUTION. < < A J O U T D ' U N E T R A N S F O R M A T I O N < E L E M E N T A I R E : < TRANS: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LBI 1 < MEMORISATION 'AJOUT D'UNE < TRANSFORMATION ELEMENTAIRE'. < < TRAITEMENT COMMUN A +/- : < E75: EQU $ JAL E70 < ERREUR DE TRANSFORMATION. JAE E71 < RETOUR A L'ELEMENT NEUTRE. CPI NT < VALIDATION. JG E70 < ERREUR DE NUMERO. < < MISE A JOUR DE LA TRANSFORMATION COURANTE : < LR A,X < X=NUMERO DEMANDE. CPZR B < DISCRIMINATION +/- ???? JE E76 < SUPPRESSION D'UNE TRANSFORMATION. < < AJOUT D'UNE TRANSFORMATION : < MP C11 XR A,B < A NOTER : B=0. AD AMAT LR A,W < W=@MATRICE DE LA TRANSFORMATION < ELEMENTAIRE DEMANDEE. LBY &TRANSN < A=COMPTE COURANT D'ITERATIONS. ADRI 1,A < +1 SUR LE COMPTE D'ITERATIONS. XR A,B < A=0 ; B=COMPTE D'ITERATIONS. DV PERIOD,W < B=NBRE REEL D'ITERATIONS. < < TRONC COMMUN AJOUT/SUPPRESSION : < E76: EQU $ LR B,A STBY &TRANSN < MAJ DU COMPTE D'ITERATIONS. CPZR B < TEST DE SUPPRESSION DE LA < TRANSFORMATION ELEMENTAIRE ???? LA TRANSC LB TRANSC+1 < ACCES AUX INDICATEURS DE < PRESENCE. SBT 0,X < AJOUT A PRIORI. JNE E74 < EFFECTIVEMENT , ON AJOUTE CETTE < TRANSFORMATION ELEMENTAIRE. RBT 0,X < ET NON , IL FAUT LA SUPPRIMER .... E74: EQU $ STA TRANSC < MAJ DES INDICATEURS DE STB TRANSC+1 < DE PRESENCE. JMP E73 < VERS LA SORTIE .... < < RETOUR A L'ETAT ELEMENT NEUTRE : < VIDE: EQU $ < ENTRY DIRECTE DE RETOUR A < L'ELEMENT NEUTRE. PSR A,B,X,Y LAI 0 < POUR RAZER LES OCCURENCES. E71: EQU $ STZ TRANSC < REMISE A 0 DES INDICATEURS DE STZ TRANSC+1 < DE PRESENCE. LXI NT < A NOTER QU'ON A ICI : A=0 !!!!! < < BOUCLE DE RAZ DES COMPTES D'ITERATIONS : < E72: EQU $ STBY &TRANSN JDX E72 < AU SUIVANT. < < SORTIE DES ROUTINES : < E73: EQU $ BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE?? PLR A,B,X,Y RSR < < < C R E A T I O N D ' U N E N O U V E L L E < T R A N S F O R M A T I O N U S E R : < < < FONCTION : < PERMET DE CREER UNE NOUVELLE < TRANSFORMATION (TUS1/TUS2/TUS3) , < EN DONNANT COMME ARGUMENT LE NUMERO < DE CELLE QUE L'3N VEUT CREER , ET < L'ADRESSE DE LA MATRICE DE TRANSFORMATION < SUR DIM*DIM+2 MOTS. < < < ARGUMENTS : < A=NUMERO DE LA TRANSFORMATION (TUS1/TUS2/TUS3) , < ((K))=@DE LA MATRICE DE LA NOUVELLE TRANSFORMATION. < < CREAT: EQU $ LR K,W < W POINTE SUR L'ADRESSE DE < L'ADRESSE DE LA MATRICE < DE TRANSFORMATION (CF. ADRESSE < DE RETOUR DU BSR). IC 0,W < CALCUL DE L'ADRESSE DE RETOUR. PLR W < W=@+1 DE L'ADRESSE DE LA < MATRICE ARGUMENT. ADRI 1,K < AFIN D'ANNULER LES EFFETS DU PLR. PSR A,B,X,Y < < VALIDATION DU NUMERO DEMANDE : < JALE E70 < ERREUR DE NUMERO. CPI NTUS < VALIDATION. JG E70 < ERREUR DE NUMERO. < < CREATION DE LA TRANSFORMATION : < MP C11 LA AMAT ADR A,B < B=@DESTINATRICE DANS LA < ZONE DES TRANSFORMATIONS < ELEMENTAIRES ('MATRIX'). LA -1,W < A=ADRESSE DE LA MATRICE < ARGUMENT=EMETTEUR ; B=RECEPTEUR. LX C11 < X=NBRE DE MOTS A DEPLACER. MOVE < INITIALISATION DE LA NOUVELLE < TRANSFORMATION. JMP E73 < VERS LA SORTIE. < < TRAITEMENT DES ERREURS : < E70: EQU $ BSR AERR < AFIN DE CONNAITRE L'ADRESSE < D'ERREUR. PAGE < < < D E P L A C E M E N T S D U C U R S E U R < V I R T U E L : < < < FONCTION : < ON DISTINGE 6 DEPLACEMENTS DIFFERENTS : < 1 : DELTA(X)>0 , < 4 : DELTA(X)<0 , < 2 : DELTA(Y)>0 , < 5 : DELTA(Y)<0 , < 3 : DELTA(Z)>0 , < 6 : DELTA(Z)<0. < TOUS LES DELTA ETANT REPERES DANS LE < REFERENTIEL LOCAL. < < < < DEPLACEMENT DELTA(X)>0 : < D1: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LA DX < A=DX. JMP E1 < < DEPLACEMENT DELTA(X)<0 : < D4: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LA DX NGR A,A < A=-DX. E1: EQU $ LBI 0 < B=0. LYI 0 < Y=0. JMP E2 < < DEPLACEMENT DELTA(Y)>0 : < D2: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LB DY < B=DY. JMP E3 < < DEPLACEMENT DELTA(Y)<0 : < D5: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LB DY NGR B,B < B=-DY. E3: EQU $ LAI 0 < A=0. LYI 0 < Y=0. JMP E2 < < DEPLACEMENT DELTA(Z)>0 : < D3: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LY DZ < Y=DZ. JMP E4 < < DEPLACEMENT DELTA(Z)<0 : < D6: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!! LY DZ NGR Y,Y < Y=-DZ. E4: EQU $ LAI 0 < A=0. LBI 0 < B=0. < < CALCUL DU DEPLACEMENT VECTORIEL LOCAL DE CV : < E2: EQU $ < ON A ICI : < A=DELTAX , < B=DELTAY , < Y=DELTAZ. < (CES DEPLACEMENTS ETANT LOCAUX). PSR B FLT FST DV+X < DELTAX LOCAL. PLR A FLT FST DV+Y < DELTAY LOCAL. LR Y,A FLT FST DV+Z < DELTAZ LOCAL. < < D E P L A C E M E N T L O C A L D E C V : < PSR B < SAVE (DELTAY) LOCAL... FLT FAD XL FST XL < XL <-- (XL)+(DELTAX). PLR A FLT FAD YL FST YL < YL <-- (YL)+(DELTAY). LR Y,A FLT FAD ZL FST ZL < ZL <-- (ZL)+(DELTAZ). < < D E P L A C E M E N T G L O B A L D E C V : < LA TRANSC LB TRANSC+1 < (A,B)=TRANSFORMATIONS ELEMEN- < TAIRES COURANTES. < < BOUCLE D'APPLICATION DE CHAQUE TRANSFORMATION ELEMENTAIRE : < E12: EQU $ JANE E10 < OK , IL EN RESTE AU MOINS UNE. CPZR B JE E11 < OU BIEN LA TRANSFORMATION < COURANTE EST L'ELEMENT NEUTRE , < OU BIEN ON LES A TOUTS < APPLIQUYEES. < < CAS OU IL RESTE AU MOINS UNE TRANSFORMATION < ELEMENTAIRE A APPLIQUER : < E10: EQU $ DBT < X=NUMERO DE LA TRANSFORMATION < ELEMENTAIRE. RBT 0,X < MEMORISATION DE SON APPLICATION. PSR A,B < SAUVEGARDE DE LA TRANSFORMATION < RESIDUELLE COURANTE. LBY &TRANSN < A=NBRE D'ITERATIONS DE LA < TRANSFORMATION ELEMENTAIRE (X). XR A,X < X=NBRE D'ITERATIONS , < A=NUMERO DE LA TRANSFORMATION. MP C11 < CALCUL DU DEPLACEMENT DE < MATRICE DE LA TRANSFORMATION < (X) PAR RAPPORT A 'MATRIX'. LA AMAT < A=@MATRIX. ADR B,A < A=@MATRICE DE LA TRANSFORMATION < ELEMENTAIRE (X). STA AMATC < GENERATION DU RELAI DIRECT < VERS LA MATRICE (X). SBT 0 < POSITIONNEMENT DU BIT INDEX. STA AMATCX < GENERATION DU RELAI INDEXE VERS < LA MATRICE (X). < < BOUCLE D'ITERATIONS DE LA TRANSFORMATION (X) : < E13: EQU $ PSR X < SAVE LE COMPTE D'ITERATIONS < RESIDUEL. LXI A33 < ON COMMENCE LES PRODUITS < MATRICIELS PAR L'ELEMENT < A33 DES MATRICES. < < CALCUL DU PRODUIT MATRICIEL DU DEPLACEMENT 'DV' < PAR LA MATRICE DE TRANSFORMATION ELEMENTAIRE (X) : < E14: EQU $ FLD FZERO < INITIALISATION DU CUMUL FST CUMUL < D'UN PRODUIT LIGNE DE LA MATRICE < PAR LE VECTEUR DEPLACEMENT DV. FLD DV+Z BSR ACOMPF < Y=AI3*DVZ. FLD DV+Y BSR ACOMPF < Y=AI2*DVY+AI3*DVZ. FLD DV+X BSR ACOMPF < Y=AI1*DVX+AI2*DVY+AI3*DVZ. ADRI 1,X < POUR PERMETTRE UN JDX CORRECT. FLD CUMUL PSR A,B < SAVE AI1*DVX+AI2*DVY+AI3*DVZ. JDX E14 < PASSAGE A LA LIGNE PRECEDENTE < DE LA MATRICE DE TRANSFORMATION. PLR A,B < Y=A11*DVX+A12*DVY+A13*DVZ. FST DV+X < DVX<--A11*DVX+A12*DVY+A13*DVZ. PLR A,B < Y=A21*DVX+A22*DVY+A23*DVZ. FST DV+Y < DVY<--A21*DVX+A22*DVY+A23*DVZ. PLR A,B < Y=A31*DVX+A32*DVY+A33*DVZ. FST DV+Z < DVZ<--A31*DVX+A32*DVY+A33*DVZ. PLR X < RESTAURE LE COMPTE D'ITERATIONS < RESIDUELLES. JDX E13 < ITERATION EVENTUELLE DE LA < TRANSFORAMTION ELEMENTAIRE < COURANTE. PLR A,B < RESTAURE LA TRANSFORMATION < RESIDUELLE. JMP E12 < PASSAGE A L'EVENTUELLE TRANSFOR- < MATION ELEMENTAIRE SUIVANTE. < < DEPLACEMENT DU CVG : < E11: EQU $ FLD DV+X FAD XG FST XG < XG<--(XG)+(DVX). FLD DV+Y FAD YG FST YG < YG<--(YG)+(DVY). FLD DV+Z FAD ZG FST ZG < ZG<--(ZG)+(DVZ). PLR A,B,X,Y RSR < OUF ....!!..! < < < P R O D U I T S M A T R I C I E L S P A R T I E L S : < < < ARGUMENT : < A=UNE COORDONNEE DU VECTUER DEPLACEMENT 'DV'. < CUMUL=CUMUL COURANT D'UN PRODUIT D'UNE < LIGNE PAR LE VECTEUR DV. < X=INDEX DE L'ELEMENT COURANT DE LA < MATRICE DE TRANSFORMATION ELEMENTAIRE COURANTE. < < < RESULTAT : < CUMUL=NOUVEL VALEUR DU PRODUIT LIGNE PARTIEL. < X <-- (X)-1. < < COMPUT: EQU $ CPZ &AMATCX JE E700 < LE COEFFICIENT A(I,J) DE LA < MATRICE ETANT NUL , IL NE < PARTICIPE PAS AU CALCUL. FLT E21XX: EQU $ < ENTRY 'FCOMPU'... FST FLW1 < FLW1=COORDONNEE COURANTE... LA &AMATC < DIVISEUR, JANE E21X < OK... LAI 1 < S'IL EST NUL, C'EST QU'IL VAUT 1... E21X: EQU $ FLT < FST FLW2 < FLW2=DIVISEUR COURANT. LA &AMATCX < A=DIVIDENDE COURANT, FLT FMP FLW1 < DIVIDENDE*COORDONNEE. FDV FLW2 < DIVIDENDE*COORDONNEE/DIVISEUR. FAD CUMUL FST CUMUL < CUMUL DE L'ELEMENT COURANT... E700: EQU $ < ENTRY 'COEFFICIENT A(I,J) NUL'. ADRI -1,X < PREPARATION DE L'2NDEX D'ACCES < A L'ELEMENT PRECEDENT DE LA < MATRICE DE TRANSFORMATION. RSR < < < F C O M P U : E N T R Y F L O T T A N T E : < < < ARGUMENTS : < A,B=UNE COORDONNEE FLOTTANTE,... < < FCOMPU: EQU $ CPZ &AMATCX JE E700 < A(I,J)=0 : RIEN A FAIRE... JMP E21XX PAGE < < < P R O J E C T I O N P L A N N E : < < < FONCTION : < CETTE ROUTINE EST CHAGREE DE PROJETER < SUR LE PLAN DE L'ECRAN L'UNE DES 2 < EXTREMITES DU SEGMENT COURANT . DE PLUS AUCUNE < VERIFICATION N'EST FAITE A CE NIVEAU QUANT < AUX 'OVERSCREEN' .... < < < ARGUMENT : < W=@SEGORG/SEGEXT. < < < RESULTATS : < A=COORDONNE HORIZONTALE X SUR L'ECRAN , < Y=COORDONNE VERTICALE Z SUR L'ECRAN. < < PROJ: EQU $ LAD MPROJ < ACCES A LA PSEUDO-MATRICE < DE PROJECTION PLANE. STA AMATC < GENERATION DE SON RELAI DIRECT. SBT 0 < BIT INDEX. STA AMATCX < GENERATION DE SON RELAI INDEXE. FLD F512 < INITIALISATION DU CUMUL DU FST CUMUL < 'PRODUIT LIGNE' AU CENTRE DE < L'ECRAN. LXI 2 < ON COMMENCE AU 2EME ELEMENT < DE LA PSEUDO-MATRICE. FLD Y,W < A=COORDONNEE Y DE L'EXTREMITE < ARGUMENT. < (SOIT YS). BSR ACOMPF < Y=YS*SINUS(PROJECTION)+512. FLD CUMUL PSR A,B < SAVE YS*SINUS(PROJECTION)+512. FLD F512 < REPOSITIONNEMENT AU CENTRE FST CUMUL < DE L'ECRAN. FLD Y,W < A=YS (ARGUMENT). BSR ACOMPF < Y=YS*COSINUS(PROJECTION)+512. PLR A,B < RESTAURE A=YS*SINUS(PROJECTION)+ < 512. FAD Z,W < AJOUTONS L'EXTREMITE Z DE BSR PAROND < L'EXTREMITE ARGUMENT (ZS). LR A,Y < ON A : < Y=ZS+YS*SINUS+512 , FLD CUMUL < AJOUTONS LA COORDONNEE X DE FAD X,W < L'EXTREMITE ARGUMENT (XS) , BSR PAROND < ON A : < A=XS+YS*COSINUS+512. RSR PAGE < < < R E S O L U T I O N D ' U N E E Q U A T I O N < L I N E A I R E E N X O U Z : < < < ARGUMENT : < A=LA DONNE INITIALE (X OU Z) , < X=COMPTE COURANT DES OVERSCREEN , < W=@POINT D'INTERSECTION COURANT ('INTER'). < < < RESULTAT : < X<--(X)+1 , SI LA SOLUTION DE L'EQUATION < PROPOSEE EST OVERSCREEN , < SINON : LE POINT D'INTERSECTION COURANT < RECOIT LA SOLUTION (X,Z) DE L'EQUATION , < ET : W<--(W)+2. < < < C A L C U L D E X , Z E T A N T D O N N E : < < CALX: EQU $ STA NZ,W < SAVE A PRIORI LA DONNEE < INITIALE (Z). CPZ P1 < LA RESOLUTION DE L'EQUATION < EST-ELLE POSSIBLE ????? JNE E30 < OUI , OK. < < CAS D'UNE RESOLUTION IMPOSSIBLE (DIVISION PAR 0) : < E32: EQU $ ADRI 1,X < ET UN OVERCREEN DE PLUS .... < < RETOUR DES 2 ROUTINES : < E31: EQU $ RSR < < CAS D'UNE RESOLUTION EN 'X' POSSIBLE : < E30: EQU $ NGR A,A < A=-Z. MP P2 < A,B=-Z*P2. LY P3+1 < AFIN DE FAIRE UN CALCUL < DOUBLE-PRECISION. ADR Y,B < TOTALISATION PARTIELLE DE -Z*P2 < ET DE P3. ADCR A < PROPAGATION DE LA RETENUE. AD P3 < A,B=-Z*P2+P3. DV MP1 < A=QUOTIENT PAR DEFAUT DE : < (-Z*P2+P3)/(-P1). STA NX,W < RANGEMENT DU X DE LA SOLUTION < A PRIORI. < < TEST D'OVERSCREEN : < E33: EQU $ JAL E32 < SOLUTION NEGATIVE REFUSEE. CP BORNE JG E32 < SOLUTION SUPERIEUR A BORNE < REFUSEE. ADRI 2,W < LORSQUE LA SOLUTION EST DANS < L'ECRAN , ELLE DEVIENT UN POINT < D'INTERSECTION ADMIS. JMP E31 < OK , RETOUR. < < < C A L C U L D E Z , X E T A N T D O N N E : < < CALZ: EQU $ STA NX,W < SAVE LA DONNEE INITIALE < (X) A PRIORI. CPZ P2 < LA RESOLUTION DE L'EQUATION < PROPOSEE EST-ELLE POSSIBLE ???? JE E32 < NON , OVERSCREEN. < < CAS D'UNE RESOLUTION POSSIBLE : < MP P1 < A,B=X*P1. LY P3+1 < POUR UN CALCUL DOUBLE-PRECISION. ADR Y,B < TOTALISATION PARTIELLE DE < X*P1 ET DE P3. ADCR A < PROPAGATION DE LA RETENUE. AD P3 < SUITE DE LA TOTALISATION. DV P2 < A=QUOTIENT PAR DEFAUT DE < X*P1/P2. STA NZ,W < SAVE A PRIORI LA SOLUTION Z. JMP E33 < VERS LE TEST D'OVERSCREEN DE < LA SOLUTION Z OBTENUE. PAGE < < < O R I G I N E D U S E G M E N T C O U R A N T : < < < FONCTION : < CETTE ROUTINE FIXE L'ORIGINE DU < SEGMENT COURANT A 6'EMPLACEMENT DU < CURSEUR VIRTUEL GLOBAL. < < PA: EQU $ PSR A,B,X < QUELLE PRUDENCE !!! LAD SEGORG LR A,B < B=@SEGORG=@RECEPTEUR. LAD CVG < A=@CURSEUR VIRTUEL GLOBAL < =@ EMETTEUR. LXI DIMCV*DIM < X=NBRE DE COORDONNEES A DEPLACER. MOVE < MISE EN PLACE DE L'ORIGINE < DU SEGMENT COURANT. PLR A,B,X RSR PAGE < < < E X T R E M I T E S D U S E G M E N T C O U R A N T : < < < FONCTION : < CETTE PRIMITIVE FIXE L'EXTREMITE DU < SEGMENT COURANT A L'EMPLACEMENT DU CURSEUR < VIRTUEL GLOBAL , PUIS PROJETTE LE SEGEMENT COURANT < SUR LE PLAN DE LA VISU ; ET ENFIN AVANT < LA VISUALISATION , ELLE CALCULE LES INTERSECTIONS < AVEC LES BORDS DE L'ECRAN. < < < NOTA : < LA PRIMITIVE 'S' SERA UTILISEE < PAR LA PRIMITIVE 'B'. < < PS: EQU $ PSR A,B,X,Y < QUELLE PRUDENCE !!!! LAD SEGEXT LR A,B < B=@SEGEXT=@RECEPTEUR. LAD CVG < A=@CVG=@EMETTEUR. LXI DIMCV*DIM < X=NBRE DE COORDONNEES A DEPLACER. MOVE < MISE EN PLACE EXTREMITE DU < SEGMENT COURANT. < < PROJECTION DE L'EXTREMITE DU SEGEMENT COURANT : < LR B,W < W=@SEGEXT=@EXTREMITE DU < SEGMENT COURANT. BSR APROJ < PROJECTION DE L'EXTRMITE. STA X2 < COORDONNE X2 DU POINT M2. STY Z2 < COORDONNE Z2 DU POINT M2. < < PROJECTION DE L'ORIGINE DU SEGMENT COURANT : < ADRI SEGORG-SEGEXT,W < W=@SEGORG SEGMENT COURANT. BSR APROJ < PROJECTION DE L'ORIGINE. STA X1 < COORDONNEE X1 DU POINT M1. STY Z1 < COORDONNEE Z1 DU POINT M1. < < TEST D'INCLUSION DE M1M2 DANS L'ECRAN : < LA X1 BSR AOVS < TEST D'OVERSCREEN X1. LA Z1 BSR AOVS < TEST D'OVERSCREE DE Z1. LA X2 BSR AOVS < TEST D'OVERCREEN DE X2. LA Z2 BSR AOVS < TEST D'OVERSCREEN DE Z2. JMP E41 < LORSQU'ON ARRIVE ICI , C'EST < QU'AUCUNE DES COORDONNEES X1, < Z1,X2,Z2 N'EST OVERSCREEN. < < ROUTINE DE TEST D'OVERSCREEN : < OVS: EQU $ JAL E42 < UNE COORDONNEE NEGATIVE EST < OVERSCREEN. CP BORNE JG E42 < UNE COORDONNEE SUPERIEURE A < BORNE EST OVERCREEN. RSR < LE RETOUR A LIEU LORSQUE LA < COORDONNEE EST DANS L'ECRAN. < < CAS OU AU MOINS UNE COORDONNEE EST OVERSCREEN : < E42: EQU $ < CAS OU UN OVERCREEN EST SUR. ADRI -1,K < RATTRAPAGE DE LA PILE K , < LORSQU'1N RSR N'A PAS ETE FAIT. < < CALCUL DES PARAMETRES DE LA DROITE M1M2 : < < L'EQUATION DE LA DROITE EST : X*MP1+Z*MP2=P3, < AVEC : < P1=Z2-Z1 , < P2=X2-X1 , < P3=X2*Z1-X1*Z2. < DE PLUS : < A X DONNE : Z=(X*P1+P3)/P2 SI P2#0 , < A Z DONNE : X=(-Z*P2+P3)/MP1 SI P1#0. < LA Z2 SB Z1 STA P1 < P1=Z2-Z1. NGR A,A STA MP1 < MP1=-P1. LA X2 SB X1 STA P2 < P2=X2-X1. LA X2 MP Z1 < A,B=X2*Z1. STA P3 STB P3+1 < RANGEMENT TEMPORAIRE. LA X1 NGR A,A MP Z2 < A,B=-X1*Z2. LY P3+1 < POUR UN CALCUL EN DOUBLE- < PRECISION. ADR Y,B < TOTALISATION PARTIELLE. ADCR A < PROPAGATION DE LA RETENUE. STB P3+1 AD P3 < POURSUITE DU CUMUL. STA P3 < P3=X2*Z1-X1*Z2 , EN DOUBLE- < PRECISION. < < CALCUL DE L'INTERSECTION DE M1M2 AVEC L'ECRAN : < LAD INTER LR A,W < INITIALISATION DE W SUR LE 1ER < POINT D'INTERSECTION. LXI 0 < RAZ DU COMPTE DES OVERSCREEN. LAI 0 BSR ACALZ < CALCUL DE Z POUR X=0. LA BORNE BSR ACALZ < CALCUL DE Z POUR X=BORNE. LAI 0 BSR ACALX < CALCUL DE X POUR Z=0. LA BORNE BSR ACALX < CALCUL DE X POUR Z=BORNE. < < TEST DE L'OVERSCREEN COMPLET DE LA DROITE M1M2 : < LR X,A < A=COMPTE DE OVERSCREEN RENCONTRES. CPI 2 JG E40 < SI LE NBRE D'OVERSCREEN EST < SUPERIEUR A 2, ON ADMET QUE < LA DROITE M1M2 EST INVISIBLE .... < < CALCUL DE (N1,N2).INTER.(M1,M2) < (N1 ET N2 ETANT LES 2 POINTS D'INTERSECTION < NON OVERSCREEN). < < < PREPARATION DU TRI DES POINTS M1,M2,N1,N2 : < LAD SEG2+NZ LR A,W < W=@DES COORDONNEES DE M1. LXI NX-NZ LA P1 < A=P1. JAGE E69 < P1>=0. NGR A,A < A=-P1 ; ON MET DONC DANS A < LA VALEUR ABSOLUE DE P1. E69: EQU $ CP SCALE < LA DROITE M1M2 EST-ELLE < HORIZONTALE ???? < (AUX ERREURS DE CALCUL PRES...) JGE E60 < NON , LE TRI VA ETRE FAIT SUR Z. ADRI NX-NZ,W < OUI , LE TRI VA ETRE FAIT SUR X. LXI NZ-NX < POUR LES PERMUTATIONS DE < 2EME COORDONNEES. E60: EQU $ LYI 0 < Y MEMORISE LES PERMUTATIONS < QUI VONT ETRE OPEREES. < < TRI DE M1 ET M2 AFIN D'OBTENIR LA RELATION M1<M2 : < LA M1,W LB M2,W CPR A,B JGE E61 < RIEN A FAIRE , ON A DEJA : M1<M2. STA M2,W < SINON , ON ECHANGE M1 ET M2. STB M1,W ADRI 1,Y < BIT15(Y) : PERMUTATION M1,M2. E61: EQU $ < < TRI DE N1 ET N2 AFIN D'OBTENIR : N1<N2 : < LA N1,W LB N2,W CPR A,B JGE E62 < RIEN A FAIRE , ON A DEJA N1<N2. STA N2,W < SINON , ON ECHANGE N1 ET N2. STB N1,W ADRI 2,Y < BIT14(Y) : PERMUTATION N1,N2. E62: EQU $ < < ELIMINATION DES CAS IMPOSSIBLES OU INVISIBLES : < LA M1,W CP N2,W JGE E40 < M1>N2 : M1M2 EST INVISIBLE. LA M2,W CP N1,W JLE E40 < M2<N1 : M1M2 EST INVISIBLE. < < CHOIX DU 'PLUS GRAND' PARMI M1 ET N1 : < LA N1,W CP M1,W JLE E63 < N1<M1 : ON GARDE M1. STA M1,W < SINON N1 DEVIENT M1. ADRI 4,Y < BIT15(Y) : PERMUTATION M1,N1. E63: EQU $ < < CHOIX DU 'PLUS PETIT' PARMI M2 ET N2 : < LA N2,W CP M2,W JGE E64 < M2<N2 : ON GARDE M2. STA M2,W < SINON , N2 DEVIENT M2. ADRI 8,Y < BIT12(Y) : PERMUTATION M2,N2. E64: EQU $ < < PERMUTATION DES 2EME COORDONNEES DES POINTS M1,M2,N1,N2 : < LR Y,A < A=INDICATEUR DES PERMUTATIONS. ADR X,W < POSITIONNEMENT DE W SUR LA < COORDONNEE (X OU Z) NON ENCORE < PERMUTEE. < < PERMUTATION M1,M2 : < TBT 15 JNC E65 < M1 ET M2 SONT INCHANGES. LB M1,W LY M2,W STY M1,W STB M2,W E65: EQU $ < < PERMUTATION DE N1,N2 : < TBT 14 JNC E66 < N1 ET N2 SONT INCHANGES. LB N1,W LY N2,W STY N1,W STB N2,W E66: EQU $ < < PERMUTATION DE M1,N1 : < TBT 13 JNC E67 < M1 ET N1 SONT INCHANGES. LB M1,W LY N1,W STY M1,W STB N1,W E67: EQU $ < < PERMUTATION DE M2,N2 : < TBT 12 JNC E68 < M2 ET N2 SONT INCHANGES. LB M2,W LY N2,W STY M2,W STB N2,W E68: EQU $ < < < C O R R E C T I O N D ' E R R E U R S D E C A L C U L : < < < FONCTION : < DES ERREURS DE CALCUL (DIVISION ENTIERE) , < FONT QUE DES POINTS D'UNE MEMEME DROITE , < AYANT UNE COORDONNEE IDENTIQUE (X OU Z) , < ONT LEURS AUTRES COORDONNEES (Z OU X) < DIFFERENTES . ON RETABLIT ICI LES < COINCIDENCES. < < LAD SEG2+NZ LR A,W < W POINTE SUR LA 1ERE COORDONNEE < DU POINT M1. LXI 2*2 < ON VA VERIFIER LES 2 COORDONNEES < DES 2 POINTS M1 ET M2. < < BOUCLE DE VERIFICATION : < E602: EQU $ LA 0,W < A=UNE COORDONNEE Z/X DE M1/M2. JAGE E600 LAI 0 < SI L'ARGUMENT EST NEGATIF , ON < LE REND NUL. E600: EQU $ CP BORNE < TEST OVERSCREEN POSITIF. JLE E601 < OK , ARGUMENT DANS L'ECRAN. LA BORNE < SI L'ARGUMENT EST HORS L'ECRAN < POSITIF , ON LUI DONNE LA < VALEUR 'BORNE'. E601: EQU $ STA 0,W < MISE A JOUR EVENTUELLE D'UNE < COORDONNEE Z/X DE M1/M2. ADRI 1,W < PASSAGE A LA COORDONNEE JDX E602 < SUIVANTE. < < < A F F I C H A G E D U S E G M E N T < C O U R A N T P R O J E T E : < < E41: EQU $ < CAS OU LE SEGMENT COURANT EST < TOUT ENTIER DANS L'ECRAN. LAD OG < PASSAGE AU MODE GRAPHIQUE. SVC 0 JNE E450 < CAS DES CTRL-X-OFF. LAD WG < AFFICHAGE DU SEGMENT COURANT. SVC 0 JNE E450 < CAS DES CTRL-X-OFF. E40: EQU $ < CAS OU LE SEGMENT COURANT EST < ENTIEREMENT A L'EXTERIEUR < DE L'ECRAN. PLR A,B,X,Y RSR < < CAS DES CTRL-X-OFF : ON ABORTE LE < DESSIN ET ON FAIT UN RETOUR AU 'CCI' : < E450: EQU $ BSR ACI < RETOUR AU 'CCI'. JMP E40 < ???? PAGE < < < E X T R E M I T E B D U S E G M E N T C O U R A N T : < < < FONCTION : < FONCTION IDENTIQUE A LA PRIMITIVE 'PS' , < MAIS A LA FIN DU TRAVAIL , L'EXTREMITE DU < SEGMENT COURANT DEVIENT LA NOUVELLE < ORIGINE DE CELUI-CI. < < PB: EQU $ BSR APS < EXECUTION DE LA PRIMITIVE 'PS'. < < CHANGEMENT DE L'ORIGINE DU SEGMENT COURANT : < PSR A,B,X < PAR PRUDENCE ... LAD SEGORG LR A,B < B=@SEGORG=@RECEPTEUR. ADRI SEGEXT-SEGORG,A < A=@SEGEXT=@EMETTEUR. LXI DIMCV*DIM < X=NBRE DE COORDONEES A DEPLACER. MOVE < CHANGEMENT D'ORIGINE. PLR A,B,X RSR PAGE < < < A R R O N D I F L O T T A N T : < < < ARGUMENT : < (A,B)=NOMBRE FLOTTANT. < < < RESULTAT : < A=NOMBRE ENTIER DONNANT LA VALEUR PAR EXCES < OU PAR DEFAUT DE L'ARGUMENT... < < AROND: EQU $ FAD FAROND FIX RSR PAGE < < < G E N E R A T I O N D E P R I M I T I V E S G R A P H I Q U E S < < D E T Y P E < 1 2 3 4 5 6 > E X P R I M A N T L E S < < D E P L A C E M E N T S A E F F E C T U E R E N T R E D E U X < < P O I N T S. < < < CE S/P TRADUIT EN TERMES DE PRIMITIVES <1,2,3,4,5,6> < (VOIR LE PROCESSEUR 3D) LES DEPLACEMENTS A EFFECTUER < ENTRE DEUX POINTS P1 ET P2 DE COORDONNEES RESPECTIVES < (X1,Y1,Z1),(X2,Y2,Z2). CES COORDONNEES SONT PLACEES < DANS UNE TABLE DE 6 MOTS BASEE PAR 'W'. < < LES DEPLACEMENTS SONT: < - SUR L'AXE DES X : 1 ET 4 < - SUR L'AXE DES Y : 2 ET 5 < - SUR L'AXE DES Z : 3 ET 6 < < ARGUMENTS: < < 'A'=ADRESSE MOT DE LA TABLE CONTENANT LES COORDONNEES. < < RESULTAT: < < 'A'=ADRESSE MOT DE LA SEQUENCE GENEREE, DELIMITEE < PAR UN $. < < NOTA: SEUL LE REGISTRE 'A' EST DETRUIT. < < < A T T E N T I O N : < 'ZZGEN' TRAVAILLE EN ENTIER, D'OU : < < X: VAL X/DIMCV Y: VAL Y/DIMCV Z: VAL Z/DIMCV < < ZZGEN: EQU $ PSR B,X,Y,W < SAUVEGARDES. LR A,W < ADRESSE TABLE DES COORDONNEES. < < RAZ SEQUENCE GENEREE. < STZ &ZZASEQ LRM A,B,X WORD ZZSEQ < EMETTEUR. WORD ZZSEQ+1 < RECEPTEUR. WORD LZSEQ < LONGUEUR. < < INITIALISATION POINTEUR SUR 'ZZSEQ' < LA ZZAOS STA ZZPCS < POINTEUR COURANT OCTET. < < ACQUISITION ET EXPLOITATION DES COORDONNEES. < LA X,W < X1. LB X+DIM,W < X2. LXI "1" < PRIMITIVE. LY DX < UNITES EN X. BSR ZZACAL < LA Y,W < Y1. LB Y+DIM,W < Y2. LXI "2" < PRIMITIVE. LY DY < UNITES EN Y. BSR ZZACAL < LA Z,W < Z1. LB Z+DIM,W < Z2. LXI "3" < PRIMITIVE. LY DZ < UNITES EN X. BSR ZZACAL < < DELIMITEUR '$' DE FIN DE SEQUENCE. < LX ZZPCS < POINTEUR COURANT (FORCEMENT < VALIDE). LAI "$" STBY &ZZINF < < FIN DU SOUS-PROGRAMME. < LA ZZASEQ < A=ADRESSE DE LA SEQUENCE GENEREE. PLR B,X,Y,W < RESTAURATIONS. RSR ZZCAL: EQU $ < < S/P DE GENERATION DES PRIMITIVES. < < ARGUMENTS: < 'A'=X1/Y1/Z1 < 'B'=X2/Y2/Z2 < 'X'="1"/"2"/"3" < 'Y'=UNITES X/Y/Z < 'ZZPCS'=POINTEUR COURANT SUR 'ZZSEQ'. < < RESULTAT: SEQUENCE DANS 'ZZSEQ' < < NOTA: SI DEBORDEMENT, RETOUR CCI... < PSR A,B,X,Y < SAUVEGARDES. < STY ZZK < UNITE COURANTE. STX ZZPRIM < PRIMITIVE COURANTE. < SBR B,A < CALCUL X2-X1 (OU Y2-Y1...)1- NGR A,A SARD 16 < ON ETEND LE SIGNE. DV ZZK < DIVISION PAR UNITE. LR A,X < 'X'=NOMBRE DE PRIMITIVES A GENERER < (POSITIF OU NEGATIF). LA ZZPRIM < PRIMITIVE A PRIORI. CPZR X JE ZZCALF < RIEN A GENERER. JG ZZCAL1 < DEPLACEMENT POSITIF. ADRI DIM,A < "1" DEVIENT "4", ETC. NGR X,X < 'X' SERA POSITIF. ZZCAL1: EQU $ PSR X < SAVE INDEX DE BOUCLE. LX ZZPCS < POINTEUR COURANT. STBY &ZZINF < ON PLACE LA PRIMITIVE. IC ZZPCS < INCREMENTAION DU POINTEUR. LR A,Y < SAVE PRIMITIVE. LA ZZPCS CP ZZAOSF < VALIDATION POINTEUR. < (IL NE FAUT PAS OUBLIER QU'ON < AURA UN "$" A PLACER EN FIN DE SEQUENCE. LR Y,A < RECUPERATION PRIMITIVE. JL ZZCAL2 < OK. WORD '1E16 < DEBORDEMENT: RETOUR CCI... ZZCAL2: EQU $ PLR X < RECUP INDEX DE BOUCLE. JDX ZZCAL1 < SUIVANT! < ZZCALF: EQU $ PLR A,B,X,Y < RESTAURATIONS. RSR < < < A T T E N T I O N : < ON REVIENT EN FLOTTANT, D'OU : < < X: VAL X*DIMCV Y: VAL Y*DIMCV Z: VAL Z*DIMCV < < PAGE < < C A L C U L M A T R I C E D E T R A N S F O R M A T I O N. < < ARGUMENTS: < 'A'&'B' CONTIENNENT ANGLE DE ROTATION EN FLOTTANT. < 'Y' = 0 OU 1 0U 2 C'EST L'AXE DE ROTATION. < < RESULTAT: < LA MATRICE 'ZZMAT' EST INITIALISEE. < PROG < < MATRICE DE TRANSFORMATION 'ZZMAT'. < ZZMAT: DZS DIM*DIM*DIMCV ZZCMT: EQU $ PSR A,B,X,Y PSR W < < CALCUL DE SIN ET COSINUS DE L'ANGLE TETA-ROTATION. < FST ZZST-DIMCV FST ZZST+DIMCV LAD ZZST-DIMCV BSR ASIN < SINUS. LAD ZZST+DIMCV BSR ACOS < COSINUS. < < RAZ DE LA MATRICE. < LXI DIM*DIM LRM W WORD ZZMAT FLD FZERO ZZCMT1: EQU $ FST 0,W ADRI DIMCV,W JDX ZZCMT1 < < MATRICE IDENTITE A PRIORI. < LXI DIM LRM W WORD ZZMAT LAI 1 FLT ZZCMT2: EQU $ FST 0,W ADRI DIM+1*DIMCV,W JDX ZZCMT2 < < < PLACER SINUS, COSINUS ET -SINUS. < LRM W WORD ZZMAT LR Y,A < AXE DE ROTATION. CPI X/2 JE ZZCMTX < AXE DES X. CPI Y/2 JE ZZCMTY < AXE DES Y. CPI Z/2 JE ZZCMTZ < AXE DES Z. WORD '1E16 < ??? ZZCMTX: EQU $ FLD ZZCT < COS. FST DIMM+DIMCV,W FST DIMM+DIMCV*2,W FLD ZZST < SINUS FST 2*DIMM+DIMCV,W FNEG < -SINUS. FST 2*DIMCV+DIMM,W JMP ZZCMTF ZZCMTY: EQU $ FLD ZZCT < COSINUS. FST 0,W FST DIMM+DIMCV*2,W FLD ZZST < SINUS FST 2*DIMM,W FNEG < -SINUS. FST 2*DIMCV,W JMP ZZCMTF ZZCMTZ: EQU $ FLD ZZCT < COSINUS. FST 0,W FST DIMM+DIMCV,W FLD ZZST < SINUS. FST DIMM,W FNEG < -SINUS. FST DIMCV,W ZZCMTF: EQU $ PLR W PLR A,B,X,Y RSR PAGE < < T R A N S F O R M A T I O N M A T R I C I E L L E < < ARGUMENTS: < 'A'=ADRESSE DU VECTEUR (X,Y,Z FLOTTANTS) < 'W'=ADRESSE DE LA MATRICE DE TRANSFORMATION. < < < RESULTAT: < (X,Y,Z) TRANSFORMES REMPLACENT (X,Y,Z) INITIAUX. < ZZTRS: EQU $ < ENTRY DE 'ZZTRS'. PSR A,B,X,Y PSR C,L,W < LR A,Y < 'Y' BASE LES COORDONNEES INITIALES. LRM L WORD ZZTRAV < 'L' BASE LES 3 VARIABLES DE TRAVAIL < (COORDONNEES TRANSFORMEES). < 'W' BASE LA MATRICE (PARAMETRE D'APPEL). < LXI DIMM/DIMCV < NOMBRE DE COORDONNEES. ZZTRS1: EQU $ PSR X LR Y,C < 'C' BASE LES COORDONNEES INITIALES. FLD 0,L FSB 0,L FST 0,L < RAZ COORDONNEE TRANSFORMEE COURANTE. LXI DIMM/DIMCV < NOMBRE DE COEFFICIENTS PAR LIGNE < DE LA MATRICE. ZZTRS2: EQU $ FLD 0,W < MIJ. FMP 0,C < MIJ * X (OU Y OU Z) FAD 0,L < CUMUL.. DANS COORDONNEE TRANSFORMEE < COURANTE. FST 0,L ADRI DIMCV,W < COEFFICIENT MIJ SUIVANT. ADRI DIMCV,C < COORDONNEE INITIALE SUIVANTE. JDX ZZTRS2 ADRI DIMCV,L < ON PASSE A LA COORDONNEE TRANSFORMEE < SUIVANTE. PLR X JDX ZZTRS1 < < CALCUL TERMINE, IL RESTE A REMPLACER (X,Y,Z) PAR < LES COORDONNEES TRANSFORMEES. < LRM A WORD ZZTRAV < EMETTEUR. LR Y,B < RECEPTEUR. LXI DIMM < LONGUEUR. MOVE < PLR C,L,W PLR A,B,X,Y RSR PAGE < < < G R A N D E S D O N N E E S : < < LCV: DZS 2*DIMCV*DIM*NCV LSCAL: DZS DIM+1*NSCAL LTC: DZS NT+2/2+2*NTC TRANST: DZS NT+2/2 < NBRE D'ITERATIONS DE CHAQUE < TRANSFORMATION ELEMENTAIRE , A < RAISON DE 1 OCTET POUR CHAQUE. PILE: DZS 500 < OUI... ZZSEQ: DZS 1024 < STOCKAGE DE SEQUENCES 1/2/3/4/5/6. ZZSEQF: EQU $ < FIN DE CETTE ZONE. BZSEQ: EQU ZZSEQ-ZERO*2+ZERO BZSEQF: EQU ZZSEQF-ZERO*2+ZERO LZSEQ: EQU ZZSEQF-ZZSEQ-1+ZERO