PROG IDP "LAX2 - RELEASE 10 - 17/09/80" IDP "P. FRANCONNET" ZERO: EQU $ DZS '10 WORD RUN WORD ENTRY RUN: EQU $ LRP L BR -1,L < ALLONS-Y. < < < P R O G R A M M E D E C A L C U L E T D E < < V I S U A L I S A T I O N D E L A P R O P A G A T I O N < < D ' U N E S I N U S O I D E. < LNF: VAL 2 < LONGUEUR MOTS D'UN NOMBRE EN FLOTTANT. PILE: DZS 50 < PILE POUR 'K'. < ENTIM: EQU $ < EN-TETE IMAGE VIDEO. DZS 1 < SPARE. WORD 1 < MODE TRACE = 'SBT'. DZS 4 < INUTILISE. COORDV: DZS 4 < (Y1,X1),(Y2,X2). Y1V: EQU COORDV X1V: EQU Y1V+1 Y2V: EQU X1V+1 X2V: EQU Y2V+1 IMAG: DZS 256*16 < IMAGE VIDEO. FIMAG: EQU $ LIMAG: VAL FIMAG-IMAG < LONGUEUR MOTS IMAGE. < < MESSAGES STANDARD POUR LE S/P 'ENVOI'. < M: EQU $+256 MLAX2: BYTE '6D;"L" ASCI "AX2" WORD 0 MPMEF: BYTE '6D;"P" ASCI "ARAMETRES DE MISE EN FORME:" WORD 0 MSORVI: BYTE '6D;"V" ASCI "ISU?" WORD 0 MVISU: BYTE '6D;"S" ASCI "ORTIR SUR VI" WORD 0 MTV: BYTE '6D;"T";"V";"?";0 MCATAL: BYTE '6D;"C" ASCI "ATALOGUER SUR DKU?" WORD 0 MNINI: BYTE '6D;"N" ASCI "UMERO IM. INITIALE=" WORD 0 MAIDKU: BYTE '6D;"A" ASCI "DRESSE DKU=" WORD 0 MTRACP: BYTE '6D;"T" ASCI "RACE POINTS?" WORD 0 MNIMCR: BYTE '6D;"I" ASCI "MAGE CREEE EN " MNIMC: DZS 3 < EDITION NUMERO IMAGE CREEE. WORD 0 MNBPH: BYTE '6D;"N" ASCI "OMBRE DE PHENOMENES=" WORD 0 MLAMBD: BYTE '6D;"L" ASCI "AMBDA*10=" WORD 0 MDXSL: BYTE '6D;"D" ASCI "ELTAX/LAMBDA=" WORD 0 MSLASH: BYTE "/";0 MAMORT: BYTE '6D;"A" ASCI "MORTIR?" WORD 0 MCEA: BYTE '6D;"C" ASCI "ALCUL EXACT OU APPROCHE (E/A)?" WORD 0 MNBE: BYTE '6D;"N" ASCI "OMBRE D'ETAPES=" WORD 0 MUESN: BYTE '6D;"U" ASCI "NE ETAPE SUR " WORD 0 MGAM: BYTE '6D;"G" ASCI "AMMA*10=" WORD 0 MMULX: BYTE '6D;"M" ASCI "ULX=" WORD 0 MMULY: BYTE '6D;"M" ASCI "ULY=" WORD 0 MTX: BYTE '6D;"T";"X";"=";0 MTY: BYTE '6D;"T";"Y";"=";0 MPREM: BYTE '6D;"P" ASCI "REMIER PHENOMENE:" WORD 0 MSEC: BYTE '6D;"S" ASCI "ECOND PHENOMENE:" WORD 0 MTROIS: BYTE '6D;"T" ASCI "ROISIEME PHENOMENE:" WORD 0 PAGE DSEC PARC: EQU $ < < PARAMETRES DE CALCUL PROPRES A UN PHENOMENE A VISUALISER < < (ON RAPPELLE QU'ON PEUT EN VISUALISER DEUX ENSEMBLE). < LAMBDA: DZS LNF DELTAX: DZS LNF IEXACT: DZS 1 < INDICATEUR CALCUL EXACT / APPROCHE: < = 0 : CALCUL EXACT, < = 1 : CALCUL APPROCHE. GAMMA: DZS LNF MULX: DZS LNF MULY: DZS LNF TX: DZS LNF TY: DZS LNF K: DZS LNF < 2.PI / LAMBDA. DELTAT: DZS LNF IAMORT: DZS 1 < OPTION "AMORTISSEMENT": < = 0 : NON,NE PAS AMORTIR, < = 1 : AMORTIR. A: DZS LNF B: DZS LNF FPARC: EQU $ LDPARC: VAL FPARC-PARC < LONGUEUR DE CETTE DSEC. TABLE JEU1: DZS LDPARC < JEU DE DONNEES PHENOMENE 1. JEU2: DZS LDPARC < JEU DE DONNEES PHENOMENE 2. JEU3: DZS LDPARC < JEU DE DONNEES PHENOMENE 3. PAGE COMMON COM: EQU $ DZS 1 < POUR LE BLOC FLOTTANT. < < RELAIS DE SOUS-PROGRAMMES. < AINI: WORD INI < INITIALISATIONS. AINIC: WORD INIC < INITIALISATIONS PARAMETRES DE CALCUL < POUR UN PHENOMENE. ARAZ: WORD RAZ < RAZ ECRAN GRAPHIQUE / IMAGE RESIDENTE. ACAL: WORD CAL < CALCUL SINUSOIDE INSTANT COURANT. ATRACE: WORD TRACE < TRACE D'UN SEGMENT VISU/TV. ADIFC: WORD DIFC < DIFFUSION / CATALOGAGE IMAGE COURANTE. AQREP: WORD QREP < ENVOI QUESTION DEMANDE REPONSE. AQREPN: WORD QREPN < MEME CHOSE AVEC REPONSE DECIMALE. ACVAD: WORD CVAD < CONVERSION ASCI-DECIMAL --> BINAIRE. ACVDA: WORD CVDA < CONVERSION BINAIRE --> ASCI-DECIMAL. ACONVH: WORD CONVH < CONVERSION ASCI --> HEXA. AENVOI: WORD ENVOI < ENVOI D'UN MESSAGE STANDARD. ACAON: WORD CAON < CALCUL DE A A L'ORDRE N. ATAN: WORD TG < TANGENTE. ASIN: WORD SIN < SINUS. ACOS: WORD COS < COSINUS. AARCTG: WORD ARCTG < ARCTANGENTE. ASQRT: WORD SQRT < RACINE CARREE. < < INDICATEURS. < NBPH: DZS 1 < NOMBRE DE PHENOMENES A VISUALISER: < DE 1 A TROIS. ISORVI: DZS 1 < SORTIE VISU: < = 0 : INACTIVE, < = 1 : ACTIVE. ISORTV: DZS 1 < SORTIE VIDEO: < = 0 : INACTIVE, < = 1 : ACTIVE. ICATAL: DZS 1 < CATALOGAGE: < = 0 : INACTIF, < = 1 : ACTIF. ITRACE: DZS 1 < INDICATEUR PREMIER POINT IMAGE: < = 0 : OUI, < = 1 : NON. ITRACP: DZS 1 < INDICATEUR MODE TRACE POINTS: < = 0 : NON, < = 1 : OUI. < < CONSTANTES ET VARIABLES... < FZERO: FLOAT 0.0 FDIX: FLOAT 10.0 FMILLE: FLOAT 1000.0 F2PI: FLOAT 6.2831853 FUN: FLOAT 1.0 F256: FLOAT 256.0 < TC: DZS LNF < INSTANT T COURANT. PASDET: DZS LNF < PAS DE TEMPS (OU DELTAT-VISUALISATION). PASX: DZS LNF < PAS EN X (OU DELTAX-VISUALISATION). TFINAL: DZS LNF < INSTANT T FINAL. X: DZS LNF < COORDONNE X COURANTE. XFINAL: FLOAT 6.0 < X FINAL. NBETAP: DZS 1 < NOMBRE D'ETAPES. UESN: DZS 1 < IL FAUT CALCULER/VISUALISER UNE ETAPE < SUR 'UESN'. ETAPEC: DZS 1 < NUMERO D'ETAPE COURANTE (A PARTIR DE 0). N: DZS 1 < ORDRE COURANT... (CF: 'CALA'). RAPAC: DZS LNF < RAPPORT D'ACCROISSEMENT (CF:'CALA'). AC: DZS LNF < A COURANT. BC: DZS LNF < B COURANT. < BORNES 1 ET 2 : ENTRE CES 2 BORNES, LA SINUSOIDE EST DE COULEUR DIFFERENTE. BORNE1: DZS LNF BORNE2: DZS LNF < < DEMANDES A CMS5. < MASVI: ASCI "!ASSIGN B=VI" VISU: BYTE 0;'04 FMASVI: EQU $ MASO: ASCI "!ASSIGN B=" BYTE "O";'04 FMASO: EQU $ MCLOS: ASCI "!CLOSE" BYTE '04 FMCLOS: EQU $ < REP: DZS 1 < ZONE REPONSE. AXTRAV: WORD ZERO,X < RELAI DE TRAVAIL. DMCLOS: WORD '0002 < !CLOSE. WORD MCLOS-ZERO*2 WORD FMCLOS-MCLOS*2 DMASVI: WORD '0002 < !ASSIGN B=VIX. WORD MASVI-ZERO*2 WORD FMASVI-MASVI*2 DMASO: WORD '0002 < !ASSIGN B=O. WORD MASO-ZERO*2 WORD FMASO-MASO*2 DMREP: WORD '0101 < DEMANDE REPONSE 1 CARACTERE. WORD REP-ZERO*2 WORD 1 AM: WORD M < POUR LE S/P 'ENVOI'. DMOUT: WORD '0202 < ENVOI MESSAGE UL 2. DZS 1 DZS 1 DMTRV: WORD '8A01 < TRACE VIDEO. WORD ENTIM-ZERO*2 WORD FIMAG-ENTIM*2 WORD 0 < PAS DE VISUALISATION. DMDIFF: WORD '8A01 < DIFFUSION IMAGE. WORD IMAG-ZERO*2 WORD LIMAG*2 COUL: WORD 2 < COULEUR. DMDIR: WORD '8A06 < ECRITURE DIRECTE SUR DKU. WORD 0 < ADRESSE STACK RVB. WORD '4000 < 2 COMPOSANTES (3EME = TIMING). DZS 1 < ADRESSE SECTEUR QUANTA 3. AIDKU: DZS 1 < ADRESSE INITIALE DKU. NBQSPI: WORD '17 < NOMBRE DE Q-SECTEURS PAR IMAGE. DMRAZ: WORD '0B05 < RAZ ECRAN VISU. DMOG: WORD '0B03 < OPEN GRAPHIQUE. COORDG: EQU $ < COORDONNEES GRAPHIQUES. Y1G: DZS 1 X1G: DZS 1 Y2G: DZS 1 X2G: DZS 1 DMTRGR: WORD '0B0A < TRACE GRAPHIQUE. WORD COORDG-ZERO*2 WORD 4*2 NBD: DZS 3 < NOMBRE DECIMAL SAISI EN ASCI. FNBD: EQU $ DMNBD: WORD '0101 < LECTURE NOMBRE DECIMAL. WORD NBD-ZERO*2 WORD FNBD-NBD*2 DMREP4: WORD '0101 < ENTREE DE 4 CARACTERES. WORD NBD-ZERO*2 WORD 4 AXNBD: WORD NBD,X < RELAI D'ACCES A CE NOMBRE. < < DIVERS. < TABTRI: DZS LNF*2+1 < TABLE POUR ARGUMENTS DES FONCTIONS < TRIGONOMETRIQUES ET AUTRE... Y: EQU TABTRI+LNF < COORDONNEE Y COURANTE. NIMC: DZS 1 < NUMERO IMAGE COURANTE. AX1V: WORD X1V AX2V: WORD X2V AY1V: WORD Y1V AY2V: WORD Y2V AXIM: WORD IMAG-1,X < RELAI DE RAZ IMAGE. ALIMAG: WORD LIMAG < LONGUEUR MOTS IMAGE. < DIX0: WORD 1 < DIX PUISSANCE ZERO. DIX1: WORD 10 < ... 1. DIX2: WORD 100 < ... 2. DIX3: WORD 1000 < ... 3. DIX4: WORD 10000 < ... 4. DIX: EQU DIX1 < DIX. C1024: WORD 1024 < POUR VALIDATIONS (X,Y). PAGE PROG ENTRY: EQU $ < < INITIALISATIONS. < LRM C,K WORD COM+'80 WORD PILE-1 USE W,PARC BSR AINI < INITIALISATIONS. FLD FZERO FST TC < INSTANT COURANT = 0. LX NBETAP ADRI 1,X < PLUS L'ETAPE 0. STZ ETAPEC < ETAPE COURANTE = 0. PP2: EQU $ < < BOUCLE DE CALCUL, T VARIANT... < PSR X < SAVE LE COUNT DE BOUCLE. < FAUT-IL CALCULER / VISUALISER CETTE ETAPE? LAI 0 LB ETAPEC DV UESN < UNE ETAPE SUR N CPZR B JNE PP4 BSR ARAZ < RAZ. CPZ ISORTV JE PP3 LAD DMDIFF LBI 1 STB COUL SVC 0 LBI 2 STB COUL SVC 0 PP3: EQU $ LRM W WORD JEU1 < PHENOMENE 1. BSR ACAL < CALCUL / TRACE PHENOMENE 1. LA NBPH CPI 1 < 1 SEUL PHENOMENE? JE PP1 LRM W WORD JEU2 < PHENOMENE 2. BSR ACAL < CALCUL / TRACE PHENOMENE 2. LA NBPH CPI 2 < SEULEMENT 2 PHENOMENES? JE PP1 LRM W WORD JEU3 < PHENOMENE 3. BSR ACAL < CALCUL / TRACE PHENOMENE 3. PP1: EQU $ BSR ADIFC < DIFFUSION / CATALOGAGE. PP4: EQU $ FLD TC FAD PASDET < NOUVEAU T COURANT. FST TC IC ETAPEC PLR X JDX PP2 < ETAPE SUIVANTE SVP... < < FIN. < WORD '1E16 JMP ENTRY < VERS NOUVELLE EXECUTION. PAGE < < I N I T I A L I S A T I O N S. < < ELLES SE PASSENT EN DEUX TEMPS: < < 1-ACQUISITION DES PARAMETRES DE MISE EN FORME (OU GENERAUX), < < 2-ACQUISITION DES PARAMETRES DE CALCUL, PROPRES A CHAQUE PHENOMENE < A VISUALISER (2 PHENOMENES AU PLUS). < INI: EQU $ < CHOIX DE LA SORTIE VISU. LAD DMCLOS < !CLOSE A PRIORI. SVC 0 INI0: EQU $ STZ ISORVI < SORTIE VISU = NON A PRIORI. LAI MSORVI-M BSR AQREP < QUESTION / REPONSE. CPI "N" JE INI2 < NON. CPI "O" JNE INI0 < REPONSE INCORRECTE. IC ISORVI < SORTIE VISU. INI1: EQU $ LAD DMCLOS < !CLOSE. SVC 0 LAI MVISU-M < PROPOSITION. BSR AQREP < QUESTION / REPONSE. CPI '04 JE INI11 < ASSIGNER L'OUTPUT. CPI '0D JE INI11 < ASSIGNER L'OUTPUT. STBY VISU < VISU A ASSIGNER. LAD DMASVI < !ASSIGN B=VIX. SVC 0 JNE INI1 JMP INI2 INI11: EQU $ LAD DMASO < !ASSIGN B=O. SVC 0 INI2: EQU $ < CHOIX DE LA SORTIE TV. STZ ISORTV < SORTIE TV = NON A PRIORI. STZ ICATAL < PAS DE CATALOGAGE A PRIORI. LAI MTV-M < PROPOSITION. BSR AQREP < QUESTION / REPONSE. CPI "N" JE INI3 < PAS DE TV. CPI "O" JNE INI2 IC ISORTV < OPTION TV ACTIVE. < CHOIX DE L'OPTION CATALOGAGE. INI21: EQU $ LAI MCATAL-M BSR AQREP CPI "N" JE INI3 CPI "O" JNE INI21 IC ICATAL < CATALOGAGE =OUI. INI22: EQU $ < CHOIX DE L'ADRESSE SECTEUR INITIALE SUR DKU. LAI MAIDKU-M BSR AENVOI LAD DMREP4 SVC 0 LA DMREP4+1 < ADRESSE OCTET REPONSE. BSR ACONVH < CONVERSION. JNE INI22 < REPONSE INCORRECTE. STA AIDKU < ADRESSE INITIALE. < CHOIX DU NUMERO DE LA PREMIERE IMAGE A GENERER. LAI MNINI-M BSR AQREPN STA NIMC < NUMERO IMAGE COURANTE. INI3: EQU $ < CHOIX DE L'OPTION "TRACE POINTS". STZ ITRACP < NON A PRIORI. LAI MTRACP-M BSR AQREP CPI "N" JE INI6 CPI "O" JNE INI3 IC ITRACP < TRACE POINTS. INI6: EQU $ < CHOIX DU NOMBRE DE PHENOMENES A VISUALISER. LAI MNBPH-M BSR AQREPN JALE INI6 CPI 3 JG INI6 STA NBPH INI4: EQU $ < CHOIX DU NOMBRE D'ETAPES. LAI MNBE-M BSR AQREPN STA NBETAP < D'OU L'ON DEDUIT LE "PAS-DE-TEMPS-VISUALISATION", A PARTIR DU NOMBRE < D'ETAPES DEMANDE ET DE "X-FINAL", SACHANT QUE VITESSE=1. FLT FST TABTRI FLD XFINAL FDV TABTRI FST PASDET < PAS DE TEMPS VISUALISATION. < CALCUL DU PAS EN X (OU DELTAX-VISUALISATION). FLD XFINAL FDV F256 FST PASX < < CHOIX DE LA VISUALISATION DE UNE ETAPE SUR N. < LAI MUESN-M BSR AQREPN STA UESN < < ACQUERIR LES PARAMETRES DE CALCUL POUR LES 1 A 3 PHENOMENES A VISUALISER, < CES PARAMETRES SERONT STOCKES DANS LES ZONES 'JEU1' 'JEU2' ET 'JEU3' DECRITES < DANS LA DSEC 'PARC'. < LRM W WORD JEU1 LAI MPREM-M BSR AINIC < PARAMETRES DE CALCUL PHENOMENE 1. LA NBPH CPI 1 < 1 SEUL PHENOMENE? JE INI5 LRM W WORD JEU2 LAI MSEC-M BSR AINIC < PARAMETRES DE CALCUL PHENOMENE 2. LA NBPH CPI 2 < SEULEMENT 2 PHENOMENES? JE INI5 LRM W WORD JEU3 LAI MTROIS-M BSR AINIC < PARAMETRES DE CALCUL PHENOMENE 3. INI5: EQU $ RSR < < A C Q U I S I T I O N D ' U N J E U D E P A R A M E T R E S < < D E C A L C U L. < < ARGUMENTS: < < -'A' = ARGUMENT D'APPEL S/P 'ENVOI' (MESSAGE). < -'W' = BASE DE LA ZONE DE STOCKAGE DES PARAMETRES < DE CALCUL, DECRITE PAR LA DSEC 'PARC'. < INIC: EQU $ BSR AENVOI < MESSAGE "PREMIER/SECOND/TROISIEME"... < ACQUISITION DE LAMBDA. LAI MLAMBD-M BSR AQREPN FLT FDV FDIX FST LAMBDA < CHOIX DU MODE DE CALCUL: EXACT OU APPROCHE. INIC1: EQU $ STZ IEXACT < EXACT A PRIORI. LAI MCEA-M BSR AQREP CPI "E" JE INIC2 CPI "A" JNE INIC1 IC IEXACT < APPROCHE. < CALCUL APPROCHE: ACQUERIR GAMMA. LAI MGAM-M BSR AQREPN FLT FDV FDIX FST GAMMA < CALCUL APPROCHE: ACQUISITION DE DELTAX/LAMBDA. LAI MDXSL-M BSR AQREPN PSR A < NUMERATEUR. LAI MSLASH-M BSR AQREPN FLT FST DELTAX < DENOMINATEUR PLR A FLT FDV DELTAX FMP LAMBDA FST DELTAX INIC3: EQU $ < CALCUL APPROCHE: CHOIX DE AMORTISSEMENT OU PAS... STZ IAMORT < NON A PRIORI. LAI MAMORT-M BSR AQREP CPI "N" JE INIC2 CPI "O" JNE INIC3 IC IAMORT < AMORTIR. INIC2: EQU $ < < FACTEUR MULTIPLICATIF EN X. < LAI MMULX-M BSR AQREPN < QUESTION / REPONSE NB DECIMAL. FLT FST MULX < < FACTEUR MULTIPLICATIF EN Y. < LAI MMULY-M BSR AQREPN < QUESTION / REPONSE NB DECIMAL. FLT FST MULY < < TRANSLATION EN X. < LAI MTX-M BSR AQREPN FLT FST TX < < TRANSLATION EN Y. < LAI MTY-M BSR AQREPN FLT FST TY < ET MAINTENANT, CALCUL DE CHOSES QUI SERVIRONT PAR LA SUITE... < < CALCUL DE K = 2PI / LAMBDA. FLD F2PI FDV LAMBDA FST K < CALCUL DE DELTAT = GAMMA * DELTAX (UTILE SSI CALCUL APPROCHE). FLD GAMMA FMP DELTAX FST DELTAT < CALCUL DE B (CF: DOCUMENTATION). FLD K FMP DELTAX FST TABTRI LAD TABTRI BSR ATAN FLD TABTRI+LNF FMP GAMMA BSR AARCTG FST B < CALCUL DE A (CF: DOCUMENTATION). LAD TABTRI BSR ACOS FLD TABTRI+LNF FMP TABTRI+LNF PSR A,B LAD TABTRI BSR ASIN FLD TABTRI+LNF FMP TABTRI+LNF FMP GAMMA FMP GAMMA < * GAMMA**2. FST TABTRI PLR A,B FAD TABTRI FST TABTRI LAD TABTRI BSR ASQRT CPZ TABTRI+4 JE $+2 ACTD FLD TABTRI+LNF < FAUT-IL BIEN AMORTIR ?? CPZ IAMORT JNE INIC4 FLD FUN < NON, DONC A RECOIT 1. INIC4: EQU $ FST A < RSR PAGE < < C A L C U L D E L A S I N U S O I D E A L ' I N S T A N T < < C O U R A N T : ' T C '. < CAL: EQU $ FLD FZERO FST X < X COURANT = 0. STZ ITRACE < POUR LE S/P TRACE: 1ER POINT. CPZ IEXACT JNE CALA < CALCUL APPROCHE. < < C A L C U L E X A C T. < < U(X,T) = COS K(CT-X) [C=1]. < < CALCUL DES BORNES 1 ET 2. FLD TC FST BORNE1 FAD LAMBDA FST BORNE2 FLD X CALE1: EQU $ FST X FCAM XFINAL JG CALFIN < TERMINE. FLD TC FSB X FMP K FST TABTRI LAD TABTRI BSR ACOS BSR ATRACE < TRACE SEGMENT COURANT. FLD X FAD PASX < NOUVEL X COURANT. JMP CALE1 < < C A L C U L A P P R O C H E. < < U(X,T) = COS(B-COURANT - KX) * A-COURANT. < < AVEC: < < B-COURANT = I((N*B),((N+1)*B). < A-COURANT = I((A**N),(A**N+1)) < N = E(TCOURANT/DELTAT) < I(G,H) SIGNIFIANT INTERPOLATION LINEAIRE ENTRE G ET H. < CALA: EQU $ FLD TC < T COURANT. FDV DELTAT FIX STA N < ORDRE COURANT. FLT < IL FAUDRA INTERPOLER ENTRE N ET N+1. < CALCULER LE RAPPORT D'ACCROISEMENT DE T. FMP DELTAT FST RAPAC FLD TC FSB RAPAC FDV DELTAT FST RAPAC < = (TC-N.DELTAT)/DELTAT. < CALCULER A A L'ORDRE N ET N+1 ET INTERPOLER. LX N BSR ACAON < A ORDRE N. FST AC ADRI 1,X BSR ACAON < A ORDRE N+1. FSB AC FMP RAPAC < DELTA A * RAPPORT D'ACCROISSEMENT. FAD AC FST AC < A COURANT. < CALCULER B A L'ORDRE N ET N+1 ET INTERPOLLER. LA N FLT FMP B FST BC < B ORDRE N. LA N ADRI 1,A FLT FMP B < B ORDRE N+1. FSB BC FMP RAPAC < DELTA B * RAPPORT D'ACCROISSEMENT. FAD BC FST BC < B COURANT. < CALCUL DES BORNES 1 ET 2 (MODE APPROCHE). FDV K < BORNE1 = B COURANT / K. FST BORNE1 FAD LAMBDA FST BORNE2 < CALCUL DE U(X,T) APPROCHE. FLD X < X COURANT. CALA3: EQU $ FST X FCAM XFINAL JG CALFIN < TERMINE. FMP K FST TABTRI FLD BC FSB TABTRI FST TABTRI LAD TABTRI BSR ACOS FLD TABTRI+LNF FMP AC FST Y BSR ATRACE < TRACE SEGMENT COURANT. FLD X FAD PASX < NOUVEL X COURANT. JMP CALA3 < CALFIN: EQU $ RSR < < C A L C U L D E A A L ' O R D R E N. < < ARGUMENT: < -'X' = ORDRE N. < < IL SUFFIT D'ELEVER A A LA PUISSANCE N. < CAON: EQU $ PSR X FLD FUN < A PUISSANCE 0 A PRIORI. CPZR X JE CAONF CAON3: EQU $ FMP A JDX CAON3 CAONF: EQU $ PLR X RSR PAGE TRACE: EQU $ < < T R A C E G R A P H I Q U E E T / O U V I D E O. < < (X,Y) FLOTTANTS SONT MULTIPLIES-TRANSLATES. < PSR A,B,X,L < (X2,Y2) DEVIENT (X1,Y1). < X2 VIDEO LA &AX2V STA &AX1V LA &AY2V STA &AY1V FLD X FMP MULX FAD TX FIX STA &AX2V < NOUVEL X2. FLD Y FMP MULY FAD TY FIX STA &AY2V < NOUVEL Y2. < CPZ ITRACP < TEST MODE TRACE POINTS. JE TRACE3 IC ITRACE < CET INDICATEUR EST DANS CE CAS SANS < OBJET. LA &AX2V STA &AX1V LA &AY2V STA &AY1V TRACE3: EQU $ LRM A,B,X WORD COORDV WORD COORDG WORD 4 MOVE < COORDONNEES GRAPHIQUES. < CPZ ITRACE < TEST PREMIER POINT (AUQUEL CAS IL < N'Y A PAS ENCORE A FAIDE DE TRACE). JNE TRACE1 IC ITRACE < MODIFIONS L'INDICATEUR. JMP TRACEF < TERMINE. TRACE1: EQU $ CPZ ISORVI < TEST SORTIE VISU. JNE TRACE2 TRACE5: EQU $ CPZ ISORTV < TEST SORTIE TV. JE TRACEF < TRACE VIDEO. < DE X = BORNE1 A X = BORNE2 , ON TRACE LA SINUSOIDE DANS LE ROUGE AU < LIEU DU VERT HABITUEL. FLD X FCAM BORNE1 JL TRACE6 FCAM BORNE2 JG TRACE6 < TRACER DANS LE ROUGE. LA COUL CPI 1 JE TRACE7 < DIFFUSER LE VERT ET REPRENDRE LE ROUGE. LAD DMDIFF SVC 0 JE $+2 WORD '1E16 LBI 1 SBT 16+9 < LECTURE ROUGE. STB COUL SVC 0 JE $+2 WORD '1E16 RBT 16+9 STB COUL TRACE7: EQU $ JMP TRACE8 TRACE6: EQU $ < TRACER, OU CONTINUER DE TRACER, DANS LE VERT. LA COUL CPI 2 JE TRACE8 < DIFFUSER LE ROUGE ET REPRENDRE LE VERT DANS LE STACK VERT. LAD DMDIFF SVC 0 JE $+2 WORD '1E16 LBI 2 SBT 16+9 < LECTURE. STB COUL SVC 0 JE $+2 WORD '1E16 RBT 16+9 STB COUL TRACE8: EQU $ LAD DMTRV SVC 0 JE $+2 WORD '1E16 JMP TRACEF < TRACE GRAPHIQUE AU MOINS... TRACE2: EQU $ < POUR LE TRACE GRAPHIQUE, IL FAUT FILTRER LES COORDONNEES HORS-ECRAN. LRM X,L WORD 4 WORD COORDG TRACE4: EQU $ LA 0,L JAL TRACEF CP C1024 JGE TRACEF ADRI 1,L JDX TRACE4 < ICI, TOUTES LES COORDONNEES SONT DANS L'ECRAN, ON PEUT TRACER. LAD DMOG SVC 0 JE $+2 WORD '1E16 LAD DMTRGR SVC 0 JE $+2 WORD '1E16 JMP TRACE5 < VERS TRACE VIDEO EVENTUEL. < TRACEF: EQU $ PLR A,B,X,L RSR PAGE < < R A Z E C R A N G R A P H I Q U E E T / O U V I D E O. < RAZ: EQU $ PSR A,X CPZ ISORVI JE RAZ1 LAD DMRAZ < !!!! SVC 0 < RAZ ECRAN VISU. RAZ1: EQU $ CPZ ISORTV JE RAZ2 LX ALIMAG STZ &AXIM JDX $-1 RAZ2: EQU $ PLR A,X RSR PAGE < < D I F F U S I O N / C A T A L O G A G E. < DIFC: EQU $ PSR A,X CPZ ISORTV JE DIFCF LAD DMDIFF SVC 0 JE $+2 WORD '1E16 CPZ ICATAL JE DIFCF < < CATALOGAGE SUR DKU DE L'IMAGE COURANTE. < LA NIMC < NUMERO IMAGE COURANTE. MP NBQSPI < * NB DE Q-SECTEURS PAR IMAGE. LR B,A AD AIDKU < ADRESSE SECTEUR COURANTE. STA DMDIR+3 EOR AIDKU TBT 0 JNC DIFC1 < AS INIT. ET AS COURANE DE MEME SIGNE, < C'EST BON. CPZ AIDKU < ADRESSE INITIALE POSITIVE? JGE DIFC1 < OUI, C'EST BON. ACTD DIFC1: EQU $ LAD DMDIR SVC 0 JE $+2 WORD '1E16 LA NIMC LRM Y WORD MNIMC-ZERO*2 BSR ACVDA < EDITION NUMERO D'IMAGE. LAI MNIMCR-M < ENVOI MESSAGE. BSR AENVOI IC NIMC < NOVEAU NUMERO D'IMAGE COURANTE. DIFCF: EQU $ PLR A,X RSR NLS EOT #SI SINUS# < < SOUS-PROGRAMME DE CALCUL DE LA TANGENTE < TABLE DE TRANSMISSION POINTEE PAR REGISTRE A < - MOT1 ET MOT2 : X EN FLOTTANT < - MOT3 ET MOT4 : Y EN FLOTTANT(RESULTAT) < LOCAL ZZZ100: EQU $ ZZZ101: DZS 2 < NB EN FLOTTANT ZZZ102: DZS 2 ZZZ116: DZS 2 ZZZ117: WORD '7F7F;'FFFF < +INFINI ZZZ118: WORD '807F;'0001 < -INFINI ZZZ119: WORD ZZZ120 < SP DE CALCUL DU SINUS ZZZ103: DZS 1 < SIGNE ZZZ104: WORD '6403;'87ED < 2*PI ZZZ105: WORD '6402;'87ED < PI ZZZ106: WORD '6401;'87ED < PI/2 ZZZ107: EQU ZZZ106 < CSTES DU POLYNOME ZZZ108: WORD 'AD00;'5110 ZZZ109: WORD '51FD;'9A2C ZZZ110: WORD 'B3F9;'6CCE ZZZ111: WORD '4FF4;'6BDD WORD ZZZ100+'80 <RELAI VERS LE LOCAL PROG TG: EQU $ PSR A,B,L,W LRP L < INIT. DE LA BASE L LB -2,L LR B,L LR A,W < @ TABLE PARAM. FLD 0,W FSB ZZZ106 FNEG BSR ZZZ119 FST ZZZ116 FLD 0,W BSR ZZZ119 FCMZ ZZZ116 JE ZZZ121 FDV ZZZ116 ZZZ123: EQU $ FST 2,W PLR A,B,L,W RSR ZZZ121: EQU $ FCAZ JL ZZZ122 FLD ZZZ117 JMP ZZZ123 ZZZ122: EQU $ FLD ZZZ118 JMP ZZZ123 ZZZ120: EQU $ FST ZZZ101 STZ ZZZ103 JAGE ZZZ112 FNEG FST ZZZ101 IC ZZZ103 ZZZ112: EQU $ FDV ZZZ104 FIX FLT FMP ZZZ104 FSB ZZZ101 FNEG FCAM ZZZ105 JL ZZZ113 FSB ZZZ105 IC ZZZ103 ZZZ113: EQU $ FCAM ZZZ106 JL ZZZ114 FSB ZZZ105 FNEG ZZZ114: EQU $ FDV ZZZ106 FST ZZZ101 FMP ZZZ101 FST ZZZ102 FMP ZZZ111 FAD ZZZ110 FMP ZZZ102 FAD ZZZ109 FMP ZZZ102 FAD ZZZ108 FMP ZZZ102 FAD ZZZ107 FMP ZZZ101 DC ZZZ103 JNE ZZZ115 FNEG ZZZ115: EQU $ RSR PAGE < < A R C T G ( X ). < < ARGUMENT: < A-B = X ARGUMENT (FLOTTANT). < < RESULTAT: < A-B = ARCTG(X) (FLOTTANT), EXPRIME EN RADIANS. < < ATTENTION: < PREVOIR QUELQUES MOTS DANS LA PILE DE L'APPELANT. < < NOTA: < LA METHODE DE CALCUL UTILISEE EST TIREE DE L'OUVRAGE < "CALCUL DES FONCTIONS DE BASE SUR L'IBM-360" - DEPARTEMENT < DE CALCUL ELECTRONIQUE DE L'X, PAR J-M GUILLEMIN < ET D. GRILLOT - AOUT 67. < LOCAL ATGLOC: EQU $ ATGT1: DZS LNF < ZONE DE TRAVAIL 1. ATGT2: DZS LNF < ZONE DE TRAVAIL 2. ATGT3: DZS LNF < ZONE DE TRAVAIL 3. ATGSDX: DZS 1 < INDICATEUR "SIGNE DE X ARGUMENT": < = 0 : POSITIF OU NUL; < < 0 : NEGATIF. ATGPSC: FLOAT 0.0548862 < ^^ TG(PI/12). ATGPS2: FLOAT 1.5707963 < ^^ PI/2. ATGPS3: FLOAT 1.0471975 < ^^ PI/3. ATGPS6: FLOAT 0.5235988 < ^^ PI/6. ATGUN: FLOAT 1.0 ATGR3: FLOAT 1.7320508 < ^^ RACINE DE 3. < COEFFICIENTS P1, P2, P3, P4 DU POLYNOME: ATGP1: FLOAT 0.6031058 ATGP2: FLOAT 0.0516045 ATGP3: FLOAT 0.5591371 ATGP4: FLOAT 1.4087812 PROG ARCTG: EQU $ < E N T R Y ' A R C T G ( X ) '. < SAUVEGARDES ET INITIALISATIONS. PSR X,L LX 'FF80,C < A CAUSE DU BLOC FLOTTANT. PSR X LRM L WORD ATGLOC+'80 STZ ATGSDX < X ARGUMENT POSITIF OU NUL A PRIORI. FCAZ JGE ARCTG1 DC ATGSDX < X ARGUMENT NEGATIF. ARCTG1: EQU $ FABS < U = ABS(X). FCAM ATGUN JGE ARCTG2 < U < 1 : J RECOIT 0. LXI 0 JMP ARCTG3 ARCTG2: EQU $ < U >= 1 : J RECOIT 2 ET U RECOIT 1/U. LXI 2 < J = 2. FST ATGT1 FLD ATGUN FDV ATGT1 < U = 1/U. ARCTG3: EQU $ FCAM ATGPSC < COMPARER U A TG(PI/12). JG ARCTG4 < U <= TG(PI/12) : J RECOIT J+2. ADRI 2,X < J = J + 2. JMP ARCTG5 ARCTG4: EQU $ < U > TG(PI/12) : J RECOIT J+1 ET < U RECOIT (U * RACINE(3) - 1) / (RACINE(3) + U). ADRI 1,X < J = J + 1. FST ATGT1 FMP ATGR3 FSB ATGUN PSR A,B FLD ATGR3 FAD ATGT1 FST ATGT1 PLR A,B FDV ATGT1 < U=(U*RACINE(3)-1)/(RACINE(3)+U). ARCTG5: EQU $ < < FORMER Y = U * P(U ** 2) LES COEFFICIENTS DU POLYNOME ETANT ATGP1, ATGP2 < ATGP3 ET ATGP4. ON CALCULE : < Y = U * (P1 - P2 * U ** 2 + (P3 / (P4 + U ** 2)). < FST ATGT1 < TRAV1 = U. FMP ATGT1 FST ATGT3 < TRAV3 = U ** 2. FAD ATGP4 FST ATGT2 FLD ATGP3 FDV ATGT2 FAD ATGP1 PSR A,B FLD ATGP2 FMP ATGT3 FST ATGT3 PLR A,B FSB ATGT3 < Y = P(U ** 2). FMP ATGT1 < Y = U * P( U ** 2). FST ATGT1 < TRAV1 = U * P (U ** 2). < BRANCHEMENT SELON VALEUR DE J (REGISTRE 'X'). ADRI -2,X CPZR X JE ARCTG6 JL ARCTG7 ADRI -1,X CPZR X JE ARCTG8 < FAIRE Y = PI / 2 - Y. FLD ATGPS2 JMP ARCTG9 ARCTG8: EQU $ < FAIRE Y = PI / 3 - Y. FLD ATGPS3 ARCTG9: EQU $ FSB ATGT1 < - Y. JMP ARCTG6 ARCTG7: EQU $ < FAIRE Y = PI / 6 + Y. FAD ATGPS6 ARCTG6: EQU $ < AFFECTER A Y LE SIGNE DU X ARGUMENT. CPZ ATGSDX < SIGNE DU X ARGUMENT. JL ARCTGA < X ARGUMENT POSITIF OU NUL, IL FAUT QUE Y LE SOIT. FCAZ JGE ARCTGB FNEG JMP ARCTGB ARCTGA: EQU $ < X ARGUMENT NEGATIF, IL FAUT QUE Y LE SOIT. FCAZ JL ARCTGB FNEG ARCTGB: EQU $ < RESTAURATIONS ET FIN... PLR X STX 'FF80,C < C'ETAIT A CAUSE DU BLOC FLOTTANT. PLR X,L RSR < < SOUS-PROGRAMME DE CALCUL DE LA RACINE CARREE < TABLE DE TRANSMISSION POINTEE PAR REGISTRE A < - MOT1 ET MOT2 : X EN FLOTTANT < - MOT3 ET MOT4 : Y EN FLOTTANT(RESULTAT) < - MOT5 : CODE RETOUR (0-BON;1-ERREUR) < LOCAL ZZZ040: EQU $ ZZZ041: DZS 1 < MAX ZZZ042: WORD 'FF00 < MASQUE ZZZ043: DZS 2 < NB EN FLOTTANT ZZZ044: DZS 2 ZZZ045: WORD '4A00;'0000 < CSTES ZZZ046: WORD '6CFF;'0000 ZZZ047: WORD '7000;'0000 ZZZ048: WORD '47FF;'544C ZZZ049: WORD ZZZ050 < SS-PROG ZZZ056: WORD '0080 < CSTE WORD ZZZ040+'80 < RELAI VERS LE LOCAL PROG SQRT: EQU $ PSR A,B,Y,L,W LRP L < INIT. DE LA BASE L LB -2,L LR B,L LR A,W < @ TABLE PARAM. STZ 4,W < CODE DE RETOUR A ZERO FLD 0,W FCAZ JL ZZZ054 JE ZZZ053 LR A,Y ANDI 'FF SWBR A SARS 1 AD ZZZ056 TBT 8 JNC ZZZ051 RBT 8 STA ZZZ041 LR Y,A AND ZZZ042 FST ZZZ044 FMP ZZZ045 FAD ZZZ046 JMP ZZZ052 ZZZ051: EQU $ STA ZZZ041 LR Y,A ORI 'FF FST ZZZ044 FMP ZZZ047 FAD ZZZ048 ZZZ052: EQU $ BSR ZZZ049 SWBR A BSR ZZZ049 AD ZZZ041 SWBR A ZZZ053: EQU $ FST 2,W ZZZ055: EQU $ PLR A,B,Y,L,W RSR ZZZ054: EQU $ LAI 1 < ERREUR STA 4,W JMP ZZZ055 ZZZ050: EQU $ FST ZZZ043 FLD ZZZ044 FDV ZZZ043 FAD ZZZ043 SWBR A AD ZZZ042 RSR PAGE CVAD: EQU $ < < C O N V E R S I O N E N B I N A I R E D A N S ' A ' < < D ' U N N O M B R E D E C I M A L S A I S I E N A S C I. < < ARGUMENTS: < - 'A' = ADRESSE MOT DE LA CHAINE DE CARACTERES ASCI < TERMINEE PAR <EOT> OU <RETURN> ET DE LONGUEUR < MAXIMUM 6 OCTETS. < < RESULAT: < - AU RETOUR, FAIRE: < JE OK < 'A' = NOMBRE EN BINAIRE. < JNE ERREUR < NOMBRE INCORRECT. < PSR B,X,Y,W < SAUVEGARDES. < LR A,B < 'B' = ADRESSE DEBUT ZONE POUR SBS. LAI '0D < CARACTERE A RECHERCHER. LXI 0 < RANG DU PREMIER CARACTERE. LYI FNBD-NBD*2 < NOMBRE D'OCTETS DE LA ZONE. IF FNBD-NBD*2-6,XWOR%,XWOR%, IF E R R E U R : 'NBD' TROP LONG. XWOR%: VAL 0 SBS < SEARCH '0D. JNC CVAD1 < '0D EXISTE. LXI FNBD-NBD*2 < '0D N'EXISTE PAS. CVAD1: EQU $ PSR X LAI '04 < CHERCHONS AUSSI '04. LXI 0 SBS < SEARCH '04. JNC CVAD7 < '04 EXISTE. LXI FNBD-NBD*2 < '04 N'EXISTE PAS. CVAD7: EQU $ < NOUS ALLONS PRENDRE LE MIN DES INDEX '0D ET '04; SI CE MIN VAUT < FNBD-NBD*2, ALORS C'EST QUE NI '0D NI '04 N'EXISTENT... PLR A CPR X,A JLE CVAD3 LR X,A CVAD3: EQU $ LR A,X < CE SERA FAIT... CPI FNBD-NBD*2 JE CVAD2 < NI '0D NI '04, ERREUR. JAE CVAD4 < REPONSE VIDE, 0 SUPPOSE. < REPONSE NON VIDE, CONVERSION DECIMAL --> BINAIRE. LYI 0 < NOMBRE COURANT. LRM W WORD DIX0 < 'W' BASE LES PUISSANCES DE DIX. CVAD5: EQU $ ADRI -1,X < CHIFFRE SUIVANT (DE DROITE A GAUCHE). LBY &AXNBD < CRACTERE COURANT. ADRI -"0",A JAL CVAD2 < ERREUR. CPI 9 JG CVAD2 < ERREUR. MP 0,W < CHIFFRE COURANT * 10 PUISSANCE COURANTE. ADR B,Y < NOUVEAU NOMBRE COURANT. ADRI 1,W < PISSANCE DE DIX SUIVANTE. CPZR X JG CVAD5 < AU SUIVANT. LR Y,A < 'A' = NOMBRE EN BINAIRE. CVAD4: EQU $ LBI 0 < OK. JMP CVAD6 CVAD2: EQU $ LBI 1 < ERREUR. CVAD6: EQU $ CPZR B < POUR TEST AU RETOUR. PLR B,X,Y,W < RESTAURATIONS. RSR PAGE QREPN: EQU $ < < E N V O I Q U E S T I O N E T D E M A N D E V A L I D A T I O N < < E T C O N V E R S I O N D E L A R E P O N S E Q U I < < D O I T E T R E U N N O M B R E D E C I M A L. < < ARGUMENT: < 'A' = ARGUMENT D'APPEL POUR LE S/P 'ENVOI'. < < RESULTAT: < 'A' = NOMBRE VALIDE, CONVERTI EN BINAIRE. < PSR X,Y < SAUVEGARDES. < LR A,Y < SAVE ARGUMENT D'APPEL S/P ENVOI. QREPN1: EQU $ BSR AENVOI < ENVOI QUESTION. LAD DMNBD < LECTURE REPONSE (NB DECIMAL). SVC 0 LAD NBD < ADRESSE ZONE REPONSE. BSR ACVAD < CONVERSION EN BINAIRE DANS 'A'. JE QREPN2 < REPONSE CORRECTE (CONVERSION OK). LR Y,A < REPONSE INCORRECTE, RECOMMENCER... JMP QREPN1 QREPN2: EQU $ PLR X,Y < RESTAURATIONS. RSR PAGE QREP: EQU $ < < E N V O I Q U E S T I O N E T D E M A N D E R E P O N S E < < LA REPONSE EST DE 1 CARACTERE (PAR EXEMPLE < OUI/NON). < < ARGUMENT: < 'A' = ARGUMENT D'APPEL DU S/P ENVOI POUR < POSER UNE QUESTION. < < RESULTAT: < 'A' ( 8-15 ) = REPONSE. < PSR X BSR AENVOI < ENVOI QUESTION LAD DMREP < DEMANDE REPONSE SVC 0 LBY REP < CHARGEMENT REPONSE DANS 'A'. PLR X RSR PAGE CVDA: EQU $ < < C O N V E R S I O N - E D I T I O N E N D E C I M A L < < F O R M A T A S C I D ' U N N O M B R E B I N A I R E < < C O N T E N U D A N S ' A '. < < ARGUMENTS: < - 'A' = NOMBRE EN BINAIRE. < - 'Y' = ADRESSE OCTET D'EDITION DE CE NOMBRE < ( ZONE D'EDITION DE 6 OCTETS MAXIMUM: 5 CHIFFRES < PLUS LE SIGNE). < PSR A,B,X,Y < SAUVEGARDES. PSR W < XR Y,W LYI " " < SI POSITIF, PAS DE SIGNE. JAGE $+2 LYI "-" < NOMBRE NEGATIF, SIGNE MOINS. XR Y,W < 'W' CONTIENT LE SIGNE. < LXI 5 < 5 CHIFFRES MAXI. CVDA1: EQU $ SARD 16 DV DIX CPZR B < TEST SIGNE DU RSTE. JGE $+2 NGR B < CHIFFRE POSITIF. ADRI "0",B < POUR EDITION FUTURE. PSR B < PUSH CHIFFRE COURANT. JDX CVDA1 PSR W < PUSH SIGNE. < LXI 6 < SIGNE PLUS 5 CHIFFRES. CVDA2: EQU $ LR X,W < SAVE COUNT. LR Y,X < INDEX COURANT. PLR A < PULL SIGNE / CHIFFRE COURANT. STBY &AXTRAV < STOCKAGE SIGNE / CHIFFRE. LR W,X < RECUPERATION COUNT. ADRI 1,Y < INDEX CHIFFRE SUIVANT. JDX CVDA2 < PLR W < RESTAURATIONS. PLR A,B,X,Y RSR PAGE < < CONVERSION EN BINAIRE D'UN NOMBRE HEXADECIMAL SAISI < EN ASCI (PAR EXEMPLE, NUMERO DE SECTEUR) < < ARGUMENTS: < 'A' = ADRESSE OCTET DES 4 CARACTERES ASCI < < RESULTAT: < 'A' = NOMBRE EN BINAIRE, A VALIDER EN FAISANT AU RETOUR: < JE OK OU < JNE ERREUR < CONVH: EQU $ PSR B,X,Y,W < SAUVEGARDES LR A,Y < Y = ADRESSE CARACTERE EN COURS LXI 4 < INIT COUNT CONVH1: EQU $ LR X,W < SAUVEGARDE COUNT LR Y,X < INDEX CARACTERE LBY &AXTRAV < CARACTERE CPI "0" JL CONVH3 < ERREUR CPI "9" JLE CONVH2 CPI "A" JL CONVH3 < ERREUR CPI "F" JG CONVH3 < ERREUR ADRI -7,A CONVH2: EQU $ ADRI -'30,A SLLS 12 SCLD 4 < CHIFFRE HEXA DANS 'B' ADRI 1,Y < CARACTERE SUIVANT LR W,X < RESTAURATION COUNT JDX CONVH1 < AU SUIVANT < SLLD 16 < CONVERSION OK JMP CONVH9 < CONVH3: EQU $ LBI 1 < ERREUR CONVH9: EQU $ CPZR B < POUR TEST AU RETOUR. PLR B,X,Y,W < RESTAURATIONS RSR PAGE ENVOI: EQU $ < < ENVOI D'UN MESSAGE SUR UL '02 < < EN ENTREE < < A=DEPLACEMENT MOTS DU MESSAGE A ENVOYER PAR RAPPORT < A M. TOUT MESSAGE EST DELIMITE PAR '00 < < < NOTA: ON A < EN TABLE: M: EQU $+256 < MES1: ASCI "TEXTE..." < WORD 0 < EN COMMON: AM: WORD M < APPEL PAR: LAI MESI-M < BSR AENVOI < PSR A,X AD AM < @ MOT MESSAGE ADR A,A < @ OCT MESSAGE STA DMOUT+1 STZ DMOUT+2 LR A,X ENV1: EQU $ < BOUCLE JUSQU'A DELIM '00 LBY &AXTRAV JAE ENV2 IC DMOUT+2 < LONGUEUR='+1 ADRI 1,X JMP ENV1 ENV2: EQU $ LAD DMOUT SVC 0 PLR A,X RSR LST END