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
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.