NMP: VAL " +" NMPROC:: VAL NMP < ATTENTION " +" N'A PAS DE VERSION NON < INTERPRETATIVE... IDP " + - VERSION DE ' =' SPACIEUSE..." IDP "RELEASE 03/05/1983" EOT #SIP OPTIONS +# EOT #SIP DEFINITION CMS5# EOT #SIP DEF PROCESSEUR# PROG WORD TW < POINT D'ENTREE... WORD 0 PTW: EQU $ < DOIT VALOIR '12... LRP L BR -2,L < ENTREE DANS LE PROCESSEUR... EOT #SIP DEFINITION ITEM# ITEM2: EQU ZERO+PILE-LTNI-LTNI ITEM1: EQU ITEM2+LTNI EOT #SIP IMAGE 256# NBITMO: VAL 16 < NOMBRE DE BITS PAR MOT. NOCMO: VAL 2 < NOMBRE D'OCTETS PAR MOT... NBITOC: VAL NBITMO/NOCMO < NOMBRE DE BITS PAR OCTET... NBRHEX: VAL 4 < NOMBRE DE CHIFFRES HEXAS PAR MOT. BIT: VAL 1 NMOTL: VAL CNMPL < NOMBRE DE MOTS PAR LIGNE. NLIG: VAL LIMAG/NMOTL < NOMBRE DE LIGNES PAR TRAME. NLIGM1: VAL NLIG-1 < ORDONNEE MAXIMALE. XWOR%1: VAL NLIGM1+1 XWOR%2: VAL XWOR%1=0 IF BIT>XWOR%2-XWOR%1,,XWOR%, IF ATTENTION : 'NLIGM1' DOIT ETRE UN MASQUE !!! XWOR%: VAL 0 NPOLM1: VAL NMOTL*NBITMO-1 < ABSCISSE MAXIMALE. XWOR%1: VAL NPOLM1+1 XWOR%2: VAL XWOR%1=0 IF BIT>XWOR%2-XWOR%1,,XWOR%, IF ATTENTION : 'NPOLM1' DOIT ETRE UN MASQUE !!! XWOR%: VAL 0 NCOOL: VAL 3 < NOMBRE DE COULEURS DE BASE. NIVMAX: VAL BIT>NCOOL-BIT < NIVEAU MAX RECONNU. MFFFF: VAL 'FFFF < MASQUE DU MOT. EOT: VAL '04 < CARACTERE 'EOT'. SGNDLN: VAL 3 < FONCTION DE DELETE SGN, SGNSTN: VAL 4 < FONCTION DE STORE SGN, SGNLON: VAL 5 < FONCTION DE LOAD SOUS ACN SGN, SGNLNS: VAL 6 < FONCTION DE LOAD SOUS :SYS SGN. PAGE < < < D E F I N I T I O N D E L ' I M A G E : < < NOM: EQU ZERO+PILE+5-LNOM < < IMAGE VISUALISEE : < IMAG: EQU NOM+LNOM IMAGE: EQU IMAG IMAGR: EQU IMAGE+0 IMAGV: EQU IMAGR+LIMAG IMAGB: EQU IMAGV+LIMAG TV1:: VAL 0 < ADRESSE DE LA MEMOIRE DE VISUALISATION < EN 'CDAI'. IF TV1-0,,XWOR%, IF TV1 DOIT ETRE NUL, SINON, DE NOMBREUSES IF SEQUENCES DE CODE SONT MAUVAISES !!! XWOR%: VAL 0 < < MASQUE DE L'IMAGE : < AMASK:: VAL NCOOL*LIMAG+TV1 < ADRESSE DU MASQUE DANS LA 'CDA'. < < Z-BUFFER RESIDENT : < IZBUF:: VAL AMASK+LIMAG < DEBUT DU BLOC COURANT DU Z-BUFFER DANS < LA 'CDA' QUAND ON EST EN '!CDAI'... LIZBUF:: VAL '1000/2 < LE Z-BUFFER EST DECOUPE EN BLOCS DE < 2K MOTS, LEZBUF:: VAL 2 < MAIS, OH SURPRISES, LE Z-BUFFER DE " +" < PEUT CONTENIR EN OPTION DES ENTREES DE < 2 MOTS : ZBUF0:: MOT 0 < PREMIER MOT (OBLIGATOIRE D'UNE ENTREE), ZBUF1:: MOT ZBUF0+1 < DEUXIEME MOT (FACULTATIF ; NE MANGE PAS < DE PLACE LORSQU'IL EST ABSENT...). NZBUF:: VAL 16*2*LEZBUF < CE QUI FAIT DONC 32 BLOCS (OU 64...). IZBUF1:: VAL IZBUF+LIZBUF < ET EN RESIDENT ON A 2 BUFFERS 'IZBUF' < ET 'IZBUF1'... XWOR%1: VAL 1024 XWOR%2: VAL LIZBUF/XWOR%1*NZBUF XWOR%3: VAL LIMAG/XWOR%1*NBITMO*LEZBUF IF XWOR%3-XWOR%2,,XWOR%, IF ATTENTION : LIZBUF ET NZBUF INCOMPATIBLES !!! XWOR%: VAL 0 LSDKU:: VAL 128 NSDKU:: VAL LIZBUF/LSDKU < INCREMENT DE PASSAGE D'UN BLOC DU < Z-BUFFER AU SUIVANT SUR 'DKU'... < < IMAGE 'TV2' : < TV2:: VAL IZBUF1+LIZBUF < ADRESSE DE LA DEUXIEME IMAGE SCRATCH < UTILISEE EN PARTICULIER POUR LA MODU- < LATION D'AMPLITUDE SUR LA NORMALE. < < POUR SAUVEGARDER L'ITEM1 EN ENTIER : < SAVIT1:: VAL NCOOL*LIMAG+TV2 < ZONE DE SAUVEGARDE DE L'ITEM1 EN < ENTIER... LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE < L'EOT A PRIORI... PAGE IF XOPT05-XXX512,XOPT5,,XOPT5 ENDIF:: VAL 0 < A CAUSE DU #SIP IMAGE 512# QUI SUIT... XXXIMA: VAL -1 < POUR NE DEFINIR QUE 'XXIMA'... EOT #SIP IMAGE 512# XXXIMA: VAL XXIMA1 EOT #SIP IMAGE 512# YYYIMA:: VAL YYYIM1 XOPT5: VAL 0 PROG PAGE < < < M E S S A G E S : < < MMCDA: BYTE 5;'6D MCDAI: ASCI "!CDA" IF XOPT05-XXX256,XOPT5,,XOPT5 CDA256:: VAL "I" BYTE CDA256;EOT XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 CDA512:: VAL "J" BMCDAI: BYTE CDA512;"+";PAGER='FA00(MOCD;EOT XOPT5: VAL 0 MCDA: ASCI "!CDA" BYTE EOT;0 REP: DZS NBRHEX/NOCMO < BUFFER DES REPONSES. MERR: BYTE 1;"?" < < PILE DU PROCESSEUR : < LSTACK:: VAL 44+8 < LONGUEUR DE LA PILE DE TRAVAIL. STACK: EQU $ DZS LSTACK PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < CONSTANTES : < NSD: ASCI "SD" < NOM DE L'OVERLAY D'APPEL. TCALL: WORD "GE";"EI" < NOM DES OVERLAYS DE RETOUR SI ALT-MODE. NCALL: WORD TCALL,X NPCALL: WORD 0 < NOM DU PROCESSEUR DE RETOUR SI ALT-MODE. SAVEK: WORD 0 < SAUVEGARDE DU REGISTRE 'K'. KIN: WORD -1 < COMPTEUR DES ENTREES... KIN2: WORD -1 < INDICATEUR DE SAUVEGARDE DE L'ITEM1 < FAITE (SI =0). NMOTS: WORD LTNI < POUR NE RAZER QUE L'ITEM2... IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... ICOLLI: WORD 0 < INDICATEUR DE COLLISION : < =0 : FAUSSE COLLISION, < #0 : VRAIE COLLISION (SUR LES 3 COORDON- < NEES). < < DONNEES DE SIMULATION DES ENTREES : < IEG: WORD 0 < INDEX COURANT DE L'ITEM1. NCP: WORD NBCAR*NBLIG-LNOM < LONGUEUR MAX D'UN ITEM, < ON RETRANCHE LNOM, CAR LE NOM < D'UNE IMAGE DOIT ETRE IMPERATIVEMENT < DEVANT L'IMAGE... AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1. ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT. < < RELAIS DE TABLES, D'IMAGES... < ACOM: WORD KOM,X < TABLE DES COMMANDES RECONNUES. AMERR: EQU MERR < MESSAGE D'ERREUR. AREP: WORD REP < ACCES AU BUFFER DE REPONSE... AREPX: WORD REP,X < DE MEME EN INDEXE... AMCDAI: EQU MCDAI < !CDAI. AMCDA: EQU MCDA < !CDA. AMMCDA: EQU MMCDA < !CDA. AITEM2: WORD ITEM2-1,X < POUR RAZER LES ITEMS 1 ET 2. AEOT: WORD NOM+LNOMP < POUR FORCER UN EOT... IF XOPT08-XXXOUI,XOPT8,,XOPT8 ANMAIL: WORD NMAIL1,X < RELAI VERS LE NOM HEXA-DECIMAL D'UN < NOEUD DU MAILLAGE. XOPT8: VAL 0 < < RELAIS DE SOUS-PROGRAMMES : < AOVL: WORD OVL < CHARGEMENT DES OVERLAYS... ARITEM: WORD RITEM < ENVOI DE "!CDAI", ET RESTAURATION DE < L'ITEM1... AENTER: WORD ENTER < ENTREE DE QUELQUE CHOSE SUR LA VISU... AIN: WORD IN < ENTREE D'UN CARACTERE, AIHEX: WORD IHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX, AIFLOT: WORD IFLOT < ENTREE D'UNE CONSTANTE FLOTTANTE. AIFLOS: WORD IFLOS < ENTREE D'UNE CONSTANTE FLOTTANTE < D'ADRESSE DONNEE. AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE ACCI: WORD CCI < ACCES AU CCI. AGOSGN: WORD GOSGN < POUR ACCEDER AU SGN... ASPTR: WORD SPTR < (XS,YS) <-- TRANS(XR,YR). ASPTR1: WORD SPTR1 < SORTIE DU S/P DE TRANS... APTRAN: WORD PTRANS < COEFFICIENT MATRICE 3*3. AMATR: WORD MATR < APPLICATION DE LA TRANSFORMATION < MATRICIELLE EVENTUELLEMENT. APROJ: WORD PROJ < PROJECTION 3D --> 2D. ASPOP: WORD SPOP < APPLICATION DE LA TRANSFORMATION... ALOOP: WORD LOOP < BOUCLE DE L'INTERROGATION. AERROR: WORD ERROR < BRANCHEMENT EN ERREUR... AQUAD4: WORD QUAD4 < RELAI VERS QUAD4. AQUAD3: WORD QUAD3 < RELAI VERS QUAD3. ASPVU: WORD SPVU < CALCUL DE 'TU', ASPVV: WORD SPVV < CALCUL DE 'TV', ASPVW: WORD SPVW < CALCUL DE 'TW'. ASTXS: WORD STXS < STORE 'FXS', ASTYS: WORD STYS < 'FYS', ASTZS: WORD STZS < ET 'FZS'. AINTER: WORD PINTER < SOUS-PROGRAMME D'INTERPOLATION SUR < UN CARRE... APIN: EQU AIN APIHEX: EQU AIHEX AALTM: WORD ALTM < TRAITEMENT DES RETOURS BRUTAUX... ANECL: WORD NECL < RELAI... PTNVU: WORD SPTR1X < RELAI... < < DEMANDES A CMS5 : < DEMIN: WORD '0101 < ENTREE D'UN CARACTERE DE REPONSE. WORD REP-ZERO*NOCMO WORD 1 DEMHEX: WORD '0101 < ENTREE D'UN NOMBRE HEXA-DECIMAL. WORD REP-ZERO*NOCMO WORD NBRHEX DEMOUT: WORD '0202 < ECRITURE D'UN MESSAGE SUR LA VISU. WORD MERR-ZERO*NOCMO+1 WORD 1 < MESSAGE D'ERREUR POUR " P"... DEMMEM: WORD 4 < DEMANDE DE 16 K MOTS... RELMEM: WORD 4 < RETOUR A 4K MOTS... WORD '8000 WORD '2000 NOMBB:: VAL "," < NOM DE LA BRANCHE D'OVERLAY. NOMOV1:: VAL " ">NBITOC?NOMBB DEMCC: WORD 2 < ACCES AU CCI INTERPRETATIF. WORD 0 < ADRESSE DE LA CARTE. WORD 80 NOMIN: WORD '0101 < ENTREE DU NOM D'UNE IMAGE. WORD NOM-ZERO*NOCMO WORD LNOMP*NOCMO SGN: WORD '0002 < POUR LES ACCES AU SGN. WORD NOM-ZERO*NOCMO WORD LIMAG*NCOOL+LNOM*NOCMO WORD -1 < LA VALEUR SUIT LE NOM... TVDKU: VAL '8A01 < ACCES A 'DKU' POUR LA 'TV'. DEMTV0: WORD TVDKU < DEMANDE D'ENVOI D'UNE IMAGE DE 'TV' < EN MODE ENTRELACE. WORD IMAGE-ZERO*NOCMO WORD LIMAG*NOCMO*NCOOL WORD 0 DEMOVL: BYTE '80?SGNLNS;'02 < CHARGEMENT PARTIEL DE L'OVERLAY. WORD OVLTZ2 WORD LOVL2 WORD -1 DEMOVG: BYTE '80?SGNLNS;'02 < CHARGEMENT GLOBAL DE L'OVERLAY. WORD OVLTZ2 WORD LOVLG WORD -1 DEMLOD: BYTE '80?SGNLNS;'02 < DEMANDE DE CHARGEMENT DE "GE". WORD BRANCH-ZERO*NOCMO WORD ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO WORD -1 IF XOPT08-XXXOUI,XOPT8,,XOPT8 DEMDMA: BYTE '80?SGNDLN;'02 < DEMANDE DE DELETE D'UN NOEUD ANTERIEUR. WORD NMAIL2 WORD LNMAIL WORD -1 DEMSMA: BYTE '80?SGNSTN;'02 < DEMANDE DE CREATION D'UN NOEUD. WORD NMAIL2 WORD LMAIL WORD -1 XOPT8: VAL 0 < < DONNEES POUR DETERMINER LA TRANSFORMEE < DU CARRE DE BASE DU MAILLAGE DE L'IMAGE < DE BASE : < IINTER: WORD 0 < INDICATEUR D'INTERPOLATION DANS LES < CARRES DE BASE : < =0 : OUI, ON INTERPOLE ==> SURFACE PRES- < QUE SANS TROUS... < =1 : NON, MODE RAPIDE ; CHAQUE POINT < DONNE NAISSANCE A UN POINT SUR LA < SURFACE QUI EST ALORS FAITE QUE DE < TROUS, MAIS CELA VA TELLEMENT PLUS < VITE... SCALD: FLOAT 1 < FACTEUR D'ECHELLE DE LA PLUS GRANDE < DIAGONALE DE LA TRANSFORMEE DU CARRE < DE BASE (1 EN GENERAL, SAUF CAS VICIEUX < DES IMAGES FRACTALES...). FPASU: FLOAT 0 < PAS DU MAILLAGE INTERIEUR AU CARRE < LE LONG DE 'U', FPASV: FLOAT 0 < ET LE LONG DE 'V' ; ILS SONT DIFFERENTS < A CAUSE DE 'FDELX' ET 'FDELY' DE SOUS- < ECHANTILLONNAGE... < UNITE DE L'IMAGE DE BASE. IDERIV: WORD 1 < 1 : LES CONSTANTES DE DERIVATION 'FHU/V' < ET 'F2H' SONT FIXES ARBITRAIREMENT < A L'INITIALISATION OU PAR LA COMMAN- < DE "X XXXX YYYY", TEL QUE LA FRACTION < XXXX/YYYY>0... < 0 : DANS LE CAS, OU L'ON DONNE LA < FRACTION XXXX/YYYY<0, ALORS LA CONS- < TANTE DE DERIVATION 'FHU/V' EST RECAL < CULEE POUR CHAQUE CARRE DE BASE TELLE < QUE : FH=FKH*FPAS (TRES UTILE POUR LE < FONCTIONS FRACTALES). FKH: FLOAT 0 < MULTIPLICATEUR DE 'FPAS' POUR DONNER < 'FH' LORSQUE IDERIV=0 ; FKH=-XXXX/YYYY. MINU: FLOAT 0 < MIN(U), MAXU: FLOAT 0 < MAX(U). MINV: FLOAT 0 < MIN(V), MAXV: FLOAT 0 < MAX(V). INFINI: FLOAT 100000 IALIAS: WORD 0 < 0 : PAS D'INTERPOLATION SUR LES NIVEAUX, < 1 : INTERPOLATION SUR LES NIVEAUX DE < GRIS A L'INTERIEUR DE LA TRANSFORMEE < DE CHAQUE CARRE ELEMENTAIRE EN < AUTORISANT TOUS LES NIVEAUX DU < NOIR AU BLANC, < -1: DE MEME, EN COMPRIMANT LES NIVEAUX < ENTRE LE ROUGE ET LE BLANC... < < DEFINITION D'UNE LISTE DE < 4 VALEURS A INTERPOLER : < NFLOT:: VAL 4 < NOMBRE DE VALEURS... LFLOT:: VAL 2 < LONGUEUR D'UN NOMBRE FLOTTANT. FLOT1:: MOT 0 < PREMIER ELEMENT, FLOT2:: MOT FLOT1+LFLOT < DEUXIEME ELEMENT, FLOT3:: MOT FLOT2+LFLOT < TROISIEME ELEMENT, FLOT4:: MOT FLOT3+LFLOT < QUATRIEME ELEMENT. < < LISTE DES NIVEAUX : < FNIV: EQU $ DO NFLOT FLOAT 0 FNIV1: EQU FNIV+FLOT1 FNIV2: EQU FNIV+FLOT2 FNIV3: EQU FNIV+FLOT3 FNIV4: EQU FNIV+FLOT4 < < LISTE DES VALEURS 'VECU' : < LVECU: EQU $ DO NFLOT FLOAT 0 VECU1: EQU LVECU+FLOT1 VECU2: EQU LVECU+FLOT2 VECU3: EQU LVECU+FLOT3 VECU4: EQU LVECU+FLOT4 < < LISTE DES VALEURS 'VECV' : < LVECV: EQU $ DO NFLOT FLOAT 0 VECV1: EQU LVECV+FLOT1 VECV2: EQU LVECV+FLOT2 VECV3: EQU LVECV+FLOT3 VECV4: EQU LVECV+FLOT4 < < LISTE DES VALEURS 'VECW' : < LVECW: EQU $ DO NFLOT FLOAT 0 VECW1: EQU LVECW+FLOT1 VECW2: EQU LVECW+FLOT2 VECW3: EQU LVECW+FLOT3 VECW4: EQU LVECW+FLOT4 < < DERIVEES DE LA SURFACE : < DXDU: FLOAT 0 < DX/DU, DXDV: FLOAT 0 < DX/DV, DYDU: FLOAT 0 < DY/DU, DYDV: FLOAT 0 < DY/DV, DZDU: FLOAT 0 < DZ/DU, DZDV: FLOAT 0 < DZ/DV. IF XOPT05-XXX256,XOPT5,,XOPT5 < < DONNEES D'ATTRIBUTION DES NIVEAUX : < FCDO:: VAL 'F800 < FONCTION COMPTE DES 'DO'. XWOR%1: VAL NIVMAX+1 AATNIV: WORD ATNIV,X < RELAI D'ACCES A LA TABLE D'ATTRIBUTION < DES NIVEAUX DE GRIS EN FONCTION DES < NIVEAUX CALCULES. ATNIV: EQU $ DO XWOR%1/NOCMO BYTE 0=FCDO)MFFFF+1-1*NOCMO+XWOR%1;0=FCDO)MFFFF+1-1*NOCMO+XWOR%1+1 < < GESTION DE LA TRANSPARENCE : < LTRANS: WORD 0 < LISTE DE BITS : LE BIT DE RANG X S'IL < EST A 1 INDIQUE QUE LE NIVEAU DE GRIS < EGAL A X EST TRANSPARENT. NM1: WORD 0 < NIVEAU D'UN POINT ANTERIEUR, NM2: WORD 0 < NIVEAU MODULE D'UN POINT POSTERIEUR. XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 < < NIVEAU D'UN POINT : < NM2: WORD 0 < NIVEAU DU POINT A MARQUER. XOPT5: VAL 0 < < DONNEES DE PROJECTION : < SINT: FLOAT -0.5 COST: FLOAT 0.86602 IPROJ: WORD 0 < 0 : PROJECTION PAR COST,SINT ; < 1 : PROJECTION PERSPECTIVE. PZ: FLOAT 0 < < DONNEES DE DERIVATION DE LA SURFACE : < IF XOPT08-XXXNON,XOPT8,,XOPT8 NX: FLOAT 0 < X(NORMALE), NY: FLOAT 0 < Y(NORMALE), NZ: FLOAT 0 < Z(NORMALE). XOPT8: VAL 0 FKN: FLOAT 1 < MULTIPLICATEUR DE LA NORMALE, A INVERSER < PARFOIS (VOIR LE CAS DE BOY...). NORMN: FLOAT 1 < NORME(NORMALE) ; ON L'INITIALISE A 1, < A CAUSE DU GENERATEUR DE MAILLAGE, AU < CAS OU L'ECLAIRAGE NE SERAIT PAS ACTIF... FHEPS: FLOAT 10 < POUR FAIRE QUE FHU#FHV D'UN PETIT PEU... < (ET CECI POUR LE PROBLEME RENCONTRE < LORSQUE U=V ==> U+FHU=V+FHV ==> < X(U+FHU)=X(V+FHV),... CE QUI DONNE < DES DERIVEES PARTIELLES EGALES, CE < QUI PEUT PARFOIS DONNER DES VECTEURS < NORMAUX DE NORME NUL !!!) < < POSITION DE L'OBSERVATEUR : < OX: WORD 0 OY: WORD 0 OZ: WORD 0 IF XOPT06-XXXOUI,XOPT6,,XOPT6 < < DONNEES DE COLORIAGE : < BUFCOU: WORD 0 LBUFC:: VAL $-BUFCOU MASCOL: WORD '0FFF < POUR ELIMINER LES 4 BITS DE TETE... DEMCOU: BYTE '8B;'02 < DEMANDE DE COLORIAGE... WORD BUFCOU-ZERO*NOCMO WORD LBUFC*NOCMO XOPT6: VAL 0 IF XOPT01-XXXOUI,XOPT1,,XOPT1 < < DEFINITION DU PLAN DE COUPE : < PLAN1:: VAL 1 PLANI:: VAL 30000 < PETIT INFINI... PLANA: FLOAT <PLAN1<0<0 < COEFFICIENT 'A', PLANB: FLOAT <PLAN1<0<0 < COEFFICIENT 'B', PLANC: FLOAT <PLAN1<0<0 < COEFFICIENT 'C', PLAND: FLOAT <PLANI<0<0 < COEFFICIENT 'D'. XOPT1: VAL 0 < < GESTION DES "TRANCHES" < A 'X', 'Y' OU 'Z' CONSTANTS : < TRANCX: FLOAT 0 < INACTIF SI NUL, TRANCY: FLOAT 0 < INACTIF SI NUL, TRANCZ: FLOAT 0 < INACTIF SI NUL. TRANCM: FLOAT 1 < AMPLIFICATEUR DES NIVEAUX... IF XOPT03-XXXOUI,XOPT3,,XOPT3 < < TRACE ANAGLYPHIQUE : < FANAG: FLOAT 0 < =0 : NON, < #0 : OUI, ET ALORS LE DEPLACEMENT DES < POINTS VAUT (PANAG*FK+FZS)/FANAG. PANAG: FLOAT 0 < DEFINITION DU PLAN DE CONVERGENCE DES < YEUX... ATANAG: WORD TANAG,X < ACCES A LA TABLE DE "MULTIPLICATION" < DES NIVEAUX ANAGLYPHIQUES... XCNOIR:: VAL 0 < NOIR, XCRMAX:: VAL 1 < ROUGE MAX (COMPATIBLE "RVB-IC"), XCVMAX:: VAL 2 < VERT MAX (COMPATIBLE "RVB-IC"), XCRMIN:: VAL 6 < ROUGE MIN, XCVMIN:: VAL 7 < VERT MIN, XCJMAX:: VAL 3 < JAUNE MAX (COMPATIBLE "RVB-IC"), XCJMOY:: VAL 4 < JAUNE MOYEN, XCJMIN:: VAL 5 < JAUNE MIN. < NOTA : CES COULEURS SONT CHOISIES DE < FACON A CE QUE : < RMAX+VMAX=JMAX AVEC LES COULEURS < TRANSPARENTES... XCDELT:: VAL XCVMAX-XCRMAX < PASSAGE DU ROUGE AU VERT (QU'IL SOIT < MIN OU MAX...). IF XCVMIN-XCRMIN-XCDELT,,XWOR%, IF ATTENTION : LE COMMENTAIRE PRECEDENT EST FAUX !!! XWOR%: VAL 0 IF XCRMAX-1,,XWOR%, IF ATTENTION : INCOMPATIBILITE "RVB-IC" !!! XWOR%: VAL 0 IF XCVMAX-2,,XWOR%, IF ATTENTION : INCOMPATIBILITE "RVB-IC" !!! XWOR%: VAL 0 IF XCJMAX-3,,XWOR%, IF ATTENTION : INCOMPATIBILITE "RVB-IC" !!! XWOR%: VAL 0 TANAG: EQU $ IF XCRMAX-XCNOIR,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 IF XCVMAX-XCRMAX,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 IF XCJMAX-XCVMAX,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 IF XCJMOY-XCJMAX,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 IF XCJMIN-XCJMOY,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 IF XCRMIN-XCJMIN,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 IF XCVMIN-XCRMIN,,,XWOR% IF ATTENTION : IL FAUT PERMUTER DES COLONNES DE 'TANAG' !!! XWOR%: VAL 0 XWOR%0: VAL NIVMAX+1/NOCMO*XCNOIR $EQU TANAG+XWOR%0 BYTE XCNOIR;XCRMAX;XCVMAX;XCJMAX;XCJMOY;XCJMIN;XCRMIN;XCVMIN XWOR%1: VAL NIVMAX+1/NOCMO*XCRMAX $EQU TANAG+XWOR%1 BYTE XCRMAX;XCRMAX;XCJMAX;XCJMAX;XCJMOY;XCJMOY;XCRMAX;XCJMOY XWOR%2: VAL NIVMAX+1/NOCMO*XCVMAX $EQU TANAG+XWOR%2 BYTE XCVMAX;XCJMAX;XCVMAX;XCJMAX;XCJMOY;XCJMOY;XCJMOY;XCVMAX XWOR%3: VAL NIVMAX+1/NOCMO*XCJMAX $EQU TANAG+XWOR%3 BYTE XCJMAX;XCJMAX;XCJMAX;XCJMAX;XCJMAX;XCJMAX;XCJMAX;XCJMAX XWOR%4: VAL NIVMAX+1/NOCMO*XCJMOY $EQU TANAG+XWOR%4 BYTE XCJMOY;XCJMOY;XCJMOY;XCJMAX;XCJMOY;XCJMOY;XCJMOY;XCJMOY XWOR%5: VAL NIVMAX+1/NOCMO*XCJMIN $EQU TANAG+XWOR%5 BYTE XCJMIN;XCJMOY;XCJMOY;XCJMAX;XCJMOY;XCJMIN;XCJMIN;XCJMIN XWOR%6: VAL NIVMAX+1/NOCMO*XCRMIN $EQU TANAG+XWOR%6 BYTE XCRMIN;XCRMAX;XCJMOY;XCJMAX;XCJMOY;XCJMIN;XCRMIN;XCJMIN XWOR%7: VAL NIVMAX+1/NOCMO*XCVMIN $EQU TANAG+XWOR%7 BYTE XCVMIN;XCJMOY;XCVMAX;XCJMAX;XCJMOY;XCJMIN;XCJMIN;XCVMIN XWOR%8: VAL NIVMAX+1 XWOR%8: VAL XWOR%8/NOCMO*XWOR%8 $EQU TANAG+XWOR%8 XOPT3: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 XXXIMA: VAL XXIMA2 EOT #SIP IMAGE 512# < < ADRESSE DES REGISTRES DE CONTROLE : < ACTRL1: WORD RCTRL1 ACTRL2: WORD RCTRL2 XXXIMA: VAL XXIMA4 EOT #SIP IMAGE 512# < < POUR LES CHANGEMENTS D'ECHELLE : < AYMAX: WORD YMAX < POUR INVERSER LES AXES 'Y'... XOPT5: VAL 0 PAGE < < < D E S C R I P T E U R D E S B U F F E R S < D U Z - B U F F E R : < < DSEC DZBUF: EQU $ BAGE02: WORD 0 < POIDS FORT DE L'AGE, BAGE01: WORD 0 < POIDS FAIBLE DE L'AGE, < AGE : A CHAQUE OPERATION SUR LE Z-BUFFER, < ON INCREMENTE L'AGE DES 2 BUFFERS. < A L'INITIALISATION, ON METTRA UN < GRAND AGE (CF. 'FMAX') AFIN DE < CHOISIR UN BUFFER INOCCUPE... BADR: WORD 0 < ADR : ADRESSE EN 'CDAI' DU BUFFER. SDKU: WORD 0 < NUMERO DU BLOC COURANT, MDKU: WORD 0 < COMPTAGE DES MODIFICATIONS DU BLOC < COURANT. LDZBUF:: VAL $-DZBUF < LONGUEUR DU DESCRIPTEUR... PAGE < < < C O M M O N : < < COMMON COMON: WORD 0 < MOT RESERVE POUR LE BLOC FLOTTANT. < < ACCES AU Z-BUFFER : < YLOAD:: VAL 0 < MODE LOAD, YSTORE:: VAL 1 < MODE STORE. ZBUF: WORD 0 < 0 : Z-BUFFER ACTIF (MODE NORMAL)... < 1 : INACTIF, MAIS DANGEREUX... TRZBUF: WORD ZBUF0-1 < INDICATEUR DU NOMBRE DE MOTS DE CHAQUE < ENTREE DU Z-BUFFER : < TRZBUF<0 : UNE ENTREE, < TRZBUF>=0 : DEUX ENTREES, LE CONTENU DE < 'TRZBUF' DONNANT ALORS LE < NUMERO DU MOT COURANT... RDKU: BYTE '8A;'0C < 'DKU' --> 'MEMTV' EN QUANTA=1. WORD IZBUF*NOCMO WORD LIZBUF*NOCMO WORD 0 WDKU: BYTE '8A;'0E < 'MEMTV' --> 'DKU' EN QUANTA=1. WORD IZBUF*NOCMO WORD LIZBUF*NOCMO WORD 0 FMAX:: VAL 10000 < POUR UN GRAND AGE INITIAL... BUF1: EQU $ < PREMIER BUFFER : BAGE12: WORD FMAX BAGE11: WORD 0 WORD IZBUF WORD -1 < PAS DE BLOC COURANT. WORD 0 BUF2: EQU $ < DEUXIEME BUFFER : BAGE22: WORD FMAX BAGE21: WORD 0 WORD IZBUF1 WORD -1 < PAS DE BLOC COURANT. WORD 0 XZMAX:: VAL '7FFF < PLUS GRAND NOMBRE ENTIER POSITIF. ZMAX: WORD XZMAX < PLUS GRAND NOMBRE POSITIF... ASPDKU: WORD SPDKU < ECRITURE DU BLOC COURANT... AGZB: WORD GZB < ACCES GENERAL AU Z-BUFFER... < < SOURCE LUMINEUSE : < IECL: WORD 0 < 0 : PAS D'ECLAIRAGE DE LA SURFACE, < 1 : ECLAIRAGE... SX: WORD 0 < X(SOURCE), SY: WORD 0 < Y(SOURCE), SZ: WORD 0 < Z(SOURCE). MSX: FLOAT 0 < X(POINT --> SOURCE), MSY: FLOAT 0 < Y(POINT --> SOURCE), MSZ: FLOAT 0 < Z(POINT --> SOURCE). NORMS: FLOAT 0 < NORME(POINT --> SOURCE). FCOEF: FLOAT 1 < COEFFICIENT D'INTENSITE LUMINEUSE. < (INITIALISE SUR PAS DE MODULATION) IF XOPT05-XXX256,XOPT5,,XOPT5 XWOR%8: VAL 3 < LOGARITHME DECIMAL DE XWOR%9, XWOR%9: VAL 1 DO XWOR%8 XWOR%9: VAL XWOR%9*10 < CALCUL DE 10 PUISSANCE XWOR%8. F6S7: FLOAT <NIVMAX-1*XWOR%9/NIVMAX+1<0<-XWOR%8 XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 F6S7: FLOAT 0.996078 < JE NE PEUX PAS LE PARAMETRER CORRECTE- < MENT ; ELLE VAUT : < (NIV256-2)/(NIV256-1)=254/255. XOPT5: VAL 0 ACOEF: WORD COEF < CALCUL DE LA MODULATION LUMINEUSE. IINT: WORD 0 < INDICATEUR DE TRACE DE L'INTERIEUR DES < SURFACES : < =0 : TRACER INTERIEUR ET EXTERIEUR, < =1 : NE TRACER QUE L'EXTERIEUR. ICOS: WORD 0 < MODE TRAITEMENT DU 'COS' DES RAYONS < LUMINEUX : < 0 : PRIS ENTRE (-1,+1), ET TRANSLATION < DANS (0,+1) PAR MULTIPLICATION < PAR 1/2 ; < 1 : MISE DANS (0,+1) PAR UNE VALEUR < ABSOLUE. EXCOS: WORD 1 < EXPOSANT ENTIER DU 'COS' POUR CALCULER < LA MODULATION D'ECLAIRAGE. < IMPLICITEMENT, ON CALCULE COSINUS**1... < < CONSTANTES UTILES : < XR: WORD 0 < COORDONNEE X D'UN POINT RESIDENT, YR: WORD 0 < COORDONNEE Y D'UN POINT RESIDENT, XS: WORD 0 < COORDONNEE X D'UN POINT SCRATCH, YS: WORD 0 < COORDONNEE Y D'UN POINT SCRATCH. IF XOPT05-XXX512,XOPT5,,XOPT5 XDEF1:: VAL K < FAUX 512 (256 DUPLIQUE PAR CARRE 2*2), XDEF2:: VAL XDEF1+I < VRAI 512... IDEF: WORD XDEF1 < INDICATEUR DE FAUX OU DE VRAI 512 (VOIR < LA COMMANDE "M"). XS2: WORD 0 < EN VRAI 512 : (XS2)=2*(XS), YS2: WORD 0 < EN VRAI 512 : (YS2)=2*(YS). XOPT5: VAL 0 POINTC: BYTE 0;0 < MEMORISE LE (YS,XS) DU POINT QUE L'ON < VIENT DE MARQUER ; A NOTER QUE CE DIS- < POSITIF MERDE SI LE PREMIER POINT QUE < MARQUE EST PRECISEMENT YS=XS=0 QUI EST < LA VALEUR INITIALE DE 'POINTC'... IPTC: WORD 0 < =0 : NE PAS OPTIMISER PAR 'POINTC', < 1 : OPTIMISER... ORGX: WORD 0 < ORIGINE EN X DE L'IMAGE SCRATCH < PAR RAPPORT A L'IMAGE RESIDENTE, ORGY: WORD 0 < DE MEME, ORIGINE EN Y... NPAS: WORD 0 < =INVERSE DE 'FPAS', C'EST-A-DIRE LE < NOMBRE DE PAS SUR 'U' ET SUR 'V' A < L'INTERIEUR DE LA TRANSFORMEE DU CARRE < DE BASE. < < POUR ACCEDER AUX IMAGES : < SAVER: WORD 0 < SAUVEGARDE D'UN MOT DE LA TRAME < RESIDENTE ROUGE, SAVEV: WORD 0 < DE MEME POUR LE VERT, SAVEB: WORD 0 < DE MEME POUR LE BLEU. MCDAR: EQU SAVER < SAUVEGARDE D'UN MOT DE LA TRAME < SCRATCH ROUGE, MCDAV: EQU SAVEV < DE MEME POUR LE VERT, MCDAB: EQU SAVEB < DE MEME POUR LE BLEU. XCTCDA: WORD 0 CTCDA: WORD TV2-TV1 < POUR ATTEINDRE 'TV2'... MODX: WORD 1 < 0 : "TORE" SUR LES X, < 1 : L'IMAGE SCRATCH NE SE REFERME PAS... MODY: WORD 1 < DE MEME SUR L'AXE DES Y. WORK1: WORD 0 < VARIABLE DE TRAVAIL... MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'. AIMAGR: WORD IMAGR,X < RELAI TRAME ROUGE, AIMAGV: WORD IMAGV,X < RELAI TRAME VERTE, AIMAGB: WORD IMAGB,X < RELAI TRAME BLEUE. < < RELAIS : < IF XOPT05-XXX256,XOPT5,,XOPT5 ASPAPR: WORD SPAPR < ACCES A UN POINT RESIDENT (X,Y). ASPAPS: WORD SPAPS < ACCES A UN POINT SCRATCH (X,Y). ASPSPS: WORD SPSPS < RANGEMENT D'UN POINT SCRATCH (X,Y). AGETS: WORD GETS < PARTIE COMMUNE A 'SPSPS' ET 'SPAPS'. ASPGPR: EQU ASPAPR ASPGPS: EQU ASPAPS ASPRPS: EQU ASPSPS ASPGR: EQU ASPGPR ASPGS: EQU ASPGPS ASPRS: EQU ASPRPS ASPGRA: WORD SPGRA < ACCES A UN POINT RESIDENT ET CONVERSION < FLOTTANTE SI INTERPOLATION DES NIVEAUX < DE GRIS DANS LE CARRE ELEMENTAIRE. ASPGPF: WORD SPGPF < CALCUL D'UN PSEUDO-NIVEAU DE GRIS < RESIDENT LORS DU SOUS-ECHANTILLONNAGE... ADECAL: WORD DECAL < POUR 'SPSPS'... XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 ASPGPR: WORD SPAPR < ACCES AU POINT (XR,YR). ASPGRA: WORD SPGRA < UTILISE S'IL Y A INTERPOLATION DANS LE < CARRE ELEMENTAIRE... ASPGPF: WORD SPGPF < CALCUL D'UN NIVEAU DE GRIS LORS DES < SOUS-ECHANTILLONNAGES. ASPRS: WORD SPSPS < RANGEMENT DU POINT (XS,YS). ASPGPS: WORD SPAPS < ACCES A UN POINT (XS,YS)... AGETS: WORD GETS < POUR ACCEDER AUX 3 BITS D'UN POINT... XOPT5: VAL 0 IF XOPT07-XXXOUI,XOPT7,,XOPT7 ASPSPR: WORD SPSPR < MARQUAGE D'UN POINT RESIDENT (XR,YR). ASPRPR: EQU ASPSPR XOPT7: VAL 0 ARAC: WORD RAC < EXTRACTION D'UNE RACINE CARREE... AFABS: WORD FABS < 'FABS' FLOTTANT, AFCAZ: WORD FCAZ < 'FCAZ' FLOTTANT, AFIX: WORD FIX < 'FIX' FLOTTANT, AFLT: WORD FLT < 'FLT' FLOTTANT, AFNEG: WORD FNEG < 'FNEG' FLOTTANT. ASFWOR: WORD SFWORK < 'FST''FWORK'. APWORK: WORD PWORK < 'FAD FWORK', PUIS 'FST FWORK'... < < SOUS-PROGRAMMES SPECIFIQUES : < ASPU: WORD SPU < CALCUL ASPV: WORD SPV < DIRECT ASPW: WORD SPW < DE LA FONCTION. SPUVW: EQU $ ASPUP: WORD SPUP < COMPOSANTE 'U' D'UN VECTEUR, XSPU:: VAL $-SPUVW-1 < INDEX COMPOSANTE U. ASPVP: WORD SPVP < COMPOSANTE 'V', XSPV:: VAL $-SPUVW-1 < INDEX COMPOSANTE V. ASPWP: WORD SPWP < ET COMPOSANTE 'W'... XSPW:: VAL $-SPUVW-1 < INDEX COMPOSANTE W. ASPUVW: WORD SPUVW,X < RELAI VERS LES SOUS-PROGRAMMES... ADERIV: WORD DERIVE < SOUS-PROGRAMME DE DERIVATION. AROND: WORD ROND < ARRONDI FLOTTANT ET CONVERSION ENTIERE. AEXTU: WORD EXTU < CALCUL DE MIN(U) ET DE MAX(U). AEXTV: WORD EXTV < CALCUL DE MIN(V) ET DE MAX(V). < < CONSTANTES DE CALCUL DES SINUS ET COSINUS : < ASIN: WORD SIN < S/P DE CALCUL DU SINUS, ACOS: WORD COS < ET DU COSINUS. ZZZ061: DZS 2 < NB EN FLOTTANT ZZZ062: DZS 2 ZZZ063: DZS 1 < SIGNE DEUXPI: FLOAT 6.2831853 < 2 PI PI3141: FLOAT 3.1415926 < PI PISUR2: FLOAT 1.5707963 < PI/2 ZZZ067: EQU PISUR2 < CSTES DU POLYNOME ZZZ068: WORD 'AD00;'5110 ZZZ069: WORD '51FD;'9A2C ZZZ070: WORD 'B3F9;'6CCE ZZZ071: WORD '4FF4;'6BDD < < DONNEES DE LA TRANSFORMATION MATRICIELLE : < M11: FLOAT 1 M12: FLOAT 0 M13: FLOAT 0 M21: FLOAT 0 M22: FLOAT 1 M23: FLOAT 0 M31: FLOAT 0 M32: FLOAT 0 M33: FLOAT 1 AM: WORD M11,X < ACCES A LA MATRICE TRI-DIMENSIONNELLE. KRX: FLOAT 0 < X(CENTRE DE LA TRANSFORMATION), KRY: FLOAT 0 < Y(...), KRZ: FLOAT 0 < Z(...). ITRANS: WORD 0 < 0 : PAS DE TRANSFORMATION MATRICIELLE < AVANT LE TRACE DES VECTEURS. < 1 : TRANSFORMATION MATRICIELLE. < < DONNES DE SOUS-ECHANTILLONNNAGE : < FDELX: FLOAT 1 < PAS SUR OX, FDELY: FLOAT 1 < PAS SUR OY. FKDEL: FLOAT 1 < MULTIPLICATEUR DE 'FDELX' ET 'FDELY' < POUR CALCULER LA PORTEE DE L'INTERPO- < LATION DE SOUS-ECHANTILLONNAGE. FSIGCO: FLOAT 0 < CUMUL DES COEFFICIENTS D'INTERPOLATION, FSIGNI: FLOAT 0 < CUMUL DES NIVEAUX PONDERES... < < DONNES DIVERSES : < F1: FLOAT 1 F3: FLOAT 3 < INUTILE EN GENERAL (SAUF 'BOY'...). BORNS: WORD XZMAX < ON NE CONSERVE LES POINTS (XS,YS,ZS) BORNI: WORD MFFFF)XZMAX < QUE SI (BORNI)<=(ZS)<=(BORNS). < < DONNEES D'ARRONDI : < F05: FLOAT 0.5 < < DONNEES POUR LA FONCTION : < INTER1: WORD 0 < =0 : INITIALISATION DES COMPOSANTES 'VECU < 'VECV' ET 'VECW' ; < #0 : L'INITIALISATION EST FAITE... INTER2: WORD 0 < =0 : CALCUL SYSTEMATIQUE DE LA FONCTION < EN CHAQUE POINT, < #0 : ON INTERPOLE LA FONCTION DANS LE < CARRE ELEMENTAIRE. F0: FLOAT 0 FWORK1: FLOAT 0 < TRAVAIL... FWORK2: FLOAT 0 < TRAVAIL... < < TRANSLATION : < TRX: WORD 0 < CX, TRY: WORD 0 < CY, TRZ: WORD 0 < CZ. < < FACTEURS D'ECHELLES "LOCAUX" : < VECU: FLOAT 0 VECV: FLOAT 0 VECW: FLOAT 0 KFU: FLOAT 1 KFV: FLOAT 1 KFW: FLOAT 1 KFT: FLOAT 1 KUX: FLOAT 1 KVX: FLOAT 1 KWX: FLOAT 1 KTX: FLOAT 1 KUY: FLOAT 1 KVY: FLOAT 1 KWY: FLOAT 1 KTY: FLOAT 1 KUZ: FLOAT 1 KVZ: FLOAT 1 KWZ: FLOAT 1 KTZ: FLOAT 1 FXR: FLOAT 0 FYR: FLOAT 0 FZR: FLOAT 0 FTR: FLOAT 0 < < DONNEES INSEPARABLES POUVANT < DONNER NAISSANCE A UN NOEUD < DE MAILLAGE SI 'XOPT08' : < IF XOPT08-XXXOUI,XOPT8,,XOPT8 NMAIL: ASCI "X*" NMAIL1: ASCI "YYXX" BYTE '04;0 XWOR%1: VAL NMAIL-ZERO*NOCMO NMAIL2: EQU ZERO+XWOR%1 < ADRESSE-OCTET DE 'NMAIL'. XWOR%1: VAL $-NMAIL*NOCMO LNMAIL: EQU ZERO+XWOR%1-1 < LONGUEUR DU NOM DE MAILLE... XOPT8: VAL 0 FXS: FLOAT 0 < COORDONNEE 'X' 3D, FYS: FLOAT 0 < COORDONNEE 'Y' 3D, FZS: FLOAT 0 < COORDONNEE 'Z' 3D. IF XOPT08-XXXOUI,XOPT8,,XOPT8 NX: FLOAT 0 < X(NORMALE) NORMALISE, NY: FLOAT 0 < Y(NORMALE) NORMALISE, NZ: FLOAT 0 < Z(NORMALE) NORMALISE. XOPT8: VAL 0 VARUVW: EQU $ VARU: FLOAT 0 < COORDONNEE CURVILIGNE 'U', XVARU:: VAL $-VARUVW-2 < INDEX COORDONNEE U. VARV: FLOAT 0 < COORDONNEE CURVILIGNE 'V'. XVARV:: VAL $-VARUVW-2 < INDEX COORDONNEE V. IF XOPT08-XXXOUI,XOPT8,,XOPT8 XWOR%1: VAL $-NMAIL*NOCMO LMAIL: EQU ZERO+XWOR%1 < LONGUEUR DE L'ITEM DE NOEUD. XOPT8: VAL 0 VARW: FLOAT 0 XVARW:: VAL $-VARUVW-2 < INDEX COORDONNEE W. VART: FLOAT 0 XVART:: VAL $-VARUVW-2 < INDEX COORDONNEE T. FINCU: FLOAT 0 < INCREMENT DE 'FXR' DANS LE CARRE DE BASE. XFINCU:: VAL $-VARUVW-2 < INDEX DE 'FINCU'... FINCV: FLOAT 0 < INCREMENT DE 'FYR' DANS LE CARRE DE BASE. XFINCV:: VAL $-VARUVW-2 < INDEX DE 'FINCV'... XLASTX:: VAL $-VARUVW-2 < DERNIER INDEX... YVARU: WORD XVARU < =XVARU SI INTER2=0, < =XFINCU SI =1. YVARV: WORD XVARV < =XVARV SI INTER2=0, < =XFINCV SI =1. AVAR: WORD VARUVW,X < REALI D'ACCES AUX COORDONNEES. < < FACTEUR GENERAL D'ECHELLE : < FK: FLOAT 1 < < CONSTANTES DE DERIVATION : < FHU: FLOAT 0.01 < PAS DE DERIVATION NUMERIQUEPAR RAPPORT < A 'U', FHV: FLOAT 0.011 < ET PAR RAPPORT A 'V'... F2H: FLOAT 0.02 < EN FAIT, 'F2H' EST RECALCULEE A CHAQUE < APPEL DE 'ADERIV'... < < DEFINITION DE L'ACCELERATEUR < DES ACCES A 'TV1' ET 'TV2' : < ASHPR: @ IF 5=XFSYMB,XWOR%,,XWOR% ASHPR:: VAL 53 < ON SE DONNE UN NOMBRE PREMIER, XWOR%: VAL 0 IF ASHPR,XWOR%,XWOR%, LASHT: WORD ASHPR < POUR FAIRE DES CALCULS MODULO 'ASHPR'. SAVYX: BYTE 0;0 < POUR MEMORISER UN COUPLE (Y,X). INOC:: VAL -1 < ETAT INOCCUPE D'UNE ENTREE DE LA TABLE. ASHT1:: VAL 0 < POUR ACCEDER A LA PARTIE (Y,X) DE LA < TABLE, ASHT2:: VAL ASHT1+ASHPR < POUR ACCEDER A LA PARTIE TV1/TV2/NIVEAU < DE LA TABLE. XWOR%: VAL 0 < < CONSTANTES DE TRAVAIL ACCESSIBLES < AU SOUS-PROGRAMME SPECIFIQUE PAR < INDEXATION DOUBLE-MOT : < NCT: @ IF 3=XFSYMB,XWOR%,,XWOR% NCT:: VAL 48+5-4 < NOMBRE DE CONSTANTES DE TRAVAIL. XWOR%: VAL 0 ACT: WORD CT,X < RELAI D'ACCES. ASPCT: WORD SPCT < SOUS-PROGRAMME COMMUN D'ACCES. FWORK: FLOAT 0 < VARIABLE DE TRAVAIL, MISE ICI A CAUSE < DE LA SATURATION DU COMMON... CT: EQU $ DO NCT FLOAT 1 PAGE < < < T A B L E D E S C O M M A N D E S : < < REP0: VAL "+" < PREMIERE COMMANDE. KOM: EQU $-REP0 < ELLES COMMENCENT A "+"... WORD STORE < + : STORE SGN LE RESIDENT WORD ERROR < , WORD DELETE < - : DELETE SGN LE RESIDENT WORD PDEF < . : CHOIX VRAI/FAUX 512 (512) WORD DANAG < / : DEFINITION DES TRACES ANAGLYPHIQUES WORD MOV0 < 0 : TV <-- RESIDENT R+V+B WORD ERROR < 1 WORD ERROR < 2 WORD ERROR < 3 WORD MOV4 < 4 : RESIDENT <-- TV R+V+B WORD ERROR < 5 WORD ERROR < 6 WORD ERROR < 7 WORD STV2 < 8 : TV2 <-- RESIDENT WORD GTV2 < 9 : RESIDENT <-- TV2 WORD OBS < : : POSITION DE L'OBSERVATEUR WORD ERROR < ; WORD DBORNS < < : DEFINITION DE LA BORNE SUP DES ZS WORD DTRANS < = : DEFINITION DE LA MATRICE M(I,J) WORD DBORNI < > : DEFINITION DE LA BORNE INF DES ZS WORD PATNIV < ? : ATTRIBUTION DES NIVEAUX DE GRIS (256) WORD ZPIN < @ : ENTREE DE 'ZR' ET 'TR' WORD GCT < A : ENTREE CONSTANTES DE TRAVAIL WORD MZBUF < B : INITIALISATION DU Z-BUFFER WORD CVP < C : CHOIX VECTEUR/POINT WORD DISP < D : RESIDENT <-- IMAGE SGN WORD PSCALD < E : ENTREE DE L'ECHELLE DIAGONALE WORD GOGE < F : FIN WORD SOUSEC < G : ENTREE DU SOUS-ECHANTILLONNAGE WORD CDER < H : ENTREE CONSTANTE DE DERIVATION WORD RAPIDE < I : INTERPOLATION DES CARRES DE BASE < ET DE LA FONCTION WORD TRANCH < J : ENTREE DES TRANCHES A X/Y/Z CONSTANT WORD INFK < K : ENTREE CTTE TRANSFORMATION WORD IEXCOS < L : ENTREE DE L'EXPOSANT DU COSINUS WORD ERROR < M WORD NAME < N : NOMME L'IMAGE RESIDENTE WORD OPTIMI < O : OPTIMISER PAR 'POINTC' OUI/NON WORD INCOST < P : ENTREE DU COST DE PROJECTION WORD DFPLAN < Q : DEFINITION DU PLAN DE COUPE WORD TRANSM < R : DEFINITION TRANSFORMATION MATRICIELLE WORD EFFACE < S : EFFACEMENT DE L'ECRAN (512) WORD TRANS < T : TRACE DU CHAMP DE VECTEURS WORD COLOR < U : ENVOI DES ORDRES DE COLORIAGE WORD VITRE < V : GESTION DES TRANSPARENCES (512) WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI WORD GORGX < X : POSITIONNEMENT DE 'ORGX' WORD GORGY < Y : POSITIONNEMENT DE 'ORGY' WORD PROJE < Z : ACTION SUR LE MODE DE PROJECTION REPZ: VAL $-KOM-1 < DERNIERE COMMANDE. PAGE PROG PAGE < < < R E T O U R A ' G E ' : < < GOGE: EQU $ LAI BRANCH-ZERO LR A,W < W=ADRESSE DE LA BRANCHE... LA NSD STA 0,W < GENERATION DU NOM DE L'OVERALY, ACTD 4 < A='IDESC', ORI "0" < CONVERTI EN ASCI, STBY 2,W < QUI FAIT PARTIE DU NOM... LAI SGNLON STBY DEMLOD < MISE EN MODE 'LOAD SOUS ACN'... STZ CDRET,W < RETOUR OK... GOGE2: EQU $ CPZ KIN2 < L'ITEM1 A-T'IL EST SAUVEGARDE ??? JL GOGE5 < NON, RIEN A RESTAURER... BSR ARITEM < RESTAURATION DE L'ITEM1... LA SAVEK LR A,K < ET RESTAURATION DE 'K'... GOGE5: EQU $ CPZ ZBUF < ALORS ??? JNE GOGE4 < Z-BUFFER INACTIF... PSR W < Z-BUFFER ACTIF : LRM W WORD BUF1 < (W)=ADRESSE DU 1ER DESCRIPTEUR, BSR ASPDKU < REECRITURE DU 1ER BLOC SI NECESSAIRE, ADRI LDZBUF,W BSR ASPDKU < ET DU SECOND... PLR W GOGE4: EQU $ LA IEG STA MODCAL,W < RENVOI DE L'INDEX COURANT DE ITEM1, LAI AMCDA-ZERO BSR ACCI < ENVOI DE !CDA. LX NMOTS GOGE3: EQU $ STZ &AITEM2 < RAZ DE L'ITEM2... JDX GOGE3 GOGE1: EQU $ LAD DEMLOD BSR AOVL < ET TENTATIVE DE CHARGEMENT... QUIT 1 < EN CAS D'ERREUR, JMP GOGE1 < ET ON RETENTE... < < < T R A I T E M E N T D E S A L T - M O D E S : < < ALTM: EQU $ LAI BRANCH-ZERO LR A,W < W=ADRESSE DE LA BRANCHE... LA NPCALL JANE ALTM1 < OK... LA MODCAL,W < MODCAL EST ENCORE A SA VALEUR INITIALE. LXI 0 < "GE" A PRIORI... TBT 0 < "EI" OU "GE" ??? ADCR X LA &NCALL < A=OVERLAY A APPELER... ALTM1: EQU $ STA 0,W < DANS LE CAS D'UN ALT-MODE, ON REVIENT < DIRECTEMENT A "GE" OU A "EI"... LAI " " < ON RESTAURE, AU CAS OU LE ALT-MODE STBY 2,W < APPARAITRAIT DANS 'GOGE'... LAI SGNLNS < IDEM... STBY DEMLOD LAI 2 STA CDRET,W < TRANSMISSION DU ALT-MODE... JMP GOGE2 PAGE < < < E N T R Y : < < TW: EQU $ LRM C,L WORD COMON+128 < C=BASE DU COMMON... WORD LOC+128 < L=BASE DU LOCAL... LAD DEMOVL SVC 0 < CHARGEMENT DE LA BRANCHE D'OVERLAY... STZ XCTCDA < AU CAS OU UN MALHEUREUX ALT-MODE... IC KIN < COMPTAGE DES ENTREES : JG ALTM < ABORT IMMEDIAT SUR ALT-MODE... LA CDRET,W < A=RELAI D'ACCES A ITEM1/ITEM2... CP AI1 < SEUL ITEM1 EST AUTORISE... JNE ALTM < L'ITEM2 PROVOQUE UN ABORT... LA MODCAL,W < A=INDEX INITIAL DE L'ITEM1... LXI 0 < "GE" A PRIORI... TBT 0 < "GE" (0) OU "EI" (1) ??? ADCR X RBT 0 STA IEG LA &NCALL STA NPCALL < NOM DU PROCESSEUR A APPELER SUR LA < RECEPTION D'UN ALT-MODE. LR K,A < CAS DE LA PREMIERE, STA SAVEK < SAUVEGARDE DE K... IC KIN2 < ET VOILA, LES SAUVEGARDES SONT FAITES... LRM K WORD STACK-1 < INITIALISATION DE K... LAI AMCDAI-ZERO BSR ACCI < ENVOI DE !CDAI... JNE GOGE < ET BIEN CELA NE MARCHE PAS... LRM A,B,X < SAUVEGARDE DE L'ITEM1 : WORD SAVIT1 < (A)=ADRESSE DE LA SAUVEGARDE DANS 'CDAI', WORD ITEM1 < (B)=ADRESSE DE L'ITEM1 A SAUVEGARDER, WORD LTNI < (X)=LONGUEUR D'UN ITEM. WCDA < SAUVEGARDE DE L'ITEM1... STZ IMASKO < MISE DU MASQUE OFF A PRIORI... LAD DEMMEM SVC 0 < PASSAGE A 16 K... LAI '18 WORD '1E15 LR B,X < X=ORIGINE DE LA 'CDAI'. LAI '19 WORD '1E15 SBR X,B XWOR%1: VAL -4 < B=LONGUEUR UTILE DE LA 'CDAP'/'CDAI', LRM A WORD IZBUF-TV1>XWOR%1 < A=LONGUEUR NECESSAIRE (IMAGE+MASQUE), CPR A,B < CELA SUFFIT-IL ??? JL GOGE < B<A : INSUFFISANT POUR TRAVAILLER... TW13: EQU $ BSR APIN STZ IMASKO < OFF A PRIORI... CPI "N" JE TW14 < OK, IMASKO=0 ==> OFF... IC IMASKO < A PRIORI, IMASKO=1 ==> ON... CPI "O" JNE TW13 < ?!??!??! TW14: EQU $ PAGE < < < B O U C L E D ' I N T E R R O G A T I O N : < < LOOP: EQU $ BSR APIN < ENTREE DE LA COMMANDE... CPI REP0 < ET VALIDATION... JL TW12 < ERREUR... CPI REPZ < VALIDATION, SUITE... JG TW12 < ERREUR... LR A,X < X=COMMANDE DEMANDEE, BR &ACOM < BRANCHEMENT AU MODULE SPECIFIQUE... TW12: EQU $ < < < T R A I T E M E N T D E S E R R E U R S : < < ERROR: EQU $ LAD DEMOUT SVC 0 < EDITION DU MESSAGE D'ERREUR... BR ALOOP < ET C'EST TOUT... PAGE < < < A C C E S A U C C I : < < GOCCI: EQU $ QUIT 1 < ACCES AU CCI INTERACTIF... BR ALOOP PAGE < < < E N T R E E D ' U N C A R A C T E R E : < < < ARGUMENT : < A=ADRESSE D'UN MESSAGE SI 'PIN'. < < < RESULTAT : < A=CARACTERE ENTRE. < < IN: EQU $ LAD DEMIN BSR AENTER LBY &AREP < A=CARACTERE REPONSE. RSR PAGE < < < E F F A C E M E N T D E L ' E C R A N : < < IF XOPT05-XXX256,XOPT5,,XOPT5 EFFACE: EQU ERROR XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 EFFACE: EQU $ 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... LAI XCTRL1 STA MCDAJ LA ACTRL1 BSR APWCDA < INITIALISATION DE 'CTRL1'. LAI XCTRL2 STA MCDAJ LA ACTRL2 BSR APWCDA < INITIALISATION DE 'CTRL2'. BR ALOOP < ET A LA BOUCLE D'INTERROGATION... XOPT5: VAL 0 PAGE < < < M O D U L E S D ' A C C E S A U S G N : < < < FONCTION : < PERMETTENT L'ACCES AU SGN < POUR LES IMAGES SUIVANT : < N : NOMME L'IMAGE RESIDENTE, < JUSQU'A UNE COMMANDE 'N' < SUIVANTE, < D : AFFICHE L'IMAGE PRECEDEMMENT < NOMMEE PAR 'N'. < + : CREE L'IMAGE PRECEDEMMENT < NOMMEE PAR 'N', < - : DETRUIT L'IMAGE PRECEDEMMENT < NOMMEE PAR 'N'. < < NAME: EQU $ LAD NOMIN BSR AENTER < ENTREE DU NOM COURANT, LAI EOT STBY &AEOT < ET ON FORCE A PRIORI UN 'EOT'... BR ALOOP < ET C'EST TOUT... < < SOUS-PROGRAMME GENERAL D'ACCES AU SGN : < GOSGN: EQU $ < RESPONSABLE DE TOUS LES ACCES SGN... STBY SGN < MISE EN PLACE DU 'NVP' ARGUMENT, LAI LNOM*NOCMO STA SGN+3 < A PRIORI... LAD SGN SVC 0 < ET ENVOI DE LA DEMANDE... RSR < < MODULES SPECIFIQUES : < DISP: EQU $ < COMMANDE 'D' : LAI SGNLON < ON COMMENCE PAR L'ACN DU DEMANDEUR, BSR AGOSGN JE DISP1 < OK, IL EXISTE... LAI SGNLNS < NON, ON TENTE SOUS :SYS... BSR AGOSGN JE DISP1 < OK... DISP2: EQU $ BR AERROR < TRAITEMENT DES ERREURS... DISP1: EQU $ BR ALOOP < VERS LA BOUCLE SI OK... DELETE: EQU $ < COMMANDE '-' : LAI SGNDLN DELET1: EQU $ BSR AGOSGN JE DISP1 < OK... JMP DISP2 < ERREUR... STORE: EQU $ < COMMANDE '+' : LAI SGNSTN JMP DELET1 PAGE < < < A C T I O N S U R L E Z - B U F F E R : < < MZBUF: EQU $ STZ ZBUF < A PRIORI, Z-BUFFER ACTIF... STZ TRZBUF DC TRZBUF < A PRIORI CHAQUE ENTREE DU Z-BUFFER < N'AURA QU'UN MOT... BSR AIN < ENTREE D'UN CARACTERE... < < REPONSES RECONNUES : < < N : PAS D'UTILISATION DU Z-BUFFER, < O : UTILISATION DU Z-BUFFER (ET UTILISATION DE CELUI < QUI EST DEJA SUR 'DKU'...), < I : UTILISATION DU Z-BUFFER ET INITIALISATION < AVEC L'INFINI... < P : IDEM A "O", AVEC FILTRAGE FINAL, < J : IDEM A "I", AVEC FILTRAGE FINAL. < CPI "N" JE MZBUF6 < PAS DE Z-BUFFER... CPI "O" JE MZBUF4 < UITILISATION DU Z-BUFFER ET UN SEUL < MOT PAR ENTREE... CPI "I" IF XOPT02-XXXOUI,XOPT2,,XOPT2 JE MZBUF1 < INITIALISATION ET 1 MOT PAR ENTREE... STZ TRZBUF < A PRIORI, LE NOMBRE DE MOTS PAR ENTREE < SERA 2... CPI "P" JE MZBUF4 < IDENTIQUE A "O" MAIS AVEC 2 MOTS/ENTREE. CPI "J" < (COMMANDE IDENTIQUE A "I" MAIS AVEC < 2 MOTS/ENTREE...) XOPT2: VAL 0 JNE MZBUF3 < ERREUR : ON INHIBE LE Z-BUFFER !!! < < INITIALISATION DU Z-BUFFER : < MZBUF1: EQU $ < CAS DE "I" ET "J" : LB ZMAX < ON SE PLACE LE PLUS LOIN POSSIBLE < DE L'OBSERVATEUR, ET VU L'ORIENTATION < DE L'AXE DES Z, C'EST A +L'INFINI... LAI 0 < A=ADRESSE DU MOT COURANT DU Z-BUFFER. LYI YSTORE < POUR ECRIRE DANS LE Z-BUFFER. MZBUF5: EQU $ BSR AGZB < INITIALISATION DU Z-BUFFER. ADRI 1,A < AU MOT SUIVANT... JANE MZBUF5 IF XOPT02-XXXOUI,XOPT2,,XOPT2 CPZ TRZBUF < 1 OU 2 MOTS PAR ENTREE ??? JL MZBUF7 < 1 SEUL, OK... IF ZBUF1-1,,XWOR%, IF ATTENTION : LE 'IC' EST IDIOT !!! XWOR%: VAL 0 IC TRZBUF < TRZBUF=1, AFIN D'INITIALISER LE 2EME MOT, LBI 0 < (B)=VALEUR D'INITIALISATION... < A NOTER QUE : < (A)=0 (CF. LE 'JANE'...) MZBUF8: EQU $ BSR AGZB < CLEAR LES MOTS 1 DE CHAQUE ENTREE... ADRI 1,A < PASSAGE A L'ENTREE SUIVANTE... JANE MZBUF8 < SI ELLE EXISTE... STZ TRZBUF < ENFIN, RETOUR SUR LE MOT 0 DE CHAQUE < ENTREE... MZBUF7: EQU $ XOPT2: VAL 0 JMP MZBUF4 < ET LE Z-BUFFER EST AUTORISE... < < AUTORISATION DU Z-BUFFER OU PAS : < MZBUF6: EQU $ IC ZBUF < ZBUF=1 : PAS DE Z-BUFFER... MZBUF4: EQU $ < CAS DE "O" ET "P" : BR ALOOP < ET C'EST TOUT... MZBUF3: EQU $ IC ZBUF < ON DESACTIVE LE Z-BUFFER, DC TRZBUF < ET ON REVIENT A 1 MOT/ENTREE... BR AERROR PAGE < < < O P T I M I S A T I O N ' P O I N T C ' : < < OPTIMI: EQU $ STZ IPTC < IPTC=0 : PAS D'OPTIMISATION A PRIORI... BSR AIN < ENTREE DE LA REPONSE... CPI "N" JE OPTIM1 < PAS D'OPTIMISATION... IC IPTC < IPTC=1 : OPTIMISATION A PRIORI... CPI "O" JNE OPTIMI < !?!??!?!! OPTIM1: EQU $ BR ALOOP < ET C'EST TOUT... PAGE < < < E N T R E E ' Z R ' E T ' T R ' < < ZPIN: EQU $ LAD FZR < ENTREE DE 'FZR'. BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD FTR < ENTREE DE 'FTR'... BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. BR ALOOP < ET C'EST TOUT... PAGE < < < E N T R E E D E C X / C Y / K F U / K F V / K F W : < < DTRANS: EQU $ DTRAN1: EQU $ BSR APIHEX < ENTREE DE 4 CHIFFRES HEXADECIMAUX. JNE DTRAN1 < ERREUR... STA TRX DTRAN2: EQU $ BSR APIHEX < ENTREE DE 4 CHIFFRES HEXADECIMAUX. JNE DTRAN2 < ERREUR... STA TRY DTRAN5: EQU $ LAD KFU BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. DTRAN6: EQU $ LAD KFV BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. DTRAN7: EQU $ LAD KFW BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. DTRAN3: EQU $ LAD KFT BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. < < < E N T R E E D E S C O E F F I C I E N T S < K U X , K V X , ... , K T Z : < < LAD KUX BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KVX BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KWX BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KTX BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KUY BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KVY BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KWY BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KTY BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KUZ BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KVZ BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KWZ BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD KTZ BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. DTRAN4: EQU $ BR ALOOP < EASY ??!?!?! PAGE < < < E N T R E E D E ' O R G X ' E T ' O R G Y ' : < < GORGX: EQU $ STZ MODX < TORE A PRIORI... BSR APIHEX < ENTREE DE ORGX... JE GORGX1 < OK... GORGX2: EQU $ BR AERROR < ET NON... GORGX1: EQU $ NGR A,A STA ORGX GORGX3: EQU $ BSR APIN < ENTREE DE LA REPONSE... CPI "O" JE GORGX4 < TORE... CPI "N" JNE GORGX3 < ERREUR... IC MODX < CE N'EST PAS LE MODE TORE... GORGX4: EQU $ BR ALOOP < OK... GORGY: EQU $ STZ MODY < MODE TORE A PRIORI... BSR APIHEX < ENTREE DE ORGY... JNE GORGX2 < ERREUR... NGR A,A STA ORGY GORGY3: EQU $ BSR APIN < ENTREE DE LA REPONSE... CPI "O" JE GORGY4 < TORE... CPI "N" JNE GORGY3 < ERREUR... IC MODY < CE N'EST PAS LE MODE TORE... GORGY4: EQU $ BR ALOOP < OK... PAGE < < < D E F I N I T I O N D U T R A C E : < < CVP: EQU $ < < < E C L A I R A G E ? ? ? < < ECLAIR: EQU $ BSR APIN FLD F1 FST FCOEF < A PRIORI, ON DONNE A 'FCOEF' LA VALEUR < DE MODULATION MAX... LBY &AREP < A=REPONSE... STZ IECL < IECL=0 : NON A PRIORI... CPI "N" JE ECL1 < NON... IC IECL < IECL=1 : OUI A PRIORI... CPI "O" JNE ECLAIR < ?!!??!! < < SI OUI, ON RENTRE LES COORDONNEES DE LA SOURCE : < ECL2: EQU $ BSR APIHEX JNE ECL2 < ERREUR... STA SX < X(SOURCE)... ECL3: EQU $ BSR APIHEX JNE ECL3 < ERREUR... STA SY < Y(SOURCE)... ECL4: EQU $ BSR APIHEX JNE ECL4 < ERREUR... STA SZ < Z(SOURCE)... ECL1: EQU $ < < < I N T E R P O L A T I O N A N T I - A L I A S I N G : < < ALIAS1: EQU $ BSR APIN < ENTREE DE O/N... STZ IALIAS < IALIAS=0 : "N" A PRIORI... CPI "N" JE ALIAS2 < "N"... CPI "R" JNE ALIAS3 < NON... DC IALIAS < OUI : IALIAS=-1 (<0), ON COMPRIMERA < ENTRE LE ROUGE ET LE BLANC... JMP ALIAS2 < ET C'EST TOUT... ALIAS3: EQU $ CPI "O" JNE ALIAS1 < ??!????! IC IALIAS < IALIAS=1 : "O"... < (ON PRENDRA TOUS LES NIVEAUX DU NOIR < AU BLANC...) ALIAS2: EQU $ < < DOIT-ON TRACER INTERIEUR ET EXTERIEUR ??? < EINT1: EQU $ BSR APIN < (A)=REPONSE, STZ IINT < IINT=0 : INTERIEUR ET EXTERIEUR A PRIORI, CPI "O" < ALORS ??? JE EINT2 < OUI, INTERIEUR ET EXTERIEUR... CPI "N" < NON, ALORS ??? JNE EINT1 < ?!???!?! IC IINT < IINT=1 : EXTERIEUR UNIQUEMENT... EINT2: EQU $ < < INVERSION DE LA NORMALE ??? < ENORM1: EQU $ BSR APIN < (A)=REPONSE : LBI 1 < "P" (POSITIF) A PRIORI... CPI "P" JE ENORM2 < OUI, POSITIF... CPI "N" JNE ENORM1 < ????!??!!? NGR B,B < "N" (NEGATIF) : ON INVERSE... ENORM2: EQU $ LR B,A BSR AFLT FST FKN < FKN=+1 ("P"), < =-1 ("N"). < < TRAITEMENT DES COSINUS : < ECOS1: EQU $ BSR APIN < (A)=REPONSE : STZ ICOS < ICOS=0 : A PRIORI, MODE NORMALE... CPI "N" < NORMAL ??? JE ECOS2 < OUI, ICOS=0... CPI "A" < VALEUR ABSOLUE ??? JNE ECOS1 < ?!??!???! IC ICOS < ICOS=1 : VALEUR ABSOLUE... ECOS2: EQU $ < < SORTIE : < CVP1: EQU $ BR ALOOP < VERS L'INTERROGATION... PAGE < < < E N T R E E D E S T R A N C H E S < A ' X ' , ' Y ' O U ' Z ' C O N S T A N T : < < TRANCH: EQU $ LAD TRANCM BSR AIFLOS < AMPLIFICATEUR DES NIVEAUX... LAD TRANCX BSR AIFLOS < TRANCHE X, LAD TRANCY BSR AIFLOS < TRANCHE Y, LAD TRANCZ BSR AIFLOS < TRANCHE Z. BR ALOOP < VERS L'INTERROGATION... PAGE < < < D E F I N I T I O N D E S T R A C E S < A N A G L Y P H I Q U E S : < < IF XOPT03-XXXOUI,XOPT3,,XOPT3 DANAG: EQU $ LAD FANAG BSR AIFLOS < ENTREE DE LA CONSTANTE 'FANAG'. LAD PANAG BSR AIFLOS < ENTREE DU PLAN DE CONVERGENCE DES YEUX. BR ALOOP < VERS L'INTERROGATION... XOPT3: VAL 0 IF XOPT03-XXXNON,XOPT3,,XOPT3 DANAG: EQU ERROR XOPT3: VAL 0 PAGE < < < E N T R E E D E L ' E X P O S A N T D U C O S I N U S : < < IEXCOS: EQU $ IEXCO1: EQU $ BSR APIHEX < ENTREE D'UNE VALEUR ENTIERE : JNE IEXCO1 < ERREUR... JALE IEXCO1 < ELLE DOIT ETRE STRICTEMENT POSITIVE... STA EXCOS < OK... BR ALOOP < ET C'EST TOUT... PAGE < < < F A U T - I L I N T E R P O L E R S U R L E S < C A R R E S D E B A S E < E T D E L A F O N C T I O N : < < RAPIDE: EQU $ < < MODE RAPIDE, OU INTERPOLATION < SUR LE CARRE DE BASE : < RAPID1: EQU $ BSR APIN < (A)=REPONSE : STZ IINTER < IINTER=0 : OUI A PRIORI... CPI "O" < ??? JE RAPID2 < ON INTERPOLE, C'EST LE MODE LENT... CPI "N" < ??? JNE RAPID1 < ?!??!??!?! IC IINTER < IINTER=1 : ON N'INTERPOLE PAS, C'EST < LE MODE RAPIDE... (PLEIN DE TROUS) RAPID2: EQU $ < < FAUT-IL CALCULER SYSTEMA- < TIQUEMENT LA FONCTION, OU < BIEN L'INTERPOLER : < RAPID3: EQU $ BSR APIN < (A)=REPONSE : STZ INTER2 < INTER2=0 : "N" A PRIORI... LXI XVARU < POUR 'YVARU', LYI XVARV < ET 'YVARV'... CPI "N" < ??? JE RAPID4 < =0 : ON CALCULERA LA FONCTION SYSTE- < MATIQUEMENT... CPI "O" < ??? JNE RAPID3 < ?!????!? IC INTER2 < INTER2=1 : "O", ON INTERPOLERA LA < FONCTION DANS LE CARRE DE BASE... LXI XFINCU < POUR 'YVARU', LYI XFINCV < ET 'YVARV'... RAPID4: EQU $ STX YVARU < 'YVARU' ET 'YVARV' SONT STY YVARV < FONCTION DE 'INTER2'... BR ALOOP < ET RETOUR A L'INTERROGATION... PAGE < < < P O S I T I O N D E L ' O B S E R V A T E U R : < < OBS: EQU $ OBS1: EQU $ BSR APIHEX JNE OBS1 < ERREUR... STA OX < X(OBSERVATEUR). OBS2: EQU $ BSR APIHEX JNE OBS2 < ERREUR... STA OY < Y(OBSERVATEUR). OBS3: EQU $ BSR APIHEX JNE OBS3 < ERREUR... STA OZ < Z(OBSERVATEUR). BR ALOOP < ET C'EST TOUT... PAGE < < < E N T R E E D E M ( I , J ) : < < < ARGUMENT : < A = ADRESSE DU MESSAGE POUR 'TW', < NUMERO DE L'ELEMENT POUR 'TX'. < < < RESULTAT : < A,B = COEFFICIENT EN FLOTTANT. < < PTRANS: EQU $ PSR X,Y LR A,X < SAVE LE NUMERO DE L'ELEMENT, SLRD NBRHEX ORI "0" < CONVERSION ASCI DU NUMERO, SLLS NBRHEX XWOR%: VAL -NBRHEX ORI "0">XWOR% < SUITE... SLLD NBRHEX LR X,A ADRI -'11,A SLRD NBRHEX LR A,X ADR A,A ADR A,X < X=TRIPLE DU PREMIER CHIFFRE, LAI 0 SLLD NBRHEX ADR A,X < X=CONVERSION LINEAIRE DU NUMERO DE < L'ELEMENT : 11 --> 0, 12 --> 1,... ADR X,X < ET ON DOUBLE CAR IL S'AGIT D'UNE < MATRICE FLOTTANTE... PTRAN1: EQU $ BSR APIHEX < ET CONVERSION... JNE PTRAN1 < ERREUR... LR A,Y < Y=NUMERATEUR... BSR APIHEX < ET CONVERSION... JNE PTRAN1 < ERREUR... BSR AFLT BSR ASFWOR < SAUVEGARDE DU DENOMINATEUR... LR Y,A BSR AFLT < CALCUL DU NUMERATEUR, FDV FWORK < (A,B)=NUMERATEUR/DENOMINATEUR. FST &AM < QUE L'ON RANGE DANS LA MATRICE... PLR X,Y RSR 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 ??? < < TRANSM: EQU $ BSR APIN < ENTREE DE LA REPONSE : STZ ITRANS < NON A PRIORI... CPI "N" JE PIC4 < "NON"... IC ITRANS < OUI A PRIORI... CPI "O" JNE TRANSM < ????!?!? LAI '11 BSR APTRAN < ENTREE DE M11, LAI '12 BSR APTRAN < ENTREE DE M12, LAI '13 BSR APTRAN < ENTREE DE M13, LAI '21 BSR APTRAN < ENTREE DE M21, LAI '22 BSR APTRAN < ENTREE DE M22, LAI '23 BSR APTRAN < ENTREE DE M23, LAI '31 BSR APTRAN < ENTREE DE M31, LAI '32 BSR APTRAN < ENTREE DE M32, LAI '33 BSR APTRAN < ENTREE DE M33. PIC1: EQU $ BSR APIHEX JNE PIC1 < ????! BSR AFLT FST KRX < ENTREE DE KRX, PIC2: EQU $ BSR APIHEX JNE PIC2 < ??!!!! BSR AFLT FST KRY < ENTREE DE KRY, PIC3: EQU $ BSR APIHEX JNE PIC3 < ??!??! BSR AFLT FST KRZ < ENTREE DE KRZ. < < SORTIE : < PIC4: EQU $ BR ALOOP < ???!?! PAGE < < < C H O I X D U M O D E D E P R O J E C T I O N : < < PROJE: EQU $ BSR APIN < ENTREE DU MODE : < 0 : PAR COST,SINT ; < 1 : EN PERSPECTIVE. ADRI -"0",A JAL PROJE < ERREUR... CPI 1 JG PROJE < ERREUR... STA IPROJ < RANGEMENT DU MODE... JAE PROJE2 < PAR COST,SINT... PROJE1: EQU $ < EN PERSPECTIVE... BSR APIHEX < ENTREE DE PZ. JNE PROJE1 < ERREUR... BSR AFLT FST PZ < PZ=POSITION DE L'ECRAN. PROJE2: EQU $ BR ALOOP < ET C'EST TOUT... PAGE < < < E N T R E E D U C O S T : < < < FONCTION : < ON PEUT CHANGER LE 'COST' DE < LA PROJECTION MODE 0, ET PAR < EXEMPLE PASSER DE COS(30)=0.86602 < QUI EST LA VALEUR IMPLICITE A < 0.5 QUI ASSURE LA COMPATIBILITE < AVEC 'GR'/'GT'... < < INCOST: EQU $ LAD COST < CE QUI DONNE 'COST'... BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. BR ALOOP < ET C'EST TOUT, POURQUOI S'EN PRIVER... PAGE < < < E N T R E E D E ' S C A L D ' : < < < FONCTION : < DANS DES CAS TRES VICIEUX, < LA PLUS GRANDE DIAGONALE DE < LA TRNSFORMEE DU CARRE DE BASE < PEUT ETRE SOUS-ESTIMEE ; DANS < CES CONDITIONS, ON PEUT LA < MODIFIER PAR LE FACTEUR 'SCALD'... < < PSCALD: EQU $ LAD SCALD < CE QUI DONNE 'SCALD'... BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. BR ALOOP < FACILE, N'EST-IL PAS ??? PAGE < < < E N T R E E D U S O U S - E C H A N T I L L O N N A G E : < < SOUSEC: EQU $ SOUSE1: EQU $ BSR AIFLOT FCAM F1 JL SOUSE1 < ERREUR... FST FDELX < PAS SUR OX... SOUSE2: EQU $ BSR AIFLOT FCAM F1 JL SOUSE2 < ERREUR... FST FDELY < PAS SUR OY... SOUSE3: EQU $ BSR AIFLOT JLE SOUSE3 < ERREUR... FST FKDEL < MULTIPLICATEUR DE 'FDELX' ET 'FDELY'... BR ALOOP < ET C'EST TOUT... PAGE IF XOPT05-XXX512,XOPT5,,XOPT5 < < < C H O I X V R A I / F A U X 5 1 2 : < < PDEF: EQU $ < < ENTREE DU MODE CHOISI : < PDEF3: EQU $ BSR APIN < ENTREE DU CHOIX QUI A ETE FAIT : ADRI -"0",A < DECODAGE BINAIRE, JAL PDEF3 < BERKKK... CPI XDEF2 < VALIDATION SUPERIEURE... JG PDEF3 < RE-BERKKK.... IF XDEF1-K,,XWOR%, IF ATTENTION : CES VALIDATIONS SONT INSUFFISANTES !!! XWOR%: VAL 0 STA IDEF < MEMORISATION DU MODE DEMANDE. < < PREPARATION DE L'ECHANTILLONNAGE : < FLD F1 < FAUX 512 A PRIORI... CPZ IDEF < ALORS ??? JE PDEF1 < FAUX 512... FLD F05 < VRAI 512... PDEF1: EQU $ FST FDELX < FDELX=1 SI FAUX 512, < =1/2 SI VRAI 512. FST FDELY < FDELY=1 SI FAUX 512, < =1/2 SI VRAI 512. FLD F1 FDV FDELX < (OU 'FDELY'...) FST FKDEL < FKDEL=1 SI FAUX 512, < =2 SI VRAI 512. BR ALOOP < VERS LA COMMANDE SUIVANTE... XOPT5: VAL 0 IF XOPT05-XXX256,XOPT5,,XOPT5 PDEF: EQU ERROR XOPT5: VAL 0 PAGE < < < E N T R E E D ' U N N O M B R E H E X A D E C I M A L < E T C O N V E R S I O N : < < < ARGUMENT : < A=ADRESSE D'UN MESSAGE SI 'PIHEX'. < < < RESULTAT : < VOIR 'HEX'... < < IHEX: EQU $ LAD DEMHEX BSR AENTER BSR AHEX < A=NOMBRE HEXADECIMAL, ET CODES CONDITION. RSR PAGE < < < E N T R E E D ' U N E C O N S T A N T E F L O T T A N T E : < < < RESULTAT : < A,B=CONSTANTE FLOTTANTE. < INDICATEURS POSITIONNES PAR 'FCAZ'. < < IFLOT: EQU $ PSR X,Y IFLOT1: EQU $ BSR APIHEX < ENTREE DU NUMERATEUR, JNE IFLOT1 < ERREUR... LR A,Y < Y=NUMERATEUR. BSR APIHEX < ENTREE DU DENOMINATEUR, JNE IFLOT1 < ERREUR... JAE IFLOT1 < IL NE PEUT ETRE NUL !!! BSR AFLT BSR ASFWOR < DENOMINATEUR, LR Y,A BSR AFLT < NUMERATEUR, FDV FWORK < RESULTAT=NUMERATEUR/DENOMINATEUR. BSR AFCAZ < ???? PLR X,Y RSR < < < E N T R E E D ' U N E C O N S T A N T E F L O T T A N T E < D E N O M D O N N E : < < < ARGUMENT : < (A)=ADRESSE DE LA CONSTANTE. < < IFLOS: EQU $ PSR W LR A,W < (W)=ADRESSE DE LA COSTANTE FLOTTANTE. BSR AIFLOT < (A,B)=CONSTANTE FLOTTANTE, FST 0,W < QUE L'ON RANGE A L'ADRESSE ARGUMENT... PLR W RSR PAGE < < < E N T R E E D E L A C O N S T A N T E ' K ' < < INFK: EQU $ BSR AIFLOT < ENTREE DE FK... JLE INFK < 'K' DOIT ETRE STRICTEMENT POSITIVE... FST FK < OK... BR ALOOP PAGE < < < C O N S T A N T E D E D E R I V A T I O N : < < < ATTENTION : < ON RENTRE LA FRACTION XXXX/YYYY ; < DEUX CAS SE RENCONTRENT ALORS : < XXXX/YYYY>0 : FH=XXXX/YYYY, < XXXX/YYYY<0 : FH=FKH*FPAS RECALCULEE POUR < CHAQUE CARRE DE BASE. < < CDER: EQU $ BSR AIFLOT < ENTREE DE H : STZ IDERIV < IDERIV=0 A PRIORI... BSR AFCAZ < QUE VAUT LE NOMBRE FLOTTANT ENTRE ??? JE CDER < NUL, ERREUR... JG CDER2 < POSITIF, FH=XXXX/YYYY... BSR AFNEG < NEGATIF, FST FKH < FKH=-XXXX/YYYY ET IDERIV=0. JMP CDER1 < 'FH' SERA RECALCULE SYSTEMATIQUEMENT... CDER2: EQU $ IC IDERIV < 'FH' A PRIORI : IDERIV=1#0... FST FHU < CE QUI DONNE 'FHU', BSR ASFWOR FDV FHEPS FAD FWORK FST FHV < FHV=FHU+(FHU/10)... CDER1: EQU $ BR ALOOP PAGE < < < E N T R E E D ' U N E C O N S T A N T E < D E T R A V A I L : < < GCT: EQU $ BSR AIHEX < ENTREE DU NUMERO : JNE GCT < ERREUR... JAL GCT < ERREUR... CPI NCT JGE GCT < ERREUR... ADR A,A LR A,X < X=INDEX DOUBLE-MOT DE LA CONSTANTE... LAD &ACT BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. BR ALOOP PAGE < < < < : D E F I N I T I O N D E B O R N S : < < DBORNS: EQU $ BSR AIHEX < ENTREE DE LA BORNE SUPERIEURE : JNE DBORNS < ERREUR... CP BORNI < VALIDATION RELATIVE... JL DBORNS < ERREUR... STA BORNS < OK... BR ALOOP < ET C'EST TOUT... < < < > : D E F I N I T I O N D E B O R N I : < < DBORNI: EQU $ BSR AIHEX < ENTREE DE LA BORNE INFERIEURE : JNE DBORNI < ERREUR... CP BORNS < VALIDATION RELATIVE... JG DBORNI < ERREUR... STA BORNI < OK... BR ALOOP < ET C'EST TOUT... PAGE < < < D E F I N I T I O N D U P L A N D E C O U P E : < A * X + B * Y + C * Z + D = 0 < < IF XOPT01-XXXOUI,XOPT1,,XOPT1 DFPLAN: EQU $ LAD PLANA < COEFFICIENT 'A', BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD PLANB < COEFFICIENT 'B', BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD PLANC < COEFFICIENT 'C', BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. LAD PLAND < COEFFICIENT 'D'. BSR AIFLOS < ENTREE DE LA CONSTANTE D'ADRESSE 'A'. BR ALOOP < ET C'EST TOUT... XOPT1: VAL 0 IF XOPT01-XXXNON,XOPT1,,XOPT1 DFPLAN: EQU ERROR XOPT1: VAL 0 PAGE < < < G E S T I O N D E L A T R A N S P A R E N C E : < < IF XOPT05-XXX256,XOPT5,,XOPT5 VITRE: EQU $ BSR AIN < ENTREE DU NIVEAU DE GRIS "0" A "7"), ADRI -"0",A < CONVERSION... JAL VITRE < ERREUR... CPI NIVMAX JG VITRE < ERREUR... LR A,X < X=NIVEAU DEMANDE, LB LTRANS < B=LISTE DES TRANSPARENCES. BSR AIN < ENTREE DE O (ON) / N (OFF) : CPI "O" JE VITRE1 < "ON"... CPI "N" JNE VITRE < ON RECOMMENCE TOUT... < < SUPPRESSION DE LA TRANSPARENCE : < RBT NBITMO,X JMP VITRE2 < < MISE EN PLACE DE LA TRANSPARENCE : < VITRE1: EQU $ SBT NBITMO,X VITRE2: EQU $ STB LTRANS BR ALOOP XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 VITRE: EQU ERROR < PAS DE TRANSPARENCE EN 512*512. XOPT5: VAL 0 <******************************************************************************* JMP JMPOVL < ET ON SAUTE L'EN-TETE DE LA BRANCHE... < < < B R A N C H E D ' O V E R L A Y : < < DEBOV1: EQU $ XWOR%1: VAL DEBOV1-ZERO*NOCMO OVLTZ2: EQU ZERO+XWOR%1 < ADRESSE-OCTET DE LA BRANCHE... BYTE " ";NOMBB ASCI " " BYTE '04;'D0 XWOR%1: VAL ITEM2-ZERO IF $-ZERO-XWOR%1,XWOR%,, IF ATTENTION : LA RACINE DE L'OVERLAY EST TROP LONGUE !!! XWOR%: VAL 0 JMPOVL: EQU $ <******************************************************************************* PAGE IF XOPT05-XXX512,XOPT5,,XOPT5 XXXIMA: VAL XXIMA3 EOT #SIP IMAGE 512# XXXIMA: VAL XXIMA5 EOT #SIP IMAGE 512# XOPT5: VAL 0 PAGE < < < E N T R E E D E L ' A T T R I B U T I O N < D E S N I V E A U X : < < IF XOPT05-XXX256,XOPT5,,XOPT5 PATNIV: EQU $ LXI 0 < (X)=INDEX DES NIVEAUX, PATNI1: EQU $ BSR AIN < ENTREE D'UN CARACTERE DANS 'A' : ADRI -"0",A < CONVERSION BINAIRE, JAL PATNI1 < ERREUR... CPI NIVMAX < ??? JG PATNI1 < ERREUR... STBY &AATNIV < MEMORISATION DE LA VALEUR (A) DU NIVEAU < A AFFICHER REELLEMENT LORSQUE LE NIVEAU < (X) EST CALCULE... ADRI 1,X < AU NIVEAU SUIVANT, LR X,A CPI NIVMAX < S'IL EXISTE ??? JLE PATNI1 < OUI... BR ALOOP < NON, ON SORT... XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 PATNIV: EQU ERROR < PAS DE REATTRIBUTION EN 512*512... XOPT5: VAL 0 PAGE < < < E N V O I D E S C O U L E U R S : < < < FONCTION : < ON MET UN TEL MODULE DANS < " +" (ANALOGUE A CELUI DE "TV") < AFIN DE PERMETTRE DES CHANGEMENTS < RAPIDES DE COULEURS ENTRE 2 IMAGES < DIFFUSEES AVEC LA FONCTION D'ENTRE- < LACAGE DE CMS5... < < < FORMAT : < U<CARACTERE>XYZT OU <CARACTERE> ET LE CHIFFRE < 'X' SONT IGNORES AFIN D'ETRE COMPATIBLE AVEC 'TV'... < < IF XOPT06-XXXOUI,XOPT6,,XOPT6 COLOR: EQU $ BSR AIN < ENTREE D'UN CARACTERE QUELCONQUE... < (QUI EST IGNORE AFIN D'ETRE COMPATI- < BLE AVEC 'TV') COLOR1: EQU $ BSR AIHEX < ENTREE DU CODE COULEUR DANS LE STYLE < DE "TV" : < 0XYZ, OU : < X=LISTE DES CANAUX DE SORTIE DANS L'ORDRE < B ('0400), V ('0200) ET B ('0100) ; < Y=NUMERO DU REGISTRE QUE L'ON CHARGE DE < 0 A 15 (JEUX 0 ET 1) ; < Z=NIVEAU (DU MIN=15 AU MAX=0). JNE COLOR1 < ERREUR... AND MASCOL < SUPPRESSION DES 4 BITS DE TETE... STA BUFCOU LAD DEMCOU SVC 0 < ET COLORIAGE... BR ALOOP < ET C'EST TOUT... XOPT6: VAL 0 IF XOPT06-XXXNON,XOPT6,,XOPT6 COLOR: EQU ERROR < PAS D'ACCES AUX 'LUT' 256 EN 512*512... XOPT6: VAL 0 PAGE < < < A C C E S A T V 2 : < < STV2: EQU $ LRM A,B,X WORD TV2 WORD IMAGE WORD LIMAG*NCOOL WCDA BR ALOOP GTV2: EQU $ LRM A,B,X WORD TV2 WORD IMAGE WORD LIMAG*NCOOL RCDA BR ALOOP PAGE < < < E N T R E E D E Q U E L Q U E C H O S E : < < < ARGUMENT : < A=ADRESSE DE LA DEMANDE. < < ENTER: EQU $ PSR A,X,Y,W LR A,W < W=ADRESSE DE LA DEMANDE : LA 1,W < A=ADRESSE OCTET DU BUFFER, LYI 0 < Y=INDEX DU BUFFER, SLRS NOCMO=0 < CONVERSION EN UNE ADRESSE MOT, ADCR Y < Y=INDEX INITIAL DU BUFFER COURANT. SBT 0 < MISE EN PLACE DU BIT INDEX, STA ABUFC < ET GENERATION DU RELAI VERS LE BUFFER. LX 2,W < X=NOMBRE D'OCTETS MAX A DEPLACER... ENTER2: EQU $ PSR X LA IEG < A=INDEX COURANT DE L'ITEM1, CP NCP < ET VALIDATION ??? JL ENTER3 < OK... BR AALTM < NON, ON FAIT COMME SI UN ALT-MODE < ETAIT ARRIVE... ENTER3: EQU $ IC IEG < PROGRESSION DE L'INDEX DE L'ITEM1. LR A,X < X=INDEX D'ACCES A L'ITEM1, LBY &AI1 < A=CARACTERE COURANT DE L'ITEM1, CPI " " < EST-CE L'ELEMENT NEUTRE ??? JNE ENTER6 < NON... PLR X < OUI, LR X,A CP 2,W < EST-ON EN TETE DU MESSAGE ??? JE ENTER2 < OUI, ON IGNORE LE 'SPACE'... PSR X < NON, ON LE CONSERVE... LAI " " < RESTAURATION DE 'A'... ENTER6: EQU $ CPI ";" < EST-CE LA FIN DE MESSAGE ??? JNE ENTER4 < NON, LAI '04 < OUI, ON LE REMPLACE PAR 'EOT'... ENTER4: EQU $ LR Y,X STBY &ABUFC < ET RANGEMENT DANS LE BUFFER... ADRI 1,Y < PROGRESSION DE L'INDEX BUFFER. PLR X CPI '04 < EST-CE UNE FIN DE MESSAGE ??? JE ENTER5 < OUI, ON ARRETE LA... JDX ENTER2 < NON, ON CONTINUE... ENTER5: EQU $ PLR A,X,Y,W RSR PAGE < < < C O N V E R S I O N H E X A --> B I N A I R E : < < < ARGUMENT : < LE BUFFER 'REP'. < < < RESULTAT : < B=0 : (A)=VALEUR BINAIRE, < B#0 : ERREUR DE SYNTAXE HEXA-DECIMALE. < LES INDICATEURS POSITIONNES SUR (B). < < HEX: EQU $ BASE10: VAL 10 BASE16: VAL 16 PSR X,Y LYI NBRHEX LXI 0 < INDEX DU BUFFER DE REPONSE. LBI 0 < CLEAR LE REGISTRE B. HEX1: EQU $ LBY &AREPX < A=CARACTERE COURANT DU BUFFER. ADRI -"0",A JAL HEX4 < ERREUR : CARACTERE NON RECONNU. CPI BASE10 < EST-CE UN CHIFFRE ??? JL HEX2 < OUI , C'EST UN CHIFFRE. ADRI -"A"+"9"+1,A < NON. CPI BASE10 < VALIDATION. JL HEX4 < ERREUR : CARACTERE NON RECONNU. CPI BASE16 < VALIDATION. JGE HEX4 < ERREUR : CARACTERE NON RECONNU. HEX2: EQU $ SCRS NBITMO/NBRHEX < MISE DES 4 BITS EN TETE DE A. SCLD NBITMO/NBRHEX < ET CONCATENATION A B. ADRI 1,X < PROGRESSION DE L'INDEX. CPR X,Y < EST-CE FINI ??? JNE HEX1 < NON , ON CONTINUE. LR B,A < A=VALEUR BINAIRE DE (REP). LBI 0 < B=0 : ETOUR OK. HEX3: EQU $ PLR X,Y CPZR B < POSITIONNEMENT DES INDICATEURS. RSR < < RETOURS EN ERREUR : < HEX4: EQU $ LR B,A < A=VALEUR COURANTE... LBI 1 < B#0. JMP HEX3 < VERS LA SORTIE ... PAGE < < < E N V O I D ' U N E C A R T E A U C C I : < < < ARGUMENT : < A=ADRESSE MOT DE LA CARTE. < < CCI: EQU $ ADR A,A < CONVERSION EN UNE ADRESSE OCTET. STA DEMCC+1 LAD DEMCC SVC 0 < ET ENVOI DE LA CARTE... RSR PAGE < < < M O U V E M E N T S R E S I D E N T <--> T V : < < MOV0: EQU $ < RESIDENT R+V+B --> TV. LAD DEMTV0 SVC 0 < BLEU. BR ALOOP MOV4: EQU $ < TV R+V+B --> RESIDENT. LRM A,B,X WORD TV1 WORD IMAGE WORD LIMAG*NCOOL RCDA BR ALOOP PAGE < < < A C C E S A U Z - B U F F E R : < < < UTILISATION DES REGISTRES : < A=ADRESSE D'UN MOT DANS LE Z-BUFFER (YS/XS), < B=INFORMATION (INT(FZS)) A Y METTRE, OU RESULTAT... < Y=YLOAD/YSTORE SUIVANT LE SENS... < TRZBUF=-1 : UN MOT PAR ENTREE, < =0 : 2 MOTS/ENTREE, ET ON RECHERCHE LE MOT0, < =+1 : 2 MOTS/ENTREE, ET ON RECHERCHE LE MOT1. < < GZB: EQU $ STB MCDAR < AU CAS OU CE SERAIT 'YSTORE'... PSR A,X,W LBI 0 LXI LEZBUF=0 CPZ TRZBUF < UN OU DEUX MOTS PAR ENTREE ??? SBCR X < X=0 : 1 MOT/ENTREE (TRZBUF<0), < X=1 : 2 MOTS PAR ENTREE (TRZBUF>=0). XWOR%1: VAL LIZBUF=0 SCLD NBITMO-XWOR%1,X < B=NUMERO DE BLOC, SLRS NBITMO-XWOR%1,X < A=ADRESSE DANS LE BLOC. < (L'ADRESSE EST DE MOT SI (X)=0, < OU DE DOUBLE-MOT SI (X)=1) CPZ TRZBUF < 1 OU 2 MOTS PAR ENTREE ??? JL GZB0 < 1 SEUL, (A) EST BON... SLLS 0,X < CONVERSION EN UNE ADRESSE-MOT, AD TRZBUF < 2, IL FAUT AJOUTER LE NUMERO DU MOT < CHOISI POUR AVOIR SON ADRESSE... GZB0: EQU $ XR A,B < A=NUMERO DE BLOC, B=ADRESSE DANS LE BLOC. USE W,DZBUF LRM W WORD BUF1 < (W)=DESCRIPTEUR DU PREMIER BUFFER : CP SDKU < EST-ON DANS LE PREMIER BUFFER ??? JE GZB2 < OUI... ADRI LDZBUF,W < NON, CP SDKU < EST-ON DANS LE DEUXIEME ??? JE GZB2 < OUI... < < REECRITURE DU BLOC COURANT LORSQU'IL A ETE MODIFIE : < PSR A,B < SAVE LE BLOC DEMANDE ET LE DEPLACEMENT. LA BAGE02 < TEST DES POIDS FORTS DE L'AGE : CP BAGE02-DZBUF-LDZBUF,W JG GZB7 < LE DEUXIEME EST LE PLUS VIEUX, ON < L'ELIMINE... JL GZB10 < LE PREMIER, ON L'ELIMINE... XWOR%1: VAL 1 < ON DOUTE : IL FAUT TESTER LES POIDS < FAIBLES, MAIS ATTENTION AUX NOMBRES < NEGATIFS... LA BAGE01-DZBUF-LDZBUF,W SLRD NBITMO+XWOR%1 < (B)=POIDS FAIBLES DE L'AGE DU PREMIER/2. LA BAGE01 SLRS XWOR%1 < (A)=POIDS FAIBLES DE L'AGE DU SECOND/2, SBR B,A < ALORS QUI EST LE PLUS VIEUX ??? < (A)=(AGE2-AGE1)/2. JAG GZB7 < LE DEUXIEME, ON L'ELIMINE... GZB10: EQU $ ADRI -LDZBUF,W < LE PREMIER, ON L'ELIMINE... GZB7: EQU $ STZ BAGE01 STZ BAGE02 < ON RAJEUNIT LE BLOC QUE L'ON ELIMINE... BSR ASPDKU < ECRITURE DU BLOC COURANT S'IL EXISTE < ET S'IL A ETE MODIFIE... PLR A,B < RESTAURE LE BLOC DEMANDE ET LE DEPLACE- < MENT A L'INTERIEUR... < < LECTURE DU BLOC DEMANDE : < GZB3: EQU $ STA SDKU < NOUVEAU BLOC COURANT, STZ MDKU < PAS ENCORE MODIFIE... XWOR%1: VAL NSDKU=0 SLLS XWOR%1 < CONVERSION EN UNE ADRESSE DKU... STA RDKU+3 LAD RDKU SVC 0 < LECTURE DU BLOC DEMANDE... < < ACCES AU MOT DEMANDE : < GZB2: EQU $ LA BADR < (A)=ADRESSE DU BUFFER, ADR A,B < B=ADRESSE DU MOT DEMANDE DANS LA 'CDAI'. LAD MCDAR XR A,B < A=ADRESSE DU MOT DANS LA 'CDAI', < B=ADRESSE DU MOT OU RANGER/PRENDRE < L'INFORMATION. LXI 1 < X=1 MOT A TRANSFERER... CPZR Y < QUEL EST LE SENS DE L'OPERATION ??? JE GZB4 < LOAD... IC MDKU < STORE : DANS CE CAS, ON COMPTABILISE < LA MISE A JOUR... JNE GZB9 < OK... QUIT 1 < PASSAGE PAR 0... TRES MAUVAIS... PASSER < SUR DOUBLE MOT COMME POUR 'BAGE'... GZB9: EQU $ WCDA JMP GZB5 GZB4: EQU $ RCDA GZB5: EQU $ IC BAGE11 < LES 2 BUFFERS VONT VIEILLIR ENSEMBLE : JNE GZB1 < OK... IC BAGE12 < POIDS FORTS... GZB1: EQU $ IC BAGE21 < POIDS FAIBLES... JNE GZB8 < OK... IC BAGE22 < POIDS FORTS... GZB8: EQU $ LB MCDAR < QUELQUE SOIT LE MODE 'B' EST BON... PLR A,X,W RSR < < < E C R I T U R E B L O C C O U R A N T : < < SPDKU: EQU $ LA SDKU < A=BLOC COURANT... XWOR%1: VAL NSDKU=0 IF BIT>XWOR%1-NSDKU,,XWOR%, IF ATTENTION : NSDKU DOIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 SLLS XWOR%1 < CONVERSION EN UNE ADRESSE SUR DKU... STA WDKU+3 LA BADR < (A)=ADRESSE MOT DU BUFFER, SLLS NOCMO=0 STA WDKU+1 < QUE L'ON CONVERTIT EN OCTET POUR STA RDKU+1 < L'ECRITURE ET LA LECTURE... CPZ SDKU < EN FAIT, LE BLOC EXISTE-T'IL ??? JL GZB6 < NON, RIEN A FAIRE... CPZ MDKU < OUI, MAIS A-T'IL ETE MODIFIE ??? JE GZB6 < NON, RIEN A ECRIRE NON PLUS... LAD WDKU SVC 0 < REECRITURE DU BLOC COURANT... JE GZB6 < OK... QUIT 1 < DKU ?!??!??!!! GZB6: EQU $ RSR PAGE < < < A R R O N D I F L O T T A N T : < < ROND: EQU $ JAL ROND1 < NOMBRE NEGATIF... FAD F05 < NOMBRE POSITIF... JMP ROND2 ROND1: EQU $ FSB F05 ROND2: EQU $ BSR AFIX RSR PAGE < < < ' F A B S ' , ' F C A Z ' , ' F I X ' , ' F L T ' < E T ' F N E G ' F L O T T A N T S , < E T S T O R E ' F W O R K ' : < < < NOTA : < CES SOUS-PROGRAMMES EXISTENT < POUR DES RAISONS D'ENCOMBRE- < MENT MEMOIRE, LES INSTRUCTIONS < CORRESPONDANTES OCUPANT 2 MOTS, < ALORS QU'UN 'BSR' N'EN OCCUPE < QU'UN SEUL... < < FABS: EQU $ FABS RSR FCAZ: EQU $ FCAZ RSR FIX: EQU $ FIX RSR FLT: EQU $ FLT RSR FNEG: EQU $ FNEG RSR SFWORK: EQU $ FST FWORK RSR PAGE < < < O P E R A T I O N S I N T E R - I M A G E S : < < TRANS: EQU $ < APPLICATION DE M(I,J). < < CHARGEMENT DE L'OVERLAY ENTIER : < LAD DEMOVG SVC 0 < < TRANSFORMATION : < LRM A WORD SPTR STA ASPTR < ACCES AU MODULE DE TRANSFORMATION DE < CHAQUE POINT... BSR ASPOP IF XOPT02-XXXOUI,XOPT2,,XOPT2 < < GENERATION PLUS FINE AVEC < FILTRAGE EVENTUEL : < CPZ TRZBUF < 1 OU 2 MOTS PAR ENTREE DU Z-BUFFER ??? JL TRANS1 < 1 SEUL, RIEN DE PLUS A FAIRE... IF ZBUF1-1,,XWOR%, IF ATTENTION : LE 'IC' QUI SUIT EST IDIOT !!! XWOR%: VAL 0 STZ TRZBUF IC TRZBUF < TRZBUF=1 : AFIN D'ATTEINDRE LE MOT 1 < DE CHAQUE ENTREE DU Z-BUFFER... LA IMASKO PSR A < SAUVEGARDE DE 'IMASKO', STZ IMASKO < ET INHIBITION DU Z-BUFFER, CAR LE MASQUE < COURANT NE CORRESPOND PLUS A L'IMAGE < GENEREE... LRM A WORD SPTS STA ASPTR < ACCES AU MODULE DE RELECTURE DES MOTS 1 < DU Z-BUFFER SUIVANT LES PARAMETRES DE < MASQUE, D'ORIGINE,... COURANTS... BSR ASPOP < GENERATION PLUS FINE DE L'IMAGE... PLR A STA IMASKO < RESTAURE 'IMASKO'... IF ZBUF0-0,,XWOR%, IF ATTENTION : LE 'STZ' EST IDIOT !!! XWOR%: VAL 0 STZ TRZBUF < RETOUR AU MOT0 A PRIORI... TRANS1: EQU $ XOPT2: VAL 0 < < RESTAURATION DE L'ITEM1 : < BSR ARITEM < RESTAURATION DE L'ITEM1... < < RETOUR A L'INTERPRETEUR : < BR ALOOP PAGE < < < R E S T A U R A T I O N D E L ' I T E M 1 : < < < FONCTION : < ETANT DONNE QUE L'OVERLAY < REFERENCE DANS #SI FONCTION# < PEUT EMETTRE UN "!CDAJ...", IL < CONVIENT DE REEMETTRE UN "!CDAI" < AVANT DE RESTAURER L'ITEM1... < < RITEM: EQU $ < < RETOUR A LA 'CDAI' : < LAI AMCDAI-ZERO BSR ACCI < RETOUR A "!CDAI", AU CAS OU UN "!CDAJ" < AURAIT ETE EMIS... < ON FAIT CELA AUSSI POUR LA RAISON < SUIVANTE : A L'ENTREE DANS " +", ON < REGARDE SI LA 'CDA' EST ACCESSIBLE ; < SI ELLE NE L'EST PAS, ON FAIT UN RETOUR < IMMEDIAT A 'GE', PAR 'GOGE' ; CE MODULE < APPELLE LE SOUS-PROGRAMME PRESENT (SOIT < 'RITEM') : OR, LA 'CDA' ETANT INACCES- < SIBLE, LE 'RCDA' QUI SUIT PROVOQUERA UNE < TRAPPE... JNE RITEM1 < RIEN A FAIRE, CAR LA 'CDA' EST INAC- < CESSIBLE... < < RESTAURATION DE L'ITEM1 : < LRM A,B,X < OUI : WORD SAVIT1 < (A)=ADRESSE DE LA SAUVEGARDE DANS 'CDAI', WORD ITEM1 < (B)=ADRESSE DE L'ITEM1 A SAUVEGARDER, WORD LTNI < (X)=LONGUEUR D'UN ITEM. RCDA < RESTAURATION DE L'ITEM1... RITEM1: EQU $ < < RETOUR : < RSR PAGE IF XOPT02-XXXOUI,XOPT2,,XOPT2 < < < F I L T R A G E F I N A L D E L ' I M A G E : < < SPTS: EQU $ PSR A,B,X,Y LA YS SWBR A,A OR XS < (A)=(YS,XS) POUR ACCEDER LE Z-BUFFER, LYI YLOAD < (Y)=FONCTION DE LECTURE, BSR AGZB < ACCES DANS 'B' AU MOT1 DU Z-BUFFER (A < NOTER QUE 'TRZBUF' EST DEJA POSITIONNE). SIGPT:: VAL NBITMO-NCOOL/2 < NOMBRE DE BITS POUR METTRE LE NOMBRE DE < POINTS EN COLLISION SUR (XS,YS), SIGNIV:: VAL SIGPT+NCOOL < NOMBRE DE BITS POUR METTRE LE SIGMA < DE LEURS NIVEAUX... LAI 0 < CLEAR 'A'... SLLD NBITMO-SIGNIV JAE SPTS1 < PAS DE POINT A MARQUER EN (XS,YS)... PSR B BSR AFLT BSR ASFWOR < (A,B)=NOMBRE DE POINTS EN COLLISION, PLR A SLRS NBITMO-SIGNIV < (A)=SIGMA DE LEURS NIVEAUX, BSR AFLT FDV FWORK < (A,B)=NIVEAU MOYEN DE CES POINTS... BSR AROND BSR ASPRS < QUE L'ON FORCE EN (XS,YS)... SPTS1: EQU $ PLR A,B,X,Y RSR < ET C'EST TOUT, POURQUOI S'EN PRIVER... IF $-ITEM1,XWOR%,, IF ATTENTION : IL FAUT QUE TOUS LES MODULES QUI IF PRECEDENT SE SITUENT AVANT L'ITEM2 ; ON PEUT IF JOUER POUR CELA SUR 'NCT' !!! XWOR%: VAL 0 XOPT2: VAL 0 PAGE < < < S O U S - P R O G R A M M E D E T R A N S F O R M A T I O N : < < < FONCTION : < < SPTR: EQU $ PSR A,B,X,Y < < < T R A N S F O R M E E D U C A R R E < E L E M E N T A I R E P A R ' T ' : < < STZ NPAS IC NPAS < NPAS=1 A PRIORI... STZ INTER1 < AFIN D'INITIALISER LES 'VECU', 'VECV' < ET 'VECW'... FLD INFINI FST MINU < INITIALISATION FST MINV < DES DIFFERENTS MIN. BSR AFNEG FST MAXU < INITIALISATION FST MAXV < DES DIFFERENTS MAX. FLD F0 FST FINCU < AFIN D'ATTEINDRE (XR,YR)... FST FINCV BSR ASPGPF FST FNIV1 < NIVEAU(XR,YR). CPZ INTER2 < FAUT-IL INTERPOLER LA FONCTION OU BIEN < LA CALCULER EN CHAQUE POINT ??? JNE MODRAR < IL FAUT INTERPOLER, DONC CALCULER < 'VECU1',... CPZ IINTER < EST-CE LE MODE RAPIDE ??? JNE MODRAQ < OUI, PAS DE TRANSFORMATION DU CARRE < DE BASE... MODRAR: EQU $ BSR ASPVU < NON, ON Y VA... FST VECU1 < VECU1=TU(XR,YR). BSR ASPVV FST VECV1 < VECV1=TV(XR,YR). BSR ASPVW FST VECW1 < VECW1=TW(XR,YR). FLD FXR < PASSAGE AU POINT (XR+1,YR). FAD FDELX FST FXR BSR ASPGRA FST FNIV2 < NIVEAU(XR+1,YR). BSR ASPVU FST VECU2 < VECU2=TU(XR+1,YR). BSR ASPVV FST VECV2 < VECV2=TV(XR+1,YR). BSR ASPVW FST VECW2 < VECW2=TW(XR+1,YR). FLD FYR < PASSAGE AU POINT (XR+1,YR+1). FAD FDELY FST FYR BSR ASPGRA FST FNIV3 < NIVEAU(XR+1,YR+1). BSR ASPVU FST VECU3 < VECU3=TU(XR+1,YR+1). BSR ASPVV FST VECV3 < VECV3=TV(XR+1,YR+1). BSR ASPVW FST VECW3 < VECW3=TW(XR+1,YR+1). FLD FXR < PASSAGE AU POINT (XR,YR+1). FSB FDELX FST FXR BSR ASPGRA FST FNIV4 < NIVEAU(XR,YR+1). BSR ASPVU FST VECU4 < VECU4=TU(XR,YR+1). BSR ASPVV FST VECV4 < VECV4=TV(XR,YR+1). BSR ASPVW FST VECW4 < VECW4=TW(XR,YR+1). FLD FYR < RETOUR A (XR,YR)... FSB FDELY FST FYR MODRAQ: EQU $ IC INTER1 < ET VOILA, L'INITIALISATION DES < 'VECU', 'VECV' ET 'VECW' EST FAITE. < < ON DISPOSE MAINTENANT D'UN PARALLELEPIPEDE < RECTANGLE DEFINI PAR L'UNE DE SES DIAGONALES < (MINU,MINV,MINW)-(MAXU,MAXV,MAXW) : < CPZ IINTER < NE SERAIT-CE PAS LE MODE RAPIDE ??? JNE MODRAP < OUI, PAS D'INTERPOLATION... FLD VECU1 BSR ASTXS FLD VECV1 BSR ASTYS FLD VECW1 BSR ASTZS LAD FXS < AFIN DE TRANSFORMER (FXS,FYS,FZS)... BSR AMATR < TRANSFORMATION MATRICIELLE, BSR APROJ < PUIS PROJECTION... BSR AFLT BSR AEXTV < RECHERCHE DE MIN(YS) ET MAX(YS). LA XS BSR AFLT BSR AEXTU < RECHERCHE DE MIN(XS) ET MAX(XS). FLD VECU2 BSR ASTXS FLD VECV2 BSR ASTYS FLD VECW2 BSR ASTZS LAD FXS < AFIN DE TRANSFORMER (FXS,FYS,FZS)... BSR AMATR < TRANSFORMATION MATRICIELLE, BSR APROJ < PUIS PROJECTION... BSR AFLT BSR AEXTV < RECHERCHE DE MIN(YS) ET MAX(YS). LA XS BSR AFLT BSR AEXTU < RECHERCHE DE MIN(XS) ET MAX(XS). FLD VECU3 BSR ASTXS FLD VECV3 BSR ASTYS FLD VECW3 BSR ASTZS LAD FXS < AFIN DE TRANSFORMER (FXS,FYS,FZS)... BSR AMATR < TRANSFORMATION MATRICIELLE, BSR APROJ < PUIS PROJECTION... BSR AFLT BSR AEXTV < RECHERCHE DE MIN(YS) ET MAX(YS). LA XS BSR AFLT BSR AEXTU < RECHERCHE DE MIN(XS) ET MAX(XS). FLD VECU4 BSR ASTXS FLD VECV4 BSR ASTYS FLD VECW4 BSR ASTZS LAD FXS < AFIN DE TRANSFORMER (FXS,FYS,FZS)... BSR AMATR < TRANSFORMATION MATRICIELLE, BSR APROJ < PUIS PROJECTION... BSR AFLT BSR AEXTV < RECHERCHE DE MIN(YS) ET MAX(YS). LA XS BSR AFLT BSR AEXTU < RECHERCHE DE MIN(XS) ET MAX(XS). FLD MAXU FSB MINU BSR ASFWOR FMP FWORK FST FWORK1 FLD MAXV FSB MINV BSR ASFWOR FMP FWORK FAD FWORK1 < (A,B)=CARRE DE SA PLUS GRANDE DIAGONALE. BSR ARAC < CALCUL DE LA LONGUEUR DE LA PLUS GRANDE < DIAGONALE... BSR AFCAZ JG QUAD5 < OK, LA LONGUEUR EST POSITIVE... MODRAP: EQU $ < CAS OU L'ON N'INTERPOLE PAS... FLD F05 < SINON, ON EN PREND UNE INFERIEURE A 1... QUAD5: EQU $ FMP SCALD < AMPLIFICATION EVENTUELLE... BSR ASFWOR < FWORK=MAX(M1M3,M2M4)*SCALD. IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < QUELLE EST LA DEFINITION ??? JE QUAD97 < FAUX 512... BSR APWORK < VRAI 512, IL FAUT DOUBLER LE NOMBRE DE < POINTS CALCULES... QUAD97: EQU $ XOPT5: VAL 0 BSR AFIX ADRI 1,A STA NPAS < NPAS=NOMBRE DE MAILLE DANS CHAQUE < DIRECTION X ET Y DU CARRE DE BASE. FLD FDELX FDV FWORK < 1/MAX(M1M3,M2M4), FCAM F1 JLE QUAD2 < 1/MAX<=1, OK... FLD F1 < ON MINORE SINON... QUAD2: EQU $ FST FPASU < FPASU=FDELX/MAX(M1M3,M2M4)... CPZ IDERIV < EST-CE 'FH' VARIABLE ??? JNE QUAD7 < NON... FMP FKH FST FHU < OUI : FHU=FKH*FPASU. QUAD7: EQU $ FLD FDELY FDV FWORK FCAM F1 JLE QUAD6 < OK... FLD F1 < ON MINORE... QUAD6: EQU $ FST FPASV < FPASV=FDELY/MAX(M1M3,M2M4)... < < CALCUL EVENTUEL DE 'FH' : < CPZ IDERIV < EST-CE 'FH' VARIABLE ??? JNE QUAD1 < NON... FMP FKH FST FHV < OUI : FHV=FKH*FPASV. FCAM FHU < (FHV)=(FHU) ??? JNE QUAD80 < OK, ILS DIFFERENT... FDV FHEPS < S'ILS SONT EGAUX : FAD FHV < ON FAIT : FST FHV < FHV=FHU+(FHU/10)... QUAD80: EQU $ QUAD1: EQU $ < < ITERATION SUR 'XR' PAR PAS DE 'FINCU' : < LX NPAS < X=NOMBRE D'ITERATIONS SUR X... QUAD3: EQU $ FLD F0 FST FINCV PSR X < < ITERATION SUR 'YR' PAR PAS DE 'FINCV' : < LX NPAS < X=NOMBRE D'ITERATIONS SUR Y... QUAD4: EQU $ PSR X < < < C A L C U L D U V E C T E U R : < < < < COMPOSANTE 'U' : < BSR ASPVU FST VECU < COMPOSANTE EN 'U' DU VECTEUR. < < COMPOSANTE 'V' : < BSR ASPVV FST VECV < COMPOSANTE EN 'V' DU VECTEUR. < < COMPOSANTE 'W' : < BSR ASPVW FST VECW < COMPOSANTE EN 'W' DU VECTEUR. < < < R E P R E S E N T A T I O N G R A P H I Q U E : < < FLD VECU FMP FK FST VECU FST FXS < FXS=VECU, FLD VECV FMP FK FST VECV FST FYS < FYS=VECV, FLD VECW FMP FK FST VECW FST FZS < FZS=VECW. LAD FXS < AFIN DE TRANSFORMER (FXS,FYS,FZS). BSR AMATR < TRANSFORMATION MATRICIELLE : ON LA FAIT < (EVENTUELLEMENT) AVANT L'ECLAIRAGE AFIN < QUE SOURCE LUMINEUSE, ET OBSERVATEUR < SOIENT DANS L'ESPACE ABSOLU, INDEPENDANT < DES TRANSFORMATIONS... < < < P R O J E C T I O N : < < BSR APROJ < PROJECTION 3D --> 2D... < < TEST DES HORS-ECRAN : < LA XS CPZ MODX < EST-ON SUR UN X-TORE ??? JE SPTT3 < OUI... JAL APTNVU < NON, ET XS EST OVERSCREEN... CPI NPOLM1 JG APTNVU < DE MEME... JMP SPTT4 < OK, XS EST DANS L'ECRAN... SPTT3: EQU $ < CAS OU L'ON EST SUR UN X-TORE : ANDI NPOLM1 STA XS < CALCUL MODULO DE XS... SPTT4: EQU $ LA YS CPZ MODY < EST-ON SUR UN Y-TORE ??? JE SPTT6 < OUI... JAL APTNVU < NON, ET YS EST OVERSCREEN... CPI NLIGM1 JG APTNVU < DE MEME... JMP SPTT7 SPTT6: EQU $ < CAS OU L'ON EST SUR UN Y-TORE : ANDI NLIGM1 STA YS < CALCUL MODULO DE YS... SPTT7: EQU $ < < MEMORISATION DU POINT (XS,YS) : < LA YS SWBR A,A OR XS < (A)=(YS,XS), COMPATIBLE AVEC LE Z-BUFFER, XM POINTC < ET ON LE MEMORISE. IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < QUELLE EST LA DEFINITION ??? JNE SPTT9 < VRAI 512, PAS D'OPTIMISATION (ON NE < PEUT PAS MEMORISER 2 COORDONNEES 512 < SUR 1 MOT !!!). XOPT5: VAL 0 CPZ IPTC < FAUT-IL OPTIMISER PAR 'POINTC' ??? JE SPTT9 < NON... CP POINTC < EST-CE LE POINT QUE L'ON A MARQUE AU < TOUR PRECEDENT ??? < A T T E N T I O N : CE TEST EST MAUVAIS < SI LE PREMIER POINT QUE L'ONMARQUE EST < L'ORIGINE YS=XS=0 (VOIR LA VALEUR INITIA- < LE DE 'POINTC'...). JNE SPTT9 < NON, ON LE MARQUE... APTNVU: BR PTNVU < VERS 'APTNVU'... SPTT9: EQU $ < < < C A L C U L D E S 6 D E R I V E E S P A R T I E L L E S : < < LA IECL < MAIS EST-CE NECESSAIRE... OR IINT JAE DERI30 < NI ECLAIRAGE, NI INTERIEUR/EXTERIEUR... LA XS < OUI : LB YS PSR A,B < SAUVEGARDONS (XS,YS), ON NE SAIT JAMAIS.. LYI XSPU LX YVARU LAD FHU BSR ADERIV FST DXDU < CALCUL DE DX/DU. LX YVARV LAD FHV BSR ADERIV FST DXDV < CALCUL DE DX/DV. LYI XSPV LX YVARU LAD FHU BSR ADERIV FST DYDU < CALCUL DE DY/DU. LX YVARV LAD FHV BSR ADERIV FST DYDV < CALCUL DE DY/DV. LYI XSPW LX YVARU LAD FHU BSR ADERIV FST DZDU < CALCUL DE DZ/DU. LX YVARV LAD FHV BSR ADERIV FST DZDV < CALCUL DE DZ/DV. PLR A,B STB YS < RESTAURONS STA XS < (XS,YS)... DERI30: EQU $ IF XOPT01-XXXOUI,XOPT1,,XOPT1 < < ELIMINATION DES POINTS AU-DESSUS < DU PLAN DE COUPE A*X+B*Y+C*Z+D=0 : < FLD FXS < X, FMP PLANA < A*X, BSR ASFWOR FLD FYS < Y, FMP PLANB < B*Y, BSR APWORK < A*X+B*Y, FLD FZS < Z, FMP PLANC < C*Z, BSR APWORK < A*X+B*Y+C*Z, FAD PLAND < A*X+B*Y+C*Z+D, BSR AFCAZ < ALORS AU-DESSUS OU AU-DESSOUS ??? JL PTNVU1 < AU-DESSUS, ON NE TRACE RIEN... XOPT1: VAL 0 < < AU-DESSOUS, ECLAIRONS... < LA IECL OR IINT JANE SPTR21 < ECLAIRAGE OU INTERIEUR/EXTERIEUR... BR ANECL < NON, ALLONS PROJETER DIRECTEMENT... SPTR21: EQU $ < < DETERMINATION DU VECTEUR NORMAL N : < FLD DZDU FMP DYDV BSR ASFWOR FLD DYDU FMP DZDV FSB FWORK FMP FKN < INVERSION EVENTUELLE DE LA NORMALE... FST NX < NX=(DY/DU)*(DZ/DV)-(DZ/DU)*(DY/DV). FLD DXDU FMP DZDV BSR ASFWOR FLD DZDU FMP DXDV FSB FWORK FMP FKN < INVERSION EVENTUELLE DE LA NORMALE... FST NY < NY=(DZ/DU)*(DX/DV)-(DX/DU)*(DZ/DV). FLD DYDU FMP DXDV BSR ASFWOR FLD DXDU FMP DYDV FSB FWORK FMP FKN < INVERSION EVENTUELLE DE LA NORMALE... FST NZ < NZ=(DX/DU)*(DY/DV)-(DY/DU)*(DX/DV). LAD NX < AFIN DE TRANSFORMER (NX,NY,NZ)... BSR AMATR < TRANSFORMATION DE LA NORMALE... < < DETERMINATION DU VECTEUR OBSERVATION : < CPZ IINT < TRACE-T'ON INTERIEUR ET EXTERIEUR ??? JE PTVU < OUI... LA OX SB TRX < CHANGEMENT DE REFERENTIEL, BSR AFLT FSB FXS < (A,B)=X(OBSERVATEUR), FMP NX BSR ASFWOR < NX*X(VECTEUR OBSERVATION), LA OY SB TRY < CHANGEMENT DE REFERENTIEL, BSR AFLT FSB FYS < (A,B)=Y(OBSERVATEUR), FMP NY BSR APWORK < +NY*Y(VECTEUR OBSERVATION), LA OZ BSR AFLT FSB FZS < (A,B)=Z(OBSERVATEUR), FMP NZ BSR APWORK < +NZ*Z(VECTEUR OBSERVATION), BSR AFCAZ < (A,B)=PRODUIT SCALAIRE ENTRE LE VECTEUR < NORMAL EN (FXS,FYS,FZS) ET LE < VECTEUR OBSERVATION (JOIGNANT LE < POINT COURANT (FXS,FYS,FZS) A < L'OBSERVATEUR) ; ON TESTE AINSI < SI L'OBSERVATEUR VOIT L'INTERIEUR < OU L'EXTERIEUR DE LA SURFACE ??? JG PTVU < L'EXTERIEUR, ON TRACE... PTNVU1: EQU $ < CAS DU PLAN DE COUPE... BR PTNVU < L'INTERIEUR, ON NE TRACE PAS... PTVU: EQU $ CPZ IECL < MAIS AU FAIT, ECLAIRE-T'ON ??? JNE PTVU1 < OUI... BR ANECL < NON, ALLONS TRACER... PTVU1: EQU $ < < CALCUL DE LA NORME DU VECTEUR NORMAL : < FLD NZ FMP NZ BSR ASFWOR FLD NY FMP NY BSR APWORK FLD NX FMP NX BSR APWORK BSR ARAC FST NORMN < NORME(N)=RAC(NX*NX+NY*NY+NZ*NZ). BSR AFCAZ JG EOK1 < OK, NORMN>0... QUIT 1 < ?!?!???!?! EOK1: EQU $ CPZ IECL < ECLAIRE-T'ON ??? JE SPTR90 < NON, DONC ON FAIT DE LA MODULATION-N... < < CALCUL DU VECTEUR 'MS' ALLANT DU POINT < COURANT (XS,YS,ZS) A LA SOURCE LUMINEUSE : < LA SX SB TRX < CHANGEMENT DE REFERENTIEL, BSR AFLT FSB FXS FST MSX < X(MS). LA SY SB TRY BSR AFLT FSB FYS FST MSY < Y(MS). LA SZ BSR AFLT FSB FZS FST MSZ < Z(MS). < < CALCUL DE LA NORME DU VECTEUR 'MS' : < FMP MSZ BSR ASFWOR FLD MSY FMP MSY BSR APWORK FLD MSX FMP MSX BSR APWORK BSR ARAC FST NORMS < NORME(MS)=RAC(MSX*MSX+MSY*MSY+MSZ*MSZ). BSR AFCAZ JG EOK2 < OK, NORMS>0... QUIT 1 < ??!???!! EOK2: EQU $ < < CALCUL DE L'INCIDENCE DES RAYONS LUMINEUX < EN (XS,YS,ZS), SOIT CALCUL DU PRODUIT < SCALAIRE N.MS : < FLD NX FMP MSX BSR ASFWOR FLD NY FMP MSY BSR APWORK FLD NZ FMP MSZ BSR APWORK < NX*MSX+NY*MSY+NZ*MSZ, FDV NORMN FDV NORMS < ON DISPOSE ICI DU 'COS' DE L'ANGLE < D'INCIDENCE DES RAYONS LUMINEUX... < < CALCUL DE LA MODULATION LUMINEUSE : < BSR ASFWOR < COSINUS... FLD F1 < INITIALISATION DU CALCUL DE : < COSINUS**EXCOS. LX EXCOS < (X)=EXPOSANT DU COSINUS, SPTR87: EQU $ FMP FWORK < CALCUL ITERATIF DE LA PUISSANCE... JDX SPTR87 CPZ ICOS < QUEL EST LE TRAITEMENT DES COSINUS ??? JE SPTR93 < NORMAL... BSR AFABS < VALEUR ABSOLUE... ; EN FAIT ON < PREND LA VALEUR ABSOLUE, MAIS CES < VALEURS SERONT PEUT-ETRE IGNOREES CAR < CORRESPONDANT A DES NORMALES OPPOSEES < A L'OBSERVATEUR SI OBSERVATEUR ET < SOURCE LUMINEUSE SONT CONFONDUES... JMP SPTR94 SPTR93: EQU $ FMP F05 < QUE L'ON RAMENE DANS LE SEGMENT < (-0.5,+0.5), FAD F05 < PUIS DANS (0,+1)... SPTR94: EQU $ FST FCOEF < CE QUI DONNE LE COEFFICIENT DE < MODULATION DES NIVEAUX... SPTR90: EQU $ < < < E L I M I N A T I O N D E S P A R T I E S C A C H E E S : < ( E T N I V E A U ) < < NECL: EQU $ < < RECUPERATION DU POINT SOURCE (M2) : < FLD FNIV1 < NIVEAU(XR,YR) A PRIORI... CPZ IINTER < EST-CE LE MODE RAPIDE ??? JNE QUAD50 < OUI, PAS D'INTERPOLATION... CPZ IALIAS < INTERPOLATION DES NIVEAUX DE GRIS ??? JE QUAD50 < NON... < < INTERPOLATION DES NIVEAUX DE GRIS DANS LE CARRE ELEMENTAIRE : < LAD FNIV BSR AINTER CPZ IALIAS < ALORS : ROUGE-->BLANC ??? JG QUAD50 < OUI... FMP F6S7 < AFIN DE NE PAS FAD F1 < CREER DE NOIR... QUAD50: EQU $ BSR AROND < ET CONVERSION ENTIERE... STA NM2 < NM2=NIVEAU CALCULE A INSCRIRE... IF XOPT04-XXXOUI,XOPT4,,XOPT4 < < RECUPERATION DU POINT DESTINATION (M1) : < (LORSQUE L'OPTION EST ABSENTE, C'EST < LA VALEUR INITIALE (NM1)=0 QUI EST < UTILISEE...) < BSR ASPGS STA NM1 < NM1=NIVEAU PRESENT ANTERIEUREMENT... XOPT4: VAL 0 < < CALCUL DE LA PROFONDEUR DU POINT COURANT : < FLD FZS < PROFONDEUR DU POINT M2, BSR AFIX JNV SPTR22 < OK... LA ZMAX < OVERFLOW, ON PREND L'INFINI ENTIER, CPZ FZS < POSITIF OU NEGATIF ??? JG SPTR22 < + NGR A,A < - SPTR22: EQU $ CP BORNS JG SPTR1X < (ZS)>(BORNS) : POINT IGNORE... CP BORNI JL SPTR1X < (ZS)<(BORNI) : POINT IGNORE... < < UTILISATION DU Z-BUFFER : < LR A,X < X=PROFONDEUR DU POINT M2=INT(FZS(XS,YS)). LA POINTC < A=YS/XS=ADRESSE D'ACCES AU Z-BUFFER. LR X,B < AU CAS OU Z-BUFFER INACTIF... CPZ ZBUF < ALORS ??? JNE SPTR70 < ET OUI, INACTIF... LYI YLOAD BSR AGZB < B=PROFONDEUR DU POINT ANTERIEUR M1, SPTR70: EQU $ CPR X,B < POSITION RELATIVE DE M1 ET M2... LR X,Y < Y=SAUVEGARDE DE LA PROFONDEUR DE M2. IF XOPT05-XXX256,XOPT5,,XOPT5 LA LTRANS < A=LISTE DES TRANSPARENCES... JL SPTR52 < B<X : LE POINT M2 EST A TRACER PLUS < LOIN DE L'ECRAN QUE M1... STZ ICOLLI < (B)>(X) A PRIORI... JG SPTR55 < ET OUI, C'EST UNE FAUSSE COLLISION, CAR < LES COORDONNEES Z SONT DIFFERENTES ; IL < FAUDRA REINITIALISER LE MOT1 DU Z-BUFFER. IC ICOLLI < (B)=(X) : C'EST UNE VRAIE COLLISION, IL < FAUDRA CUMULER LES POINTS... SPTR55: EQU $ < < CAS OU LE POINT M2 EST A TRACER PLUS PRES QUE M1 : < < Y I / Z < I / < I * M1=POINT ANTERIEUR, < I / < I / < I * M2=NOUVEAU POINT. < I / < I/----------------------------> X < / < < LX NM2 TBT 0,X < LE POINT M2 ETANT EN AVANT, EST-IL < TRANSPARENT ??? LA NM2 JC SPTR53 < OUI, M2 EST TRANSPARENT... ON DOIT < DONC CUMULER M1 ET M2... JMP SPTR54 < NON, M2 ECRASE DONC M1... < < CAS OU LE POINT M2 EST A TRACER PLUS LOIN QUE M1 : < < Y I / Z < I / < I * M2=NOUVEAU POINT, < I / < I / < I * M1=POINT ANTERIEUR. < I / < I/----------------------------> X < / < < SPTR52: EQU $ LX NM1 TBT 0,X < LE POINT M1 ETANT EN AVANT, EST-IL < TRANSPARENT ??? JNC SPTR1X < NON, DONC M2 EST INVISIBLE... LA NM2 < < TRANSPARENCE : < SPTR53: EQU $ OR NM1 < NIVEAU=NM1.OR.NM2 SPTR54: EQU $ XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 JL SPTR1X < 'M2' EST DERRIERE 'M1', DONC INVISIBLE. STZ ICOLLI < FAUSSE COLLISION A PRIORI... JG SPTR55 < ET OUI... IC ICOLLI < ET NON, C'EST UNE VRAIE COLLISION, IL < FAUDRA CUMULER LES POINTS... SPTR55: EQU $ LA NM2 < (A)=NIIVEAU DU POINT 'M2'. XOPT5: VAL 0 XM POINTC < POINTC=NIVEAU A METTRE DANS L'IMAGE, < A=YS/XS=ADRESSE D'ACCES AU Z-BUFFER, LR Y,B < B=PROFONDEUR DE M2, CPZ ZBUF < ALORS ??? JNE SPTR71 < Z-BUFFER INACTIF... LYI YSTORE BSR AGZB < QUE L'ON INSERE DANS LE Z-BUFFER... SPTR71: EQU $ XM POINTC < A=NIVEAU, < ET RESTAURE 'POINTC'... BSR ACOEF < MODULATION LUMINEUSE EVENTUELLE... IF XOPT03-XXXNON,XOPT3,,XOPT3 BSR ASPRS < GENERATION DU SCRATCH SANS FILTRAGE... XOPT3: VAL 0 IF XOPT03-XXXOUI,XOPT3,,XOPT3 < < TRACE EVENTUELLEMENT ANAGLYPHIQUE : < LB XS PSR A,B < SAUVEGARDE DU NIVEAU ET DE 'XS'. FCMZ FANAG < EST-CE DEMANDE ??? JE SPTR80 < NON, (A)=NIVEAU FINAL DE (XS,YS)... LYI XCRMAX < (Y)=ROUGE MAX A PRIORI, CPI NIVMAX/2 < LE NIVEAU (A) COURANT EST-IL FORT OU < FAIBLE ??? JG SPTR81 < FORT : ON GARDE LE MAX... LYI XCRMIN < FAIBLE : (Y)=ROUGE MIN. SPTR81: EQU $ FLD PANAG < PLAN DE CONVERGENCE DES YEUX, FMP FK < PRISE EN COMPTE DE L'ECHELLE, FAD FZS < ET TRANSLATION DU 'Z'... FDV FANAG BSR AROND LR A,X < (X)=CONSTANTE DE TRANSLATION A GAUCHE < PUIS A DROITE DU POINT (XS,YS) < FONCTION DE 'FZS'... LA XS PSR A < SAUVEGARDE DE (XS,YS), < (ON FAIT AINSI, A CAUSE DES OVERS- < SCREENS...) SBR X,A < PUIS, STA XS < DECALAGE A GAUCHE, LR Y,A < (A)=NIVEAU DE ROUGE COURANT... BSR ASPRS < TRACE DU POINT (XS-X,YS) AVEC LE NIVEAU < ROUGE (Y). PLR A < RESTAURE (XS,YS), ADR X,A < PUIS, STA XS < DECALAGE A DROITE, LR Y,A ADRI XCDELT,A < PASSAGE DU ROUGE AU VERT... SPTR80: EQU $ BSR ASPRS < TRACE DU POINT (XS,YS) AVEC LE NIVEAU < CALCULE S'IL N'Y A PAS D'ANAGLYPHES, < ET DU POINT (XS+X,YS) AVEC LE NIVEAU < VERT (Y)+XCDELT SI OUI... PLR A,B < RESTAURATION DU NIVEAU ET DE 'XS'. STB XS XOPT3: VAL 0 IF XOPT02-XXXOUI,XOPT2,,XOPT2 < < PREPARATION DU FILTRAGE FINAL : < CPZ TRZBUF < EST-IL NECESSAIRE ??? JL SPTR1Z < NON... LR A,X < OUI, (X)=NIVEAU QUE L'ON VIENT DE FORCER, IF ZBUF1-1,,XWOR%, IF ATTENTION : LE 'IC' EST IDIOT !!! XWOR%: VAL 0 STZ TRZBUF IC TRZBUF < AFIN D'ATTEINDRE LE MOT1 DE L'ENTREE, LBI 0 < REINITIALISATION DU MOT1 A PRIORI... CPZ ICOLLI < Y-A-T'IL EU COLLISION REELLE ??? JE SPTR56 < NON, ON REINITIALISE LE CUMUL... LA POINTC < (A)=ADRESSE COURANTE DANS LE Z-BUFFER, LYI YLOAD BSR AGZB < (B)=MOT1 DE L'ENTREE COURANTE : LAI 0 SLLD NBITMO-SIGNIV < (A)=NOMBRE DE POINTS ACTUELLEMENT EN < COLLISION SUR (XS,YS), CPI 1>SIGPT-1 < OVERFLOW ??? JGE SPTR1Z < OUI, ON IGNORE LE POINT COURANT... ADRI 1,A < NON, ON COMPTE LE POINT COURANT, SLRD NBITMO-SIGNIV < RECADRAGE, ADR X,B < ET ON CUMULE LE NIVEAU COURANT DANS < SON CHAMP... SPTR56: EQU $ LA POINTC LYI YSTORE BSR AGZB < ET ON REECRIT LE MOT1 CUMULE... IF ZBUF0-0,,XWOR%, IF ATTENTION : LE 'STZ' EST IDIOT !!! XWOR%: VAL 0 STZ TRZBUF < RETOUR SUR LE MOT0... SPTR1Z: EQU $ XOPT2: VAL 0 SPTR1X: EQU $ IF XOPT08-XXXOUI,XOPT8,,XOPT8 < < GENERATION DU NOM DU NOEUD : < (POUR CHAQUE POINT (FXS,FYS,FZS), < ON CREE UN ITEM DONT LE NOM EST < "X*<YR,XR>" ET QUI CONTIENT DANS < L'ORDRE (FXS,FYS,FZS),(NX.NY,NZ), < (VARU,VARV)) : < LA YR SWBR A,A OR XR LR A,B < (B)=(YR,XR)=FUTUR NOM DU NOEUD, LYI NBRHEX < (Y)=NOMBRE DE CHIFFRES A CODER, LXI 0 < (X)=INDEX COURANT DES CARACTERES. GMAIL1: EQU $ LAI 0 < CLEAR, SLLD NBITMO/NBRHEX < DECONCATENATION, CPI BASE10 < EST-CE UN CHIFFRE DECIMAL ??? JL GMAIL2 < OUI... ADRI "A"-"9"-1,A < NON, HEXA-DECIMAL... GMAIL2: EQU $ ADRI "0",A < CODAGE ASCI, STBY &ANMAIL < ET GENERATION DU NOM... ADRI 1,X < PASSAGE AU CARACTERE SUIVANT, ADRI -1,Y CPZR Y < S'IL EXISTE ??? JG GMAIL1 < ET OUI... < < NORMALISATION DE LA NORMALE : < FLD NX FDV NORMN FST NX FLD NY FDV NORMN FST NY FLD NZ FDV NORMN FST NZ < < CREATION DU NOEUD : < LAD DEMDMA SVC 0 < DESTRUCTION PREALABLE... LAD DEMSMA SVC 0 < ET CREATION DU NOEUD COURANT... XOPT8: VAL 0 < < ITERATION SUR LE MAILLAGE DU CARRE DE BASE : < PLR X FLD FINCV FAD FPASV FST FINCV < PROGRESSION DE 'FINCV'... JDX QUAD40 < AU POINT SUIVANT SUR 'Y'... PLR X FLD FINCU FAD FPASU FST FINCU < PROGRESSION DE 'FINCU'... JDX QUAD30 < AU POINT SUIVANT SUR 'X'... < < SORTIE DU MODULE : < SPTR1: EQU $ PLR A,B,X,Y RSR QUAD40: EQU $ BR AQUAD4 QUAD30: EQU $ BR AQUAD3 PAGE < < < C U M U L ' F W O R K ' : < < PWORK: EQU $ FAD FWORK BSR ASFWOR RSR PAGE < < < S T O R E C O O R D O N N E E S : < < STXS: EQU $ FMP FK FST FXS RSR STYS: EQU $ FMP FK FST FYS RSR STZS: EQU $ FMP FK FST FZS RSR 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 < E V E N T U E L L E : < < < ARGUMENTS : < (A)=ADRESSE DE (COORX,COORY,COORZ) AVANT TRANSFORMATION. < < < RESULTAT : < (COORX,COORY,COORZ)=POINT APRES TRANSFORMATION. < < XXFLOT: FLOAT 0 LXFLOT:: VAL $-XXFLOT < LONGUEUR D'UN NOMBRE FLOTTANT... $EQU XXFLOT < ANNULATION DU CODE GENERE. COORX:: MOT 0 COORY:: MOT COORX+LXFLOT COORZ:: MOT COORY+LXFLOT MATR: EQU $ CPZ ITRANS < Y-A-T'IL UNE TRANSFORMATION COURANTE ??? JE TRANSX < NON... PSR Y,W < OUI : LR A,W < (W)=ADRESSE DU VECTEUR A TRANSFORMER... LRM A WORD FXS < (A)=ADRESSE DE (FXS,FYS,FZS), LYI 1 < (Y)#0 : MODE VECTEUR A PRIORI. CPR A,W < EST-CE UN POINT ??? JNE TRANSV < NON, DONC UN VECTEUR... LYI 0 < (Y)=0 : MODE POINT. FLD COORX,W FSB KRX FST COORX,W FLD COORY,W FSB KRY FST COORY,W FLD COORZ,W FSB KRZ FST COORZ,W TRANSV: EQU $ < CAS DES VECTEURS... FLD COORX,W FMP M11 BSR ASFWOR FLD COORY,W FMP M12 BSR APWORK FLD COORZ,W FMP M13 BSR APWORK CPZR Y < POINT OU VECTEUR ??? JNE TRANXS < VECTEUR... FAD KRX < POINT... TRANXS: EQU $ PSR A,B < FXS=M11*(XR-KRX)+M12*(YR-KRY) < +M13*(ZR-KRZ)+KRX. FLD COORX,W FMP M21 BSR ASFWOR FLD COORY,W FMP M22 BSR APWORK FLD COORZ,W FMP M23 BSR APWORK CPZR Y < POINT OU VECTEUR ??? JNE TRANYS < VECTEUR... FAD KRY < POINT... TRANYS: EQU $ PSR A,B < FYS=M21*(XR-KRX)+M22*(YR-KRY) < +M23*(ZR-KRZ)+KRY. FLD COORX,W FMP M31 BSR ASFWOR FLD COORY,W FMP M32 BSR APWORK FLD COORZ,W FMP M33 BSR APWORK CPZR Y < POINT OU VECTEUR ??? JNE TRANZS < VECTEUR... FAD KRZ < POINT... TRANZS: EQU $ FST COORZ,W < FZS=M31*(XR-KRX)+M32*(YR-KRY) < +M33*(ZR-KRZ)+KRZ. PLR A,B FST COORY,W PLR A,B FST COORX,W PLR Y,W TRANSX: EQU $ RSR PAGE < < < P R O J E C T I O N : < < < ARGUMENT : < (FXS,FYS,FZS)=POINT 3D. < < < RESULTAT : < (A)=YS, < (XS,YS)=POINT 2D. < < PROJ: EQU $ IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < VRAI OU FAUX 512 ??? JE PROJ1 < FAUX, ON CONSERVE (FXS,FYS,FZS)... < < CAS DU VRAI 512, ON DOUBLE < LA DEFINITION : < FLD FXS FDV F05 FST FXS < FXS=2*FXS, FLD FYS FDV F05 FST FYS < FYS=2*FYS, FLD FZS FDV F05 FST FZS < FZS=2*FZS. PROJ1: EQU $ XOPT5: VAL 0 FLD FZS CPZ IPROJ < TYPE DE PROJECTION ??? JE SPTRX1 < PAR SINT,COST... < < PROJECTION PERSPECTIVE : < FDV PZ FSB F1 BSR AFNEG BSR ASFWOR < 1-(FZS/PZ) BSR AFCAZ JNE EOK3 < OK, 1-(FZS/PZ)#0... QUIT 1 < ??!????! EOK3: EQU $ FLD FXS FDV FWORK < FXS/(1-(FZS/PZ)) JMP SPTRX2 < < PROJECTION PAR SINT,COST : < SPTRX1: EQU $ FMP COST < ET ON PROJETTE... FAD FXS SPTRX2: EQU $ BSR AROND AD TRX < RE-TRANSLATION... IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < QUELLE EST LA DEFINITION ??? JE PROJ4 < FAUX 512... AD TRX < VRAI 512, ON DOUBLE 'TRX'... PROJ4: EQU $ XOPT5: VAL 0 STA XS < XS=X+Z*COST. CPZ IPROJ < TYPE DE PROJECTION ??? JE SPTRX3 < PAR SINT,COST... < < PROJECTION PERSPECTIVE : < FLD FYS FDV FWORK < FYS/(1-(FZS/PZ)) JMP SPTRX4 < < PROJECTION PAR SINT,COST : < SPTRX3: EQU $ FLD FZS FMP SINT FAD FYS SPTRX4: EQU $ BSR AROND AD TRY < RE-TRANSLATION... IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < QUELLE EST LA DEFINITION ??? JE PROJ5 < FAUX 512... AD TRY < VRAI 512, ON DOUBLE 'TRY'... PROJ5: EQU $ XOPT5: VAL 0 STA YS < YS=Y+Z*SINT. IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < VRAI OU FAUX 512 ??? JE PROJ2 < FAUX... < < CAS DU VRAI 512, ON < REPASSE ARTIFICIELLEMENT < AU 256 (CE QUI PERMET DE < NE PAS MODIFIER CONSIDE- < RABLEMENT LE PROGRAMME, < ET EN PARTICULIER LE Z-BUFFER) : < STA YS2 < (YS2)=VRAIE COORDONNEE 'Y' PROJETEE... TRN XWOR%1: VAL YMAX+I XWOR%2: VAL NLIG XWOR%3: VAL XWOR%1/XWOR%2 XWOR%4: VAL XMAX+I XWOR%5: VAL NPOLM1+I XWOR%6: VAL XWOR%4/XWOR%5 IF XWOR%3-XWOR%6,,XWOR%, IF COMME C'EST BIZARRE !!! XWOR%: VAL 0 NTRN SARS XWOR%3=K < REDUCTION : STA YS < (YS)=(YS2)/2, LA XS STA XS2 < (XS2)=VRAIE COORDONNEE 'X' PROJETEE... SARS XWOR%6=K < REDUCTION : STA XS < (XS)=(XS2)/2. LA YS < (A)=(YS) POUR RESPECTER L'INTERFACE... PROJ2: EQU $ XOPT5: VAL 0 < < SORTIE : < RSR < RENVOIE : (A)=YS... PAGE < < < M I N ( U ) E T M A X ( U ) : < < EXTU: EQU $ FCAM MAXU JLE EXTU1 FST MAXU < MAX(U). EXTU1: EQU $ FCAM MINU JGE EXTU2 FST MINU < MIN(U). EXTU2: EQU $ RSR < < < M I N ( V ) E T M A X ( V ) : < < EXTV: EQU $ FCAM MAXV JLE EXTV1 FST MAXV < MAX(V). EXTV1: EQU $ FCAM MINV JGE EXTV2 FST MINV < MIN(V). EXTV2: EQU $ RSR PAGE < < < O P E R A T I O N I N T E R - I M A G E S : < < < FONCTION : < CETTE VERSION PROVISOIRE REALISE < L'OPERATION .OP. DE LA FACON < SUIVANTE : < RESIDENT <-- (RESIDENT).OP.(SCRATCH) < CETTE OPERATION N'ETANT EFFECTUEE < QUE POUR LES BITS A 1 DU MASQUE... < < SPOP: EQU $ PSR A,B,X,Y < < INITIALISATIONS ET BOUCLES : < LY ORGY STY YS < ORDONNEE SCRATCH. LA TRY NGR A,A BSR AFLT FST FYR < FYR=-TRY, BSR AFIX AD TRY STA YR < YR=FYR+TRY=0. SPOP1: EQU $ LX ORGX STX XS LA TRX NGR A,A BSR AFLT FST FXR < FXR=-TRX, BSR AFIX AD TRX STA XR < XR=FXR+TRX=0. SPOP2: EQU $ LX XS LY YS PSR X,Y < SAUVEGARDE DE 'XS' ET 'YS'... IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < QUELLE EST LA DEFINITION ??? JNE SPOP20 < VRAI 512, ON SAUTE CE QUI SUIT... XOPT5: VAL 0 LA XS CPZ MODX < EST-ON SUR UN X-TORE ??? JE SPOP3 < OUI... JAL SPOP5 < NON, ET XS EST OVERSCREEN... CPI NPOLM1 JG SPOP5 < DE MEME... JMP SPOP4 < OK, XS EST DANS L'ECRAN... SPOP3: EQU $ < CAS OU L'ON EST SUR UN X-TORE : ANDI NPOLM1 STA XS < CALCUL MODULO DE XS... SPOP4: EQU $ LA YS CPZ MODY < EST-ON SUR UN Y-TORE ??? JE SPOP6 < OUI... JAL SPOP5 < NON, ET YS EST OVERSCREEN... CPI NLIGM1 JG SPOP5 < DE MEME... JMP SPOP7 SPOP6: EQU $ < CAS OU L'ON EST SUR UN Y-TORE : ANDI NLIGM1 STA YS < CALCUL MODULO DE YS... SPOP7: EQU $ IF XOPT05-XXX512,XOPT5,,XOPT5 SPOP20: EQU $ XOPT5: VAL 0 CPZ IMASKO JE SPOP8 < LE MASQUE EST OFF... < < GESTION DU MASQUE : < PSR X,Y FLD FYR BSR AFIX AD TRY STA YR < YR=FYR+TRY, LR A,Y < (Y)=COORDONNE Y RESIDENTE. FLD FXR BSR AFIX AD TRX STA XR < XR=FXR+TRX, LR A,X < (A)=(X)=COORDONNEE X RESIDENTE. LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT SUR LA LIGNE, SLRS NBITMO-XWOR%1 < A=NUMERO DU BIT DANS LE MOT, LR A,X < X=NUMERO DU BIT DANS LE MOT, XR Y,B SLLD NMOTL=0+NBITMO ORR A,Y < Y=NUMERO DU MOT DANS LE MASQUE, LRM A WORD AMASK ADR Y,A < A=ADRESSE DU MOT DANS LA 'CDA'. PSR X LRM B,X WORD MCDAM < B=ADRESSE DU MOT DE TRANSIT, WORD 1 < X=NOMBRE DE MOTS A DEPLACER. RCDA PLR X LA MCDAM < ACCES AU MASQUE, TBT 0,X < ALORS ??? PLR X,Y JNC SPOP5 < LE MOT (X,Y) EST MASQUE... < < TRANSFORMATION : < SPOP8: EQU $ BSR ASPTR < EXECUTION DE L'OPERATION VARIABLE .OP. < SUR LE COUPLE DE POINTS (X,Y). < < PROGRESSION : < SPOP5: EQU $ PLR X,Y < RESTAURATION DE XS ET YS... STX XS STY YS IC XS < PROGRESSION DE XS, FLD FXR < ET DE XR, FAD FDELX FST FXR BSR AFIX AD TRX STA XR < XR=E(FXR+FDELX). CPI NPOLM1 < EST-ON EN BOUT DE LIGNE ??? JLE SPOP2 < NON... BALAYAGE HORIZONTAL... IC YS < OUI, PROGRESSION DE YS, FLD FYR < ET DE FYR... FAD FDELY FST FYR BSR AFIX AD TRY STA YR < YR=E(FYR+FDELY). CPI NLIGM1 < EST-ON EN BOUT D'IMAGE ??? JLE SPOP1 < NON, BALAYAGE VERTICAL... PLR A,B,X,Y RSR PAGE < < < C A L C U L D E L A T R A N S F O R M E E < E N ' U ' D I R E C T O U P A R < I N T E R P O L A T I O N : < < SPUP: EQU $ LA INTER1 < INDICATEUR D'INITIALISATION 'VECU'... AND INTER2 < .AND. INDICATEUR DE CHOIX ENTRE LE MODE < DIRECT ET L'INTERPOLATION, JANE SPUP1 < CE N'EST PAS L'INITIALISATION, ET IL < FAUT INTERPOLER... < < CAS OU IL FAUT CALCULER LA < FONCTION DIRECTEMENT (OU BIEN < ON EST EN TRAIN D'INITIALISER < 'VECU', OU BIEN LE MODE DIRECT < EST DEMANDE) : < PSR L LRM L WORD FLOC+'80 BSR ASPU < ET VOILA... SPUP4: EQU $ < SORTIE... PLR L JMP SPUP2 < < CAS DU CALCUL DIRECT ET EXPLICITE : < SPUP1: EQU $ LAD LVECU SPUP3: EQU $ < INTERPOLATION... BSR AINTER < INTERPOLATION DES 'VECU', 'VECV' ET < 'VECW'... < < RETOUR : < SPUP2: EQU $ RSR < < < C A L C U L D E L A T R A N S F O R M E E < E N ' V ' D I R E C T O U P A R < I N T E R P O L A T I O N : < < SPVP: EQU $ LA INTER1 < INDICATEUR D'INITIALISATION 'VECV'... AND INTER2 < .AND. INDICATEUR DE CHOIX ENTRE LE MODE < DIRECT ET L'INTERPOLATION, JANE SPVP1 < CE N'EST PAS L'INITIALISATION, ET IL < FAUT INTERPOLER... < < CAS OU IL FAUT CALCULER LA < FONCTION DIRECTEMENT (OU BIEN < ON EST EN TRAIN D'INITIALISER < 'VECV', OU BIEN LE MODE DIRECT < EST DEMANDE) : < PSR L LRM L WORD FLOC+'80 BSR ASPV < ET VOILA... JMP SPUP4 < VERS LA SORTIE... < < CAS DU CALCUL DIRECT ET EXPLICITE : < SPVP1: EQU $ LAD LVECV JMP SPUP3 < VERS L'INTERPOLATION DES 'VECV'... < < < C A L C U L D E L A T R A N S F O R M E E < E N ' W ' D I R E C T O U P A R < I N T E R P O L A T I O N : < < SPWP: EQU $ LA INTER1 < INDICATEUR D'INITIALISATION 'VECW'... AND INTER2 < .AND. INDICATEUR DE CHOIX ENTRE LE MODE < DIRECT ET L'INTERPOLATION, JANE SPWP1 < CE N'EST PAS L'INITIALISATION, ET IL < FAUT INTERPOLER... < < CAS OU IL FAUT CALCULER LA < FONCTION DIRECTEMENT (OU BIEN < ON EST EN TRAIN D'INITIALISER < 'VECW', OU BIEN LE MODE DIRECT < EST DEMANDE) : < PSR L LRM L WORD FLOC+'80 BSR ASPW < ET VOILA... JMP SPUP4 < VERS LA SORTIE... < < CAS DU CALCUL DIRECT ET EXPLICITE : < SPWP1: EQU $ LAD LVECW JMP SPUP3 < VERS L'INTERPOLATION DES 'VECW'... PAGE < < < I N T E R P O L A T I O N S U R U N C A R R E : < < < ARGUMENT : < (A)=ADRESSE D'UNE LISTE DE 4 VALEURS < A INTERPOLER SUR UN CARRE DE BASE. < < < RESULTAT : < (A,B)=VALEUR INTERPOLEE. < < PINTER: EQU $ PSR W LR A,W < (W)=ADRESSE DE LA LISTE DES 4 VALEURS < A INTERPOLER. FLD FDELX FSB FINCU FST FWORK1 < W1=FDELX-FU, FLD FDELY FSB FINCV FST FWORK2 < W2=FDELY-FV, FMP FWORK1 FMP FLOT1,W BSR ASFWOR < (FDELX-FU)*(FDELY-FV)*N1, FLD FINCU FMP FWORK2 FMP FLOT2,W BSR APWORK < +FU*(FDELY-FV)*N2, FLD FINCU FMP FINCV FMP FLOT3,W BSR APWORK < +FU*FV*N3, FLD FWORK1 FMP FINCV FMP FLOT4,W BSR APWORK < +(FDELX-FU)*FV*N4, FDV FDELX < ET FDV FDELY < NORMALISATION... PLR W RSR PAGE < < < T R A N S F O R M A T I O N E N ' U ' : < < SPVU: EQU $ FLD FXR FAD FINCU < TRANSLATION SUR LE MAILLAGE... FMP KFU FMP KUX FST VARU < U=KUX*KFU*FXR. FLD FYR FAD FINCV < TRANSLATION SUR LE MAILLAGE... FMP KFV FMP KVX FST VARV < V=KVX*KFV*FYR. FLD FZR FMP KFW FMP KWX FST VARW < W=KWX*KFW*FZR. FLD FTR FMP KFT FMP KTX FST VART < T=KTX*KFT*FTR. BSR ASPUP RSR < < < T R A N S F O R M A T I O N E N ' V ' : < < SPVV: EQU $ FLD FXR FAD FINCU < TRANSLATION SUR LE MAILLAGE... FMP KFU FMP KUY FST VARU < U=KUY*KFU*FXR. FLD FYR FAD FINCV < TRANSLATION SUR LE MAILLAGE... FMP KFV FMP KVY FST VARV < V=KVY*KFV*FYR. FLD FZR FMP KFW FMP KWY FST VARW < W=KWY*KFW*FZR. FLD FTR FMP KFT FMP KTY FST VART < T=KTY*KFT*FTR. BSR ASPVP RSR < < < T R A N S F O R M A T I O N E N ' W ' : < < SPVW: EQU $ FLD FXR FAD FINCU < TRANSLATION SUR LE MAILLAGE... FMP KFU FMP KUZ FST VARU < U=KUZ*KFU*FXR. FLD FYR FAD FINCV < TRANSLATION SUR LE MAILLAGE... FMP KFV FMP KVZ FST VARV < V=KVZ*KFV*FYR. FLD FZR FMP KFW FMP KWZ FST VARW < W=KWZ*KFW*FZR. FLD FTR FMP KFT FMP KTZ FST VART < T=KTZ*KFT*FTR. BSR ASPWP RSR PAGE < < < D E R I V A T I O N N U M E R I Q U E : < < < ARGUMENTS : < (A)=ADRESSE DU PAS DE DERIVATION 'FHU/V', < Y=NUMERO DE LA FONCTION QUE L'ON DESIRE DERIVER < (XSPU, XSPV OU XSPW), < X=NUMERO DE LA VARIABLE PAR RAPPORT A LAQUELLE < ON DERIVE (XVARU, XVARV, XVARW OU XVART). < < < RESULTAT : < A,B=VALEUR DE LA DERIVEE AU POINT CONSIDERE. < < DERIVE: EQU $ < < ACCES AU PAS DE DERIVATION : < FH:: VAL 0 < ACCES A 'FHU/V'... PSR W LR A,W < (W)=ADRESSE DU PAS DE DERIVATION 'FH', FLD FH,W FDV F05 FST F2H < ET CALCUL DE F2H=2*FH... < < VALIDATION DE LA FONCTION : < LR Y,A < VALIDATION DE LA FONCTION : JAL DERIV1 < ERREUR... CPI XSPW JLE DERIV2 < OK... DERIV1: EQU $ QUIT 1 < !?!?!??! DERIV2: EQU $ LR X,A < VALIDATION DE LA VARIABLE DE DERIVATION : TBT NBITMO-1 JC DERIV3 JAL DERIV3 CPI XLASTX JLE DERIV4 DERIV3: EQU $ QUIT 1 < !?!??!??! DERIV4: EQU $ < < CALCUL DE LA DERIVEE : < FLD &AVAR < VARIABLE ALPHA, PSR A,B < SAUVEGARDE DE ALPHA... FAD FH,W < 'FHU/V'... FST &AVAR PSR X,Y LR Y,X BSR &ASPUVW PLR X,Y PSR A,B < F(ALPHA+H). FLD &AVAR FSB F2H FST &AVAR PSR X,Y LR Y,X BSR &ASPUVW PLR X,Y BSR ASFWOR < F(ALPHA-H). PLR A,B FSB FWORK FDV F2H BSR ASFWOR < DERIVEE=(F(ALPHA+H)-F(ALPHA-H))/(2*H). PLR A,B < RESTAURE ALPHA... FST &AVAR FLD FWORK < (A,B)=VALEUR DE LA DERIVEE. PLR W RSR PAGE < < < C O E F F I C I E N T D ' I N T E N S I T E < L U M I N E U S E : < < < FONCTION : < CE SOUS-PROGRAMME MODULE LE < NIVEAU LUMINEUX D'UN POINT PAR < UN COEFFICIENT CALCULEE A PARTIR < DE L'ANGLE D'INCIDENCE DES RAYONS < LUMINEUX. < DE PLUS, IL GERE MAINTENANT < LES TRANCHES A COORDONNEES < CONSTANTES, EN AUTORISANT LES < MODULOS SUR LES NIVEAUX... < < < ARGUMENT : < A=NIVEAU A MODULER, < < < RESULTAT : < A=NIVEAU MODULE... < < COEF: EQU $ JAE COEF1 < NIVEAU NUL... IF XOPT05-XXX512,XOPT5,,XOPT5 XWOR%3: VAL NIVMAX+I < NOMBRE DE NIVEAUX EN 256*256. XWOR%1: VAL NIV256/XWOR%3=K < DECALAGE POUR PASSER D'UN NIVEAU EN < 256*256 A UN NIVEAU EN 512*512. SLLS XWOR%1 < PASSAGE DE 8 A 256 NIVEAUX !!! XOPT5: VAL 0 PSR A,B FLD FCOEF FMP TRANCM < AMPLIFICATION A PRIORI... FCMZ TRANCX < TRANCHE 'X' : JE COEF4 < NON, FMP FXS < OUI... FDV TRANCX COEF4: EQU $ FCMZ TRANCY < TRANCHE 'Y' : JE COEF5 < NON, FMP FYS < OUI... FDV TRANCY COEF5: EQU $ FCMZ TRANCZ < TRANCHE 'Z' : JE COEF6 < NON, FMP FZS < OUI... FDV TRANCZ COEF6: EQU $ BSR ASFWOR < ET MISE A JOUR EVENTUELLE DU COEF... FCAM F1 < LE COEFFICIENT NE SERAIT-IL PAS UNITE ??? PLR A,B JE COEF1 < OUI, RIEN A FAIRE, LE NIVEAU RESTE < INCHANGE... BSR AFLT FMP FWORK < PRISE EN COMPTE DE L'INCIDENCE... FMP F6S7 < AFIN DE NE PAS FAD F1 < CREER DE NOIR... BSR AROND < ET CONVERSION ENTIERE... COEF1: EQU $ IF XOPT05-XXX256,XOPT5,,XOPT5 ANDI NIVMAX < ET ON TRAVAILLE MODULO... PSR X LR A,X < (X)=NIVEAU CALCULE, LBY &AATNIV < (A)=NIVEAU ASSOCIE A AFFICHER... PLR X XOPT5: VAL 0 IF XOPT05-XXX512,XOPT5,,XOPT5 ANDI NIV256-I < ET ON TRAVAILLE MODULO... XOPT5: VAL 0 COEF3: EQU $ RSR PAGE < < < A C C E S C O N S T A N T E D E T R A V A I L : < < < ARGUMENT : < X=NUMERO DE LA CONSTANTE (DE 0 A NCT-1), ET NON PAS < SON INDEX EN DOUBLE-MOTS !!! < < < RESULTAT : < A,B=VALEUR DE LA CONSTANTE. < < SPCT: EQU $ LR X,A < VALIDATION DU NUMERO : JAL SPCT1 < ERREUR... CPI NCT JL SPCT2 < OK... SPCT1: EQU $ QUIT 1 < ?!??!?! SPCT2: EQU $ PSR X ADR X,X < INDEX DOUBLE-MOTS, FLD &ACT < (A,B)=CONSTANTE DE TRAVAIL... PLR X RSR PAGE < < < C A L C U L S I N U S E T C O S I N U S : < < < ARGUMENT : < A,B = ANGLE EN RADIANS, < < < RESULTAT : < A,B = LIGNE TRIGONOMETRIQUE DEMANDEE. < < COS: EQU $ < ENTRY 'COSINUS' : FSB PISUR2 < A,B = TETA-PI/2, BSR AFNEG < A,B = PI/2-TETA. SIN: EQU $ < ENTRY 'SINUS' : FST ZZZ061 < SAVE TEMPORAIRE DE L'ANGLE. STZ ZZZ063 JAGE ZZZ072 BSR AFNEG FST ZZZ061 IC ZZZ063 ZZZ072: EQU $ FDV DEUXPI BSR AFIX BSR AFLT FMP DEUXPI FSB ZZZ061 BSR AFNEG FCAM PI3141 JL ZZZ073 FSB PI3141 IC ZZZ063 ZZZ073: EQU $ FCAM PISUR2 JL ZZZ074 FSB PI3141 BSR AFNEG ZZZ074: EQU $ FDV PISUR2 FST ZZZ061 FMP ZZZ061 FST ZZZ062 FMP ZZZ071 FAD ZZZ070 FMP ZZZ062 FAD ZZZ069 FMP ZZZ062 FAD ZZZ068 FMP ZZZ062 FAD ZZZ067 FMP ZZZ061 DC ZZZ063 JNE ZZZ075 BSR AFNEG ZZZ075: EQU $ RSR PAGE < < < A C C E S A U N P O I N T R E S I D E N T : < < < FONCTION : < CE SOUS-PROGRAMME RECONSTITUE < LE NIVEAU ASSOCIE A 3 BITS < PARALLELES. < < < ARGUMENT : < XR,YR = COORDONNEES DU POINT, < < < RESULTAT : < A = NIVEAU DE GRIS DU POINT, SOIT R+V*2+B*4. < < SPAPR: EQU $ PSR B,X,Y IF NLIGM1-NPOLM1,,XWOR%, IF ATTENTION : CE QUI SUIT EST IDIOT !!! XWOR%: VAL 0 LA XR OR YR CPI NLIGM1?NPOLM1 < 'XR' OU 'YR' SONT-IL TROP GRANDS ??? < (A CAUSE DE L'INTERPOLATION ENTRE LES < NIVEAUX DE GRIS DANS LES CARRES < ELEMENTAIRES). LAI 0 < OUI A PRIORI : A=NIVEAU DU NOIR... JG SPAPR1 < ET OUI, ON PREND LE NOIR... LX XR < X=ABSCISSE, LY YR < Y=ORDONNEE. LR X,A < A=COORDONNEE X, LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DE MOT DANS LA LIGNE, SLRS NBITMO-XWOR%1 < A=NUMERO DE BIT DANS LE MOT, LXI NBITMO-BIT SBR A,X < X=DECALAGE D'ACCES AU BIT COURANT. XR Y,B < Y=NUMERO DU MOT DANS LA LIGNE, SLLD NMOTL=0 IF NBITMO-NMOTL,,XWOR%, IF ATTENTION : LA CONCATENATION QUI SUIT EST COMPLETEMENT IF STUPIDE !!! XWOR%: VAL 0 ORR B,Y < Y=NUMERO DU MOT DANS LA TRAME. XR Y,X LA &AIMAGB < ACCES A LA TRAME BLEU, PSR A LA &AIMAGV < ACCES A LA TRAME BLEUE, PSR A LA &AIMAGR < ACCES A LA TRAME ROUGE. XR X,Y SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT ROUGE, PLR A SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT VERT, PLR A SLRS 0,X ANDI BIT < RECUPERATION D'UN BIT BLEU. SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT (X,Y). SPAPR1: EQU $ PLR B,X,Y RSR < < < C A S D E L ' I N T E R P O L A T I O N : < < < RESULTAT : < A,B=NIVEAU(XR,YR) S'IL Y A INTERPOLATION DES < NIVEAUX DE GRIS ; SINON, (A,B) N'EST PAS < SIGNIFICATIF... < < SPGRA: EQU $ CPZ IALIAS < INTERPOLATION ??? JE SPGRA1 < NON... BSR ASPGPF < OUI, (A,B)=NIVEAU(XR,YR). SPGRA1: EQU $ RSR PAGE IF XOPT07-XXXOUI,XOPT7,,XOPT7 < < < R A N G E M E N T D ' U N P O I N T R E S I D E N T : < < < FONCTION : < CE SOUS-PROGRAMME RANGE LE < NIVEAU D'UN POINT SUR 3 BITS < PARALLELES. < < < ARGUMENTS : < XR,YR = COORDONNEES DU POINT, < A = SON NIVEAU DE GRIS. < < SPSPR: EQU $ PSR A,B,X,Y LX XR < X=ABSCISSE, LY YR < Y=ORDONNEE. PSR A LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 SLRS NBITMO-XWOR%1 LR A,X < X=NUMERO DE BITS. XR Y,B SLLD NMOTL=0 ORR B,Y < Y=NUMERO DU MOT DANS LA TRAME. PLR A < A=NIVEAU DE GRIS DU POINT. SLRD NCOOL < ET MISE DANS B... XR X,Y LA &AIMAGR < ACCES A UN MOT ROUGE, STA SAVER LA &AIMAGV < ACCES A UN MOT VERT, STA SAVEV LA &AIMAGB < ACCES A UN MOT BLEU. XR X,Y SCLS 0,X SLLD BIT < RECUPERATION DU BIT BLEU, SCRS BIT,X STA SAVEB LA SAVEV SCLS 0,X SLLD BIT < RECUPERATION DU BIT VERT, SCRS BIT,X STA SAVEV LA SAVER SCLS 0,X SLLD BIT < RECUPERATION DU BIT ROUGE, SCRS BIT,X XR X,Y STA &AIMAGR < RANGEMENT DU MOT ROUGE, LA SAVEV STA &AIMAGV < RANGEMENT DU MOT VERT, LA SAVEB STA &AIMAGB < RANGEMENT DU MOT BLEU. PLR A,B,X,Y RSR XOPT7: VAL 0 PAGE < < < S O U S - E C H A N T I L L O N N A G E < D E L ' I M A G E R E S I D E N T E : < < < FONCTION : < CE MODULE PERMET DE SOUS- < ECHANTILLONNER L'IMAGE RESIDENTE < (XR,YR) PAR INTERPOLATION SUR < UN NOMBRE DE POINTS VARIANT < AVEC LE PAS D'ECHANTILLONNAGE ; < CETTE INTERPOLATION LINEAIRE < EST PONDEREE EN FONCTION DE < LA DISTANCE DES POINTS. < < < ARGUMENTS : < (FXR,FYR)=POINT FLOTTANT COURANT, < (FDELX,FDELY)=PAS DE SOUS-ECHANTILLONNAGE. < < < RESULTAT : < (A,B)=NIVEAU DE GRIS INTERPOLE. < < SPGPF: EQU $ IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ IDEF < QUELLE EST LA DEFINITION ??? JNE ETI102 < VRAI 512, IL FAUT INTERPOLER... XOPT5: VAL 0 < < OPTIMISATION POSSIBLE : < FLD F1 FDV FKDEL < AFIN DE TESTER AUSSI FKDEL=1... FCAM FDELX JNE ETI102 < LE PAS SUR OX N'EST PAS UNITE... FCAM FDELY JNE ETI102 < LE PAS SUR OY N'EST PAS UNITE... FLD FXR < LE PAS SUR OX ET SUR OY SONT UNITES, BSR AFIX AD TRX STA XR < XR=FXR+TRX. FLD FYR BSR AFIX AD TRY STA YR < YR=FYR+TRY. BSR ASPGPR < LE NIVEAU EST PRIS DIRECTEMENT SUR LE < POINT COURANT (XR,YR)=(FXR,FYR)... BSR AFLT < ET ON FLOTTE... RSR < ET C'EST TOUT... < (ON A SUPPRIME LE 'JMP ETI103' POUR DES < RAISONS LIEES AUX SAUTS SUPERIEURS A < 128 MOTS...). < < ET NON, IL FAUT INTERPOLER : < ETI102: EQU $ LA XR LB YR PSR A,B,X < SAUVEGARDE DE (XR,YR)... < < INITIALISATION DES CUMULS : < FLD F0 FST FSIGCO < SIGMA DES COEFFICIENTS DE PONDERATION, FST FSIGNI < SIGMA DES NIVEAUX PONDERES. < < CALCUL DES INTERVALLES DE VARIATION : < FLD FDELX FMP FKDEL FST FWORK1 < FWORK1=FKDEL*FDELX, FLD FDELY FMP FKDEL FST FWORK2 < FWORK2=FKDEL*FDELY. < < PARCOURS SELON OY : < FAD FYR BSR AFIX AD TRY LR A,X < (X)=E(FYR+FDELY)+TRY, FLD FWORK2 BSR AFNEG < -FDELY*FKDEL, FAD FYR BSR AFIX AD TRY STA YR < YR=E(FYR-FDELY)+TRY, SBR A,X ADRI 1,X < (X)=NOMBRE DE PAS SUR OY... < < PARCOURS SELON OX : < ETI100: EQU $ LA YR JAL ETI104 < HORS-IMAGE RESIDENTE... CPI NLIGM1 JG ETI105 < HORS-IMAGE RESIDENTE... PSR X < SAVE LE DECOMPTE LE LONG DE OY, FLD FWORK1 FAD FXR BSR AFIX AD TRX LR A,X < (X)=E(FXR+FDELX)+TRX, FLD FWORK1 BSR AFNEG < -FDELX*FKDEL, FAD FXR BSR AFIX AD TRX STA XR < XR=E(FXR-FDELX)+TRX, SBR A,X ADRI 1,X < (X)=NOMBRE DE PAS SUR OX... < < CUMUL DU POINT COURANT (XR,YR) : < ETI101: EQU $ LA XR JAL ETI106 < HORS-IMAGE RESIDENTE... CPI NPOLM1 JG ETI107 < HORS-IMAGE RESIDENTE... LA XR SB TRX BSR AFLT FSB FXR BSR AFABS BSR AFNEG FAD FWORK1 FDV FWORK1 BSR AFABS BSR ASFWOR < PONDERATION LE LONG DE OX : < ABS(FDELX-ABS(XR-FXR))/FDELX. LA YR SB TRY BSR AFLT FSB FYR BSR AFABS BSR AFNEG FAD FWORK2 FDV FWORK2 < PONDERATION LE LONG DE OY : BSR AFABS < ABS(FDELY-ABS(YR-FYR))/FDELY. FMP FWORK < LA PONDERATION DE (XR,YR) EST LE PRODUIT BSR ASFWOR < DES PONDERATIONS SUIVANT OX ET OY... FAD FSIGCO < CUMUL DES PONDERATIONS... FST FSIGCO BSR ASPGPR < (A)=NIVEAU(XR,YR), BSR AFLT FMP FWORK < QUE L'ON PONDERE, FAD FSIGNI < ET QUE L'ON CUMULE... FST FSIGNI < < PROGRESSION LE LONG DE OX : < ETI106: EQU $ < HORS-IMAGE RESIDENTE A GAUCHE... IC XR JDX ETI101 < SI NECESSAIRE... < < PROGRESSION LE LONG DE OY : < ETI107: EQU $ < HORS-IMAGE RESIDENTE A DROITE... PLR X ETI104: EQU $ < HORS-IMAGE RESIDENTE EN HAUT... IC YR JDX ETI100 < SI NECESSAIRE... < < GENERATION DU NIVEAU INTERPOLE : < ETI105: EQU $ < HORS-IMAGE RESIDENTE EN BAS... PLR A,B,X STB YR < RESTAURATION STA XR < DE (XR,YR). FLD FSIGNI FDV FSIGCO < NIVEAU=SIGMA(NIVEAUX PONDERES)/SIGMA(CO- < EFFICIENT DE PONDERATION). < < SORTIE : < ETI103: EQU $ RSR < THAT'S ALL FOLK ?!???!?! PAGE < < < A C C E S A U N P O I N T S C R A T C H : < < < FONCTION : < CE SOUS-PROGRAMME RECONSTITUE < LE NIVEAU ASSOCIE A 3 BITS < PARALLELES. < < < ARGUMENTS : < XS,YS = COORDONNEES DU POINT SCRATCH, < < < RESULTAT : < A=NIVEAU DE GRIS DU POINT SCRATCH. < < SPAPS: EQU $ PSR B,X,Y,W LX XS < X=ABSCISSE, LY YS < Y=ORDONNEE. IF XOPT05-XXX512,XOPT5,,XOPT5 CPZ XCTCDA < ATTEINT-ON 'TV1' OU 'TV2' ??? JNE SPAPS3 < 'TV2', DONC UNE IMAGE 256*256... < < C A S D E S I M A G E S 5 1 2 * 5 1 2 : < PSR L < 'TV1', DONC UNE IMAGE 512*512... LRM L WORD LOC+128 < ET CECI, A CAUSE DES OVERLAYS... BSR ALOADP < (A)=NIVEAU(X,Y). PLR L JMP SPAPS2 < ET ON SORT... < < C A S D E S I M A G E S 2 5 6 * 2 5 6 : < SPAPS3: EQU $ XOPT5: VAL 0 IF ASHPR,XWOR%,XWOR%, < < TENTATIVE D'ACCELERATION : < SWBR Y,B ORR X,B < (B)=(Y,X), STB SAVYX < ET SAUVEGARDE... RBT NBITMO < SUPRESSION DU BIT DE SIGNE DE 'B' AFIN < QUE LE RESTE SOIT POSITIF OU NUL, LRM W WORD ASHT < (W)=ADRESSE DE LA TABLE D'ACCELERATION. LAI 0 DV LASHT < (B)=COUPLE (Y,X) MODULO 'ASHPR', ADR B,W < CE QUI DONNE DANS 'W' L'ADRESSE D'UNE < ENTREE : LA ASHT1,W CP SAVYX < L'ENTREE COURANTE CONTIENT-ELLE (Y,X) ??? JNE SPAPS1 < NON, IL FAUT ACCEDER REELLEMENT A 'TV1'/ < 'TV2'... LA ASHT2,W < OUI, MAIS EOR XCTCDA < ON VA ANSI REGARDER SIMULTANEMENT SI < L'ENTREE EST OCCUPEE, ET SI OUI, S'IL < Y A COINCIDENCE AVEC 'TV1'/'TV2'... JAL SPAPS1 < ET BIEN NON, CE N'EST PAS (XS,YS)... CPI NIVMAX < ALORS ??? JLE SPAPS2 < ON A TROUVE (XS,YS), ET 'TV1'/'TV2' EST < LE MEME, ALORS : < (A)=NIVEAU(XS,YS)... XWOR%: VAL 0 < < ACCES REEL AU POINT (XS,YS) : < SPAPS1: EQU $ LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT DANS LA LIGNE, SLRS NBITMO-XWOR%1 LXI NBITMO-BIT SBR A,X < X=DECALAGE D'ACCES AUX BITS, PSR X XR Y,B SLLD NMOTL=0+NBITMO ORR Y,A < A=NUMERO DU MOT DANS LA TRAME. AD XCTCDA < POUR PERMETTRE UN ACCES A TV1/TV2... BSR AGETS < ACCES A LA 'CDAI'... PLR X < RESTAURATION DU DECALAGE, LA MCDAR SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT ROUGE, LA MCDAV SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT VERT, LA MCDAB SLRS 0,X ANDI BIT < RECUPERATION D'UN BIT BLEU, SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT. IF ASHPR,XWOR%9,XWOR%9, < < MEMORISATION DE (XS,YS) : < OR XCTCDA < (A)='TV1'/'TV2',NIVEAU(XS,YS) : IF TV1?TV2(NIVMAX,,XWOR%, IF ATTENTION : LA CONCATENATION 'TV1'/'TV2' ET NIVEAU IF EST IMPOSSIBLE !!! XWOR%: VAL 0 STA ASHT2,W < MEMORISATION DE LA TRANSLATION ET DU < NIVEAU, ANDI NIVMAX < ET RESTAURATION DU NIVEAU(XS,YS)... LB SAVYX STB ASHT1,W < ET MEMORISATION DE (XS,YS)... XWOR%9: VAL 0 < < SORTIE DU MODULE : < SPAPS2: EQU $ PLR B,X,Y,W RSR PAGE IF ASHPR,XWOR%,XWOR%, < < < T A B L E A A C C E S A L E A T O I R E : < < ASHT: EQU $ DO ASHPR BYTE 0;0 < COUPLES (Y,X). DO ASHPR WORD INOC < ETAT INOCCUPE. XWOR%: VAL 0 PAGE IF XOPT05-XXX256,XOPT5,,XOPT5 < < < R A N G E M E N T D ' U N P O I N T S C R A T C H : < < < FONCTION : < CE SOUS-PROGRAMME RANGE LE < NIVEAU D'UN POINT SUR 3 BITS < PARALLELES EN SCRATCH. < < < AGUMENTS : < XS,YS = COORDONNEES DU POINT, < A = SON NIVEAU DE GRIS. < < SPSPS: EQU $ PSR A,B,X,Y LX XS < POSITIONNEMENT AU POINT LY YS < SCRATCH (XS,YS). IF XOPT03-XXXOUI,XOPT3,,XOPT3 < < TEST DES OVER-SCREEN : < PSR A < SAUVEGARDE DU NIVEAU. LR X,A < (A)=XS : CPZ MODX < EST-ON SUR UN X-TORE ??? JE SPSPS2 < OUI... JAL SPSPS3 < NON, ET OVER-SCREEN... CPI NPOLM1 JG SPSPS3 < OVER-SCREEN... SPSPS2: EQU $ ANDI NPOLM1 < ON PEUT ALORS CALCULER 'XS' MODULO... LR A,X < (X)=XS DANS L'ECRAN... LR Y,A < (A)=YS : CPZ MODY < EST-ON SUR UN Y-TORE ??? JE SPSPS4 < OUI... JAL SPSPS3 < NON, ET OVERS-SCREEN... CPI NLIGM1 JG SPSPS3 < OVER-SCREEN... SPSPS4: EQU $ ANDI NLIGM1 < ON PEUT ALORS CALCULER 'YS' MODULO... LR A,Y < (Y)=YS DANS L'ECRAN... PLR A < RESTAURATION DU NIVEAU... FCMZ FANAG < Y-A-T'IL DES ANAGLYPHES ??? JE SPSPS6 < NON... STZ XCTCDA < ACCES A 'TV1'... STX XS < MISE A JOUR STY YS < DU POINT REEL A TRACER... LR A,B < OUI, IL FAUT TRACER AVEC UN .OR. : BSR ASPGS < (A)=NIVEAU ANTERIEUR, < < TABLE DE "MULTIPLICATION" DES COULEURS ANAGLYPHIQUES : < < !ROUGE *ROUGE *VERT *VERT *JAUNE *JAUNE *JAUNE < !MIN *MAX *MIN *MAX *MAX *MOY *MIN < ! 6 * 1 * 7 * 2 * 3 * 4 * 5 < ! * * * * * * <------------------------------------------------------------------------------- < ROUGE MIN 6 ! 6 * 1 * 5 * 4 * 3 * 4 * 5 <=============================================================================== < ROUGE MAX 1 ! 1 * 1 * 4 * 3 * 3 * 4 * 4 <=============================================================================== < VERT MIN 7 ! 5 * 4 * 7 * 2 * 3 * 4 * 5 <=============================================================================== < VERT MAX 2 ! 4 * 3 * 2 * 2 * 3 * 4 * 4 <=============================================================================== < JAUNE MAX 3 ! 3 * 3 * 3 * 3 * 3 * 3 * 3 <=============================================================================== < JAUNE MOY 4 ! 4 * 4 * 4 * 4 * 3 * 4 * 4 <=============================================================================== < JAUNE MIN 5 ! 5 * 4 * 5 * 4 * 3 * 4 * 5 < < (SACHANT QUE LE NOIR '0' NE CHANGE PAS LES COULEURS) < SLLS NIVMAX+1=0 ORR A,B < ON CONCATENE LES 2 NIVEAUX, SACHANT < QUE LA TABLE DE MULTIPLICATION EST < SYMETRIQUE... XR B,X LBY &ATANAG < (A)=NIVEAU RESULTANT... XR B,X < RESTAURATION DE X... SPSPS6: EQU $ XOPT3: VAL 0 PSR A,W < SAUVEGARDE DU NOUVEAU NIVEAU... IF ASHPR,XWOR%,XWOR%, < < MISE A JOUR EVENTUELLE DE L'ACCELERATEUR : < SWBR Y,B ORR X,B < (B)=(Y,X), PSR A,B < SAUVEGARDE DU NIVEAU (A) ET DE (Y,X) EN < (B). RBT NBITMO < SUPRESSION DU BIT DE SIGNE DE 'B' AFIN < QUE LE RESTE SOIT POSITIF OU NUL, LRM W WORD ASHT < (W)=ADRESSE DE LA TABLE D'ACCELERATION. LAI 0 DV LASHT < (B)=COUPLE (Y,X) MODULO 'ASHPR', ADR B,W < CE QUI DONNE DANS 'W' L'ADRESSE D'UNE < ENTREE : PLR A,B < RESTAURATION : < (A)=NIVEAU(XS,YS), < (B)=(YS,XS). OR XCTCDA XR A,B < (A)=(YS,XS), < (B)='TV1'/'TV2', NIVEAU. CP ASHT1,W < EST-CE LE MEME (YS,XS) ??? JNE SPSPS1 < NON, ON NE TOUCHE PAS A LA TABLE... LA ASHT2,W < OUI, COMPARONS 'TV1'/'TV2'... EORR B,A JAL SPSPS1 < DIFFERENT, OU ENTREE INOCCUPEE POUR < LE COUPLE (0,0)... CPI NIVMAX JG SPSPS1 < MEME REMARQUE... STB ASHT2,W < OK, IL S'AGIT DU MEME POINT, ON MET < EVENTUELLEMENT A JOUR LE NIVEAU... XWOR%: VAL 0 < < RANGEMENT : < SPSPS1: EQU $ LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 SLRS NBITMO-XWOR%1 LXI NBITMO-BIT SBR A,X < X=AMPLITUDE DU DECALAGE... PSR X XR Y,B SLLD NMOTL=0+NBITMO ORR Y,A < A=ADRESSE DU MOT ROUGE CONTENANT < (XS,YS) DANS LA 'CDA'... BSR AGETS < ACCES A LA 'CDAI'... PLR X < X=AMPLITUDE DU DECALAGE, STA WORK1 < SAUVEGARDE DE LA DERNIERE ADRESSE... PLR A,W < A=NIVEAU DE GRIS DE (XS,YS). SLRD NCOOL < ET CADRAGE DANS 'B'... LA MCDAB < MSE A JOUR DU BLEU, BSR ADECAL < CONCATENATION... STA MCDAB LA MCDAV < MISE A JOUR DU VERT, BSR ADECAL < CONCATENATION... STA MCDAV LA MCDAR < MISE A JOUR DU ROUGE. BSR ADECAL < CONCATENATION... STA MCDAR LA WORK1 < A=ADRESSE EN 'CDA' DU BLEU... LRM B,X WORD MCDAB WORD 1 WCDA < MISE A JOUR DU BLEU, LRM B,X WORD MCDAV WORD 1 SBR Y,A WCDA < MISE A JOUR DU VERT, LRM B,X WORD MCDAR WORD 1 SBR Y,A WCDA < MISE A JOUR DU ROUGE. SPSPS5: EQU $ PLR A,B,X,Y RSR IF XOPT03-XXXOUI,XOPT3,,XOPT3 < < SORTIE OVER-SCREEN : < SPSPS3: EQU $ PLR A < RESTAURATION DU NIVEAU, JMP SPSPS5 < VERS LA SORTIE... XOPT3: VAL 0 < < < C O N C A T E N A T I O N : < < DECAL: EQU $ SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X RSR XOPT5: VAL 0 PAGE < < < A C C E S ' C D A I ' : < < < FONCTION : < IL S'AGIT D'UN MODULE DE < LECTURE DE LA 'CDAI' COMMUN < A 'SPSPS' ET 'SPAPS'. < < GETS: EQU $ LRM B,X,Y WORD MCDAR WORD 1 WORD LIMAG < Y=POUR PASSER D'UNE COULEUR A L'AUTRE. RCDA < ACCES AU MOT ROUGE, LRM B,X WORD MCDAV WORD 1 ADR Y,A RCDA < ACCES AU MOT VERT, LRM B,X WORD MCDAB WORD 1 ADR Y,A RCDA < ACCES AU MOT BLEU. RSR PAGE IF XOPT05-XXX512,XOPT5,,XOPT5 < < < M A R Q U A G E D ' U N P A V E D E 4 P O I N T S : < < < FONCTION : < DANS UN PREMIER TEMPS, ON < N'UTILISE PAS LA DEFINITION < 512*512, MAIS UNIQUEMENT LES < 256 COULEURS ; ET CECI A CAUSE < DE L ATAILLE DU Z-BUFFER, ET < AUTRES CHOSES... < < < ARGUMENTS : < (XS,YS)=COORDONNEES DANS (0,255), < (A)=NIVEAU(XS,YS). < < SPSPS: EQU $ PSR B,X,Y < SAUVEGARDES... < < CHOIX DU MODE : < CPZ IDEF < VRAI OU FAUX 512 ??? JNE SPSPS6 < VRAI 512... < < CAS DU FAUX 512, CHAN- < GEMENT D'ECHELLE : < LX XS < (X)=(XS), LY YS < (Y)=(YS)... ADR X,X < ET ON DOUBLE ADR Y,Y < LES ECHELLES... LB AYMAX SBR B,Y NGR Y,Y < EN EFFET, LES AXES DES 'Y' DES 2 < SYSTEMES SONT INVERSES... < < MARQUAGE D'UN CARRE : < BSR ASTORP < (X,Y) <-- (A), ADRI I,X BSR ASTORP < (X+1,Y) <-- (A), ADRI -I,Y BSR ASTORP < (X+1,Y-1) <-- (A), ADRI -I,X BSR ASTORP < (X,Y-1) <-- (A). < < SORTIE : < SPSPS5: EQU $ PLR B,X,Y RSR < < CAS DU VRAI 512 : < SPSPS6: EQU $ LX XS2 < (X)=(XS2), LY YS2 < (Y)=(YS2), LB AYMAX SBR B,Y NGR Y,Y < INVERSION DE L'AXE 'Y'... BSR ASTORP < (X,Y) <-- (A). JMP SPSPS5 < ET C'EST TOUT... < < SORTIES EN OVER-SCREEN : < SPSPS3: EQU $ PLR A < RESTAURATION DU NIVEAU... JMP SPSPS5 < VERS LA SORTIE... XOPT5: VAL 0 PAGE < < < E X T R A C T I O N D ' U N E R A C I N E C A R R E E : < < < FONCTION : < CE SOUS-PROGRAMME EXTRAIT LA < RACINE CARREE D'UN NOMBRE PAR < LA METHODE DE NEWTON, C'EST-A-DIRE < A PARTIR DE LA SUITE : < U(N+1)=(U(N)+K/U(N))/2, < OU K DESIGNE LE NOMBRE DONT ON < EXTRAIT LA RACINE... < < < ARGUMENT : < A,B=NOMBRE DONT ON EXTRAIT LA RACINE. < < < RESULTAT : < A,B=RACINE DU NOMBRE ARGUMENT. < < RAC: EQU $ BSR AFCAZ JE RAC2 < NOMBRE=0 ==> RACINE=0... JG RAC3 < OK, NOMBRE>0... QUIT 1 < ??!??!?! RAC3: EQU $ PSR X,Y LR A,X < X ET LR B,Y < Y MEMORISENT LE NOMBRE ARGUMENT. RAC1: EQU $ BSR ASFWOR LR X,A LR Y,B FDV FWORK < K/U(N), FAD FWORK < U(N)+K/U(N), FMP F05 < (U(N)+K/U(N))/2. FCAM FWORK < TEST DE FIN ??? JNE RAC1 < NON... PLR X,Y RAC2: EQU $ RSR EOT #SIP FONCTION# PAGE < < < A U C A S O U ... < < FLOC: @ IF 4=XFSYMB('0080)'0080,XWOR%,,XWOR% LOCAL FLOC: EQU $ XWOR%: VAL 0 SPU: @ IF 3=XFSYMB('0080)'0080,XWOR%,,XWOR% PROG SPU: EQU $ FLD VARU < ELEMENT NEUTRE... RSR XWOR%: VAL 0 SPV: @ IF 3=XFSYMB('0080)'0080,XWOR%,,XWOR% PROG SPV: EQU $ FLD VARV < ELEMENT NEUTRE... RSR XWOR%: VAL 0 SPW: @ IF 3=XFSYMB('0080)'0080,XWOR%,,XWOR% PROG SPW: EQU $ FLD F0 < ELEMENT NEUTRE... RSR XWOR%: VAL 0 PAGE < < < F I N D E L ' O V E R L A Y : < < XWOR%1: VAL $-DEBOV1*NOCMO LOVLG: EQU ZERO+XWOR%1 IF ITEM1-$,XWOR%,XWOR%, LOVL2: EQU LOVLG < POUR LE CHARGEMENT PARTIEL. XWOR%: VAL 0 IF ITEM1-$,,,XWOR% XWOR%1: VAL ITEM1-DEBOV1*NOCMO LOVL2: EQU ZERO+XWOR%1 < ON TRONQUE LORSQUE L'OVERLAY ECRASE < L'ITEM1... XWOR%: VAL 0 PAGE < < < G E N E R A T I O N E T V A L I D A T I O N : < < IF $-ZERO-PILE,XWOR%,, IF ATTENTION : LA BRANCHE D'OVERLAY EST TROP LONGUE !!! XWOR%: VAL 0 PAGE < < < G E N E R A T I O N D U P R O C E S S E U R : < < LOCAL XXXLOC: EQU $ XXXCCI: WORD 1 < RETOUR AU CCI. XXXMOK: BYTE '6D;"O" ASCI "K!" < MESSAGE 'OK!'. XXXDOK: WORD '0202 < ENVOI DU MESSAGE 'OK'. WORD XXXMOK-ZERO*NOCMO WORD 4 GENOV1: WORD '8402 < DEMANDE DE GENERATION DU PROCESSEUR. WORD BRANCH-ZERO*NOCMO WORD ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO WORD -1 GENOV2: WORD '8402 < GENERATION DE L'OVERLAY. WORD DEBOV1-ZERO*NOCMO WORD LOVLG WORD -1 XXXPIL: DZS 2 < PILE DE GENERATION. PROG USE L,XXXLOC+'80 WORD XXXLOC+'80 < VALEUR INITIALE DE LA BASE L. XXXGEN: EQU $ LRP L < INITIALISATION DE LA BASE L. LA -1,L LR A,L LAD XXXPIL-1 < INITIALISATION DE L'ADRESSE DE PILE. LR A,K < < TENTATIVE DE GENERATION DE L'OVERLAY 1. < XXXGN7: EQU $ LAD GENOV1 < GENERATION DU PROCESSEUR. SVC 0 JE XXXGN8 < OK ... < < ERREUR - L'OVERLAY EXISTE DEJA. < LAD XXXCCI < RETOUR CCI. SVC 0 JMP XXXGN7 < ET REESSAI. < < BONNE GENERATION. < XXXGN8: EQU $ LAD XXXDOK < ENVOI MESSAGE OK. SVC 0 LAD XXXCCI < ET RETOUR AU CCI. SVC 0 < < TENTATIVE DE GENERATION : < XXXGN1: EQU $ LAD GENOV2 < GENERATION DE L'OVERLAY. SVC 0 < ENVOI DEMANDE DE GENERATION. JNE XXXGN2 < ERREUR : IL EXISTE DEJA!!! < < OK , BONNE GENERATION : < LAD XXXDOK SVC 0 < ENVOI DU MESSAGE OK. < < RETOUR DEFINITIF AU CCI : < XXXGN3: EQU $ LAD XXXCCI SVC 0 < RETOUR AU CCI. JMP XXXGN3 < CAS DES !GO. < < CAS DES ERREURS DE GENERATION : < LE PROCESSEUR EXISTE DEJA: < XXXGN2: EQU $ LAD XXXCCI SVC 0 < RETOUR PROVISOIRE AU CCI. JMP XXXGN1 < TRY AGAIN LA GENERATION. END XXXGEN