DATE
PROG
TRN
<
<
< D E F I N I T I O N S G E N E R A L E S :
<
<
XUNDEF:: VAL -1 < POUR NE DEFINIR QUE LES 'XX...' DANS LES
< FICHIERS DE DEFINITION...
CALL #SIP DEFINITION CTTE#
<
< PREPARATION DE L'APPEL DE #SIP UTILITAIRES# :
<
XXXDEF: VAL XUNDEF
XXXLOC: VAL XUNDEF
XXXTAB: VAL XUNDEF
XXXPRO: VAL XUNDEF
CALL #SIP UTILITAIRES#
<
<
< D E F I N I T I O N D E L ' I M A G E :
<
<
XXXVEC: VAL XUNDEF < AFIN DE NE DEFINIR QUE LES 'XXVEC'...
CALL #SIP VECTEUR 512#
XXXVEC: VAL XXVEC1 < DEFINITION DES CONSTANTES IMAGE/VECTEUR.
CALL #SIP VECTEUR 512#
PAGE
<
<
< O P T I O N S D ' A S S E M B L A G E :
<
<
XOPT01: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'XOPT01'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
XOPT01:: VAL EXIST < TRACE GRAPHIQUE, ET VERIFICATIONS CROI-
< SEES DES EQUATIONS CALCULEES...
XEIF%: VAL ENDIF
PAGE
<
<
< B A S D E L A M E M O I R E :
<
<
ZERO: EQU $
DZS PEPROG-D+Z
<
< POINT D'ENTREE :
<
ENTRY: EQU $
LRM A,K
WORD DEBUT < POINT D'ENTREE DU PROGRAMME,
WORD STACK-DEPILE < INITIALISATION DE LA PILE.
PSR A
RSR < ON EFFECTUE AINSI UN 'GOTO' 'DEBUT'...
PAGE
<
<
< M E S S A G E S :
<
<
TABLE
<
< BUFFER BANDE :
<
LBUFMT: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'LBUFMT'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
LBUFMT:: VAL 4096
XEIF%: VAL ENDIF
BUFMT: EQU $
DZS LBUFMT/NOCMO
<
<
< C O M M O N :
<
<
COMMON
COM: EQU $
<
< MOT DESTINE AU BLOC FLOTTANT :
<
COMFLO: WORD NILK < MOT "BIDON" DESTINE AU BLOC FLOTTANT
< POUR QU'IL Y FIT SES MERDES...
ATSFLO: WORD TSFLO < POUR TESTER DE TEMPS EN TEMPS 'COMFLO'...
<
< INDICATEURS DE CONTROLE :
<
IERASE: WORD EXIST < EFFACER ('EXIST'), OU NON ('NEXIST')
< L'ECRAN 512...
IQUIT: WORD EXIST < S'ARRETER ('EXIST') OU PAS ('NEXIST')
< APRES CHAQUE IMAGE (POINT D'ARRET).
IVIDEO: WORD NEXIST < ECRIRE ('EXIST') L'IMAGE COURANTE SUR LE
< DISQUE VIDEO OU PAS ('NEXIST').
ABLOC0: WORD K < ADRESSE DU PREMIER BLOC A LIRE.
LBLOC: WORD LBUFMT < LONGUEUR DES BLOCS PHYSIQUES SUR LA
< BANDE.
IVISD: WORD EXIST < TRACER ('EXIST') OU PAS ('NEXIST') LES
< DISQUES SYMBOLISANT LES SITES.
TXMIN: WORD NILK < AFIN DE DEFINIR LA TRANCHE D'ESPACE
TXMAX: WORD NILK < A VISUALISER : X DANS (TXMIN,TXMAX).
TYMIN: WORD NILK < AFIN DE DEFINIR LA TRANCHE D'ESPACE
TYMAX: WORD NILK < A VISUALISER : Y DANS (TYMIN,TYMAX).
TZMIN: WORD NILK < AFIN DE DEFINIR LA TRANCHE D'ESPACE
TZMAX: WORD NILK < A VISUALISER : Z DANS (TZMIN,TZMAX).
RAYONP: WORD NILK < RAYON DES PARTICULES.
INEW1: WORD NEXIST < MODE DE CHOIX DES COULEURS DES DISQUES
< ET DES CONNEXIONS :
< 'NEXIST' : LES CONNEXIONS SONT 2 FOIS PLU
< PLUS SOMBRES QUE LES PARTIES
< LES PLUS LUMINEUSES DES
< DISQUES, ET LES PARTIES DES
< DISQUES LES PLUS SOMBRES (AU
< BORD VONT PRATIQUEMENT JUS-
< QU'AU NOIR) ET ENFIN, LES
< CONNEXIONS UTILISENT DES
< NIVEAUX PRIS PAR LES DISQUES.
< 'EXIST' : LES COULEURS UTILISEES SONT
< PROPRES A CHAQUE PLAN 'Z' ;
< 2 PLANS PARALLELES NE PEUVENT
< UTILISER LES MEMES...
IVISDX: WORD NEXIST < DOIT-ON CREER UNE FENETRE (OZ,OX) ???
MULX: WORD NILK < POUR FAIRE
DIVX: WORD NILK < UNE HOMOTHETIE,
TRXX: WORD NILK < ET UNE TRANSLATION
TRXY: WORD NILK < DE LA FENETRE ASSOCIEE
< AU PLAN (OZ,OX).
IVISDY: WORD NEXIST < DOIT-ON CREER UNE FENETRE (OY,OZ) ???
MULY: WORD NILK < POUR FAIRE
DIVY: WORD NILK < UNE HOMOTHETIE,
TRYX: WORD NILK < ET UNE TRANSLATION
TRYY: WORD NILK < DE LA FENETRE ASSOCIEE
< AU PLAN (OY,OZ).
IVISDZ: WORD EXIST < DOIT-ON CREER UNE FENETRE (OX,OY) ???
MULZ: WORD NILK < POUR FAIRE
DIVZ: WORD NILK < UNE HOMOTHETIE,
TRZX: WORD NILK < ET UNE TRANSLATION
TRZY: WORD NILK < DE LA FENETRE ASSOCIEE
< AU PLAN (OX,OY).
<
< MATRICE DE TRANSFORMATION :
<
MAT11: FLOAT <NILK<NILK<NILK
MAT12: FLOAT <NILK<NILK<NILK
MAT13: FLOAT <NILK<NILK<NILK
TRMATX: WORD NILK < TRANSLATION APRES MULTIPLICATION PAR LA
< MATRICE 'MAT'.
IMODX: WORD NEXIST < PAS DE MODULO SUR L'AXE 'OX' TRANSFORME,
MAT21: FLOAT <NILK<NILK<NILK
MAT22: FLOAT <NILK<NILK<NILK
MAT23: FLOAT <NILK<NILK<NILK
TRMATY: WORD NILK < TRANSLATION APRES MULTIPLICATION PAR LA
< MATRICE 'MAT'.
IMODY: WORD NEXIST < PAS DE MODULO SUR L'AYE 'OY' TRANSFORME,
MAT31: FLOAT <NILK<NILK<NILK
MAT32: FLOAT <NILK<NILK<NILK
MAT33: FLOAT <NILK<NILK<NILK
TRMATZ: WORD NILK < TRANSLATION APRES MULTIPLICATION PAR LA
< MATRICE 'MAT'.
IMODZ: WORD NEXIST < PAS DE MODULO SUR L'AZE 'OZ' TRANSFORME,
<
< RELAIS DIVERS :
<
ADEB9: WORD DEBUT9
<
< CONSTANTES FLOTTANTES DE BASE :
<
F0: FLOAT <K<K<K < REMISE A ZERO FLOTTANTE...
F1: FLOAT <W<K<K < L'UNITE EN FLOTTANT...
XXXLOC: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
<
< VARIABLES DE MANOEUVRE :
<
FWORK1: FLOAT <NILK<NILK<NILK
FWORK2: FLOAT <NILK<NILK<NILK
<
< DEMANDE DE TEMPORISATION
< APRES EFFACEMENT :
<
TEMPO: BYTE NVPSER;FONDOR
WORD NILK < INUTILE...
WORD XXXMOY < 2 PETITES SECONDES...
XXXLOC: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXVEC: VAL XXVEC2 < DEFINITION DES DONNEES DU VECTEUR 512...
CALL #SIP VECTEUR 512#
APOINT: WORD POINT < SOUS-PROGRAMME DE MARQUAGE D'UN POINT
< DE COORDONNEES (X), DONT LE NIVEAU EST
< CALCULE VIA LA TABLE 'LNIVO'.
ALNIVO: WORD LNIVO,X < TABLE DE CORRESPONDANCE DES NIVEAUX POUR
< LE SOUS-PROGRAMME 'POINT'.
<
< ACCES AUX REGISTRES DE CONTROLE :
<
ACTRL1: WORD RCTRL1
ACTRL2: WORD RCTRL2
<
< SAUVEGARDE DES COORDONNEES :
<
COORD: EQU $ < LISTE DES COORDONNEES :
SAVEX: WORD NILK
SAVEY: WORD NILK
SAVEZ: WORD NILK
PAGE0:: VAL K < PREMIERE PAGE DE LA 'CDAJ'.
RANG: WORD NILK < RANG DE LA PARTICULE COURANTE...
AGETP: WORD GETP < ACCES A LA PARTICULE DE RANG 'RANG' EN
< 'CDAJ'...
AGETPX: WORD GETPX < ACCES A X(PARTICULE COURANTE),
AGETPY: WORD GETPY < ACCES A Y(PARTICULE COURANTE),
AGETPZ: WORD GETPZ < ACCES A Z(PARTICULE COURANTE).
<
< DONNEES DE PROJECTION :
<
COST: FLOAT <NILK<NILK<NILK < COS(TETA) DONNE EN ARGUMENT,
SINT: FLOAT <NILK<NILK<NILK < SIN(TETA) CALCULE A PARTIR DE COS(TETA).
LOGX:: VAL 9 < LOG2(DIM(X)),
LOGY:: VAL 9 < LOG2(DIM(Y)),
LOGZ:: VAL 9 < LOG2(DIM(Z)).
DECX:: VAL K < AMPLIFICATEUR DE 'X',
DECY:: VAL DECX < AMPLIFICATEUR DE 'Y',
DECZ:: VAL LOGZ+I < AMPLIFICATEUR DE 'Z' (ON PREND CETTE
< VALEUR POUR SHUNTER LA PROJECTION, SINON
< IL FAUT PRENDRE 'DECX').
TRANSX: WORD NILK < TRANSLATION DE 'X',
TRANSY: WORD NILK < TRANSLATION DE 'Y' (PROJETES).
APROJ: WORD PROJ < SOUS-PROGRAMME DE PROJECTION :
< (X,Y,W) --> (X,Y).
<
< DONNEES DE TRACE D'UN DISQUE :
<
LONGX:: VAL BIT>LOGX < LONGUEUR DE L'AXE 'X',
LONGY:: VAL BIT>LOGY < LONGUEUR DE L'AXE 'Y',
LONGZ:: VAL BIT>LOGZ < LONGUEUR DE L'AXE 'Z'.
XWOR%1: VAL XXN255+I
XWOR%2: VAL BIT>LOGZ
TRN
XWOR%3: VAL XWOR%2/XWOR%1=K
NTRN
XWOR%4: VAL XWOR%1=K-LOGZ < POUR AMPLIFIER LA COORDONNEE 'Z' LORS
DECZDK:: VAL -XWOR%4 < DU TRACE DES DISQUES.
IF DECZDK-XWOR%3,XEIF%,XEIF%,
IF ATTENTION : 'DECZDK' EST TROP GRAND !!!
XEIF%: VAL ENDIF
SAVEZP: WORD NILK < POUR SAUVEGARDER LA COORDONNEE 'Z'
< AMPLIFIEE...
RAYON: WORD NILK < RAYON DU DISQUE COURANT.
ACERCL: WORD CERCLE < SOUS-PROGRAMME DE TRACE.
AMARKX: WORD MARKX < MARQUAGE D'UNE PARTICULE, L'ECRAN
< ETANT LE PLAN (OY,OZ) AVEC HOMOTHETIE.
AMARKY: WORD MARKY < MARQUAGE D'UNE PARTICULE, L'ECRAN
< ETANT LE PLAN (OZ,OX) AVEC HOMOTHETIE.
AMARKZ: WORD MARKZ < MARQUAGE D'UNE PARTICULE, L'ECRAN
< ETANT LE PLAN (OX,OY) AVEC HOMOTHETIE.
<
< DONNEES DE LA TRANSFORMATION
< MATRICIELLE (MATIJ) :
<
APRMAT: WORD PRMAT < SOUS-PROGRAMME DE TRANSFORMATION.
BLOGXN: WORD BIT>LOGX-N
BLOGYN: WORD BIT>LOGY-N
BLOGZN: WORD BIT>LOGZ-N
<
< GESTION DU DEROULEUR :
<
LBLOC0: WORD LBUFMT < POUR VALIDER 'LBLOC'...
NVPMT:: VAL '0B < 'NVP' D'ACCES AU DEROULEUR DE BANDES.
DEMMT: BYTE NVPMT;XFMTRA < DEMANDE DE LECTURE A ACCES DIRECT.
WORD BUFMT=FCTA*NOCMO
WORD LBUFMT
WORD NILK < ADRESSE DU BLOC COURANT.
IF Z-I,,XEIF%,
IF ATTENTION : L'INITIALISATION DE 'IBUFMT' ET
IF 'ZBUFMT' SERA MAUVAISE !!!
XEIF%: VAL ENDIF
IBUFMT: WORD LBUFMT-Z+I < INDEX COURANT DU BUFFER 'MT',
ZBUFMT: WORD LBUFMT-Z+I < ET POUR FORCER LA LECTURE DU PREMIER
< BLOC DE CHAQUE IMAGE...
ABUFMT: WORD BUFMT,X < ET RELAI D'ACCES...
AGOCT: WORD GOCT < SOUS-PROGRAMME D'ACCES AU NIVEAU COURANT.
AGMOT: WORD GMOT < RECUPERATION D'UN MOT (2 OCTETS).
<
< GESTION DU DISQUE VIDEO :
<
BUFVIW: BYTE "J";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIW*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUFVW:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIW: BYTE XWOR%2;FAVW < COMMANDE DE L'ECRITURE SUR LE DISQUE
< VIDEO...
WORD BUFVIW=FCTA*NOCMO
WORD LBUFVW
BUFVIR: DZS W < BUFFER DE LECTURE DES ACQUITTEMENTS.
LBUFVR:: VAL $-BUFVIR*NOCMO
DEMVIR: BYTE XWOR%2;FAVR < LECTURE DES ACQUITTEMENTS DU DISQUE.
WORD BUFVIR=FCTA*NOCMO
WORD LBUFVR
<
< GENERATION DES SEQUENCES PERIODIQUES :
<
< ARGUMENTS :
< (KP1,KP2,KP3)=CHIFFRES (CENTAINE,DIZAINE,UNITE)
< DU PAS, SOIT LA PERIODE DU MOUVEMENT
< EXPRIMEE EN NOMBRE D'IMAGES.
< (NPERIO) =LE NOMBRE DE PERIODES A REPRESENTER.
<
NPERIO: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'NPERIO'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
NPERIO:: VAL K < 'NPERIO' EST ABSENT...
XEIF%: VAL ENDIF
KP1: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'KP1'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
KP1:: VAL K < 'KP1' EST ABSENT...
XEIF%: VAL ENDIF
KP2: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'KP2'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
KP2:: VAL K < 'KP2' EST ABSENT...
XEIF%: VAL ENDIF
KP3: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'KP3'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
KP3:: VAL K < 'KP3' EST ABSENT...
XEIF%: VAL ENDIF
MULTIS: VAL EXIST < A PRIORI, ON VA GENERER LA SEQUENCE
< PLUSIEURS FOIS...
IF NPERIO-K,XEIF%1,,XEIF%1
IF KP1-K,XEIF%2,,XEIF%2
IF KP2-K,XEIF%3,,XEIF%3
IF KP3-K,XEIF%4,,XEIF%4
MULTIS: VAL NEXIST < ET BIEN NON, LA SEQUENCE NE SERA
< GENEREE QU'UNE SEULE FOIS...
XEIF%4: VAL ENDIF
XEIF%3: VAL ENDIF
XEIF%2: VAL ENDIF
XEIF%1: VAL ENDIF
IF MULTIS-EXIST,XEIF%9,,XEIF%9
BUFVIG: BYTE "(";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIG*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVIG:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIG: BYTE XWOR%2;FAVW < COMMANDE DE MEMORISATION DE L'ADRESSE
< DE DEBUT D'ITERATION...
WORD BUFVIG=FCTA*NOCMO
WORD LBUVIG
BUFVIN: EQU $
IF KP1-K,,XEIF%2,
BYTE "P";KP1=FCBA(MOCD;KP2=FCBA(MOCD;KP3=FCBA(MOCD;KCR
XWOR%1: VAL '0000000@@@@(MOCD
XEIF%2: VAL ENDIF
IF KP1-K,XEIF%1,,XEIF%1
IF KP2-K,,XEIF%2,
BYTE "P";KP2=FCBA(MOCD;KP3=FCBA(MOCD;KCR
XWOR%1: VAL '0000000@@@@(MOCD
XEIF%2: VAL ENDIF
IF KP2-K,XEIF%2,,XEIF%2
IF KP3-K,,XEIF%3,
BYTE "P";KP3=FCBA(MOCD;KCR
XWOR%1: VAL '0000000@@@@(MOCD
XEIF%3: VAL ENDIF
IF KP3-K,XEIF%3,,XEIF%3
IF ATTENTION (KP1,KP2,KP3) EST NUL !!!
XEIF%3: VAL ENDIF
XEIF%2: VAL ENDIF
XEIF%1: VAL ENDIF
XWOR%3: VAL $-BUFVIN*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVIN:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIN: BYTE XWOR%2;FAVW < COMMANDE DE MISE EN PLACE DU PAS
< VARIABLE...
WORD BUFVIN=FCTA*NOCMO
WORD LBUVIN
BUFVI1: BYTE "P";"1";KCR;NILK
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVI1*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVI1:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVI1: BYTE XWOR%2;FAVW < COMMANDE DE RETOUR AU PAS UNITE...
WORD BUFVI1=FCTA*NOCMO
WORD LBUVI1
BUFVID: BYTE ")";KCR
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVID*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVID:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVID: BYTE XWOR%2;FAVW < COMMANDE DE RETOUR EN DEBUT D'ITERATION.
WORD BUFVID=FCTA*NOCMO
WORD LBUVID
BUFVIC: BYTE KCR;NILK
XWOR%1: VAL '0000000@@@@(MOCD
XWOR%3: VAL $-BUFVIC*NOCMO
IF XWOR%1-K,XEIF%,,XEIF%
XWOR%3: VAL XWOR%3-W
XEIF%: VAL ENDIF
LBUVIC:: VAL XWOR%3 < LONGUEUR DE LA COMMANDE AU DISQUE
< VIDEO...
XWOR%2: VAL COSBT?XASSIM=FMASK(K?NVPVDK=FCINST
DEMVIC: BYTE XWOR%2;FAVW < COMMANDE DE PASSAGE A L'IMAGE SUIVANTE.
WORD BUFVIC=FCTA*NOCMO
WORD LBUVIC
XEIF%9: VAL ENDIF
<
<
< C O N S T A N T E M A G I Q U E :
<
<
MAGIK:: VAL 7 < CONSTANTE MAGIQUE...
IF K*MAGIK/BASE16(K=FCREST-K,,XEIF%,
IF ATTENTION : IL FAUT MAGIK(K)=K POUR
IF SIMPLIFIER LES CHOSES EN BASE 16 !!!
XEIF%: VAL ENDIF
XWOR%3: VAL MAGIK < CONSTANTE MAGIQUE...
XWOR%7: VAL K < INITIALISATION DU CUMUL...
NTRN
DO BASE16
XWOR%7: VAL K=FCDO*XWOR%3/BASE16(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8: VAL K < INITIALISATION DU CUMUL...
DO BASE16
XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
TRN
IF XWOR%7-XWOR%8,,XEIF%,
IF ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK'
IF N'OPERE PAS UNE PERMUTATION DES 16 CHIFFRES
IF DE 0 A F !!!
XEIF%: VAL ENDIF
IF K*MAGIK/BASE10(K=FCREST-K,,XEIF%,
IF ATTENTION : IL FAUT MAGIK(K)=K POUR
IF SIMPLIFIER LES CHOSES EN BASE 10 !!!
XEIF%: VAL ENDIF
XWOR%3: VAL MAGIK < CONSTANTE MAGIQUE...
XWOR%7: VAL K < INITIALISATION DU CUMUL...
NTRN
DO BASE10
XWOR%7: VAL K=FCDO*XWOR%3/BASE10(K=FCREST?COSBT=FMASK(K?XWOR%7=FCINST
XWOR%8: VAL K < INITIALISATION DU CUMUL...
DO BASE10
XWOR%8: VAL K=FCDO?COSBT=FMASK(K?XWOR%8=FCINST
TRN
IF XWOR%7-XWOR%8,,XEIF%,
IF ATTENTION : LA CONSTANTE MAGIQUE 'MAGIK'
IF N'OPERE PAS UNE PERMUTATION DES 10 CHIFFRES
IF DE 0 A 9 !!!
XEIF%: VAL ENDIF
AMAGIK: WORD MAGIK
PAGE
<
<
< A C C E L E R A T E U R S D ' A C C E S :
<
<
ACCEX: EQU $ < SI LE BIT DE RANG 'I' EST A 1, CELA
< SIGNIFIE QUE LE PLAN X=I POSSEDE AU
< MOINS UN POINT.
DZS BIT>LOGX/NBITMO
ACCEY: EQU $ < SI LE BIT DE RANG 'I' EST A 1, CELA
< SIGNIFIE QUE LE PLAN Y=I POSSEDE AU
< MOINS UN POINT.
DZS BIT>LOGY/NBITMO
ACCEZ: EQU $ < SI LE BIT DE RANG 'I' EST A 1, CELA
< SIGNIFIE QUE LE PLAN Z=I POSSEDE AU
< MOINS UN POINT.
DZS BIT>LOGZ/NBITMO
PAGE
<
<
< L I S T E D E S P A R T I C U L E S :
<
<
DSEC DPARTI < DEFINITION D'UNE ENTREE :
PARTI: EQU $
PARTIX: WORD NILK < COORDONNEE 'X',
PARTIY: WORD NILK < COORDONNEE 'Y',
PARTIZ: WORD NILK < COORDONNEE 'Z',
LPART:: VAL $-PARTI*NOCMO < LONGUEUR DES COORDONNEES.
LENTR:: VAL 8*NOCMO < LONGUEUR D'UNE ENTREE SUR LA BANDE...
TABLE
NBUF:: VAL 74 < LA LISTE PARTICULES TIENT DANS 74 BUFFERS
< "BANDE"...
PAGE
<
<
< T A B L E D E T R A N S C O D A G E D E S N I V E A U X :
<
<
< ARGUMENTS D'ASSEMBLAGE :
< ND=DIVISEUR DES NIVEAUX DE 'LNIVO' (0 OU 2),
< NI=TRANSLATION DES NIVEAUX DE 'LNIVO' (0 OU 128)...
<
<
NI: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'NI'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
NI:: VAL XXNOIR < LE NIVEAU INITIAL SERA LE NIVEAU NOIR.
XEIF%: VAL ENDIF
ND: @
XWOR%1: VAL KOLF=FMASK+KOLTES=FVAL
XWOR%1: VAL KOLC=FMASK+KDP=FVAL?XWOR%1
XWOR%2: VAL KOLTED=FMASK+KOL0=FVAL
XWOR%2: VAL KOLTEF=FMASK+KOL0+KOLON=FVAL?XWOR%2
XWOR%3: VAL XWOR%2=XWOR%1-KOL0 < LONGUEUR DU SYMBOLE COURANT...
XWOR%4: VAL MSYMBI=FMASK+KOL0=FVAL
XWOR%4: VAL MSYMBL=FMASK+XWOR%3=FVAL?XWOR%4
XWOR%5: VAL XWOR%4=FCSYMT < ETAT DU SYMBOLE 'ND'...
XWOR%6: VAL XWOR%5=FCSIGN
XWOR%7: VAL XWOR%5(MSYMBN)MSYMBN=FCSIGN
IF XWOR%6*XWOR%7,XEIF%,,XEIF%
ND:: VAL W < PAS DE DIVISEUR DES NIVEAUX...
XEIF%: VAL ENDIF
LNIVO: EQU $
NTRN
XWOR%1: VAL NIV256+NOCMO-E/NOCMO
XWOR%2: VAL NIV256/NOCMO(K=FCREST
TRN
XWOR%3: VAL NIV256+XWOR%2
< INCREMENT DES OCTETS GAUCHES,
XWOR%4: VAL XWOR%3+NOCMO-Z
< INCREMENT DES OCTETS DROITS.
NTRN
<*******************************************************************************
DO XWOR%1
BYTE K=FCDO)MFFFF+N-Z*NOCMO+XWOR%3/ND+NI;K=FCDO)MFFFF+N-Z*NOCMO+XWOR%4/ND+NI
XWOR%5: VAL '0000000@@@@ < RECUPERATION DU DERNIER MOT,
<*******************************************************************************
TRN
IF XWOR%2-K,,XEIF%,
XWOR%5: VAL XWOR%5(MOCG < DANS LE CAS D'UNE TABLE DE LONGUEUR
< IMPAIRE, ON EFFACE LE DERNIER OCTET
< GENERE,
$EQU $-D < ON REVIENT D'UN MOT EN ARRIERE,
WORD XWOR%5 < ET ON REGENERE LE DERNIER MOT...
XEIF%: VAL ENDIF
PAGE
<
<
< P I L E D E T R A V A I L :
<
<
STACK: EQU $
DZS 64
PROG
XXXVEC: VAL XXVEC3 < DEFINITION DES PROGRAMMES VECTEUR 512...
CALL #SIP VECTEUR 512#
PAGE
<
<
< M A R Q U A G E D ' U N P O I N T :
<
<
< FONCTION :
< CE SOUS-PROGRAMME MARQUE
< LE POINT ARGUMENT (X,Y) AVEC
< COMME NIVEAU, LE NIVEAU ARGU-
< MENT (A) TRANSCODE VIA LA TA-
< BLE 'LNIVO', CE QUI PERMET PAR
< EXEMPLE LA SUPERPOSITION DE
< PLUSIEURS IMAGES, EN FAISANT
< QUE LEURS TABLES 'LNIVO' SOIENT
< COMPLEMENTAIRES...
<
<
< ARGUMENTS :
< (A)=NIVEAU,
< (X,Y)=COORDONNEES DU POINT.
<
<
< RESULTAT :
< (A)=NIVEAU TRANSCODE.
<
<
POINT: EQU $
PSR A,B
LR A,B < (B)=NIVEAU DU TRACE.
<
< TEST DES "HORS-ECRAN" :
<
LR X,A < (A)=COORDONNEE 'X' ET VALIDATION :
JAL POINT1 < HORS-ECRAN...
CP VECTNC
JG POINT1 < HORS-ECRAN...
LR Y,A < (A)=COORDONNEE 'Y' ET VALIDATION :
JAL POINT1 < HORS-ECRAN...
CP VECTNL
JG POINT1 < HORS-ECRAN...
<
< TRANSCODAGE DU NIVEAU :
<
PSR X < SAUVEGARDE DE LA COORDONNEE 'X'...
LR B,X < (X)=NIVEAU ARGUMENT,
LBY &ALNIVO < (A)=NIVEAU TRANSCODE,
PLR X < RESTAURE :
< (X)=COORDONNEE 'X'.
<
< MARQUAGE DU POINT :
<
BSR ASTORP < MARQUAGE : (X,Y) <-- (A)...
<
< ET RETOUR :
<
POINT1: EQU $
PLR A,B
RSR
PAGE
<
<
< T E S T P E R I O D I Q U E D E ' C O M F L O ' :
<
<
< FONCTION :
< CE SOUS-PROGRAMME EST
< APPELE DERRIERE CHAQUE
< 'FDV' EXPLICITE AINSI
< QU'APRES LES APPELS DE
< 'RAC' ET 'CRAMR'...
<
<
TSFLO: EQU $
PSR A
LA COMFLO < TEST DE 'COMFLO' PAR UN 'LA' AFIN DE NE
< PAS MODIFIER LES CODES (CARY & CO)...
JAE TSFLO1 < OK...
QUIT XXQUIT < E R R E U R P R O G R A M M E ...
< ON A :
< (A)=INDICATEURS FLOTTANTS...
< BIT 0 : UNDERFLOW,
< BIT 1 : OVERFLOW,
< BIT 2 : DIVISION PAR ZERO,
< BIT 3 : 'FIX' IMPOSSIBLE.
STZ COMFLO < PUIS RAZ, CAR CES INDICATEURS SONT
< REMANENTS...
TSFLO1: EQU $
PLR A
RSR
XXXPRO: VAL YYYGOT < 'YYYGOT'.
CALL #SIP UTILITAIRES#
XXXPRO: VAL YYYFLO < 'YYYFLO'.
CALL #SIP UTILITAIRES#
PAGE
<
<
< T R A N S F O R M A T I O N M A T R I C I E L L E :
<
<
< ARGUMENT :
< (X,Y,W)=COORDONNEES (X,Y,Z).
<
<
< RESULTAT :
< (X)=A11*X+A12*Y+A13*Z+TRMATX EVENTUELLEMENT MODULO,
< (Y)=A21*X+A22*Y+A23*Z+TRMATY EVENTUELLEMENT MODULO,
< (W)=A31*X+A32*Y+A33*Z+TRMATZ EVENTUELLEMENT MODULO.
<
<
PRMAT: EQU $
<
< CALCUL DU NOUVEL 'X' :
<
LR X,A < X,
FLT
FMP MAT11 < A11*X,
BSR ASFWOR
LR Y,A < Y,
FLT
FMP MAT12 < A12*Y,
BSR APFWOR < A11*X+A12*Y,
LR W,A < Z,
FLT
FMP MAT13 < A13*Z,
BSR APFWOR < A11*X+A12*Y+A13*Z,
FAD TRMATX < A11*X+A12*Y+A13*Z+TRANSX,
BSR AROND
CPZ IMODX < FAUT-IL CALCULER MODULO SUR 'OX' ???
JE PRMAT1 < NON...
AND BLOGXN < OUI...
PRMAT1: EQU $
PSR A < SAUVEGARDE DU NOUVEL 'X'...
<
< CALCUL DU NOUVEL 'Y' :
<
LR X,A < X,
FLT
FMP MAT21 < A21*X,
BSR ASFWOR
LR Y,A < Y,
FLT
FMP MAT22 < A22*Y,
BSR APFWOR < A21*X+A22*Y,
LR W,A < Z,
FLT
FMP MAT23 < A23*Z,
BSR APFWOR < A21*X+A22*Y+A23*Z,
FAD TRMATY < A21*X+A22*Y+A23*Z+TRANSY,
BSR AROND
CPZ IMODY < FAUT-IL CALCULER MODULO SUR 'OY' ???
JE PRMAT2 < NON...
AND BLOGYN < OUI...
PRMAT2: EQU $
PSR A < SAUVEGARDE DU NOUVEL 'Y'...
<
< CALCUL DU NOUVEAU 'Z' :
<
LR X,A < X,
FLT
FMP MAT31 < A31*X,
BSR ASFWOR
LR Y,A < Y,
FLT
FMP MAT32 < A32*Y,
BSR APFWOR < A31*X+A32*Y,
LR W,A < Z,
FLT
FMP MAT33 < A33*Z,
BSR APFWOR < A31*X+A32*Y+A33*Z,
FAD TRMATZ < A31*X+A32*Y+A33*Z+TRANSZ,
BSR AROND
CPZ IMODZ < FAUT-IL CALCULER MODULO SUR 'OZ' ???
JE PRMAT3 < NON...
AND BLOGZN < OUI...
PRMAT3: EQU $
LR A,W < Z,
PLR A
LR A,Y < Y,
PLR A
LR A,X < X.
<
< RETOUR :
<
RSR
PAGE
<
<
< T R A C E D ' U N D I S Q U E :
<
<
< FONCTION :
< CE MODULE TRACE UN DISQUE EN
< DEGRADE DESTINE A REPRESENTER
< UNE SPHERE PROJETEE.
<
<
< ARGUMENTS :
< (X,Y)=CENTRE DU DISQUE.
<
<
CERCLE: EQU $
CPZ IVISD < FAUT-IL TRACER LES DISQUES ???
JE CERCL4 < NON...
<
< VOISINNAGE DU BORD DE L'ECRAN :
<
LR X,A < VALIDATION DE 'X' :
CP RAYON
JLE CERCL4 < TROP NEGATIF...
AD RAYON
CP VECTNC
JGE CERCL4 < TROP POSITIF...
LR Y,A < VALIDATION DE 'Y' :
CP RAYON
JLE CERCL4 < TROP NEGATIF...
AD RAYON
CP VECTNL
JGE CERCL4 < TROP POSITIF...
<
< INITIALISATIONS :
<
PSR X,Y
LAI PAGER
BSR AGPCDA < POSITIONNEMENT SUR LA PAGE "VISUALISATION
LR X,B < (B)='X' DU CENTRE,
PSR Y < SAUVEGARDE DE 'Y' DU CENTRE.
LA RAYON
SBR A,X < ON SE PLACE EN HAUT ET A GAUCHE
SBR A,Y < D'UN CARRE CIRCONSCRIT AU DISQUE.
STX VECTX1 < INITIALISATION DE L'ABSCISSE INITIALE
< DE CHAQUE LIGNE,
STY VECTY1 < INITIALISATION DE LA COORDONNEE 'Y'.
LA SAVEZ
ADRI Z,A < POUR EVITER LE NOIR...
SLRS DECZDK < AMPLIFICATION...
ADRI -Z,A < ET DESATURATION...
STA SAVEZP < SAUVEGARDE DE LA COORDONNEE 'Z'.
PLR Y < ON A :
< (B,Y)=COORDONNEES DU CENTRE.
CPZ RAYON < LE RAYON EST-IL NUL ???
JG CERCL8 < NON...
BSR APOINT < OUI, ON MARQUE LE CENTRE DU CERCLE (X,Y)
< AVEC LE NIVEAU 'SAVEZP'.
JMP CERCL9 < ET ON SORT...
CERCL8: EQU $
<
< BALAYAGE VERTICAL :
<
LX RAYON
ADR X,X
ADRI Z,X < (X)=NOMBRE DE LIGNES A BALAYER.
CERCL1: EQU $
LA VECTX1
PSR A,X < SAUVEGARDE DE L'ABSCISSE INITIALE
< DE CHAQUE LIGNE (A) ET DU NOMBRE DE
< LIGNES A TRACER (X).
<
< BALAYAGE HORIZONTAL :
<
LX RAYON
ADR X,X
ADRI Z,X < (X)=NOMBRE DE LIGNES A BALAYER.
CERCL2: EQU $
PSR B < SAUVEGARDE DE LA COORDONNEE 'X'
< DU CENTRE.
LA VECTX1 < X1,
SBR B,A < X1-XC,
BSR AFLT
#/FST# FWORK1 < X1-XC,
FMP FWORK1 < (X1-XC)**2,
BSR ASFWOR
LA VECTY1 < Y1,
SBR Y,A < Y1-YC ((XC,YC) DESIGNE LE CENTRE).
BSR AFLT
#/FST# FWORK2 < Y1-YC,
FMP FWORK2 < (Y1-YC)**2,
BSR APFWOR < (X1-XC)**2+(Y1-YC)**2,
BSR ARAC < ET CALCUL DE LA DISTANCE DU POINT
< COURANT (X1,Y1) AU CENTRE (XC,YC) :
BSR ATSFLO
BSR AROND
CP RAYON < EST-ON HORS DU DISQUE ??
JGE CERCL3 < OUI, ON IGNORE CE POINT...
SB RAYON < NON :
NGR A,A < (A)=DISTANCE DU POINT COURANT AU BORD
< DU DISQUE.
CPZ INEW1 < CHOIX DES NIVEAUX :
JE CERCL5 < 2 PLANS 'Z' PARALLELES PEUVENT UTILISER
< DES NIVEAUX COMMUNS...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
ADRI Z,A < DANS CETTE METHODE, LES NIVEAUX SONT
< PROPRES A UN PLAN 'Z'... CE QUI PERMET
< DE LES DISTINGUER...
LR A,B < (B)=DISTANCE AU BORD DU DISQUE TELLE
< QU'ELLE NE SOIT PAS NULLE.
LA SAVEZ < Z,
SLRS DECZDK < CADRAGE,
ADR B,A < (A)=NIVEAU FONCTION DE LA DISTANCE AU
< BORD ET DU 'Z'...
< NOTA : AUTREFOIS, C'ETAIT UN 'ORR' POUR
< CONCATENER, MAIS DANS LA MESURE
< OU 'DECZDK' PEUT ETRE NUL, IL
< FAUT FAIRE UNE OPERATION ARITH-
< METIQUE...
JMP CERCL6 < VERS LE TRACE...
CERCL5: EQU $
MP SAVEZP < DANS CETTE METHODE, 2 PLANS 'Z' PEUVENT
< UTILISER LES MEMES NIVEAUX (EN FAIT SE
< RECOUVRIR...).
DV RAYON < (A)=NIVEAU(DISTANCE AU CENTRE,Z).
CERCL6: EQU $
JAG CERCL7 < OK...
ADRI Z,A < POUR EVITER LE NOIR...
CERCL7: EQU $
PSR X,Y
LX VECTX1
LY VECTY1
BSR APOINT < MARQUAGE DE (X,Y) AVEC LE NIVEAU (A).
PLR X,Y
CERCL3: EQU $
PLR B < RESTAURE L'ABSCISSE DU CENTRE,
IC VECTX1 < ET PROGRESSION SUR LA LIGNE,
JDX CERCL2 < A CONDITION DE N'ETRE POINT EN BOUT
< DE LIGNE...
PLR A,X < RESTAURE :
< (A)='VECTX1' DE DEBUT DE LIGNE,
< (X)=NOMBRE DE LIGNES A TRACER...
STA VECTX1 < ON SE PLACE EN DEBUT
IC VECTY1 < DE LA NOUVELLE LIGNE,
JDX CERCL1 < SI ELLE EXISTE...
<
< ET RETOUR :
<
CERCL9: EQU $
LAI PAGE0
BSR AGPCDA < POSITIONNEMENT SUR LA PAGE DE LA LISTE
< DES COORDONNEES.
PLR X,Y
CERCL4: EQU $
RSR
PAGE
<
<
< P R O J E C T I O N :
<
<
< ARGUMENTS :
< (X,Y,W)=POINT TRI-DIMENSIONNEL.
<
<
< RESULTATS :
< (X,Y)=POINT PROJETE.
<
<
PROJ: EQU $
PSR A,B
LR X,A
SLRS DECX
LR A,X < AMPLIFICATION DE 'X'.
LR Y,A
SLRS DECY
LR A,Y < AMPLIFICATION DE 'Y'.
LR W,A
SLRS DECZ
FLT
PSR A,B < PRISE EN COMPTE DE 'Z' :
FMP COST
BSR AROND
AD TRANSX < ET TRANSLATION,
ADR A,X < X(PROJETE)=X+Z*COS(TETA)+TRANSX.
PLR A,B < PRISE EN COMPTE DE 'Z' :
FMP SINT
BSR AROND
SB TRANSY < ET TRANSLATION,
SBR A,Y < Y(PROJETE)=Y-Z*SIN(TETA)+TRANSY.
PLR A,B
RSR
PAGE
<
<
< M A R Q U A G E D ' U N E P A R T I C U L E
< L E P L A N ( O Y , O Z ) E T A N T L ' E C R A N :
<
<
< ARGUMENT :
< (X,Y)=COORDONNEE 2D DU CENTRE,
< (W)=TROISIEME COORDONNEE DE CE POINT.
<
<
MARKX: EQU $
PSR A,B,X,Y
LR W,A < (A)=TROISIEME COORDONNEE :
CP TXMIN
JL MARKX0 < EN ARRIERE DE LA TRANCHE...
CP TXMAX
JG MARKX0 < EN AVANT DE LA TRANCHE...
LA RAYONP < A PRIORI
MP MULX < HOMOTHETIE
DV DIVX < POUR REDUCTION...
STA RAYON < RAYON COURANT,
LR X,A
MP MULX < HOMOTHETIE
DV DIVX < POUR REDUCTION,
AD TRXX < ET
LR A,X < TRANSLATION.
LR Y,A
MP MULX < HOMOTHETIE
DV DIVX < POUR REDUCTION.
AD TRXY < ET
LR A,Y < TRANSLATION.
BSR ACERCL < ET MARQUAGE DU SITE COURANT PAR SPHERES,
MARKX0: EQU $
PLR A,B,X,Y
RSR
PAGE
<
<
< M A R Q U A G E D ' U N E P A R T I C U L E
< L E P L A N ( O Z , O X ) E T A N T L ' E C R A N :
<
<
< ARGUMENT :
< (X,Y)=COORDONNEE 2D DU CENTRE,
< (W)=TROISIEME COORDONNEE DE CE POINT.
<
<
MARKY: EQU $
PSR A,B,X,Y
LR W,A < (A)=TROISIEME COORDONNEE :
CP TYMIN
JL MARKY0 < EN ARRIERE DE LA TRANCHE...
CP TYMAX
JG MARKY0 < EN AVANT DE LA TRANCHE...
LA RAYONP < A PRIORI
MP MULY < HOMOTHETIE
DV DIVY < POUR REDUCTION...
STA RAYON < RAYON COURANT,
LR X,A
MP MULY < HOMOTHETIE
DV DIVY < POUR REDUCTION,
AD TRYX < ET
LR A,X < TRANSLATION.
LR Y,A
MP MULY < HOMOTHETIE
DV DIVY < POUR REDUCTION.
AD TRYY < ET
LR A,Y < TRANSLATION.
BSR ACERCL < ET MARQUAGE DU SITE COURANT PAR SPHERES,
MARKY0: EQU $
PLR A,B,X,Y
RSR
PAGE
<
<
< M A R Q U A G E D ' U N E P A R T I C U L E
< L E P L A N ( O X , O Y ) E T A N T L ' E C R A N :
<
<
< ARGUMENT :
< (X,Y)=COORDONNEE 2D DU CENTRE,
< (W)=TROISIEME COORDONNEE DE CE POINT.
<
<
MARKZ: EQU $
PSR A,B,X,Y
LR W,A < (A)=TROISIEME COORDONNEE :
CP TZMIN
JL MARKZ0 < EN ARRIERE DE LA TRANCHE...
CP TZMAX
JG MARKZ0 < EN AVANT DE LA TRANCHE...
LA RAYONP < A PRIORI
MP MULZ < HOMOTHETIE
DV DIVZ < POUR REDUCTION...
STA RAYON < RAYON COURANT,
LR X,A
MP MULZ < HOMOTHETIE
DV DIVZ < POUR REDUCTION,
AD TRZX < ET
LR A,X < TRANSLATION.
LR Y,A
MP MULZ < HOMOTHETIE
DV DIVZ < POUR REDUCTION.
AD TRZY < ET
LR A,Y < TRANSLATION.
BSR ACERCL < ET MARQUAGE DU SITE COURANT PAR SPHERES,
MARKZ0: EQU $
PLR A,B,X,Y
RSR
PAGE
<
<
< A C C E S A L A P A R T I C U L E C O U R A N T E :
<
<
< ARGUMENT :
< (RANG)=RANG DE LA PARTICULE COURANTE.
<
<
< RESULTAT :
< (SAVEX,SAVEY,SAVEZ)=COORDONNEES (X,Y,Z) PARTICULE,
< (RANG)=RANG DE LA PARTICULE SUIVANTE.
<
<
GETP: EQU $
PSR A,B,X
DC RANG < A CAUSE DE 'GETPX',' GETPY' ET 'GETPZ'...
LAI LPART/NOCMO
MP RANG
LR B,A < (A)=ADRESSE DE LA PARTICULE EN 'CDAJ',
LRM B,X
WORD COORD < (B)=ADRESSE DES COORDONNEES,
WORD LPART/NOCMO < (X)=NOMBRE DE COORDONNEES.
RCDA
IC RANG < PUIS PASSAGE A LA PARTICULE SUIVANTE...
PLR A,B,X
RSR
PAGE
<
<
< A C C E S A U ' X ' C O U R A N T :
<
<
< ARGUMENT :
< (RANG)=RANG DE LA PARTICULE COURANTE.
<
<
< RESULTAT :
< (SAVEX)=(A)=COORDONNEE 'X' DE LA PARTICULE COURANTE,
< (RANG)=RANG DE LA PARTICULE SUIVANTE.
<
<
GETPX: EQU $
XWOR%1: VAL PARTIX-PARTI
PSR B,X
LAI LPART/NOCMO
MP RANG
LR B,A
ADRI XWOR%1,A
LRM B,X
WORD SAVEX < (B)=ADRESSE DES COORDONNEES,
WORD W < (X)=NOMBRE DE COORDONNEES.
RCDA
IC RANG < PUIS PASSAGE A LA PARTICULE SUIVANTE...
PLR B,X
LA SAVEX < (A)=COORDONNEE 'X' COURANTE...
RSR
PAGE
<
<
< A C C E S A U ' Y ' C O U R A N T :
<
<
< ARGUMENT :
< (RANG)=RANG DE LA PARTICULE COURANTE.
<
<
< RESULTAT :
< (SAVEY)=(A)=COORDONNEE 'Y' DE LA PARTICULE COURANTE,
< (RANG)=RANG DE LA PARTICULE SUIVANTE.
<
<
GETPY: EQU $
XWOR%1: VAL PARTIY-PARTI
PSR B,X
LAI LPART/NOCMO
MP RANG
LR B,A
ADRI XWOR%1,A
LRM B,X
WORD SAVEY < (B)=ADRESSE DES COORDONNEES,
WORD W < (X)=NOMBRE DE COORDONNEES.
RCDA
IC RANG < PUIS PASSAGE A LA PARTICULE SUIVANTE...
PLR B,X
LA SAVEY < (A)=COORDONNEE 'Y' COURANTE...
RSR
PAGE
<
<
< A C C E S A U ' Z ' C O U R A N T :
<
<
< ARGUMENT :
< (RANG)=RANG DE LA PARTICULE COURANTE.
<
<
< RESULTAT :
< (SAVEZ)=(A)=COORDONNEE 'Z' DE LA PARTICULE COURANTE,
< (RANG)=RANG DE LA PARTICULE SUIVANTE.
<
<
GETPZ: EQU $
XWOR%1: VAL PARTIZ-PARTI
PSR B,X
LAI LPART/NOCMO
MP RANG
LR B,A
ADRI XWOR%1,A
LRM B,X
WORD SAVEZ < (B)=ADRESSE DES COORDONNEES,
WORD W < (X)=NOMBRE DE COORDONNEES.
RCDA
IC RANG < PUIS PASSAGE A LA PARTICULE SUIVANTE...
PLR B,X
LA SAVEZ < (A)=COORDONNEE 'Z' COURANTE...
RSR
PAGE
<
<
< A C C E S A L ' O C T E T C O U R A N T :
<
<
< ARGUMENT :
< (IBUFMT)=INDEX DE L'OCTET COURANT.
<
<
< RESULTAT :
< (A)=OCTET COURANT.
<
<
GOCT: EQU $
<
< INITIALISATIONS :
<
PSR B,X
<
< TEST DE L'ETAT DU BUFFER :
<
LA IBUFMT < (A)=INDEX COURANT :
CP ZBUFMT < LE BUFFER A-T'IL ETE VIDE (OU EST-CE
< L'ETAT INITIAL) ???
JL GOCT1 < NON...
<
< CAS OU LE BUFFER EST VIDE :
<
GOCT2: EQU $
LAD DEMMT < (A)=ADRESSE DE LA DEMANDE,
SVC < QUE L'ON ENVOIE...
JE GOCT3 < OK...
QUIT XXQUIT < E R R E U R D ' A S S I G N A T I O N..
JMP GOCT2 < ET ON RE-TENTE, OU BIEN ON ARRETE S'IL
< S'AGIT D'UN 'TAPE-MARK'...
GOCT3: EQU $
IC DEMMT+ARGESC < PREPARATION DE L'ADRESSE DU BLOC SUIVANT,
ACTD XXXSIZ < RECUPERATION DE LA 'BOX'...
LR B,A < (A)=NOMBRE D'OCTETS REELS DU BLOC :
CP DEMMT+COESC < LE BUFFER EST-IL BON ???
JNE GOCT2 < NON, ON LIT L'ENREGISTREMENT SUIVANT...
LAI K < (A)=INDEX DU PREMIER OCTET.
<
< ACCES A L'OCTET COURANT :
<
GOCT1: EQU $
LR A,X < (X)=INDEX DE L'OCTET COURANT,
LBY &ABUFMT < (A)=OCTET COURANT...
ADRI I,X < ET PREPARATION DE
STX IBUFMT < L'ACCES SUIVANT...
<
< ET RETOUR :
<
PLR B,X
RSR
PAGE
<
<
< R E C U P E R A T I O N D E 2 O C T E T S :
<
<
< RESULTAT :
< (A)=UN MOT (2 OCTETS).
<
<
GMOT: EQU $
PSR B
BSR AGOCT < RECUPERATION DU PREMIER OCTET,
SWBR A,B < ET MISE DANS 'B'.
BSR AGOCT < RECUPERATION DU SECOND OCTET,
ORR B,A < ET CONCATENATION DES 2 OCTETS.
PLR B
RSR
PAGE
<
<
< P O I N T D ' E N T R E E :
<
<
DEBUT: EQU $
<
< INITIALISATION DES REGISTRES :
<
LRM C,K
WORD COM+DEPBAS < POSITIONNEMENT DE 'C',
WORD STACK-DEPILE < ET DE 'K'.
<
< CONNEXION A LA 'CDA' :
<
LAI PAGER
BSR AGPCDA < AFIN D'ATTEINDRE LA MEMOIRE DU '68000'
< ET LA MEMOIRE 'SOLAR' QUI LA PRECEDE
< AFIN D'Y METTRE 'BUF'...
<
<
< E N T R Y D E R E B O U C L A G E :
<
<
DEBUT4: EQU $
LA ABLOC0
STA DEMMT+ARGESC < MISE EN PLACE DE L'ADRESSE DU PREMIER
< BLOC A LIRE...
DEBUT9: EQU $
<
< MODIFICATION A PRIORI DU 'PRESC' :
<
LRM A
WORD DEBUT5 < POUR 'XXXPRE'...
ACTD XXXPRE < ON CHANGE ALORS SYSTEMATIQUEMENT APRES
< PASSAGE ICI LE 'PRESC' DU PROGRAMME, AFIN
< DE REVENIR SUR LA VISUALISATION APRES
< CHAQUE ALT-MODE (VIA 'DEBUT5'...).
<
<
< I N I T I A L I S A T I O N S :
<
<
INIT01: EQU $
<
< GESTION DE LA BANDE :
<
INIT10: EQU $
LA LBLOC < (A)=LONGUEUR DES BLOCS PHYSIQUES SUR
< LA BANDE :
JALE INIT11 < BERKKK...
CP LBLOC0 < VALIDATION :
JLE INIT12 < OK...
INIT11: EQU $
QUIT XXQUIT < E R R E U R P A R A M E T R E ...
JMP INIT10 < ET ON RETENTE...
INIT12: EQU $
STA DEMMT+COESC < ET ON INITIALISE LA DEMANDE DE LECTURE...
STA ZBUFMT
STA IBUFMT < POUR PROVOQUER LA LECTURE DU PREMIER
< BLOC...
<
< INITIALISATION A PRIORI
< DES TRACES GRAPHIQUES :
<
LRM A,B,X,Y
WORD CORBT?BANTI=FMASK(K=FCINST
WORD MMOT
WORD K
WORD COSBT?VELODD=FMASK(K?VECTSB=FCINST
STA VECANT < PAS D'ANTI-ALIASING,
STB VEPOIN < PAS DE POINTILLE,
STX VEDECA < PAS DE DECALAGE DES NIVEAUX,
STY VECTRS < MODE 'SBT' EN LOGIQUE BINAIRE.
<
< DONNEES DE PROJECTION :
<
#/FLD# COST < COS(TETA),
FMP COST < COS(TETA)**2,
FSB F1
FNEG < 1-COS(TETA)**2,
BSR ARAC
#/FST# SINT < SIN(TETA).
<
< INITIALISATIONS DE L'IMAGEUR :
<
GEN69: EQU $
CPZ IERASE < FAUT-IL EFFACER ???
JE GEN69N < NON...
IF NEXIST-K,,XEIF%,
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
<
< EFFACEMENT DE L'ECRAN :
<
XWOR%1: VAL NIV256=K
IF BIT>XWOR%1-NIV256,,XWOR%,
IF ATTENTION : LE CALCUL DU MASQUE SELECTANT TOUS
IF LES PLANS EST ABSURDE !!!
XWOR%: VAL ENDIF
LAI NIV256-MASK)MOCD
STA MCDAJ
LA ARPLAN < (A)=ADRESSE DU REGISTRE DE SELECTION...
BSR APWCDA < ET ON SELECTIONNE TOUS LES PLANS...
LAI ERASE
STA MCDAJ
LA ARCMD
BSR APWCDA < EFFACEMENT DE L'ECRAN, ET REINITIALISA-
< TION DE TOUS LES REGISTRES...
LAD TEMPO
SVC < ET ON FAIT UN PETIT DODO...
LAI XCTRL1
STA MCDAJ
LA ACTRL1
BSR APWCDA < INITIALISATION DE 'CTRL1'.
LAI XCTRL2
STA MCDAJ
LA ACTRL2
BSR APWCDA < INITIALISATION DE 'CTRL2'.
GEN69N: EQU $
<
<
< I N I T I A L I S A T I O N D E S A C C E L E R A T E U R S :
<
<
LRM A,X
WORD ACCEX
WORD BIT>LOGX
INIA1: EQU $
ADRI -IJIJDX,X
RBTM O,X < INITIALISATION DE 'ACCEX'.
ADRI IJIJDX,X
JDX INIA1
LRM A,X
WORD ACCEY
WORD BIT>LOGY
INIA2: EQU $
ADRI -IJIJDX,X
RBTM O,X < INITIALISATION DE 'ACCEY'.
ADRI IJIJDX,X
JDX INIA2
LRM A,X
WORD ACCEZ
WORD BIT>LOGZ
INIA3: EQU $
ADRI -IJIJDX,X
RBTM O,X < INITIALISATION DE 'ACCEZ'.
ADRI IJIJDX,X
JDX INIA3
<
<
< V I S U A L I S A T I O N D U C H A M P 3 D :
<
<
LRM X
WORD LBUFMT/LENTR*NBUF
< (X)=NOMBRE DE POINTS A TRAITER.
STZ RANG < RANG DE LA PREMIERE PARTICULE.
LAI PAGE0
BSR AGPCDA < ET POSITIONNEMENT SUR LA LISTE DES
< PARTICULES EN 'CDAJ'...
TROU01: EQU $
<
< RECUPERATION DU POINT COURANT :
<
PSR X
BSR AGMOT
LR A,X < COORDONNEE 'X',
STA SAVEX
BSR AGMOT
LR A,Y < COORDONNEE 'Y',
STA SAVEY
BSR AGMOT
LR A,W < COORDONNEE 'Z',
STA SAVEZ
PSR X
LRM A
WORD ACCEX
SBTM O,X < ACCELERATEUR DU PLAN 'X',
LR Y,X
ADRI ACCEY-ACCEX,A
SBTM O,X < ACCELERATEUR DU PLAN 'Y',
LR W,X
ADRI ACCEZ-ACCEY,A
SBTM O,X < ACCELERATEUR DU PLAN 'Z'.
PLR X
DO LENTR-LPART/NOCMO
BSR AGMOT < ON SAUTE LES ZEROS...
LAI LPART/NOCMO
MP RANG
LR B,A < (A)=ADRESSE DE LA PARTICULE EN 'CDAJ',
LRM B,X
WORD COORD < (B)=ADRESSE DES COORDONNEES,
WORD LPART/NOCMO < (X)=NOMBRE DE COORDONNEES.
WCDA
IC RANG < ET PASSAGE A LA PARTICULE SUIVANTE...
<
< PASSAGE AU POINT SUIVANT :
<
PLR X
JDX TROU01 < S'IL EXISTE...
<
<
< V I S U A L I S A T I O N D A N S L E P L A N ( O Y , O Z ) :
<
<
CPZ IVISDX < DOIT-ON OUVRIR CETTE FENETRE ???
JE TROUX0 < NON...
<
< BALAYAGE PLAN PAR PLAN :
<
LRM X,Y < OUI :
WORD BIT>LOGX < (X)=NOMBRE DE PLANS A TESTER,
WORD K < (Y)=NUMERO DU PREMIER PLAN A TESTER.
TROUX1: EQU $
PSR X
<
< PRE-TEST DU PLAN 'X' :
<
LR Y,B < (B)=NUMERO DU PLAN COURANT.
PSR X,Y
LR Y,X < (X)=RANG DU PREMIER BIT A TESTER,
LRM A
WORD ACCEX < (A)=ADRESSE DE L'ACCELERATEUR 'X',
< (Y)=RANG DU PREMIER BIT A NE PAS TESTER.
DRBM
JC TROUX4 < RIEN TROUVE...
SBTM O,X < TROUVE, IL A ETE EFFACE, ON LE RESATURE..
TROUX4: EQU $
CPR B,X < LE PREMIER PLAN OCCUPE (X) EST-IL LE
< PLAN COURANT (B) ???
PLR X,Y
JNE TROUX5 < NON...
<
< BALAYAGE DE LA LISTE DES PARTICULES :
<
STZ RANG < RANG DE LA PREMIERE PARTICULE.
LRM X
WORD LBUFMT/LENTR*NBUF
< (X)=NOMBRE DE PARTICULES.
TROUX3: EQU $
BSR AGETPX < RECUPERATION DE LA PARTICULE COURANTE :
< (A)=COORDONNEE 'X' DE LA PARTICULE
< COURANTE :
CPR A,Y < EST-ELLE DANS LE PLAN COURANT ???
JNE TROUX2 < NON, ON L'IGNORE...
<
< TRAITEMENT D'UNE PARTICULE :
<
BSR AGETP < RECUPERATION COMPLETE...
PSR X,Y,W < OUI, ON LA TRAITE :
LX SAVEY < (X)=COORDONNEE 'Y',
LY SAVEZ < (Y)=COORDONNEE 'Z',
LA SAVEX < (A)=COORDONNEE 'X',
LR A,W < (W)=COORDONNEE 'Z'.
BSR APROJ < PROJECTION (X,Y,W) --> (X,Y),
BSR AMARKX < ET MARQUAGE...
PLR X,Y,W < RESTAURATION,
TROUX2: EQU $
JDX TROUX3 < ET A LA PARTICULE SUIVANTE...
TROUX5: EQU $
PLR X < SI TOUTE LA LISTE A ETE EXPLOREE,
ADRI I,Y < ON PASSE AU PLAN SUIVANT,
JDX TROUX1 < S'IL EXISTE...
TROUX0: EQU $
<
<
< V I S U A L I S A T I O N D A N S L E P L A N ( O Z , O X ) :
<
<
CPZ IVISDY < DOIT-ON OUVRIR CETTE FENETRE ???
JE TROUY0 < NON...
<
< BALAYAGE PLAN PAR PLAN :
<
LRM X,Y < OUI :
WORD BIT>LOGY < (X)=NOMBRE DE PLANS A TESTER,
WORD K < (Y)=NUMERO DU PREMIER PLAN A TESTER.
TROUY1: EQU $
PSR X
<
< PRE-TEST DU PLAN 'Y' :
<
LR Y,B < (B)=NUMERO DU PLAN COURANT.
PSR X,Y
LR Y,X < (X)=RANG DU PREMIER BIT A TESTER,
LRM A
WORD ACCEY < (A)=ADRESSE DE L'ACCELERATEUR 'Y',
< (Y)=RANG DU PREMIER BIT A NE PAS TESTER.
DRBM
JC TROUY4 < RIEN TROUVE...
SBTM O,X < TROUVE, IL A ETE EFFACE, ON LE RESATURE..
TROUY4: EQU $
CPR B,X < LE PREMIER PLAN OCCUPE (X) EST-IL LE
< PLAN COURANT (B) ???
PLR X,Y
JNE TROUY5 < NON...
<
< BALAYAGE DE LA LISTE DES PARTICULES :
<
STZ RANG < RANG DE LA PREMIERE PARTICULE.
LRM X
WORD LBUFMT/LENTR*NBUF
< (X)=NOMBRE DE PARTICULES.
TROUY3: EQU $
BSR AGETPY < RECUPERATION DE LA PARTICULE COURANTE :
< (A)=COORDONNEE 'Y' DE LA PARTICULE
< COURANTE :
CPR A,Y < EST-ELLE DANS LE PLAN COURANT ???
JNE TROUY2 < NON, ON L'IGNORE...
<
< TRAITEMENT D'UNE PARTICULE :
<
BSR AGETP < RECUPERATION COMPLETE...
PSR X,Y,W < OUI, ON LA TRAITE :
LX SAVEZ < (X)=COORDONNEE 'Z',
LY SAVEX < (Y)=COORDONNEE 'X',
LA SAVEY < (A)=COORDONNEE 'Y',
LR A,W < (W)=COORDONNEE 'Z'.
BSR APROJ < PROJECTION (X,Y,W) --> (X,Y),
BSR AMARKY < ET MARQUAGE...
PLR X,Y,W < RESTAURATION,
TROUY2: EQU $
JDX TROUY3 < ET A LA PARTICULE SUIVANTE...
TROUY5: EQU $
PLR X < SI TOUTE LA LISTE A ETE EXPLOREE,
ADRI I,Y < ON PASSE AU PLAN SUIVANT,
JDX TROUY1 < S'IL EXISTE...
TROUY0: EQU $
<
<
< V I S U A L I S A T I O N D A N S L E P L A N ( O X , O Y ) :
<
<
CPZ IVISDZ < DOIT-ON OUVRIR CETTE FENETRE ???
JE TROUZ0 < NON...
<
< BALAYAGE PLAN PAR PLAN :
<
LRM X,Y < OUI :
WORD BIT>LOGZ < (X)=NOMBRE DE PLANS A TESTER,
WORD K < (Y)=NUMERO DU PREMIER PLAN A TESTER.
TROUZ1: EQU $
PSR X
<
< PRE-TEST DU PLAN 'Z' :
<
LR Y,B < (B)=NUMERO DU PLAN COURANT.
PSR X,Y
LR Y,X < (X)=RANG DU PREMIER BIT A TESTER,
LRM A
WORD ACCEZ < (A)=ADRESSE DE L'ACCELERATEUR 'Z',
< (Y)=RANG DU PREMIER BIT A NE PAS TESTER.
DRBM
JC TROUZ4 < RIEN TROUVE...
SBTM O,X < TROUVE, IL A ETE EFFACE, ON LE RESATURE..
TROUZ4: EQU $
CPR B,X < LE PREMIER PLAN OCCUPE (X) EST-IL LE
< PLAN COURANT (B) ???
PLR X,Y
JNE TROUZ5 < NON...
<
< BALAYAGE DE LA LISTE DES PARTICULES :
<
STZ RANG < RANG DE LA PARTICULE COURANTE.
LRM X
WORD LBUFMT/LENTR*NBUF
< (X)=NOMBRE DE PARTICULES.
TROUZ3: EQU $
BSR AGETPZ < RECUPERATION DE LA PARTICULE COURANTE :
< (A)=COORDONNEE 'Z' DE LA PARTICULE
< COURANTE :
CPR A,Y < EST-ELLE DANS LE PLAN COURANT ???
JNE TROUZ2 < NON, ON L'IGNORE...
<
< TRAITEMENT D'UNE PARTICULE :
<
BSR AGETP < RECUPERATION COMPLETE...
PSR X,Y,W < OUI, ON LA TRAITE :
LX SAVEX < (X)=COORDONNEE 'X',
LY SAVEY < (Y)=COORDONNEE 'Y',
LA SAVEZ < (A)=COORDONNEE 'Z',
LR A,W < (W)=COORDONNEE 'Z'.
BSR APROJ < PROJECTION (X,Y,W) --> (X,Y),
BSR AMARKZ < ET MARQUAGE...
PLR X,Y,W < RESTAURATION,
TROUZ2: EQU $
JDX TROUZ3 < ET A LA PARTICULE SUIVANTE...
TROUZ5: EQU $
PLR X < SI TOUTE LA LISTE A ETE EXPLOREE,
ADRI I,Y < ON PASSE AU PLAN SUIVANT,
JDX TROUZ1 < S'IL EXISTE...
TROUZ0: EQU $
<
<
< T R A I T E M E N T D E F I N :
<
<
CPZ IQUIT < FAUT-IL S'ARRETER ???
JE GEN410 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
QUIT XXQUIT < OUI...
GEN410: EQU $
CPZ IVIDEO < FAUT-IL ECRIRE ???
JE GEN400 < NON...
IF EXIST-K,XEIF%,,XEIF%
IF ATTENTION : LE TEST CI-DESSUS EST IDIOT !!!
XEIF%: VAL ENDIF
PSR X < OUI :
IF MULTIS-NEXIST,XEIF%,,XEIF%
LAD DEMVIW
SVC < ON ECRIT L'IMAGE COURANTE...
LAD DEMVIR
SVC < ET ON ATTEND L'ACQUITTEMENT...
XEIF%: VAL ENDIF
IF MULTIS-EXIST,XEIF%,,XEIF%
LAD DEMVIG
SVC < ON MEMORISE L'ADRESSE COURANTE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LAD DEMVIN
SVC < ON ENVOIE LE PAS (KP1,KP2,KP3)...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LRM X
WORD NPERIO < (X)=NOMBRE D'IMAGES A ECRIRE=NOMBRE
< DE PERIODES.
GEN999: EQU $
PSR X
LAD DEMVIW
SVC < ECRITURE D'UNE IMAGE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
PLR X
JDX GEN999 < VERS L'IMAGE SUIVANTE...
LAD DEMVI1
SVC < RESTAURATION DU PAS UNITE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LAD DEMVID
SVC < RETOUR EN DEBUT DE SEQUENCE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
LAD DEMVIC
SVC < ET PROGRESSION UNITAIRE DE L'IMAGE
< COURANTE...
LAD DEMVIR
SVC < ATTENTE DE L'ACQUITTEMENT...
XEIF%: VAL ENDIF
PLR X
GEN400: EQU $
BR ADEB9 < A L'IMAGE SUIVANTE...
<
<
< E N T R Y A L T - M O D E :
<
<
DEBUT5: EQU $
QUIT XXQUIT < A T T E N T E ...
LRM C,K < ON REINITIALISE 'C' ET 'K' AU CAS
< D'UNE RE-ENTREE PAR UN 'ALT-MODE'...
WORD COM+DEPBAS < 'C',
WORD STACK-DEPILE < 'K'.
BSR AGOTO
WORD DEBUT4 < (A)=ADRESSE D'ITERATION SUR ALT-MODE...
PAGE
<
<
< U P D A T E S :
<
<
$EQU COST
FLOAT 0.8 < COS(TETA).
$EQU TRANSX
WORD 0 < TRANSLATION DE X(PROJETE).
$EQU TRANSY
WORD 0 < TRANSLATION DE Y(PROJETE).
$EQU RAYONP
WORD 4 < RAYON DES PARTICULES.
$EQU MULX
WORD W < MULTIPLICATEUR POUR LA FENETRE (OZ,OX).
$EQU DIVX
WORD XXXMOY < DIVISEUR POUR LA FENETRE (OZ,OX).
$EQU TRXX
WORD BIT>LOGX/XXXMOY < TRANSLATION DE
$EQU TRXY
WORD BIT>LOGY/XXXMOY < LA FENETRE (OZ,OX)
$EQU MULY
WORD W < MULTIPLICATEUR POUR LA FENETRE (OY,OZ).
$EQU DIVY
WORD XXXMOY < DIVISEUR POUR LA FENETRE (OY,OZ).
$EQU TRYX
WORD K < TRANSLATION DE
$EQU TRYY
WORD BIT>LOGY/XXXMOY < LA FENETRE (OY,OZ)
$EQU MULZ
WORD W < MULTIPLICATEUR POUR LA FENETRE (OX,OY).
$EQU DIVZ
WORD W < DIVISEUR POUR LA FENETRE (OX,OY).
$EQU TRZX
WORD K < TRANSLATION DE
$EQU TRZY
WORD K < LA FENETRE (OX,OY)
$EQU TXMIN
WORD K < FACE ARRIERE DE LA TRANCHE SUR OX,
$EQU TXMAX
WORD BIT>LOGX-Z < FACE AVANT DE LA TRANCHE SUR OX.
$EQU TYMIN
WORD K < FACE ARRIERE DE LA TRANCHE SUR OY,
$EQU TYMAX
WORD BIT>LOGY-Z < FACE AVANT DE LA TRANCHE SUR OY.
$EQU TZMIN
WORD K < FACE ARRIERE DE LA TRANCHE SUR OZ,
$EQU TZMAX
WORD BIT>LOGZ-Z < FACE AVANT DE LA TRANCHE SUR OZ.
$EQU MAT11
FLOAT 1.0 < A11,
$EQU MAT12
FLOAT 0.0 < A12,
$EQU MAT13
FLOAT 0.0 < A13.
$EQU MAT21
FLOAT 0.0 < A11,
$EQU MAT22
FLOAT 1.0 < A22,
$EQU MAT23
FLOAT 0.0 < A23.
$EQU MAT31
FLOAT 0.0 < A31,
$EQU MAT32
FLOAT 0.0 < A32,
$EQU MAT33
FLOAT 1.0 < A33.
$EQU TRMATX
WORD 0 < TRANSLATION SUR 'OX' TRANSFORME.
$EQU TRMATY
WORD 0 < TRANSLATION SUR 'OY' TRANSFORME.
$EQU TRMATZ
WORD 0 < TRANSLATION SUR 'OZ' TRANSFORME.
PAGE
<
<
< T A B L E D E S S Y M B O L E S :
<
<
IF '00000000000@,XEIF%,,XEIF%
EST
XEIF%: VAL ENDIF
DATE
END DEBUT
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.