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