NMTZ: VAL "T6" NMP: VAL " 0" IF NMPROC-NMTZ,,XWOR%, IF NMPROC-NMP,,XWOR%, IF ATTENTION : 'NMPROC' EST MAUVAIS !!! XWOR%: VAL 0 IF NMPROC-NMTZ,XWOR%9,,XWOR%9 IDP "T6 - VERSION TRANSFORMATION QUELCONQUE DE TW" XWOR%9: VAL 0 IF NMPROC-NMP,XWOR%9,,XWOR%9 IDP " 0 - VERSION DE 'T6' INTERPRETATIVE" XWOR%9: VAL 0 IDP "RELEASE 29/06/1981" 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 < < < S E L E C T I O N D U M O D E D ' E N T R E E : < < NMPROD: VAL NMPROC < SAUVEGARDE DU NOM REEL DU PROCESSEUR, < ON NE SAIT JAMAIS ??!?!?!? VISU: VAL 0 < MODE D'ENTREE PAR LA VISU, ITEM: VAL 1 < MODE D'ENTREE PAR L'ITEM1. MODE: VAL VISU < A PRIORI, 'TW'/'TX' : ENTREE VISU... IF NMPROC-NMP,XWOR%,,XWOR% NMPROC: VAL NMTZ < SI " 3", ON LE REMPLACE PAR "T3", MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1. XWOR%: VAL 0 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 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 AMASK:: VAL NCOOL*LIMAG+TV1 < ADRESSE DU MASQUE DANS LA 'CDA'. IZBUF:: VAL AMASK+LIMAG < DEBUT DU BLOC COURANT DU Z-BUFFER DANS < LA 'CDA' QUAND ON EST EN '!CDAI'... LIZBUF:: VAL '1000 < LE Z-BUFFER EST DECOUPE EN BLOCS DE < 4K MOTS, NZBUF:: VAL 16 < CE QUI FAIT DONC 16 BLOCS... XWOR%1: VAL 1024 XWOR%2: VAL LIZBUF/XWOR%1*NZBUF XWOR%3: VAL LIMAG/XWOR%1*NBITMO 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'... TV2:: VAL IZBUF+LIZBUF < ADRESSE DE LA DEUXIEME IMAGE SCRATCH < UTILISEE EN PARTICULIER POUR LA MODU- < LATION D'AMPLITUDE SUR LA NORMALE. LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE < L'EOT A PRIORI... PROG PAGE < < < M E S S A G E S : < < MMCDA: BYTE 5;'6D MCDAI: ASCI "!CDA" BYTE "I";EOT MCDA: ASCI "!CDA" BYTE EOT;0 REP: DZS NBRHEX/NOCMO < BUFFER DES REPONSES. MERR: BYTE 1;"?" IF MODE-VISU,XWOR%7,,XWOR%7 MINT: BYTE 2;'6D;">";0 MNOM: BYTE 5;'6D ASCI "NOM=" MORGX: BYTE 3;'6D ASCI "X=" MORGY: BYTE 3;'6D ASCI "Y=" MTORE: BYTE 6;'6D ASCI "TORE? " MK: BYTE 3;'6D ASCI "K=" MH: BYTE 3;'6D ASCI "H=" MCT: BYTE 1;"=" MNMOD: BYTE 7;'6D ASCI "N-MOD?" MN: BYTE 3;'6D ASCI "N=" MECL: BYTE 5;'6D ASCI "LIT?" MALIAS: BYTE 5;'6D ASCI "INT?" MESX: BYTE 4;'6D ASCI "SX= " MESY: BYTE 4;'6D ASCI "SY= " MESZ: BYTE 4;'6D ASCI "SZ= " MPROJ: BYTE 3;'6D ASCI "P=" MODM: BYTE 5;'6D ASCI "MOD=" MASKO: BYTE 7;'6D ASCI "MK ON?" MSLAS: BYTE 1;"/" MTRX: BYTE 4;'6D ASCI "CX= " MTRY: BYTE 4;'6D ASCI "CY= " MZR: BYTE 4;'6D ASCI "ZR= " MTR: BYTE 4;'6D ASCI "TR= " MKFU: BYTE 5;'6D ASCI "KFU=" MKFV: BYTE 5;'6D ASCI "KFV=" MKFW: BYTE 5;'6D ASCI "KFW=" MKFT: BYTE 5;'6D ASCI "KFT=" MKUX: BYTE 5;'6D ASCI "KUX=" MKVX: BYTE 5;'6D ASCI "KVX=" MKWX: BYTE 5;'6D ASCI "KWX=" MKTX: BYTE 5;'6D ASCI "KTX=" MKUY: BYTE 5;'6D ASCI "KUY=" MKVY: BYTE 5;'6D ASCI "KVY=" MKWY: BYTE 5;'6D ASCI "KWY=" MKTY: BYTE 5;'6D ASCI "KTY=" MKUZ: BYTE 5;'6D ASCI "KUZ=" MKVZ: BYTE 5;'6D ASCI "KVZ=" MKWZ: BYTE 5;'6D ASCI "KWZ=" MKTZ: BYTE 5;'6D ASCI "KTZ=" MKRX: BYTE 4;'6D ASCI "KX= " MKRY: BYTE 4;'6D ASCI "KY= " MKRZ: BYTE 4;'6D ASCI "KZ= " MTRANS: BYTE 7;'6D ASCI "TRANS?" XWOR%7: VAL 0 < < ZONE EN RECOUVREMENT : < BUFIN: EQU ITEM2+'518 < BUFFER D'ENTREE DES FONDS. LBUFIN: VAL NBITMO/NOCMO LBUFMH: VAL NPOLM1+1/NBITMO < LONGUEUR DU MASQUE HORIZONTAL, LBUFMV: VAL NLIGM1+1/NBITMO < LONGUEUR DU MASQUE VERTICAL. BUFMH: EQU BUFIN+LBUFIN < MASQUE HORIZONTAL, BUFMV: EQU BUFMH+LBUFMH < MASQUE VERTICAL. LSTACK:: VAL 30 < LONGUEUR DE LA PILE DE TRAVAIL. STACK: EQU BUFMV+LBUFMV < PILE DE TRAVAIL. IF ITEM1-STACK-LSTACK,,,XWOR% IF ATTENTION : LA ZONE EN RECOUVREMENT DE IF L'ITEM2, RECOUVRE AUSSI L'ITEM1 !!! XWOR%: VAL 0 PAGE < < < L O C A L : < < LOCAL LOC: EQU $ < < CONSTANTES : < IF MODE-VISU,XWOR%7,,XWOR%7 NGE: ASCI "GE" < NOM DU PROCESSEUR DE RETOUR. XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 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. XWOR%7: VAL 0 SAVEK: WORD 0 < SAUVEGARDE DU REGISTRE 'K'. KIN: WORD -1 < COMPTEUR DES ENTREES... IF MODE-VISU,XWOR%7,,XWOR%7 NMOTS: WORD 2*LTNI < LONGUEUR MOTS DES 2 ITEMS. XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 NMOTS: WORD LTNI < POUR NE RAZER QUE L'ITEM2... XWOR%7: VAL 0 IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... IF MODE-ITEM,XWOR%7,,XWOR%7 < < 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. XWOR%7: VAL 0 < < RELAIS DE TABLES, D'IMAGES... < ACOM: WORD KOM,X < TABLE DES COMMANDES RECONNUES. AMERR: EQU MERR < MESSAGE D'ERREUR. IF MODE-VISU,XWOR%7,,XWOR%7 AMINT: EQU MINT < MESSAGE D'INVITATION. AMNOM: EQU MNOM < "NOM=" AMORGX: EQU MORGX < "ORGX=" AMORGY: EQU MORGY < "ORGY=" AMTORE: EQU MTORE < "TORE?" AMASKO: EQU MASKO < "MASK ON?" AMSLAS: EQU MSLAS < "/" AMTRX: EQU MTRX < "TX=" AMTRY: EQU MTRY < "TY=" AMK: EQU MK < "K=" AMH: EQU MH < "H=" AMCT: EQU MCT < "=" AMNMOD: EQU MNMOD < "N-MOD?" AMN: EQU MN < "N=" AMECL: EQU MECL < "ECLAIRAGE?" AMALIA: EQU MALIAS < "INTER?" AMESX: EQU MESX < "SX=" AMESY: EQU MESY < "SY=" AMESZ: EQU MESZ < "SZ=" AMZR: EQU MZR < "ZR=" AMTR: EQU MTR < "TR=" AMKFU: EQU MKFU < "KFU=" AMKFV: EQU MKFV < "KFV=" AMKFW: EQU MKFW < "KFW=" AMKFT: EQU MKFT < "KFT=" AMKUX: EQU MKUX < "KUX=" AMKVX: EQU MKVX < "KVX=" AMKWX: EQU MKWX < "KWX=" AMKTX: EQU MKTX < "KTX=" AMKUY: EQU MKUY < "KUY=" AMKVY: EQU MKVY < "KVY=" AMKWY: EQU MKWY < "KWY=" AMKTY: EQU MKTY < "KTY=" AMKUZ: EQU MKUZ < "KUZ=" AMKVZ: EQU MKVZ < "KVZ=" AMKWZ: EQU MKWZ < "KWZ=" AMKTZ: EQU MKTZ < "KTZ=" AMPROJ: EQU MPROJ < "P=" AMODM: EQU MODM < "MODE=" AMKRX: EQU MKRX < "KX=" AMKRY: EQU MKRY < "KY=" AMKRZ: EQU MKRZ < "KZ" AMTRAN: EQU MTRANS < "TRANS?" XWOR%7: VAL 0 AREP: WORD REP < ACCES AU BUFFER DE REPONSE... AREPX: WORD REP,X < DE MEME EN INDEXE... ABUFIN: WORD BUFIN,X < ACCES AU BUFFER DE GENERATION DU FOND. 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... < < RELAIS DE SOUS-PROGRAMMES : < AOVL: WORD OVL < CHARGEMENT DES OVERLAYS... IF MODE-VISU,XWOR%7,,XWOR%7 APRINT: WORD PRINT < EDITION D'UN MESSAGE. APIN: WORD PIN < EDITION MESSAGE+ENTREE CARACTERE. APIHEX: WORD PIHEX < EDITION MESSAGE+ENTREE 4 CHIFFRES. XWOR%7: VAL 0 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. AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE ACCI: WORD CCI < ACCES AU CCI. AGOSGN: WORD GOSGN < POUR ACCEDER AU SGN... ASPSCD: WORD SPSCD < TRANSFERT BRUTAL EN SCRATCH. ASPBCD: WORD SPBCD < TRANSFERT EN RESIDENT SANS MASQUE. APMOV5: WORD PMOV5 < TV R --> RESIDENT, APMOV6: WORD PMOV6 < TV V --> RESIDENT, APMOV7: WORD PMOV7 < TV B --> RESIDENT. ASPTR: WORD SPTR < (XS,YS) <-- TRANS(XR,YR). ASPTR1: WORD SPTR1 < SORTIE DU S/P DE TRANS... APTRAN: WORD PTRANS < COEFFICIENT MATRICE 3*3. ASP: WORD 0 < RELAI VARIABLE CONTENANT L'ADRESSE DE < L'UN DES SOUS-PROGRAMMES PRECEDENTS. ASPOP: WORD SPOP < OPERATIONS INTER-IMAGES... ALOOP: WORD LOOP < BOUCLE DE L'INTERROGATION. 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'. IF MODE-ITEM,XWOR%7,,XWOR%7 APIN: EQU AIN APIHEX: EQU AIHEX AALTM: WORD ALTM < TRAITEMENT DES RETOURS BRUTAUX... XWOR%7: VAL 0 < < 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 IF MODE-VISU,XWOR%7,,XWOR%7 NOMBB:: VAL "Y" < NOM DE LA BRANCHE D'OVERLAY. NOMOV1:: VAL " ">NBITOC?NOMBB XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 NOMBB:: VAL "*" < NOM DE LA BRANCHE D'OVERLAY. NOMOV1:: VAL " ">NBITOC?NOMBB XWOR%7: VAL 0 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'. DEMTVR: WORD TVDKU < ACCES AU ROUGE. WORD IMAGR-ZERO*NOCMO WORD LIMAG*NOCMO WORD TVPR DEMTVV: WORD TVDKU < ACCES AU VERT. WORD IMAGV-ZERO*NOCMO WORD LIMAG*NOCMO WORD TVPV DEMTVB: WORD TVDKU < ACCES AU BLEU. WORD IMAGB-ZERO*NOCMO WORD LIMAG*NOCMO WORD TVPB DEMTV: 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 DE L'OVERLAY DE 'TZ'. WORD OVLTZ2 WORD LOVL2 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 MODE-ITEM,XWOR%7,,XWOR%7 SITEM1: DZS LNOM/NOCMO < POUR SAUVEGARDER LA FIN DE L'ITEM1. XWOR%7: VAL 0 < < DONNEES POUR DETERMINER LA TRANSFORMEE < DU CARRE DE BASE DU MAILLAGE DE L'IMAGE < DE BASE : < FPAS: FLOAT 0 < PAS DU MAILLAGE INTERIEUR AU CARRE < UNITE DE L'IMAGE DE BASE. NPAS: WORD 0 < NOMBRE DE PAS (=INVERSE DE 'FPAS'). FINCU: FLOAT 0 < INCREMENT DE 'FXR' A L'INTERIEUR DU < CARRE DE BASE. FINCV: FLOAT 0 < DE MEME POUR 'FYR'... VECU1: FLOAT 0 VECU2: FLOAT 0 VECU3: FLOAT 0 VECU4: FLOAT 0 VECV1: FLOAT 0 VECV2: FLOAT 0 VECV3: FLOAT 0 VECV4: FLOAT 0 VECW1: FLOAT 0 VECW2: FLOAT 0 VECW3: FLOAT 0 VECW4: FLOAT 0 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. FNIV1: FLOAT 0 < NIVEAU(XR,YR). FNIV2: FLOAT 0 < NIVEAU(XR+1,YR). FNIV3: FLOAT 0 < NIVEAU(XR+1,YR+1). FNIV4: FLOAT 0 < NIVEAU(XR,YR+1). PAGE < < < C O M M O N : < < COMMON COMON: WORD 0 < MOT RESERVE POUR LE BLOC FLOTTANT. < < ACCES AU Z-BUFFER : < ZBUF: WORD 0 < 0 : Z-BUFFER ACTIF (MODE NORMAL)... < 1 : INACTIF, MAIS DANGEREUX... 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 SDKU: WORD -1 < NUMERO DU BLOC COURANT, N'EXISTE PAS < AU CHARGEMENT. MDKU: WORD 0 < COMPTAGE DES MODIFS DU BLOC COURANT. 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... < < 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. WORK2: WORD 0 < VARIABLE DE TRAVAIL. NM1: WORD 0 < NIVEAU D'UN POINT ANTERIEUR, NM2: WORD 0 < NIVEAU MODULE D'UN POINT POSTERIEUR. < < DONNEES DE DERIVATION DE LA SURFACE : < DXDU: EQU VECU1 < DX/DU, DXDV: EQU VECU2 < DX/DV, DYDU: EQU VECU3 < DY/DU, DYDV: EQU VECU4 < DY/DV, DZDU: EQU VECV1 < DZ/DU, DZDV: EQU VECV2 < DZ/DV. NX: EQU VECV3 < X(NORMALE), NY: EQU VECV4 < Y(NORMALE), NZ: EQU VECW1 < Z(NORMALE). NORMN: EQU VECW2 < NORME(NORMALE). < < N-MODULATION : < IMODN: WORD 0 < 0 : PAS DE N-MODULATION, < 1 : ON DEPLACE LE POINT (XS,YS,ZS) < LE LONG DE LA NORMALE PROPORTION- < NELLEMENT AU NIVEAU DU POINT (XR,YR) < DE L'IAMGE 'TV2'... FMODN: FLOAT 0 < CONSTANTE DE MODULATION. < < 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) 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 ACOEF: WORD COEF < CALCUL DE LA MODULATION LUMINEUSE. ANECL: WORD NECLX < RELAI... < < CONSTANTES UTILES : < XR: WORD 0 < COORDONNEE X D'UN POINT RESIDENT, YR: WORD 0 < COORDONNEE Y D'UN POINT RESIDENT, ZR: WORD 0 < COORDONNEE Z D'UN POINT RESIDENT, TR: WORD 0 < COORDONNEE T D'UN POINT RESIDENT. XS: WORD 0 < COORDONNEE X D'UN POINT SCRATCH, YS: WORD 0 < COORDONNEE Y D'UN POINT SCRATCH. ORGX: WORD 0 < ORIGINE EN X DE L'IMAGE SCRATCH < PAR RAPPORT A L'IMAGE RESIDENTE, ORGY: WORD 0 < DE MEME, ORIGINE EN Y... < < 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... FWORK: FLOAT 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 : < 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). 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. ARAC: WORD RAC < EXTRACTION D'UNE RACINE CARREE... < < SOUS-PROGRAMMES SPECIFIQUES : < SPUVW: EQU $ ASPU: WORD SPU < COMPOSANTE 'U' D'UN VECTEUR, XSPU:: VAL $-SPUVW-1 < INDEX COMPOSANTE U. ASPV: WORD SPV < COMPOSANTE 'V', XSPV:: VAL $-SPUVW-1 < INDEX COMPOSANTE V. ASPW: WORD SPW < 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. < < 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. IF MODE-VISU,XWOR%7,,XWOR%7 MAT: BYTE 6;'6D ASCI " M" MATN: WORD 0 < NUMERO DE L'ELEMENT COURANT... ASCI "= " XWOR%7: 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 F1: FLOAT 1 F3: FLOAT 3 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 : < F0: FLOAT 0 FWORK1: FLOAT 0 < TRAVAIL... FWORK2: FLOAT 0 < TRAVAIL... VARUVW: EQU $ VARU: FLOAT 0 XVARU:: VAL $-VARUVW-2 < INDEX COORDONNEE U. VARV: FLOAT 0 XVARV:: VAL $-VARUVW-2 < INDEX COORDONNEE V. VARW: FLOAT 0 XVARW:: VAL $-VARUVW-2 < INDEX COORDONNEE W. VART: FLOAT 0 XVART:: VAL $-VARUVW-2 < INDEX COORDONNEE T. AVAR: WORD VARUVW,X < REALI D'ACCES AUX COORDONNEES. TRX: WORD 0 < CX, TRY: WORD 0 < CY, TRZ: WORD 0 < CZ. VECU: FLOAT 0 VECV: FLOAT 0 VECW: FLOAT 0 NORMG: EQU VECW3 < NORME DU GRADIENT(F). XNORMG: EQU VECW4 < VARIE DE 1*FK A NORMG*FK. 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 FXS: FLOAT 0 FYS: FLOAT 0 FZS: FLOAT 0 FK: FLOAT 1 < < CONSTANTES DE DERIVATION : < FH: FLOAT 0.01 < PAS DE DERIVATION NUMERIQUE. F2H: FLOAT 0.02 < < CONSTANTES DE TRAVAIL ACCESSIBLES < AU SOUS-PROGRAMME SPECIFIQUE PAR < INDEXATION DOUBLE-MOT : < IF MODE-VISU,XWOR%7,,XWOR%7 NCT:: VAL 1 < NOMBRE DE CONSTANTES DE TRAVAIL. XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 NCT:: VAL 16 < NOMBRE DE CONSTANTES DE TRAVAIL. XWOR%7: VAL 0 ACT: WORD CT,X < RELAI D'ACCES. ASPCT: WORD SPCT < SOUS-PROGRAMME COMMUN D'ACCES. 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 AERROR: WORD ERROR < , WORD DELETE < - : DELETE SGN LE RESIDENT WORD ERROR <. WORD ERROR < / WORD MOV0 < 0 : TV <-- RESIDENT R+V+B WORD MOV1 < 1 : TV <-- RESIDENT R WORD MOV2 < 2 : TV <-- RESIDENT V WORD MOV3 < 3 : TV <-- RESIDENT B WORD MOV4 < 4 : RESIDENT <-- TV R+V+B WORD MOV5 < 5 : RESIDENT <-- TV R WORD MOV6 < 6 : RESIDENT <-- TV V WORD MOV7 < 7 : RESIDENT <-- TV B WORD STV2 < 8 : TV2 <-- RESIDENT WORD GTV2 < 9 : RESIDENT <-- TV2 WORD ERROR < : 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 ERROR < ? 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 ERROR < E WORD GOGE < F : FIN WORD ERROR < G WORD CDER < H : ENTREE CONSTANTE DE DERIVATION WORD ERROR < I WORD ERROR < J WORD INFK < K : ENTREE CTTE TRANSFORMATION WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE WORD ERROR < M WORD NAME < N : NOMME L'IMAGE RESIDENTE WORD ERROR < O WORD ERROR < P WORD ERROR < Q WORD TRANSM < R : DEFINITION TRANSFORMATION MATRICIELLE WORD IMSAV < S : SCRATCH <-- (RESIDENT) WORD TRANS < T : TRACE DU CHAMP DE VECTEURS WORD ERROR < U WORD VITRE < V : GESTION DES TRANSPARENCES 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 IF MODE-VISU,XWOR%7,,XWOR%7 < < < E D I T I O N D ' U N M E S S A G E : < < < ARGUMENT : < A=ADRESSE MOT DU MESSAGE, DONT LE < PREMIER OCTET EST LA LONGUEUR. < < PRINT: EQU $ PSR A,X,C LR A,C ADR A,A ADRI 1,A < CALCUL DE L'ADRESSE OCTET DU MESSAGE. STA DEMOUT+1 LBY 0,C < ACCES A LA LONGUEUR... STA DEMOUT+2 LAD DEMOUT SVC 0 < ENVOI DU MESSAGE... PLR A,X,C RSR XWOR%7: VAL 0 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. < < IF MODE-VISU,XWOR%7,,XWOR%7 ENTER: EQU $ PSR X SVC 0 < ENVOI DE LA DEMANDE... PLR X RSR XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 ENTER: EQU $ PSR A,X,Y,W LR A,W < W=ADRESSE DE LA DEMANDE : LRM A WORD '0101 CP 0,W < EST-CE BIEN UNE ENTREE AVEC ECHO < SUR LA VISU UTILISATEUR ??? JE ENTER1 < OUI... QUIT 1 < NON, ???!???! ENTER1: EQU $ 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 XWOR%7: VAL 0 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 : RETOUR 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 < < < R E T O U R A ' G E ' : < < GOGE: EQU $ IF MODE-ITEM,XWOR%7,,XWOR%7 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 $ LRM A,B,X WORD SITEM1 < A=ZONE DE SAUVEGARDE, WORD NOM < B=ZONE A RESTAURER, WORD LNOM/NOCMO < X=NOMBRE DE MOTS A RESTAURER. MOVE < RESTAURATION DU BOUT DE L'ITEM1... LX NMOTS GOGE3: EQU $ STZ &AITEM2 < RAZ DE L'ITEM2... JDX GOGE3 XWOR%7: VAL 0 CPZ ZBUF < ALORS ??? JNE GOGE4 < Z-BUFFER INACTIF... BSR ASPDKU < ECRITURE DU BLOC COURANT SI NECESSAIRE... GOGE4: EQU $ LA SAVEK LR A,K < RESTAURATION DE 'K'... IF MODE-VISU,XWOR%7,,XWOR%7 LAD RELMEM SVC 0 < RETOUR A 4K MOTS... LX NMOTS < X=NOMBRE DE MOTS A RAZER... TW2: EQU $ STZ &AITEM2 < RAZE DES ITEMS 1 ET 2. JDX TW2 LAI BRANCH-ZERO LR A,W < RESTAURATION DE 'W'. STZ MODCAL,W < REINITIALISATION DU MODE D'APPEL... LA NGE STA 0,W < MISE EN PLACE DU NOM DE "GE"... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 LA IEG STA MODCAL,W < RENVOI DE L'INDEX COURANT DE ITEM1, XWOR%7: VAL 0 LAI AMCDA-ZERO BSR ACCI < ENVOI DE !CDA. GOGE1: EQU $ LAD DEMLOD BSR AOVL < ET TENTATIVE DE CHARGEMENT... QUIT 1 < EN CAS D'ERREUR, JMP GOGE1 < ET ON RETENTE... IF MODE-ITEM,XWOR%7,,XWOR%7 < < < 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 XWOR%7: VAL 0 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 : IF MODE-VISU,XWOR%7,,XWOR%7 JG TW1 < CAS DES ALT-MODES... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 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. LRM A,B,X WORD NOM < A=ZONE A SAUVEGARDER, WORD SITEM1 < B=ZONE DE SAUVEGARDE, WORD LNOM/NOCMO < X=NOMBRE DE MOTS. MOVE < SAUVEGARDE... XWOR%7: VAL 0 LR K,A < CAS DE LA PREMIERE, STA SAVEK < SAUVEGARDE DE K... TW1: EQU $ LRM K WORD STACK-1 < INITIALISATION DE K... TW20: EQU $ LAI AMCDAI-ZERO BSR ACCI < ENVOI DE !CDAI... JNE GOGE < ET BIEN CELA NE MARCHE PAS... 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMASKO-ZERO XWOR%7: VAL 0 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMINT-ZERO XWOR%7: VAL 0 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMERR-ZERO BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 LAD DEMOUT SVC 0 < EDITION DU MESSAGE D'ERREUR... XWOR%7: VAL 0 BR ALOOP < ET C'EST TOUT... 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMNOM-ZERO BSR APRINT XWOR%7: VAL 0 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 : < (LORS DES 'LNS' ET 'LON', IL REGARDE < SI LA LONGUEUR DE L'IMAGE VAUT EXACTE- < MENT LIMAG*NCOOL*NOCMO ; SI NON, ELLE < REITERE L'OPERATION AVEC UN DELTA < NOM-VALEUR DE -1 CORRESPONDANT A UNE < ANCIENNE VERSION DU PROGRAMME) < 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... LBY SGN CPI SGNDLN JE GOSGN1 < CAS D'UN DELETE... CPI SGNSTN JE GOSGN1 < CAS D'UN STORE... ACTD 3 < CAS D'UN LOAD : B=LONGUEUR DE L'IMAGE, LRM A WORD LIMAG*NCOOL*NOCMO CPR A,B < S'AGIT-IL D'UNE ANCIENNE OU D'UNE < NOUVELLE IMAGE ??? JE GOSGN1 < NOUVELLE : DELTA=LNOM*NOCMO... LAI -1 < ANCIENNE : STA SGN+3 < IL FAUT LA RECUPERER AVEC DELTA=-1... LAD SGN SVC 0 < ON REITERE LE LOAD... GOSGN1: EQU $ CPZR X < TEST DES CONDITIONS DE RETOUR... 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 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... < < GZB: EQU $ STB MCDAR < AU CAS OU CE SERAIT 'YSTORE'... PSR A,X LBI 0 XWOR%1: VAL LIZBUF=0 SCLD NBITMO-XWOR%1 < B=NUMERO DE BLOC, SLRS NBITMO-XWOR%1 < A=ADRESSE DANS LE BLOC. XR A,B < A=NUMERO DE BLOC, B=ADRESSE DANS LE BLOC. CP SDKU < LE BLOC DEMANDE EST-IL LE BLOC COURANT ? JE GZB2 < OUI... < < REECRITURE DU BLOC COURANT LORSQU'IL A ETE MODIFIE : < PSR A < SAVE LE BLOC DEMANDE, BSR ASPDKU < ECRITURE DU BLOC COURANT S'IL EXISTE < ET S'IL A ETE MODIFIE... PLR A < RESTAURE LE BLOC DEMANDE... < < 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 $ LRM A WORD IZBUF 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... YLOAD:: VAL 0 < MODE LOAD, YSTORE:: VAL 1 < MODE STORE. CPZR Y < QUEL EST LE SENS DE L'OPERATION ??? JE GZB4 < LOAD... IC MDKU < STORE : DANS CE CAS, ON COMPTABILISE < LA MISE A JOUR... WCDA JMP GZB5 GZB4: EQU $ RCDA GZB5: EQU $ LB MCDAR < QUELQUE SOIT LE MODE 'B' EST BON... PLR A,X 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... JAL GZB6 < IL N'EXISTE PAS, ON EST DONC A < L'INITIALISATION, ON NE PEUT < QUE LIRE LE Z-BUFFER SUR 'DKU'... CPZ MDKU < IL EXISTE, ALORS A-T'IL ETE MODIFIE ??? JE GZB6 < NON, INUTILE D'ECRIRE... 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 LAD WDKU SVC 0 < REECRITURE DU BLOC COURANT... JE GZB6 < OK... QUIT 1 < DKU ?!??!??!!! GZB6: EQU $ RSR 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... 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... < CPI "N" JE MZBUF6 < PAS DE Z-BUFFER... CPI "O" JE MZBUF4 < UITILISATION DU Z-BUFFER... MZBUF7: EQU $ CPI "I" JNE MZBUF3 < ERREUR : ON INHIBE LE Z-BUFFER !!! < < INITIALISATION DU Z-BUFFER : < 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 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 $ BR ALOOP < ET C'EST TOUT... MZBUF3: EQU $ BR AERROR 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 ASPGPR < OUI, A=NIVEAU(XR,YR), FLT < ET CONVERSION FLOTTANTE... SPGRA1: EQU $ RSR 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 LX XS < X=ABSCISSE, LY YS < Y=ORDONNEE. 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... LRM B,X,Y WORD MCDAR WORD 1 WORD LIMAG < Y=LONGUEUR EN MOTS D'UNE TRAME. RCDA < ACCES A UN MOT ROUGE, LRM B,X WORD MCDAV WORD 1 ADR Y,A RCDA < ACCES A UN MOT VERT, LRM B,X WORD MCDAB WORD 1 ADR Y,A RCDA < ACCES A UN MOT BLEU. 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. PLR B,X,Y RSR PAGE < < < 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 PSR A < SAUVEGARDE DU NIVEAU, LX XS < DU POINT LY YS < SCRATCH (XS,YS). 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'... 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. PLR X < X=AMPLITUDE DU DECALAGE, STA WORK1 < SAUVEGARDE DE LA DERNIERE ADRESSE... PLR A < A=NIVEAU DE GRIS DE (XS,YS). SLRD NCOOL < ET CADRAGE DANS 'B'... LA MCDAB < MSE A JOUR DU BLEU, SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X STA MCDAB LA MCDAV < MISE A JOUR DU VERT, SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X STA MCDAV LA MCDAR < MISE A JOUR DU ROUGE. SCRS 0,X SLRS BIT SLLD BIT SCLS 0,X 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. PLR A,B,X,Y 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 DEMTV JMP MOVX < VERS L'ENVOI DE L'IMAGE... MOV3: EQU $ < RESIDENT B --> TV. LAD DEMTVB MOVX: EQU $ SVC 0 < BLEU. BR ALOOP MOV1: EQU $ < RESIDENT R --> TV. LAD DEMTVR SVC 0 < ROUGE. BR ALOOP MOV2: EQU $ < RESIDENT V --> TV. LAD DEMTVV SVC 0 < VERT. BR ALOOP PMOV5: EQU $ < TV R --> RESIDENT. LA DEMTVR+3 LR A,B ORI TVIN < MISE EN ENTREE, STA DEMTVR+3 LAD DEMTVR SVC 0 < ENTREE DU ROUGE, STB DEMTVR+3 < ET RESTAURATION... RSR PMOV6: EQU $ < TV V --> RESIDENT. LA DEMTVV+3 LR A,B ORI TVIN STA DEMTVV+3 LAD DEMTVV SVC 0 < ENTREE DU VERT... STB DEMTVV+3 RSR PMOV7: EQU $ < TV B --> RESIDENT. LA DEMTVB+3 LR A,B ORI TVIN STA DEMTVB+3 LAD DEMTVB SVC 0 < ENTREE DU BLEU... STB DEMTVB+3 RSR MOV4: EQU $ < TV R+V+B --> RESIDENT. BSR APMOV5 < ROUGE, BSR APMOV6 < VERT, MOV7: EQU $ < TV B --> RESIDENT. BSR APMOV7 < BLEU. BR ALOOP MOV5: EQU $ < TV R --> RESIDENT. BSR APMOV5 BR ALOOP MOV6: EQU $ < TV V --> RESIDENT. BSR APMOV6 BR ALOOP 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, FNEG < A,B = PI/2-TETA. SIN: EQU $ < ENTRY 'SINUS' : FST ZZZ061 < SAVE TEMPORAIRE DE L'ANGLE. STZ ZZZ063 JAGE ZZZ072 FNEG FST ZZZ061 IC ZZZ063 ZZZ072: EQU $ FDV DEUXPI FIX FLT FMP DEUXPI FSB ZZZ061 FNEG FCAM PI3141 JL ZZZ073 FSB PI3141 IC ZZZ063 ZZZ073: EQU $ FCAM PISUR2 JL ZZZ074 FSB PI3141 FNEG 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 FNEG ZZZ075: EQU $ RSR 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 $ FCAZ 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 $ FST FWORK 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 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 $ FIX RSR PAGE < < < E N T R E E ' Z R ' E T ' T R ' < < ZPIN: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMZR-ZERO XWOR%7: VAL 0 BSR AIFLOT FST FZR < ENTREE DE 'FZR'. IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTR-ZERO XWOR%7: VAL 0 BSR AIFLOT FST FTR < ENTREE DE 'FTR'... 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRX-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE 4 CHIFFRES HEXADECIMAUX. JNE DTRAN1 < ERREUR... STA TRX DTRAN2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRY-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE 4 CHIFFRES HEXADECIMAUX. JNE DTRAN2 < ERREUR... STA TRY DTRAN5: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKFU-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KFU DTRAN6: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKFV-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KFV DTRAN7: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKFW-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KFW DTRAN3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKFT-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KFT < < < 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 : < < IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKUX-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KUX IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKVX-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KVX IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKWX-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KWX IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKTX-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KTX IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKUY-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KUY IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKVY-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KVY IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKWY-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KWY IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKTY-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KTY IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKUZ-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KUZ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKVZ-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KVZ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKWZ-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KWZ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKTZ-ZERO XWOR%7: VAL 0 BSR AIFLOT FST KTZ DTRAN4: EQU $ BR ALOOP < EASY ??!?!?! PAGE IF MODE-ITEM,XWOR%5,,XWOR%5 < < < 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGX-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE ORGX... JE GORGX1 < OK... GORGX2: EQU $ BR AERROR < ET NON... GORGX1: EQU $ NGR A,A STA ORGX GORGX3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO XWOR%7: VAL 0 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGY-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE ORGY... JNE GORGX2 < ERREUR... NGR A,A STA ORGY GORGY3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO XWOR%7: VAL 0 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... XWOR%5: VAL 0 PAGE IF MODE-VISU,XWOR%5,,XWOR%5 < < < D E R I V A T I O N N U M E R I Q U E : < < < ARGUMENTS : < FH=CONSTANTE PROGRAMMABLE, < 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 $ 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 XVART JLE DERIV4 DERIV3: EQU $ QUIT 1 < !?!??!??! DERIV4: EQU $ < < CALCUL DE LA DERIVEE : < FLD &AVAR < VARIABLE ALPHA, PSR A,B,L < SAUVEGARDE DE ALPHA, ET DE LA BASE L... LRM L WORD FLOC+'80 < POUR LE CALCUL DE LA FONCTION F. FAD FH 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 FST FWORK < F(ALPHA-H). PLR A,B FSB FWORK FDV F2H FST FWORK < DERIVEE=(F(ALPHA+H)-F(ALPHA-H))/(2*H). PLR A,B,L < RESTAURE ALPHA, ET LA BASE L. FST &AVAR FLD FWORK < (A,B)=VALEUR DE LA DERIVEE. 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. < < < ARGUMENT : < A=NIVEAU A MODULER, < < < RESULTAT : < A=NIVEAU MODULE... < < COEF: EQU $ JAE COEF1 < NIVEAU NUL... FLT FMP FCOEF < PRISE EN COMPTE DE L'INCIDENCE... FMP F6S7 < AFIN DE NE PAS FAD F1 < CREER DE NOIR... FIX < ET CONVERSION ENTIERE... COEF1: EQU $ RSR XWOR%5: VAL 0 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 IF MODE-VISU,XWOR%7,,XWOR%7 STA MATN < NUMERO EN ASCI DE L'ELEMENT... XWOR%7: VAL 0 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAD MAT < A=ADRESSE DU MESSAGE MIJ=. XWOR%7: VAL 0 BSR APIHEX < ET CONVERSION... JNE PTRAN1 < ERREUR... LR A,Y < Y=NUMERATEUR... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSLAS-ZERO XWOR%7: VAL 0 BSR APIHEX < ET CONVERSION... JNE PTRAN1 < ERREUR... FLT FST FWORK < SAUVEGARDE DU DENOMINATEUR... LR Y,A FLT < 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRAN-ZERO XWOR%7: VAL 0 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKRX-ZERO XWOR%7: VAL 0 BSR APIHEX JNE PIC1 < ????! FLT FST KRX < ENTREE DE KRX, PIC2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKRY-ZERO XWOR%7: VAL 0 BSR APIHEX JNE PIC2 < ??!!!! FLT FST KRY < ENTREE DE KRY, PIC3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMKRZ-ZERO XWOR%7: VAL 0 BSR APIHEX JNE PIC3 < ??!??! FLT 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMODM-ZERO XWOR%7: VAL 0 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPROJ-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE PZ. JNE PROJE1 < ERREUR... FLT FST PZ < PZ=POSITION DE L'ECRAN. PROJE2: EQU $ BR ALOOP < ET C'EST TOUT... PAGE IF MODE-ITEM,XWOR%7,,XWOR%7 < < < 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 LY ORGY STY YS < ORDONNEE SCRATCH. LYI 0 < Y=ORDONNEE. STY YR SPOP1: EQU $ LXI 0 STX XR < X=ABSCISSE. LX ORGX STX XS SPOP2: EQU $ LX XS LY YS PSR X,Y < SAUVEGARDE DE 'XS' ET 'YS'... 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 $ CPZ IMASKO JE SPOP8 < LE MASQUE EST OFF... PSR X,Y LX XR < X=COORDONNEE RESIDENTE, LY YR < AINSI QUE Y... LR X,A 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... SPOP8: EQU $ BSR ASP < EXECUTION DE L'OPERATION VARIABLE .OP. < SUR LE COUPLE DE POINTS (X,Y). SPOP5: EQU $ PLR X,Y < RESTAURATION DE XS ET YS... STX XS STY YS IC XS < PROGRESSION DE XS, IC XR < ET DE XR, LA XR CPI NPOLM1 < EST-ON EN BOUT DE LIGNE ??? JLE SPOP2 < NON... BALAYAGE HORIZONTAL... IC YS < OUI, PROGRESSION DE YS, IC YR < ET DE YR... LA YR CPI NLIGM1 < EST-ON EN BOUT D'IMAGE ??? JLE SPOP1 < NON, BALAYAGE VERTICAL... PLR A,B,X,Y RSR PAGE < < < O P E R A T I O N S I N T E R - I M A G E S : < < IMSAV: EQU $ < ENVOI DU RESIDENT EN SCRATCH. XLOAD: EQU $ BR AERROR < OUI, SUR LA 'CDA-IMAGE', ET ALORS < GARE AUX MOVE DE PLUS D'UN MOT !!! IMSAV1: EQU $ BSR ASPSCD BR ALOOP IMLOAD: EQU XLOAD < RAPPEL DU SCRATCH EN RESIDENT SANS MASK. TRANS: EQU $ < APPLICATION DE M(I,J). LB ASPTR JMP IM2 IM1: EQU $ IM2: EQU $ STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME. BSR ASPOP BR ALOOP XWOR%7: VAL 0 PAGE < < < 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 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 < < DETERMINATION DE (XR,YR) : < LA XR SB TRX FLT FST FXR < XR. LA YR SB TRY FLT FST FYR < YR. CPZ ZBUF < Z-BUFFER ??? JE SPTR10 < IL EST ACTIF, ON DIFFERE TOUS LES TESTS. < < CAS OU LE Z-BUFFER EST INHIBE : < BSR ASPGPR < A=NIVEAU DU POINT (XR,YR). SPTR1A: EQU $ JANE SPTR10 < POINT PRESENT... BR ASPTR1 < DANS LE CAS RESIDENT --> SCRATH, LORSQUE < LE POINT (XR,YR) EST NOIR, ET LORSQUE < LE Z-BUFFER EST INHIBE, ON NE FAIT RIEN. SPTR10: EQU $ < < < 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 ' : < < FLD F0 FST FINCU < AFIN D'ATTEINDRE (XR,YR)... FST FINCV BSR ASPGPR FLT FST FNIV1 < NIVEAU(XR,YR). BSR ASPVU 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 F1 FST FXR IC XR 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 F1 FST FYR IC YR 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 F1 FST FXR DC XR 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 F1 FST FYR DC YR < < ON DISPOSE D'UN QUADRILATERE (M1,M2,M3,M4) < QUI EST LA TRANSFORMEE DU CARRE DE BASE < DETERMINE A PARTIR DE (XR,YR) ; < ON VA CHOISIR LA PLUS GRANDE DES < 2 DIAGONALES M1M3 OU M2M4 : < FLD VECU3 FSB VECU1 FST FWORK FMP FWORK FST FWORK1 FLD VECV3 FSB VECV1 FST FWORK FMP FWORK FAD FWORK1 FST FWORK1 FLD VECW3 FSB VECW1 FST FWORK FMP FWORK FAD FWORK1 FST FWORK1 < PREMIERE DIAGONALE : M1M3. FLD VECU4 FSB VECU2 FST FWORK FMP FWORK FST FWORK2 FLD VECV4 FSB VECV2 FST FWORK FMP FWORK FAD FWORK2 FST FWORK2 FLD VECW4 FSB VECW2 FST FWORK FMP FWORK FAD FWORK2 FST FWORK2 < DEUXIEME DIAGONALE : M2M4. FCAM FWORK1 < QUELLE EST LA PLUS GRANDE ??? JGE QUAD1 < M2M4... FLD FWORK1 < M1M3... QUAD1: EQU $ BSR ARAC < EN FAIT C'EST LE CARRE QUE L'ON < A CALCULE... FMP FK < ET OUI... FCAZ JG QUAD5 < OK, LA LONGUEUR EST POSITIVE... FLD F05 < SINON, ON EN PREND UNE INFERIEURE A 1... QUAD5: EQU $ FST FWORK < FWORK=MAX(M1M3,M2M4). FIX ADRI 1,A STA NPAS < NPAS=NOMBRE DE MAILLE DANS CHAQUE < DIRECTION X ET Y DU CARRE DE BASE. FLD F1 FDV FWORK < 1/MAX(M1M3,M2M4), FCAM F1 JLE QUAD2 < 1/MAX<=1, OK... FLD F1 < ON MINORE SINON... QUAD2: EQU $ FST FPAS < FPAS=1/MAX(M1M3,M2M4)... < < 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. LA IECL OR IMODN JAE DERI30 < NI ECLAIRAGE, NI N-MODULATION... LYI XSPU LXI XVARU BSR ADERIV FST DXDU < CALCUL DE DX/DU. LXI XVARV BSR ADERIV FST DXDV < CALCUL DE DX/DV. DERI30: EQU $ < < COMPOSANTE 'V' : < BSR ASPVV FST VECV < COMPOSANTE EN 'V' DU VECTEUR. LA IECL OR IMODN JAE DERI31 < NI ECLAIRAGE, NI N-MODULATION... LYI XSPV LXI XVARU BSR ADERIV FST DYDU < CALCUL DE DY/DU. LXI XVARV BSR ADERIV FST DYDV < CALCUL DE DY/DV. DERI31: EQU $ < < COMPOSANTE 'W' : < BSR ASPVW FST VECW < COMPOSANTE EN 'W' DU VECTEUR. LA IECL OR IMODN JAE DERI32 < NI ECLAIRAGE, NI N-MODULATION... LYI XSPW LXI XVARU BSR ADERIV FST DZDU < CALCUL DE DZ/DU. LXI XVARV BSR ADERIV FST DZDV < CALCUL DE DZ/DV. DERI32: EQU $ GRAD14: EQU $ < < < R E P R E S E N T A T I O N G R A P H I Q U E : < < GRAD11: EQU $ GRAD2: EQU $ GRAD30: EQU $ FLD VECU FMP FK FST VECU FLD VECV FMP FK FST VECV FLD VECW FMP FK FST VECW FLD VECU FST FXS < FXS=VECU, FLD VECV FST FYS < FYS=VECV, FLD VECW GRAD16: EQU $ FST FZS < FZS=VECW. LA IECL OR IMODN JANE SPTR21 < ECLAIRAGE OU MODULATION-N... BR ANECL < NON, ALLONS PROJETER DIRECTEMENT... SPTR21: EQU $ < < DETERMINATION DU VECTEUR NORMAL N : < FLD DZDU FMP DYDV FST FWORK FLD DYDU FMP DZDV FSB FWORK FST NX < NX=(DY/DU)*(DZ/DV)-(DZ/DU)*(DY/DV). FLD DXDU FMP DZDV FST FWORK FLD DZDU FMP DXDV FSB FWORK FST NY < NY=(DZ/DU)*(DX/DV)-(DX/DU)*(DZ/DV). FLD DYDU FMP DXDV FST FWORK FLD DXDU FMP DYDV FSB FWORK FST NZ < NZ=(DX/DU)*(DY/DV)-(DY/DU)*(DX/DV). < < CALCUL DE LA NORME DU VECTEUR NORMAL : < FLD NX FMP NX FST FWORK FLD NY FMP NY FAD FWORK FST FWORK FLD NZ FMP NZ FAD FWORK BSR ARAC FST NORMN < NORME(N)=RAC(NX*NX+NY*NY+NZ*NZ). FCAZ 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, FLT FSB FXS FST MSX < X(MS). LA SY SB TRY FLT FSB FYS FST MSY < Y(MS). LA SZ FLT FSB FZS FST MSZ < Z(MS). < < CALCUL DE LA NORME DU VECTEUR 'MS' : < FLD MSX FMP MSX FST FWORK FLD MSY FMP MSY FAD FWORK FST FWORK FLD MSZ FMP MSZ FAD FWORK BSR ARAC FST NORMS < NORME(MS)=RAC(MSX*MSX+MSY*MSY+MSZ*MSZ). FCAZ 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 FST FWORK FLD NY FMP MSY FAD FWORK FST FWORK FLD NZ FMP MSZ FAD FWORK < NX*MSX+NY*MSY+NZ*MSZ, FDV NORMN FDV NORMS < ON DISPOSE ICI DU 'COS' DE L'ANGLE < D'INCIDENCE DES RAYONS LUMINEUX, FMP F05 < QUE L'ON RAMENE DANS LE SEGMENT < (-0.5,+0.5), FAD F05 < PUIS DANS (0,+1)... FST FCOEF < CE QUI DONNE LE COEFFICIENT DE < MODULATION DES NIVEAUX... SPTR90: EQU $ CPZ IMODN < MODULATION-N ??? JE SPTR91 < NON, ECLAIRAGE SEULEMENT... < < CAS DE LA MODULATION SUR LA NORMALE : < LA XR STA XS < POUR SE PLACER AU LA YR STA YS < (U,V) DE TV2. LA CTCDA STA XCTCDA < POUR ATTEINDRE TV2... BSR ASPGPS < A=NIVEAU(U,V) DANS TV2, STZ XCTCDA < POUR ATTEINDRE TV1... FLT FMP FMODN < FMODN*NIVEAU(U,V), FMP FK < FK*FMODN*NIVEAU(U,V), FST FWORK < CE QUI DONNE LA CONSTANTE DE MODULATION. FMP NX FAD FXS FST FXS < FXS <-- FXS+NX*FK*FMODN*NIVEAU(U,V). FLD NY FMP FWORK FAD FYS FST FYS < FYS <-- FYS+NY*FK*FMODN*NIVEAU(U,V). FLD NZ FMP FWORK FAD FZS FST FZS < FZS <-- FZS+NZ*FK*FMODN*NIVEAU(U,V). SPTR91: EQU $ NECLX: EQU $ < < TRANSFORMATION MATRICIELLE ??? < GRAD13: EQU $ CPZ ITRANS JE TRANSX < NON... FLD FXS FSB KRX FST FXS FLD FYS FSB KRY FST FYS FLD FZS FSB KRZ FST FZS FLD FXS FMP M11 FST FWORK FLD FYS FMP M12 FAD FWORK FST FWORK FLD FZS FMP M13 FAD FWORK FAD KRX PSR A,B < FXS=M11*(XR-KRX)+M12*(YR-KRY) < +M13*(ZR-KRZ)+KRX. FLD FXS FMP M21 FST FWORK FLD FYS FMP M22 FAD FWORK FST FWORK FLD FZS FMP M23 FAD FWORK FAD KRY PSR A,B < FYS=M21*(XR-KRX)+M22*(YR-KRY) < +M23*(ZR-KRZ)+KRY. FLD FXS FMP M31 FST FWORK FLD FYS FMP M32 FAD FWORK FST FWORK FLD FZS FMP M33 FAD FWORK FAD KRZ FST FZS < FZS=M31*(XR-KRX)+M32*(YR-KRY) < +M33*(ZR-KRZ)+KRZ. PLR A,B FST FYS PLR A,B FST FXS TRANSX: EQU $ < < PROJECTION : < NECL: EQU $ FLD FZS CPZ IPROJ < TYPE DE PROJECTION ??? JE SPTRX1 < PAR SINT,COST... < < PROJECTION PERSPECTIVE : < FDV PZ FSB F1 FNEG FST FWORK < 1-(FZS/PZ) FCAZ 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 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 STA YS < YS=Y+Z*SINT. < < TEST DES HORS-ECRAN : < SPTR4: EQU $ LA XS CPZ MODX < EST-ON SUR UN X-TORE ??? JE SPTT3 < OUI... JAL SPTR1X < NON, ET XS EST OVERSCREEN... CPI NPOLM1 JG SPTR1X < 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 SPTR1X < NON, ET YS EST OVERSCREEN... CPI NLIGM1 JG SPTR1X < 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 $ < < RECUPERATION DU POINT SOURCE (M2) : < FLD FNIV1 < NIVEAU(XR,YR) A PRIORI... CPZ IALIAS < INTERPOLATION DES NIVEAUX DE GRIS ??? JE QUAD50 < NON... < < INTERPOLATION DES NIVEAUX DE GRIS DANS LE CARRE ELEMENTAIRE : < FLD F1 FSB FINCU FST FWORK1 < W1=1-FU, FLD F1 FSB FINCV FST FWORK2 < W2=1-FV, FMP FWORK1 FMP FNIV1 FST FWORK < (1-FU)*(1-FV)*N1, FLD FINCU FMP FWORK2 FMP FNIV2 FAD FWORK FST FWORK < +FU*(1-FV)*N2, FLD FINCU FMP FINCV FMP FNIV3 FAD FWORK FST FWORK < +FU*FV*N3, FLD FWORK1 FMP FINCV FMP FNIV4 FAD FWORK < +(1-FU)*FV*N4, QUAD50: EQU $ BSR AROND < ET CONVERSION ENTIERE... STA NM2 < NM2=NIVEAU CALCULE A INSCRIRE... < < RECUPERATION DU POINT DESTINATION (M1) : < BSR ASPGS STA NM1 < NM1=NIVEAU PRESENT ANTERIEUREMENT... < < CALCUL DE LA PROFONDEUR DU POINT COURANT : < FLD FZS < PROFONDEUR DU POINT M2, FIX 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 YS SWBR A,A OR XS STA WORK2 < 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. LA LTRANS < A=LISTE DES TRANSPARENCES... JL SPTR52 < B<X : LE POINT M2 EST A TRACER PLUS < LOIN DE L'ECRAN QUE M1... < < CAS OU LE POINT M2 EST A TRACER PLUS PRES QUE M1 : < 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 : < 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 $ XM WORK2 < WORK2=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 $ LA WORK2 < A=NIVEAU, BSR ACOEF < MODULATION LUMINEUSE EVENTUELLE... BSR ASPRS < GENERATION DU SCRATCH... SPTR1X: EQU $ < < ITERATION SUR LE MAILLAGE DU CARRE DE BASE : < PLR X FLD FINCV FAD FPAS FST FINCV < PROGRESSION DE 'FINCV'... JDX QUAD40 < AU POINT SUIVANT SUR 'Y'... PLR X FLD FINCU FAD FPAS 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 < < < 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. PSR L LRM L WORD FLOC+'80 BSR ASPU PLR L 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. PSR L LRM L WORD FLOC+'80 BSR ASPV PLR L 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. PSR L LRM L WORD FLOC+'80 BSR ASPW PLR L RSR PAGE IF MODE-ITEM,XWOR%5,,XWOR%5 < < < D E R I V A T I O N N U M E R I Q U E : < < < ARGUMENTS : < FH=CONSTANTE PROGRAMMABLE, < 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 $ 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 XVART JLE DERIV4 DERIV3: EQU $ QUIT 1 < !?!??!??! DERIV4: EQU $ < < CALCUL DE LA DERIVEE : < FLD &AVAR < VARIABLE ALPHA, PSR A,B,L < SAUVEGARDE DE ALPHA, ET DE LA BASE L... LRM L WORD FLOC+'80 < POUR LE CALCUL DE LA FONCTION F. FAD FH 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 FST FWORK < F(ALPHA-H). PLR A,B FSB FWORK FDV F2H FST FWORK < DERIVEE=(F(ALPHA+H)-F(ALPHA-H))/(2*H). PLR A,B,L < RESTAURE ALPHA, ET LA BASE L. FST &AVAR FLD FWORK < (A,B)=VALEUR DE LA DERIVEE. 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. < < < ARGUMENT : < A=NIVEAU A MODULER, < < < RESULTAT : < A=NIVEAU MODULE... < < COEF: EQU $ JAE COEF1 < NIVEAU NUL... FLT FMP FCOEF < PRISE EN COMPTE DE L'INCIDENCE... FMP F6S7 < AFIN DE NE PAS FAD F1 < CREER DE NOIR... FIX < ET CONVERSION ENTIERE... COEF1: EQU $ RSR XWOR%5: VAL 0 PAGE IF MODE-VISU,XWOR%7,,XWOR%7 < < < 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 LY ORGY STY YS < ORDONNEE SCRATCH. LYI 0 < Y=ORDONNEE. STY YR SPOP1: EQU $ LXI 0 STX XR < X=ABSCISSE. LX ORGX STX XS SPOP2: EQU $ LX XS LY YS PSR X,Y < SAUVEGARDE DE 'XS' ET 'YS'... 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 $ CPZ IMASKO JE SPOP8 < LE MASQUE EST OFF... PSR X,Y LX XR < X=COORDONNEE RESIDENTE, LY YR < AINSI QUE Y... LR X,A 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... SPOP8: EQU $ BSR ASP < EXECUTION DE L'OPERATION VARIABLE .OP. < SUR LE COUPLE DE POINTS (X,Y). SPOP5: EQU $ PLR X,Y < RESTAURATION DE XS ET YS... STX XS STY YS IC XS < PROGRESSION DE XS, IC XR < ET DE XR, LA XR CPI NPOLM1 < EST-ON EN BOUT DE LIGNE ??? JLE SPOP2 < NON... BALAYAGE HORIZONTAL... IC YS < OUI, PROGRESSION DE YS, IC YR < ET DE YR... LA YR CPI NLIGM1 < EST-ON EN BOUT D'IMAGE ??? JLE SPOP1 < NON, BALAYAGE VERTICAL... PLR A,B,X,Y RSR PAGE < < < O P E R A T I O N S I N T E R - I M A G E S : < < IMSAV: EQU $ < ENVOI DU RESIDENT EN SCRATCH. XLOAD: EQU $ BR AERROR < OUI, SUR LA 'CDA-IMAGE', ET ALORS < GARE AUX MOVE DE PLUS D'UN MOT !!! IMSAV1: EQU $ BSR ASPSCD BR ALOOP IMLOAD: EQU XLOAD < RAPPEL DU SCRATCH EN RESIDENT SANS MASK. TRANS: EQU $ < APPLICATION DE M(I,J). LB ASPTR JMP IM2 IM1: EQU $ IM2: EQU $ STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME. BSR ASPOP BR ALOOP XWOR%7: VAL 0 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. < < IF MODE-VISU,XWOR%7,,XWOR%7 PIN: EQU $ BSR APRINT XWOR%7: VAL 0 IN: EQU $ LAD DEMIN BSR AENTER LBY &AREP < A=CARACTERE REPONSE. RSR 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'... < < IF MODE-VISU,XWOR%7,,XWOR%7 PIHEX: EQU $ BSR APRINT XWOR%7: VAL 0 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 : < < < ARGUMENT : < A=ADRESSE D'UN MESSAGE EN MODE 'VISU'. < < < RESULTAT : < A,B=CONSTANTE FLOTTANTE. < INDICATEURS POSITIONNES PAR 'FCAZ'. < < IFLOT: EQU $ PSR X,Y IF MODE-VISU,XWOR%7,,XWOR%7 LR A,X < X=SAUVEGARDE DE L'ADRESSE MESSAGE. IFLOT1: EQU $ LR X,A < A=ADRESSE DU MESSAGE A EDITER... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 IFLOT1: EQU $ XWOR%7: VAL 0 BSR APIHEX < ENTREE DU NUMERATEUR, JNE IFLOT1 < ERREUR... LR A,Y < Y=NUMERATEUR. IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSLAS-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DU DENOMINATEUR, JNE IFLOT1 < ERREUR... JAE IFLOT1 < IL NE PEUT ETRE NUL !!! FLT FST FWORK < DENOMINATEUR, LR Y,A FLT < NUMERATEUR, FDV FWORK < RESULTAT=NUMERATEUR/DENOMINATEUR. FCAZ < ???? PLR X,Y RSR PAGE < < < E N T R E E D E L A C O N S T A N T E ' K ' < < INFK: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMK-ZERO XWOR%7: VAL 0 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 : < < CDER: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMH-ZERO XWOR%7: VAL 0 BSR AIFLOT < ENTREE DE H : FST FH FDV F05 FST F2H < ET CALCUL DE 2*H... 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMCT-ZERO XWOR%7: VAL 0 BSR AIFLOT < ENTREE DE LA CONSTANTE... FST &ACT < ET MEMORISATION... BR ALOOP 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 < < < < : 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 < < < G E S T I O N D E L A T R A N S P A R E N C E : < < 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 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMECL-ZERO XWOR%7: VAL 0 BSR APIN LAI 1 FLT 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMESX-ZERO XWOR%7: VAL 0 BSR APIHEX JNE ECL2 < ERREUR... STA SX < X(SOURCE)... ECL3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMESY-ZERO XWOR%7: VAL 0 BSR APIHEX JNE ECL3 < ERREUR... STA SY < Y(SOURCE)... ECL4: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMESZ-ZERO XWOR%7: VAL 0 BSR APIHEX JNE ECL4 < ERREUR... STA SZ < Z(SOURCE)... ECL1: EQU $ < < < C O M M A N D E D E N - M O D U L A T I O N : < < CMODN: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMNMOD-ZERO XWOR%7: VAL 0 BSR APIN < ENTREE D'UN CARACTERE O (ON) / N (OFF) : STZ IMODN < OFF A PRIORI... CPI "N" JE CMODN1 < OFF. CPI "O" JNE CMODN < ?!??! IC IMODN < ON. IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMN-ZERO XWOR%7: VAL 0 BSR AIFLOT < ENTREE DE LA CONSTANTE 'FN'... FST FMODN CMODN1: 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMALIA-ZERO XWOR%7: VAL 0 BSR APIN < ENTREE DE O/N... STZ IALIAS < IALIAS=0 : "N" A PRIORI... CPI "N" JE ALIAS2 < "N"... CPI "O" JNE ALIAS1 < ??!????! IC IALIAS < IALIAS=1 : "O"... ALIAS2: EQU $ < < SORTIE : < CVP1: EQU $ BR ALOOP < VERS L'INTERROGATION... PAGE IF MODE-VISU,XWOR%5,,XWOR%5 < < < 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGX-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE ORGX... JE GORGX1 < OK... GORGX2: EQU $ BR AERROR < ET NON... GORGX1: EQU $ NGR A,A STA ORGX GORGX3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO XWOR%7: VAL 0 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGY-ZERO XWOR%7: VAL 0 BSR APIHEX < ENTREE DE ORGY... JNE GORGX2 < ERREUR... NGR A,A STA ORGY GORGY3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO XWOR%7: VAL 0 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... XWOR%5: 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 < < < T R A N S F E R T S R E S I D E N T - S C R A T C H : < < < FONCTION : < CE MODULE ASSURE LES TRANSFERTS < BRUTAUX ENTRE LE RESIDENT, ET LE < SCRATCH (QUI EST EN FAIT LA 'CDA'). < < SPSCD: EQU $ PSR A,B,X LRM A,B,X WORD 0 < A=ADRESSE EN 'CDA', WORD IMAGE < B=ADRESSE EN RESIDENT, WORD LIMAG*NCOOL < X=NOMBRE DE MOTS A TRANSFERER. WCDA < TRANSFERT : RESIDENT --> SCRATCH. PLR A,B,X RSR SPBCD: EQU $ < TRANSFERT SANS MASQUE... PSR A,B,X LRM A,B,X WORD 0 < A=ADRESSE EN 'CDA', WORD IMAGE < B=ADRESSE EN RESIDENT, WORD LIMAG*NCOOL < X=NOMBRE DE MOTS A TRANSFERER. RCDA < TRANSFERT : SCRATCH --> RESIDENT. PLR A,B,X RSR EOT #SIP FONCTION# PAGE < < < A U C A S O U ... < < FLOC: @ IF 4='F700('0080)'0080,XWOR%,,XWOR% LOCAL FLOC: EQU $ XWOR%: VAL 0 SPU: @ IF 3='F700('0080)'0080,XWOR%,,XWOR% PROG SPU: EQU $ RSR XWOR%: VAL 0 SPV: @ IF 3='F700('0080)'0080,XWOR%,,XWOR% PROG SPV: EQU $ RSR XWOR%: VAL 0 SPW: @ IF 3='F700('0080)'0080,XWOR%,,XWOR% PROG SPW: EQU $ RSR XWOR%: VAL 0 PAGE < < < F I N D E L ' O V E R L A Y : < < XWOR%1: VAL $-DEBOV1*NOCMO LOVL2: EQU ZERO+XWOR%1 IF BUFIN-$,,,XWOR% IF ATTENTION : L'OVERLAY RECOUVRE LA IF ZONE EN RECOUVREMENT DE L'ITEM2 !!! 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 : < < XWOR%1: VAL ITEM2-BRANCH IF $-DEBOV1-XWOR%1,XWOR%,, IF ATTENTION : LA BRANCHE D'OVERLAY EST TROP LONGUE !!! XWOR%: VAL 0 EOT #SIP GEN PROCESSEUR#