<
<
< SP DE GENERATION DE DROITE,CERCLE
< ET MOUVEMENT DES YEUX
< DANS UN ITEM POUR STEREO
< PARAMETRES:
< - FCT : -1 POUR MVT YEUX, 0 POUR DROITE ET 1 POUR CERCLE
< - AD : @ DE DEBUT DE GENERATION
< - RHO : DIST. YEUX OU LG DROITE OU DIAMETRE CERCLE
< - NB : NB POINT DE VUE OU NB SEGMENT
<
<
ENT GENLC
EXT CART,SQRT
LOCAL
LOC: EQU $
REL: DZS 1 < RELAI @ GENERATION
SPCART: WORD CART < SP CONVERSION
LIST: EQU $ < LISTE DES PARAMETRES
RHO: DZS 2
THETA: DZS 2
X: DZS 2
Y: DZS 2
RAC: WORD SQRT < SP DE RACINE CARREE
LIST1: EQU $ < LISTE DES PARAMETRES
PARAM: DZS 2
RESUL: DZS 2
DZS 1
ZERO: FLOAT 0
QUAT: FLOAT 4
DEUXPI: FLOAT 6.2832
PI: FLOAT 3.1416
PIS2: FLOAT 1.5708
RAC2: FLOAT 1.414
CSTE: DZS 2 < =XMAX/RAC2
DELTHE: DZS 2 < DELTA THETA
FLT1: DZS 2 < TRAVAIL
FLT2: DZS 2
FLT3: DZS 2
CAR: DZS 1 < CARACTERE A GENERER
PRPT: DZS 1 < INDIC PREMIER POINT
PX: DZS 2 < POINT PRECEDENT
PY: DZS 2
PT5: FLOAT 0.5
MT5: FLOAT -35
VALA: DZS 1 < POUR RETENIR VALEUR DEPLACEMENT
TR5: WORD 35
DK: BYTE 0;"G" < DERNIER K
DX: BYTE 0;"W" < DERNIER X
DY: BYTE 0;"W" < DERNIER Y
DXY: WORD DX,X < RELAI VERS DERNIER X OU Y
VX: BYTE 0;"X" < VALEUR X
VY: BYTE 0;"Y" < VALEUR Y
VXY: WORD VX,X < RELAI VERS VALEUR X OU Y
DPXY: DZS 1 < DEPLACEMENT COURANT EN X OU Y
MOVE: WORD SPMOVE < SP
DLXY: WORD DELXY
PLX: WORD PLACX
PLY: WORD PLACY
PLA: WORD PLACA
PLB: WORD PLACB
CCAR: WORD SPCAR
PLK1XY: WORD SPPLK1
PLXY: WORD SPLXY
PLXYC: WORD SPLXYC
ORGRET: WORD RETORG
PSYEUX: WORD YEUX
WORD LOC+'80
PROG
GENLC: EQU $
PSR A,B,X,L,W < PROTEGER LES REGISTRES
LRP L < INIT BASE
LB -2,L
LR B,L
LR A,W < @ PARAMETRES
CPZ 0,W < MVT YEUX?
JGE PASYEU
BR PSYEUX
PASYEU: EQU $
LA 1,W < @ GENERATION
SBT 0
STA REL
LA 2,W < INIT. RHO
FLT
FST RHO
FDV RAC2
FST CSTE
FLD ZERO < INIT. THETA
FST THETA
LA 3,W < INIT. DELTA THETA
FLT
FST FLT1
FLD DEUXPI
FDV FLT1
FST DELTHE
STZ PRPT < 1ER POINT
FLD ZERO < PT PRECEDENT=0,0
FST PX
FST PY
LXI 0 < INDEX PLACEMENT
AUTSEG: EQU $
LAD LIST < CONVERSION
BSR SPCART
LA 0,W < INFINI?
CPI 2
JNE PASINF
FLD CSTE < LA FORMULE EST:
FMP CSTE < Y=+ OU - SQRT(-(X**2+A**2)
FST FLT1 < +A*SQRT(A**2+4*X**2))
FLD X
FMP X
FST FLT2
FMP QUAT
FAD FLT1
FST PARAM
LAD LIST1
BSR RAC
FLD RESUL
FMP CSTE
FSB FLT1
FSB FLT2
FCAZ
JGE PASNEG
FABS
FCAM PT5
JLE PQZERO
WORD '1E16
PQZERO: EQU $
FLD ZERO
PASNEG: EQU $
FST PARAM
LAD LIST1
BSR RAC
FLD THETA
FCAM PI
JL PASINV
FLD RESUL
FNEG
FST RESUL
PASINV: EQU $
FLD RESUL
FST Y
PASINF: EQU $
FLD X
FAD PT5
FST X
FLD Y
FAD PT5
FST Y
CPZ 0,W < Y=0 SI DROITE
JNE VOIRY
FLD ZERO
FST Y
VOIRY: EQU $
BSR DLXY < PLACER LES COORDONNEES
BSR PLX
BSR PLY
LAI "B" < PLACER B OU A
CPZ PRPT
JNE PASPRT
IC PRPT
LAI "A"
PASPRT: EQU $
STBY &REL
ADRI 1,X
FLD THETA < SEGMENT SUIVANT
FAD DELTHE
FST THETA
DC 3,W
JGE AUTSEG
RETORG: EQU $
LAI "1" < RETOUR A L'ORIGINE
STA CAR
STZ DPXY
FLD PX
FNEG
BSR MOVE
LAI "2"
STA CAR
LAI 1
STA DPXY
FLD PY
FNEG
BSR MOVE
LR X,A < RENDRE @ FIN
ADRI 1,A
SLRS 1
LR A,X
LAD &REL
STA 1,W
PLR A,B,X,L,W
RSR
<
< POSITIONS DES YEUX
<
YEUX: EQU $
LA 2,W < INIT. RHO
FLT
FST RHO
FLD PIS2 < INIT. THETA
FST THETA
LA 1,W < INIT @ PLACEMENT
SBT 0
STA REL
LA 3,W < INIT. DELTA THETA
ADRI -1,A
FLT
FST DELTHE
FLD PIS2
FDV DELTHE
FST DELTHE
FLD ZERO < INIT. PT PRECEDENT
FST PX
FST PY
LXI 0 < INDEX PLACEMENT
RESEG: EQU $
LAD LIST < CONVERSION
BSR SPCART
FLD Y < OEIL DROIT
FAD PT5
FST FLT2
FLD RHO
FSB FLT2
FST FLT3
FST Y
FLD ZERO
FST X
BSR DLXY
BSR PLX
BSR PLY
BSR PLA
FLD ZERO
FST X
FLD FLT2
FST Y
BSR DLXY
BSR PLX
BSR PLY
BSR PLB
FLD MT5 < OEIL GAUCHE
FST X
FLD FLT3
FST Y
BSR DLXY
BSR PLX
BSR PLY
BSR PLA
FLD MT5
FST X
FLD FLT2
FST Y
BSR DLXY
BSR PLX
BSR PLY
BSR PLB
FLD ZERO < VECTEUR PROJECTIF
FST X
FLD FLT3
FST Y
BSR DLXY
BSR PLX
BSR PLY
BSR PLA
FLD ZERO
FST X
FLD FLT2
FST Y
BSR DLXY
BSR PLX
BSR PLY
BSR PLB
FLD THETA < PT DE VUE SUIVANT
FSB DELTHE
FST THETA
DC 3,W
JG RESEG
BR ORGRET
<
< SP DE DIFFERENCE (X,Y) A PT PRECEDENT
<
DELXY: EQU $
FLD X
FST FLT1
FSB PX
FST X
FLD FLT1
FST PX
FLD Y
FST FLT1
FSB PY
FST Y
FLD FLT1
FST PY
RSR
<
< SP DE PLACEMENT DU X
<
PLACX: EQU $
LAI "1"
STA CAR
STZ DPXY
FLD X
BSR MOVE
RSR
<
< SP DE PLACEMENT DU Y
<
PLACY: EQU $
LAI "2"
STA CAR
LAI 1
STA DPXY
FLD Y
BSR MOVE
RSR
<
< SP DE PLACEMENT DE A
<
PLACA: EQU $
LAI "A"
STBY &REL
ADRI 1,X
RSR
<
< SP DE PLACEMENT DE B
<
PLACB: EQU $
LAI "B"
STBY &REL
ADRI 1,X
RSR
<
< SP DE CONVERSION D'UN NOMBRE EN CARACTERE
<
SPCAR: EQU $
ADRI '30,A
CPI "9"
JLE CAR1
ADRI 7,A
CAR1: EQU $
RSR
<
< PLACEMENT DE K1 SI NECESSAIRE ET DE X OU Y
<
SPPLK1: EQU $
LA DK
CPI "1"
JE PLK11
LAI "K"
STBY &REL
ADRI 1,X
LAI "1"
STBY &REL
ADRI 1,X
STZ DX
STZ DY
PLK11: EQU $
RSR
<
< PLACEMENT DE X OU Y SI NECESSAIRE
<
SPLXY: EQU $
LA VALA
BSR CCAR
STA VALA
PSR X
LX DPXY
LA &DXY
CP VALA
LA &VXY
PLR X
JE PLXY1
STBY &REL
ADRI 1,X
LA VALA
STBY &REL
ADRI 1,X
PLXY1: EQU $
RSR
<
< PLACEMENT DE X OU Y SI NECESSAIRE ET DEPLACEMENT
<
SPLXYC: EQU $
BSR PLXY
LA CAR
STBY &REL
ADRI 1,X
RSR
<
< SP DE COMPACTION D'UN MOUVEMENT
<
SPMOVE: EQU $
FIX
JAE MOVE3 < 0. RIEN
JAG MOVE1
NGR A < <0. INVERSER LE SENS
IC CAR
IC CAR
MOVE1: EQU $
LR A,B < DIVISER DEPLACEMENT PAR 35
LAI 0
DV TR5
JAE MOVE4
STA VALA < A=0
LAI "K" < PLACER KZX(A)(CAR)
STBY &REL < Y
ADRI 1,X
LAI "Z"
STBY &REL
ADRI 1,X
STZ DX
STZ DY
BSR PLXYC
LAI "Z" < B=0, DK=Z, DX=(A)
STA DK < DY
LA VALA
PSR X
LX DPXY
STA &DXY
PLR X
CPZR B
JNE MOVE10
RSR
MOVE10: EQU $
STB VALA < B=/0
BSR PLK1XY < PLACER K1X(B)(CAR)
BSR PLXYC < Y
MOVE2: EQU $
LAI "1" < DK=1, DX=(B)
STA DK < DY
PSR X
LX DPXY
LB VALA
STB &DXY
PLR X
MOVE3: EQU $
RSR
MOVE4: EQU $
STB VALA
LR B,A < A=0
CPI 5
JLE MOVE5
BSR PLK1XY < B>5, PLACER K1X(B)(CAR)
BSR PLXYC < Y
JMP MOVE2
MOVE5: EQU $
LA DK < B<=5
CPI "1"
JNE MOVE8
PSR X
LX DPXY
LA &DXY
PLR X
CPI "1"
JNE MOVE8
LR B,A < K=1 ET DX=1
CPI 3 < DY
JLE MOVE60
MOVE6: EQU $
BSR PLXYC < B=4 OU 5, PLACER X(B)(CAR)
JMP MOVE2 < Y
MOVE60: EQU $
STB VALA < B<=3, PLACER (CAR)*(B)
LA CAR
MOVE7: EQU $
STBY &REL
ADRI 1,X
DC VALA
JG MOVE7
LBI "1"
STB VALA
JMP MOVE2
MOVE8: EQU $
BSR PLK1XY < K=/1 OU DX=/1, PLACER K1X1(CAR)*(B)
LR B,A < DY Y
CPI 3
JG MOVE6
LAI 1
STA VALA
BSR PLXY
JMP MOVE60
END