<
<
< A S S E M B L A G E G R / G T :
<
<
< VIDEO=1 IF VIDEO,,X100, ASSEMBLAGE GR,
< VIDEO=0 IF VIDEO,,,X100 ASSEMBLAGE GT.
<
<
IF VIDEO,,,X100
NMPROC: VAL "GT" < NOM DU PROCESSEUR.
IDP "GT - RELEASE 20/02/80"
X100: VAL 0
IF VIDEO,,X100,
NMPROC: VAL "GR" < NOM DU PROCESSEUR.
IDP "GR - RELEASE 01/06/79"
X100: VAL 0
IDP "JOHN F. COLONNA"
<
< D I M E N S I O N E S P A C E :
<
DIM: VAL 3
<
< T A I L L E E C R A N :
<
SIZE: VAL 1024
EOT #SIP DEF PROCESSEUR#
PROG
WORD GRAPH < ADRESSE DE DEPART DU PROCESSEUR.
WORD 0 < POUR FAIRE $=$+1.
PGRAPH: EQU $ < P DE LANCEMENT DE GRAPHIQUE2
< LORS D'UN APPEL PAR !GE.
< (A NOTER : P='12).
LRP L
BR -2,L < ENTREE DANS LE PROCESSEUR.
PAGE
EOT #SIP DEFINITION ITEM#
PROG P16
EOT #SIP DEFINITION CMS5#
IF VIDEO,,,X100
EOT #SIP IMAGE 256#
NOM: EQU ZERO+PILE+5-LNOM-2
IMAG: EQU NOM+LNOM+2
IF ORDI-"S",XWOR%,,XWOR%
ENTIM: EQU IMAG-LENTIM < EN-TETE DE L'IMAGE (INTERPOLATION
< VIDEO PAR CMS5).
XWOR%: VAL 0
X100: VAL 0
IF VIDEO,,X100,
LIMAG: VAL 0 < POUR GR, LIMAG=0 !!!
X100: VAL 0
PAGE
<
<
< P I L E D E R E C U R S I V I T E :
<
<
< FONCTION :
< CETTE PILE PERMET LA RECURSIVITE
< DU LANGAGE GRAPHIQUE : IMBRICATION
< DES APPELS DE PROGRAMMES , IMBRICATION
< DES BOUCLES DE REPETITIONS.
<
<
< FORMAT :
< ELLE EST FAITE D'ENTREES
< DE DOUBLE-MOTS QUE L'ON EMPILE
< ET DEPILE SUIVANT LES BESOINS.
<
<
IR: VAL 0 < MOT0 D'UNE ENTREE : CONTIENT
< LA CAUSE DE L'EMPILEMENT ET
< L'INDEX DE RETOUR AU DEPILEMENT.
< BIT0=1 : MODE INTERACTIF DE GR ,
< BIT1=1 : PUSH POUR REPETITIONS ,
< BIT2=1 : PUSH POUR APPEL PROG.
< BIT3=1 : PUSH POUR SAUT-PROGRAMME
CODREP: VAL '40 < PUSH POUR REPETITIONS.
BITREP: VAL 1 < NUMERO DU BIT DE REPETITIONS.
CODPRO: VAL '20 < PUSH POUR APPEL PROGRAMME.
BITPRO: VAL 2 < NUMERO DU BIT D'APPEL PROGRAMME.
< A T T E N T I O N : BITPRO
< UTILISE AVEC BITDEF SIGNIFIE
< QU'ON APPELLE UN PROGRAMME
< AVEC CHANGEMENT D'ITEM COURANT.
CODDEF: VAL '10 < PUSH POUR DEFINITION PROGRAMME.
BITDEF: VAL 3 < NUMERO DU BIT DE SAUT DEFINITION.
< A T T E N T I O N : BITDEF ,
< UTILISE AVEC BITPRO , SIGNIFIE
< Q'ON APPELLE UN PROGRAMME AVEC
< CHANGEMENT DE L'ITEM COURANT.
CDCP: VAL 1 < MOT1 D'UNE ENTREE : CONTIENT
< LE COMPTE DES DO , ET LE COMPTE
< ALGEBRIQUE DES PARENTHESES.
CD: VAL 2*CDCP+0 < OCTET0(MOT1)=NBRE DE REPETITIONS
< (DO) RESTANT A FAIRE (INDEX
< DE TYPE OCTET).
CP: VAL 2*CDCP+1 < OCTET1(MOT1)=COMPTE ALGEBRIQUE
< DES PARENTHESES RENCONTREES
< SOUS CE NIVEAU :
< '(' : +1 ,
< ')' : -1.
LEPR: VAL 2 < NBRE DE MOTS OCCUPES PAR UNE
< ENTREE DE LA PILE PIR.
LPR: VAL 30 < NOMBRE D'ENTREES DE LA PILE
< RECURSIVITE.
PAGE
<
< T R A N S F O R M A T I O N S E L E M E N T A I R E S :
<
TRP: VAL 1 < ROTATION TRIGO. DE +15 DEGRE.
TRM: VAL 2 < ROTATION ANTITRIGO DE -15 DEGRE.
TR1: VAL 3 < ROTATION DE +PI/2.
TR3: VAL 4 < ROTATION DE +3*PI/2 (-PI/2).
TSO: VAL 5 < SYMETRIE PAR RAPPORT A L'ORIGINE.
TSX: VAL 6 < SYMETRIE PAR RAPPORT A OX.
TSY: VAL 7 < SYMETRIE PAR RAPPORT A OY.
TS1: VAL 8 < SYMETRIE 1ERE BISSECTRICE.
TA: VAL 9 < DESORTHOGONALISATION AIGUE.
TO: VAL 10 < DESORTHOGONALISATION OBTUE.
TH: VAL 11 < DESORTHOGONALISATION HAUTE.
TB: VAL 12 < DESORTHOGONALISATION BASSE.
NT: VAL 12 < NBRE DE TRANSFORMATIONS
< ELEMENTAIRES RECONNUES.
PAGE
<
<
< L O C A L :
<
<
TABLE
DEMIN: WORD '0100 < ENTREE ALPHA-NUMERIQUE SANS ECHO.
WORD ABUFIN
WORD 1
IF VIDEO,,,X100
IF ORDI-"S",XWOR%,,XWOR%
STABIL: WORD '8A01 < STABILISATION IMAGE VIDEO.
WORD IMAG-ZERO*2
WORD LIMAG*2
WORD 0 < PAS DE COULEUR A L'INITIALISATION...
XWOR%: VAL 0
X100: VAL 0
LOCAL LOCGR
LOC: EQU $
<
< S E G M E N T C O U R A N T :
<
SEG: EQU $
DZS 2*DIM
SEGORG: EQU SEG
SEGEXT: EQU SEG+DIM
IF VIDEO,,X100,
NOMSEG: WORD 0 < MOT DE VALIDATION DE L'INFORMA-
< TION EN ZDC.
LONSEG: VAL $-NOMSEG+4*2 < NBRE D'OCTETS EN ZDC.
X100: VAL 0
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.
SEGT: EQU $
DZS 2 < DESTINE AU BON POSITIONNEMENT
< DES TEXTES ALPHA-NUMERIQUES.
<
< 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
PN1: VAL 4
PN2: VAL 6
<
< POINTS D'INTERSECTION DE LA DROITE M1M2 AVEC L'ECRAN :
<
INTER: EQU SEG2+PN1 < SOIENT N1 ET N2 CES 2 POINTS.
< S'ILS EXISTENT.
<
< C O N S T A N T E S :
<
Y: VAL 0 < CORRDONNEE Y D'UN POINT.
X: VAL 1 < COORDONNEE X D'UN POINT.
WHOS: WORD 0 < LISTE DES CONSTANTES A PUSHER/
< PULLER DANS STACK.
<
< DEBUT DE LA LISTE DES CONSTANTES 'STACKABLES' :
<
CTTE: WORD 1 < CONSTANTE DE GENERATION
< GRAPHIQUE (1 INITIALEMENT).
SCALE: EQU CTTE
CV: DZS 2 < COORDONNEES Y ET X DU CURSEUR
< GRAPHIQUE VIRTUEL.
CVG: EQU CV
DY1: WORD 1 < PAS D'INCREMENTATION/DECRE-
< MENTATION DE Y(CURSEUR VIRTUEL).
DX1: WORD 1 < PAS D'INCREMENTATION/DECRE-
< MENTATION DE X(CURSEUR VIRTUEL).
ARGF: WORD -1 < INDEX DE LA 1ERE PRIMITIVE
< DE L'ARGUMENT FORMEL COURANT.
TRANS: WORD 0 < MEMORISATION DES TRANSFORMATIONS
< ELEMENTAIRES CONSTITUANT LA
< TRANSFORMATION COURANTE PAR BITS :
< BIT1 : PRESENCE DE 'RP' ,
< BIT2 : PRESENCE DE 'RM' ,....
< ......
< BIT9 : PRESENCE DE 'S2'.
TTRANS: DZS NT+1/2+1 < COMPTE DES REPETITIONS DES
< TRANSFORAMTIONS ELEMENTAIRES A
< RAISON D'UN OCTET PAR TRANS-
< FORMATION.
NSTACK: VAL $-WHOS-1 < NBRE DE CONSTANTES STACKABLES.
<
< FIN DE LA LISTE DES CONSTANTES 'STACKABLES' :
<
<
< 3 - C U R S E U R :
<
X3: VAL 0 < X(3-CURSEUR).
Y3: VAL 1 < Y(3-CURSEUR).
Z3: VAL 2 < Z(3-CURSEUR).
D3: VAL 3 < EMPLACEMENT DU 1ER DELTA (DX3).
CV3: DZS DIM < CONTIENT RESPECTIVEMENT :
< X3,Y3,Z3,DX3,DY3,DZ3 DU 3-CURSEUR
DO DIM
WORD 1 < LES PAS SONT INITIALISES A 1.
C1: WORD CV3+Y3,X < RELAI INDEXE VERS LA COORDONNEE
< DU 3-CURSEUR CONTENUE DANS CV+Y.
< (INITIALISE SUR Y3).
C2: WORD CV3+X3,X < RELAI VERS LA COORDONNEE DU
< 3-CURSEUR CONTENUE DANS CV+X.
< (INITIALISE SUR X3).
<
< S A U V E G A R D E 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 :
<
SAVET: EQU $
DO DIM
DZS NT+1/2+1+1 < UNE ZONE PAR PLAN DE COORDONNEES.
AT: WORD SAVET < ADRESSE DE LA ZONE DE SAUVEGARDE
< DES TRANSFORMATIONS DANS LE
< PLAN COURANT.
<
< L O N G U E U R D U C O N T E X T E :
<
LCON: VAL $-WHOS-1 < LONGUEUR MOTS DU CONTEXTE.
<
< C O N S T A N T E S :
<
WORK: WORD 0 < CONSTANTE MEMORISANT LE TYPE
< DE BIBLIOTHEQUE :
< =-1 : BIBLI EN BASCULE,
< =0 : OVERLAY DE PROGRAMME,
< =1 : BIBLI AU DELA DES 4K.
RETSVC: WORD 0 < CONDITIONS DE RETOURS DES SVC.
IEG: WORD 0 < INDEX COURANT DU PROGRAMME
< GRAPHIQUE : DONNE L'INSTRUCTION
< GRAPHIQUE COURANTE , OU LA
< SUIVANTE A EXECUTER (SUIVANT
< L'INSTANT OU L'ON SE PLACE).
ACCEB: WORD LTNI < CONSTANTE UTILISEE POUR LES
< CHANGEMENTS D'ITEM , ET LE
< PASSAGE D'UN ITEM A L'AUTRE :
< ACCEB>0 : ITEM COURANT=ITEM1 ,
< ACCEB<0 : ITEM COURANT=ITEM2.
< (TRANSLATION DE TYPE MOT).
ALTNI2: WORD 2*LTNI < LONGUEUR MAX TOTALE D'UN
< ITEM (EN-TETE+CORPS).
F3: WORD 0 < FONCTION DE CODAGE DES <NOM>.
< ET @ITEM DE RECHERCHE LORS DE
< LA RECHERCHE DES PROGRAMMES.
< CONTIENT AUSSI LA VARIABLE
< TRANST UTILISEE LORS DES
< DEPLACEMENTS DU CV.
ADXDY: EQU F3 < RELAI TEMPORAIRE VERS DX OU DY.
NCP: WORD NBCAR*NBLIG < NBRE DE CARACTERES DANS L'ITEM.
NCALL: WORD LCALL,X < NOM DES BRANCHES D'OVERLAY.
< DE RETOUR DE 'GR'.
AGON1: WORD N1 < NOEUD D'ACCES A LA PRIMITIVE
< SUIVANTE LORS DE L'ANALYSE
< SYNTAXIQUE DU LANGAGE.
AGON22: WORD N22 < NOEUD DE BRANCHEMENT LORS DE
< LA RENCONTRE DE CARACTERES
< HORS-LA PAGE (GET CARACTER).
KIN: WORD -1 < COMPTEUR DES ENTRIES DANS GR.
IF VIDEO,,X100,
ITEXTE: WORD 0 < 0 : APPELS IMPLICITES VALIDES,
< 1 : LES APPELS IMPLICITES SONT
< REMPLACES PAR UNE EDITION
< ALPHANUMERIQUE DU TEXTE.
X100: VAL 0
IF VIDEO,,,X100
<
< STABILISATION VIDEO :
<
AVIS: WORD VIS < ROUTINE ESCLAVE,
IF ORDI-"T",XWOR%,,XWOR%
ASP3: WORD SP3 < ROUTINE MAITRE OU 0, SI L'ON
< N'EST PAS SOUS :SYS...
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
MODEV: WORD 0 < MOT DE CONTROLE DU MODE DE TRACE DIRECT
< DANS LA MEMOIRE 'MEMTV'.
AVSEG: WORD VSEG < DICHOTOMIE D'UN SEGMENT VIDEO.
ASTAB: WORD STABIL < DEMANDE DE STABILISATION VIDEO.
ASTAB3: WORD STABIL+3
XWOR%: VAL 0
X100: VAL 0
<
< CONSTANTES D'ECHELLE GENERALE :
<
SCAL: VAL 3*4 < ECHELLE GENERALE INITIALE :
< ON PREND UN MULTIPLE DE 3 ET DE 4
< POUR SIMPLIFIER LES PROBLEMES D'ECRAN
< DE TV ET VISU...
ECH: BYTE SCAL;SCAL < ECHELLE GENERALE COURANTE (EX/EY).
ECH0: WORD SCAL < ECHELLE GENERALE INITIALE.
< FACTEUR REEL APPLIQUE EST :
< ECH/ECH0.
<
< CONSTANTES TRI-DIMENSIONNELLES :
<
ACV3: WORD CV3,X < DONNE L'ADDRESSE INDEXEE DE CV3.
IF ORDI-"T",XWOR%,,XWOR%
MPROJ: WORD 7;4;-3;3;4 < MATRICE DE PROJECTION.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
MPROJ: WORD 2;1;-1;1;1 < MATRICE DE PROJECTION : DEUX CAS :
< 'DIV'>0 (=2) : PROJECTION PAR SIN(TETA)
< ET COS(TETA),
< 'DIV'<0 : PROJECTION PERSPECTIVE
< AVEC : P=ABS(DIV).
XWOR%: VAL 0
IF VIDEO,,,X100
<
< CONSTANTES VIDEO :
<
WORKS: WORD '0000 < COULEUR A DONNER A L'IMAGE
< LORS DES ERASES ('0000/'FFFF).
NMPL: WORD CNMPL < NBRE DE MOTS DE 16 BITS PAR LIGNE.
NLIG: WORD SIZE/RDY-1 < NBRE DE LIGNES-1 PAR ECRAN.
AIMAG: WORD IMAG < @MOT DE L'IMAGE.
ALI: WORD LIMAG < LONGUEUR MOT DE L'IMAGE.
AAI: WORD IMAG-1,X < RELAI DE RAZ DE L'IMAGE.
ACNSYS: ASCI ":SYS" < NE SERT QU'A L'INITIALISATION DE GT...
DICOX: EQU ACNSYS+0 < X(POINT COURANT),
DICOY: EQU ACNSYS+1 < Y(POINT COURANT).
DICOX1: WORD 0 < X(ORIGINE COURANTE),
DICOY1: WORD 0 < Y(ORIGINE COURANTE).
DICOX2: WORD 0 < X(EXTREMITE COURANTE),
DICOY2: WORD 0 < Y(EXTREMITE COURANTE).
APOINT: WORD POINT < @INSTRUCTION VARIABLE SBT/RBT.
IF ORDI-"T",XWOR%,,XWOR%
ADICO: WORD DICO < ROUTINE RECURSIVE DE DICHOTOMIE.
ASET: WORD SET < ROUTINE DE MARQUAGE DE (X,Y) A 0/1.
XWOR%: VAL 0
X100: VAL 0
<
< F O R M A T D E S M A T R I C E S
< D E T R A N S F O R M A T I O N :
<
DIV: VAL 0 < MOT0 : CONTIENT UN DIVISEUR
< COMMUN A TOUS LES COEFFICIENTS ;
< ON PEUT DONC AINSI REPPRESENTER
< LES COEFFICIENTS EN NBRE ENTIERS;
< SI CE DIVISEUR EST EGAL A
< L'UNITE (1) , ON PEUT LE
< REMPLACER PAR 0 ....
< OU TOUT NOMBRE NEGATIF , ET
< PAR EXEMPLE DES RELAIS INDEXES !!!
A11: VAL 1
A12: VAL 2
A21: VAL 3
A22: VAL 4
NEUTRE: VAL 5 < 'NEUTRE' DONNE LA PUISSANCE A
< LAQUELLE IL FAUT ELEVER LA
< MATRICE POUR OBTENIR L'OPERATEUR
< NEUTRE (1,0,0,1).
< ON A :
< (A11 A12)
< M=1/DIV( )
< (A21 A22)
<
< T R A N S F O R M A T I O N S E L E M E N T A I R E S :
<
MRP: WORD 25;24;-7;7;24;22
MRM: WORD 25;24;7;-7;24;22
MR1: EQU $
ATCOM: WORD TCOM-'20,X < TABLE DES PRIMITIVES EN ACCES
< DIRECT , TRANSLATEE PAR 'SPACE'.
WORD 0;-1;1;0;4
MR3: EQU $
LWHOSI: WORD WHOS+NSTACK+1,X < REALI VERS LES CONSTANTES
< STACKABLES AU 'PUSH' IN STACK.
WORD 0;1;-1;0;4
MSO: EQU $
LWHOSO: WORD WHOS,X < RELAI VERS LES CONSTANTES
< STACKABLES AU 'PUL'' IN STACK.
WORD -1;0;0;-1;2
MSX: EQU $
NTRANS: WORD TTRANS,X < NBRE DE FOIS QUE LA TRANSFORMA-
< TION ELEMENTAIRE DOIT ETRE
< REPETE (UN OCTET PAR TRANS-
< FORMATION).
WORD 1;0;0;-1;2
MSY: EQU $
APRC: WORD PIR,X < ENTREE COURANTE DANS LA PILE
< DE RECURSIVITE.
WORD -1;0;0;1;2
MS1: EQU $
AI1: WORD ZERO+PILE-LTNI+LTN,X
< RELAI VERS L'ITEM1 A PRIORI , POUR
< METTRE LE TYPE 'D'.
WORD 0;1;1;0;2
MA: WORD 25;25;7;0;24
C1023: WORD SIZE-1 < NBRE DE POINTS-1 SUR UN AXE,
< ET DEGRE D'IDEMPOTENCE DE MA.
BORNE: EQU C1023
MO: WORD 25;25;-7;0;24
C1024: WORD SIZE < NBRE DE POINTS SUR UN AXE,
< ET DEGRE D'IDEMPOTENCE DE MO.
MH: WORD 25;24;0;7;25
C100: WORD '100 < DEGRE D'IDEMPOTENCE DE MH ,
< AINSI QUE CONSTANTE DE DECONCA-
< TENATION DES PRIMITIVES DANS
< L'INTERPRETEUR.
MB: WORD 25;24;0;-7;25
CFFF: WORD '0FFF < POUR RAZ DES BITS 0,1,2,3.
< ET DEGRE D'IDEMPOTENCE DE 'MB'.
<
< R E L A I D E S T A B L E S :
<
AIC: WORD ZERO+PILE-LTNI+LTN,X
< RELAI VERS L'ITEM COURANT.
AIR: WORD ZERO+PILE-LTNI+LTN,X
< RELAI VERS L'ITEM DANS LEQUEL
< ON RECHERCHE LA DEFINITION
< D'UN PROGRAMME.
AI2: WORD ZERO+PILE-LTNI+LTN-LTNI,X
< RELAI VERS L'ITEM2.
CBTR: WORD LIMAG+'1000-PILE+LTNI-LTN+LTNI+LTN
< CTTE DE PASSAGE DE ITEM2
< AU DELA DE L'IMAGE VIDEO...
XX1: VAL LEPR*LPR-LEPR < NBRE DE MOTS DE PIR-LEPR.
BPR: WORD PIR < BASE DE LA PILE DE RECURSIVITE.
TPR: WORD PIR+XX1 < TOP DE LA PILE DE RECURSIVITE.
LSTACK: VAL 30 < LONGUEUR DE 'STACK'.
ASTACK: WORD STACK < RELAI POINTEUR DE 'STACK'.
ARACI: WORD RACB < @BRANCHE D'OVERLAY.
APILD: WORD PILD < PILE DE BONNE TAILLE.
APILDR: WORD PILE-1 < PILE DE SMC.
<
< R E L A I D E S R O U T I N E S :
<
AGOGER: WORD GOGER < ADRESSE DE RETOUR SI ALT-MODE.
ASVC: WORD RSVC < ROUTINE D'EXECUTION DES SVC.
AOVL: WORD OVL < CHAGEMENT DES OVERLAYS.
ADIV: WORD DIVENT < DIVISION ENTIERE PAR EXCES
< OU PAR DEFAUT , SUIVANT LES CAS.
AEXECS: WORD EXECS < PRIMITIVE 'S'.
AOVS: WORD OVS < TEST D'OVERSCREEN.
ACALX: WORD CALX < RESOLUTION EQUATION EN X.
ACALZ: WORD CALZ < RESOLUTION EQUATION EN Z.
AGTCAR: WORD GETCAR < ACCES A UN CARACTERE DANS
< LA RECHERCHE DES PROGRAMMES.
AGTK: WORD GTK < ACCES A UN CARACTERE A CODER.
ASELDX: WORD SELDX < POUR SELECTION INTERACTIVE DE DX.
ASELDY: WORD SELDY < POUR SELECTION INTERACTIVE DE DY.
AFECH: WORD FECH < APPLICATION ECHELLE GENERALE.
ALOOPB: WORD LOOPB < RETOUR DE L'INTERPRETEUR.
AE111: WORD E111 < RETOUR DE PRIMGI VERS PRIMG.
AGOGE: WORD GOGE < RETOUR OK A 'GE' : L'ITEM
< COURANT RECOIT LE TYPE 'D'.
ACHGTI: WORD CHGTI < CHANGEMENT D'ITEM COURANT.
APROJ: WORD PROJET < ROUTINE DE PROJECTION PLANE.
ASPDXY: WORD SPDXY < RESTAURATION DE 2 DES 3 PAS
< A PARTIR DE DX ET DY.
<
< D E M A N D E S A C M S 4 :
<
DEMBAC: WORD '0602 < DEMANDE DE 'LOAD SOUS :SYS' ,
< AFIN DE FAIRE LE RETOUR A
< L'APPELANT DE G3.
WORD BRANCH-ZERO*2
LOVL: WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
< LONGUEUR EN OCTETS DES BRANCHES
< D'OVERLAY.
WORD -1
DEMSGN: WORD '0402 < DEMANDE AU SGN , INITIALISEE
< EN STORE , AFIN DE GENERER
< LORS DE !LOAD LA BRANCHE 'GR '
WORD BRANCH-ZERO*2
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1 < LA VALEUR SUIT LE NOM.
TAILMM: VAL '4000 < 8K MOTS NECESSAIRES POUR 'GR'.
IF VIDEO,,,X100
TAILMM: VAL LIMAG*1+TAILMM < 2K SUPPLEMENTAIRES POUR 'GT'.
IF ORDI-"S",XWOR%,,XWOR%
TAILMM: VAL TAILMM+'1000 < ET PLUS ENCORE SUR SOLAR...
XWOR%: VAL 0
X100: VAL 0
DEMMEM: WORD '0004 < DEMANDE D'ALLOCATION DE 8K/12K MOTS.
RELMEM: WORD '0004 < DEMANDE DE RETOUR A 4K MOTS.
WORD TAILMM
WORD '2000 < 4K MOTS='2000 OCTETS.
DEMLOD: WORD '0602 < CHARGEMENT OVERLAY ' R'.
WORD XWOR%A
WORD XWOR%B
WORD -1
<
< NOTA : UN APPEL DE BIBLIOTHEQUE VIDE ($;),
< FAIT PASSER DE LA VISU '02 A LA VISU '0B ...
<
WG: WORD '020A < DEMANDE D'ECRITURE GRAPHIQUE.
WORD SEGOR2-ZERO*2 < @OCTET DU BUFFER GRAPHIQUE.
WORD 8 < COMPTE OCTETS.
WGT: WORD '020A < DESTINE AU POSITIONNEMENT CORRECT
WORD SEGT-ZERO*2 < DES TEXTES ALPHA-NUMERIQUES.
WORD 4 < ENVOI COORDONNEES 1 POINT.
OG: WORD '0203 < OPEN GRAPHIQUE DE LA VISU.
CG: WORD '0204 < RETOUR EN ALPHA-NUMERIQUE.
DERASE: WORD '0205 < EFFACEMENT DE L'ECRAN.
ADEMIN: WORD DEMIN < ADRESSE DE DEMIN.
DEMOUT: WORD '0202 < DEMANDE D'ECRITURE SUR NSPOUT.
WORD 0 < @OCTET DU MESSAGE.
BUFIN: WORD 0 < LONGUEUR DU MESSAGE.
XBUFIN: VAL BUFIN-ZERO*2
ABUFIN: EQU ZERO+XBUFIN
DIRECT: WORD '0207 < COMMANDE DIRECTE DU 4014.
BYTE '1B;0 < 'ESC'-<COMMANDE>.
BYTE '04;0
COPY: WORD '0207 < ECRITURE DIRECTE SUR LA VISU
< EN VUE DE FAIRE UN HARD-COPY.
BYTE '1B;'17;'8D;'1D < CTRL-SHIFT-K, CTRL-W, R/C, GS.
< AVEC LE BIT0=1 DESTINE AUX
< FIN DE MESSAGE DES EMISSIONS SUR
< LES LIGNES BOUCLEES VI1/VI2.
DEMDK: WORD '0C02 < ACCES DIRECT AU DISQUE DE
< SWAPPING INITIALISE EN 'WRITE'.
WORD WHOS-ZERO+1*2 < @BUFFER=@LISTE DES CONSTANTES
< STACKABLES.
WORD LCON*2
SAVE: WORD 0 < ZONE DE SAUVEGARDE TEMPORAIRE ,
< ET NUMERO RELATIF DU SECTEUR
< A ECHANGER.
SLEEP: WORD '0005 < DEMANDE DE TEMPORISATION POUR
< FAIRE UNE COPY.
ASAUT: WORD N1616 < ADRESSE DE TRAITEMENT DES
< PRIMITIVES INHIBEES.
WORD 15 < 15 SECONDES DE TEMPORISATION
< POUR FAIRE UN HARD-COPY.
C5: EQU SLEEP < CONSTANTE MULTIPLICATIVE 5.
DEMCCI: EQU MR1+3 < DEMANDE DE RETOUR AU CCI.
IF VIDEO,,X100,
DEMSEG: WORD '0008 < ACCES SEGMENT EN ZDC.
WORD NOMSEG-ZERO*2
WORD LONSEG
WORD 'FFC0
DELSEG: WORD '000A < ENVOI DE L'ACQUITTEMENT ZDC.
WORD NOMSEG-ZERO*2
WORD SEG2-NOMSEG*2
WORD 'C000
STOGS: WORD '000A < ENVOI SEGMENT EN ZDC.
WORD NOMSEG-ZERO*2
WORD LONSEG
WORD 'FFC0
GETGS: WORD '0008 < ACCES A L'ACQUIITEMENT ZDC.
WORD NOMSEG-ZERO*2
WORD SEG2-NOMSEG*2
WORD 'C000
INDZDC: WORD 0 < BIT15=0 : NE PAS EMETTRE EN ZDC.
X100: VAL 0
PAGE
<
< D E F I N I T I O N D U
< R E F E R E N T I E L C O U R A N T :
<
TRANST: EQU F3 < VALEUR TEMPORAIRE DE TRANS LORS
< DES CALCULS DE CHANGEMENT DE
< REFERENTIEL (CF. 1,2,3,4).
DV: DZS 2 < VECTEURS DES DEPLACEMENTS EN X
< ET EN Y SUR LE REFERENTIEL LOCAL.
DVX: EQU DV+0 < AXE DES X.
DVY: EQU DV+1 < AXE DES Y.
MTRANS: WORD $+1,X < RELAIS VERS LES MATRICES DES
< TRANSFORMATIONS ELEMENTAIRES.
ICALLI: BYTE 3;MRP-ZERO < L'OCTET0 CONTIENT DE PLUS
< SEUIL D'APPELS IMPLICITES DES
< PROGRAMMES POUR LES COMPTES DE
< PARENTHESES.
BYTE MRM-ZERO;MR1-ZERO
BYTE MR3-ZERO;MSO-ZERO
BYTE MSX-ZERO;MSY-ZERO
BYTE MS1-ZERO;MA-ZERO
BYTE MO-ZERO;MH-ZERO
BYTE MB-ZERO;0
<
< L I S T E O V E R L A Y S D E R E T O U R :
<
LCALL: EQU $
WORD "GE";"EI"
PAGE
<
<
< E X E C U T I O N D E S S V C :
<
<
< ARGUMENT :
< A=@DEMANDE A CMS4.
<
<
< RESULTATS :
< RETSVC=CONDITIONS DE RETOUR DE CMS4 ,
< INDICATEURS POSITIONNES EN FONCTION DES ERREURS.
<
<
PROG
RSVC: EQU $
PSR X < SAVE X.
SVC 0 < ENVOI DE LA DEMANDE (A) A CMS4.
STX RETSVC < SAVE LES CONDITIONS DE RETOUR.
PLR X < RESTAURE X.
RSR
PAGE
IF VIDEO,,,X100
IF ORDI-"T",XWOR%,,XWOR%
TIMAG: WORD IMAG < @RELATIVE IMAGE VIDEO.
EOT #SIP SP3#
XWOR%: VAL 0
<
< ENTRY MODE ESCLAVE :
<
VIS: EQU $
IF ORDI-"T",XWOR%,,XWOR%
LA ASP3 < ACCES A L'ADRESSE DU S/P
< MAITRE, ET VALIDATION ACN...
JAE VIS1 < ON N'EST PAS SOUS :SYS !!!
WORD '1EC5 < OK, :SYS : STABILISATION...
VIS1: EQU $
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
LA ASTAB < DEMANDE DE STABILISATION.
BSR ASVC
LA &ASTAB3 < FORCER EN ECRITURE.
XWOR%C: VAL TVIN=0
RBT NBITMO-1-XWOR%C
STA &ASTAB3
XWOR%: VAL 0
RSR
X100: VAL 0
PAGE
<
<
< S O R T I E S D E G R A P H I Q U E 2 :
<
<
< R E T O U R A U C C I :
<
<
GOCCI: EQU $
< ON A ICI :
< Y=CARACTERE COURANT NON RECONNU , ET
< D'INDEX (IEG)-1.
< (EN CAS D'EREUR DU PROGRAMME !!!)
<
< TRONC COMMUN CCI,!GE,ERREUR :
<
E10: EQU $
LAD DEMCCI
E11: EQU $ < ENTRY 'ERASE'.
BSR ASVC < RETOUR AU CCI DE CMS4.
< (OU EFFACEMENT ECRAN....)
<
< CAS D'UN RETOUR PAR !GO :
<
LAD OG
E965: EQU $ < ENTRY MAKE-COPY.
BSR ASVC < RE-MISE EN GRAPHIQUE DE LA VISU.
RSR < RETOUR A L'INTERPRETEUR ; A
< NOTER QUE X EST POSITIONNE ...
<
<
< R E T O U R A L ' A P P E L A N T ( G E , E I ) :
<
<
< CONDITIONS DE RETOUR :
< (POUR LES APPELS PAR 'EI'/'GO')
< CDRET=0 : DESSIN AFFICHE ENTIEREMENT ,
< CDRET=2 : DESSIN ABORTE PAR CTRL-X-OFF.
<
<
GOGE: EQU $
<
< MAJ DU TYPE DE L'ITEM :
<
LXI IINDIC-LTN*2 < INDEX D'OCTET !!!
LAI "D" < TYPE 'DESSIN'.
STBY &AI1 < (POUR L'ITEM1 !!!).
<
< R E T O U R E N E R R E U R A
< L ' A P P E L A N T :
<
GOGER: EQU $
LA APILDR
LR A,K < PILE DE SMC.
LAD RELMEM
SVC 0 < RETOUR A 4K MOTS.
LX RETSVC < X=CONDITIONS DE RETOUR DU
< SVC PRECEDENT.
<
< TRANSMISSION DES ARGUMENTS :
<
LAI BRANCH-ZERO
LR A,W < REINITIALISATION DE W=@BRANCH.
LA MODCAL,W < A=0 SI 'GE' , A=1 SI 'EI'.
ADR A,A < A=0 SI 'GE' , A=2 SI 'EI'.
ANDR X,A < A=0 , SI RETOUR PRECEDENT OK ,
< A=2 SI RETOUR CTRL-X-OFF.
STA CDRET,W < RENVOI DES CONDITIONS DE RETOUR.
LX MODCAL,W < X=IDENTIFICATEUR DE L'APPELANT :
< X=0 : APPEL PAR !GE ,
< =1 : APPEL PAR 'EI'.
STZ MODCAL,W < REINITIALISATION DE MODCAL.
LA &NCALL < RECUPERATION DU NOM DE LA
< BRANCHE D'OVERLAY DE RETOUR,
< QUI EST D'AILLEURS CELLE D'APPEL.
GOB: EQU $
STA 0,W < LE NOM DE LA BRANCHE D'OVERLAY
< A APPELER EST 'GE'/'EI'.
<
< RETOUR A L'APPELANT :
<
LAD CG
BSR ASVC < RETOUR EN ALPHA-NUMERIQUE DE
< LA VISU.
LAD DEMBAC < A=@DEMBAC.
< A NOTER :
< (C)#0 : AINSI , SI LE PROCESSEUR 'EI' REPREND
< LA MAIN , IL NE CONFOND PAS CETTE
< ENTRY AVEC UNE GENERATION DE 'GO'.
BSR AOVL < TENTATIVE DE CHARGEMENT DE LA
< BRANCHE D'OVERLAY !GE.
<
< RETOUR EN ERREUR : ON SAIT QUE
< SI L'ON REVIENT ICI , C'EST QUE
< LE CHARGEMENT DE !GE N'A PU SE
< REALISER CORRECTEMENT , ON VA
< DONC REDONNER LA MAIN AU CCI , CAR
< CERATINEMENT !SGN MANQUE :
<
JMP E10 < VERS LE CCI.
<
<
< E R R E U R S A L ' E X E C U T I O N
< D U P R O G R A M M E G R A P H I Q U E :
<
<
ERREUR: EQU GOCCI
PAGE
<
<
< T R A I T E M E N T D E S E R R E U R S
< D ' E X E C U T I O N :
<
<
< FONCTION :
< CETTE ROUTINE MET SI CELA EST
< POSSIBLE LE CARACTERE COURANT
< AIC(IEG) EN POSITION HAUTE PAR
< POSITIONNEMENT DE SONT BIT0 A 1.
<
<
< RETOUR TOUJOURS EN ERREUR.
<
<
CARUP: EQU $
LA IEG < ACCES A L'INDEX COURANT.
< D'EXECUTION.
LR A,X < NOTER : X=(IEG)#0 !!!
CP NCP < EST-IL HORS-LA PAGE ???
JGE E510 < OUI , ON NE FAIT RIEN.
ADRI -1,X < SINON : X=INDEX DU CARACTERE
< EN ERREUR (IEG-1).
LBY &AIC < ACCES AU CARACTERE COURANT.
ORI '80 < POSITIONNEMENT DE SON BIT0.
STBY &AIC < ET REMISE DANS L'ITEM COURANT.
E510: EQU $
RSR < RETOUR INDIFFERENT CAR APPELE
< PAR UNE PRIMITIVE 'PCS'.
PAGE
IF VIDEO,,X100,
<
<
< A C C E S A L A Z D C :
<
<
< FONCTION :
< INVERSE LA VALIDATION D'ACCES
< A LA ZDC.
<
<
INTGS: EQU $
LA INDZDC
IBT 15 < INVERSION VALIDATION,
STA INDZDC
RSR < ET C'EST TOUT !!!
X100: VAL 0
PAGE
<
<
< E F F A C E M E N T E C R A N :
<
<
ERASE: EQU $
IF VIDEO,,,X100
<
< INITIALISATION IMAGE VIDEO :
<
LX ALI < X=INDEX D'INITIALISATION.
LA WORKS < A=VALEUR INITIALIE IMAGE.
ERAS1: EQU $
STA &AAI < INITIALISATION MOT A
JDX ERAS1 < MOT DE L'IMAGE.
X100: VAL 0
<
< EFFACEMENT DE L'ECRAN :
<
LAD DERASE
JMP E11 < VERS L'EFFACEMENT DE L'ECRAN ,
< PUIS LE RETOUR EN GRAPHIQUE.
PAGE
<
<
< M A K E C O P Y :
<
<
< FONCTION :
< LA COMMANDE 'H' PERMET DE FAIRE
< UN HARD-COPY AVEC SA TEMPORISATION.
<
<
HCOPY: EQU $
LAD COPY
BSR ASVC < ENVOI DE LA COMMANDE HARD-COPY.
LAD SLEEP
JMP E965 < VERS LA TEMPORISATION DE 1K
< SECONDES.
PAGE
IF VIDEO,,X100,
<
<
< A U T O R I S A T I O N / I N H I B I T I O N
< D E S A P P E L S I M P L I C I T E S :
<
<
INVTEX: EQU $
LA ITEXTE
IBT 15 < ITEXTE=0 : APPELS IMPLICITES
< VALIDES,
< ITEXTE=1 : ILS SONT REMPLACES
< PAR UNE EDITION ALPHA-
< NUMERIQUE DU TEXTE.
STA ITEXTE
RSR
<
<
< T E S T D U M O D E :
<
<
< RESULTAT :
< X=ITEXTE.
<
<
TESTEX: EQU $
LX ITEXTE
RSR < FACILE, NON ???
X100: VAL 0
PAGE
<
<
< D E M A N D E S D E R E P E T I T I O N S :
<
<
< R E C U P E R A T I O N D U N O M B R E
< D E R E P E T I T I O N S :
< O U D ' U N E C O N S T A N T E :
<
<
< ARGUMENT :
< Y=CARACTERE COURANT ; SI Y='@' , LA
< CONSTANTE CALCULLE SERA 'CTTE'.
<
<
< RESULTAT :
< SAVE=NBRE DE REPETITIONS , SI X=0 (OK) ,
< X#0 : COMPTE ERRONNE.
<
<
REPET1: EQU $
LXI 1 < ERREUR A PRIORI.
LR Y,A < A=CARACTERE COURANT.
ADRI -'30,A < CONVERSION EN BINAIRE.
JALE E17 < CARACTERE NON RECONNU.
CPI 9 < EST-CE UN CHIFFRE DE 1 A 9 ???
JLE E18 < OUI , OK.
ADRI -'41+'39+1,A < TRANSLATION PAR RAPPORT AU 'A'.
CPI 9 < EST-CE UN CARACTERE ENTRE '9'
< ET 'A'.
JL E17 < OUI , ERREUR.
JG E308 < NON , OK.
<
< CAS DU CARACTERE '@' :
<
LA CTTE < LA CONSTANTE RESULTANTE EST CTTE.
E308: EQU $
<
< NBRE DE REPETITIONS CORRECT :
<
E18: EQU $
STA SAVE < SAVE=NBRE DE REPETITIONS
< DEMANDEES (DE 1 A 35).
REPET0: EQU $ < CAS OU SAVE>0.
LXI 0 < RETOUR OK.
<
< SORTIE DE LA ROUTINE :
<
E17: EQU $
RSR < RETOUR AVEC (X).
<
<
< V A L I D A T I O N D U N O M B R E
< D E R E P E T I O N S :
<
<
< RESULTAT :
< X=0 SI SAVE>0,
< X=1 (ERREUR) SI SAVE<=0.
<
<
REPETV: EQU $
CPZ SAVE < TEST DU SIGNE DE SAVE,
JG REPET0 < OK, SAVE>0.
LXI 1 < NON, SAVE<=0.
JMP E17 < VERS LA SORTIE.
<
<
< T R A N S M I S S I O N D U N O M B R E
< D E R E P E T I T I O N S :
<
<
< ARGUMENT :
< SAVE=NBRE DE REPETITIONS DEMANDEES.
<
<
< RESULTAT :
< Y=NBRE DE REPETITIONS DEMANDEES.
<
<
REPET2: EQU $
LY SAVE < FACILE ???
RSR < X N'EST PAS POSITIONNE , CAR
< CETTE ROUTINE EST APPELEE
< EN MODE SEQUENTIEL.
PAGE
<
<
< M O D I F I C A T I O N D E L A C O N S T A N T E
< D E G E N E R A T I O N G R A P H I Q U E :
<
<
< ARGUMENT :
< SAVE=NOUVELLE VALEUR DE LA CONSTANTE.
<
<
< RESULTAT :
< CTTE=(SAVE) ,
< X INDIFFERENT.
<
<
SCTTE: EQU $
LA SAVE < RECUPERATION DE LA NOUVELLE
< VALEUR A DONNER A CTTE.
STA CTTE < MAJ DE CTTE.
RSR < RETOUR INDIFFERENT (QUELQUE
< SOIT X).
PAGE
<
<
< M O D I F I C A T I O N D E ' I C A L L I '
< E T D E L A T E M P O D U ' H ' :
<
<
< FONCTION :
< G<CTTE> : LORSQUE <CTTE> EST STRICTEMENT
< INFERIEURE A 10, ALORS 'ICALLI' RECOIT CETTE
< VALEUR, SINON, <CTTE> DIMINUEE DE 9 DONNE
< LA TEMPORISATION SUIVANT UN 'H'.
<
<
MODIS: EQU $
LA SAVE
CPI 9
JLE MODIS1 < CAS DE 'ICALLI'.
ADRI -9,A < CAS DE 'H'.
STA SLEEP+2
JMP MODIS2
MODIS1: EQU $
STBY ICALLI
MODIS2: EQU $
RSR
PAGE
<
<
< M O D I F I C A T I O N D E
< D X E T / O U D Y :
<
<
< S E L E C T I O N D X O U D Y :
<
<
< FONCTION :
< METTRE DANS ADXDY L'ADRESSE
< DE DX OU CELLE DE DY.
<
<
< RETOUR TOUJOURS EN ERREUR.
<
<
SELDX: EQU $
LAD DX1 < A=@DX.
JMP E26
SELDY: EQU $
LAD DY1 < A=@DY.
E26: EQU $
STA ADXDY < MISE EN PLACE DU RELAI
< TEMPORAIRE VERS DX OU DY.
<
< SORTIE TOUJOURS EN ERREUR DE 'SEL' ET 'EXEC' :
<
E520: EQU $
LXI 1
RSR < RETOUR EN ERREUR : X#0.
<
<
< M O D I F I C A T I O N D E D X O U D Y :
<
<
< FONCTION :
< CES ROUTINES MODIFIENT LES VALEURS
< COURANTES DU D (DX OU DY) DONT
< L'ADRESSE EST DANS ADXDY.
< PAR LA SUITE LE 'D' SERA APPELE
< DELTA , LA CONSTANTE DONNEE EVENTUELLEMENT
< EN ARGUMENT SERA ALPHA , ET LA
< CONSTANTE COURANTE SERA CTTE.
<
<
< RESULTAT :
< LE RETOUR EST TOUJOURS EN ERREUR.
<
<
< D E L T A <---- ( D E L T A ) + C T T E :
<
<
EXECP: EQU $
LA &ADXDY < A=DELTA COURANT.
AD CTTE < A=(DELTA)+CTTE.
JMP E23 < VERS LA VAILDATION.
<
<
< D E L T A <---- ( D E L T A ) - C T T E :
<
<
EXECM: EQU $
LA &ADXDY < A=DELTA COURANT.
SB CTTE < A=(DELTA)-CTTE.
JMP E23 < VERS LA VALIDATION.
<
<
< D E L T A <---- C T T E * A L P H A :
<
<
EXECK: EQU $
LA SAVE < RECUPERATION DE LA CONSTANTE
< DONNEE EN ARGUMENT (ALPHA)
< DANS A A PARTIR DE (SAVE).
E24: EQU $ < ENTRY POUR EXECMU.
MP CTTE
LR B,A < B=CTTE*(A PRECEDENT).
JMP E23 < VERS LA VALIDATION.
<
<
< D E L T A <---- ( D E L T A ) * C T T E :
<
<
EXECMU: EQU $
LA &ADXDY < A=DELTA COURANT.
JMP E24 < VERS LA MULTIPLICATION PAR CTTE.
<
<
< D E L T A <---- ( D E L T A ) / C T T E :
<
<
EXECD: EQU $
LAI 0 < INITIALISATION DE A.
LB &ADXDY < B=DELTA COURANT.
DV CTTE < DIVISION PAR CTTE ; A
< CONTIENT LE NOUVEAU DELTA
< (QUOTIENT).
E23: EQU $
<
< MODIFICATION DU DELTA COURANT :
<
E29: EQU $
STA &ADXDY
JMP E520 < VERS UN RETOUR EN ERREUR.
PAGE
<
<
< D E P L A C E M E N T D U C U R S E U R
< V I R T U E L :
<
<
< PHILOSOPHIE :
< ON DISPOSE A L'EMPLACEMENT COURANT
< DU CURSEUR VIRTUEL D'UN REFERENTIEL
< LOCAL L(OX,OY) . LES DEPLACEMENTS DE TYPE
< '1','2','3','4' SONT ECRITS DANS
< L(OX,OY) . LE DEPLACEMENT REEL DU
< CURSEUR VIRTUEL RESULTANT , EST CALCULE
< A L'AIDE DE LA MATRICE DE TRANSFORMATION
< COURANTE 'T' , COMPOSEE PAR UN
< PRODUIT DE TRANSFORMATIONS ELEMENTAIRES :
< A(OX,OY)=T*L(OX,OY) , SOIT POUR
< LE CURSEUR VIRTUEL :
< A(DX,DY)=T*L(DX,DY) , CELUI-CI
< SE TROUVANT DEPLACER DU VECTEUR A(DX,DY).
< (ON A : DV=L(DX,DY)).
<
<
< ARGUMENT :
< B=0 : DEPLACEMENTS '1' ET '2' ,
< =1#0 : DEPLACEMENTS '3' ET '4'.
<
<
< RESULTAT :
< RETOUR INDIFFERENT.
<
<
< D E P L A C E M E N T S ' 1 ' E T ' 3 ' :
<
<
EXEC13: EQU $
LA DX1
LYI 0
JMP E50 < VERS LE CALCUL DE DV.
<
<
< D E P L A C E M E N T S ' 2 ' E T ' 4 ' :
<
<
EXEC24: EQU $
LAI 0
LY DY1
<
< TRONC COMMUN A TOUS LES DEPLACEMENTS :
<
< ON A ICI :
< (A,Y)=DV INITIAL ; UNE DES
< 2 COORDONNEES EST NULLE ,
< PUISQU'ON SE DEPLACE SUR L'UN
< DES AXES LOCAUX.
E50: EQU $
CPZR B < TEST SUR L'INVERSION DU VECTEUR
< (A,Y) INITIAL.
JE E51 < PAS D'INVERSION : CAS 1 ET 2.
NGR A,A < CAS 3 ET 4.
NGR Y,Y < CAS 3 ET 4.
<
< INITIALISATION DU VECTEUR DV :
<
E51: EQU $
STA DVX
STY DVY
<
< CALCUL DU PRODUIT MATRICIEL T*DV :
<
LA TRANS < INDICATEUR DE PRESENCE DES
< DIFFERENTES TRANSFORMATIONS
< ELEMENTAIRES.
E41: EQU $
JAE E40 < LA TRANSFORMATION 'T' EST
< L'ELEMENT NEUTRE , OU A ETE
< ENTIEREMENT CALCULEE.
<
< RECUPERATION D'UNE TRANSFORMATION ELEMENTAIRE :
<
DBT < X=TRANSFORMATION A EXECUTER.
RBT 0,X < MEMORISATION DE SON EXECUTION.
STA TRANST < SAVE L'INDICATEUR DE PRESENCE
< DES TRANSFORMATIONS ELEMENTAIRES.
<
< EXECUTION DE LA TRANSFORMATION
< ELEMENTAIRE DE NUMERO (X) :
<
LBY &MTRANS
LR A,W < W=@DE LA MATRICE DE LA
< TRANSFORMATION (X).
LBY &NTRANS
LR A,X < X=NBRE DE FOIS QUE CETTE
< TRANSFORMATION DOIT ETRE
< ITEREE.
<
< BOUCLE D'ITERATION D'UNE TRANSFORMATION ELEMENTAIRE :
<
E42: EQU $
LA A11,W
MP DVX < B=A11*DVX.
LR B,Y < Y=A11*DVX.
LA A12,W
MP DVY < B=A12*DVY.
ADR B,Y < Y=A11*DVX+A12*DVY.
LA A21,W
MP DVX < B=A21*DVX.
PSR B < SAVE A21*DVX.
LA A22,W
MP DVY < B=A22*DVY.
PLR A < A=A21*DVX.
ADR A,B < B=A21*DVX+A22*DVY.
CPZ DIV,W < Y-A-T'IL UN DIVISEUR COMMUN
< DIFFERENT DE 1 ???
JLE E44 < NON , RIEN A FAIRE.
BSR ADIV < B=(A21*DVX+A22*DVY)/DIV.
XR Y,B < Y=(A21*DVX+A22*DVY)/DIV ,
< B=A11*DVX+A12*DVY.
BSR ADIV < B=(A11*DVX+A12*DVY)/DIV.
XR Y,B < Y=NOUVEAU DVX , ET B=NOUVEAU DVY.
<
< MISE A JOUR ITERATIVE DE DV :
<
E44: EQU $
STY DVX < DVX=(A11*DVX+A12*DVY)/DIV.
STB DVY < DVY=(A21*DVX+A22*DVY)/DIV.
JDX E42 < ITERATION EVENTUELLE DE LA
< TRANSFORMATION ELEMENTAIRE
< COURANTE.
LA TRANST < RESTAURE L'INDICATEUR DES
< TRANSFORMATIONS ELEMNTAIRES
< PRESENTES.
JMP E41 < VERS L'EXECUTION DE LA SUIVANTE
< EVENTUELLE.
<
< FIN DU CALCUL DE DV :
<
E40: EQU $
LXI 0 < INDEX D'ACCES AU 3-CURSEUR.
<
< DEPLACEMENT DU CURSEUR VIRTUEL :
< (X,Y)<--(X,Y)+(DVX,DVY).
<
LA CV+X < A=X(CURSEUR VIRTUEL).
AD DVX < X<--(X)+(DVX).
STA CV+X < X(CURSEUR VIRTUEL).
STA &C2 < MAJ DU 3-CURSEUR, FONCTION DU
< PLAN DANS LEQUEL ON SE TROUVE.
LA CV+Y < A=Y(CURSEUR VIRTUEL).
AD DVY < Y<--(Y)+(DVY).
STA CV+Y < Y(CURSEUR VIRTUEL).
STA &C1 < MAJ DU 3-CURSEUR (SUITE).
RSR < RETOUR INDIFFERENT.
<
<
< M I S E A L ' O R I G I N E :
<
<
ORIGIN: EQU $
STZ CV+X < LE CURSEUR VIRTUEL EST MIS
STZ CV+Y < A L'ORIGINE DE L'ECRAN (0,0).
STZ &C1 < RAZ UNE PARTIE DU 3-CURSEUR,
STZ &C2 < RAZ UNE PARTIE DU 3-CURSEUR.
RSR < RETOUR INDIFFERENT.
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 :
<
<
< I N I T I A L I S A T I O N :
<
<
< FONCTION :
< CETTE ROUTINE REINITIALISE LA
< TRANSFORMATION COURANTE.
< T=O (ELEMENT NEUTRE).
<
<
< RESULTAT :
< X=0 (RETOUR OK).
<
<
ITRANS: EQU $
STZ TRANS < RAZ LA PRESENCE DE TOUTES LES
< TRANSFORMATIONS ELEMENTAIRES.
<
< RAZ DE LA TABLE DES COMPTES DE PRESENCE :
<
LXI NT < X=NBRE DE TRANSFORMATIONS
< ELEMENTAIRES RECONNUES.
LAI 0
E60: EQU $
STBY &NTRANS < RAZ DU NBRE D'OCCURENCE DE LA
< TRANSFORMATION (X).
JDX E60
RSR < RETOUR AVEC X=0 (OK).
<
<
< M A J T R A N S F O R M A T I O N C O U R A N T E :
<
<
< FONCTION :
< CETTE ROUTINE EFFECTUE LE
< PRODUIT FONCTIONNEL DE LA TRANSFORMATION
< COURANTE 'T' , AVEC LA TRANSFORMATION
< ELEMENTAIRE T(B) DONNEE EN ARGUMENT :
< T=T*T(B).
<
<
< NOTA :
< POUR SUPPRIMER UNE TRANSFORMATION
< ELEMENTAIRE , IL SUFFIT DE MULTIPLIER
< 'T' PAR SON INVERSE :
< RP-1=RM ,
< RM-1=RP ,
< R1-1=R3 ,
< R3-1=R1 ,
< SO-1=SO ,
< SX-1=SX ,
< SY-1=SY ,
< S1-1=S1 ,
< ON REMARQUERA DE PLUS LES RELATIONS :
< SX=SO*SY ,
< SY=SO*SX ,
< S1=SO*S2 ,
< S2=SO*S1 ....
< (S2 DESIGNANT LA SYMETRIE PAR
< RAPPORT A LA 2EME BISSECTRICE).
<
<
< ARGUMENT :
< B=NUMERO DE LA TRANSFORMATION ELEMENTAIRE
< QUI VA MULTIUPLER 'T' (A NOTER B#0 TOUJOURS !!!!).
<
<
< RESULTAT :
< X#0 TOUJOURS (AFIN DE MINIMISER L'OCCUPATION
< DE LA GRAMMAIRE).
<
<
UTRANS: EQU $
LR B,X < X=NUMERO DE LA TRANSFORMATION
< ELEMENTAIRE ; A NOTER X#0 !!!!
LBY &MTRANS
LR A,W < W=@DE LA MATRICE DE LA
< TRANSFORMATION T(X).
LBY &NTRANS
ADRI 1,A < ET UNE ITERATION DE PLUS.
SARD 16 < LE NBRE D'ITERATIONS SUR T(X)
< EST ETENDU SUR 32 BITS.
DV NEUTRE,W < ON CALCULE LE NBRE D'ITERATION
< MODULO LA PUISSANCE QUI DONNE
< L'OPERATION NEUTRE.
LR B,A < A=RESTE DE LA DIVISION.
STBY &NTRANS < NBRE D'ITERATIONS DE T(X).
< (RESTE DE LA DIVISION).
LA TRANS < ACCES A L'INDICATEUR DE PRESENCE
< DES TRANSFORMATIONS ELEMENTAIRES.
SBT 0,X < T(X) PRESENTE A PRIORI.
CPZR B < DOIT-ELLE ETRE ITEREE AU
< MOINS UNE FOIS ???
JNE E410 < OUI , DONC ELLE EST PRESENTE.
RBT 0,X < SINON , ON LA REND ABSENTE.
E410: EQU $
STA TRANS < MAJ DE L'INDICATEUR DE PRESENCE
< DES TRANSFORMATIONS ELEMENTAIRES.
RSR < RETOUR AVEC X#0.
PAGE
<
<
< A C C E S D I R E C T A U D K :
<
<
< FONCTION :
< CE MODULE PERMET DE SAUVEGARDER ET
< DE RESTAURER 31 CONTEXTES DIFFERENTS
< CONSTITUES PAR LA LISTE DES CONSTANTES
< STACKABLES.
<
<
< S A V E O U R E S T O R E ? ? :
<
<
< ARGUMENT :
< B=SENS (0/2) DE L'OPERATION.
<
<
ADSEC: EQU $
STB DEMDK < MISE EN PLACE DE LA FONCTION.
LAI 'C < A=NVP D'ACCES DIRECT AU DKS.
STBY DEMDK < MISE EN PLACE DU NVP D'ACCES.
RSR
<
<
< S A V E / R E S T O R E C O N T E X T E :
<
<
RWDK: EQU $
LAD DEMDK
SVC 0 < EXECUTION DE LA DEMANDE.
RSR < RETOUR AVEC LES CONDITIONS DE
< RETOUR DE CMS4 DANS X.
PAGE
<
<
< S T A C K A G E D E S C O N S T A N T E S :
<
<
< PHILOSOPHIE :
< ON DISPOSE D'UNE PILE 'STACK' ,
< DANS LA QUELLE ON PUEUT EMPILER/
< DEPILER LES CONSTANTES , SOIT
< POUR LES SAUVEGARDER POUR RESTAURATION
< ULTERIEURE , SOIT POUR LES ECHANGER
< (CF. PUSH X , PUIS PULL Y ).
< SONT STACKABLES LES CONSTANTES
< SUIVANTES :
< 1- CTTE : APPELEE 'K' POUR L'OCCASION ,
< 2- CV : APPELE 'C' ,
< 3- DY : APPELE 'Y' ,
< 4- DX : APPELE 'X'.
< 5- LA TRANSFORMATION COURANTE : APPELEE 'T'.
< 6- L'ARGUMENT FORMEL : APPELE 'A'.
<
<
< I N I T I A L I S A T I O N :
<
<
< ARGUMENT :
< B=0 : IL S'AGIT D'UN 'PULL' ,
< =1 : IL S'AGIT D'UN PUSH.
<
<
< RESULTAT :
< SAVE=0 : 'PULL' ,
< =1 : 'PUSH'.
<
<
SWHOS: EQU $
STB SAVE < MEMORISATION DU SENS DE
< L'OPERATION SUR 'STACK'.
STZ WHOS < RAZ DE LA LISTE DES CONSTANTES
< ATRAITER.
RSR
<
<
< I N S E R T I O N C O N S T A N T E S
< D A N S L A L I S T E :
<
<
< ARGUMENT :
< B=NUMERO DE LA CONSTANTE A INSERER
< DANS LA LISTE 'WHOS' ; DANS LE CAS OU
< B EST NUL C'EST QUE L'OPERATION PORTE
< SUR LA TRANSFORMATION COURANTE.
<
<
< RESULTAT :
< X#0 (TOUJOURS RETOUR EN ERREUR).
<
<
RWHOS: EQU $
LXI 1 < LE STACKAGE PORTE SUR UN
< SEUL MOT A PRIORI (CAS B#0).
LR B,Y < Y=NUMERO DE LA CONSTANTE
< EN CAUSE.
CPZR B < EST-CE UNE OPERATION SUR 'T' ???
JNE E440 < NON , C'EST BON.
<
< CAS D'UNE OPERATION SUR 'T' :
<
LXI NT+1/2+1+1 < X=NBRE DE MOTS A EDPLACER
< DANS LE CAS DE 'T'.
LYI TRANS-WHOS < INDICE DU 1ER MOT A DEPLACER
< POUR LA TRANSFORMATION 'T'.
<
< MISE A JOUR DE LA LISTE 'WHOS' :
<
E440: EQU $
LA WHOS < ACCES A LA LISTE.
E441: EQU $
XR X,Y
SBT 0,X < MEMORISATION DE LA CONSTANTE.
< (BIT(X)=1).
XR X,Y
ADRI 1,Y < PROGRESSION DU NUMERO DE LA
< CONSTANTE (Y).
JDX E441 < CONSTANTE SUIVANTE.
STA WHOS < MAJ DE LA LISTE.
LXI 1 < POUR FAIRE UN RETOUR EN ERREUR.
RSR < RETOUR EN ERREUR (TOUJOURS).
<
<
< O P E R A T I O N S U R S T A C K :
<
<
< ARGUMENT :
< SAVE=SENS DE L'OPERATION :
< =0 : 'PULL' ,
< =1 : 'PUSH'.
<
<
< RESULTAT :
< ERREUR SI L'OPERATION EST IMPOSSIBLE.
<
<
ESTACK: EQU $
LY ASTACK < Y=@STACK.
LB WHOS < B=LISTE DES CONSTANTES A TRAITER.
CPZ SAVE < TEST DU SENS DE L'OPERATION.
JE E300 < CAS DES 'PULL'.
<
< P U S H I N S T A C K :
<
LXI -NSTACK
<
< BOUCLE DE 'PUSH' PAR CONSTANTE :
<
E301: EQU $
TBT 16+NSTACK+1,X < LA CONSTANTE(X) EST-ELLE
< CONCERNEE ???
JNC E302 < NON.
LA &LWHOSI < SI OUI , ACCES A LA CONSTANTE(X+
< NSTACK+1).
PUSH < ET EMPILEMENT DANS 'STACK'.
JC E303 < DEBORDEMENT DE 'STACK' PAR
< LE HAUT ; ABORT AVEC AU
< PEALABLE UNE DECREMENTATION DU
< POINTEUR DE STACK !!!!??
E302: EQU $
JIX E301 < CONSTANTE SUIVANTE.
< A NOTER :
< X=0 : RETOUR OK ...
<
< SORTIE DE LA ROUTINE :
<
E306: EQU $
RSR
<
< DEBORDEMENT DE STACK PAR LE HAUT :
<
E303: EQU $
DC &ASTACK < ON DECREMENTE LE POINTEUR
< DE 'STACK' , CAR CETTE ANDOUILLE
< DE MICRO-MACHINE L'A QUAND
< MEME FAIT PROGRESSER !!?!?
JMP E306 < VERS LA SORTIE : A NOTER : X#0 !!
<
< P U L L I N S T A C K :
<
E300: EQU $
LXI NSTACK
<
< BOUCLE DE DESEMPILEMENT DES CONSTANTES : (A REBROUSSE POIL...)
<
E304: EQU $
TBT 16,X < LA CONSTANTE(X) EST-ELLE
< CONCERNEE ???
JNC E305 < NON.
PULL < SI OUI , ON LA DEPILE.
JC E307 < ERREUR : DEBORDEMENT PAR LE
< BAS ; ON ABORTE , MAIS AU
< PREALABLE , ON VA INCREMENTER
< LE POINTEUR DE 'STACK'.
STA &LWHOSO < SI OK , ON RESTAURE CONSTANTE(X).
E305: EQU $
JDX E304 < CONSTANTE SUIVANTE.
<
< RESTAURATION EVENTUELLE DU 3-CURSEUR,
< ET DE 2 DES 3 PAS SUR X, Y, Z :
<
LA CV+Y
STA &C1 < A NOTER QUE X=0.
LA CV+X
STA &C2
BSR ASPDXY < RESTAURATION DE 2 DES 3 PAS.
LXI 0 < X=0 POUR UN RETOUR OK.
JMP E306 < RETOUR OK , CAR X=0 !!!!
<
< DEBORDEMENT DE 'STACK' PAR LE BAS :
<
E307: EQU $
IC &ASTACK < IL FAUT RATTRAPPER LES BETISES
< DE LA MICRO-MACHINE !?!?!
JMP E306 < VERS UNE SORTIE EN ERREUR (X#0).
PAGE
<
<
< A P P E L P R O G R A M M E :
<
<
< S A V E N O M C H E R C H E :
<
<
< RESULTAT :
< SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE ,
< X#0 (TOUJOURS ERREUR : CF APPEL BIBLI).
<
<
SAVNOM: EQU $
ADRI -1,B < TRANSLATION ARGUMENT (B)
< DANS LE CAS DES APPELS BIBLI.
STB WORK < -1, 0, +1 SUIVANT BIBLI EN
< BASCULE, OVERLAY OU AU
< DELA DES 4K.
LA IEG < IEG=INDEX 1ER CARACTERE DU NOM
< DU PROGRAMME APPELE.
STA SAVE
LXI 1 < X#0.
RSR < RETOUR TOUJOURS EN ERREUR.
<
<
< L A N C E M E N T P R O G R A M M E :
<
<
< FONCTION :
< CETTE ROUTINE PASSE LA MAIN
< AU PROGRAMME QUI A ETE APPELE.
<
<
< ARGUMENT :
< SAVE=INDEX DE LA 1ERE COMMANDE DU PROGRAMME ( LA
< 1ERE COMMANDE SUIT LA '(').
<
<
< RESULTAT :
< X#0 : TOUJOURS RETOUR EN ERREUR.
<
<
START: EQU $
LX SAVE < RECUPERATION DE L'INDEX DE
< DEPART QUI EST IL FAUT LE
< NOTER DIFFERENT DE 0 , DONC X#0.
STX IEG < MISE EN PLACE DE L'INDEX DE LA
< PROCHAINE COMMANDE A EXECUTER.
RSR < RETOUR AVEC X#0 !!!
<
<
< A C C E S A U N C A R A C T E R E :
<
<
< FONCTION :
< CETTE ROUTINE RECUPERE UN CARACTERE
< DE RANG (X) SOIT DANS LE NOM CHERCHE ,
< SOIT DANS UN NOM DEFINI . SI L'INDEX
< DEMANDE EST HORS LA PAGE , LA ROUTINE
< RETOURNE DIRECTEMENT A UNE ADRESSE
< D'ERREUR DANS LA ROUTINE LOOKP , QUI
< SEULE L'APPELLE.
< LA RECHERCHE S'EFFECTUE , SOIT
< DANS L'ITEM COURANT DANS LE CAS
< DE LOOKP , SOIT DANS L'AUTRE ITEM
< DANS LE CAS DE LOOKPB (RECHERCHE
< EN BIBLIOTHEQUE).
<
<
< ARGUMENT :
< X=INDEX DU CARACTERE DEMANDE.
<
<
< RESULTAT :
< A=CARACTERE SI OK ,
< X<--(X)+1 , SI OK (A NOTER QUE C'EST LE X ARGUMENT
< QUI EST VALIDE , ET NON PAS
< LE X RESULTAT).
< RETOUR DIRECT EN E81 , SI HORS-LA PAGE , ET
< ALORS X#0 ....
<
<
GETCAR: EQU $
LR X,A
CP NCP < VALIDATION DE L'INDEX ARGUMENT.
JE E80 < SORTIE EN ERREUR ; A NOTER
< QUE (X)>NCP N'EST PAS UNE ERREUR,
< IL S'AGIT EN FAIT DU SAUT D'UN
< ITEM A L'AUTRE POUR ACCEDER
< AU NOM RECHERCHE.
<
< CAS D'UN INDEX VALIDE :
<
LBY &AIR < A=CARACTERE DEMANDE.
ADRI 1,X < PROGRESSION DE L'INDEX
< COURANT DES CARACTERES DE CE TYPE
< (SOIT DU NOM CHERCHE , SOIT
< D'UN NOM DEFINI).
RSR < RETOUR.
<
< SORTIE EN ERREUR :
<
E80: EQU $
ADRI -1,K < POUR SAUTER LE BSR D'APPEL.
JMP E81 < RETOUR DIRECT A LOOKP , AVEC
< IL FAUT LE NOTER : X#0 !!!!
<
<
< R E C H E R C H E D ' U N P R O G R A M M E :
<
<
< FONCTION :
< CETTE ROUTINE RECHERCHE LE NOM
< D'UN PROGRAMME APPELE , DANS L'ITEM
< COURANT OU DANS L'AUTRE ITEM (BIBLIOTHEQUE).
< NOM CHERCHE : &<NOM>;....
< NOM DEFINI : ><NOM>(....
<
<
< ARGUMENT :
< SAVE=INDEX DU 1ER CARACTERE DU NOM CHERCHE ,
< C'EST-A-DIRE LE 1ER QUI SUIT '&'.
<
<
< RESULTAT :
< X#0 : LE PROGRAMME CHERCHE N'EXISTE PAS ,
< X=0 , LE PROGRAMME CHERCHE EXISTE , ET ALORS :
< SAVE=INDEX DE LA 1ERE COMMANDE DU PROGRAMME ,
< (C'EST-A-DIRE , LA 1ERE QUI SUIT '(').
<
<
<
< R E C H E R C H E E N B I B L I O T H E Q U E :
<
LOOKPB: EQU $
LXI 1 < ERREUR A PRIORI...
LA AIC
SB CBTR
CP AI2 < EST-ON AU DELA DES 4K ???
JE E81 < REFERENCE EN BIBLI INTERDITE
< LORSQU'ON EST AU DELA DES 4K !!!
<
< RECHERCHE EN BIBLIOTHEQUE (MODE GLOBAL) :
<
LA SAVE
AD ACCEB < L'INDEX D'ACCES AU NOM RECHERCHE,
< EST TRANSLATE DE FACON A ETRE
< ACCESSIBLE A PARTIR DE L'AUTRE
< ITEM (CF. AIR).
AD ACCEB < (TRANSLATION OCTET).
STA SAVE
LA AIC
SB ACCEB < L'ITEM DE RECHERCHE N'EST PAS
< L'ITEM COURANT.
JMP E200 < VERS LA RECHERCHE.
<
< R E C H E R C H E D A N S L ' I T E M C O U R A N T :
<
LOOKP: EQU $
LA AIC < LA RECHERCHE SE FAIT DANS L'ITEM
< COURANT.
E200: EQU $
< ON A ICI :
< A=RELAI VERS L'ITEM QUI SERA UTILISE
< DANS LA RECHERCHE.
STA AIR < MISE EN PLACE DU RELAI VERS
< L'ITEM DE RECHERCHE.
RBT 0 < RAZ DU BIT INDEX.
STA F3 < SAVE TEMPORAIRE DE L'@ITEM DE
< RECHERCHE DANS F3.
LXI 0 < INITIALISATION DE L'INDEX ITEM.
< ON A ICI :
< X=INDEX DE DEBUT DE NIVEAU (EVENTUELLEMENT
< 0 DANS LE CAS D'UNE RECHERCHE GLOBALE ,
< OU D'1NE RECHERCHE LOCALE OU IL N'Y
< AURAIT PAS DE '(' PRECEDENTE.
<
< BOUCLE DE RECHERCHE :
<
E71: EQU $
LAI ">" < A=OCTET RECHERCHE (DEFINITION
< D'UN PROGRAMME GRAPHIQUE.
LB F3 < B=@ZONE DE RECHERCHE.
LY NCP < Y=NBRE D'OCTETS DANS LA ZONE.
SBS < RECHERCHE DE '>' ???
JC E81 < '>' NON TROUVE : RETOUR ERREUR.
ADRI 1,X < OK , ON A TROUVE '>' , ON
< LE DEPASSE ...
E422: EQU $
<
< CAS OU ON TROUVE LA DEFINITION D'UN PROGRAMME :
<
< ON A ICI :
< X=INDEX DU 1ER CARACTERE DU NOM DEFINI.
LY SAVE < Y=INDEX DU 1ER CARACTERE
< DU NOM CHERCHE.
<
< COMPARAISON DU NOM DEFINI (X) ,
< ET DU NOM CHERCHE (Y) :
<
E72: EQU $
BSR AGTCAR < ACCES A UN CARACTERE DE L'ITEM.
LR A,B < B=CARACTERE (X) DE LA DEFINITION.
XR X,Y
BSR AGTCAR < A=CARACTERE (X) DU NOM CHERCHE.
XR X,Y
CPR A,B < TEST DE COINCIDENCE DES 2 NOMS ???
JE E72 < OK , POURSUIVONS LA COMPARAISON.
<
< CAS D'UNE NON-COINCIDENCE :
<
CPI ";" < EST-ON SUR LA FIN DU NOM CHERCHE?
JNE E71 < NON , PASSONS AU CARACTERE
< SUIVANT DE L'ITEM (X).
<
< CAS DE LA FIN DU NOM CHERCHE :
<
LR B,A
CPI "(" < EST-ON AUSSI SUR LA FIN DU
< NOM QUI EST DEFINI ???
JNE E71 < NON , PASSONS AU CARACTERE
< SUIVANT DE L'ITEM (X).
<
< CAS OU ON TROUVE LA DEFINITION DU NOM CHERCHE :
<
E987: EQU $ < ENTRY 'APPEL DE L'ARGUMENT
< FORMEL COURANT'.
STX SAVE < SAVE=INDEX 1ERE COMMANDE DE LA
< DEFINITION.
LXI 0 < RETOUR OK (NOM TROUVE) ...
<
< SORTIE DE LA ROUTINE :
<
E81: EQU $ < ENTRY 'HORS-LA PAGE'.
RSR < RETOUR AVEC (X) ....
PAGE
<
<
< A P P E L D E L ' A R G U M E N T F O R M E L
< C O U R A N T :
<
<
CARGF: EQU $
LX ARGF < X=INDEX PRESUME DE LA 1ERE
< PRIMITIVE DE L'ARGUMENT FORMEL
< COURANT SI CELUI-CI EXISTE ...
CPZR X < EXISTE-T'IL ???
JL E81 < NON , ERREUR ....
JMP E987 < OUI , ON LE TRAITE COMME LA
< RENCONTRE DE LA DEFINITION
< D'UN PROGRAMME CHERCHE.
<
<
< R E N C O N T R E D E L ' A R G U M E N T
< F O R M E L C O U R A N T :
<
<
DARGF: EQU $
LX IEG < X=INDEX DE LA 1ERE PRIMITIVE
< DE L'ARGUMENT FORMEL COURANT.
STX ARGF < QUE L'ON SAUVEGARDE D'UNE
< MANIERE NON RECURSIVE DANS
< ARGF.
RSR < RETOUR AVEC X#0.
PAGE
<
<
< I N I T I A L I S A T I O N D E Y :
<
<
< FONCTION :
< PEMET D'INITIALISER Y POUR
< EXECUTION D'UN PUSH PAR LA SUITE.
< Y CONTIENT ALORS LE NBRE DE REPETITIONS
< A FAIRE SOUS LE NIVEAU DE RECURSIVITE
< CREE PAR LE PUSH.
<
<
< ARGUMENT :
< B=VALEUR INITIALE DE Y.
<
<
< RESULTAT :
< Y=VALEUR.
< X INDIFFERENT (APPEL EN SEQUENTIEL).
<
<
SETY: EQU $
LR B,Y < Y=VALEUR INITIALE.
RSR < RETOUR INDIFFERENT.
PAGE
<
<
< V A L I D A T I O N D U P R O G R A M M E :
<
<
< RESULTAT :
< X=0 : L'ITEM COURANT EST DE TYPE 'TEXTE' ,
< OU DE TYPE 'DESSIN' ,
< #0 : L'ITEM N'EST NI DE TYPE 'DESSIN' ,
< NI DE TYPE 'TEXTE'.
<
<
<
< V A L I D A T I O N B I B L I O T H E Q U E :
<
CHECKB: EQU $
LA ACCEB
NGR A,A
ADRI IINDIC-LTN,A < INDEX MOT D'ACCES AU TYPE.
CPZ WORK < VA-T'ON AU-DELA DE 4K ???
JLE E205X1 < NON...
AD CBTR < OUI, ON TRANSLATE...
E205X1: EQU $
LR A,X < (X)=INDEX MOT D'ACCES AU TYPE...
ADR X,X < CONVERSION EN INDEX OCTET.
JMP E205 < VERS LA VALIDATION.
<
< V A L I D A T I O N P R O G R A M M E I N I T I A L :
<
CHECKT: EQU $
LXI IINDIC-LTN*2 < (INDEX OCTETS)
E205: EQU $
< ON A ICI :
< X=INDEX D'ACCES AU TYPE A PARTIR DE L'ITEM COURANT.
LBY &AIC < ACCES AU TYPE DE L'ITEM COURANT.
ORI '10 < ON FORCE LE BIT10 , AFIN DE
< TESTER SIMULTANEMENT 'D' ET 'T' ,
< DONT LES CODES NE DIFFERENT QUE
< PAR CE BIT ('44 ET '54).
LXI "T" < X=TYPE ATTENDU ('TEXTE').
SBR A,X < X=0 SI LE TYPE DE L'ITEM COURANT
< EST 'TEXTE' OU 'DESSIN'.
RSR < RETOUR AVEC (X).
PAGE
<
<
< I N V E R S I O N D E S I N H I B I T I O N S
< D E P R I M I T I V E S :
<
<
< FONCTION :
< SOIT LA COMMANDE :
< :<PRIMITIVE>
< ELLE A POUR EFFET D'INVERSER LE
< BIT0 DE L'ENTREE DE TCOM ASSOCIEE
< A <PRIMITIVE> . LORSQUE LE BIT0
< EST A 1 , ON FAIT UN SAUT IMPLICITE
< DANS LA GRAMMAIRE EN N1616 , QUI
< PERMET DE SIMULER UN SAUT DE DEFINITION
< DE SOUS-PROGRAMME ...
< (DANS LA MESURE OU UN '(' SUIT...)
< SOIT LA COMMANDE :
< "<PRIMITIVE>
< ELLE A POUR EFFET D'AUTORISER
< A PRIORI LA PRIMITIVE <PRIMITIVE> ,
< PAR MISE A 0 DU BIT0 DE SON ENTREE
< DANS TCOM.
<
<
< ARGUMENT :
< Y=<PRIMITIVE>.
< B=0 : INVERSION DE <PRIMITIVE> ,
< =1 : AUTORISATION DE <PRIMITIVE>.
<
<
INVERS: EQU $
LR Y,X < X=<PRIMITIVE> A INVERSER.
LA &ATCOM < A=ENTREE DE TCOM POUR LA
< <PRIMITIVE>.
IBT 0 < INVERSION DU BIT0 A PRIORI.
CPZR B < EST-CE EN FAIT UNE AUTORISATION ?
JE E988 < NON , UNE INVERSION.
RBT 0 < ET OUI , AUTORISONS ....
E988: EQU $
STA &ATCOM < MISE A JOUR DE TCOM.
RSR < ET C'EST TOUT ...
PAGE
<
<
< E D I T E U R G R A P H I Q U E :
<
<
< PHILOSOPHIE :
< CET EDITEUR GRAPHIQUE , PERMET A
< PARTIR D'UN PROGRAMME CREE SOUS 'ED'
< DE FAIRE DES DESSINS SUR LA VISU.
< LES MANIPULATIONS SUR CE DESSIN ,
< DU TYPE : EFFACER UNE PARTIE DU
< DESSIN , FAIRE SUBIR UNE TRANDSFORMATION
< A UNE PARTIE DU DESSIN , ... SONT
< FAITES AU NIVEAU DU TEXTE DU
< PROGRAMME.
< LE LANGAGE DE PROGRAMMATION EST
< LANGAGE RECURSIF A STRUCTURE DE
< BLOCS (STYLE ALGOL) : LES BLOCS
< SONT DELIMITES DANS LE LANAGE
< PAR DES COUPLES DE PARENTHESES
< '(' ET ')'.
< CETTE STRUCTURE DE BLOCS EST
< REALISEE A L'AIDE DE LA PILE
< DE RECURSIVITE 'PIR'.
<
<
PROG
<
<
< I N I T I A L I S A T I O N D U P R O C E S S E U R :
<
<
< FONCTION :
< CETTE ENTREE EST CELLE UTILISEE LORS
< DES APPELS PAR !GE.
<
<
APILE: WORD PILE-1 < POUR INITIALISER LE REGISTRE K.
WORD COM0 < INITIALISATION DE LA BASE C.
WORD LOC+'80 < INITIALOSATION DE LA BASE L.
GRAPH: EQU $
LRP K
PLR B,C,L,W < INITIALISATION DE B , C , L , W.
< W='LRP K' , FARFELUE!!!
LR B,K < INITIALISATION DE K.
IC KIN < COMPTAGE DES ENTRIES.
JLE NALTM < C'EST LA 1ERE.
LAI '13
STA RETSVC < LES ALT-MODES SONT ASSIMILES
< A DES CTRL-X-OFF.
BR AGOGER < ABORT.
NALTM: EQU $
LAD DEMMEM
SVC 0 < DEMANDE D'ALLOCATION 6K.
<
< I N I T I A L I S A T I O N D E ' G R ' :
<
E976: EQU $
<
< C H A R G E M E N T O V E R L A Y :
<
IF VIDEO,,X100,
NOMBR: VAL "R" < NOM DE LA BRANCHE DE GR.
NOMOV1: VAL " R" < NOM DE L'VERLAY.
X100: VAL 0
IF VIDEO,,,X100
NOMBR: VAL "T" < NOM DE LA BRANCHE.
NOMOV1: VAL " T" < NOM DE L'OVERLAY.
X100: VAL 0
LAI NOMBR
SBT 2
STA &ARACI < MISE EN PLACE DE ' R'.
LAI " "
SBT 2
IC ARACI
STA &ARACI < MISE EN PLACE DE ' '.
IC ARACI
STA &ARACI < MISE EN PLACE DE ' '.
IC ARACI
LAI '04
STBY &ARACI < MISE EN PLACE D'UN 'EOT'.
LAD DEMLOD
E975: EQU $
BSR ASVC < TENTATIVE DE CHARGEMENT.
CPZ RETSVC < OK ???
JNE E975 < NON, TRY AGAIN...
LA APILD
LR A,K < OUI, CHANGEMENT DE PILE.
IF VIDEO,,,X100
<
< PREPARATION DE LA STABILISATION VIDEO :
<
IF ORDI-"T",XWOR%,,XWOR%
WORD '1E25 < RENVOIE : A,B=<ACNESC>.
CP ACNSYS < EST-CE :SYS ???
JNE ACN1 < NON.
LR B,A < PEUT-ETRE...
CP ACNSYS+1 < EST-CE :SYS ???
JE ACN2 < OUI.
ACN1: EQU $ < ON N'EST PAS SOUS :SYS !!!
STZ ASP3 < RAZ DU RELAI MAITRE...
ACN2: EQU $
XWOR%: VAL 0
BSR AVIS < 1ERE STABILISATION VIDEO...
X100: VAL 0
JMP LOOP < ET C'EST PARTI...
PAGE
<
<
< P R I M I T I V E ' G E T C A R A C T E R ' :
<
<
< FONCTION :
< SUIVANT LE MODE DE FONCTIONNEMENT
< COURANT DE GR , CETTE ROUTINE
< RECUPERE LE CARACTERE COURANT :
< 1- DANS ITEM1 EN MODE PROGRAMME (BIT0(PIR)=0) ,
< 2- PAR LECTURE DU CURSEUR GRAPHIQUE EN MODE
< INTERACTIF (BIT0(PIR)=1).
< (ET DE PLUS ELLE RANGE LE CARACTERE DE
< DEBLOCAGE DE LA VISU EN CARACTERE COURANT
< DE ITEM1).
<
<
< ARGUMENT :
< B=0 : NE PAS TESTER LES CARACTERES 'A'/'B'/'S' ,
< #0 : TESTER LES CARACTERES D'EXTREMITE ('A'/
< 'B'/'S') ET S'ILS SONT PRESENTS , LES
< INTERPRETER.
<
<
< RESULTAT :
< Y=CARACTERE COURANT (IEG) DE L'ITEM COURANT.
<
<
PRIMG: EQU $
<
< VALIDATION DE IEG :
<
LX IEG < X=INDEX D'EXECUTION DU PROGRAMME
< GRAPHIQUE DAN SL'ITEM COURANT.
LR X,A
CP NCP < VALIADTION DE L'INDEX IEG.
LA AGON22 < A=@NOEUD DE BRANCHEMENT SI
< CARACTERE HORS-LA PAGE A PRIORI.
JGE E962 < ET OUI , HORS-LA PAGE ...
<
< ACCES AU CARACTERE COURANT (IEG) :
<
LBY &AIC < A=CARACTERE COURANT.
E111: EQU $
IC IEG < PREPARATION DE L'ACCES AU
< CARACTERE SUIVANT.
F241: EQU $ < CAS DES "<" RENCONTRES ALORS
< QUE ITEXTE=1...
CPI "Z" < VALIDATION SUPERIEURE DU
< CARACTERE COURANT (ET CECI
< A CAUSE DE ':').
LR A,Y < Y=CARACTERE COURANT (IEG) DE
< L'ITEM COURANT.
JG E979 < ERREUR : CARACTERE NON RECONNU...
IF VIDEO,,X100,
<
< RECHERCHE DES ')' CORESPONDANTES AUX '('
< REMPLACEES PAR '<' LORS DES APPELS IMPLICITES
< INVALIDES :
<
CPZ ITEXTE < APPEL IMPLICITE VALIDE ???
JE PRIMA < OUI, OK...
CPI "<" < EST-CE UN "<" REEL ???
JNE F240 < NON...
LAI "Z"+1 < OUI, ON LE REMPLACE PAR UN CODE
JMP F241 < SUPERIEUR A "Z", AFIN DE CREER
< UNE ERREUR SUR "<" !!!!
F240: EQU $
CPI ")" < NON, RECHERCHE DES ")"...
JNE PRIMA < NON PAS ")"...
LXI CP < OUI, C'EST ")", ALORS EST-ON
LBY &APRC < SOUS LE BON NIVEAU DE
ADRI -1,A < DESCENTE D'UN NIVEAU.
CPBY ICALLI < RECURSIVITE ???
JNE PRIMA < NON...
STBY &APRC < RECURSIVITE...
LYI "!" < OUI, ALORS ")" DEVIENT LE
< CARACTERE DE FIN DE TEXTE
< A EDITER "!" (INTRODUIT
< PAR "<").
X100: VAL 0
JMP PRIMA < VERS UN RETOUR OK A LOOPB.
PAGE
<
<
< S Y N T A X E :
<
<
< <NOM>::=<CARACTERE DIFFERENT DE ';' ET DE '!'>
< <NOM>::=<NOM><CARACTERE DIFFERENT DE ';' ET DE '!'>
< <COMMENTAIRE>::=<<NOM>;
< <TEXTE A EDITER>::=<<NOM>!
< A::=<ORIGINE VECTEUR>
< B::=<EXTREMITE SEQUENTIELLE VECTEUR>
< S::=<EXTREMITE ETOILEE VECTEUR>
IF VIDEO,,,X100
< <MISE A BLANC EN VIDEO>::=.
< <BLANC SI NOIR/NOIR SI BLANC>::=,
X100: VAL 0
IF VIDEO,,X100,
< D::=<INVERSION ACCES ZDC>
< I::=<ACCES 1 SEGMENT EN ZDC>
< <COMMANDE>::=I
X100: VAL 0
< <ORIGINE>::=O
< E::=<ECHELLE GENERALE>
< K::=<CONSTANTE ECHELLE>
< V::=<ECHANGE VISU '02-'0B>
< <COMMANDE>::=D
< U::=<COMMANDE DIRECTE DU 4014>
< <COMMANDE>::=U<ARGUMENT>
IF ORDI-"S",XWOR%,,XWOR%
< <ACCES DIRECT 'MEMTV'>::=L<MODE 'MEMTV'><COULEUR>
< <COULEUR>::=0/1/2/3/4/5/6/7
< <MODE 'MEMTV'>::=0/1/2/3
< <COMMANDE>::=<ACCES DIRECT 'MEMTV'>
XWOR%: VAL 0
IF VIDEO,,X100,
< J::=INVERSION APPELS IMPLICITES/EDITION ALPHA-NUMERIQUE
< <COMMANDE>::=J
X100: VAL 0
< Z::=<EFFACEMENT ECRAN>
< F::=<RETOUR A GE>
< C::=<RETOUR AU CCI>
< RP::=<ROTATION +TETA>
< RM::=<ROTATION -TETA>
< R1::=<ROTATION +PI/2>
< R3::=<ROTATION -PI/2>
< SO::=<SYMETRIE ORIGINE>
< SX::=<SYMETRIE OX>
< SY::=<SYMETRIE OY>
< S1::=<SYMETRIE B1>
< A::=<DESORTHOGONALISATION AIGUE>
< O::=<DESORTHOGONALISATION OBTUE>
< H::=<DESORTHOGONALISATION HAUTE>
< B::=<DESORTHOGONALISATION BASSE>
< T::=<OPERATEUR MATRICIEL D'ORIENTATION>
< <TRANSFORMATION ELEMENTAIRE>::=RP/RM/R1/R3/SO/SX/SY/S1/A/O/H/B
< T::=<TRANSFORMATION ELEMENTAIRE>
< T::=T<TRANSFORMATION ELEMENTAIRE>
< <DEFINITION TRANSFORMATION>::=T=<TRANSFORMATION ELEMENTAIRE>...
< ...<TRANSFORMATION ELEMENTAIRE>;
< <MODIFICATION TRANSFORMATION>::=T<TRANSFORMATION ELEMENTAIRE>...
< ..<TRANSFORMATION ELEMENTAIRE>;
< <DEFINITION PROGRAMME>::=><NOM>(<COMMANDE>..<COMMANDE>)
< <APPEL GLOBAL PROGRAMME>::=&<NOM>;
< <APPEL GLOBAL PROGRAMME BIBLIOTHEQUE>::=?<NOM>;
< <APPEL PROGRAMME>::=<APPEL GLOBAL PROGRAMME>
< <APPEL PROGRAMME>::=<APPEL GLOBAL PROGRAMME BIBLIOTHEQUE>
< <ARGUMENT FORMEL>::==(<COMMANDE>...<COMMANDE>)
< <APPEL ARGUMENT FORMEL>::='
< <APPEL ARGUMENT FORMEL DE L'AUTRE ITEM>::=0
< <CHARGEMENT BIBLIOTHEQUE BASCULE>::=$<NOM>;
< <CHARGEMENT OVERLAY>::=#<NOM>;
< <CHARGEMENT BIBLIOTHEQUE AU DELA DE 4K>::=@<NOM>;
< <Y(CURSEUR)>::=2
< <X(CURSEUR)>::=1
< <CURSEUR>::=<X(CURSEUR)>
< <CURSEUR>::=<Y(CURSEUR)>
< <CURSEUR>::=C
< <NOM INTRINSEQUE>::=K/<CURSEUR>/Y/X/A/T
< <PUSH>::=MI<NOM INTRINSEQUE>...<NOM INTRINSEQUE>;
< <PULL>::=MO<NOM INTRINSEQUE>...<NOM INTRINSEQUE>;
< <SAVE CONTEXTE>::=W<ARGUMENT>
< <RESTAURE CONTEXTE>::=R<ARGUMENT>
< <REPETITION>::=%<ARGUMENT>(<COMMANDE>...<COMMANDE>)
< <ARGUMENT>::=1/2/.../9/A/B/.../X/Y/Z
< <COMMANDE>::=Z/F/C
< <MAKE COPY>::=H
< <COMMANDE>::=<MAKE COPY>
< <COMMANDE>::=A/B/S/+/-/*/// /;
< <COMMANDE>::=X+/X-/X*/X//Y+/Y-/Y*/Y//
< <COMMANDE>::=E<ARGUMENT>
< <COMMANDE>::=K<ARGUMENT>
< <COMMANDE>::=X<ARGUMENT>/Y<ARGUMENT>
< <COMMANDE>::=<PUSH>/<PULL>
< <COMMANDE>::=<APPEL PROGRAMME>
< <COMMANDE>::=<CHARGEMENT BIBLIOTHEQUE>
< <COMMANDE>::=<REPETITION>
< <COMMANDE>::=<DEFINITION PROGRAMME>
< <COMMANDE>::=<DEFINITION TRANSFORMATION>
< <COMMANDE>::=<MODIFICATION TRANSFORMATION>
< Q1::=<CHOIX PLAN (X3,Y3)>
< Q2::=<CHOIX PLAN (Y3,Z3)>
< Q3::=<CHOIX PLAN (Z3,X3)>
< <COMMANDE>::=Q1/Q2/Q3
< <COMMANDE>::=1/2/3/4
< <COMMANDE>::=<ORIGINE>
< <COMMANDE>::=K<ARGUMENT>
< <COMMANDE>::=<COMMENTAIRE>
< X+::=<DX:=(DX)+<CONSTANTE ECHELLE>>
< X-::=<DX:=(DX)-<CONSTANTE ECHELLE>>
< Y+::=<DY:=(DY)+<CONSTANTE ECHELLE>>
< Y-::=<DY:=(DY)-<CONSTANTE ECHELLE>>
< K<ARGUMENT>::=<<CONSTANTE ECHELLE>:=<ARGUMENT>>
< X<ARGUMENT>::=<DX:=<CONSTANTE ECHELLE>*<ARGUMENT>>
< Y<ARGUMENT>::=<DY:=<CONSTANTE ECHELLE>*<ARGUMENT>>
< X*::=<DX:=(DX)*<CONSTANTE ECHELLE>>
< X/::=<DX:=(DX)/<CONSTANTE ECHELLE>>
< Y*::=<DY:=(DY)*<CONSTANTE ECHELLE>>
< Y/::=<DY:=(DY)/<CONSTANTE ECHELLE>>
< 1::=<DX,0>
< 2::=<0,DY>
< 3::=<-DX,0>
< 4::=<0,-DY>
< <DEPLACEMENT CURSEUR>:=T*1/2/3/4
< +::=<X+><Y+>
< -::=<X-><Y->
< *::=<X*><Y*>
< /::=<X/><Y/>
< <INVERSION PRIMITIVE>::=:<PRIMITIVE>
< <AUTORISATION PRIMITIVE>::="<PRIMITIVE>
< <BRANCHEMENT : IEG<--(SAVE)>::=!
< <PROGRAMME>::=<COMMANDE>....<COMMANDE>
<
< DEPLACEMENTS DANS L'ESPACE : ON ECRIRA LES
< PROGRAMMES SUIVANTS POUR SE DEPLACER
< SUR LES 3 DIMENSIONS D'ESPACE (X,Y,Z) :
<
< 1- X>0 : >UP(Q1 1)
< 2- X<0 : >UM(Q1 3)
< 3- Y>0 : >VP(Q2 1)
< 4- Y<0 : >VM(Q2 3)
< 5- Z>0 : >WP(Q3 1)
< 6- Z<0 : >WM(Q3 3)
<
<
< <CARACTERE> A ENVOYER AU 4014 :
< (LORS DE <COMMANDE>)
<
< @ NORMAL Z AXIS AND NORMAL VECTORS OR ALPHA
< A NORMAL Z AXIS AND DOTTED LINE VECTORS
< B NORMAL Z AXIS AND DOT-DASHED VECTORS
< C NORMAL Z AXIS AND SHORT-DASHED VECTORS
< D NORMAL Z AXIS AND LONG-DASHED VECTORS
< G NORMAL Z AXIS
< H DEFOCUSED Z AXIS AND NORMAL VECTORS OR ALPHA
< I DEFOCUSED Z AXIS AND DOTTED VECTORS
< J DEFOCUSED Z AXIS AND DOT-DASHED VECTORS
< K DEFOCUSED Z AXIS AND SHORT-DASHED VECTORS
< L DEFOCUSED Z AXIS AND LONG-DASHED VECTORS
< O DEFOCUSED Z AXIS
< P WRITE-THRU MODE AND NORMAL VECTORS OR ALPHA
< Q WRITE-THRU MODE AND DOTTED VECTORS
< R WRITE-THRU MODE AND DOT-DASHED VECTORS
< S WRITE-THRU MODE AND SHORT-DASHED VECTORS
< T WRITE-THRU MODE ANS LONG-DASHED VECTORS
< W WRITE-THRU MODE
< 8 GRANDE TAILLE DE CARACTERES ALPHA-NUMERIQUES
< 9 MOYENNE TAILLE
< : PETITE TAILLE
< ; TRES PETITE TAILLE
<
<
<
IF VIDEO,,,X100
IF ORDI-"S",XWOR%,,XWOR%
<
<
< LES COMMANDES "U0" A "U7" ENVOIENT LES CODES CORRESPONDANTS
< SUR LA VISU ET NE FONT RIEN, MEME SUR LA 4014.
< ELLES SERVENT POUR LA TELEVISION COMME SUIT :
< - "U0" : PROVOQUE L'ARRET DE LA VISUALISATION.
< - "U1" : PROVOQUE LA VISUALISATION SUR LE ROUGE.
< - "U2" : PROVOQUE LA VISUALISATION SUR LE BLEU.
< - "U3" : PROVOQUE LA VISUALISATION SUR LE VERT.
< - "U4" : EQUIVALENT A "U0".
< - "U5" : PROVOQUE LA LECTURE DE L'IMAGE VISUALISEE
< SUR LE ROUGE ET DEVIENT EQUIVALENT A "U1".
< - "U6" : PROVOQUE LA LECTURE DE L'IMAGE VISUALISEE
< SUR LE BLEU ET DEVIENT EQUIVALENT A "U2".
< - "U7" : PROVOQUE LA LECTURE DE L'IMAGE VISUALISEE
< SUR LE VERT ET DEVIENT EQUIVALENT A "U3".
< CHACUNE DE CES COMMANDES RESTE EFFECTIVE JUSQU'A RENCONTRE
< DE LA SUIVANTE.
<
<
XWOR%: VAL 0
X100: VAL 0
PAGE
<
<
< I N T E R P R E T E U R D E S
< P R O G R A M M E S G R A P H I Q U E S :
<
<
< F O R M A T D E S P R I M I T I V E S :
<
< OCTET0=FONCTION (NOM DE LA PRIMITIVE) ,
< BIT0=1 (TOUJOURS) ,
< BIT1=0 : MOT2 (ET EVENTUELLEMENT MOT3)
< PRESENT(S).
< =1 : L'EXECUTION EST SEQUENTIELLE
< (ON PASSE A LA PRIMITIVE SUIVANTE
< EN FAISANT +2 SUR LA BASE C).
< BIT2=1 : ARG2 ABSENT.
< BIT3=1 : LE NOEUD SUIVANT EST N1 (QUELQUE
< SOIENT LES CONDITIONS DE RETOUR).
< OCTET1=ARGUMENT1 ,
< MOT1=ARGUMENT2 ,
< MOT2=@PRIMITIVE SUIVANTE EN CAS D'ERREUR (IL
< FAUT BIT1(MOT0)=0) ,
< MOT3=@PRIMITIVE SUIVANTE SI OK (IL FAUT :
< BIT1(MOT0)=0).
<
<
PR: VAL 0 < NOM DE LA PRIMITIVE+ARGUMENT1.
BSEQ: VAL 1 < BIT INDICATEUR DE PRIMITIVE
< SEQUENTIELLE (1).
PBSEQ: VAL '40 < POUR POSITIONNER LE BIT 'BSEQ'.
LPRIM: VAL 2 < LPRIM=1 : ARG2 EST ABSENT.
PLPRIM: VAL '20 < POUR POSITIONNER LE BIT 'LPRIM'.
GON1: VAL 3 < BIT INDIQUANT QUE LE NOEUD
< SUIVANT EST LE NOEUD N1 (1).
PGON1: VAL '10 < POUR POSITIONNER LE BIT 'GON1'.
ARG2: VAL 1 < ARGUMENT2.
ADER: VAL 2 < @PRIMITIVE SUIVANTE SI ERREUR.
ADOK: VAL 3 < @PRIMITIVE SUIVANTE SI OK.
<
<
< FONCTION ARGUMENT1 ARGUMENT2
<
< PC (???) @ROUTINE CALL.
<-----------------------------------------------------------------------
< PCI (???) @NOEUD CALL ROUTINE RELAYEE
< PAR LE NOEUD D'@ ARG2.
<-----------------------------------------------------------------------
< PT CARACTERE-ASCI TEST-CARACTERE.
<-----------------------------------------------------------------------
< PUSH EMPILEMENT DANS PR.
<-----------------------------------------------------------------------
< PULL DEPILEMENT DE PR.
<-----------------------------------------------------------------------
< PG ACCES AU CARACTERE
< COURANT DE L'ITEM1.
<-----------------------------------------------------------------------
< PTD TEST DIRECT DES
< CARACTERES DE 'SPACE'
< A 'Z' ; ON TROUVE
< LA LISTE DES @NOEUDS
< OU SE BRANCHER PAR
< INDEXATION.
<
<
< UTILISATION DES REGISTRES :
< B=ARGUMENT1.
< X=NOM PRIMITIVE , ET CONDITIONS D'EXECUTION
< EN RETOUR DES PRIMITIVES (0 SI OK) ,
< Y=EN GENERAL LE CARACTERE COURANT (IEG) DE
< L'ITEM COURANT.
< C=@PRIMITIVE COURANTE ,
< W=@BRANCH.
<
<
< P R I M I T I V E S A A D R E S S E ( S ) :
<
PC: VAL 1+'80 < PRIMITIVE 'CALL'.
PCI: VAL 2+'80 < PRIMITIVE 'CALL INDIECT'.
PUSH: VAL 3+'80+PLPRIM < EMPILEMENT DANS PIR SANS ARG2.
PULL: VAL 4+'80+PLPRIM < DEPILEMENT DE PIR SANS ARG2.
PG: VAL 5+'80+PLPRIM < GET CARACTERE SANS ARG2.
PTD: VAL 6+'80+PLPRIM < TEST DIRECT DE CARACTERE.
PT: VAL 7+'80 < PRIMITIVE 'TEST'.
<
< A T T E N T I O N :
< PRIMT DOIT ETRE LA DERNIERE PRIMITIVE
< A CAUSE DE LA TABLE D'AIGUILLAGE DE
< L'INTERPRETEUR.
<
PTM: VAL PT+PLPRIM < PRIMITIVE 'TEST' SANS ARG2.
<
< P R I M I T I V E S S E Q U E N T I E L L E S :
<
PCS: VAL PC+PBSEQ < 'CALL' SEQUENTIEL.
PUSHS: VAL PUSH+PBSEQ < 'PUSH' SEQUENTIEL.
PULLS: VAL PULL+PBSEQ < 'PULL' SEQUENTIEL.
PGS: VAL PG+PBSEQ < 'GET CARACT' SEQUENTIEL.
<
<
< P R I M I T I V E ' C A L L ' :
<
<
PRIMCI: EQU $
LA ARG2,C < A=@NOEUD DE RELAI DE LA ROUTINE.
LR A,C < C=@NOUVEAU NOEUD.
PRIMC: EQU $
BSR ARG2,C < APPEL DE LA ROUTINE DONT
< L'ADRESSE EST DONNEE PAR ARG2.
JMP LOOPB < VERS LE RETOUR DES PRIMITIVES ,
< X AYNAT ETE EVENTUELLEMENT
< POSITIONNE PAR LA ROUTINE (ARG2).
<
<
< T E S T D I R E C T C A R A C T E R E :
<
<
PRIMTD: EQU $
LXI CP
LBY &APRC < A=COMPTE COURANT DES PARENTHESES
< SOUS CE NIVEAU DE RECURSIVITE.
CPBY ICALLI < TEST PAR RAPPORT AU SEUIL ...
LR Y,A < A=CARACTERE COURANT A PRIORI.
JL E979 < LORSQUE LE COMPTE COURANT EST
< STRICTEMENT INFERIEUR A 4 ,
< ON CONSERVE LE MODE NORMAL DES
< PRIMITIVES ....
<
< CAS OU LE COMPTE DE PARENTHESES SOUS CE
< NIVEAU EST SUPERIEUR OU EGAL A (ICALLI) ,
< ON PROCEDE A L'APPEL IMPLICITE DE
< PROGRAMMES DE BIBLIOTHEQUE ...
< LE FORMAT DE LA BIBLIOTHEQUE DOIT ALORS
< ETRE SPECIAL , ET ETRE COMPOSEE EN TETE
< DE BLOCS DE 5 CARACTERES DU TYPE '&X; )' ,
< CLASSE PAR ORDRE CROISSANT DES VALEURS DES
< CARACTERES.
<
IF VIDEO,,X100,
<
< DE PLUS, SI ITEXTE#0, CET APPEL IMPLICITE,
< EST REMPLACE PAR UNE EDITION ALPHA-NUMERIQUE
< DU TEXTE CORRESPONDANT :
<
CPZ ITEXTE < QUE FAIRE ???
JE F200 < UN APPEL IMPLICITE...
<
< CAS DE L'EDITION ALPHA-NUMERIQUE :
<
< NOTA :
< ")" EST TESTEE DIRECTEMENT PAR LA
< GRAMMAIRE D'EMISSION DES TEXTES, PUISQU'
< ELLE EST MODIFIEE ")" <--> "!" LORS
< DE LA COMMANDE "J".
<
CPI "("
JNE E979 < LES CARACTERES DIFFERENTS
< DE "(" ET ")" SONT CONSERVES.
LBY &APRC
ADRI 1,A < ET ON MONTE DANS
STBY &APRC < LA RECURSIVITE...
LAI "<" < "(" EST REMPLACEE PAR "<",
< QUI EST LA COMMANDE D'EDITION
< DE TEXTE.
JMP E979
<
< CAS DES APPELS IMPLICITES :
<
< ROLE DE "@" : LORSQUE CE CARACTERE EST RENCONTRE,
< IL PROVOQUE LA LECTURE ALPHA-NUMERIQUE D'UN
< CARACTERE SUR LA VISU '01 QUI DEVIENT LE
< NOUVEAU CARACTERE D'APPEL IMPLICITE...
<
F200: EQU $
X100: VAL 0
CPI ")" < EST-CE UNE FERMANTE ???
JE E979 < OUI , ON LA CONSERVE.
CPI "(" < EST-CE UNE OUVRANTE ????
JE E979 < OUI , ON LA CONSERVE ...
CPI "@" < CARACTERE D'ENTREE ???
JNE G240 < NON...
G241: EQU $
LAD CG
SVC 0 < OUI, RETOUR EN ALPHA-NUMERIQUE.
LA ADEMIN
SVC 0 < ENTREE D'UN CARACTERE.
LAD OG
SVC 0
LBY BUFIN < A=CARACTERE ENTRE...
CPI " " < VALIDATION...
JL G241 < ERREUR, ON RECOMMENCE...
CPI "Z" < VALIDATION...
JG G241 < ERREUR, ON RECOMMENCE...
G240: EQU $ < A=NOM D'APPEL IMPLICITE.
ADRI -'20,A < LES AUTRES CARACTERES SONT
< TRANSLATES PAR RAPPORT A 'SPACE'.
MP C5 < ON MULTIPLIE PAR LA LONGUEUR
< DES BLOCS D'EN-TETE DE LA
< BIBLIOTHEQUE.
STB SAVE < QUE L'ON MET DANS SAVE COMME
< FUTUR POINT D'ENTREE D'UN
< SOUS-PROGRAMME A APPEL IMPLICITE.
<
< ATTENTION : LORSQU'ON EST DANS L'ITEM2, LES APPELS
< IMPLICITES SONT ENVOYES AUTOMATIQUEMENT AU DELA DES
< 4K (VOIR LES BIBLIOTHEQUES @<NOM>;).
<
LA AIC
CP AI2 < EST-ON DANS ITEM2 ???
JNE E7615 < NON...
AD CBTR < OUI, PASSAGE AU DELA DE 4K MOTS.
AD ACCEB < AFIN D'ANNULER LE 'CHGTI'...
STA AIC
E7615: EQU $
LAI "!" < ET LE CARACTERE COURANT EST
< REMPLACE PAR LE CARACTERE DE
< BRANCHEMENT '!'.
E979: EQU $ < CARACTERE NON RECONNU LORS
< DE GET-CARACTERE.
LXI 1 < RETOUR EN ERREUR A PRIORI.
CPI "Z" < VALIDATION SUPERIEURE DE (A).
JG LOOPB < ERREUR : CARACTERE NON RECONNU.
ADRI -'20,A < TRANSLATION PAR RAPPORT A 'SPACE'
JAL LOOPB < ERREUR : CARACTERE NON RECONNU.
LXI 0 < RETOUR OK (PAR PROPRETE).
ADR A,C < SI LE CARACTERE EST DANS
< LE SEGMENT ('SPACE','Z') IL
< RECONNU , ET SERT D'INCREMENT
< A LA BASE C POUR ATTEINDRE SON
< NOEUD DE TRAITEMENT ; RETOUR OK.
LA ADER,C < ACCES A L'ADRESSE DE TRAITEMENT
< DE LA PRIMITIVE (Y).
JAGE E962 < OK , PRIMITIVE NON INHIBEE.
LA ASAUT < LORSQUE LA PRIMITIVE EST INHIBEE ,
< ON FAIT UN SUAT IMPLICITE DANS
< LA GRAMMAIRE EN N1616.
JMP E962 < VERS LA BOUCLE DE L'INTERPRETEUR.
<
<
< P R I M I T I V E ' G O T O ' :
<
<
PRIMA: EQU $
LXI 0 < IL SUFFIT DE FAIRE UN RETOUR OK.
<
<
< R E T O U R D E S P R I M I TI V E S :
<
<
LOOPB: EQU $
< ON A ICI :
< B=QUELQUE CHOSE (ARG1,....) ,
< X=CONDITION DE RETOUR DE LA PRIMITIVE (0 : OK).
LA PR,C < POUR TESTER LES BITS 0 & 1
< DE LA PRIMITIVE QUE L'ON VIENT
< D'EXECUTER.
TBT GON1 < DOIT-ON ALLER AU NOEUD 'N1' ???
JNC E961 < NON.
LA AGON1 < OUI : A=@NOEUD N1.
JMP E962 < VERS LE SAUT EN N1.
E961: EQU $
TBT LPRIM < ARG2 EST-IL ABSENT ????
SBCR C < SI OUI , IL FAUT DECREMENTER
< LA BASE C D'UNE UNITE.
ADRI ADER-PR,C < CAS PRIMITIVE SEQUENTIELLE
< A PRIORI.
TBT BSEQ < TEST DU BIT 'SEQUENTIEL'.
JC LOOP < EN EFFET LA PRIMITIVE QUE L'ON
< VIENT D'EXECUTER EST DE TYPE
< SEQUENTIELLE , (C) EST BONNE.
<
< CAS DES PRIMITIVES A ADRESSE(S) :
<
CPZR X < COMMENT CELA S'EST-L PASSE ???
JNE E2 < MAL , ET VOUS ??? RETOUR
< EN ERREUR PAR 'ADER'.
ADRI ADOK-ADER,C < BIEN , RETOUR PAR 'ADOK'.
E2: EQU $
LA 0,C < ACCES A L'@PRIMITIVE SUIVANTE.
JAL LOOP < EN FAIT CE QUE L'ON VIENT
< D'ACCEDER EST LA PRIMITIVE
< SUIVANTE ELLE-MEME (CF. BIT0=1).
< (ET (C) EST DONC BON).
E962: EQU $ < CAS DES SAUTS IMPLICITES EN N1.
LR A,C < SINON ON SE 'BRANCHE' SUR LA
< PRIMITIVE SUIVANTE.
<
<
< B O U C L E D E L ' I N T E R P R E T E U R
< G R A P H I Q U E :
<
<
LOOP: EQU $
LAI 0 < NETTOYAGE DE A.
LB PR,C < ACCES A LA PRIMITIVE COURANTE.
DV C100 < DECONCATENATION : B=ARGUMENT1.
ANDI 'F < A=NOM DE LA PRIMITIVE (C).
ADRP A < GOTO L'EXECUTION SPECIFIQUE.
<
< T A B L E D ' A I G U I L L A G E :
<
JMP PRIMC < PRIMITIVE 'CALL'.
JMP PRIMCI < PRIMITIVE 'CALL INDIRECT'.
JMP PRIMPS < PUSH.
JMP PRIMPL < PULL.
JMP PRIMG < PRIMITIVE 'GET CARACTERE'.
JMP PRIMTD < PRIMITIVE 'TEST DIRECT CARACTERE'
<
<
< P R I M I T I V E ' T E S T C A R A C T E R E ' :
<
<
< ARGUMENT :
< Y=CARACTERE COURANT (IEG) DE L'ITEM COURANT ,
< B=CARACTERE ATTENDU.
<
<
< RESULTAT :
< X=0 : (B)=(Y) ,
< X#0 : (B)#(Y).
<
<
PRIMT: EQU $
LXI 1 < CARACTERE (B) NON RECONNU A
< PRIORI ; IL EST A NOTER QUE LA
< NON RECONNAISSANCE A LIEU PLUS
< SOUVENT QUE LA RECONNAISSANCE
< EN ANALYSE SYNTAXIQUE , C'EST
< POURQUOI ON CHOISIT L'ERREUR
< A PRIORI.
CPR Y,B < TEST DE ECONNAISSANCE.
JNE LOOPB < CARACTERE RECONNU , RETOUR
< EN ERREUR A LOOPB.
<
< CAS OU LA RECONNAISSANCE A EU LIEU :
<
JMP PRIMA < VERS UN RETOUR OK A LOOPB.
<
<
< P U S H P I L E D E R E C U R S I V I T E :
<
<
< ARGUMENT :
< B=0 : UNIQUEMENT COMPTER LES PARENTHESES '(' ,
< B=CAUSE DU PUSH#0 : EMPILEMENT REEL DANS PIR.
< ='40 : PUSH POUR REPEAT ,
< ='20 : PUSH POUR APPEL PROGRAMME.
< ='10 : PUSH POUR SAUT DE DEFINITION DE PROGRAMME.
< ='20+'10 : PUSH POUR APPEL PROGRAMME , AVEC
< CHANGEMENT D'ITEM COURANT.
< Y=NBRE DE REPETITIONS A FAIRE SOUS CE NIVEAU.
< (SIGNIFICATIF UNIQUEMENT SI B#0).
<
<
< RESULTAT :
< X#0 : SI L'OPERATION DEMANDEE EST ILLICITE.
<
<
PRIMPS: EQU $
CPZR B < EST-CE UN VRAI PUSH ????
JE E15 < NON , COMPTE DES '('.
<
< CAS DES PUSH VERITABLES :
<
LA APRC < ACCES AU RELAI COURANT VERS PIR.
RBT 0 < A=@ENTREE COURANTE DANS PIR.
LXI CDCP < A PRIORI X=1#0 (RETOUR EN
< ERREUR).
CP TPR < EST-ON DEJA UA SOMMET DE PIR ???
JGE LOOPB < OUI , RETOUR EN ERREUR ,
< ON NE PEUT EMPILER : X=1#0 !!!
<
< CAS OU ON PEUT EMPILER :
<
LA APRC
ADRI LEPR,A < PASSAGE SUR L'ENTREE SUIVANTE
< DE PIR.
STA APRC
<
< INITIALISATION DE LA NOUVELLE ENTREE :
<
SWBR Y,A < CD=(Y) (COMPTE DE REPETITIONS).
ANDI 'FF00 < CLEAR L'OCTET 1 DE A.
ORI 1 < CP=1 (COMPTE DE PARENTHESES).
STA &APRC < MISE DANS LE MOT1 DE L'ENTREE
< COURANTE DE PIR.
LXI IR < RETOUR OK (X=IR=0).
SWBR B,A < MISE DE LA CAUSE DU PUSH EN
< OCTET0 DE A.
AD IEG < RECUPERATION DE L'INDEX COURANT.
TBT BITREP < EST-CE UN PUSH POUR REPETITIONS??
SBCR A < SI OUI , RETOUR SUR '('.
STA &APRC < MISE EN MOT0 DE LA NOUVELLE
< ENTREE COURANTE DE PIR.
<
< TEST D'UN CHANGEMENT D'ITEM :
<
TBT BITPRO
JNC PRIMA < CE N'EST PAS L'APPEL D'UN
< PROGRAMME : RETOUR OK A LOOPB.
TBT BITDEF < CAS D'UN APPEL PROGRAMME ,
< Y-A-T'IL DE PLUS UN CHANGEMENT
< D'ITEM COURANT ???
JNC PRIMA < NON , RETOUR OK A LOOPB.
BSR ACHGTI < CHANGEMENT D'ITEM COURANT.
E201: EQU $
< ON A ICI :
< MOT0(ENTREE COURANTE PIR)=CAUSE-PUSH/INDEX-'(' ,
< OCTET2(ENTREE COURANTE PIR)=NBRE DE REPETITIONS ,
< OCTET3(ENTREE COURANTE PIR)=1 (COMPTE PARENTHESES).
JMP PRIMA < VERS UN RETOUR OK A LOOPB.
<
< COMPTE DES '(' :
<
E15: EQU $
LXI CP
LBY &APRC < ACCES AU COMPTE ALGEBRIQUE
< DES PARENTHESES.
ADRI 1,A < ET UNE '(' DE PLUS.
TBT 7 < CE COMPTE TIENT-IL DANS
< UN OCTET ????
JC LOOPB < NON , ERREUR : X=CP#0.
STBY &APRC < SI LE COMPTE EST VALIDE , ON
< MET A JOUR CP.
JMP PRIMA < RETOUR OK A LOOPB.
<
<
< P U L L P I L E D E R E C U R S I V I T E :
<
<
< FONCTION :
< CE MODULE GERE POUR CHAQUE ENTREE
< COURANTE DE PIR , LES COMPTES DE
< BOUCLE DE REPETITIONS , ET LE COMPTE
< ALGEBRIQUE DES PARENTHESES (+1 POUR '(' ,
< -1 POUR ')') . LORSQUE LE COMPTE DE
< PARENTHESES PASSE PAR 0 , IL
< REGARDE SI IL Y A UNE REPETITION
< A FAIRE (C-A-D SI LE COMPTE DE
< REPETITIONS RESTANT A FAIRE EST #0).
< S'IL N'Y A PLUS DE REPETITIONS
< A FAIRE , IL Y A UN PULL VERITABLE
< D'EFFECTUER SUR PIR.
<
<
< ARGUMENT :
< B#0 : PULL VERITABLE ,
< B=0 : FAIRE UNIQUEMENT -1 SUR LE CP COURANT.
< (PERMET DE COMPTER LES ')' ).
<
<
< RESULTAT :
< X#0 : SI L'OPERATION DEMANDEE EST ILLICITE.
< OU SI CP=0 DANS LE CAS B=0.
<
<
PRIMPL: EQU $
<
< DECOMPTE DES PARENTHESES :
<
LXI CP
LBY &APRC < ACCES AU COMPTE COURANT DES
< PARENTHESES SOUS CE NIVEAU DE PIR
JAE LOOPB < ERREUR : TROP DE ')' , A NOTER
< QU'ON A : X=CP#0.
ADRI -1,A
STBY &APRC < SINON , MAJ DU CP COURANT.
JANE PRIMA < RETOUR OK SANS DEPILEMENT
< SI LE CP NE PASSE PAR 0.
<
< CAS D'UN COMPTE DE PARENTHESES NUL :
<
CPZR B < TEST DU MODE D'APPEL ???
JE LOOPB < CAS B=0 : ON FAIT UN RETOUR
< EN ERREUR (X#0) POUR ANNULATION
< DU CP COURANT.
E101: EQU $
<
< DECOMPTE DES REPETITIONS :
<
LXI CD
LBY &APRC
JAE PRIMA < CAS DE LA 1ERE ENTREE DE LA PILE,
< IL NE FAUT SURTOUT PAS DEPILER ,
< CAR ON TOMBERAIT EN ERREUR.
ADRI -1,A < A=NBRE DE REPETITIONS RESTANT
< A FAIRE SOUS CE NIVEAU DE PIR.
JANE E14 < IL RESTE AU MOINS UNE REPETITION
< A FAIRE , ALLONS Y ....
<
< CAS OU IL N'Y A PLUS DE REPETITIONS
< A FAIRE , ON FAIT UN PULL VERITABLE SUR
< PIR ; A NOTER QUE L'INDEX IEG A
< LA VALEUR QUI LUI CONVIENT POUR
< PERMETTRE L'ACCES AU CARACTERE SUIVANT
< LA ')' :
<
LA APRC
RBT 0 < ACCES A L'ADRESSE DE L'ENTREE
< COURANTE DE PIR.
LXI 1 < ERREUR A PRIORI.
CP BPR < EST-ON DEJA A LA BASE DE LA PIR ?
JLE LOOPB < OUI , RETOUR EN ERREUR : ON NE
< PEUT ALLER PLUS BAS !!! (X=1).
<
< CAS OU ON PEUT DEPILER :
<
E90: EQU $ < ENTRY POUR RETOUR PROGRAMME.
LA APRC
ADRI -LEPR,A < RETOUR SUR L'ENTREE PRECEDENTE
< DE PIR.
STA APRC
JMP PRIMA < VERS UN RETOUR OK A LOOPB.
<
< CAS OU IL RESTE AU MOINS UNE REPETITION :
<
E14: EQU $
STBY &APRC < MAJ DU CD COURANT.
LXI IR
LA &APRC
LR A,B < B=ENTREE 'IR' DE PIR.
TBT BITPRO < EST-CE UN RETOUR DE PROGRAMME ???
AND CFFF < RAZ DES BITS 0,1,2 ET 3.
STA IEG < RETOUR AU DEBUT DE LA REPETITION.
JNC LOOPB < CE N'EST PAS UN RETOUR DE
< PROGRAMME , FAISON DONC UN
< RETOUR OK ; A NOTER : X=IR=0 (OK)
<
< CAS D'UN RETOUR DE PROGRAMME :
<
TBT 16+BITDEF
JNC E90 < C'EST UN RETOUR SANS CHANGEMENT
< D'ITEM COURANT ; ALLONS DEPILER
< LA RECURSIVITE PIR.
LA AIC
SB CBTR < EST-CE UN RETOUR D'AU DELA
< DES 4K ???
CP AI2 < ALORS ???
JNE E7616 < NON.
AD ACCEB < AFIN D'ANNULER LE 'CHGTI'...
STA AIC < OUI, ON REVIENT DANS LES 4K.
E7616: EQU $
BSR ACHGTI < CHANGEMENT D'ITEM COURANT.
JMP E90 < VERS LE DEPILEMENT DE LA
< RECURSIVITE PIR.
PAGE
<
<
< C H A N G E M E N T D ' I T E M C O U R A N T :
<
<
CHGTI: EQU $
LA ACCEB
NGR A,A < LA CONSTANTE DE TRANSLATION
< EST INVERSEE.
STA ACCEB
AD AIC
STA AIC < TRANSLATION DE L'ITEM COURANT
< (CETTE TRANSLATION EST POSITIVE ,
< OU NEGATIVE).
RSR
PAGE
<
<
< P R O G R A M M E I N T E R P R E T A T I F
< D ' I N T E R P R E T A T I O N D E S
< P R O G R A M M E S G R A P H I Q U E S :
<
<
<
< R E T O U R A U C C I :
<
N23: BYTE PC+PGON1;0
WORD GOCCI < RETOUR CCI , PUIS RETOUR A GE.
<
< E R R E U R S D ' E X E C U T I O N O U
< C O M M A N D E N O N R E C O N N U E :
<
N24: EQU $
N25: EQU $
N27: EQU $
BYTE PC+PGON1;0
WORD CARUP < MISE EN POSITION HAUTE DU
< CARACTERE ERRONNE EVENTUELLEMENT.
<
< P R I M I T I V E S N O N R E C O N N U E S :
<
N610: EQU N27 < CAS DES PRIMITIVES NON RECONNUES.
<
< R E T O U R E N E R R E U R
< A L ' A P P E L A N T :
<
N700: BYTE PCS;0
WORD GOGER < RETOUR A L'APPELANT SANS TOUCHER
< AU TYPE DE L'ITEM1.
<
< R E T O U R A ! G E :
<
N22: BYTE PCS;0
WORD GOGE < TENTATIVE DE CHARGEMENT DE
< L'OVERLAY !GE ; SI CE N'EST PAS
< UNE REUSSITE , ON REND LA MAIN
< AU CCI.
<
< E C H A N G E V I S U S ' 0 2 E T ' 0 B :
<
N10001: BYTE PC+PGON1;0
WORD CHVISU
<
< I N V E R S I O N D E S I N H I B I T I O N S :
<
N940: BYTE PGS;0 < Y=<PRIMITIVE> A INVERSER.
BYTE PC+PGON1;0
WORD INVERS < INVERSION DE LA PRIMITIVE
<
< A U T O R I S A T I O N P R I M I T I V E :
<
N945: BYTE PGS;0 < Y=<PRIMITIVE> A AUTORISER.
BYTE PC+PGON1;1 < B=1 : AUTORISATION PRIMITIVE.
WORD INVERS < AUTORISATION DE LA PRIMITIVE (Y).
<
< T R A I T E M E N T D E S I N H I B I T I O N S :
<
N1616: EQU $
BYTE PGS;1 < 1 AFIN DE POUVOIR RENTRER
< CORRECTEMENT DANS LA BOUCLE
< D'ANALYSE PRINCIPALE MEME
< EN MODE INTERACTIF.
BYTE PTM;"(" < EST-CE UNE OUVRANTE ???
WORD N1617 < NON , ACCES A LA PRIMITIVE
< SUIVANTE (Y).
WORD N1000 < DANS LE CAS D'UNE OUVRANTE ,
< ON VA SAUTER TOUT CE QUI EST
< ENTRE L'OUVRANTE ET LA FERMANTE.
<
< E F F A C E M E N T E C R A N :
<
N21: BYTE PC+PGON1;0
WORD ERASE < EFFACEMENT ECRAN.
<
< H A R D - C O P Y :
<
N750: BYTE PC+PGON1;0
WORD HCOPY < HARD-COPY ET TEMPORISATION.
<
< C O M M A N D E D I R E C T E 4 0 1 4 :
<
N10002: BYTE PGS;0 < Y=COMMANDE POUR LE 4014.
BYTE PC+PGON1;0
WORD COMAND < ENVOI AU 4014 SI EXISTE !!!
<
< T R A I T E M E N T D E S ' ( ' S I M P L E S :
<
N14: BYTE PUSH;0 < UNIQUEMENT POUR FAIRE +1 SUR CP.
WORD N27 < TROP DE '(' : ABORT ...
WORD N1 < OK , GO ON ...
<
< T R A I T E M E N T D E S ' ) ' :
<
N15: BYTE PULL;1 < PULL VERITABLE.
WORD N27 < TROP DE ')' : ABORT.
WORD N1 < OK.
<
< D E F I N I T I O N A R G U M E N T F O R M E L :
<
N1001: EQU $
BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"(" < UNE '(' SUIT-ELLE LE SIGNE '=' ???
WORD N27 < NON , MISSING '(' ....
BYTE PC;0 < OUI , OK.
WORD DARGF < SAVE DANS ARGF L'INDEX DE
< LA 1ERE PRIMITIVE DE L'ARGUMENT
< FORMEL COURANT.
WORD N1000 < RETOUR EN ERREUR DE DARGF POUR
< ALLER VERS LE SAUT DE LA DEFINITION
< D'UN PROGRAMME.
<
< A P P E L A R G U M E N T F O R M E L :
<
N941: EQU $
BYTE PC;0
WORD CARGF < MISE DANS SAVE DE L'INDEX DE
< LA 1ERE PRIMITIVE DE L'ARGUMENT
< FORMEL (AFIN D'ASSIMILER DET
< APPEL A L'APPEL D'UN PROGRAMME).
WORD N27 < ERREUR : PAS D'ARGUMENT FORMEL
< COURANT !!!
WORD N942 < OK , ON FAIT COMME SI ON AVIT
< TROUVE LA DEFINITION D'UN
< PROGRAMME CHERCHE ...
<
< A P P E L A R G U M E N T F O R M E L
< D E L ' A U T R E I T E M :
<
N9410: EQU $
BYTE PC;0
WORD CARGF < MISE DANS SAVE DE L'INDEX DE LA
< 1ERE PRIMITIVE DE L'ARGUMENT
< FORMEL COURANT , S'IL EXISTE ....
WORD N27 < ERREUR , N'EXISTE PAS ...
WORD NCDIR < OK , ON L'ASSIMILE A L'APPEL
< D'UN PROGRAMME DE BIBLIOTHEQUE.
<
< D E M A N D E D E R E P E T I T I O N S :
<
N8: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PC;0
WORD REPET1 < SAVREP=NBRE DE REPETITIONS
< DEMANDEES.
WORD N27 < ERREUR : NBRE ERRONE.
BYTE PC;0 < EXAMEN DU NBRE D'ITERATIONS
< DEMANDE.
WORD REPETV
WORD N16 < DANS LE CAS OU LE NBRE EST
< NEGATIF OU NUL, ON ASSIMILE
< CETTE ITERATION A UN SAUT DE
< DEFINITION DE PROGRAMME; LA
< BOUCLE EST DONC SAUTEE...
N30: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"(" < EST-CE UNE '(' ???
WORD N27 < ERREUR : MISSING '(' ...
BYTE PCS;0
WORD REPET2 < Y=NBRE DE REPETITIONS DEMANDEES.
BYTE PUSH;CODREP < EMPILEMENT DE LA RECURSIVITE.
< (Y=NBRE DE REPETITIONS).
WORD N27 < PUSH IMPOSSIBLE.
WORD N1 < ET LA BOUCLE EST LANCEE.
<
< M O D I F I C A T I O N C T T E :
<
N31: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PC;0
WORD REPET1 < RECUPERATION DE CTTE DANS
< SAVE A PARTIR DE Y.
WORD N27 < ERREUR : CTTE ILLEGALE.
BYTE PC+PGON1;0
WORD SCTTE < OK , MAJ DE CTTE.
<
< M O D I F I C A T I O N ' I C A L L I ' & ' S L E E P ' :
<
N31X: BYTE PGS;0 < ACCES AU CARACTERE COURANT...
BYTE PC;0
WORD REPET1 < SAVE <-- CONSTANTE COURANTE...
WORD N27 < MAUVAISE CONSTANTE...
BYTE PC+PGON1;0
WORD MODIS < MODIFICATION ICALLI/SLEEP.
<
< M O D I F I C A T I O N E C H E L L E :
<
N1237: BYTE PGS;0 < ACCES CARACTERE COURANT (Y).
BYTE PC;0
WORD REPET1 < SAVE <-- (Y).
WORD N27 < ERREUR : CONSTANTE ILLEGALE.
BYTE PC+PGON1;0
WORD DEFECH < MAJ DE L'ECHELLE GENERALE.
<
< C H A N G E M E N T D E P L A N :
<
N600: BYTE PGS;0 < ACCES AU NUMERO DU PLAN.
BYTE PTM;"1" < EST-CE LE PLAN 1 ???
BYTE PT;"2" < EST-CE LE PLAN 2 ???
WORD N601 < SELECTION DU PLAN 1 (X3,Y3).
BYTE PT;"3" < EST-CE LE PLAN 3 ???
WORD N602 < SELECTION DU PLAN 2 (Y3,Z3).
WORD N27 < ERREUR : PLAN NON RECONNU.
N603: BYTE PC+PGON1;2 < SELECTION DU PLAN (Z3,X3).
WORD CHPLAN
N601: BYTE PC+PGON1;4 < SELECTION DU PLAN (X3,Y3).
WORD CHPLAN
N602: BYTE PC+PGON1;9 < SELECTION DU PLAN (Y3,Z3).
WORD CHPLAN
<
< C H O I X D U M O D E D E P R O J E C T I O N :
<
N600X1: BYTE PGS;0 < ENTREE DU CARACTERE COURANT.
BYTE PC;0
WORD REPET1 < RECUPERATION DANS 'SAVE' VIA 'Y'...
WORD N27 < ERREUR, ELLE EST ILLEGALE...
BYTE PC+PGON1;0
WORD DEFPR < DEFINITION DU MODE DE PROJECTION.
<
< E N T R Y I N T E R P R E T A T I V E :
<
COM0: EQU $
BYTE PC;0
WORD CHECKT < VALIDATION DU TYPE DE L'ITEM
< COURANT.
WORD N700 < ERREUR : IL N'A PAS LE TYPE
< 'TEXTE'/'DESSIN' : RETOUR
< A L'APPELANT (EI/GO/GE).
<
< O R I G I N E S E G M E N T C O U R A N T ' A ' :
<
N4: BYTE PC+PGON1;4 < A NOTER : B=4 !!!
WORD EXECA < MISE EN PLACE DE L'ORIGINE
< DU SEGMENT COURANT.
<
< E X T R E M I T E S E G M E N T C O U R E N T ' B ' :
<
N5: BYTE PC+PGON1;4 < A NOTER : B=4 !!!
WORD EXECB < MISE EN PLACE DE L'EXTREMITE DU
< SEGMENT COURANT , AFFICHAGE
< DU SEGMENT COURANT , ET
< MODIFICATION DEE SON ORIGINE.
<
< E X T R E M I T E S E G M E N T C O U R A N T ' S ' :
<
N6: BYTE PC+PGON1;8 < A NOTER : B=8 !!!
WORD EXECS < MISE EN PLACE DE L'EXTREMITE DU
< SEGMENT COURANT , ET AFFICHAGE
< DE CELUI-CI.
IF VIDEO,,X100,
<
< A C C E S U N S E G M E N T Z D C :
<
N9340: BYTE PC+PGON1;0
WORD SEGIN
<
< I N V E R S I O N A C C E S Z D C :
<
N5612: BYTE PC+PGON1;0
WORD INTGS < INVERSION DE LA VALIDATION ZDC.
X100: VAL 0
IF VIDEO,,,X100
<
< M I S E A B L A N C E N V I D E O :
<
N2000: BYTE PC+PGON1;'40 < B='40.
WORD COLOR
<
< B L A N C S I N O I R / N O I R S I B L A N C :
<
N2001: BYTE PC+PGON1;'00 < B='00.
WORD COLOR
X100: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
<
< A C C E S D I R E C T A ' M E M T V ' :
<
N30000: BYTE PGS;0 < ACCES AU MODE DU TRACE :
BYTE PC;0
WORD VIDEOM < PRISE EN COMPTE DU MODE DE TRACE (Y).
WORD N27 < ERREUR...
BYTE PGS;0 < ACCES A LA COULEUR DU TRACE :
BYTE PC;0
WORD VIDEOC < ACCES A LA COULEUR DU TRACE (Y).
WORD N27 < ERREUR...
WORD N1 < OK.
IF VIDEO,,,X100
<
< E N V O I D ' U N E S Y N C H R O ' Z D C ' :
<
N37001: BYTE PC+PGON1;0
WORD SENZDC < ENVOI D'UNE SYNCHRO EN 'ZDC'...
X100: VAL 0
XWOR%: VAL 0
<
< M O D I F I C A T I O N D E D X O U D Y :
<
N2: BYTE PC;0
WORD SELDX < SELECTION DX.
WORD N32 < VERS LA MODIFICATION DE DX.
N3: BYTE PCS;0
WORD SELDY < SELECTION DE DY.
N32: BYTE PGS;0 < ACCES AU CARACTERE COURANT POUR
< IDENTIFIER LA MODIFICATION
< DEMANDEE SUR DX OU DY.
PROG P12
BYTE PTM;"+" < EST-CE UNE INCREMENTATION ???
BYTE PT;"-" < EST-CE UNE DECREMENTATION ??
WORD N33 < INCREMENTATION DE DX OU DY.
BYTE PT;"*" < EST-CE UNE MULTIPLICATION ???
WORD N34 < DECREMENTATION DE DX OU DY.
BYTE PT;"/" < EST-CE UNE DIVISION ???
WORD N35 < MULTIPLICATION DE DX OU DY.
WORD N36 < PAS DE FONCTION RECONNUE ,
< ALLONS TENTER L'INITIALISATION
< DE DX OU DY.
<
< D I V I S I O N D E D X O U D Y :
<
N37: BYTE PC+PGON1;0 < DIVISION DE DX OU DY :
< DX OU DY<--(DX OU DY)/CTTE.
WORD EXECD
<
< I N I T I A L I S A T I O N D E D X O U D Y :
<
N36: BYTE PC;0 < EST-CE L'INITIALISATION DE DX
< OU DE DY ???
WORD REPET1 < TENTATIVE DE RECUPERATION DE
< LA CONSTANTE DONNEE EN ARGU-
< MENT (APPELEE ALPHA).
WORD N27 < ERREUR : MAUVAISE CONSTANTE.
BYTE PC+PGON1;0
WORD EXECK < INITIALISATION DE DX OU DY :
< DX OU DY<--CTTE*ALPHA.
<
< I N C R E M E N T A T I O N D E D X O U D Y :
<
N33: BYTE PC+PGON1;0 < INCREMENTATION DE DX OU DY :
< DX OU DY<--(DX OU DY)+CTTE.
WORD EXECP
<
< D E C R E M E N T A T I O N D E D X O U D Y :
<
N34: BYTE PC+PGON1;0 < DECREMENTATION DE DX OU DY :
< DX OU DY<--(DX OU DY)-CTTE.
WORD EXECM
<
< M U L T I P L I C A T I O N D E D X O U D Y :
<
N35: BYTE PC+PGON1;0 < MULTIPLICATION DE DX OU DY :
< DX OU DY<--(DX OU DY)*CTTE.
WORD EXECMU
<
< I N C R E M E N T A T I O N D E D X E T D Y :
<
N17: BYTE PCS;0
WORD SELDX < SELECTION DE DX.
BYTE PCS;0
WORD EXECP < INCREMENTATION DE DX :
< DX<--(DX)+CTTE.
BYTE PC;0
WORD SELDY < SELECTION DE DY.
WORD N33 < VERS L'INCREMENTATION DE DY :
< DY<--(DY)+CTTE.
<
< D E C R E M E N T A T I O N D E D X E T D Y :
<
N18: BYTE PCS;0
WORD SELDX < SELECTION DE DX.
BYTE PCS;0
WORD EXECM < DECREMENTATION DE DX :
< DX<--(DX)-CTTE.
BYTE PC;0
WORD SELDY < SELECTION DE DY.
WORD N34 < VERS LA DECREMENTATION DE DY :
< DY<--(DY)-CTTE.
<
< M U L T I P L I C A T I O N D E D X E T D Y :
<
N19: BYTE PCS;0
WORD SELDX < SELECTION DE DX.
BYTE PCS;0
WORD EXECMU < MULTIPLICATION DE DX :
< DX<--(DX)*CTTE.
BYTE PC;0
WORD SELDY < SELECTION DE DY.
WORD N35 < VERS LA MULTIPLICATION DE DY :
< DY<--(DY)*CTTE.
<
< D I V I S I O N D E D X E T D Y :
<
N20: BYTE PCS;0
WORD SELDX < SELECTION DE DX.
BYTE PCS;0
WORD EXECD < DIVISION DE DX :
< DX<--(DX)/CTTE.
BYTE PC;0
WORD SELDY < SELECTION DE DY.
WORD N37 < VERS LA DIVISION DE DY :
< DY<--(DY)/CTTE.
<
< D E P L A C E M E N T 1 E S T :
<
N9: BYTE PC+PGON1;0 < A NOTER : B=0.
WORD EXEC13
<
< D E P L A C E M E N T 2 N O R D :
<
N10: BYTE PC+PGON1;0 < A NOTER : B=0.
WORD EXEC24
<
< D E P L A C E M E N T 3 O U E S T :
<
N11: BYTE PC+PGON1;1 < A NOTER : B=1#0.
WORD EXEC13
<
< D E P L A C E M E N T 4 S U D :
<
N12: BYTE PC+PGON1;1 < A NOTER : B=1#0.
WORD EXEC24
<
< M I S E A L ' O R I G I N E D E C V :
<
N400: BYTE PC+PGON1;0
WORD ORIGIN
<
< T R A N S F O R M A T I O N C O U R A N T E ' T ' :
<
N13: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"=" < EST-CE UNE REINITIALISATION
< DE LA TRANSFORMATION COURANTE T.
WORD N70 < NON , ESSAYONS UN PRODUIT
< FONCTIONNEL.
<
< I N I T I A L I S A T I O N D E T :
<
BYTE PCS;0
WORD ITRANS < ON FAIT : T=O.
N51: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
N70: BYTE PTM;" " < EST-CE L'ELEMENT NEUTRE ???
BYTE PT;"R" < EST UNE ROTATION ???
WORD N51 < CAS DE L'ELEMENT NEUTRE ' '.
BYTE PT;"S" < EST-CE UNE SYMETRIE ???
WORD N52 < CAS DES ROTATIONS.
BYTE PT;"A" < DESORTHOGONALISATION AIGUE ???
WORD N53 < CAS DES SYMETRIES.
BYTE PT;"O" < DESORTHOGONALISATION OBTUE ???
WORD N500 < DESORTHOGONALISATION AIGUE.
BYTE PT;"H" < DESORTHOGONALISATION HAUTE ???
WORD N501 < DESORTHOGONALISATION OBTUE.
BYTE PT;"B" < DESORTHOGONALISATION BASSE ???
WORD N502 < DESORTHOGONALISATION HAUTE.
BYTE PT;";" < EST-CE LA FIN DE LA MODIFICATION?
WORD N503 < DESORTHOGONALISATION BASSE.
WORD N25 < ERREUR : CARACTERE NON RECONNU.
WORD N1 < CAS DU ';' : C'EST LA FIN DE
< MODIFICATION : VERS L'ACCES
< A LA COMMANDE SUIVANTE.
<
< C A S D E S R O T A T I O N S :
<
N52: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"P" < EST-CE UNE ROTATION +TETA ???
BYTE PT;"M" < EST-CE UNE ROTATION -TETA ??
WORD N54 < CAS DES ROTATIONS +TETA.
BYTE PT;"1" < EST-CE UNE ROTATION +PI/2 ???
WORD N55 < CAS DES ROTATIONS -TETA.
BYTE PT;"3" < EST-CE UNE ROTATION -PI/2 ????
WORD N56 < CAS DES ROTATIONS +PI/2.
WORD N25 < ERREUR : CARACTERE NON RECONNU.
N57: BYTE PC;TR3 < ROTATION -PI/2.
WORD UTRANS
WORD N51 < OK , VERS LA SUIVANTE.
N54: BYTE PCI;TRP < ROTATION +TETA.
WORD N57
N55: BYTE PCI;TRM < ROTATION -TETA.
WORD N57
N56: BYTE PCI;TR1 < ROTATION +PI/2.
WORD N57
<
< C A S D E S S Y M E T R I E S :
<
N53: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"O" < EST-CE UNE SYMETRIE ORIGINE ???
BYTE PT;"X" < EST-CE UNE SYMETRIE OX ???
WORD N58 < CAS DES SYMETRIES ORIGINE.
BYTE PT;"Y" < EST-CE UNE SYMETRIE OY ???
WORD N59 < CAS DES SYMETRIES OX.
BYTE PT;"1" < EST-CE UNE SYMETRIE B1 ???
WORD N60 < CAS DES SYMETRIES OY.
WORD N25 < ERREUR : CARACTERE NON RECONNU.
N61: BYTE PCI;TS1 < SYMETRIE 1ERE BISSECTRICE.
WORD N57
N58: BYTE PCI;TSO < SYMETRIE ORIGINE.
WORD N57
N59: BYTE PCI;TSX < SYMETRIE OX.
WORD N57
N60: BYTE PCI;TSY < SYMETRIE OY.
WORD N57
<
< D E S O R T H O G O N A L I S A T I O N D E S
< A X E S L O C A U X :
<
N500: BYTE PCI;TA < MODE AIGU.
WORD N57
N501: BYTE PCI;TO < MODE OBTU.
WORD N57
N502: BYTE PCI;TH < MODE HAUT.
WORD N57
N503: BYTE PCI;TB < MODE BAS.
WORD N57
<
< S A U T D E F I N I T I O N P R O G R A M M E :
<
N16: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"(" < RECHERCHE DE LA 1ERE '('.
WORD N16 < BOUCLAGE JUSQU'A TROUVER
< LA 1ERE '('.
N1000: EQU $ < ENTRY POUR LE SAUT D'UN ARGUMENT
< FORMLE COURANT.
BYTE PCS;1 < A NOTER : B=1 !!!
WORD SETY < POUR FAIRE CD=1 LORS DU PUSH
< QUI VA SUIVRE (Y=1).
BYTE PUSH;CODDEF < EMPILEMENT DE LA RECURSIVITE
< LORS DE LA RENCONTRE DE
< LA 1ERE '('.
WORD N27 < PUSH IMPOSSIBLE.
N63: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"(" < EST-CE UNE '(' ???
BYTE PT;")" < EST-CE UNE ')' ???
WORD N64 < CAS DES '('.
WORD N63 < ON BOUCLE POUR LES CARACTERES
< DIFFERENTS DE '(' ET ')'.
BYTE PULL;0 < -1 SUR CP POUR ')'.
WORD N65 < RETOUR POUR CP=0 : C'EST LA
< FIN DE LA DEFINITION DU PROGRAMME
WORD N63 < CE N'EST PAS ENCORE LA ')'
< DE FIN DE DEFINITION.
N64: BYTE PUSH;0 < +1 SUR CP POUR '('.
WORD N25 < PUSH IMPOSSIBLE ???
WORD N63 < OK ...
N65: BYTE PUSHS;0 < REMISE DE CP=1 LORS DE LA
< RENCONTRE DE LA FIN DE
< DEFINITION.
BYTE PULL;1 < PULL VERITABLE DE DEPILEMENT
< DE LA RECURSIVITE.
WORD N25 < PULL IMPOSSIBLE ???
WORD N1 < OK , ACCES A LA COMMANDE SUIVANTE
<
< A P P E L P R O G R A M M E :
<
N7: EQU $
N411: BYTE PCS;0
WORD SAVNOM < SAVE=INDEX 1ER CARACTERE DU
< NOM CHERCHE.
N80: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;";" < EST-CE LA FIN DU PROGRAMME
< CHERCHE ';' ???
WORD N80 < NON , ON CONTINUE LE PARCOURS.
BYTE PC;0
WORD LOOKP < RECHERCHE DE LA DEFINITION DU
< PROGRAMME APPELE.
< (SI OK : SAVE=INDEX 1ERE
< COMMANDE DU PROGRAMME).
WORD N300 < LE PROGRAMME N'EXISTE PAS
< DANS L'ITEM COURANT.
N942: EQU $ < ENTRY POUR APPEL ARGUMENT FORMEL.
BYTE PCS;2 < A NOTER : B=2 !!!
WORD SETY < FAIT : Y=2 , POUR LE PUSH
< QUI VA SUIVRE.
BYTE PUSH;CODPRO < EMPILEMENT DE LA RECURSUIVITE ,
< AVEC CD=2 , ET IEG=INDEX DE
< RETOUR (SUIT IMMEDIATEMENT ';').
< AINSI LORS DU PULL DE FIN DE
< PROGRAMME , PUISQUE CD=2 , ON
< FERA UNE FAUSSE REPETITION ,
< AVEC COMME INDEX DE BOUCLAGE ,
< L'INDEX DE RETOUR (A LA SUITE
< DE ';' ....
WORD N27 < ERREUR : PUSH IMPOSSIBLE.
N301: BYTE PC+PGON1;0
WORD START < LANCEMENT DU PROGRAMME APPELE
< A L'INDEX CONTENU DANS SAVE.
<
< A P P E L D I R E C T D ' U N P R O G R A M M E
< E N B I B L I O T H E Q U E :
<
N860: BYTE PCS;0
WORD SAVNOM < SAVE=INDEX DU 1ER CARACTERE
< DU NOM CHERCHE.
N861: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;";" < EST-CE LA FIN DU NOM CHERCHE ???
WORD N861 < NON , ON CONTINUE LE PARCOURS ...
<
< R E C H E R C H E E N B I B L I O T H E Q U E :
<
N300: BYTE PC;0
WORD CHECKB < VALIDATION DE L'ITEM CONTENANT
< LA BIBLIOTHEQUE PRESUMEE.
WORD N25 < LE TYPE N'EST PAS ACCEPTABLE ,
< LE PROGRAMME N'EXISTE DONC PAS.
BYTE PC;0
WORD LOOKPB < SINON , ON FAIT UNE RECHERCHE
< DANS LA BIBLIOTHEQUE.
WORD N25 < LE PROGRAMME N'EXISTE VRAIMENT
< PAS , ERREUR.
NCDIR: EQU $ < NOEUD D'APPEL IMPLICITE DES
< PROGRAMMES DE BIBLIOTHEQUES
< SPECIALES.
BYTE PCS;2
WORD SETY < Y=2.
BYTE PUSH;CODPRO+CODDEF
< ON FAIT UN PUSH POUR APPEL
< PROGRAMME , AVEC CHANGEMENT
< D'ITEM COURANT.
WORD N27 < ERREUR : PUSH IMPOSSIBLE.
WORD N301 < OK , START DANS LE PROGRAMME.
<
< O V E R L A Y D E P R O G R A M M E :
<
N8300: BYTE PC;1 < B=1.
WORD SAVNOM < RETOUR EN ERREUR.
WORD N303 < VERS LA RECHERCHE DU NOM.
<
< B I B L I O T H E Q U E A U D E L A D E S 4 K :
<
N8400: BYTE PC;2 < B=2.
WORD SAVNOM < RETOUR EN ERREUR.
WORD N303 < VERS LA RECHERCHE DU NOM.
<
< B I B L I O T H E Q U E E N B A S C U L E :
<
N302: BYTE PCS;0
WORD SAVNOM < SAUVEGARDE DANS 'SAVE' DE
< L'INDEX DU 1ER CARACTERE DU
< <NOM-BIBLIOTHEQUE>.
N303: BYTE PGS;0 < RECUPERATION DU <NOM> PAR
< CARACTERE.
BYTE PTM;";" < EST-CE LA FIN DE <NOM> ???
WORD N303 < ON BOUCLE SUR LA RECUPERATION
< DU <NOM> JUSQU'A TROUVER UN ';'.
BYTE PC;0 < A NOTER : B=0 !!!
WORD LOADB < TENTATIVE DE CHARGEMENT DE
< LA BIBLIOTHEQUE.
WORD N25 < ERREUR : ELLE N'EXISTE PAS.
BYTE PC;0
WORD CHECKB < DANS LE CAS OU ELLE EXISTE ,
< ON VERIFIE SON TYPE 'T' OU 'D'.
WORD N25 < ERREUR : MAUVAIS TYPE.
WORD N1 < OK , VERS L'ACCES A LA
< COMMANDE SUIVANTE.
<
< O P E R A T I O N S S U R ' S T A C K ' :
<
N310: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"I" < EST-CE UN 'PUSH' (IN).
BYTE PT;"O" < EST-CE UN 'PULL' (OUT).
WORD N311 < CAS DES MOVE IN STACK (PUSH).
WORD N27 < ERREUR : COMMANDE NON RECONNUE.
<
< M O V E O U T ' P U L L ' :
<
BYTE PCI;0 < A NOTER : B=0.
WORD N311 < VERS LA MEMORISATION DU SENS.
<
< M O V E I N ' P U S H ' :
<
N311: BYTE PCS;1 < A NOTER : B=1.
WORD SWHOS < MEMORISATION DU SENS.
<
< RECUPEARTION DE LA LISTE DES CONSTANTES :
<
N312: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
BYTE PTM;"K" < EST-CE 'K' ???
BYTE PT;"Y" < EST-CE 'Y' ??
WORD N313 < INSERTION DE 'K' DANS LA LISTE.
BYTE PT;"X" < EST-CE 'X' ??
WORD N314 < INSERTION DE 'Y' DANS LA LISTE.
BYTE PT;"T" < EST-CE 'T' ??
WORD N315 < INSERTION DE 'X' DANS LA LISTE.
BYTE PT;"2" < EST-CE Y(CURSEUR> ???
WORD N430 < INSERTION DE 'T' DANS LA LISTE.
BYTE PT;"1" < EST-CE X(CURSEUR) ???
WORD N1010 < C'EST Y(CURSEUR).
BYTE PT;"A" < EST-CE 'A' ???
WORD N1011 < C'EST X(CURSEUR).
BYTE PT;";" < EST-CE LA FIN DE LISTE.
WORD N1002 < INSERTION DE 'A' DANS LA LISTE.
BYTE PT;"C" < EST-CE 'C' ??
WORD N316 < FIN DE LISTE.
WORD N27 < ERREUR : ELEMENT NON RECONNU ...
<
< INSERTION DU CURSEUR DANS LA LISTE :
<
BYTE PCS;CV-WHOS+Y < INSERTION Y(CURSEUR).
WORD RWHOS
N1011: EQU $ < INSERTION DE X(CURSEUR)
< DANS LA LISTE.
BYTE PCI;CV-WHOS+X < INSERYION X(CURSEUR).
WORD N313
<
< INSERTION DE Y(CURSEUR) DANS LA LISTE :
<
N1010: BYTE PCI;CV-WHOS+Y < INSERTION DE Y(CURSEUR).
WORD N313
<
< INSERTION DE 'K' DANS LA LISTE :
<
N313: BYTE PC;CTTE-WHOS
WORD RWHOS
WORD N312 < ACCES A L'LEMENT SUIVANT (LE
< RETOUR DE RWHOS EST TOUJOURS
< EN ERREUR).
<
< INSERTION DE Y DANS LA LISTE :
<
N314: BYTE PCI;DY1-WHOS
WORD N313
<
< INSERTION DE 'X' DANS LA LISTE :
<
N315: BYTE PCI;DX1-WHOS
WORD N313
<
< INSERTION DE 'A' DANS LA LISTE :
<
N1002: BYTE PCI;ARGF-WHOS
WORD N313
<
< INSERTION DE 'T' DANS LA LISTE :
<
N430: BYTE PCI;0 < A NOTER : B=0 !!!! (CAS 'T').
WORD N313
<
< FIN DE LISTE :
<
N316: BYTE PC;0
WORD ESTACK < EXECUTION DE L'OPERATION.
WORD N27 < ABORT : OPERATION IMPOSSIBLE.
WORD N1 < OK , ACCES COMMANDE SUIVANTE.
<
< S A V E / R E S T A U R E C O N T E X T E S :
<
N920: BYTE PCI;0 < B=0=LECTURE (RESTAURATION).
WORD N921 < VERS LA PREPARATION DE DEMDK.
N921: BYTE PCS;2 < B=2=ECRITURE (SAUVEGARDE).
WORD ADSEC < PREPARATION DE LA DEMANDE.
N922: BYTE PGS;0 < ACCES AU CARACTERE COURANT QUI
< DONNE LE NUMERO DU CONTEXTE.
BYTE PC;0
WORD REPET1 < CALCUL DU NUMERO DU CONTEXTE
< DANS SAVE (=DEMDK+3).
WORD N27 < ERREUR : ARGUMENT ERRONE.
BYTE PC;0
WORD RWDK < SAVE/RESTAURE LE CONTEXTE.
WORD N27 < EREUR ...
WORD N1 < OK ....
<
< C O M M E N T A I R E E T T E X T E A E D I T E R :
<
N340: BYTE PCS;0 < SAVE L'INDEX 1ER CARACTERE.
WORD SAVNOM
N800: BYTE PGS;0 < ACCES AU CARACTERE COURANT (Y).
IF VIDEO,,X100,
BYTE PC;0
WORD TESTEX < TEST DU MODE DE FONCTIONNEMENT.
WORD N9323 < ITEXTE=1 : PAS D'APPELS IMPLICITES,
< IL FAUT DONC COMPTABILISER
< LES "(" ET LES ")",
WORD N9322 < ITEXTE=0 : IL NE FAUT PAS
< PERTURBER <XXXX...XX!
N9323: EQU $
BYTE PTM;"(" < EST-CE "(" ???
WORD N9321 < NON...
BYTE PUSH;0 < OUI, COMPTAGE DE "(".
WORD N27 < DEBORDEMENT DE "(" !!!
WORD N800 < OK, AU CARACTERE SUIVANT.
N9321: BYTE PTM;")" < EST-CE ")" ???
WORD N9322 < NON...
BYTE PULL;1 < OUI, PULL ")".
WORD N27 < ???
WORD N800 < OK, AU CARACTERE SUIVANT...
X100: VAL 0
N9322: BYTE PTM;";" < EST-CE UNE FIN DE COMMENTAIRE ???
BYTE PT;"!" < NON, EST-CE LA FIN D'UN TEXTE
< A EDITER ???
WORD N1 < FIN D'UN COMMENTAIRE : VERS
< L'ACCES A LA PRIMITIVE SUIVANTE.
WORD N800 < NIN '!' , NI ';' , VERS L'ACCES
< AU CARACTERE SUIVANT.
BYTE PC+PGON1;1 < EDITION DU TEXTE RENCONTRE ; A
< NOTER : B=1#0 !!!
WORD TEXTE < VERS N22 SI CTRL-X-OFF.
IF VIDEO,,X100,
<
< I N V E R S I O N A P P E L S I M P L I C I T E S :
<
N9320: BYTE PC+PGON1;0
WORD INVTEX
X100: VAL 0
<
< A C C E S C O M M A N D E C O U R A N T E :
<
N1: BYTE PGS;1 < ACCES AU CARACTERE COURANT ; A
< NOTER B#0 (!!!!) , AFIN DE
< TESTER 'A'/'B'/'S' DANS LE
< CAS DU MODE INTERACTIF ...
<
< A N A L Y S E D E L A C O M M A N D E :
<
N1617: EQU $ < ENTRY SUITE A UNE PRIMITIVE
< INHIBEE NON SUIVIE DE '('.
BYTE PTD;0 < TEST DIRECT DU CARACTERE COURANT.
WORD N27 < CAS DES PRIMITIVES HORS LE
< SEGMENT ('>PACE','Z').
TCOM: EQU $ < LISTE DES PRIMITIVES A
< A ACCES DIRECT.
WORD N1 < 'SPACE' ELEMENT NEUTRE
WORD NCDIR < ! BRANCHEMENT : IEG<--(SAVE)
WORD N945 < " AUTORISATION PRIMITIVE
WORD N8300 < # OVERLAY DE PROGRAMME
WORD N302 < $ APPEL BIBLIOTHEQUE
WORD N8 < % BOUCLE DE REPETITIONS
WORD N7 < & APPEL GLOBAL DE PROGRAMME
WORD N941 < ' APPEL ARGUMENT FORMEL COURANT
WORD N14 < ( OPEN RECURSIVITE
WORD N15 < ) CLOSE RECURSIVITE
WORD N19 < * MULTIPLICATION D(X) ET D(Y)
WORD N17 < + INCREMENTATION D(X) ET D(Y)
WORD N2001 < , BLANC SI NOIR/NOIR SI BLANC
WORD N18 < - DECREMENTATION D(X) ET D(Y)
WORD N2000 < . MISE A BLANC EN VIDEO.
WORD N20 < / DIVISION D(X) ET D(Y)
WORD N9410 < 0 APPEL ARGUMENT FORMEL DE
< L'AUTRE ITEM
WORD N9 < 1 DEPLACEMENT EST
WORD N10 < 2 DEPLACEMENT NORD
WORD N11 < 3 DEPLACEMENT OUEST
WORD N12 < 4 DEPLACEMENT SUD
WORD N1 < 5 IF5
WORD N1 < 6 IF6
WORD N1 < 7 IF7
WORD N1 < 8 IF8
WORD N1 < 9 IF9
WORD N940 < : INVERSION DES INHIBITIONS
WORD N1 < ; ELEMENT NEUTRE
WORD N340 < < COMMENTAIRE OU TEXTE A EDITER
WORD N1001 < = DEFINITION ARGUMENT FORMEL
WORD N16 < > DEFINITION DE PROGRAMME
WORD N860 < ? APPEL DIRECT PROGRAMME BIBLIO.
WORD N8400 < @ BIBLI AU DELA DES 4K
WORD N4 < A ORIGINE D'UN SEGMENT
WORD N5 < B EXTREMITE SEQUENTIELLE
WORD N23 < C RETOUR AU CCI
WORD N5612 < D NEUTRE (GT) OU ZDC (GR)
WORD N1237 < E MODIFICATION ECHELLE GENERALE
WORD N22 < F RETOUR A L'APPELANT
WORD N31X < G MODIFICATION ICALLI/SLEEP
WORD N750 < H MAKE COPY
IF VIDEO,,X100,
WORD N9340 < I ACCES 1 SEGMENT ZDC
WORD N9320 < J INVERSION APELS IMPLICITES
X100: VAL 0
IF VIDEO,,,X100
WORD N37001 < I ENVOI D'UNE SYNCHRO EN 'ZDC'
WORD N610 < J
X100: VAL 0
WORD N31 < K MODIFICATION DE LA CTTE K
IF ORDI-"S",XWOR%,,XWOR%
WORD N30000 < L : ACCES DIRECT A 'MEMTV'
XWOR%: VAL 0
IF ORDI-"T",XWOR%,,XWOR%
WORD N610 < L
XWOR%: VAL 0
WORD N310 < M OPERATIONS SUR STACK
WORD N600X1 < N DEFINITION DU MODE DE PROJECTION
WORD N400 < O MISE A L'ORIGINE DE CV
WORD N1 < P ELEMENT NEUTRE
WORD N600 < Q CHANGEMENT DE PLAN
WORD N920 < R RESTAURE CONTEXTE DKS
WORD N6 < S EXTREMITE ETOILEE D'UN SEGMENT
WORD N13 < T TRANSFORMATION COURANTE
WORD N10002 < U COMMANDE DIRECTE 4014
WORD N10001 < V ECHANGE DES VISUS '02 ET '0B
WORD N921 < W SAVE CONTEXTE DKS
WORD N2 < X MODIFICATION D(X)
WORD N3 < Y MODIFICATION D(Y)
WORD N21 < Z EFFACEMENT DE L'ECRAN
<
< E L E M E N T S N E U T R E S :
<
IF VIDEO,,X100,
N2000: EQU N1 < POUR ASSURER LA COMPATIBILITE
N2001: EQU N1 < AVEC GT (. ET ,).
X100: VAL 0
IF VIDEO,,,X100
N5612: EQU N1 < POUR COMPATIBILITE AVEC GR (D).
X100: VAL 0
PAGE
<
<
< V A L I D A T I O N D E L ' I M P L A N T A T I O N :
<
<
X12: EQU ZERO+PILE-LTNI-LTNI
X10: VAL X12-$ < NBRE DE MOTS LIBRES JUSQU'A
< L'ITEM2.
ZEROV: EQU ZERO+X10 < ERREUR VOLONTAIRE D'ASSEMBLAGE
< SI X10<0.
DZS X10+1 < RAZ JUSQU'A ITEM2.
<
<
< D E F I N I T I O N O V E R L A Y :
<
<
RACB: EQU ZERO+LIMAG+'1000+LTNI
< L'OVERLAY EST SITUE A LA
< SUITE DE L'IAMGE ET DES BIBLI
< DE TYPE 2.
XWOR%: VAL RACB-ZERO*2
XWOR%A: EQU ZERO+XWOR%
XWOR%: VAL TAILMM-'22-XWOR%
XWOR%B: EQU ZERO+XWOR%
DEBOV1: EQU $
RACB1: EQU $ < COMPTEUR D'ASSEMBLAGE.
BYTE " ";NOMBR < NOM DE L'OVERLAY DE 'GR'.
ASCI " "
BYTE '04;'D0
PAGE
<
<
< P I L E D E S C O N S T A N T E S :
<
<
< NOTA :
< CETTE PILE GEREE PAR LES INSTRUCTIONS
< PUSH/PULL MICRO-PROGRAMMEES ,
< CONTIENT INITIALEMENT LE 1ER MOT
< ET LE DERNIER MOT BLOQUES , AFIN
< DE DETECTER LES DEBORDEMENTS PAR LE
< HAUT ET PAR LE BAS AVANT QU'ILS N'
< AIENT DES CONSEQUENCES DESASTREUSES ...
<
<
X101: VAL $-RACB1
STACK: EQU RACB+X101
BYTE LSTACK-1;1
DZS LSTACK
PAGE
<
<
< C H A R G E M E N T B I B L I O T H E Q U E :
<
<
< FONCTION :
< CE MODULE APPELE SUITE A LA COMMANDE
< '$' , RECUPERE LE <NOM-BIBLIOTHEQUE> ,
< LE CODE SUR 6 CARACTERES SUIVANT LES
< NORMES EN VIGUEUR DANS 'GE' , ET ENFIN
< TENTE LE CHARGEMENT DE L'ITEM DE <NOMC> ,
< DANS L'ITEM QUI N'EST PAS L'ITEM COURANT.
<
<
< ARGUMENT :
< B=0.
< IEG=INDEX 1ER CARACTERE <NOM-BIBLIOTHEQUE>.
< WORK=-1 : BIBLI EN BASCULE ($),
< =0 : CHARGEMENT OVERLAY (#),
< =+1 : BIBLI AU DELA DES 4K.
<
<
< TYPES DES BIBLIOTHEQUES :
< $ : CHARGEE EN BASCULE DE L'ITEM COURANT
< (COMPATIBLE AVEC G2/G3/GV),
< # : OVERLAY CHARGE EN RECOUVREMENT
< DE L'ITEM COURANT, ET REMISE A 0
< DU POINTEUR COURANT 'IEG',
< @ : BIBLI CHARGEE AU DELA DES 4K :
< CELLE-CI NE PEUT ETRE REFERENCEE
< QUE PAR DES APPELS IMPLICITES ((ABCD...))
< FAIT A PARTIR DE L'ITEM2 ...
<
<
< CAS DES CARACTERES 'QUOTE' :
< LORSQU'UN CARACTERE 'QUOTE' EST
< RENCONTRE DANS UN NOM DE BIBLIOTHEQUE
< IL EST REMPLACE PAR L'<IDESC> DE CET
< UTILISATEUR CODE EN ASCI ('0', '1',...).
<
<
< RESULTAT :
< X=0 : LA BIBLIOTHEQUE EST CHAGREE , ET
< EST DE TYPE ITEM.
< X#0 : LA BIBLIOTHEQUE N'EXISTE PAS , OU N'EST
< PAS DE TYPE ITEM.
<
<
X101: VAL $-RACB1
LOADB: EQU RACB+X101
<
< C O D A G E D E L A B I B L I O T H E Q U E :
<
<
< INITIALISATION DES RELAIS :
<
LA AIC < A=@MOT DE L'ITEM COURANT.
CPZ WORK < TEST DU TYPE DE BIBLI ???
JE E7610 < CAS DES OVERLAYS : RECOUVREMENT.
JL E7611 < CAS DES BASCULES.
LA AI2 < CAS AU DELA DES 4K : A=@ITEM2.
AD CBTR < A=@AU DELA DES 4K.
JMP E7610
E7611: EQU $
SB ACCEB < PASSAGE A L'AUTRE ITEM.
E7610: EQU $
ADRI -LTN,A < A=@MOT DE L'EN-TETE DE L'AUTRE
< ITEM.
STA AIR < AIR SERA LE RELAI DE L'EN-TETE
< DE L'AUTRE ITEM.
SLLS 1 < A=@OCTET DE L'EN-TETE DE
< L'AUTRE ITEM.
STA DEMSGN+1 < MAJ DE L'@OCTET DE DEMSGN.
<
< INITIALISATION DU CODEUR :
<
STZ F3 < RAZ DE LA FONCTION F3.
LYI 3 < 2*3 CARACTERES A METTRE A 'SPACE'
LXI 0 < INDEX DE MISE A 'SPACE'.
LAI '20
SBT 2 < A='SPACE''SPACE'.
E211: EQU $
STA &AIR < MISE DU <NOMC> A 'SPACE'.
ADRI 1,X < INDEX DE RAZ.
CPR X,Y
JNE E211 < NEXT ....
LYI -1 < Y=INDEX DE <NOMC> , PUIS
< LONGUEUR COURANTE DE <NOM>.
< ON A ICI :
< B=0 (ARGUMENT) ,
< Y=-1 : LONGUEUR COURANTE DE <NOM> ,
<
< RECUPERATION DES 3 PREMIERS CARACTERES DE <NOM> :
<
E500: EQU $
BSR AGTK < A=K(SAVE).
JE E212 < RENCONTRE DE ';'.
STBY &AIR < C(X)=K(SAVE).
LR Y,A
CPI 2
JL E500 < RECUPERATION DE C(1),C(2),C(3).
<
< CODAGE DES CARACTERES K(4),...,K(L) :
<
E213: EQU $
BSR AGTK < A=K(I) , I=4,...,L (L DESIGNANT
< LA LONGUEUR DE <NOM>.
JE E214 < ARRET DUR LE ';' RENCONTRE.
ADR Y,A < LE CARACTERE COURANT (A) EST
< 'PONDERE' PAR SA POSITION
< (Y) DANS <NOM>.
< (K(I)=K(I)+I).
EORR A,B < CALCUL DE F2 :
< F2=EOR(F2,K(I)).
ADR A,B < F2=F2+K(I).
EOR F3 < CALCUL DE F3 :
< F3=EOR(F3,K(I)).
SCLS 1
STA F3 < F3=SCLS(F3,1).
JMP E213 < CODAGE DU CARACTERE SUIVANT.
<
< MISE SOUS FORMA ASCI DES FONCTIONS F2 & F3 :
<
E214: EQU $
LBY F3 < A=OCTET0(F3).
AD F3 < A=F3+OCTET0(F3).
ANDI '7F < A=OCTET0(F3)+OCTET1(F3).
< (MODULO 128).
CPI "Z"
JLE E215
ADRI -'30,A < F3 EST MIS SOUS LA FORME D'UN
< CARACTERE INFERIEUR AU 'Z'.
E215: EQU $
CPI " "
JG E216
ADRI '30,A
E216: EQU $
< ON A ICI :
< F3=CARACTERE ASCI VARIABLE DE '!' (='21) ,
< A 'Z' (='5A) , ET CONTENU DANS A.
XR A,B < B=F3 , A=F2.
ANDI '7F < F2 EST RAMENE A 7 BITS.
CPI "Z"
JLE E217
ADRI -'30,A < F2 EST RAMENEE A UN CODE
< INFERIEUR A CELUI DU 'Z'.
E217: EQU $
CPI "0"
JGE E218
ADRI '20,A < ON TENTE DE RAMENER F2 A UN
< CODE SUPERIEUR A CELUI DU '0'.
JMP E217 < POURSUITE DE LA TENTATIVE.
E218: EQU $
< ON A ICI :
< F2=CARACTERE ASCI VARIABLE DE '0' (='30) ,
< A 'Z' (='5A).
SWBR A,A
ORR B,A < A=F2.F3.
LXI 2
STA &AIR < STORE : C(5)=F2 ET C(6)=F3.
<
< CODAGE DE LA LONGUEUR DE <NOM> :
<
E212: EQU $
< ON A ICI :
< Y=LONGUEUR DE <NOM> (NON COMPRIS ';').
LR Y,A
E2000: EQU $
ADRI '30,A < LA LONGUEUR EST MISE SOUS FORME
< D'UN CARACTERE ASCI (A PARTIR
< DE '0' ,...).
LXI 3
STBY &AIR < STORE : C4=F1 (LONGUEUR).
LXI 6
LAI '04
STBY &AIR < STORE : C(7)='EOT'.
<
< C H A R G E M E N T D E L A B I B L I O T H E Q U E :
<
LA ALTNI2 < LONGUEUR MAX EN OCTETS D'UN
< ITEM.
STA DEMSGN+2 < MAJ DU COMPTE OCTETS DE DEMSGN.
LYI 1 < DECOMPTEUR DE TENTATIVES.
LAI 5 < ON COMMENCE PAR UN 'LOAD VALUE
< SOUS <ACN>'.
<
< BOUCLE DE TENTATIVES :
<
E206: EQU $
< ON A ICI :
< A=NVP D'ACCES A SGN ,
< Y=DECOMPTEUR DE TENTATIVES.
STBY DEMSGN < MISE EN PLACE DU NVP DE DEMSGN.
LAD DEMSGN
SVC 0 < ENVOI DE LA DEMANDE AU SGN.
JE E220 < OK LOAD SUCCESSFUL.
<
< CAS DES RETOURS EN ERREUR :
<
ADRI -1,Y < DECOMPTE DES TENTATIVES.
CPZR Y
JL E207 < C'ETAIT LA 2EME , ON FAIT
< DONC UN RETOUR EN ERREUR (X#0).
LAI 6 < SINON , ON VA FAIRE UNE TENTA-
< TIVE AVEC UN 'LOAD SOUS :SYS'.
JMP E206 < VERS LA 2EME TENTATIVE.
<
< CAS OU LA BIBLIOTHEQUE A ETE CHAGREE : IL
< FAUT EN VALIDER LE TYPE-ITEM :
<
E220: EQU $
LXI 7
LBY &AIR < A=TYPE DE CE QUE L'ON VIENT
< DE CHARGER.
LXI 'C9 < X='I'+'80 (TYPE ATTENDU=
< TYPE-ITEM 'I').
SBR A,X < SI LE TYPE EST 'ITEM' , ON
< AURA : X=0 (ET UN RETOUR OK).
<
< TRAITEMENT DES OVERLAYS :
<
LR X,A < A=CONDITIONS DE RETOUR,
OR WORK < A=0 SI RETOUR OK, ET
< SI OVERLAY DEMANDE.
JANE E7612 < RIEN A FAIRE.
STZ IEG < CAS DES OVERLAYS CORRECTEMENT
< CHARGES : ON REVIENT EN DEBUT
< D'ITEM.
E7612: EQU $
<
< SORTIE DE LA ROUTINE :
<
E207: EQU $
RSR
PAGE
<
<
< A C C E S C A R A C T E R E A C O D E R :
<
<
< FONCTION :
< CETTE ROUTINE RECUPERE UN CARACTERE
< DU <NOM-BIBLIOTHEQUE> ; ELLE
< FAIT PROGRESSER SAVE ET TESTE LA RENCONTRE
< DU CARACTERE DE FIN DE NOM ';'.
< DE PLUS , ELLE FAIT PROGRESSER LA
< LONGUEUR COURANTE DE <NOM>.
<
<
< CAS DES CARACTERES 'QUOTE' :
< LORSQU'UN CARACTERE 'QUOTE' EST
< RECONNU, IL EST REMPLACE PAR L'<IDESC>
< DE CET UTILISATEUR CODE EN ASCI ('0',
< '1',...).
<
<
< ARGUMENT :
< Y=LONGUEUR COURANTE DE <NOM> ,
< SAVE=INDEX DU CARACTERE COURANT.
<
<
< RESULTAT :
< SAVE<--(SAVE)+1 ,
< A=CARACTERE COURANT ,
< Y<--(Y)+1 ,
< X<--(Y) ,
< INDICATEURS POSITIONNES EN FONCTION D'UN
< TEST SUR LA PRESENCE DE ';'.
<
<
X101: VAL $-RACB1
GTK: EQU RACB+X101
ADRI 1,Y < PROGRESSION DE LA LONGUEUR
< COURANTE DE <NOM>.
<
< ACCES AU CARACTERE COURANT :
<
LX SAVE < X=INDEX DU CARACTERE COURANT.
IC SAVE < PREPARATION DE L'ACCES AU
< CARACTERE SUIVANT.
LBY &AIC < A=CARACTERE COURANT DE <NOM> ,
< RECUPERE DANS L'ITEM COURANT.
CPI "'" < EST-CE UN CARACTERE 'QUOTE' ???
JNE GTKNQ < NON...
WORD '1E45 < A=IDESC.
ADRI "0",A < A=IDESC CODE EN ASCI.
GTKNQ: EQU $
CPI ";" < TEST DE FIN DE NOM.
LR Y,X < X=INDEX DE RANGEMENT DANS LE
< CAS DES 3 PREMIERS CARACTERES.
<
< SORTIE DE LA ROUTINE :
<
RSR
PAGE
<
<
< E C H A N G E D E S V I S U S ' 0 2 E T ' 0 B :
<
<
X101: VAL $-RACB1
CHVISU: EQU RACB+X101
LAD CG
SVC 0 < RETOUR DE LA VISU COURANTE
< EN ALPHA-NUMERIQUE.
LBY CG
IBT 12 < ECHANGE DES VISUS
IBT 15 < '02 ET '0B.
STBY CG
STBY WG
STBY WGT
STBY OG
STBY DERASE
STBY DEMOUT
STBY COPY
STBY DIRECT
RSR
PAGE
<
<
< D I V I S I O N E N T I E R E :
<
<
< FONCTION :
< REALISER UNE DIVISION ENTIERE APR
< (DIV,W) PAR EXCES OU PAR DEFAUT
< SUIVANT LA NECESSITE , C'EST-A-DIRE
< SUIVANT LA POSITION DU DOUBLE DU
< RESTE PAR RAPPORT A (DIV,W).
<
<
< ARGUMENT :
< B=DIVIDENDE ,
< W=@MATRICE DE TRANSFORMATION.
<
<
< RESULTAT :
< B=QUOTIENT.
<
<
X101: VAL $-RACB1
DIVENT: EQU RACB+X101
LR B,A
SARD 16 < ON MET LE DIVIDENDE SUR 32 BITS.
DV DIV,W < EXECUTION DE LA DIVISION.
ADR B,B < ON DOUBLE LE RESTE , SOIT 2*R.
XR A,B < ON MET LE QUOTIENT DANS B.
< (ET 2*R DANS A).
JAGE E70 < OK , ON : 2*R>=0.
NGR A,A < SINON , ON LE REND POSITIF.
E70: EQU $
CP DIV,W < TESTE DE LA POSITION DE 2*R
< PAR RAPPORT AU DIVISEUR (DIV,W).
JL E45 < DANS LE CAS OU 2*R<DIVISEUR ,
< ON FAIT UNE DIVISION PAR DEFAUT.
CPZR B < TEST DU SIGNE DU QUOTIENT.
JGE E320 < QUOTIENT>=0 : ON FAIT B<--(B)+1.
ADRI -2,B < QUOTIENT<0 : ON FAIT B<--(B)-1.
E320: EQU $
ADRI 1,B < DANS LE CAS OU 2*R>=DIVISEUR ,
< ON FAIT UNE DIVISION PAR EXCES.
E45: EQU $
RSR
PAGE
<
<
< C O M M A N D E D U 4 0 1 4 :
<
<
< ARGUMENT :
< Y=COMMANDE A ENVOYER.
<
<
X101: VAL $-RACB1
COMAND: EQU RACB+X101
LR Y,A
CPI "@" < SUPERIEUR OU INFERIEUR A "@" ???
JL F206 < INFERIEUR, IL RESTE TEL QUEL...
ADRI '20,Y < TRANSLATION DE LA COMMANDE
< DANS LA GAME DES MINUSCULES.
F206: EQU $
IF VIDEO,,,X100
IF ORDI-"S",X100,,X100
LR Y,A < SI C'EST UNE COMMANDE "U0" A "U7"
ADRI -"0",A < PLACER LE CODE 0 A 7 DANS
JAL F206C < LA DEMANDE DE STABILISATION.
CPI 7
JG F206C
CPI 4 < SI C'EST UNE COMMANDE DE LECTURE,
JL F206D
RBT 13 < TRANSPORTER LE BIT 13 EN BIT 9.
SBT NBITMO-1-XWOR%C
F206D: EQU $
STA &ASTAB3
BSR AVIS < ET STABILISATION.
JMP F206B
F206C: EQU $
X100: VAL 0
LA DIRECT+1
ANDI 'FF00
ORR Y,A < LA COMMANDE EST MISE A
STA DIRECT+1 < LA SUITE DE 'ESC'.
LAD DIRECT
BSR ASVC < ENVOI DE LA COMMANDE.
F206B: EQU $
RSR < ET C'EST TOUT...
PAGE
<
<
< D E F I N I T I O N E T A P P L I C A T I O N
< D E L ' E C H E L L E G E N E R A L E :
<
<
< ARGUMENT :
< SAVE=NOUVELLE VALEUR DE L'ECHELLE GENERALE.
<
<
X101: VAL $-RACB1
DEFECH: EQU RACB+X101
LA SAVE
MP DX1
SWBR B,B
PSR B
LA SAVE
MP DY1
PLR A
ORR B,A < L'ECHELLE COURANTE GENERALE EST DONC DE
< LA FORME :
< DX1*SAVE,DY1*SAVE.
STA ECH < MISE A JOUR DE ECH.
RSR < RETOUR INDIFFERENT.
<
<
< ARGUMENT :
< X,Y=COORDONNEES AVANT ECHELLE.
<
<
< RESULTAT :
< X,Y=COORDONNEES APRES ECHELLE.
<
<
X101: VAL $-RACB1
FECH: EQU RACB+X101
PSR A,B < SAVE A ET B.
LA ECH
ANDI '00FF
STA WORK < ECHELLE GENERALE SUR OY.
LR Y,A < Y :
MP WORK
DV ECH0
LR A,Y < Y=Y*ECHY/ECH0.
LBY ECH
STA WORK < ECHELLE GENERALE SUR OX.
LR X,A < X :
MP WORK
DV ECH0
LR A,X < X=X=ECHX/ECH0
PLR A,B < RESTAURE A ET B.
RSR
PAGE
<
<
< P R O J E C T I O N D E L ' E S P A C E :
<
<
< FONCTION :
< CETTE ROUTINE PROJETTE L'ESPACE
< (X3,Y3,Z3) SUR LE PLAN (X3,Y3)
< SUIVANT LA FORMULE :
< X2=X3+R*Z3*COS(ALPHA) ,
< Y2=Y3+R*Z3*SIN(ALPHA) ,
< OU R EST UN RAPPORT DE REDUCTION , ET ALPHA ,
< UN ANGLE DE PROJECTION.
<
<
< ARGUMENT :
< CV3 CONTIENT (X3,Y3,Z3).
<
<
< RESULTAT :
< X=X2(POINT PROJETE) ,
< Y=Y2(POINT PROJETE).
<
<
X101: VAL $-RACB1
FWORK: EQU RACB+X101
FLOAT 0 < VARIABLE FLOTTANTE DE MANOEUVRE...
X101: VAL $-RACB1
PROJET: EQU RACB+X101
PSR B
LAD MPROJ
LR A,W < W=@MATRICE DE PROJECTION.
LA DIV,W < CHOIX DU MODE :
JAG PROJE1 < PAR SIN(TETA)/COS(TETA)...
<
< PROJECTION PERSPECTIVE :
<
PSR W < PAR PRUDENCE...
LRM W
WORD FWORK < (W)=BASE DE LA VARIABLE FLOTTANTE...
FLT
FST 0,W < FWORK=DIV(MPROJ)=-COEFFICIENT 'P' DES
< FORMULES DE PROJECTION.
LA CV3+Z3 < Z,
FLT
FDV 0,W
FST 0,W < FWORK=-Z/P,
LAI 1
FLT
FAD 0,W
FST 0,W < FWORK=1-Z/P,
LA CV3+X3 < X,
FLT
FDV 0,W
FIX
LR A,X < (X)=X(PROJETE)=X3/(1-Z3/P).
LA CV3+Y3 < Y,
FLT
FDV 0,W
FIX
LR A,Y < (Y)=Y(PROJETE)=Y3/(1-Z3/P).
PLR W < ON RESTAURE...
JMP PROJE2 < VERS LA SORTIE...
<
< PROJECTION PAR SIN(TETA)/COS(TETA) :
<
PROJE1: EQU $
LA CV3+Z3 < ACCES A Z3(POINT PROJETE).
MP A11,W
BSR ADIV < B=Z3*COS(TETA).
LR B,A < A=Z3*COS(TETA).
AD CV3+X3 < A=X3+Z3*COS(TETA).
LR A,X < X=X2=X3+Z3*COS(TETA).
LA CV3+Z3 < ACCES A Z3(POINT PROJETE).
MP A21,W
BSR ADIV < B=Z3*SIN(TETA).
LR B,A < A=Z3*SIN(TETA).
AD CV3+Y3 < A=Y3+Z3*SIN(TETA).
LR A,Y < Y=Y2=Y3+Z3*SIN(TETA).
<
< SORTIE :
<
PROJE2: EQU $
PLR B
RSR
PAGE
<
<
< C H O I X D U M O D E D E P R O J E C T I O N :
<
<
< FONCTION :
< DEUX CAS SE RENCONTRENT SUIVANT
< LA VALEUR DE DIV(MPROJ) QUE L'ON
< DEFINIT ICI :
<
< 1 - SAVE=1 : DIV(MPROJ) <--2, ET ALORS ON FAIT
< LA PROJECTION PAR SIN(TETA) ET COS(TETA) ;
< 2 - SAVE>1 : DIV(MPROJ) <-- 1-(SAVE), ET LA PROJECTION
< EST PERPECTIVE EN 1/(1-Z/P), OU :
< P=ABS(DIV(MPROJ)).
<
<
X101: VAL $-RACB1
DEFPR: EQU RACB+X101
LA SAVE < (A)=TYPE DE PROJECTION SOUHAITEE :
< 0 OU 1-Z...
ADRI -1,A
LBI 2 < (B)=2 A PRIORI (SIN/COS),
JAE DEFPR1 < ET OUI, PROJECTION PAR SIN/COS...
MP CTTE < ET NON, PERSPECTIVE :
NGR B,B < ON CALCULE : -K*(SAVE-1),
DEFPR1: EQU $
STB MPROJ < ET ON MET SOIT 2, SOIT -K*(SAVE-1)
< DANS DIV(MPROJ)...
RSR < ET C'EST TOUT...
PAGE
<
<
< P L A N D E P R O J E C T I O N :
<
<
< FONCTION :
< CETTE ROUTINE SELECTIONNE LE
< PLAN DE PROJECTION ET DE TRAVAIL
< CHOISIT PARMI LES 3 POSSIBLES :
< 1- (X3,Y3)
< 2- (Y3,Z3) ,
< 3- (Z3,X3).
< LE 1ER AXE NOMME PEUT ETRE
< PARCOURU A L'AIDE DES COMMANDES
< '1' ET '3' , ALORS QUE LE 2EME
< PEUT L'ETRE A L'AIDE DE '2' ET '4'.
< POUR CE FAIRE , ELLE MEMORISE
< LA CONNEXION EXISTANT APRES LE
< CHOIX , ENTRE LES COORDONNEES X ET Y
< DU CURSEUR VIRTUEL , ET 2 DES 3
< COORDONNEES DU 3-CURSEUR CHOISIES
< PARMI (Y3,X3) , (Z3,Y3) , (X3,Z3).
< DE PLUS ELLE SAVE/RESTORE LES
< PAS SUR LES AXES ASSOCIES.
<
<
< ARGUMENT :
< B=4 : CHOIX DE (X3,Y3) ,
< =9 : CHOIX DE (Y3,Z3) ,
< =2 : CHOIX DE (Z3,X3).
<
<
< RESULTAT :
< RETOUR INDIFFERENT.
<
<
X101: VAL $-RACB1
CHPLAN: EQU RACB+X101
<
< SAUVEGARDE DE LA TRANSFORMATION COURANTE :
<
PSR B
LAD TRANS < A=@EMETTEUR=@TRANSFORMATION
< COURANTE.
LB AT < B=@ZONE DE SAUVEGARDE RELATIVE
< AU PLAN COURANT.
LXI NT+1/2+1+1 < X=NBRE DE MOTS A DEPLACER.
MOVE < SAUVEGARDE.
PLR B
<
< SAUVEGARDE DU DX ET DY COURANT :
<
BSR ASPDXY
<
< CHANGEMENT DE PLAN :
<
LR B,A < RECUPERATION DE L'ARGUMENT.
SLRS 2 < A=NUMERO DE LA COORDONNEE DU
< 3-CURSEUR CONTENUE DANS CV+Y.
AD ACV3
STA C1 < MISE EN PLACE DU RELAI D'ACCES
< A LA COORDONNEE DU 3 CURSEUR
< CONTENUE DANS CV+Y.
LR B,A < RE-RECUPERATION DE L'ARGUMENT.
ANDI '03 < A=NUMERO DE LA COORDONNEE DU
< 3-CURSEUR CONTENUE DANS CV+X.
LR A,Y < Y=NUMERO DU PLAN SELECTIONNE :
< Y=0 : Q1 ,
< Y=1 : Q2 ,
< Y=2 : Q3.
AD ACV3
STA C2 < MISE EN PLACE DU RELAI D'ACCES
< A LA COORDONNEE DU 3-CURSEUR
< CONTENUE DANS CV+X.
<
< INITIALISATIONS DES PAS DU CV :
< (A NOTER QU'ON A :
< X=D3).
<
LA &C1
STA DY1 < NOUVEAU PAS DY.
LA &C2
STA DX1 < NOUVEAU PAS DX.
<
< RESTAURATION DE LA TRANSSFORMATION COURANTE
< RELATIVE AU PLAN (Y) :
<
LBI TRANS-ZERO < B=@RECEPTEUR=@TRANSFORMATION
< COURANTE.
LAD SAVET < A=@ZONE DE SAUVEGARDE DES
< 3 PLANS.
E700: EQU $
CPZR Y < TEST SUR LE NUMERO DU PLAN.
JE E701 < OK , A CONTIENT L'ADRESSE
< DE LA ZONE DE SAUVEGARDE
< DU PLAN (Y).
ADRI NT+1/2+1+1,A < SINON , PROGRESSION DE L'ADRESSE
< DANS LA ZONE DE SAUVEGARDE.
ADRI -1,Y < DECREMENTATION DU NUMERO DU PLAN.
JMP E700
E701: EQU $
STA AT < SAVE L'@ DE LA ZONE DE SAUVE-
< GARDE DU PLAN (Y).
< A=@EMETTEUR ....
LXI NT+1/2+1+1 < X=NBRE DE MOTS A DEPLACER.
MOVE < RESTAURATION DE LA TRANSFOR-
< MATION COURANTE , ANOTER X=0 !!!!!
<
< MISE EN PLACE DES COORDONNEES DU CV :
< (ON A :
< X=0)
<
LA &C1
STA CV+Y < NOUVELLE COORDONNEE Y DU CV.
LA &C2
STA CV+X < NOUVELLE COORDONNEE X DU CV.
RSR < RETOUR EN ERREUR.
<
<
< R E S T A U R A T I O N D E 2 D E S 3 P A S :
<
<
< FONCTION :
< RESTAURE 2 DES 3 PAS DES AXES (X,Y,Z)
< A PARTIR DE DX,DY.
<
<
< RESULTAT :
< X=D3.
<
<
X101: VAL $-RACB1
SPDXY: EQU RACB+X101
LXI D3 < X=INDEX D'ACCES A LA ZONE DES
< PAS DX3,DY3,DZ3 DANS CV3.
LA DY1
STA &C1 < SAUVEGARDE DE DY.
LA DX1
STA &C2 < SAUVEGARDE DE DX.
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 :
<
<
X101: VAL $-RACB1
CALX: EQU RACB+X101
STA NZ,W < SAVE A PRIORI LA DONNEE
< INITIALE (Z).
CPZ P1 < LA RESOLUTION DE L'EQUATION
< EST-ELLE POSSIBLE ?????
JNE EE30 < OUI, OK.
<
< CAS D'UNE RESOLUTION IMPOSSIBLE (DIVISION PAR 0) :
<
EE32: EQU $
ADRI 1,X < ET UN OVERCREEN DE PLUS ....
<
< RETOUR DES 2 ROUTINES :
<
EE31: EQU $
RSR
<
< CAS D'UNE RESOLUTION EN 'X' POSSIBLE :
<
EE30: 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.
PSR A < SAVE LE SIGNE DU DIVIDENDE...
DV MP1 < A=QUOTIENT PAR DEFAUT DE :
< (-Z*P2+P3)/(-P1).
PLR B < RESTAURE LE SIGNE DU DIVIDENDE,
JNV EE30X1 < OK, DIVISION POSSIBLE...
LRM A < NON,
XYMAX:: VAL '7FFF
WORD XYMAX < A=ABS(MAX(X,Y)).
CPZR B < SIGNE DU DIVIDENDE ???
JGE EE30X1 < OK, POSITIF...
NGR A,A < ET BIEN NON, NEGATIF...
EE30X1: EQU $
STA NX,W < RANGEMENT DU X DE LA SOLUTION
< A PRIORI.
<
< TEST D'OVERSCREEN :
<
EE33: EQU $
JAL EE32 < SOLUTION NEGATIVE REFUSEE.
CP BORNE
JG EE32 < SOLUTION SUPERIEURE A BORNE.
< REFUSEE.
PSR L
LB P2 < (B)=P2, AFIN DE SAVOIR SI LA DROITE EST
< VERTICALE (NOTA : 'L' VA CHANGER...),
LY P1 < (Y)=P1, AFIN DE SAVOIR SI LA DROITE EST
< HORIZONTALE.
LAD INTER
LR A,L < L=BASE LA LISTE COURANTE DE POINTS.
E33X: EQU $
CPR W,L < TOUTE EXPLOREE ???
JE E33Y < OUI, FINI...
LA NX,L < NON, (W) EST-IL UN POINT DOUBLE ???
CP NX,W
JNE E33X2 < NON...
CPZR B < PEUT-ETRE, MAIS ALORS LA DROITE EST-ELLE
< VERTICALE ???
JNE E33X1 < NON, LE POINT EST ELIMINE...
LA NZ,L < OUI, COMPARONS LES 'Z'...
CP NZ,W
JNE E33Z < NON...
E33X1: EQU $ < CAS DES DROITES VERTICALES/HORIZONTALES..
PLR L < OUI, DONC IL FAUT L'ELIMINER...
JMP EE32
E33X2: EQU $
LA NZ,L < LES 'X' N'ETANT PAS CONFONDUS, REGARDONS
< LES 'Z' :
CP NZ,W < SONT-ILS CONFONDUS ???
JNE E33Z < NON, LE POINT COURANT EST GARDE POUR LE
< MOMENT...
CPZR Y < OUI : LA DROITE EST HORIZONTALE ???
JNE E33X1 < NON, ON ELIMINE LE POINT...
E33Z: EQU $
ADRI 2,L < AU POINT SUIVANT...
JMP E33X
E33Y: EQU $
PLR L
ADRI 2,W < LORSQUE LA SOLUTION EST DANS
< L'ECRAN , ELLE DEVIENT UN POINT
< D'INTERSECTION ADMIS.
JMP EE31 < OK, RETOUR.
<
<
< C A L C U L D E Z , X E T A N T D O N N E :
<
<
X101: VAL $-RACB1
CALZ: EQU RACB+X101
STA NX,W < SAVE LA DONNEE INITIALE
< (X) A PRIORI.
CPZ P2 < LA RESOLUTION DE L'EQUATION
< PROPOSEE EST-ELLE POSSIBLE ????
JE EE32 < NON, OVERFLOW.
<
< 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.
PSR A < SAVE LE SIGNE DU DIVIDENDE...
DV P2 < A=QUOTIENT PAR DEFAUT DE
< X*P1/P2.
PLR B < RESTAURE LE SIGNE DU DIVIDENDE,
JNV EE30X2 < OK, DIVISION POSSIBLE...
LRM A < NON,
WORD XYMAX < A=ABS(MAX(X,Y)).
CPZR B < SIGNE DI DIVIDENDE ???
JGE EE30X2 < OK, POSITIF...
NGR A,A < ET BIEN NON, NEGATIF...
EE30X2: EQU $
STA NZ,W < SAVE A PRIORI LA SOLUTION Z.
JMP EE33 < 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.
<
<
X101: VAL $-RACB1
EXECA: EQU RACB+X101
BSR APROJ < PROJECTION DE L'ESPACE (X3,Y3,Z3)
< SUR LE PLAN (X3,Y3).
STX SEGORG+X
STY SEGORG+Y
RSR
PAGE
<
<
< E D I T I O N D ' U N M E S S A G E :
<
<
< FONCTION :
< CE MODULE EDITE UN MESSAGE
< ALPHA-NUMERIQUE DONT LE 1ER
< CARACTERE EST A L'INDEX (SAVE) ,
< ET LE DERNIER A L'INDEX (IEG)-1.
<
<
X101: VAL $-RACB1
TEXTE: EQU RACB+X101
BSR APROJ < PROJECTION DU 3-CURSEUR.
BSR AFECH < APPLICATION ECHELLE GENERALE.
LR X,A < VALIDATION DE X3.
JAL TEXT2 < 3-CV INVISIBLE.
CP BORNE
JG TEXT2 < 3-CV INVISIBLE.
LR Y,A < VALIDATION DE Y3.
JAL TEXT2 < 3-CV INVISIBLE.
CP BORNE
JG TEXT2 < 3-CV INVISIBLE.
STX SEGT+X < DEFINITION DE L'ORIGINE
STY SEGT+Y < DU TEXTE A EDITER.
LAD OG
BSR ASVC < DECHAINAGE DES SEGMENTS.
JNE TEXT1 < CTRL-X-OFF ???
LAD WGT
BSR ASVC < POSITIONNEMENT TEXTE.
JNE TEXT1 < CTRL-X-OFF ???
LA IEG < INDEX CARACTERE COURANT.
ADRI -1,A < RETOUR SUR LE '!'.
SB SAVE < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2 < MAJ DE DEMOUT.
LA AIC
SLLS 1 < A=@OCTET DE L'ITEM COURANT.
AD SAVE < A=@OCTET DU MESSAGE.
STA DEMOUT+1 < MAJ DE DEMOUT.
LAD CG
BSR ASVC < RETOUR EN ALPHA-NUMERIQUE
< DE LA VISU.
JNE TEXT1 < RETOUR EN ERREUR (CTRL-X-OFF ???)
LAD DEMOUT
BSR ASVC < EDITION DU MESSAGE EN ALPHA.
JNE TEXT1 < CTRL-X-OFF ???
LAD OG
BSR ASVC < REMISE EN GRAPHIQUE.
JNE TEXT1 < CTRL-X-OFF ???
TEXT2: EQU $ < CAS DES 3-CV INVISIBLES.
RSR < RETOUR...
TEXT1: EQU $
ADRI -1,K < ANNULATION DU BSR.
BR AGOGE < RETOUR EN ERREUR A GE.
PAGE
IF VIDEO,,X100,
<
<
< E N T R E E D ' U N S E G M E N T Z D C :
<
<
< FONCTION :
< CETTE ROUTINE ENTRE LE SEGMENT CORANT
< DE LA ZDC, ET LE MET EN (SEGORG,SEGEXT)
< POUR UTILISATION ULTERIEURE.
<
<
X101: VAL $-RACB1
SEGIN: EQU RACB+X101
LAD DEMSEG
<
< BOUCLE D'ATTENTE D'UN SEGMENT VALIDE :
<
SEGIN1: EQU $
SVC 0 < ACCES SEGMENT COURANT ZDC.
CPZ NOMSEG < EST-IL VALIDE ???
JE SEGIN1 < NON, ON ATTEND...
<
< ACQUITTEMENT DU SEGMENT COURANT :
<
STZ NOMSEG
LAD DELSEG
SVC 0 < ACQUITTEMENT EN ZDC.
<
< MISE A JOUR DU SEGORG,SEGEXT :
<
LA SEGOR2+X
LB SEGOR2+Y
STB SEGORG+Y
STA SEGORG+X
LA SEGEX2+X
LB SEGEX2+Y
STB SEGEXT+Y
STA SEGEXT+X
LXI 0 < INDEX D'ACCES AU 3-CURSEUR.
STB &C1
STA &C2
STB CV+Y
STA CV+X
RSR < ET C'EST TOUT...
X100: VAL 0
PAGE
IF VIDEO,,,X100
<
<
< C H O I X N O I R / B L A N C V I D E O :
<
<
< ARGUMENT :
< B='40 : MISE A BLANC,
< '00 : BLANC SI NOIR/NOIR SI BLANC.
<
<
X101: VAL $-RACB1
COLOR: EQU RACB+X101
LA &APOINT < ACCES INSTRUCTION COURANTE.
ORR B,A
IBT 9+16
EORR B,A
STA &APOINT < MISE A JOUR DE L'INSTRUCTION
< VARIABLE SBT/RBT.
TBT 9 < SBT : BIT9=1 : MISE A '0000,
< RBT : BIT9=0 : MISE A 'FFFF.
STZ WORKS < WORKS='0000 A PRIORI,
JC COLOR1 < OUI, SBT ==> WORKS='0000,
DC WORKS < NON, RBT ==> WORKS='FFFF.
COLOR1: EQU $
RSR
IF ORDI-"T",XWOR%,,XWOR%
<
<
< A F F I C H A G E D ' U N P O I N T :
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT L'X ET L'Y DU
< POINT A METTRE A 0/1.
< C=@IMAGE VIDEO.
<
<
X101: VAL $-RACB1
SET: EQU RACB+X101
PSR B,X,C
LR Y,A < A=Y(POINT COURANT).
MP NMPL
ADR B,C
LR X,A < A=X(POINT COURANT).
SLRS 4 < RECUPERATION D'UN NUMERO DE MOT.
ADR A,C < C=@MOT CONTENANT LE POINT M.
LAI 'F < MASQUE DE CALCUL MODULO 16.
ANDR A,X < X=NUMERO DU BIT DANS LE MOT.
LA 0,C < A=MOT CONTENANT LE POINT M.
POINTS: SBT 0,X < POSITIONNEMENT DU POINT A 0/1.
X101: VAL POINTS-RACB1
POINT: EQU RACB+X101 < ADRESSE DE L'INSTRUCTION
< VARIABLE SBT/RBT LORSQUE LA
< BRANCHE 'V' EST RESIDENTE.
STA 0,C < MISE A JOUR DE L'IMAGE.
PLR B,X,C
RSR
XWOR%: VAL 0
X100: VAL 0
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'.
<
<
X101: VAL $-RACB1
EXECS: EQU RACB+X101
PSR A,B,X,Y < QUELLE PRUDENCE !!!!
BSR APROJ < PROJECTION (X3,Y3,Z3) --> (X3,Y3).
STX SEGEXT+X
STY SEGEXT+Y
<
< PROJECTION DE L'EXTREMITE DU SEGEMENT COURANT :
<
BSR AFECH < ECCHELLE GENERALE.
STX X2 < COORDONNEE X2 DU POINT M2.
STY Z2 < COORDONNE Z2 DU POINT M2.
<
< PROJECTION DE L'ORIGINE DU SEGMENT COURANT :
<
LX SEGORG+X
LY SEGORG+Y
BSR AFECH < ECHELLE GENERALE.
STX 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 EE41 < LORSQU'ON ARRIVE ICI, C('EST
< QU'AUCUNE DES COORDONNEES X1,
< Z1,X2,Z2 N'EST OVERSCREEN.
<
< ROUTINE DE TEST D'OVERSCREEN :
<
X101: VAL $-RACB1
OVS: EQU RACB+X101
JAL EE42 < UNE COORDONNEE NEGATIVE EST
< OVERSCREEN.
CP BORNE
JG EE42 < 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 :
<
EE42: EQU $ < CAS OU UN OVERSCREEN 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*P2=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 EE40 < SI LE NOMBRE 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 EE69 < P1>=0.
NGR A,A < A=-P1 ; ON MET DONC DANS A
< LA VALEUR ABSOLUE DE P1.
EE69: EQU $
CP SCALE < LA DROITE M1M2 EST-ELLE
< HORIZONTALE ????
< (AUX ERREURS DE CALCUL PRES...)
JGE EE60 < 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.
EE60: 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 EE61 < 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.
EE61: EQU $
<
< TRI DE N1 ET N2 AFIN D'OBTENIR : N1<N2 :
<
LA PN1,W
LB PN2,W
CPR A,B
JGE EE62 < RIEN A FAIRE, ON A DEJA N1<N2.
STA PN2,W < SINON, ON ECHANGE N1 ET N2.
STB PN1,W
ADRI 2,Y < BIT14(Y) : PERMUTATION N1,N2.
EE62: EQU $
<
< ELIMINATION DES CAS IMPOSSIBLES OU INVISIBLES :
<
LA M1,W
CP PN2,W
JGE EE40 < M1>N2 : M1M2 EST INVISIBLE.
LA M2,W
CP PN1,W
JLE EE40 < M2<N1 : M1M2 EST INVISIBLE.
<
< CHOIX DU 'PLUS GRAND' PARMI M1 ET N1 :
<
LA PN1,W
CP M1,W
JLE EE63 < N1<M1 : ON GARDE M1.
STA M1,W < SINON N1 DEVIENT M1.
ADRI 4,Y < BIT15(Y) : PERMUTATION M1,N1.
EE63: EQU $
<
< CHOIX DU 'PLUS PETIT' PARMI M2 ET N2 :
<
LA PN2,W
CP M2,W
JGE EE64 < M2<N2 : ON GARDE M2.
STA M2,W < SINON , N2 DEVIENT M2.
ADRI 8,Y < BIT12(Y) : PERMUTATION M2,N2.
EE64: EQU $
<
< PERMUTATION DES 2EMES 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 EE65 < M1 ET M2 SONT INCHANGES.
LB M1,W
LY M2,W
STY M1,W
STB M2,W
EE65: EQU $
<
< PERMUTATION DE N1,N2 :
<
TBT 14
JNC EE66 < N1 ET N2 SONT INCHANGES.
LB PN1,W
LY PN2,W
STY PN1,W
STB PN2,W
EE66: EQU $
<
< PERMUTATION DE M1,N1 :
<
TBT 13
JNC EE67 < M1 ET N1 SONT INCHANGES.
LB M1,W
LY PN1,W
STY M1,W
STB PN1,W
EE67: EQU $
<
< PERMUTATION DE M2,N2 :
<
TBT 12
JNC EE68 < M2 ET N2 SONT INCHANGES.
LB M2,W
LY PN2,W
STY M2,W
STB PN2,W
EE68: 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 :
<
EE602: EQU $
LA 0,W < A=UNE COORDONNEE Z/X DE M1/M2.
JAGE EE600
LAI 0 < SI L'ARGUMENT EST NEGATIF , ON
< LE REND NUL.
EE600: EQU $
CP BORNE < TEST OVERSCREEN POSITIF.
JLE EE601 < OK, ARGUMENT DANS L'ECRAN.
LA BORNE < SI L'ARGUMENT EST HORS L'ECRAN
< POSITIF , ON LUI DONNE LA
< VALEUR 'BORNE'.
EE601: EQU $
STA 0,W < MISE A JOUR EVENTUELLE D'UNE
< COORDONNEE Z/X DE M1/M2.
ADRI 1,W < PASSAGE A LA COORDONNEE
JDX EE602 < 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 :
<
<
EE41: EQU $
< TOUT ENTIER DANS L'ECRAN.
LAD OG < PASSAGE AU MODE GRAPHIQUE.
BSR ASVC
JNE EE450 < CAS DES CTRL-X-OFF.
LAD WG < AFFICHAGE DU SEGMENT COURANT.
BSR ASVC
JNE EE450 < CAS DES CTRL-X-OFF.
IF VIDEO,,X100,
<
< E N V O I E V E N T U E L E N Z D C :
<
LA INDZDC < ACCES A LA VALIDATION COURANTE.
TBT 15 < ACCES VALIDE ???
JNC EE40 < NON...
LAD GETGS < OUI...
INTER1: EQU $
SVC 0 < ACCES A L'ACQUITEMENT DU
< SEGMENT PRECEDENT.
CPZ NOMSEG < A-T'IL ETE ACQUITTE ???
JNE INTER1 < NON, ON ATTEND...
DC NOMSEG < OUI, NOMSEG=-1,
LAD STOGS
SVC 0 < ENVOI DU SEGMENT COURANT EN ZDC.
X100: VAL 0
IF VIDEO,,,X100
<
< C O N V E R S I O N V I D E O :
<
PSR C
LA AIMAG
LR A,C < C=@IMAGE VIDEO.
<
< CALCUL DES EXTREMITES M1 ET M2 DU SEGMENT VIDEO :
<
LA SEGOR2+X < A=X(ORIGINE GRAPHIQUE).
SLRS DEDX < REDUCTION VIDEO.
STA DICOX1 < RANGEMENT DE X1.
LA SEGOR2+Y < A=Y(ORIGINE GRAPHIQUE).
SLRS DEDY < REDUCTION VIDEO.
NGR A,A
AD NLIG < INVERSION DUE AU FAIT QUE LES
< AXES Y VIDEOS ET GRAPHIQUES
< SONT INVERSES.
STA DICOY1 < RANGEMENT DE Y1.
LA SEGEX2+X < A=X(EXTREMITE GRAPHIQUE).
SLRS DEDX < REDUCTION VIDEO.
STA DICOX2 < RANGEMENT DE X2.
LA SEGEX2+Y < A=Y(EXTREMITE GRAPHIQUE).
SLRS DEDY < REDUCTION VIDEO.
NGR A,A
AD NLIG < INVERSION DES AXES Y.
STA DICOY2 < RANGEMENT DE Y2.
<
< TRACE DICHOTOMIQUE DU SEGMENT :
<
IF ORDI-"T",XWOR%,,XWOR%
LX DICOX1 < X=X1.
LY DICOY1 < Y=Y1.
BSR ASET < AFFICHAGE DU POINT M1.
BSR ADICO < TRACE DES POINTS DE M1 A M2.
LX DICOX2 < X=X2.
LY DICOY2 < Y=Y2.
BSR ASET < AFFICHAGE DU POINT M2.
BSR AVIS < STABILISATION IMAGE SI :SYS...
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
BSR AVSEG < TRACE DU SEGMENT VIDEO ET VISUALISATIO
< EVENTUELLE.
XWOR%: VAL 0
<
< RETOUR DE LA CONVERSION :
<
PLR C
X100: VAL 0
EE40: EQU $ < COMPLETEMENT EN DEHORS 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' :
<
EE450: EQU $
ADRI -5,K < RATRAPAGE BSR ET PSR.
BR AGOGE < RETOUR EN ERREUR A GE.
PAGE
IF VIDEO,,,X100
IF ORDI-"T",XWOR%,,XWOR%
<
<
< P A R C O U R S D I C H O T O M I Q U E D ' U N
< S E G M E N T M 1 M 2 :
<
<
X101: VAL $-RACB1
DICO: EQU RACB+X101
DICOB: EQU $
LA DICOX1 < A=X1.
AD DICOX2 < A=X1+X2.
SLRS 1 < A=(X1+X2)/2.
STA DICOX < X D U MILIEUR DE M1M2.
LA DICOY1 < A=Y1.
AD DICOY2 < A=Y1+Y2.
SLRS 1 < A=(Y1+Y2)/2.
STA DICOY < Y DU MILIEU M DE M1M2.
<
< POSITION DE M PAR RAPPORT A M1 ???
<
SB DICOY1 < A=Y-Y1.
JANE DICO31 < M#M1.
LA DICOX < A=X.
SB DICOX1 < A=X-X1.
JAE DICO32 < M=M1.
<
< POSITION DE M PAR RAPPORT A M2 :
<
DICO31: EQU $
LA DICOY < A=Y.
SB DICOY2 < A=Y-Y2.
JANE DICO30 < M#M2 ET M#M1.
LA DICOX < A=X.
SB DICOX2 < A=X-X2.
JANE DICO30 < M#M2 ET M#M1.
<
< CAS OU M=M1 OU M=M2 :
<
DICO32: EQU $
LX DICOX
LY DICOY
BSR ASET < AFFICHAGE DU POINT M=(M1+M2)/2.
RSR < ARRET PROVISOIRE DE LA DICHOTOMIE
< DESCENDANTE.
<
< CAS OU M#M1 ET M#M2 :
<
DICO30: EQU $
LA DICOX2 < A=X2.
LB DICOY2 < B=Y2.
PSR A,B < SAVE LE POINT M2 COURANT.
LA DICOX < A=X.
STA DICOX2 < X2<--X.
LA DICOY < A=Y.
STA DICOY2 < Y2<--Y.
BSR ADICO < DICHOTOMIE SUR LE SEGMENT M1M.
LX DICOX2 < X=X2.
LY DICOY2 < Y=Y2.
BSR ASET < AFFICHAGE DU POINT M2.
STX DICOX1 < X1<--X2.
STY DICOY1 < Y1<--Y2.
PLR A,B < RESTAURATION DU POINT M2 , APRES
< CHANGEMENT DE POINT M1.
STA DICOX2 < RESTAURE X2.
STB DICOY2 < RESTAURE Y2.
JMP DICOB < VERS LA POURSUITE DE LA DICHO.
XWOR%: VAL 0
IF ORDI-"S",XWOR%,,XWOR%
PAGE
<
<
< T R A C E D U S E G M E N T ( M 1 , M 2 ) :
<
<
< FONCTION :
< CETTE ROUTINE TRACE LE SEGMENT
< M1M2 , TEL QUE :
< M1(DICOX1,DICOY1),
< M2(DICOX2,DICOY2).
<
< (C'EST LE SYSTEME CMS5 QUI SE CHARGERA DE L'INTERPOLATION !).
<
X101: VAL $-RACB1
VSEG: EQU RACB+X101
<
< PROLOGUE: SAUVEGARDE DES REGISTRES UTILISES ET SAUVEGARDE DANS LA PILE
< (QUI EST GRANDE !) DE LA ZONE QU'ON VA UTILISER POUR CONSTRUIRE L'EN-TETE
< DE L'IMAGE.
<
PSR A,B,X,W
<
LR K,B
ADRI 1,B < ZONE RECEPTRICE.
LRM A,X,W
WORD ENTIM < ZONE EMETTRICE (A SAUVER DANS LA PILE).
WORD LENTIM < LONGUEUR EN-TETE IMAGE.
WORD ENTIM < POUR BASER L'EN-TETE.
MOVE
ADRI LENTIM,K < MISE A JOUR DE 'K'.
<
< ICI, ON A SAUVEGARDE LA ZONE DE CONSTRUCTION DE L'EN-TETE DANS LA PILE,
< ON VA CONSTRUIRE L'EN-TETE ET FAIRE LA DEMANDE D'INTERPOLATION VIDEO.
<
LRM A,B,X
WORD SEGOR2+Y < ZONE EMETTRICE: COORDONNEES (Y1,X1),
< (Y2,X2) SEGMENT COURANT. CE SONT DES
< COORDONNEES GRAPHIQUES.
WORD ENTIM+DEPY1 < ZONE RECEPTRICE.
WORD 4 < LONGUEUR.
MOVE
STZ DEPMOD,W < MDE TRACE = 'RBT' A PRIORI.
CPZ WORKS
JNE VSEG1 < MODE TRACE 'RBT'.
IC DEPMOD,W < MODE TRACE 'SBT'.
VSEG1: EQU $
LA ASTAB
MEMOBA: VAL 8 < BIT DISCRIMINANT 'MEMTV' DE LA
< MEMOIRE UTILISATEUR...
LB MODEV
TBT 16+MEMOBA < ALORS, OU TRACER ???
JNC VSEG2 < DANS LA MEMOIRE UTILISATEUR...
STB DEPMOD,W < NON, DIRECTEMENT DANS 'MEMTV'...
LRM B
WORD '7F00
STB DEPSPA,W < ON INHIBE TOUTES LES COULEURS, SAUF
< LE NOIR BIEN ENTENDU...
LR A,W < W=BASE LA DEMANDE D'INTERPOLATION,
LRM A,X
WORD ENTIM-ZERO*2
WORD LENTIM*2 < LONGUEUR DE L'EN-TETE...
JMP VSEG3 < VERS LA MISE A JOUR DE LA DEMANDE...
VSEG2: EQU $
LR A,W < 'W' BASE LA DEMANDE DE STABILISATION.
LRM A,X
WORD ENTIM-ZERO*2 < ADRESSE OCTET EN-TETE IMAGE.
WORD LENTIM+LIMAG*2 < LONGUEUR OCTETS EN-TETE + IMAGE.
VSEG3: EQU $
STA 1,W
STX 2,W
BSR AVIS < INTERPOLATION VIDEO ET STABILISATION
< EVENTUELLE.
LRM A,X
WORD IMAG-ZERO*2 < RESTAURATION ADRESSE ET
WORD LIMAG*2 < LONGUEUR IMAGE DANS LA DEMANDE.
STA 1,W
STX 2,W
<
< EPILOGUE (FAIRE COMME SI ON N'AVAIT RIEN TOUCHE...).
<
ADRI -LENTIM,K < RESTAURATION DE 'K'.
LR K,A
ADRI 1,A < ZONE EMETTRICE.
LRM B,X
WORD ENTIM < ZONE RECEPTRICE (A RESTAURER).
WORD LENTIM < LONGUEUR.
MOVE
<
PLR A,B,X,W
RSR
<
< MODE DE TRACE.
<
POINTS: SBT 0,X < SET BIT.
X101: VAL POINTS-RACB1
POINT: EQU RACB+X101 < INSTRUCTION VARIABLE 'SBT'...
PAGE
<
<
< L I S T E D E S M O D E S :
<
<
X101: VAL $-RACB1
VIDEOL: EQU RACB+X101
EVIDEO: EQU $
WORD '0000 < "OFF",
WORD '0180 < "OR" FLOU,
WORD '0080 < "AND" FLOU,
WORD 'FF80 < "EOR" FLOU,
WORD '01B0 < "FORCAGE NIVEAU",
WORD '01F0 < "NE TRACER QUE SUR LE NOIR",
WORD '0380 < "OR" BINAIRE,
WORD '0280 < "AND" BINAIRE,
WORD 'FD80 < "EOR" BINAIRE.
LVIDEO:: VAL $-EVIDEO-1
<
<
< G E S T I O N D E L ' A C C E S D I R E C T
< A ' M E M T V ' :
<
<
< M O D E D E T R A C E :
<
<
< ARGUMENT :
< Y="0" : MISE OFF,
< "1" : TRACE PAR 'OR' FLOU ,
< "2" : TRACE PAR 'AND' FLOU ,
< "3" : TRACE PAR 'EOR' FLOU ,
< "4" : FORCAGE,
< "5" : ON NE TRACERA QUE SUR LE NOIR,
< "6" : TRACE PAR 'OR' BINAIRE,
< "7" : TRACE PAR 'AND' BINAIRE,
< "8" : TRACE PAR 'EOR' BINAIRE.
<
<
X101: VAL $-RACB1
VIDEOM: EQU RACB+X101
LXI 1 < ERREUR A PRIORI...
LR Y,A
ADRI -"0",A < A=MODE DEMANDE,
JAL VIDEO1 < ERREUR...
CPI LVIDEO
JG VIDEO1 < ERREUR...
PSR W
LRM W
WORD VIDEOL
ADR A,W
LA 0,W < A=FORMAT DU MOT DE COMMANDE...
PLR W
STA MODEV < INITIALISATION DE 'MODEV'.
STZ &ASTAB3 < ET SUPPRESSION DE L'AUTRE MODE...
VIDEO2: EQU $
LXI 0 < RETOUR OK...
VIDEO1: EQU $
RSR
<
<
< C O U L E U R D U T R A C E :
<
<
< ARGUMENT :
< Y="8" : MODE ANTI-ALIASING,
< "0" A "7" : DANS LA COULEUR INDIQUEE.
<
<
X101: VAL $-RACB1
VIDEOC: EQU RACB+X101
LXI 1 < RETOUR EN ERREUR A PRIORI...
LR Y,A
ADRI -"0",A < A=COULEUR DEMANDEE,
JAL VIDEO1 < ERREUR...
NCOOL: VAL 3 < NOMBRE DE PROCESSEURS DE COULEUR.
CPI 1>NCOOL-1+1
JG VIDEO1 < ERREUR...
OR MODEV
STA MODEV < ET MISE A JOUR DE 'MODEV'...
JMP VIDEO2
XWOR%: VAL 0
X100: VAL 0
IF VIDEO,,X100,
IF ORDI-"S",XWOR%,,XWOR%
X101: VAL $-RACB1
VIDEOM: EQU RACB+X101
VIDEOC: EQU RACB+X101
LXI 0 < RETOUR OK...
RSR
XWOR%: VAL 0
X100: VAL 0
PAGE
IF VIDEO,,,X100
<
<
< E N V O I D ' U N E S Y N C H R O E N ' Z D C ' :
<
<
<
< ENVOI EN ZDC :
<
X101: VAL $-RACB1
VALZDC: EQU RACB+X101
VALZDD: WORD 0 < MOT DE SYNCHRONISATION...
LONZDC:: VAL $-VALZDD*2
X101: VAL $-RACB1
STOGS: EQU RACB+X101
WORD '000A < ENVOI DE LA SYNCHRONISATION...
WORD VALZDC-ZERO*2
WORD LONZDC
WORD 'C000
X101: VAL $-RACB1
GETGS: EQU RACB+X101
WORD '0008 < ACCES A L'ACQUIITEMENT ZDC.
WORD VALZDC-ZERO*2
WORD LONZDC
WORD 'C001
<
< ACCES A LA ZDC :
<
X101: VAL $-RACB1
SENZDC: EQU RACB+X101
PSR W
LRM W
WORD VALZDC < (W)=BASE DES DEMANDES 'ZDC'...
<
< ATTENTE DE LIBERTE DE LA ZDC :
<
LAD GETGS-VALZDC,W
STOZ2: EQU $
SVC 0 < LECTURE DE 'VALZDC' :
CPZ VALZDC-VALZDC,W < ALORS ???
JNE STOZ2 < PAS LIBRE...
<
< ENVOI EN ZDC :
<
DC VALZDC-VALZDC,W < VALEUR DE SYNCHRONISATION,
LAD STOGS-VALZDC,W
SVC 0 < ET ENVOI...
PLR W
RSR
X100: VAL 0
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.
<
<
X101: VAL $-RACB1
EXECB: EQU RACB+X101
BSR AEXECS < EXECUTION DE LA PRIMITIVE 'S'.
<
< 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
<
<
< P I L E D E T R A V A I L :
<
<
X101: VAL $-RACB1
PILD: EQU RACB+X101
DZS 64 < ENORME, POUR LA DICHOTOMIE...
<
<
< P I L E D E R E C U R S I V I T E :
<
<
X101: VAL $-RACB1
PIR: EQU RACB+X101
WORD 0;0 < PREMIERE ENTREE : INITIALISEE
< AVEC CD=CP=0.
DZS XX1 < ENTREES SUIVANTES.
<
<
< T A I L L E D E L A B R A N C H E :
<
<
SBB: VAL $-RACB1*2
<
<
< V A L I D A T I O N I M P L A N T A T I O N :
<
<
X101: VAL $-RACB1
X13: EQU RACB+X101
X10: VAL X13-ZERO
X10: VAL -'000*VIDEO+'1FC0+LIMAG-X10
IF X10,,,XWOR%
IF PAS ASSEZ DE MEMOIRE !!!
XWOR%: VAL 0
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.