NMPROC: VAL "3D" < NOM DU PROCESSEUR.
IDP "3D - RELEASE 01/06/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 :
<
<
DIM: VAL 3
SIZE: VAL 1024 < NBRE DE POINTS LINEAIRES
< ADRESSABLES D'UN ECRAN.
EOT #SIP DEF PROCESSEUR#
WORD GRAPH < ADRESSE DE LANCEMENT DE CETTE
< BRANCHE D'OVERLAY.
<
< 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 !!!!!
LRP L
BR -2,L < ENTREE DANS LA BARNCHE '3D'.
EOT #SIP DEFINITION ITEM#
PAGE
<
<
< E S P A C E L I B R E D E T R A V A I L :
<
<
FREE: VAL '1000 < CET ESPACE EST IMPLANTE
< 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.
LCV: VAL FREE
FREE: VAL 2*DIM*NCV+FREE
<
< 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.
LSCAL: VAL FREE
FREE: VAL DIM+1*NSCAL+FREE
<
< 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.
LTC: VAL FREE
FREE: VAL NT+2/2+2*NTC+FREE
PAGE
<
<
< C O M M O N :
<
<
COMMON
COM: EQU $
<
< A C C E S A L ' I N T E R P R E T E U R :
<
< NOTA :
< CES 2 ROUTINES DOIVENT ABSOLUMENT
< ETRE RELAYEES PAR LES 2 PREMIERS
< MOTS DU COMMON , AFIN D'AVOIR DES
< DEPLACEMENTS D'ACCES AU COMMON CONNUS
< FACILEMENT DU PROGRAMME APPELANT.
<
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 :
<
CV: EQU $
DZS 2*DIM
X: VAL 0
Y: VAL 1
Z: VAL 2
CVL: EQU CV < CURSEUR VIRTUEL RAPPORTE AU
< REFERENTIEL LOCAL INSTANTANE.
CVG: EQU CV+DIM < 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*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 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*DIM
SEGORG: EQU SEG < ORIGINE DU SEGMENT COURANT.
SEGEXT: EQU SEG+DIM < 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 :
<
TRANST: VAL FREE < NBRE D'ITERATIONS DE CHAQUE
< TRANSFORMATION ELEMENTAIRE , A
< RAISON DE 1 OCTET POUR CHAQUE.
TRANSN: WORD TRANST+'8000 < 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.
FREE: VAL NT+2/2+FREE
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.
<
< 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.
<
< C O N S T A N T E S S O D O M E :
<
AIC: WORD ZERO+PILE-LTNI-LTNI+LTN,X
< ADRESSE DE L'ITEM COURANT CON-
< TENANT LE PROGRAMME GRAPHIQUE
< (ITEM2).
< (RELAI INDEXE).
LOVL: WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
< LONGUEUR EN OCTETS DES BRANCHES
< DES OVERLAYS DE SODOME.
APILEG: WORD PILE-1 < POUR INITIALISER K AVEC LA
< PILE DE 'GE' LORS DES RETOURS
< A 'GE'.
< A T T E N T I O N :
< CES DEFINITIONS DOIVENT ETRE
< IMPLEMENTEES AVANT LA MODIFICATION
< DE LA VALEUR DE 'PILE' !!!!!
NCALL: WORD $+1,X;"GE";"EI" < NOM DES OVERLAYS SUIVANTS.
AOVL: WORD OVL < ROUTINE DE CHARGEMENT DES
< OVERLAYS SUIVANTS.
<
< 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.
CCI: WORD '0001 < RETOUR AU CCI.
DEMCCI: EQU CCI < RETOUR AU CCI.
DEMMEM: WORD '0004 < DEMANDE D'ALLOCATION 6K MEMOIRE ,
< ET DE RETOUR A 4K MEMOIRE.
WORD 0
WORD '3000 < INITIALISEE SUR 6K MEMOIRE.
DEMSGN: WORD '8402 < INITIALIISE EN 'STORE' POUR
< LA GENERATION DE CETTE BRANCHE.
WORD BRANCH-ZERO*2 < @OCTET DE LA BRANCHE.
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1 < LA VALEUR SUIT LE NOM.
<
< P I L E D E T R A V A I L :
<
PILE: VAL FREE+1 < EN QUEUE POUR FAIRE UNE VIOLATION
< MEMOIRE EN CAS DE DEBORDEMENT
< DE LA PILE PAR LE HAUT.
<
< C O N S T A N T E S G E N E R A L E S :
<
APILE: WORD PILE-1
DUMY1: WORD 0 < WORKING STORAGE (TEMPORARY).
DUMY2: WORD 0 < WORKING STORAGE (TEMPORARY).
<
< 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.
<
< 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 < C : RETOUR AU CCI.
AERAS: WORD ERASE < E : EFFACEMENT DE L'ECRAN.
AGE: WORD GOBGE < F : RETOUR A SODOME.
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";AGE-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 A 'GE'> ,
< '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)> ,
< 'C'::=<RETOUR AU CCI> ,
PAGE
PROG PROG1
<
<
< 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 S O D O M E :
<
<
< FONCTION :
< CETTE PRIMITIVE PERMET DE FAIRE
< UN RETOUR VERS LA BRANCHE APPELANTE
< (GE/EI) DE SODOME.
<
<
GOBGE: EQU $
PSR A,X
LAD CG < RETOUR AU MODE ALPHA-NUMERIQUE.
SVC 0 < (C'EST MIEUX POUR SODOME....)
LB APILEG < RECUPERATION DE LA PILE DE 'GE'.
XR B,K < SAVE LE K DE TRAVAIL , ET
< REINITIALISE K AVEC
< LA PILE DE 'GE'.
LY DEMMEM+2 < SAVE LA LONGUEUR DE 6K MOTS.
LAI 0
SBT 2
STA DEMMEM+2 < LA DEMANDE D'ALLOCATION MEMOIRE
< EST MISE SUR 4K MOTS.
LAD DEMMEM
SVC 0 < RETOUR A 4K MOTS.
LAI BRANCH-ZERO
LR A,W < W=@BRANCH.
STZ MODCAL,W < REINITIALISATION DU MODE
< D'APPEL AU CAS OU LE RETOUR
< AURAIT LIEU VERS 'GE'.
<
< PREPARATION DE DEMSGN :
<
LAI 6
STBY DEMSGN < MISE EN PLACE DU NVP DE LOAD
< SOUS :SYS.
LAI BRANCH-ZERO*2
STA DEMSGN+1 < MISE EN PLACE DE L'ADRESSE
< OCTETS DE LA BRANCHE.
LA LOVL
STA DEMSGN+2 < MISE EN PLACE DE LA LONGUEUR
< OCTETS DES BRANCHES OVERLAY.
LAD DEMSGN < A=@DEMSGN ; W=@BRANCH.
BSR AOVL < TENTATIVE DE CHARGEMENT.
<
< ERREUR DE CHARGEMENT :
<
STY DEMMEM+2 < RESTAURE 6K MOTS.
LAD DEMMEM
SVC 0 < ON REDEMANDE LES 6K MOTS.
LR B,K < ET ON REPASSE SUR LA PILE
< DE TRAVAIL.
JMP E191 < CAS DES RETOURS EN ERREUR (POUR
< CHARGEMENT IMPOSSIBLE) , ON PASSE
< LA MAIN AU CCI.
<
<
< 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
PROG PROG6
<
<
< 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 $
STZ XG
STZ YG
STZ ZG
<
< ENTRY POUR POSITIONNEMENT ABSOLU DU CV :
<
E90: EQU $
STZ XL
STZ YL
STZ ZL
BSR ATINT < RETOUR A LA GRAMMAIRE INITIALE ??
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 :
< LES COORDONNEES LOCALES SONT RAZEES !!!!
<
<
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
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 DIM < NBRE DE COORDONNEES GLOBALES
< DU CV.
<
< BOUCLE DE DEPLACEMENT GLOBAL DU CV :
<
E91: EQU $
LA &DUMY1 < RECUPERATION DES NOUVELLES
< COORDONNEES DANS L'ORDRE Z,Y,X.
MP SCALE < PRISE EN COMPTE DU FACTEUR
< D'ECHELLE.
JAG E92 < ERREUR : OVERFLOW.
STB 0,W < OK , SAVE NOUVELLE COORDONNEE.
< (GLOBALE!!!).
ADRI -1,W < PASSAGE A LA COORDONNEE
< GLOBALE PRECEDENTE DU CV COURANT.
JDX E91 < SUIVANT.
PLR A,B,X
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
PROG PROG2
<
<
< 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
PROG PROG3
<
<
< 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
PROG PROG4
<
<
< 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).
STA DV+X < DELTAX LOCAL.
STB DV+Y < DELTAY LOCAL.
STY DV+Z < DELTAZ LOCAL.
<
< D E P L A C E M E N T L O C A L D E C V :
<
AD XL
STA XL < XL<--(XL)+(DELTAX).
LR B,A < A=DELTAX LOCAL.
AD YL
STA YL < YL<--(YL)+(DELTAY).
LR Y,A < A=DELTAZ . LOCAL.
AD ZL
STA 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 $
LYI 0 < INITIALISATION DU CUMUL
< D'UN PRODUIT LIGNE DE LA MATRICE
< PAR LE VECTEUR DEPLACEMENT DV.
LA DV+Z
BSR ACOMP < Y=AI3*DVZ.
LA DV+Y
BSR ACOMP < Y=AI2*DVY+AI3*DVZ.
LA DV+X
BSR ACOMP < Y=AI1*DVX+AI2*DVY+AI3*DVZ.
ADRI 1,X < POUR PERMETTRE UN JDX CORRECT.
PSR Y < SAVE AI1*DVX+AI2*DVY+AI3*DVZ.
JDX E14 < PASSAGE A LA LIGNE PRECEDENTE
< DE LA MATRICE DE TRANSFORMATION.
PLR Y < Y=A11*DVX+A12*DVY+A13*DVZ.
STY DV+X < DVX<--A11*DVX+A12*DVY+A13*DVZ.
PLR Y < Y=A21*DVX+A22*DVY+A23*DVZ.
STY DV+Y < DVY<--A21*DVX+A22*DVY+A23*DVZ.
PLR Y < Y=A31*DVX+A32*DVY+A33*DVZ.
STY 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 $
LA DV+X
AD XG
STA XG < XG<--(XG)+(DVX).
LA DV+Y
AD YG
STA YG < YG<--(YG)+(DVY).
LA DV+Z
AD ZG
STA 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'.
< Y=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 :
< Y=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.
MP &AMATCX < CALCUL DU PRODUIT DE LA
< COORDONNEE DE DV PAR L'ELEMENT
< COURANT DE LA MATRICE DE
< TRANSFORMATION.
CPZ &AMATC < TEST DU DIVISEUR DE LA MATRICE
< DE TRANSFORMATION COURANTE.
JE E20 < ETANT NUL C'EST QU'IL VAUT
< 1 , ET QU'ON A DONC RIEN A
< FAIRE (!!??!?).
<
< CAS OU LA MATRICE DE TRANSFORMATION A UN
< DIVISEUR ; ON DOIT DONC FAIRE CETTE
< CETTE DIVISION EN OPERANT SOIT PAR EXCES
< SOIT PAR DEFAUT SUIVANT LES CAS :
<
DV &AMATC < DIVISION DU PRODUIT COURANT
< PAR LE DIVISEUR DE LA MATRICE.
XR A,B < A=RESTE ; B=QUOTIENT.
ADR A,A < A=2*RESTE.
JAGE E21 < CAS OU LES RESTE EST POSITIF.
NGR A,A < CAS OU LES RESTE EST NEGATIF ,
< ON CALCULE SA VALEUR ABSOLUE.
E21: EQU $
CP &AMATC < COMPARAISON DE LA VALEUR
< ABSOLUE DU DOUBLE DU RESTE AU
< DIVISEUR DE LA MATRICE.
JL E20 < INFERIEUR , ON FAIT DONC UNE
< DIVISION ENTIERE PAR DEFAUT.
<
< CAS D'UNE DIVISION PAR EXCES :
<
CPZR B < TEST DU SIGNE DU QUOTIENT.
JGE E22 < CAS OU LE QUOTIENT EST POSITIF.
ADRI -2,B < CAS OU LE QUOTIENT EST NEGATIF.
E22: EQU $
ADRI 1,B < ON FAIT ICI UNE DIVISION
< ENTIERE PAR EXCES.
E20: EQU $
ADR B,Y < CUMUL DU PRODUIT LIGNE.
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
PAGE
PROG PROG5
<
<
< 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.
LY C512 < INITIALISATION DU CUMUL DU
< 'PRODUIT LIGNE' AU CENTRE DE
< L'ECRAN.
LXI 2 < ON COMMENCE AU 2EME ELEMENT
< DE LA PSEUDO-MATRICE.
LA Y,W < A=COORDONNEE Y DE L'EXTREMITE
< ARGUMENT.
< (SOIT YS).
BSR ACOMP < Y=YS*SINUS(PROJECTION)+512.
PSR Y < SAVE YS*SINUS(PROJECTION)+512.
LY C512 < REPOSITIONNEMENT AU CENTRE
< DE L'ECRAN.
LA Y,W < A=YS (ARGUMENT).
BSR ACOMP < Y=YS*COSINUS(PROJECTION)+512.
PLR A < RESTAURE A=YS*SINUS(PROJECTION)+
< 512.
AD Z,W < AJOUTONS L'EXTREMITE Z DE
< L'EXTREMITE ARGUMENT (ZS).
XR A,Y < ON A :
< Y=ZS+YS*SINUS+512 ,
AD X,W < AJOUTONS LA COORDONNEE X DE
< L'EXTREMITE ARGUMENT (XS) ,
< 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 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 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 A 'GE' :
<
E450: EQU $
BSR AGE < RETOUR A 'GE'.
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 DIM < X=NBRE DE COORDONEES A DEPLACER.
MOVE < CHANGEMENT D'ORIGINE.
PLR A,B,X
RSR
PAGE
PROG PROG8
<
<
< E N T R Y D U P R O C E S S E U R ' 3 D ' :
<
<
< FONCTION :
< CETTE ENTRY EST UTILISEE LORS DES
< APPELS DE '3D' PAR SODOME ;
< ELLE INITIALISE LES BASES , ET PASSE
< LA MAIN AU PROGRAMME GRAPHIQUE DONT
< L'ADRESSE DE LANCEMENT EST DANS LE
< MOT0 DU CORPS DE L'ITEM COURANT
< (ITEM2).
<
<
WORD COM+128 < VALEUR INITIALE DE LA BASE C.
WORD BRANCH < VALEUR INITIALE DE LA BASE W.
GRAPH: EQU $ < ENTRY POINT.
LRP K
ADRI -1,K
PLR C,W < INITIALISATION DE C & W.
LAD DEMMEM
QUIT < DEMANDE D'ALLOCATION 6K
< MEMOIRE SANS UTILISER LA PILE K.
LA APILE
LR A,K < INITIALISATION DE LA PILE K.
<
< INITIALISATION DE L'EN-TETE DU PROCESSEUR '3D' :
<
LX MODCAL,W < X=IDENTIFICATEUR DE L'APPELANT.
LA &NCALL
STA 0,W < MISE EN PLACE DU NOM (2
< CARACTERES) DE L'OVERLAY A
< APPELER EN RETOUR (PRIMITVE
< 'AGOGE').
STZ CDRET,W < INITIALISATION DU RETOUR A 'GE'
< PAR LE FILS "0".
<
< TEST DU MODE D'ENTREE :
<
ADRI ZERO-PGRAPH,L < L=@LOCAL(GE) SI APPEL PAR 'GE' ,
< L=PGRAPH SI APPEL PAR DEBUG (;).
CPZR L < ENTRY PAR DEBUG ???
JE ABORT < OUI , ON VA DONC FAIRE UN RETOUR
< IMMEDIAT A 'GE'.
<
< VALIDATION DU TYPE DE L'ITEM COURANT :
<
LXI IINDIC-LTN*2 < INDEX OCTET DU TYPE DANS
< L'EN-TETE DE L'ITEM.
LBY &AIC < ACCES AU TYPE.
CPI "P" < EST-CE LE TYPE 'P' ????
JNE ABORT < NON , ABORT DU PROCESSEUR '3D'.
<
< INITIALISATION DE LA TRANSFORMATION COURANTE :
< (A CAUSE DE L'ALLOCATION MEMOIRE)
<
BSR AVIDE < RETOUR A L'ELEMENT NEUTRE.
<
< EXECUTION DU PROGRAMME GRAPHIQUE :
<
LXI 0 < POSITIONNEMENT SUR LE MOT0.
BR &AIC < LE MOT0 DU CORPS DE L'ITEM
< COURANT (ITEM2) CONTIENT
< L'ADRESSE DE DEPART.
<
< ABORT POUR RESTART-DEBUG :
<
ABORT: EQU $
LAI BRANCH-ZERO
LR A,W < W=@BRANCH
LAI 2 < EN CAS DE ALT-MODE, LE RETOUR
STA CDRET,W < A 'GE' SE FAIT PAR LE FILS "2".
BSR AGE < PRIMITIVE RETOUR A 'GE'.
JMP ABORT < ET BOUCLAGE DESSUS AU CAS OU
< IL AURAIT FALLU APPELER LE
< CCI POUR DEFAUT DU SGN ....
<
<
< V A L I D A T I O N I M P L A N T A T I O N :
<
<
PILE: VAL 'FF0-6 < A T T E N T I O N !!!!!!!!
X12: EQU ZERO+PILE-LTNI-LTNI
X10: VAL X12-$
ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLAGE SI ERREUR
< D'2MPLANTATION.
DZS X10+1 < QUELLE PROPRETE !!!
TOP: EQU $ < SOMMET DE '3 DIM'.
EOT #SIP GEN PROCESSEUR#
Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.