NMPROC: VAL "GF" < NOM DU PROCESSEUR.
IDP "GF - RELEASE 01/06/1979"
IDP "JOHN F. COLONNA"
EOT #SIP DEFINITION CMS5#
QUANTA: VAL 1 < DEFINITION DU QUANTA DISQUE
IF ORDI-"S",XWOR%,,XWOR% < SUIVANT L'ORDINATEUR.
QUANTA: VAL 1
XWOR%: VAL 0
EOT #SIP DEF PROCESSEUR#
PROG
WORD IMAGE < ENTRY POINT DU GENERATEUR.
WORD 0
PIMAGE: EQU $ < P='12 !!!
LRP L
BR -2,L < ENTRY DANS LE PROCESSEUR.
EOT #SIP DEFINITION ITEM#
ITEM1: EQU ZERO+PILE-LTNI < @ITEM1.
ITEM2: EQU ZERO+PILE-LTNI-LTNI
DEDX: VAL 0
DEDY: VAL 0
MAXRED: VAL 10 < FACTEUR DE REDUCTION MAX.
PAGE
<
<
< L O C A L :
<
<
<
< CARTES DE CONTROLE SGF :
<
MAC: ASCI "!ASSIGN A="
BYTE "S";'04
MAO: ASCI "!ASSIGN A=N,"
LNFIC: VAL 10 < NBRE DE MOTS MAX D'UN NOM SGF.
NMAO: DZS LNFIC
BYTE '04;0 < PAR PRUDENCE...
<
< BUFFER SGF :
<
BUFSGF: DZS 128*QUANTA
LOCAL
LOC: EQU $
<
< BUFFER ET MESSAGES :
<
CURSOR: BYTE "N";0 < CURSEUR GRAPHIQUE DE LA VISU :
< OCTET0=CARACTERE DE DEBLOCAGE ,
< (NON A PRIORI...)
WORD 0 < MOT1=Y(CURSEUR GRAPHIQUE) ,
WORD 0 < MOT2=X(CURSEUR GRAPHIQUE).
NOMSEG: WORD 0 < SEGMENT INVALIDE INITIALEMENT.
SEGSGN: DZS 4 < SEGMENT GRAPHIQUE COURANT.
LONSEG: VAL $-NOMSEG*2
SEG: EQU $
DO 4
WORD -1 < N'EXISTE PAS INITIALEMENT.
SEGORG: EQU SEGSGN+0
SEGEXT: EQU SEGSGN+2
SEGMS0: WORD SEG-ZERO < ADRESSE ABSOLUE DE SEG.
SAVEXT: DZS 2 < SAUVEGARDE DE L'EXTREMITE DU
< SEGMENT PRECEDENT.
X: VAL 1
Y: VAL 0
MINT: BYTE 2;'6D;">";0
REP: WORD 0 < REPONSE DE REDUCTION.
WORD 0 < POUR LES ENTREES DE SEUILS.
AMRED: WORD MRED
AMEFFA: WORD MEFFAC
AMCOPY: WORD MCOPY
AMTR: WORD MTR
AMMAT: WORD MMAT-1,X
MDEL: BYTE 7;'6D
ASCI "DX/DY="
AMSE: WORD MSE
AMSEX: WORD MSEX
AMSEY: WORD MSEY
AMPERX: WORD MPERX
AMPERY: WORD MPERY
AP: WORD MF < MESSAGES DE PERMUTATION BITS X/Y.
AMFIC: WORD MFIC
AMPROG: WORD MPROG
MERR: BYTE 3;'6D;"?";"?"
MK: BYTE 3;'6D
ASCI "K="
MX: BYTE 3;'6D
ASCI "X="
MY: BYTE 3;'6D
ASCI "Y="
MSGF: BYTE 5;'6D
ASCI "SGF?"
<
< DEMANDES A CMS4 :
<
DEMREP: WORD '0101 < LECTURE DU FACTEUR DE REDUCTION.
WORD REP-ZERO*2
WORD 1 < 1 CARACTERE.
DEMSE: WORD '0101 < ENTREE DES SEUILS.
WORD REP-ZERO*2
WORD 3 < SOUS FORME DE 3 CARACTERES
< HEXADECIMAUX.
DEMOUT: WORD '0202 < EDITION MESSAGE.
WORD 0 < @OCTET DU MESSAGE.
WORD 0 < LONGUEUR DU MESSAGE.
DEMOB: WORD '0B02 < EMISSION MESSAGE SUR '0B.
WORD 0
WORD 0
ERASE: WORD '0B05 < EFFACEMENT ECRAN VISU.
OG: WORD '0B03 < OPEN GRAPHIQUE VISU EMISSION.
CG: WORD '0B04 < CLOSE GRAPHIQUE VISU EMISSION.
WG: WORD '0B0A < AFFICHAGE SEGMENT COURANT.
WORD SEG-ZERO*2
WORD 8
WGT: WORD '0B0A < AFFICHAGE SEGMENT EN ZDC.
WORD SEGSGN-ZERO*2
WORD 8
DEMGS: WORD '0008 < ACCES A LA ZDC.
WORD NOMSEG-ZERO*2
WORD LONSEG
WORD 'FFC0
DELGS: WORD '000A < ECRITURE DANS LA ZDC.
WORD NOMSEG-ZERO*2
WORD SEGSGN-NOMSEG*2
WORD 'C000
COPY: WORD '0B07 < ECRITURE DIRECTE HARD-COPY.
BYTE '1B;'17;'8D;'04 < ESC,CTRL-W,R/C.
DEMCCI: WORD '0001 < DEMANDE DE RETOUR AU CCI.
SLEEP: WORD '0005 < DEMANDE MISE EN SOMMEIL.
WORD 0
WORD 15 < POUR 15 SECONDES.
DEMSGN: WORD '0402 < DEMANDE SGN OVERLAY.
WORD BRANCH-ZERO*2
WORD ZERO-BRANCH+PILE-LTNI-LTNI*2
WORD -1
DEMNOM: WORD '0101 < ENTREE NOM DE FICHIER.
WORD NMAO-ZERO*2
WORD LNFIC*2
CCII: WORD '0002 < ACCES CCI INTERPRETATIF.
WORD 0
WORD 80
SGFO: WORD '0A04 < OPEN NEW DE LA CLEF 1.0.
WORD 1;0
SGFC: WORD '0A07 < CLOSE SAVE LA CLEF 1.0.
SGFW: WORD '0A02 < ECRITURE 1 ENREGISTREMENT.
WORD BUFSGF-ZERO*2
WORD 128*2*QUANTA
WORD 0
<
< RELAIS DIVERS :
<
AGOGE: WORD GOGE < RETOUR A 'GE'.
AOVL: WORD OVL < CHARGEMENT DES OVERLAYS.
APRINT: WORD PRINT < EDITION D'UN MESSAGE.
APRINB: WORD PRINTB < EDITION MESSAGE SUR '0B.
ADRAW: WORD DRAW < AFFICHAGE SEGMENT COURANT ZDC.
AOPEN1: WORD OPEN1 < OPEN GRAPHIQUE+CHOIX VISU.
ARCOPY: WORD RCOPY < ROUTINE DE HARD-COPY EVENTUEL
< ET TEMPORISATION ASSOCIEE.
AGETS: WORD GETS < RECUPERATION DES SEUILS.
ACARD: WORD CARD < ROUTINE DIRECTIONS CARDINALES.
AMS: WORD MS < MODIFICATION DE L'ORIGINE DE
< LA LISTE DES SEGMENTS.
ATRF: WORD TRF < ROUTINE D'OPERATION MATRICIELLE
< SUR LES COORDONNEES X,Y.
AXY: WORD XY < ENTREE DU POINT ((X),(Y)) DANS
< LA LISTE DES SEGMENTS.
AXY1: WORD XY1 < RE-INSERTION DU POINT (X,Y)
< DANS LA LISTE DES SEGMENTS.
ASEG: WORD SEG < POINTEUR COURANT DE LA LISTE
< DES SEGMENTS.
AREP: WORD REP,X < POUR CONVERSION DES SEUILS.
ACCIN: WORD CCIN < ACCES CCI INTERPRETATIF.
ABUFS: WORD BUFSGF+1,X < ACCES BUFFER SGF.
ASGF: EQU ABUFS
ASTBUF: WORD STBUF < MISE DE (X,Y) DANS LE FICHIER.
ACLOSF: WORD CLOSEF < FERMETURE DU FICHIER...
AMAC: WORD MAC < CARTE !ASSIGN A=C.
AMAO: WORD MAO < CARTE !ASSIGN A=O,...
AMESS: WORD 0 < SAVE L'ADRESSE DU MESSAGE A
< L'ENTREE DE GETS EN VUE DES
< ERREURS DE SYNTAXE ...
ATYP: WORD ITEM2+IINDIC < TYPE EVENTUEL DE L'ITEM2.
AITEM2: WORD ITEM2+LTN < RELAI VERS L'ADRESSE DU
< POINT D'ENTREE DE L'ITEM2.
AGETGS: WORD GETGS < ACCES AU SEGMENT COURANT ZDC.
AINTER: WORD INTER < INTERROGATION PRIMAIRE.
AGRAVE: WORD GRAVE < CALCULS DIVERS SUR LE DESSIN.
ASQRT: WORD SQRT < EXTRACTION RACINE CARREE.
AENTC: WORD ENTC < ENTREE D'UNE CONSTANTE 1-9,A-Z.
ADIVIS: WORD DIVIS < DIVISION EXCES/DEFAUT.
<
< CONSTANTES :
<
KIN: WORD -1 < COMPTEUR DES ENTREES DANS 'VG'.
ACNSYS: ASCI ":SYS"
REDUC: WORD 0 < FACTEUR DE REDUCTION=0/-1/-2.
NGE: WORD "GE" < NOM DE L'OVERLAY 'GE'.
DELTAX: WORD 0 < DELTAX=ABS(X-X(1ER POINT)).
DELTAY: WORD 0 < DELTAY=ABS(Y-Y(1ER POINT)).
SEUIL: WORD 0 < SEUIL DE TEST DE DELTAX+DELTAY.
SEUILX: WORD 0 < SEUIL DE TEST DE DELATX.
SEUILY: WORD 0 < SEUIL DE TEST DE DELTAY.
ISGF: WORD 0 < 0 : PAS D'OPERATIONS SGF EN COURS.
INSGF: WORD 0 < 0 : OPERATIONS SGF VALIDEES.
MAXBUF: WORD 128*QUANTA-4/4*4 < LONGUEUR MAXIMUM UTILE D'UN
< BUFFER SGF.
<
< CONSTANTES DE CALCULS SUR LE DESSIN :
<
TEMPO: EQU $ < ZONE EN RECOUVREMENT AVEC PERX/PERY.
GX: WORD 0 < X(G) ENTIERE,
FGX: DZS 2 < X(G) FLOTTANTE.
GY: WORD 0 < Y(G) ENTIERE,
FGY: DZS 2 < Y(G) FLOTTANTE.
FX: DZS 2 < X(POINT COURANT).
FY: DZS 2 < Y(POINT COURANT).
IXX: DZS 2 < MOMENT D'INERTIE XX,
IYY: DZS 2 < MOMENT D'INERTIE YY,
IXY: DZS 2 < MOMENT D'INERTIE XY (=YX).
IYX: EQU IXY
NPT: WORD 0 < NBRE DE SEGMENTS EN ENTIER,
FNPT: DZS 2 < IDEM EN FLOTTANT.
DELTA: DZS 4 < DELTA,DELTA+1=DISCRIMINANT DE
< L'EQUATION AUX VALEURS PROPRES
< DE LA MATRICE D'INERTIE.
< DELTA+2,DELTA+3=RACINE
< CARRE DU DELTA.
UN: DZS 2 < RESULTAT DE SQRT.
V1: DZS 2 < 1ER VECTEUR PROPRE,
V2: DZS 2 < 2EME VECTEUR PROPRE.
LTEMPO: VAL $-TEMPO-1 < LONGUEUR DE LA ZONE TEMPO.
XTEMPO: VAL 32-LTEMPO < DOIT ETRE POSITIF....
TTEMPO: EQU ZERO+XTEMPO < ERREUR, SI MAUVAIS RECOUVREMENT.
ARG: DZS 2 < ARGUMENT DE SQRT, ET DIVIS.
KK: WORD 0 < CONSTANTE K,
KX: WORD 0 < CONSTANTE X,
KY: WORD 0 < CONSTANTE Y.
DEUX: FLOAT 2
DIX: FLOAT 0.1
FFACT: FLOAT 2048
FTX: FLOAT 512
FTY: FLOAT 512
MG: BYTE 1;"G"
<
< MATRICES DE PERMUTATION :
<
PERX: EQU TEMPO
PERY: EQU TEMPO+16
<
< ACCES EVENTUEL AU CURSEUR GRAPHIQUE :
<
OGT: WORD '0B03 < NE PAS UTILISER OG , CAR SINON
< RISQUE D'ERREUR SUR LE NVP
< SI ON NE RENTRE PAS DE
< TRANSFORMATION !!!
CU: WORD '0B06 < MISE EN FONCTION DU CURSEUR
WORD 0 < GRAPHIQUE : IL FAUT AMDEM=0 !!!
LG: WORD '0B09 < LECTURE DU CURSEUR GRAPHIQUE.
WORD CURSOR-ZERO*2
WORD 6
<
< PERMUTATION DES BITS D'UN MOT X/Y :
<
INDPEX: WORD 1 < 1 : NE PAS PERMUTER LES BITS(X) ,
< 0 : LES PERMUTER SUIVANT 'PERX'.
INDPEY: WORD 1 < DE MEME POUR LES BITS(Y).
APERX: WORD PERX-1,X < MATRICE DE PERMUTATION DES
< BITS D'UNE COORDONNEE X.
APERY: WORD PERY-1,X < DE MEME POUR LES COORDONNEES Y.
<
< MATRICE DE TRANSFORMATION :
<
MAT: EQU $
DM22: WORD 0
M22: WORD 0
DM21: WORD 0
M21: WORD 0
DM12: WORD 0
M12: WORD 0
DM11: WORD 0
M11: WORD 0
TY: WORD 0 < VECTEUR TRANSLATION SUR LES Y.
TX: WORD 0 < VECTEUR TRANSLATION SUR LES X.
AMAT: WORD MAT-1,X < POUR INITIALISER LA MATRICE.
INDTR: WORD 0 < 0 : APPLIQUER LA MATRICE DE
< TRANSFORMATION SUR L'IMAGE
< GRAPHIQUE ; 1 : NON.
SAVEX: WORD 0 < SAVE X A L'INITIALISATION DE
< LA MATRICE DE TRANSFORMATION.
C1023: WORD 1024-1 < X/Y MAX DE L'ECRAN.
IBUF: WORD 0 < INDEX COURANT BUFFER SGF.
<
< PILES DE TRAVAIL :
<
APILE: WORD PILE-1 < PILE DE SODOME.
STACK: DZS 10 < PILE DE TRAVAIL.
<
< SUITE DES MESSAGES (ICI A CAUSE DE SEG-ZERO UTILISEE DANS UN CPI) :
<
MSE: BYTE 7;'6D
ASCI "SEUIL="
MSEX: BYTE 4;'6D
ASCI "SX= "
MSEY: BYTE 4;'6D
ASCI "SY= "
MEFFAC: BYTE 7;'6D
ASCI "ERASE?"
MCOPY: BYTE 6;'6D
ASCI "COPY? "
MTRAX: BYTE 4;'6D
ASCI "TX= "
MTRAY: BYTE 4;'6D
ASCI "TY= "
MTR: BYTE 7;'6D
ASCI "TRANS?"
MSLA: BYTE 1;"/"
MM11: BYTE 5;'6D
ASCI "M11="
MM12: BYTE 5;'6D
ASCI "M12="
MM21: BYTE 5;'6D
ASCI "M21="
MM22: BYTE 5;'6D
ASCI "M22="
MMAT: EQU $
WORD MSLA;MM22
WORD MSLA;MM21
WORD MSLA;MM12
WORD MSLA;MM11
WORD MTRAY;MTRAX
MRED: BYTE 7;'6D
ASCI "REDUC="
M0: BYTE 3;'6D
ASCI "0="
M1: BYTE 3;'6D
ASCI "1="
M2: BYTE 3;'6D
ASCI "2="
M3: BYTE 3;'6D
ASCI "3="
M4: BYTE 3;'6D
ASCI "4="
M5: BYTE 3;'6D
ASCI "5="
M6: BYTE 3;'6D
ASCI "6="
M7: BYTE 3;'6D
ASCI "7="
M8: BYTE 3;'6D
ASCI "8="
M9: BYTE 3;'6D
ASCI "9="
MA: BYTE 3;'6D
ASCI "A="
MB: BYTE 3;'6D
ASCI "B="
MC: BYTE 3;'6D
ASCI "C="
MD: BYTE 3;'6D
ASCI "D="
ME: BYTE 3;'6D
ASCI "E="
MF: BYTE 3;'6D
ASCI "F="
LMESS: VAL MF-ME < LONGUEUR DE TOUS LES MESSAGES
< RELATIFS AU PERMUTATIONS X/Y.
MPERX: BYTE 4;'6D
ASCI "PX? "
MPERY: BYTE 4;'6D
ASCI "PY? "
MPROG: BYTE 20;'6D
ASCI "PROGRAMME DE TRANS? "
MFIC: BYTE 9;'6D
ASCI "FICHIER="
PROG
PAGE
<
<
< I N S E R T I O N P O I N T C O U R A N T :
<
<
< ARGUMENTS :
< X ET Y CONTIENNENT LES COORDONEES
< X ET Y DU POINT COURANT.
<
<
XY: EQU $
PSR Y < SAVE Y.
LR X,A
LY KX
BSR ADIVIS
LR B,X < X <-- (X/KX)*KX
PLR A < RESTAURE Y.
LY KY
BSR ADIVIS
LR B,Y < Y <-- (Y/KY)*KY
LR X,A < A=X(POINT COURANT).
PSR X < SAVE LA COORDONNEE X.
LX REDUC < X=FACTEUR DE REDUCTION.
SLRD 16,X < B=X REDUIT.
LR Y,A < A=Y(POINT COURANT).
SLRS 0,X < A=Y REDUIT.
STA &ASEG < INSERTION DANS LA LISTE.
PLR X < RESTAURE LA COORDONNEE X.
LA ASEG < ACCES AU POINTEUR COURANT.
CP SEGMS0 < EST-ON EN BAS DE LA LISTE ???
JE E1300 < EN BAS DE LA LISTE PAS DE TEST!!!
<
< TEST DE PRISE EN COMPTE DU SEGMENT :
<
LA &ASEG < Y.
SB SEG < Y-Y(1ER POINT).
JAGE E1400
NGR A,A
E1400: EQU $
CP SEUILY < LE SEGMENT EST-IL ADMISSIBLE ???
JL E1403 < NON , DELTAY TROP PETIT ...
STA DELTAY < DELTAY=ABS(Y-Y(1ER POINT)).
LR B,A < X.
SB SEG+1 < X-X(1ER POINT).
JAGE E1401
NGR A,A
E1401: EQU $
CP SEUILX < LE SEGMENT EST-IL ADMISSIBLE ???
JL E1403 < NON , DELTAX TROP PETIT ...
STA DELTAX < DELTAX=ABS(X-X(1ER POINT)).
AD DELTAY < LA NORME CHOISIE POUR LES
< SEGMENTS EST DELTAX+DELTAY.
CP SEUIL < LE SEGMENT EST-IL ADMISSIBLE ???
JL E1403 < NON , IL EST TROP PETIT ...
E1300: EQU $ < ENTRY 'XY1'.
IC ASEG < PROGRESSION POINTEUR DE LISTE.
STB &ASEG < INSERTION DE LA COORDONNEE X.
IC ASEG < PROGRESSION POINTEUR DE LISTE.
<
< MISE A JOUR DU CODEM DE WG :
<
LA WG+2
ADRI 4,A < 1 POINT=4 OCTETS.
E1402: EQU $ < SEGMENT DE TROP PETITE NORME.
STA WG+2
RSR
<
< CAS DES SEGMENTS DE PETITE NORME :
<
E1403: EQU $
DC ASEG < SUPPRESSION DE L'ENTREE
DC ASEG < PRECEDENTE DE LA LISTE.
LA WG+2 < ACCES AU CODEM DE WG.
ADRI -4,A < SUPPRESSION DU POINT PRECEDENT.
JMP E1402 < VERS LA SORTIE SANS INSERTION.
<
<
< R E - I N S E R T I O N D U 1 E R P O I N T :
<
<
XY1: EQU $
LA SEG < A=Y(1ER PINT).
LB SEG+1 < B=X(1ER POINT).
STA &ASEG < RE-INSERTION Y(1ER POINT).
JMP E1300 < VERS LA REINSERTION DU X , ET
< LA MISE A JOUR DE WG.
<
<
< O R I G I N E D E L A L I S T E
< D E S S E G M E N T S :
<
<
< RESULTAT :
< A=CODEM(WG).
<
<
MS: EQU $
LA WG+1 < ACCES A L'@OCTET DU BUFFER.
ADRI 4,A < SUPPRESSION DU 1ER POINT DE
< LA LISTE.
STA WG+1 < MAJ DE WG.
LA WG+2
ADRI -4,A < 1 POINT=2 MOTS=4 OCTETS.
STA WG+2 < MAJ DE WG.
RSR
<
<
< A C C E S S E G M E N T Z D C :
<
<
< RESULTAT :
< SEG,
< A=0 SI FIN DE LISTE ('OAB').
<
<
GETGS: EQU $
SEG1: EQU $
LAD DEMGS
SVC 0 < ACCES AU SEGMENT COURANT.
CPZ NOMSEG < EST-IL VALIDE ???
JE SEG1 < NON, ON ATTEND.
STZ NOMSEG < OUI, ON L'ACQUITTE.
LAD DELGS
SVC 0
<
< TEST DE FIN DE LISTE :
<
LA SEGORG+X
OR SEGORG+Y
OR SEGEXT+X
OR SEGEXT+Y
RSR
<
<
< S E G M E N T C O U R A N T Z D C :
<
<
DRAW: EQU $
LAD OG
SVC 0 < DECHAINAGE DES SEGMENTS.
LAD WGT
SVC 0 < TRACE GRAPHIQUE...
RSR
PAGE
<
<
< D E P L A C E M E N T S C A R D I N A U X :
<
<
< ARGUMENT :
< A=@MESSAGE A EMETTRE.
<
<
< RESULTAT :
< B=0 : ALLER DANS LA DIRECTION DEMANDEE PAR
< LE MESSAGE ,
< =1 : NE PAS Y ALLER.
< INDICATEURS POSITIONNES PAR 'CPZR B'.
<
<
CARD1: EQU $ < CAS DES ERREURS DE REPONSES.
LA AMESS < RESTAURE : A=@MESSAGE.
CARD: EQU $ < ENTREE NORMALE.
STA AMESS < SAVE L'@MESSAGE EN CAS D'ERREUR.
BSR APRINT < ENVOI DU MESSAGE ARGUMENT.
LAD DEMREP
SVC 0 < ENTREE DE LA REPONSE.
LBY REP < A=REPONSE UTILISATEUR.
<
< REPONSES RECONNUES :
< N : NE PAS Y ALLER (B=1) ,
< O : ALLER DANS LA DIRECTION DU MESSAGE (B=0).
<
LBI 0 < OUI A PRIORI ...
CPI "O"
JE CARD2 < OK , ON Y VA ...
LBI 1 < NON A PRIORI.
CPI "N"
JNE CARD1 < ERREUR : REINITERROGATION ...
CARD2: EQU $
CPZR B < POUR TEST EN RETOUR DE (B).
RSR < RENVOIE B.
PAGE
<
<
< R E C U P E R A T I O N D E S S E U I L S :
<
<
< FONCTION :
< CETTE ROUTINE PERMET D'ENTRER
< DES NOMBRE HEADECIMAUX AVEC
< EMISSION PREALABLE D'UN MESSAGE ,
< ET ITERATION SUR FAUTE DE SYNTAXE.
< LES SEUILS SONT EXPRIMES EN NOMBRE DE
< POINTS ET DE LIGNE TELEVISION !!!!
<
<
< ARGUMENT :
< A=@MESSAGE DE DEMANDE DU SEUIL.
<
<
< RESULTAT :
< A=SEUIL DEMANDE.
<
<
GETS3: EQU $ < ENTRY POUR ERREUR DE SYNTAXE.
LA AMESS < RESTAURE : A=@MESSAGE.
GETS: EQU $ < ENTRY NORMALE.
STA AMESS < SAVE L'@MESSAGE AU CAS OU
< UNE ERREUR DE SYNTAXE DANS LES
< SEUILS AURAIT LIEU.
BSR APRINT < EMISSION DU MESSAGE.
LAD DEMSE
SVC 0 < ENTRREE DES 3 CARACTERES.
LXI 0 < X=INDEX DE PARCOURS DU BUFFER.
LY DEMSE+2 < POUR TEST D'ARRET SUR (X).
LBI 0 < CLEAR LE REGISTRE B.
<
< BOUCLE DE CONVERSION :
<
GETS1: EQU $
LBY &AREP < A=CARACTERE COURANT.
CPI '04
JE GETS4 < ON ARRETE SUR 'EOT'.
CPI '0D
JE GETS4 < ON ARRETE SUR 'R/C'.
ADRI -'30,A
JAL GETS3 < ERREUR DE SYNTAXE.
CPI 9 < EST-CE UN CHIFFRE ???
JLE GETS2 < OUI , OK.
ADRI -'41+'39+1,A
CPI 'A < EST-CE UNE LETTRE ???
JL GETS3 < NON , ERREUR.
CPI 'F < VALIDATION SUPERIEURE ???
JG GETS3 < ERREUR.
GETS2: EQU $ < OK , CHIFFRE HEXADECIMAL.
SCRS 4 < MISE EN TETE DE A.
SCLD 4 < CONCATENATION DANS B.
ADRI 1,X < PROGRESSION DANS LE BUFFER.
CPR X,Y < EST-CE FINI ???
JNE GETS1 < NON , ON CONTINUE ....
GETS4: EQU $ < ARRET SUR 'EOM'.
LR B,A < RENVOIE : A=SEUIL DEMANDE ...
RSR
PAGE
<
<
< E N T R E E C O N S T A N T E :
<
<
< ARGUMENT :
< A=@MESSAGE.
<
<
< RESULTAT :
< A=CONSTANTE.
<
<
ENTC1: EQU $
LR Y,A < RESTAURE A=@MESSAGE.
ENTC: EQU $
LR A,Y < SAVE Y=@MESSAGE.
BSR APRINT < EMISSION MESSAGE (A).
PSR X
LAD DEMREP
SVC 0 < ENTREE DE LA CONSTANTE.
PLR X
LBY REP < A=CARACTERE REPONDU.
CPI "Z" < VALIDATION SUPERIEURE.
JG ENTC1 < ERREUR DE SYNTAXE...
ADRI -"0",A < CONVERSION BINAIRE.
JALE ENTC1 < ERREUR DE SYNTAXE...
CPI 9 < EST-CE UN CHIFFRE ???
JLE ENTC2 < OUI, DE 1 A 9.
ADRI -"A"+"9"+1,A < CONVERSION SUITE.
CPI 9 < EST-CE DE A A Z ???
JLE ENTC1 < NON, ERREUR...
ENTC2: EQU $
RSR
PAGE
<
<
< D I V I S I O N E X C E S / D E F A U T :
<
<
< ARGUMENT :
< A=DIVIDENDE,
< Y=DIVISEUR.
<
<
< RESULTAT :
< B=QUOTIENT, PAR EXCES OU PAR DEFAUT.
<
<
DIVIS: EQU $
STY ARG < SAVE LE DIVISEUR.
SARD 16 < EXTENSION 32 BITS...
DV ARG
ADR B,B < ON DOUBLE LE RESTE.
CPR Y,B < EXCES OU DEFAUT ???
JL DIVIS3 < DEFAUT...
ADRI 1,A < EXCES...
DIVIS3: EQU $
MP ARG < CALCUL DU DIVIDENDE EN TANT
< QUE MULTIPLE DU DIVISEUR.
RSR
PAGE
<
<
< O P E R A T I O N S M A T R I C I E L L E S :
<
<
< FONCTION :
< CETTE ROUTINE APPLIQUE SI CELA A
< ETE DEMANDE LES TRANSFORMATIONS
< MATRICIELLES ET PERMUTATIONNELLES
< SUR LES COORDONNEES X ET Y.
<
<
< ARGUMENT :
< X=NBRE DE COORDONNEES A TRANSFORMER.
<
<
TRF: EQU $
CPZ INDTR < FAUT IL TRANSFORMER L'IMAGE
< GRAPHIQUE ???
JNE E6010 < NON , ALLONS L'AFFICHER ...
LA WG+1 < A=@OCTET REELLE LISTE SEGMENTS.
SLRS 1 < A=@MOT LISTE REELLE ....
STA ASEG < REINITIALISATION DU POINTEUR
< DE LISTE GRAPHIQUE.
<
< APPLICATION DE LA TRANSFORMATION A 1 POINT :
<
TR: EQU $
LA &ASEG < Y.
MP M12
DV DM12
PSR A < SAVE A=M12*Y.
IC ASEG
LA &ASEG < X.
MP M11
DV DM11 < A=M11*X.
PLR B < B=M12*Y.
ADR B,A < A=M11*X+M12*Y.
AD TX
PSR A < SAVE A=M11*X+M12*Y+TX.
LA &ASEG < X.
MP M21
DV DM21
PSR A < SAVE A=M21*X.
DC ASEG
LA &ASEG < Y.
MP M22
DV DM22 < A=M22*Y.
PLR B < B=M21*X.
ADR B,A < A=M21*X+M22*Y.
AD TY < A=M21*X+M22*Y+TY.
<
< PERMUTATION DES BITS DE Y TRANSFORMEE :
<
CPZ INDPEY < FAUT-IL PERMUTER ???
JNE PRY1 < NON ...
PSR X < ET OUI , ALORS SAVE X.
LR A,Y < Y=COORDONNEE Y DONT ON PERMUTE
< LES BITS.
LBI 0 < INITIALISATION DE LA COORDONNEE
< Y PERMUTEE.
LXI 16 < 16 BITS DANS UN MOT ....
PRY2: EQU $
LA &APERY < A=COEFFICIENT COURANT DE LA
< MATRICE DE PERMUTATION DES Y.
ANDR Y,A
JAE PRY3 < INTERSECTION VIDE.
SBT 15,X < INTERSECTION NON VIDE.
PRY3: EQU $
JDX PRY2 < AU BIT PRECEDENT.
LR B,A < A=COORDONNEE Y TRANSFORMEE
< ET PERMUTEE ...
PLR X < RESTAURE X.
PRY1: EQU $
CP C1023 < VALIDATION GRAPHIQUE.
JLE TR1 < OK POUR LE MAX.
LA C1023 < SI TROP GRAND , ON PREND LE MAX.
TR1: EQU $
JAGE TR3 < OK , POUR LE MIN.
LAI 0 < SI TROP PETIT , ON PREND LE MIN.
TR3: EQU $
STA &ASEG < SAVE L'Y TRANSFORME.
IC ASEG < PASSAGE A L'ENTREE SUIVANTE.
PLR A < RESTAURE A=M11*X+M12*Y+TX.
<
< FAUT-IL PERMUTER LES BITS DE LA COORDONNEE X TRANSFORMEE ???
<
CPZ INDPEX < ALORS ON PERMUTE ???
JNE PRX1 < NON.
PSR X < OUI , ALORS SAVE X.
LR A,Y < Y=COORDONNEE X TRANSFORMEE ,
< DONT ON PERMUTE LES BITS
< SUIVANT LA MATRICE PERX.
LBI 0 < INITIALISATION DE LA COORDONNEE
< X PERMUTEE.
LXI 16 < 16 BITS DANS UN MOT.
PRX2: EQU $
LA &APERX < A=COEFFICIENT COURANT DE LA
< MATRICE DE PERMUTATION.
ANDR Y,A
JAE PRX3 < INTERSECTION VIDE.
SBT 15,X < INTERSECTION NON VIDE.
PRX3: EQU $
JDX PRX2 < AU BIT PRECEDENT.
LR B,A < A=COORDONNEE X TRANSFORMEE
< PUIS PERMUTEE ...
PLR X < ET ENFIN , RESTAURE X.
PRX1: EQU $
CP C1023 < VALIDATION MAX.
JLE TR2 < OK POUR LE MAX.
LA C1023 < SI TROP GRAND , ON PREND LE MAX.
TR2: EQU $
JAGE TR4 < OK POUR LE MIN.
LAI 0 < SI TROP PETIT , ON PREND LE MIN.
TR4: EQU $
STA &ASEG < SAVE L'X TRANSFORME.
IC ASEG < PASSAGE A 6HENTREE SUIVANTE.
JDX TR < PASSAGE AU POINT SUIVANT.
E6010: EQU $
RSR
PAGE
<
<
< A C C E S S G F :
<
<
< ARGUMENT :
< X,Y = COORDONNEES DU POINT A INSERER
< DANS LE FICHIER '0A.
<
<
STBUF: EQU $
CPZ INSGF < ACCES SGF VALIDE ???
JNE STBUF6 < NON...
PSR A,X
LR X,A < A=COORDONNEE X.
LX IBUF < X=INDEX COURANT BUFFER SGF.
STA &ASGF < COORDONNEE X.
ADRI 1,X < PROGRESSION INDEX BUFFER.
STY &ASGF < COORDONNEE Y.
ADRI 1,X < PROGRESSION INDEX BUFFER.
LR X,A < VALIDATION INDEX BUFFER.
CP MAXBUF < PLEIN ???
JL STBUF1 < NON.
LAD SGFW < OUI,
SVC 0 < ECRITURE DE L'ENREGISTREMENT.
LAI 0 < RAZ DE L'INDEX COURANT.
STBUF1: EQU $
STA IBUF < MAJ INDEX BUFFER SGF.
PLR A,X
STBUF6: EQU $
RSR
PAGE
<
<
< F E R M E T U R E D U F I C H I E R :
<
<
CLOSEF: EQU $
CPZ INSGF < ACCES SGF VALIDE ???
JNE SGF5 < NON...
CPZ ISGF < Y-A-T'IL EU DES OPERATION SGF ???
JE SGF5 < NON, RIEN A FAIRE...
STZ ISGF < OUI, IL FAUT CLOSER...
<
< FERMETURE DU FICHIER '0A :
<
LXI -1
LYI -1
BSR ASTBUF < INSERTION DE 2
BSR ASTBUF < COUPLE (-1,-1); ON EN MET 2
< AU CAS OU UN ALT-MODE AURAIT
< INTERROMPU L'INSERTION D'UN
< SEGMENT.
CPZ IBUF < LE BUFFER EST-IL VIDE ???
JE SGF3 < OUI, RIEN A FAIRE.
LAD SGFW < NON,
SVC 0 < ECRITURE DERNIER ENREGISTREMENT.
SGF3: EQU $
LAD SGFC
SVC 0 < CLOSE SAVE LA CLEF 1.0.
LA AMAC
BSR ACCIN < SAVE LE FICHIER '0A.
SGF5: EQU $
LAD CG
SVC 0 < REMISE EVENTUELLE DE LA VISU
< D'EMISSION EN APLHA-NUMERIQUE.
SGF4: EQU $
RSR
PAGE
<
<
< A C C E S C C I I N T E R P R E T A T I F :
<
<
< ARGUMENT :
< A=@MOT DE LA CARTE.
<
<
< RESULTAT :
< CODES DE CONDITION.
<
<
CCIN: EQU $
SLLS 1 < A=@OCTET DE LA CARTE.
STA CCII+1
LAD CCII
SVC 0 < ENVOI DE LA CARTE CONTROLE.
RSR
PAGE
<
<
< E M I S S I O N D ' U N M E S S A G E :
<
<
< FONCTION :
< EDITER UN MESSAGE ; DE PLUS SI
< LE DEMANDEUR EST SOUS :SYS ,
< CETTE ROUTINE STABILISE L'IMAGE
< VIDEO COURANTE.
<
<
< ARGUMENT :
< A=@MOT DU MESSAGE.
<
<
PRINT: EQU $
PSR C < SAVE L'@ IMAG.
LR A,C < C=@MOT DU MESSAGE.
ADR A,A
ADRI 1,A < A=@OCTET DU MESSAGE.
STA DEMOUT+1 < MAJ DE DEMOUT.
LBY 0,C < A=LONGUEUR DU MESSAGE.
STA DEMOUT+2 < MAJ DE DEMOUT.
LAD CG
SVC 0 < CLOSE GRAPHIQUE A PRIORI.
LAD DEMOUT
SVC 0 < EMISSION MESSAGE.
PLR C < RESTAURE C=@IMAGE VIDEO.
RSR
<
<
< E M I S S I O N M E S S A G E S U R ' 0 B :
<
<
PRINTB: EQU $
PSR C
LR A,C
ADR A,A
ADRI 1,A < A=@OCTET DU MESSAGE.
STA DEMOB+1
LBY 0,C
STA DEMOB+2 < LONGUEUR DU MESSAGE.
LAD CG
SVC 0 < RETOUR EN ALPHA...
LAD DEMOB
SVC 0 < AFFICHAGE TEXTE.
PLR C
RSR
<
<
< T E N T A T I V E D ' O G :
<
<
OPEN1: EQU $
E1200: EQU $
STZ DEMOB+2 < MISE EN PLACE D'UN CODEM=0.
LAD DEMOB
SVC 0 < ENVOI DE DEMOB.
LR X,A < POUR TEST DU CODE DE RETOUR.
CPI '84 < EST-CE 'CODEM=0' ???
JE E110 < OUI, LE NVP EST ASSIGNE, MAIS
< PAS AU NVP 'DUMMY'...
<
< CHANGEMENT DE VISU D'EMISSION :
<
E1613: EQU $
LAI '02 < ON REMPLACE NVP='0B PAR NVP='02.
STBY ERASE < MAJ DE ERASE.
STBY OG < MAJ DE OG.
STBY CG < MAJ DE CG.
STBY WG < MAJ DE WG.
STBY WGT < MAJ DE WGT.
STBY COPY < MAJ DE COPY.
STBY DEMOB
JMP E1200 < PUIS NOUVELLE TENTATIVE D'OG.
E110: EQU $
LAD OG
SVC 0 < OPEN GRAPHIQUE..
JNE E1613 < GLUPSSS .??!!?
RSR
PAGE
<
<
< H A R D - C O P Y E T T E M P O R I S A T I O N ???
<
<
< FONCTION :
< CETTE ROUTINE PERMET D'INTERROGER
< L'UTILISATEUR SUR UN HARD-COPY
< EVENTUEL , ET PERMET EN TOUT CAS
< D'INTERROMPRE L'EMISSION ET PAR LA
< DEMANDE DE COPY D'EMETTRE UN R/C
< FORT UTILE DANS LE CAS OU LES CARACTERES
< GRAPHIQUES SONT RECUPERES PAR UNE
< LIGNE BOUCLEE !!!
<
<
RCOPY: EQU $
<
< FAUT-IL FAIRE UN HARD-COPY DE L'IMAGE :
<
LAD CG
SVC 0 < MISE EN ALPHA DE LA VISU.
< (UTILE DANS LE CAS NVP='02).
HCOPY: EQU $
LA AMCOPY
BSR ACARD < ENVOI D'1N MESSAGE , ET RENVOIIE
< LA REPONSE : B=0 SI OUI.
JNE NCOPY < NON , RETOUR A 'GE'.
LAD COPY
SVC 0
LAD SLEEP
SVC 0 < ET ATTENTE DE 15 SECONDES DE
< FIN DE HARD-COPY.
JMP HCOPY < FAUT-IL EN FAIRE ENCORE UNE ???
NCOPY: EQU $
RSR
PAGE
<
<
< C O N V E R T I S S E U R
< G R A P H I Q U E - G R A P H I Q U E :
<
<
< FONCTION :
< CE PROCESSEUR RECOIT DES SEGMENTS PAR
< LA ZDC, LES TRANSFORME EVENTUELLEMENT,
< PUIS, LES AFFICHE...
< ET LES MET EN FICHIERS COMPATI-
< BLES AVEC 'LP'.
<
<
<
<
WORD 0
WORD LOC+'80
WORD BRANCH
IMAGE: EQU $
LRP K
ADRI -1,K
PLR C,L,W < INITIALISATIONS DES 3 BASES.
LAD STACK-1
LR A,K < INITIALISATION DE K SUR LA PILE
< DE TRAVAIL STACK.
<
< DECOMPTAGE DES ENTREES :
<
IC KIN
JG GOGE < KIN>0 , IL NE S'AGIT PAS DE
< LA 1ERE ENTREE ; ON EST A LA
< SUITE D'UN ALT-MODE.
<
< CAS DE LA 1ERE ENTREE :
<
JMP E1000 < VERS LES INITIALISATIONS.
<
<
< R E T O U R T E M P O R A I R E A U C C I :
<
<
GOCCI: EQU $
LAD DEMCCI
SVC 0
BR AINTER < VERS L'INTERROGATION...
<
< T R A I T E M E N T D E S E R R E U R S :
<
E1100: EQU $
LAD MERR
BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR.
<
<
< R E T O U R A ' G E ' :
<
<
GOGE: EQU $
LA APILE
LR A,K < REINITIALISATION DE K SUR
< LA PILE DE SODOME.
BSR ACLOSF < CLOSE LE FICHIER....
<
< CHARGEMENT DE L'OVERLAY 'GE' :
<
LA NGE
STA 0,W < MISE EN PLACE DU NOM DE 'GE'
< EN TETE DE LA BRANCHE.
LAI '06
STBY DEMSGN < NVP DE LOAD SOUS :SYS.
E101: EQU $
LAD DEMSGN < A=@DEMSGN ; W=@BRANCH.
BSR AOVL < TENTATIVE D'OVERLAY.
LAD DEMCCI
SVC 0 < SI OVERLAY IMPOSSIBLE , ON
< FAIT UN RETOUR AU CCI.
JMP E101 < PUIS NOUVELLE TENTATIVE SI !GO.
<
<
< I N T E R R O G A T I O N P R I M A I R E :
<
<
E1000: EQU $
GRAPH: EQU $
INTER: EQU $
LAD MINT
BSR APRINT < ENVOI D'UN MESSAGE.
LAD DEMREP
SVC 0 < ENTREE DE LA REPONSE.
LBY REP < A=REPONSE UTILISATEUR.
<
< REPONSES RECONNUES :
< G : CALCUL CENTRE DE GRAVITE, ET AXES D'INERTIE.
< F : RETOUR A GE,
< W : RETOUR TEMPORAIRE AU CCI,
< S : SAUVEGARDE SGF DU DESSIN EN ZDC.
<
CPI "F"
JE GOGE < RETOUR A GE.
CPI "W"
JE GOCCI < RETOUR TEMPORAIRE AU CCI.
CPI "S"
JE FILE < OPERATION SGF SUR LE DESSIN.
CPI "G"
JE GRAVE1 < CALCULS DIVERS SUR LE DESSIN.
LAD MERR
BSR APRINT < RIEN COMPRIS, ERREUR !!!
JMP INTER < INTERROGATION...
<
<
< C A L C U L C E N T R E D E G R A V I T E
< E T A X E S D ' I N E R T I E :
<
<
GRAVE1: EQU $
BR AGRAVE < VERS LE MODULE SPECIFIQUE...
<
<
< O P E R A T I O N S S G F :
<
<
FILE: EQU $
<
< FAUT-IL ACCEDER AU SGF ???
<
LAD MSGF
BSR ACARD < ENTREE DE LA REPONSE...
STB INSGF < SAVE LA REPONSE...
JNE FRED < ET BIEN NON, PAS DE SGF...
IC ISGF < ISGF <-- 1 : OPERATIONS
< SGF EN COURS !!!
<
< OUVERTURE DU FICHIER :
<
SGF1: EQU $
LA AMAC
BSR ACCIN < CLOSE SAVE '0A.
LA AMFIC
BSR APRINT
LAD DEMNOM
SVC 0 < ENTREE DU NOM DU FICHIER.
LA AMAO
BSR ACCIN < ESSAI D'OUVERTURE NEW.
JNE SGF1 < ERREUR, ON REDEMANDE....
LAD SGFO
SVC 0 < OK, OUVERTURE DE LA CLEF 1.0.
STZ IBUF < IBUF <-- 0.
<
< CHOIX DU FACTEUR DE REDUCTION :
<
FRED: EQU $
LA AMRED
BSR APRINT < ENVOI D'UNE INVITATION.
LAD DEMREP
SVC 0 < LECTURE DU FACTEUR DE REDUCTION.
LBY REP < A=CARACTERE LU.
ADRI -'30,A < TRANSLATION NUMERIQUE.
JAL FRED < ERREUR : CARACTERE NON RECONNU.
CPI MAXRED < VALIDATION FACTEUR DE REDUCTION.
JG FRED < ERREUR : CARACTERE NON RECONNU.
STA REDUC < MISE EN PLACE DU FACTEUR DE
< REDUCTION.
<
< FAUT-IL TRANSFORMER L'IMAGE ???
<
LA AMTR
BSR ACARD < ENVOI D'UN MESSAGE ET LECTURE
< DE LA REPONSE (OUI=0).
STB INDTR < SAVE L'INDICATEUR DE TRANSFO.
JNE E6001 < ET NON , ...
E6100: EQU $
<
< ACCES AU CURSEUR GRAPHIQUE DE LA VISU :
<
LAD OGT
SVC 0 < OPEN GRAPHIQUE DE LA VISU '0B/'02
JE E6101 < OK.
LAI '02 < SI NON , CHANGEMENT DE NVP.
STBY OGT
STBY CU
STBY LG
LAD OGT < TRY AGAIN , MAIS SANS REBOUCLAGE,
SVC 0 < AU CAS OU ON SERAIT EN BATCH !!!
E6101: EQU $
LAD CU
SVC 0 < MISE EN FONCTION DU CURSEUR
< GRAPHIQUE.
LAD LG
SVC 0 < ET LECTURE DE CELUI-CI.
LBY CURSOR < A=CARACTERE DE DEBLOCAGE.
LXI 10 < NE PAS L'UTILISER A PRIORI ('N'),
< DONC 10 NBRES A ENTRER.
< REPONSES RECONNUES :
< O : TX ET TY SONT DONNEES PAR LE CURSEUR GRAPHIQUE,
< N : TX ET TY SONT RENTRES AU CLAVIER.
CPI "N" < FAUT-IL UTILISER LE CURSEUR ???
JE E6102 < NON , 10 NBRES A ENTRER.
CPI "O" < EST-CE OUI ???
JNE E6100 < RIEN COMPRIS , REINTERROGATION.
LA CURSOR+1 < OUI : A=Y(CURSEUR) ,
STA TY < CE QUI DONNE TRANSLATION SUR Y.
LA CURSOR+2 < A=X(CURSEUR) ,
STA TX < CE QUI DONNE TRANSLATION SUR X.
LXI 8 < IL N'Y A PLUS QUE LES 8
< COEFFICIENTS DE LA MATRICE
< A ENTRER.
E6102: EQU $
<
< ENTREE DE LA MATRICE DE TRANSFORMATION :
<
IC DEMSE+2 < POUR ENTRER 4 CARACTERES.
E6002: EQU $
STX SAVEX < SAVE X (PAS DE PLACE DANS
< LA PILE !!!)
LA &AMMAT < RECUPERATION DU MESSAGE (X).
BSR AGETS < ENVOI DU MESSAGE ET CONVERSION
< DU COEFFICIENT CORRESPONDANT.
LX SAVEX < RESTAURE X.
STA &AMAT < ET SAVE LE COEFFICIENT.
JDX E6002 < AU SUIVANT.
<
< FAUT-IL PERMUTER LES COORDONNEES TRANSFORMEES X :
<
LA AMPERX
BSR ACARD < ENVOI INTERROGATION ET LECTURE
< DE LA REPONSE DANS B.
STB INDPEX < SAVE LA REPONSE POUR X.
JNE E6300 < NON ...
<
< ENTREE DE LA MATRICE DE PERMUTATION DES BITS DE X TRANSFORMEE :
<
LXI 16 < 1L COEFFICIENTS A ENTRER.
LA AP < A=@1ER MESSAGE A EMETTRE.
E6301: EQU $
STX SAVEX < SAVE LE DECOMPTEUR X.
PSR A < SAVE L'@MESSAGE.
BSR AGETS < ENVOI MESSAGE (A) ET ENTREE
< D'UN COEFFICIENT.
LX SAVEX < RESTAURE X.
STA &APERX < SAVE LE COEFFICIENT.
PLR A < RESTAURE L'@MESSAGE.
ADRI -LMESS,A < PASSAGE AU MESSAGE PRECEDENT.
JDX E6301 < AU PRECEDENT ....
<
< FAUT-IL PERTMUTER LES BITS DES COORDONNEES Y TRANSFORMEES :
<
E6300: EQU $
LA AMPERY < ENVOI INTERROGATION ET ENTREE
< REPONSE DANS B.
BSR ACARD
STB INDPEY < SAVE LA REPONSE.
JNE E6302 < NON ...
<
< ENTREE DE LA MATRICE DE PERMUTATION DES BITS DE Y TRANSFORMEE :
<
LXI 16 < 1L COEFFICIENTS A ENTRER.
LA AP < A=@1ER MESSAGE A EMETTRE.
E6303: EQU $
STX SAVEX < SAVE X.
PSR A < SAVE L'@MESSAGE.
BSR AGETS < EDITION MESSAGE ET ENTREE
< D'UN COEFFICIENT.
LX SAVEX < RESTAURE X.
STA &APERY < SAVE LE COEFFICIENT.
PLR A < RESTAURE L'@MESSAGE.
ADRI -LMESS,A < PASSAGE AU MESSAGE PRECDENT.
JDX E6303 < AU PRECEDENT ...
E6302: EQU $
DC DEMSE+2 < RETOUR A 3 CARACTERES.
LA AMTR
BSR ACARD < FAUT-IL RERENTRER LES PARAMETRES?
JE E6100 < ET OUI , ON RECOMMENCE ...
E6001: EQU $
<
< DOIT-ON UTILISER L'ITEM2 POUR TRANSFORMER ???
<
LA AMPROG
BSR ACARD < ENVOI D'UN MESSAGE ET LECTURE
< DE LA REPONSE (O/N).
JE PRO2 < OUI.
STZ AITEM2 < NON, RAZ DU RELAI AITEM2.
JMP PRO3
PRO2: EQU $
LBY &ATYP < SI OUI, ON VALIDE L'ITEM2.
CPI "P" < EST-CE LE TYPE 'P' ???
JE PRO3 < OUI, OK.
LAD MERR
BSR APRINT < NON, ERREUR...
JMP CLOSE < VERS LA FERMETURE DU FICHIER..
PRO3: EQU $
<
< ENTREE DES SEUILS :
<
E1411: EQU $
LA AMSE
BSR AGETS < DEMANDE DU SEUIL DELTAX+DELTAY.
LX REDUC < X=FACTEUR DE REDUCTION.
SLLS DEDX+DEDY/2,X
STA SEUIL
LA AMSEX
BSR AGETS < DEMANDE DU SEUIL DE DELTAX.
LX REDUC < X=FACTEUR DE REDUCTION.
SLLS DEDX,X
STA SEUILX
LA AMSEY
BSR AGETS < DEMANDE DU SEUIL DE DELTAY.
LX REDUC < X=FACTEUR DE REDUCTION.
SLLS DEDY,X
STA SEUILY
<
< ENTREE DES CONSTANTES K, X, Y :
<
LAD MK
BSR AENTC
STA KK < K
LAD MX
BSR AENTC
MP KK
STB KX < X
LAD MY
BSR AENTC
MP KK
STB KY < Y
<
< FAUT-IL EFFACER L'ECRAN DE LA VISU DE RECEPPTION :
<
LA AMEFFA
BSR ACARD < FAUT-IL EFFACER L'ECRAN ???
<
< CHOIX VISU D'EMISSION :
<
BSR AOPEN1 < OPEN GRAPHIQUE+CHOIX VISU.
CPZR B < FAUT-IL EFFACER L'ECRAN ???
JNE NEFFAC < NON ...
LAD ERASE
SVC 0 < OUI , EFFACEMENT DE L'ECRAN
< DE LA VISU DE RECEPTION.
NEFFAC: EQU $
LAD OG
SVC 0 < RE-OPEN GRAPHIQUE EVENTUEL ,
< AU CAS OU UN ERASE AURAIT
< ETE FAIT SUR LA VISU ...
PAGE
<
<
< C O N V E R S I O N G R A P H - G R A P H :
<
<
E1001: EQU $
<
< REINITIALISATIONS :
<
E6030: EQU $
LA SEGMS0
STA ASEG < REINITIALISATION DU POINTEUR
< DE LISTE DES SEGMENTS.
ADR A,A
STA WG+1
STZ WG+2
<
< ACCES AU SEGMENT COURANT :
<
BSR AGETGS < ACCES A LA ZDC, ET TEST
< DE FIN DE LISTE...
JANE SEG2 < OK, ENCORE DU TRAVAIL...
BSR ARCOPY < C'EST LA FIN,
<
< FERMETURE DU FICHIER '0A :
<
CLOSE: EQU $
BSR ACLOSF
BR AINTER < VERS L'INTERROGATION...
<
< TRAITEMENT DU SEGMENT COURANT :
<
SEG2: EQU $
CPZ AITEM2 < TRANSFORME-T'ON PAR ITEM2 ???
JE NPROG < NON...
LBI 1 < OUI, B=1, PAR COMPATIBILITE
< AVEC 'TA'.
LAD SEGORG < A=@SEGMENT COURANT...
PSR L,W
BSR &AITEM2 < APPEL DE L'OVERLAY ITEM2.
PLR L,W
NPROG: EQU $
LA SEG+2+X
STA SAVEXT+X < SAVE L'EXTREMITE DU
LA SEG+2+Y
STA SAVEXT+Y < SEGMENT PRECEDENT.
LX SEGORG+X
LY SEGORG+Y
BSR AXY < INSERTION ORIGINE.
LX SEGEXT+X
LY SEGEXT+Y
BSR AXY < INSERTION EXTREMITE.
<
< AFFICHAGE DE LA LISTE DES SEGMENTS :
<
E1009: EQU $
<
< TRANSFORMATION DE L'IMAGE GRAPHIQUE :
<
LA WG+2 < A=NBRE D'OCTETS A EMETTRE.
SLRS 2 < DIVISION PAR 4.
LR A,X < X=NBRE DE POINTS A AFFICHER.
BSR ATRF < TRANSFORMATION DES COORDONNEES
< SU CELA A ETE DEMANDE.
LA SEG+X
CP SAVEXT+X < LA NOUVELLE ORIGINE, ET
< L'EXTREMITE PRECEDENTE
< SONT-ELLES CONFONDUES ???
JNE DIFF1 < NON...
LA SEG+Y
CP SAVEXT+Y < MEME QUESTION ???
JNE DIFF1 < NON...
LXI 4 < 4 OCTETS DE MOINS A SORTIR.
LA WG+1
ADR X,A < PROGRESSION DE L'AMDEM.
STA WG+1
LA WG+2
SBR X,A < REGRESSION DU CODEM.
STA WG+2
JMP INC3 < ET PAS D'OPEN GRAPHIQUE...
DIFF1: EQU $
<
< AFFICAHGE DE LA LISTE GRAPHIQUE (TRANSFORME OU PAS) :
<
LAD OG < OPEN GRAPHIQUE.
SVC 0 < POUR DECHAINER LES SEGMENTS.
INC3: EQU $ < ENTRY MODE INCREMENTAL.
LAD WG
SVC 0 < (X EST INDIFFERENT !!!)
JNE E1001 < CAS DES SEGMENTS DE TROP
< PETITES NORMES : LE CODEM DE
< WG EST NUL... : LE CODEM DE
NGRAPH: EQU $
<
< SAUVEGARDE SGF DU SEGMENT COURANT :
<
LX SEG+0+X
LY SEG+0+Y
BSR ASTBUF < ORIGINE DU SEGMENT.
LX SEG+2+X
LY SEG+2+Y
BSR ASTBUF < EXTREMITE DU SEGMENT.
JMP E1001 < VERS L'ACCES AU SEGMENT SUIVANT...
PAGE
<
<
< C A L C U L D U C E N T R E D E
< G R A V I T E E T A U T R E S
< C O N S T A N T E S D U D E S S I N :
<
<
GRAVE: EQU $
<
< INITIALISATIONS :
<
STZ NPT < RAZ DU NBRE DE SEGMENTS.
LAI 0
FLT
FST FGX
FST FGY
FST IXX
FST IYY
FST IXY
BSR AOPEN1 < OPEN GRAPHIQUE+CHOIX VISU.
GRAVE2: EQU $
<
< RECUPERATION DU SEGMENT COURANT :
<
BSR AGETGS < ACCES ZDC.
JAE GRAVE3 < FIN DE LISTE...
BSR ADRAW < AFFICHAGE SEGMENT COURANT.
<
< CUMUL DU SEGMENT COURANT :
<
IC NPT < COMPTE DU SEGMENT COURANT.
LA SEGORG+X
AD SEGEXT+X
SLRS 1 < X(MILIEU SEGMENT).
FLT
FSB FTX < TRANSLATION SUR X.
FST FX < X(MILIEUR SEGMENT).
LA SEGORG+Y
AD SEGEXT+Y
SLRS 1 < X(MILIEU SEGMENT).
FLT
FSB FTY < TRANSLATION SUR Y.
FST FY < Y(MILIEU SEGMENT).
<
< CUMUL CENTRE DE GRAVITE :
<
FAD FGY
FST FGY < FGY <-- (FGY)+(FY).
FLD FX
FAD FGX
FST FGX < FGX <-- (FGX)+(FX).
<
< CUMUL MOMENTS D'INERTIE :
<
FLD FY
FMP FY
FAD IYY
FST IYY < IYY <-- (IYY)+(FY)*(FY).
FLD FX
FMP FX
FAD IXX
FST IXX < IXX <-- (IXX)+(FX)*(FX).
FLD FX
FMP FY
FAD IXY
FST IXY < IXY <-- (IXY)+(FX)*(FY).
JMP GRAVE2 < VERS LE SEGMENT SUIVANT...
<
< FIN DE LISTE :
<
GRAVE3: EQU $
LA NPT
JANE GRAVE4 < OK, AU MOINS 1 SEGMENT...
GRAVE5: EQU $
LAD CG
SVC 0 < RETOUR EN ALPHA...
BR AINTER < VERS L'INTERROGATION.
GRAVE4: EQU $
FLT
FST FNPT < NBRE DE SEGMENTS RENCONTRES.
<
< REDUCTION DES MOMENTS D'INERTIE :
<
FLD FNPT
FMP FFACT
FST ARG < ARG=NPT*FACT.
FLD IXX
FDV ARG
FST IXX < IXX
FLD IYY
FDV ARG
FST IYY < IYY
FLD IXY
FDV ARG
FST IXY < IXY
<
< VISUALISATION DU CENTRE DE GRAVITE :
<
FLD FGX
FDV FNPT
FAD FTX < TRANSLATION SUR X.
FST FGX
FIX
STA GX < X(CENTRE DE GRAVITE).
STA SEGORG+X
STA SEGEXT+X
FLD FGY
FDV FNPT
FAD FTY < TRANSLATION SUR Y.
FST FGY
FIX
STA GY < Y(CENTRE DE GRAVITE).
STA SEGORG+Y
STA SEGEXT+Y
BSR ADRAW < VISUALISATION DE G.
LAD MG
BSR APRINB < ET AFFICHAGE 'G'...
<
< EQUATION AUX VALEURS PROPRES :
< S*S-S*(IXX+IYY)+IXX*IYY-IXY*IXY=0
<
FLD IXX
FSB IYY
FST FX < SAVE : FX=IXX-IYY.
FMP FX
FST FY < SAVE : FY=FX*FX.
FLD IXY
FMP IXY
FMP DEUX
FMP DEUX < 4*IXY*IXY
FAD FY
FST DELTA < DELTA=(IXX-IYY)*(IXX-IYY)+4*IXY*IXY
BSR ASQRT < CALCUL DE SQRT(DELTA) DANS DELTA+2.
FST DELTA+2
<
< CALCUL DES VECTEURS PROPRES :
< V1=((IXX-IYY+SQRT(DELTA))/2,IXY)
< V2=((IXX-IYY-SQRT(DELTA))/2,IXY)
<
FLD FX < IXX-IYY
FAD DELTA+2 < IXX-IYY+SQRT(DELTA)
FDV DEUX
FIX
STA V1+X
FLD FX < IXX-IYY
FSB DELTA+2 < IXX-IYY-SQRT(DELTA)
FDV DEUX
FIX
STA V2+X
FLD IXY
FIX
STA V1+Y
STA V2+Y
<
< TRACE DES VECTEURS PROPRES :
< (ORG EST DEJA POSITIONNEE SUR G)
<
LA GX
AD V1+X
STA SEGEXT+X
LA GY
AD V1+Y
STA SEGEXT+Y
BSR ADRAW < TRACE DE V1.
LA GX
AD V2+X
STA SEGEXT+X
LA GY
AD V2+Y
STA SEGEXT+Y
BSR ADRAW < TRACE DE V2.
BR AINTER < RETOUR A L'INTERROGATION.
PAGE
<
<
< R A C I N E C A R R E :
<
<
< ARGUMENT : A,B.
<
<
< RESULTAT : A,B.
<
<
SQRT: EQU $
FCAZ
JE SQRT2 < SQRT(0)=0.
FST ARG < ARGUMENT
LAI 1
FLT
FST UN < INITIALISATION DE LA SUITE 'U'.
< U0=1.
SQRT1: EQU $
FLD ARG < ARGUMENT
FDV UN < ARGUMENT/UN
FAD UN < UN+ARGUMENT/UN
FDV DEUX < (UN+ARGUMENT/UN)/2
FST UN < UN1 <-- (UN+ARGUMENT/UN)/2
< (UN ET UN1 SIGNIFIANT 'U'
< INDICE N ET INDICE N+1)
FMP UN < UN1*UN1
FSB ARG < UN1*UN1-ARGUMENT
FABS < ABS(UN1*UN1-ARGUMENT)
FCAM DIX < POSITION PAR RAPPORT A 1/10 ???
JG SQRT1 < PAS ASSEZ PRECIS...
FLD UN < UN1 EST LE RESULTAT.
SQRT2: EQU $
RSR
PAGE
<
<
< I M P L A N T A T I O N :
<
<
X12: EQU ZERO+PILE-LTNI-LTNI
X10: VAL X12-$
ZEROV: EQU ZERO+X10 < ERREUR D'ASSEMBLEGE SI
< MAUVAISE IMPLANTATION.
DZS X10+1
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.