NMTW: VAL "TW" NMTX: VAL "TX" NMTY: VAL "TY" NMM: VAL " M" NMN: VAL " N" NMO: VAL " O" IF NMPROC-NMTX,,XWOR%, IF NMPROC-NMTW,,XWOR%, IF NMPROC-NMM,,XWOR%, IF NMPROC-NMN,,XWOR%, IF NMPROC-NMTY,,XWOR%, IF NMPROC-NMO,,XWOR%, IF ATTENTION : 'NMPROC' EST MAUVAIS !!! XWOR%: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 IDP "TW - VERSION A NIVEAUX DE GRIS DE TV" XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 IDP "TX - VERSION TRI-DIMENSIONNELLE DE TW" XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 IDP "TY - VERSION TRANSFORMATION CONFORME DE TW" XWOR%9: VAL 0 IF NMPROC-NMM,XWOR%9,,XWOR%9 IDP " M - VERSION DE 'TW' INTERPRETATIVE" XWOR%9: VAL 0 IF NMPROC-NMN,XWOR%9,,XWOR%9 IDP " N - VERSION DE 'TX' INTERPRETATIVE" XWOR%9: VAL 0 IF NMPROC-NMO,XWOR%9,,XWOR%9 IDP " O - VERSION DE 'TY' INTERPRETATIVE" XWOR%9: VAL 0 IDP "RELEASE 27/05/1980" 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 EOT #SIP IMAGE 256# NBITMO: VAL 16 < NOMBRE DE BITS PAR MOT. NOCMO: VAL 2 < NOMBRE D'OCTETS PAR MOT... 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-NMM,XWOR%,,XWOR% NMPROC: VAL NMTW < SI " M", ON LE REMPLACE PAR "TW", MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1. XWOR%: VAL 0 IF NMPROC-NMN,XWOR%,,XWOR% NMPROC: VAL NMTX < SI " N", ON LE REMPLACE PAR "TX", MODE: VAL ITEM < AVEC ENTREE PAR L'ITEM1. XWOR%: VAL 0 IF NMPROC-NMO,XWOR%,,XWOR% NMPROC: VAL NMTY < SI " O", ON LE REMPLACE PAR "TY", 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 AMASK: VAL NCOOL*LIMAG < ADRESSE DU MASQUE DANS LA 'CDA'. LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE < L'EOT A PRIORI... PAGE < < < M E S S A G E S : < < MMCDA: BYTE 5;'6D MCDAP: ASCI "!CDA" PI: BYTE "P";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=" IF NMPROC-NMTW,XWOR%9,,XWOR%9 MMC: BYTE 5;'6D ASCI "RVB?" MMS: BYTE 6;'6D BYTE "S";" ";"M";'08;'08 XWOR%9: VAL 0 MFOND: BYTE 6;'6D ASCI "FOND= " MTORE: BYTE 6;'6D ASCI "TORE? " IF NMPROC-NMTW,XWOR%,,XWOR% MIMA: BYTE 7;'6D ASCI "MASK=?" MMAH: BYTE 3;'6D ASCI "H=" MMAV: BYTE 3;'6D ASCI "V=" XWOR%: VAL 0 IF NMPROC-NMTX,XWOR%,,XWOR% MPOINT: BYTE 5;'6D ASCI "#PT=" MPASQ: BYTE 5;'6D ASCI "PAS=" MFLOU: BYTE 6;'6D ASCI "FLOU? " MMAX: BYTE 5;'6D ASCI "MAX?" MPOND: BYTE 8;'6D ASCI "PONDER? " MNIVO: BYTE 9;'6D ASCI "NIVEAUX=" MTRAM: BYTE 7;'6D ASCI "TRAME?" MSENS: BYTE 6;'6D;"S";" ";"R";'08;'08 MPROJ: BYTE 3;'6D ASCI "P=" XWOR%: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 MK: BYTE 3;'6D ASCI "K=" MSENS: BYTE 6;'6D;"S";" ";"R";'08;'08 MTRAN: BYTE 24;'6D ASCI "1/Z=1 OU Z2=2 OU MAP=3?" MPROJ: BYTE 3;'6D ASCI "P=" XWOR%9: VAL 0 MASKO: BYTE 5;'6D ASCI "MSK?" MODM: BYTE 5;'6D ASCI "MOD=" IF NMPROC-NMTW,XWOR%9,,XWOR%9 MAT11: BYTE 5;'6D ASCI "M11=" MAT12: BYTE 5;'6D ASCI "M12=" MAT21: BYTE 5;'6D ASCI "M21=" MAT22: BYTE 5;'6D ASCI "M22=" XWOR%9: VAL 0 MSLAS: BYTE 1;"/" MTRX: BYTE 4;'6D ASCI "CX= " MTRY: BYTE 4;'6D ASCI "CY= " IF NMPROC-NMTX,XWOR%9,,XWOR%9 MTRZ: BYTE 4;'6D ASCI "CZ= " XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 MNIVO: BYTE 5;'6D ASCI "NIV=" XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 MDX: BYTE 4;'6D ASCI "DX= " MDY: BYTE 4;'6D ASCI "DY= " XWOR%9: VAL 0 XWOR%7: VAL 0 < < ZONE EN RECOUVREMENT : < BUFIN: EQU ITEM2 < 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 40 < LONGUEUR DE LA PILE DE TRAVAIL. STACK: EQU BUFMV+LBUFMV < PILE DE TRAVAIL. 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 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: WORD 0 < SAUVEGARDE D'UN MOT DE LA TRAME < SCRATCH ROUGE, MCDAV: WORD 0 < DE MEME POUR LE VERT, MCDAB: WORD 0 < DE MEME POUR LE BLEU. 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 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 NMPROC-NMTY,XWOR%9,,XWOR%9 FXS: FLOAT 0 FYS: FLOAT 0 FRS: FLOAT 0 FK: FLOAT 1 SENS: WORD 0 < SENS DE LA TRASFORMATION : < 0 : R --> S, < 1 : S --> R. XTRAN: WORD 0 < TYPE DE LA TRANSFORMATION CONFORME : < 0 : Z=K/Z, < 1 : Z=K*Z*Z. XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 < < 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 RADIAX: FLOAT 40.58451 < 255/(2*PI). RADIAY: FLOAT 81.16902 < 255/PI. ZZZ067: EQU PISUR2 < CSTES DU POLYNOME ZZZ068: WORD 'AD00;'5110 ZZZ069: WORD '51FD;'9A2C ZZZ070: WORD 'B3F9;'6CCE ZZZ071: WORD '4FF4;'6BDD RAYON: EQU FK < RAYON DE LA SPHERE. SINT: FLOAT -0.5 COST: FLOAT 0.86602 IPROJ: WORD 0 < 0 : MODE DE PROJECTION PAR COST,SINT ; < 1 : MODE DE PROJECTION PERSPECTIVE. PZ: FLOAT 0 F1: FLOAT 1 XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 FXS: FLOAT 0 FYS: FLOAT 0 FZS: FLOAT 0 FXR: FLOAT 0 FYR: FLOAT 0 FZR: FLOAT 0 SENS: WORD 0 < SENS DE LA TRANSFORMATION : < 0 : R --> S, < 1 : S --> R. LB0: WORD 0 < LONGUEUR DU BRAS COURANT DE LA SPIRALE. LB: WORD 0 < NOMBRE DE POINTS ENCORE A TRAITER < SUR LE BRAS COURANT DE LA SPIRALE. NP: WORD 0 < NOMBRE DE POINTS DEJA TRAITES, NPM: WORD 0 < NOMBRE DE POINTS A TRAITER. DELTAX: WORD 0 < PAS D'INCREMENTATION DE X, DELTAY: WORD 0 < PAS D'INCREMENTATION DE Y. PASQ: WORD 1 < VALEUR INITIALE DU PAS... CUMUL: WORD 0 < CUMUL DES NIVEAUX DES POINTS D'UNE < SPIRALE. IFLOU: WORD 0 < 0 : CALCUL D'UN FLOU EN (XR,YR), < 1 : ELIMINATION DES POINTS NOIRS. ISMAX: WORD 0 < 0 : LORS DE L'ELIMINATION DES POINTS < NOIRS, FAIRE UNE MOYENNE SUR LA < SPIRALE, < 1 : LORS DE L'ELIMINATION DES POINTS < NOIRS, PRENDRE LE MAX RENCONTRE SUR < LA SPIRALE. XSMAX: WORD 0 < MAX COURANT SUR LA SPIRALE. NPMAX: WORD 0 < 'NP' DU XSMAX COURANT... LNIV: WORD 0 < DONNE DANS L'OCTET GAUCHE LES NIVEAUX A < TESTER LORS DU BOUCHAGE DES TROUS : < LNIV(I)=1 : LES POINTS DE NIVEAU 'I' < SERONT TESTES... < DANS SON OCTET DROIT, IL DONNE LA < VALEUR INITIALE DE 'DRDN'... IPOND: WORD 0 < 0 : NE PAS PONDERER (ON PREND XSMAX), < 1 : PONDERER (ON PREND XSMAX*NPMAX/NPM). < < DONNEES POUR LE GENERATEUR ALEATOIRE : < ITRAM: WORD 0 < INDICATEUR DE TRAMAGE : < 0 : FONCTIONNEMENT NORMAL SANS TRAMAGE, < 1 : TRAMAGE : LES COULEURS SONT REMPLACEE < PAR UNE TRAME DE BLANC/NOIR DONT LA < DENSITE EST FONCTION DU NIVEAU < CALCULE SUR LA SPIRALE. RDN9: WORD 0 < SECONDE COURANTE... DRDN: WORD NIVMAX*NIVMAX < DIVISEUR DU NOMBRE ALEATOIRE : < IL EST INITIALISE A PARTIR DE L'OCTET < DROIT DE 'LNIV'... ATAUX: WORD TAUX,X < ACCES A LA TABLE DONNANT LA PROPORTION < DE BLANC/NOIR POUR CHAQUE NIVEAU DE < GRIS : TAUX: EQU $ BYTE 0;1*1;2*2;3*3;4*4;5*5;6*6;7*7 IF $-TAUX*NOCMO-NIVMAX-1,,XWOR%, IF ATTENTION : 'TAUX' EST MAUVAISE !!! XWOR%: VAL 0 RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT. RDN1: WORD 5189 < CONSTANTE DE CALCUL RDN3:: VAL 19 < DES NOMBRE ALEATOIRES... POINTS: WORD 16807 KRDN1: WORD 0 XKRDN1:: VAL 3 < INCREMENTEUR DE 'KRDN1'. XKRDN2:: VAL 7 < DECOMPTEUR DE 'KRDN2'. XWOR%9: VAL 0 ORGX: WORD 0 < ORIGINE EN X DE L'IMAGE SCRATCH < PAR RAPPORT A L'IMAGE RESIDENTE, ORGY: WORD 0 < DE MEME, ORIGINE EN Y... MODX: WORD 0 < 0 : "TORE" SUR LES X, < 1 : L'IMAGE SCRATCH NE SE REFERME PAS... MODY: WORD 0 < DE MEME SUR L'AXE DES Y. WORK1: WORD 0 < VARIABLE DE TRAVAIL... IF NMPROC-NMTW,XWOR%9,,XWOR%9 AEMETT: WORD 0 < ADRESSE DE L'EMETTEUR EN 'CDA' LORS < DES GENERATIONS/RECUPERATIONS DU < MASQUE D'IMAGE. ARECEP: WORD 0 < DE MEME, ADRESSE DU RECEPTEUR... XWOR%9: VAL 0 MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'. XWORK: WORD 0 < INDEX DE GENERATION DES FONDS... IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... IF NMPROC-NMTW,XWOR%9,,XWOR%9 NIVEAU: WORD 0 < NIVEAU RECHERCHE LORS DE 'C'... XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 EX: WORD 0 < DIMENSION HORIZONTALE DU MAILLAGE. EY: WORD 0 < DIMENSION VERTICALE DU MAILLAGE. NDX: WORD 0 < 'DX' TEMPORAIRE, NDY: WORD 0 < 'DY' TEMPORAIRE. NPOINT: WORD 0 < NOMBRE DE POINTS DANS UNE MAILLE=DX*DY. CUMUL: WORD 0 < SOMME DES NIVEAUX INTERNES D'UNE < MAILLE COURANTE. XDX: WORD 0 < NOMBRE DE MAILLE SUR L'HORIZONTALE, XDY: WORD 0 < NOMBRE DE MAILLES SUR LA VERTICALE. XNDX: WORD 0 < 'XDX' TEMPORAIRE, XNDY: WORD 0 < 'XDY' TEMPORAIRE. XWOR%9: VAL 0 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... SITEM1: DZS LNOM/NOCMO < POUR SAUVEGARDER LA FIN DE L'ITEM1. ITEM1: EQU ZERO+PILE-LTNI AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1. ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT. XWOR%7: VAL 0 < < DONNEES POUR LA TRANSFORMATION : < FWORK: FLOAT 0 < VARIABLE DE TRAVAIL. IF MODE-VISU,XWOR%7,,XWOR%7 IF NMPROC-NMTX,XWOR%9,,XWOR%9 MAT: BYTE 6;'6D ASCI " M" MATN: WORD 0 < NUMERO DE L'ELEMENT COURANT... ASCI "= " XWOR%9: VAL 0 XWOR%7: VAL 0 F05: FLOAT 0.5 < POUR LES ARRONDIS... IF NMPROC-NMTW,XWOR%9,,XWOR%9 M11: FLOAT 1 < MATRICE M12: FLOAT 0 < DE M21: FLOAT 0 < TRANSFORMATION M22: FLOAT 1 < UNITE... XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 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. XWOR%9: VAL 0 TRX: WORD 0 < TRANSLATION EN X, TRY: WORD 0 < TRANSLATION EN Y. IF NMPROC-NMTX,XWOR%9,,XWOR%9 TRZ: WORD 0 < TRANSLATION EN Z. COST: FLOAT 0.86602 < POUR LA PROJECTION SINT: FLOAT -0.5 < 3D --> 2D IPROJ: WORD 0 < 0 : MODE DE PROJECTION PAR COST,SINT ; < 1 : MODE DE PROJECTION PERSPECTIVE. PZ: FLOAT 0 F1: FLOAT 1 XWOR%9: 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=" IF NMPROC-NMTW,XWOR%9,,XWOR%9 AMMC: EQU MMC < "STACK?" AMMS: EQU MMS < "SENS?" XWOR%9: VAL 0 AMFOND: EQU MFOND < "FOND=" AMTORE: EQU MTORE < "TORE?" IF NMPROC-NMTW,XWOR%,,XWOR% AMIMA: EQU MIMA < "INIT MASK?" AMMAH: EQU MMAH < "MASK H=" AMMAV: EQU MMAV < "MASK V=" XWOR%: VAL 0 AMASKO: EQU MASKO < "MASK ON?" AMODM: EQU MODM < "MODE=" IF NMPROC-NMTW,XWOR%9,,XWOR%9 AMAT11: EQU MAT11 < "M11=" AMAT12: EQU MAT12 < "M12=" AMAT21: EQU MAT21 < "M21=" AMAT22: EQU MAT22 < "M22=" XWOR%9: VAL 0 AMSLAS: EQU MSLAS < "/" AMTRX: EQU MTRX < "TX=" AMTRY: EQU MTRY < "TY=" IF NMPROC-NMTX,XWOR%9,,XWOR%9 AMTRZ: EQU MTRZ < "TZ=" AMPOIN: EQU MPOINT < "#POINTS=" AMPASQ: EQU MPASQ < "PAS=" AMFLOU: EQU MFLOU < "FLOU?" AMMAX: EQU MMAX < "MAX?" AMPOND: EQU MPOND < "PONDER?" AMNIVO: EQU MNIVO < "NIVEAUX=" AMTRAM: EQU MTRAM < "TRAME?" AMSENS: EQU MSENS < "S R" AMPROJ: EQU MPROJ < "P=" XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 AMK: EQU MK < "K=" AMSENS: EQU MSENS < "S R" AMTRAN: EQU MTRAN < "1/Z Z2 ?" AMPROJ: EQU MPROJ < "P=" XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 AMNIVO: EQU MNIVO < "NIVEAU=" XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 AMDX: EQU MDX < "DX=" AMDY: EQU MDY < "DY=" XWOR%9: VAL 0 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. IF NMPROC-NMTW,XWOR%,,XWOR% ABUFMH: WORD BUFMH,X < ACCES AU MASQUE HORIZONTAL, ABUFMV: WORD BUFMV,X < ACCES AU MASQUE VERTICAL. XWOR%: VAL 0 AMCDAP: EQU MCDAP < !CDAP. AMCDA: EQU MCDA < !CDA. AMMCDA: EQU MMCDA < !CDA. API: WORD PI < RELAI POUR RANGER "P" OU "I"... AIMAGR: WORD IMAGR,X < RELAI TRAME ROUGE, AIMAGV: WORD IMAGV,X < RELAI TRAME VERTE, AIMAGB: WORD IMAGB,X < RELAI TRAME BLEUE. 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... APRINT: WORD PRINT < EDITION D'UN MESSAGE. AENTER: WORD ENTER < ENTREE DE QUELQUE CHOSE SUR LA VISU... AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE AIN: WORD IN < ENTREE 1 CARACTERE, AIHEX: WORD IHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX. ACCI: WORD CCI < ACCES AU CCI. AGOSGN: WORD GOSGN < POUR ACCEDER AU SGN... ASPAPR: WORD SPAPR < ACCES A UN POINT RESIDENT (X,Y). ASPAPS: WORD SPAPS < ACCES A UN POINT SCRATCH (X,Y). ASPSPR: WORD SPSPR < RANGEMENT D'UN POINT RESIDENT (X,Y). ASPSPS: WORD SPSPS < RANGEMENT D'UN POINT SCRATCH (X,Y). ASPGPR: EQU ASPAPR ASPGPS: EQU ASPAPS ASPRPR: EQU ASPSPR ASPRPS: EQU ASPSPS IF NMPROC-NMTX,,XWOR%9, ASPOR: WORD SPOR < RESIDENT <-- (RESIDENT).OR.(SCRATCH), ASPAND: WORD SPAND < RESIDENT <-- (RESIDENT).AND.(SCRATCH), ASPEOR: WORD SPEOR < RESIDENT <-- (RESIDENT).EOR.(SCRATCH), ASPINV: WORD SPINV < RESIDENT <-- .NOT.(RESIDENT). XWOR%9: VAL 0 ASPSCD: WORD SPSCD < TRANSFERT BRUTAL EN SCRATCH. ASPACD: WORD SPACD < TRANSFERT EN RESIDENT AVEC MASQUE, 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. IF NMPROC-NMTW,XWOR%,,XWOR% ASFOND: WORD SFOND < GENERATION D'UN POINT DU FOND. XWOR%: VAL 0 IF NMPROC-NMTX,XWOR%,,XWOR% ASPMOY: WORD SPMOY < MOYENNE DES NIVEAUX DES POINTS SPIRALE. XWOR%: VAL 0 IF NMPROC-NMTX,,XWOR%9, ASPPER: WORD SPPER < PERMUTATION RESIDENT <--> SCRATCH. XWOR%9: VAL 0 ASPTR: WORD SPTR < (XS,YS) <-- TRANS(XR,YR). IF NMPROC-NMTY,XWOR%9,,XWOR%9 ATRAN: WORD TRAN,X < ACCES AUX MODULES DE TRANSFORMATION : XTR1:: VAL 0 < TRANSFORMATION CONFORME : Z=K/Z, XTR2:: VAL 1 < TRANSFORMATION CONFORME : Z=K*Z*Z, XTR3:: VAL 2 < MAPPING SUR UNE SPHERE. TRAN: EQU $ WORD TRANS1;TRANS2;TRANS3 XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 ASPFIL: WORD SPFIL < (XS,YS) <-- (XR,YR) SI NIVEAU, 0 SINON. XWOR%9: VAL 0 APTRAN: WORD PTRANS < ENTREE D'UN COEFFICIENT DE LA MATRICE. IF NMPROC-NMTX,XWOR%9,,XWOR%9 APIC: WORD PIC < ENTREE DE CX OU CY OU CZ. XWOR%9: VAL 0 AROND: WORD ROND < ARRONDI FLOTTANT, ET CONVERSION ENTIERE. 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. AERROR: WORD ERROR < BRANCHEMENT EN ERREUR... IF MODE-ITEM,XWOR%7,,XWOR%7 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 DEMFON: WORD '0101 < ENTREE DE LA VALEUR DU FOND. WORD BUFIN-ZERO*NOCMO WORD NBITMO 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 0 < ADRESSE DU MESSAGE, WORD 0 < ET SA LONGUEUR... DEMMEM: WORD 4 < DEMANDE DE 16 K MOTS... RELMEM: WORD 4 < RETOUR A 4K MOTS... WORD '8000 WORD '2000 DEMLOD: BYTE '80?SGNLNS;'02 < DEMANDE DE CHARGEMENT DE "GE". WORD BRANCH-ZERO*NOCMO WORD ZERO-BRANCH+PILE-LTNI-LTNI*NOCMO WORD -1 DEMCC: WORD 2 < ACCES AU CCI INTERPRETATIF. WORD 0 < ADRESSE DE LA CARTE. WORD 80 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 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... 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 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 ERROR < 8 WORD ERROR < 9 WORD ERROR < : WORD ERROR < ; WORD ERROR < < WORD DTRANS < = : DEFINITION DE LA MATRICE M(I,J) WORD ERROR < > WORD ERROR < ? WORD ERROR < @ IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < A XWOR%9: VAL 0 IF NMPROC-NMTX,,XWOR%9, WORD IMAND < A : RESIDENT <-- (RESIDENT).AND.(SCRATCH) XWOR%9: VAL 0 WORD ERROR < B IF NMPROC-NMTW,XWOR%9,,XWOR%9 WORD FILTRE < C : SCRATCH <-- (RESIDENT DE NIVEAU N) XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < C XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 WORD ERROR < C XWOR%9: VAL 0 WORD DISP < D : RESIDENT <-- IMAGE SGN IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < E XWOR%9: VAL 0 IF NMPROC-NMTX,,XWOR%9, WORD IMEOR < E : RESIDENT <-- (RESIDENT).EOR.(SCRATCH) XWOR%9: VAL 0 WORD GOGE < F : FIN WORD ERROR < G WORD ERROR < H IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < I XWOR%9: VAL 0 IF NMPROC-NMTX,,XWOR%9, WORD IMINV < I : RESIDENT <-- .NOT.(RESIDENT) XWOR%9: VAL 0 WORD ERROR < J IF NMPROC-NMTW,XWOR%9,,XWOR%9 WORD ERROR < K XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < K XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 WORD INFK < K : ENTREE CTTE TRANSFORMATION XWOR%9: VAL 0 WORD IMLOAD < L : RESIDENT <-- (SCRATCH) SANS MASQUE IF NMPROC-NMTW,XWOR%9,,XWOR%9 WORD MASK < M : RECUPERATION/GENERATION DU MASQUE XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < M XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 WORD ERROR < M XWOR%9: VAL 0 WORD NAME < N : NOMME L'IMAGE RESIDENTE IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD ERROR < O WORD ERROR < P XWOR%9: VAL 0 IF NMPROC-NMTX,,XWOR%9, WORD IMOR < O : RESIDENT <-- (RESIDENT).OR.(SCRATCH) WORD IMPERM < P : (RESIDENT) <--> (SCRATCH) XWOR%9: VAL 0 IF NMPROC-NMTW,XWOR%9,,XWOR%9 WORD MOYEN < Q : FILTRAGE DES HAUTES FREQUENCES XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD MOYEN < Q : SCRATCH <-- MOYENNE SPIRALE(RESIDENT) XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 WORD ERROR < Q XWOR%9: VAL 0 WORD FOND < R : INITIALISATION DU FOND PAR MOT WORD IMSAV < S : SCRATCH <-- (RESIDENT) WORD TRANS < T : SCRATCH <-- M(I,J)(RESIDENT) WORD IMUP < U : RESIDENT <-- (SCRATCH) AVEC MASQUE WORD ERROR < V WORD GOCCI < W : RETOUR TEMPORAIRE AU CCI WORD GORGX < X : POSITIONNEMENT DE 'ORGX' WORD GORGY < Y : POSITIONNEMENT DE 'ORGY' IF NMPROC-NMTW,XWOR%9,,XWOR%9 WORD ERROR < Z XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 WORD PROJE < Z : CHOIX DU MODE DE PROJECTION XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 WORD PROJE < Z : CHOIX DU MODE DE PROJECTION XWOR%9: VAL 0 REPZ: VAL $-KOM-1 < DERNIERE COMMANDE. PAGE PROG < < < 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 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 < < < E N T R E E 1 C A R A C T E R E : < < IN: EQU $ LAD DEMIN BSR AENTER LBY &AREP < A=CARACTERE ATTENDU. RSR < < < E N T R E E 4 C H I F F R E S : < < IHEX: EQU $ LAD DEMHEX BSR AENTER BSR AHEX < A=VALEUR ATTENDUE, SI OK... 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 : 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 < < < A C C E S A U C C I : < < GOCCI: EQU $ QUIT 1 < ACCES AU CCI INTERACTIF... BR ALOOP 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 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 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). PLR B,X,Y 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. 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 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 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 IF NMPROC-NMTX,,XWOR%9, < < < ' O R ' E N T R E 2 P O I N T S : < < < FONCTION : < CE SOUS-PROGRAMME EFFECTUE L'OPE- < RATION SUIVANTE : < POINT RESIDENT <-- (POINT RESIDENT).OR.(POINT SCRATCH), < SACHANT QUE SUIVANT LA LOGIQUE FLOUE : < X.OR.Y=MAX(X,Y). < < < ARGUMENTS : < (XR,YR),(XS,YS) = COORDONEES DES 2 POINTS. < < SPOR: EQU $ PSR A,B BSR ASPGPR LR A,B < B=NIVEAU DU POINT RESIDENT, BSR ASPGPS < A=NIVEAU DU POINT SCRATCH. CPR A,B < RECHERCHE DU MAX... JGE SPOR1 < B>=A : LE RESIDENT EST LE MAX, BSR ASPRPR < B<A : LE SCRATCH EST LE MAX, IL REMPLACE < LE POINT RESIDENT. SPOR1: EQU $ PLR A,B RSR PAGE < < < ' A N D ' E N T R E 2 P O I N T S : < < < FONCTION : < CE SOUS-PROGRAMME EFFECTUE L'OPERATION < SUIVANTE : < POINT RESIDENT <-- (POINT RESIDENT).AND.(POINT SCRATCH), < SACHANT QUE SUIVANT LA LOGIQUE FLOUE : < X.AND.Y=MIN(X,Y). < < < ARGUMENTS : < (XR,YR),(XS,YS) = COORDONNEES DES 2 POINTS. < < SPAND: EQU $ PSR A,B BSR ASPGPR LR A,B < B=NIVEAU DU POINT RESIDENT, BSR ASPGPS < A=NIVEAU DU POINT SCRATCH. CPR A,B < RECHERCHE DU MINIMUM : JLE SPAND1 < B<=A : LE RESIDENT EST DEJA LE MINIMUM, BSR ASPRPR < B>A : LE SCRATCH EST LE MINIMUM, IL < REMPLACE LE POINT RESIDENT... SPAND1: EQU $ PLR A,B RSR PAGE < < < P E R M U T A T I O N D E 2 P O I N T S : < < < FONCTION : < CE SOUS-PROGRAMME EFFECTUE < L'OPERATIO SUIVANTE : < (POINT RESIDENT) <--> (POINT SCRATCH). < < < AGUMENTS : < (XR,YR) ET (XS,YS). < < SPPER: EQU $ PSR A,B BSR ASPGPR LR A,B < B=NIVEAU RESIDENT, BSR ASPGPS < A=NIVEA SCRATCH, XR A,B < ET ON PERMUTE... BSR ASPRPS < ET ON MET A JOUR LE SCRATCH, LR B,A BSR ASPRPR < ET LE RESIDENT... PLR A,B RSR PAGE < < < I N V E R S I O N D ' U N P O I N T : < < < FONCTION : < CE SOUS-PROGRAMME CALCULE L'INVERSE < D'UN POINT SUIVANT LA FORMULE : < .NOT.X=MAX-X, OU MAX REPRESENTE LE < NIVEAU MAXIMUM RECONNU. < < < ARGUMENTS : < XR,YR = COORDONNEES DU POINT. < < SPINV: EQU $ PSR A BSR ASPGPR < A=NIVEAU DU POINT, ADRI -NIVMAX,A NGR A,A BSR ASPRPR < QUE L'ON INVERSE... PLR A RSR XWOR%9: 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 : < 1 - POUR 'TW' : < ETANT DONNEES LES COORDONNEES DU < POINT RESIDENT, LE SOUS-PROGRAME < CALCULE LE POINT (XS,YS) TEL QUE : < (XS,YS)=TRANS(XR,YR), OU 'TRANS' EST < DEFINI PAR LA MATRICE M(I,J) ; LE < CENTRE DE LA TRANSFORMATION EST < DEFINI PAR (TRX,TRY). < 2 - POUR 'TX' : < FAIT DE MEME, MAIS EN 3 DIMENSIONS < PROJETE SUR LES 2 DIMENSIONS DE < L'ECRAN : < (XS,YS)=PROJ(M(I,J)(XR,YR,0)) SI SENS=0, < (XR,YR)=PROJ(M(I,J)(XR,YR,0)) SI SENS=1. < 3 - POUR 'TY' : < IL PROCEDE A UNE TRANSFORMATION < CONFORME DU PLAN DE L'IMAGE CHOISIE < PARMI LES 3 SUIVANTES : < Z=K/Z, < Z=K*Z*Z, < MAPPING SUR UNE SPHERE, < DANS LE SENS SCRATCH --> RESIDENT SI < SENS=1, ET DANS LE SENS INVERSE SI SENS=0. < < SPTR: EQU $ PSR A,B,X,Y IF NMPROC-NMTW,XWOR%9,,XWOR%9 LA XR SB TRX < CENTRAGE... FLT FMP M11 FST FWORK LA YR SB TRY < CENTRAGE... FLT FMP M12 FAD FWORK BSR AROND AD TRX JAL SPTR1 < HORS-ECRAN... CPI NPOLM1 JG SPTR1 < HORS-ECRAN... STA XS < XS=M11*(XR-TRX)+M12*(YR-TRY)+TRX. LA XR SB TRX < CENTRAGE... FLT FMP M21 FST FWORK LA YR SB TRY < CENTRAGE... FLT FMP M22 FAD FWORK BSR AROND AD TRY JAL SPTR1 < HORS-ECRAN... CPI NLIGM1 JG SPTR1 < HORS-ECRAN... STA YS < YS=M21*(XR-TRX)+M22*(YR-TRY)+TRY. BSR ASPGPR < A=NIVEAU(XR,YR), BSR ASPRPS < NIVEAU(XS,YS) <-- (A)... XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 LA XR SB TRX FLT FST FXR < X 3D CENTRE... FMP M11 FST FXS LA YR SB TRY FLT FST FYR < Y 3D CENTRE... FMP M12 FAD FXS FST FXS LAI 0 < LA COORDONNEE 'Z' EST NULLE, SB TRZ FLT FST FZR < Z 3D CENTRE... FMP M13 FAD FXS FST FXS LA TRX FLT FAD FXS FST FXS < FXS=M11*(XR-TRX)+M12*(YR-TRY) < +M13*(ZR-TRZ)+TRX. FLD FXR FMP M21 FST FYS FLD FYR FMP M22 FAD FYS FST FYS FLD FZR FMP M23 FAD FYS FST FYS LA TRY FLT FAD FYS FST FYS < FYS=M21*(XR-TRX)+M22*(YR-TRY) < +M23*(ZR-TRZ)+TRY. FLD FXR FMP M31 FST FZS FLD FYR FMP M32 FAD FZS FST FZS FLD FZR FMP M33 FAD FZS FST FZS LA TRZ FLT FAD FZS FST FZS < FZS=M31*(XR-TRX)+M32*(YR-TRY) < +M33*(ZR-TRZ)+TRZ. CPZ IPROJ < MODE DE PROJECTION ??? JE SPTRX1 < PAR COST,SINT... < < PROJECTION PERSPECTIVE : < FDV PZ FSB F1 FNEG FST FWORK < 1-(FZS/PZ) FLD FXS FDV FWORK < FXS/(1-(FZS/PZ)) JMP SPTRX2 < < PROJECTION PAR COST,SINT : < SPTRX1: EQU $ FMP COST FAD FXS < PROJ(X)=FXS+FZS*COST. SPTRX2: EQU $ BSR AROND < CONVERSION ENTIERE... JAL SPTR1 < HORS-ECRAN... CPI NPOLM1 JG SPTR1 < HORS-ECRAN... STA XS < XS=PROJ(X). CPZ IPROJ < MODE DE PROJECTION ??? JE SPTRX3 < PAR COST,SINT... < < PROJECTION PERSPECTIVE : < FLD FYS FDV FWORK < FYS/(1-(FZS/PZ)) JMP SPTRX4 < < PAR SINT,COST : < SPTRX3: EQU $ FLD FZS FMP SINT FAD FYS < PROJ(Y)=FYS+FZS*SINT. SPTRX4: EQU $ BSR AROND < CONVERSION ENTIERE... JAL SPTR1 < HORS-ECRAN... CPI NLIGM1 JG SPTR1 < HORS-ECRAN... STA YS < YS=PROJ(Y). CPZ SENS < ??? JNE SPTR2 < SCRATCH --> RESIDENT... BSR ASPGPR < A=NIVEAU(XR,YR), BSR ASPRPS < NIVEAU(XS,YS) <-- (A)... JMP SPTR1 SPTR2: EQU $ < RESIDENT <-- SCRATCH. BSR ASPGPS < A=NIVEAU(XS,YS), BSR ASPRPR < NIVEAU(XR,YR) <-- (A). XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 LA XR SB TRX FLT FST FXS < XS. FMP FXS FST FRS < XS*XS. LA YR SB TRY FLT FST FYS < YS. FMP FYS LX XTRAN < X=NUMERO DE LA TRANSFORMATION, BR &ATRAN < A LAQUELLE ON SE BRANCHE... < < TRANSFORMATION CONFORME Z=K*Z*Z : < TRANS2: EQU $ FSB FRS < XS*XS-YS*YS. FMP FK BSR AROND AD TRX STA XS < XS=FK*(XS*XS-YS*YS). FLD FYS FMP FXS FDV F05 FMP FK BSR AROND AD TRY STA YS < YS=2*FK*XS*YS. JMP SPTR4 < < TRANSFORMATION CONFORME Z=K/Z : < TRANS1: EQU $ FAD FRS FST FRS < XS*XS+YS*YS. FLD FXS FMP FK FDV FRS BSR AROND AD TRX STA XS < XS=FK*XS/(XS*XS+YS*YS). FLD FYS FMP FK FNEG FDV FRS BSR AROND AD TRY STA YS < YS=-FK*YS/(XS*XS+YS*YS). JMP SPTR4 < < MAPPING DE (XR,YR) SUR UNE SURFACE DONT LES < COORDONNEES CURVILIGNES SONT (XS,YS) : < TRANS3: EQU $ CPZ SENS JE SPTR10 < RESIDENT --> SCRATCH : ON DIFFERE < LE TEST SUR LE POINT DESTINATION DONT < ON NE CONNAIT PAS ENCORE LES COORDONNEES < XS,YS... BSR ASPGPR < SCRATCH --> RESIDENT : LE POINT DESTINA- < TION EST LE POINT XR,YR : JANE SPTR1 < IL N'EST PAS NOIR, ON NE VA PAS Y < TOUCHER... SPTR10: EQU $ FLD FXS FDV RADIAX FST FXS < XS=2*PI*XR/255. FLD FYS FDV RADIAY FST FYS < YS=PI*YR/255. BSR ACOS FMP RAYON FST FRS < RS=RAYON*COS(PI*YR/255). FLD FXS BSR ACOS FMP FRS PSR A,B < SAVE X=FRS*COS(2*PI*XR/255). FLD FXS BSR ASIN FMP FRS PSR A,B < SAVE Y=FRS*SIN(2*PI*XR/255). FLD FYS BSR ASIN FMP RAYON FST FRS < SAVE Z=RAYON*SIN(PI*YR/255) DANS FRS. PLR A,B FST FYS < COORDONNEE 'Y' 3D, PLR A,B FST FXS < COORDONNEE 'X' 3D, FLD FRS < COORDONNEE 'Z' 3D... CPZ IPROJ < MODE DE PROJECTION ??? JE SPTRX1 < PAR COST,SINT... < < PROJECTION PERSPECTIVE : < FDV PZ FSB F1 FNEG FST FWORK < 1-(FZS/PZ) FLD FXS FDV FWORK < FXS/(1-(FZS/PZ)) JMP SPTRX2 < < PROJECTION PAR COST,SINT : < SPTRX1: EQU $ FMP COST < ET ON PROJETTE... FAD FXS SPTRX2: EQU $ BSR AROND AD TRX STA XS < XS=X+Z*COST. CPZ IPROJ < MODE DE PROJECTION ??? JE SPTRX3 < PAR COST,SINT... < < PROJECTION PERSPECTIVE : < FLD FYS FDV FWORK < FYS/(1-(FZS/PZ)) JMP SPTRX4 < < PAR SINT,COST : < SPTRX3: EQU $ FLD FRS 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 SPTR1 < NON, ET XS EST OVERSCREEN... CPI NPOLM1 JG SPTR1 < 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 SPTR1 < NON, ET YS EST OVERSCREEN... CPI NLIGM1 JG SPTR1 < 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 $ CPZ SENS < ??? JNE SPTR2 < SCRATCH --> RESIDENT. LA XTRAN CPI XTR3 < EST-CE LE MAPPING ??? JNE SPTR11 < NON... BSR ASPGPS < OUI : A=NIVEAU(XS,YS) : JANE SPTR1 < LE POINT (XS,YS) EST DEJA OCCUPE, < ON LE LAISSE INTACT... SPTR11: EQU $ BSR ASPGPR < A=NIVEAU(XR,YR), BSR ASPRPS < NIVEAU(XS,YS) <-- (A)... JMP SPTR1 SPTR2: EQU $ BSR ASPGPS < A=NIVEAU(XS,YS), BSR ASPRPR < NIVEAU(XR,YR) <-- (A)... XWOR%9: VAL 0 SPTR1: EQU $ PLR A,B,X,Y RSR < < < 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 IF NMPROC-NMTY,XWOR%9,,XWOR%9 < < < 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 XWOR%9: VAL 0 PAGE IF NMPROC-NMTX,XWOR%,,XWOR% < < < M O Y E N N A G E S U R U N E S P I R A L E : < < < FONCTION : < CE SOUS-PROGRAMME CALCULE UNE SPIRALE < CENTREE SUR LE POINT (XR,YR) COURANT, < ET CALCULE LA MOYENNE DES NIVEAUX QU'IL < Y RENCONTRE, ET QU'IL AFFECTE ENSUITE < AU POINT (XS,YS) COURANT. < < < ARGUMENT : < (XR,YR) = POINT RESIDENT COURANT. < < SPMOY: EQU $ PSR A,B,X,Y CPZ IFLOU < FLOU OU ELIMINATION POINTS NOIRS ??? JE SPMOY6 < FLOU... BSR ASPGPR < ELIMINATION DE CERTAINS POINTS : LR A,X LA LNIV TBT 0,X < LE NIVEAU DE (XR,YR) EST-IL A PRENDRE < EN COMPTE ??? JNC SPMOY7 < (XR,YR) N'EST PAS A PRENDRE EN COMPTE... SPMOY6: EQU $ STZ XSMAX < REINITIALISATION DU MAX A PRIORI... LA XR LB YR PSR A,B < SAUVEGARDE DU POINT (XR,YR). STZ CUMUL < CUMUL <-- 0. STZ NP < NP=NOMBRE DE POINTS TRAITES. LA PASQ STA DELTAX < DELTAX <-- +1, STZ DELTAY < DELTAY <-- 0. LAI 1 STA LB0 < INITIALISATION DE LA LONGUEUR DU < PREMIER BRAS DE LA SPIRALE. SPMOY8: EQU $ < < PARCOURS D'UN BRAS : < SPMOY1: EQU $ LA LB0 STA LB < LONGUEUR DU BRAS COURANT. < < TRAITEMENT DU POINT COURANT : < SPMOY2: EQU $ IC NP < COMPTAGE DES POINTS TRAITES : LA NP CP NPM < FINI ??? JG SPMOY3 < OUI... LA XR < NON : JAL SPMOY4 < LE POINT EST HORS-ECRAN... CPI NPOLM1 JG SPMOY4 < HORS-ECRAN... LA YR JAL SPMOY4 < HORS-ECRAN... CPI NLIGM1 JG SPMOY4 < HORS-ECRAN... BSR ASPGPR < A=NIVEAU(XR,YR), CP XSMAX < EST-CE LE MAX RENCONTRE ??? JLE SPMOYA < NON.. STA XSMAX < OUI, ON LE GARDE... LA NP STA NPMAX < ET ON MEMORISE LE 'NP' ASSOCIE... LA XSMAX < ET RESTAURE (A)... SPMOYA: EQU $ AD CUMUL < ET STA CUMUL < CUMULE... SPMOY4: EQU $ LA XR AD DELTAX < CHANGEMENT DE STA XR LA YR AD DELTAY < POINT COURANT (XR,YR). STA YR DC LB < DECOMPTAGE DES POINTS SUR LA BRANCHE : JG SPMOY2 < OK, IL EN RESTE... CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER < LA LONGUEUR COURANTE DES BRANCHES ??? JNE SPMOY5 < NON (DX#0) ... IC LB0 < OUI (DX=0) ... SPMOY5: EQU $ LA DELTAY < ON FAIT SUBIR AU NOMBRE COMPLEXE NGR A,A < (DX,DY) UNE ROTATION DE PI/2, SOIT LB DELTAX < UNE MULTIPLICATION PAR LA MATRICE < (0,-1,1,0)... STA DELTAX < DELTAX=-DELTAY, STB DELTAY < DELTAY=DELTAX. JMP SPMOY1 < VERS LA BRANCHE SUIVANTE < < GENERATION DU POINT (XS,YS) : < SPMOY3: EQU $ PLR A,B STA XR < RESTAURATION STB YR < DE (XR,YR), STA XS < ET GENERATION STB YS < DE (XS,YS)... LA XSMAX < A=NIVEAU MAX RENCONTRE, CPZ IPOND < DOIT-ON PONDERER ??? JE SPMOYB < NON, ON PREND 'XSMAX'... LA NPM SB NPMAX MP XSMAX < OUI, ON VA PRENDRE : DV NPM < (XSMAX*(NPM-NPMAX))/NPM... SPMOYB: EQU $ CPZ ISMAX < MAIS EST-CE BIEN UNE RECHERCHE DU MAX ? JNE SPMOY9 < ET OUI... LAI 0 < ET NON... LB CUMUL DV NPM < A=NIVEAU MOYEN DE LA SPIRALE, SPMOY9: EQU $ < < TRAMAGE PAR CALCUL DE LA < PROPORTION DE POINTS BLANCS < PAR RAPPORT AUX POINTS NOIRS < EN FONCTION DES COULEURS < PRESENTES : < CPZ ITRAM < DOIT-ON TRAMER ??? JE ERDN1 < NON... LR A,X LBY &ATAUX JAE ERDN7 < NUL, RIEN A FAIRE ==> NOIR... LR A,X < INITIALISATION DU MULTIPLICATEUR < COURANT PAR UNE FONCTION DU NIVEAU DE < GRIS DU POINT COURANT... LA LNIV XWOR%8: VAL 0 DO NIVMAX+1 XWOR%8: VAL XWOR%8>BIT?BIT ANDI XWOR%8 < (A)=VALEUR INITIALE DE 'DRDN' : JANE ERDN6 < OK... LAI NIVMAX*NIVMAX < NUL, ON FORCE LE CARRE DU NIVEAU < DE BLANC (VOIR LE FORMAT DE 'TAUX')... ERDN6: EQU $ STA DRDN < INITIALISATION DE 'DRDN'... ERDN5: EQU $ LA RDN < GENERATION DE NOMBRES ALEATOIRES : EOR POINTS < ON INTRODUIT UN AUTRE PARAMETRE... MP RDN1 SCRD RDN3 JANE SPMOYC LR B,A JANE SPMOYC LA KRDN1 ADRI XKRDN1,A SCRS XKRDN2 STA KRDN1 < PROGRESSION DE 'KRDN1'... SPMOYC: EQU $ EOR XS < PRISE EN COMPTE DE LA COORDONNEE 'X'... EOR RDN9 ADRI -XKRDN2,A SCRS XKRDN1 EOR YS < PRISE EN COMPTE DE LA COORDONNEE 'Y'... STA RDN SARD NBITMO DV DRDN LAI NIVMAX < (A)=BLANC A PRIORI... CPZR B < DOIT ON TRACER (LE NOMBRE ALEATOIRE < COURANT EST-IL DIVISIBLE PAR 'DRDN') ??? JE ERDN4 < OUI ==> BLANC... JDX ERDN5 < NON, ATTENDONS ENCORE UN PEU... ERDN7: EQU $ LAI 0 < (A)=NOIR LORSQU'ON NE TRACE PAS... ERDN4: EQU $ ERDN3: EQU $ ERDN1: EQU $ < < MARQUAGE DU POINT (XS,YS) : < BSR ASPRPS < QUE L'ON AFFECTE A (XS,YS). SPMOY7: EQU $ PLR A,B,X,Y RSR XWOR%: VAL 0 PAGE IF NMPROC-NMTW,XWOR%9,,XWOR%9 < < < E X T R A C T I O N D ' U N N I V E A U D O N N E : < < < FONCTION : < CE SOUS-PROGRAMME TESTE LE NIVEAU < DU POINT (XR,YR) ; SI CE NIVEAU EGALE < 'NIVEAU', ALORS, IL L'AFFECTE AU < POINT (XS,YS), SINON, IL LUI AFFECTE < LE NIVEAU 0... < < SPFIL: EQU $ PSR A BSR ASPGPR < A=NIVEAU(XR,YR), CP NIVEAU JE SPFIL1 < NIVEAU(XR,YR)=NIVEAU... LAI 0 < NIVEAU(XR,YR)#NIVEAU, ON AFFECTE 0... SPFIL1: EQU $ BSR ASPRPS < NIVEAU(XS,YS) <-- (A)... PLR A RSR XWOR%9: VAL 0 PAGE IF NMPROC-NMTW,XWOR%9,,XWOR%9 < < < F I L T R A G E D E S H A U T E S F R E Q U E N C E S : < < < FONCTION : < CE MODULE DECOUPE L'IMAGE EN MAILLES < ELEMENTAIRES DE DIMENSION (DX,DY), ET AU < NOMBRE DE (NDX,NDY) ; DANS CHACUNE D'ENTRE < ELLES DE L'IMAGE RESIDENTE, ON CALCULE < LE NIVEAU DE GRIS MOYEN, QUE L'ON AFFECTE < ENSUITE EN RESIDENT A TOUS LES POINTS < DE LA MAILLE COURANTE. < < MOYEN: EQU $ MOYEN1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMDX-ZERO BSR APRINT < "DX=", XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'DX' : JNE MOYEN1 < ERREUR... JALE MOYEN1 < ERREUR... STA EX LRM A,B WORD 0;NMOTL*NBITMO DV EX JAE MOYEN1 < ERREUR... CPZR B JNE MOYEN1 < 'DX' EST INCOMPATIBLE AVEC LA < DIMENSION HORIZONTALE DE L'ECRAN. STA NDX < NOMBRE HORIZONTAL DE MAILLES. MOYEN2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMDY-ZERO BSR APRINT < "DY=", XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'DY' : JNE MOYEN2 < ERREUR... JALE MOYEN2 < ERREUR... STA EY LRM A,B WORD 0;NLIG DV EY JAE MOYEN2 < ERREUR... CPZR B JNE MOYEN2 < LA DIMENSION VERTICALE EST INCOMPATIBLE < AVEC L'ECRAN... STA NDY < NOMBRE VERTICAL DE MAILLES... LA EX MP EY CPZR B JLE MOYEN1 < TROP GRAND, DONC NEGATIF... STB NPOINT < NOMBRE DE POINTS PAR MAILLE... < < BOUCLE DE FILTRAGE : < LYI 0 LB NDY STB XNDY MOYEN3: EQU $ LXI 0 LB NDX STB XNDX MOYEN4: EQU $ STZ CUMUL < SOMMATION DES NIVEAUX DE GRIS. LB EY STB XDY < DIMENSION VERTICALE DE LA MAILLE... STY YR < YR=COORDONNEE Y COURANTE. MOYEN5: EQU $ LB EX STB XDX < DIMENSION HORIZONTALE DE LA MAILLE... STX XR < XR=COORDONNEE X COURANTE. MOYEN6: EQU $ BSR ASPGPR < A=NIVEAU DU POINT (XR,YR), AD CUMUL < ET STA CUMUL < CUMUL DANS LA MAILLE... IC XR < DEPLACEMENT HORIZONTAL DANS DC XDX < LA MAILLE COURANTE. JG MOYEN6 IC YR < DEPLACEMENT VERTICAL DANS DC XDY < LA MAILLE COURANTE. JG MOYEN5 LAI 0 LB CUMUL DV NPOINT < A=NIVEAU DE GRIS MOYEN DE LA MAILLE < COURANTE. LB EY STB XDY STY YR < YR=COORDONNEE Y COURANTE. MOYEN7: EQU $ LB EX STB XDX STX XR < XR=COORDONNEE X COURANTE. MOYEN8: EQU $ BSR ASPRPR < MISE EN PLACE DU NIVEAU MOYEN... IC XR < BALAYAGE HORIZONTAL DANS DC XDX < LA MAILLE COURANTE. JG MOYEN8 IC YR < BALAYAGE VERTICAL DANS DC XDY < LA MAILLE COURANTE. JG MOYEN7 LA EX ADR A,X < BALAYAGE HORIZONTAL DANS DC XNDX < L'IMAGE RESIDENTE. JG MOYEN4 LA EY ADR A,Y < BALAYAGE VERTICAL DANS DC XNDY < L'IMAGE RESIDENTE. JG MOYEN3 BR ALOOP < ET ENFIN, VERS L'INTERROGATION... XWOR%9: VAL 0 PAGE IF NMPROC-NMTX,,XWOR%9, < < < ' E O R ' E N T R E 2 P O I N T S : < < < FONCTION : < CE SOUS-PROGRAMME EFFECTUE L'OPERATION < SUIVANTE : < POINT RESIDENT <-- (POINT RESIDENT).EOR.(POINT SCRATCH), < SACHANT QUE : < X.EOR.Y=(X.AND.(.NOT.Y)).OR.((.NOT.X).AND.Y) < < < ARGUMENTS : < (XR,YR),(XS,YS) = COORDONNEES DES 2 POINTS. < < SPEOR: EQU $ PSR A,B,W BSR ASPGPR LR A,W < A=W=NIVEAU DU POINT RESIDENT, SOIT 'NR'. PSR W BSR ASPGPS LR A,B < B=NIVEAU DU POINT SCRATCH, SOIT 'NS'. ADRI -NIVMAX,A NGR A,A < A=.NOT.NS ADRI -NIVMAX,W NGR W,W < W=.NOT.NR CPR B,W < CALCUL DE NS.AND.(.NOT.NR) JGE SPEOR1 < W>=B : C'EST NS... LR W,B < W<B : C'EST .NOT.NR... SPEOR1: EQU $ < B=NS.AND.(.NOT.NR) PLR W < W=NR CPR A,W < CALCUL DE (.NOT.NS).AND.NR JGE SPEOR2 < W>=A : C'EST NR... LR W,A < W<A : C'EST .NOT.NS... SPEOR2: EQU $ < A=(.NOT.NS).AND.NR CPR A,B < CALCUL DE : < ((.NOT.NS).AND.NR).OR.(NS.AND.(.NOT.NR)) JLE SPEOR3 < B<=A, A EST LE MAXIMUM, LR B,A < B>A : B EST LE MAXIMUM... SPEOR3: EQU $ < A CONTIENT LE 'EOR'... BSR ASPRPR < QUE L'ON MET EN RESIDENT... PLR A,B,W RSR XWOR%9: VAL 0 PAGE IF NMPROC-NMTW,XWOR%9,,XWOR%9 < < < R E C U P E R A T I O N / G E N E R A T I O N < D U M A S Q U E D ' I M A G E : < < < FONCTION : < CE MODULE PERMET DE GENERER (COMMANDE < ">") OU DE RECUPERER (COMMANDE < "<") LE MASQUE COURANT D'IMAGE < DE, OU A PARTIR DE L'UNE DES 3 COMPOSANTES < 'R', 'V' ET 'B' DE L'IMAGE SCRATCH. < < MASK: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMC-ZERO BSR APRINT < MESSAGE "STACK?"... XWOR%7: VAL 0 BSR AIN < A=REPONSE "R"/"V"/"B"... LBI TVPR-1 < B=NUMERO DU STACK DEMANDE... CPI "R" JE MASK1 < "R"... LBI TVPV-1 CPI "V" JE MASK1 < "V"... LBI TVPB-1 CPI "B" JE MASK1 < "B"... MASK2: EQU $ BR AERROR < TRAITEMENT DES ERREURS... MASK1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMS-ZERO BSR APRINT < MESSAGE "SENS?"... XWOR%7: VAL 0 LAD DEMIN BSR AENTER SLLD LIMAG=0 < B=ADRESSE DANS LA 'CDA' DU STACK DEMANDE. LRM X,Y WORD LIMAG < X=NOMBRE DE MOTS A DEPLACER, WORD AMASK < Y=ADRESSE DU MASQUE DANS LA 'CDA'. LBY &AREP < A=REPONSE DE "SENS?"... CPI ">" JE MASK3 < ">" : GENERATION... CPI "<" JNE MASK2 < ERREUR... XR B,Y < "<" : RECUPERATION, ON PERMUTE EMETTEUR < ET RECPTEUR... MASK3: EQU $ STB AEMETT < EMETTEUR EN CDA, STY ARECEP < RECEPTEUR EN CDA. LRM B WORD MCDAM < B=ADRESSE DU MOT DE TRANSIT... MASK4: EQU $ PSR X LA AEMETT LXI 1 RCDA LA ARECEP LXI 1 WCDA PLR X IC AEMETT < PROGRESSION DE L'EMETTEUR, IC ARECEP < AINSI QUE DU RECEPTEUR... JDX MASK4 < AU MOT SUIVANT DU MASQUE... BR ALOOP < ET C'EST TOUT... XWOR%9: VAL 0 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 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 < < < 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 IF NMPROC-NMTW,XWOR%9,,XWOR%9 STA XWORK < SAUVEGARDE DE L'ADRESSE DU MESSAGE. XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 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... XWOR%9: VAL 0 PTRAN1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 IF NMPROC-NMTW,XWOR%9,,XWOR%9 LA XWORK < A PRIORI, A=ADRESSE MESSAGE, XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 LAD MAT < A=ADRESSE DU MESSAGE MIJ=. XWOR%9: VAL 0 BSR APRINT < QUE L'ON EDITE... XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX : JNE PTRAN1 < ERREUR... LR A,Y < Y=NUMERATEUR... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSLAS-ZERO BSR APRINT < EDITION DE "/"... XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX : JNE PTRAN1 < ERREUR... FLT FST FWORK < SAUVEGARDE DU DENOMINATEUR... LR Y,A FLT < CALCUL DU NUMERATEUR, FDV FWORK < (A,B)=NUMERATEUR/DENOMINATEUR. IF NMPROC-NMTX,XWOR%9,,XWOR%9 FST &AM < QUE L'ON RANGE DANS LA MATRICE... XWOR%9: VAL 0 PLR X,Y RSR PAGE IF NMPROC-NMTX,XWOR%9,,XWOR%9 < < < E N T R E E D E C X C Y O U C Z : < < < ARGUMENT : < A=ADRESSE DU MESSAGE. < < < RESULTAT : < A=COEFFICIENT. < < PIC: EQU $ STA XWORK < SAUVEGARDE DE L'ADRESSE DU MESSAGE, PIC1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LA XWORK < A=ADRESSE DU MESSAGE... BSR APRINT < QUE L'ON EDITE... XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 4 CHIFFRES HEXA-DECIMAUX : JNE PIC1 < ERREUR DE SYNTAXE... RSR XWOR%9: VAL 0 PAGE < < < E N T R E E D E L A M A T R I C E : < < DTRANS: EQU $ IF NMPROC-NMTW,XWOR%9,,XWOR%9 IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMAT11-ZERO XWOR%7: VAL 0 BSR APTRAN FST M11 IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMAT12-ZERO XWOR%7: VAL 0 BSR APTRAN FST M12 IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMAT21-ZERO XWOR%7: VAL 0 BSR APTRAN FST M21 IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMAT22-ZERO XWOR%7: VAL 0 BSR APTRAN FST M22 DTRAN1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRX-ZERO BSR APRINT < EDITION DE "CX=", XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'CX' : JNE DTRAN1 < ERREUR... STA TRX DTRAN2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRY-ZERO BSR APRINT < EDITION DE "CY=", XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'CY' : JNE DTRAN2 < ERREUR... STA TRY XWOR%9: VAL 0 IF NMPROC-NMTX,XWOR%9,,XWOR%9 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. IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRX-ZERO XWOR%7: VAL 0 BSR APIC STA TRX < ENTREE DE TRX, IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRY-ZERO XWOR%7: VAL 0 BSR APIC STA TRY < ENTREE DE TRY, IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRZ-ZERO XWOR%7: VAL 0 BSR APIC STA TRZ < ENTREE DE TRZ. DTRAN3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSENS-ZERO BSR APRINT < "S R". XWOR%7: VAL 0 STZ SENS < SENS=0, : S <-- R A PRIORI... BSR AIN < ENTREE DU SENS : CPI "<" JE DTRAN4 < S <-- R. IC SENS < SENS=1 : S --> R... CPI ">" JNE DTRAN3 < ERREUR... DTRAN4: EQU $ XWOR%9: VAL 0 IF NMPROC-NMTY,XWOR%9,,XWOR%9 DTRAN5: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRAN-ZERO BSR APRINT < "1/Z Z2 ?" XWOR%7: VAL 0 STZ XTRAN < XTRAN=0 : 1/Z A PRIORI... BSR AIN < ENTREE DE LA TRANSFORMATION : CPI "1" JE DTRAN6 < 1/Z... IC XTRAN < XTRAN=1 : Z*Z... CPI "2" JE DTRAN6 < Z*Z... IC XTRAN < XTRAN=2 : MAPPING... CPI "3" JNE DTRAN5 < ERREUR... DTRAN6: EQU $ DTRAN1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRX-ZERO BSR APRINT < EDITION DE "CX=", XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'CX' : JNE DTRAN1 < ERREUR... STA TRX DTRAN2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRY-ZERO BSR APRINT < EDITION DE "CY=", XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'CY' : JNE DTRAN2 < ERREUR... STA TRY DTRAN3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSENS-ZERO BSR APRINT < "S R". XWOR%7: VAL 0 STZ SENS < SENS=0 : S <-- R A PRIORI... BSR AIN < ENTREE DU SENS : CPI "<" JE DTRAN4 < S <-- R. IC SENS < SENS=1 : S --> R... CPI ">" JNE DTRAN3 < ERREUR... DTRAN4: EQU $ XWOR%9: VAL 0 BR ALOOP < EASY ??!?!?! PAGE IF NMPROC-NMTX,XWOR%9,,XWOR%9 < < < 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 BSR APRINT XWOR%7: VAL 0 BSR AIN < 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPROJ-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'PZ' : JNE PROJE1 < ERREUR... FLT FST PZ < PZ=POSITION DE L'ECRAN. PROJE2: EQU $ BR ALOOP < ET C'EST TOUT... XWOR%9: VAL 0 PAGE IF NMPROC-NMTY,XWOR%9,,XWOR%9 < < < 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 BSR APRINT XWOR%7: VAL 0 BSR AIN < 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPROJ-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'PZ' : JNE PROJE1 < ERREUR... FLT FST PZ < PZ=POSITION DE L'ECRAN. PROJE2: EQU $ BR ALOOP < ET C'EST TOUT... XWOR%9: VAL 0 PAGE IF NMPROC-NMTW,XWOR%9,,XWOR%9 < < < F I L T R A G E : < < < FONCTION : < SELECTIONNE DANS L'IMAGE RESIDENTE < LES POINTS DE NIVEAU DONNE POUR LES < METTRE EN IMAGE SCRATCH... < < FILTRE: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMNIVO-ZERO BSR APRINT < EDITION DE "NIVEAU="... XWOR%7: VAL 0 BSR AIHEX < ENTREE DU NIVEAU : JNE FILTRE < ERREUR... JAL FILTRE < NIVEAU NE PEUT ETRE NEGATIF... CPI NIVMAX < NE PEUT EXCEDER 'NIVMAX'... JG FILTRE < TROP GRAND... FILTR1: EQU $ STA NIVEAU LB ASPFIL JMP IM1 XWOR%9: VAL 0 PAGE IF NMPROC-NMTX,XWOR%,,XWOR% < < < M O Y E N N A G E S U R U N E S P I R A L E : < < < FONCTION : < CETTE COMMANDE CENTRE SUR CHAQUE < POINT (XR,YR) UNE SPIRALE DONT LE < NOMBRE DE POINTS EST FIXE PAR L'UTI- < LISATEUR, CALCULE LA MOYENNE DES NIVEAUX < DES POINTS DE CETTE SPIRALE, ET < L'AFFECTE AU POINT (XS,YS) CONFONDU < AVEC LE POINT (XR,YR). < < MOYEN: EQU $ STZ ISMAX < A PRIORI, PAS DE RECHERCHE DU MAX... STZ IPOND < PAS DE PONDERATION A PRIORI... STZ ITRAM < PAS DE TRAMAGE A PRIORI... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPOIN-ZERO BSR APRINT < EDITION DE "#POINTS="... XWOR%7: VAL 0 BSR AIHEX < ENTREE DU NOMBRE DE POINTS : JNE MOYEN < ERREUR... JALE MOYEN < ERREUR... STA NPM < NPM=NOMBRE DE POINTS PAR SPIRALE (>1). MOYEN1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPASQ-ZERO BSR APRINT < "PAS=" XWOR%7: VAL 0 BSR AIHEX < ENTREE DU PAS : JNE MOYEN1 < ERREUR, ON REDEMANDE... JALE MOYEN1 < ERREUR... IF NLIGM1-NPOLM1,,XWOR%9, IF CE QUI SUIT EST IDIOT !!! XWOR%9: VAL 0 CPI NLIGM1?NPOLM1 < VALIDATION ??? JG MOYEN1 < ERREUR... STA PASQ < OK, LE PAS EST BON... MOYEN2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMFLOU-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < ENTREE DE FLOU OU PAS : STZ IFLOU < FLOU A PRIORI... CPI "O" JE MOYEN3 < IFLOU=0 : FLOU... IC IFLOU < IFLOU=1 : ELIMINATION POINTS NOIRS... CPI "N" JNE MOYEN2 < ERREUR... IC NPM < ON COMPTE LE POINT CENTRAL EN PLUS < LORS DU MAX... MOYEN4: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMAX-ZERO BSR APRINT < "MAX?"... XWOR%7: VAL 0 BSR AIN < ENTREE DE MAX OU PAS : CPI "N" JE MOYEN5 < "N" : ISMAX=0... CPI "O" JNE MOYEN4 < ??!?! IC ISMAX < "O" : ISMAX=1... MOYEN5: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMNIVO-ZERO BSR APRINT < "NIVEAUX="... XWOR%7: VAL 0 BSR AIHEX < ENTREE DES NIVEAUX AUTORISES : JNE MOYEN5 < ERROR... STA LNIV < ET SAUVEGARDE A PRIORI... CPZ ISMAX < MAX OU MOYENNE ??? JE MOYEN3 < MOYENNE, DONC PAS DE PONDERATION... MOYEN6: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPOND-ZERO BSR APRINT < "PONDERATION?"... XWOR%7: VAL 0 BSR AIN < PONDERATION OU PAS : CPI "N" JE MOYEN8 < NON : IPOND=0... CPI "O" JNE MOYEN6 < ERREUR... IC IPOND < OUI : IPOND=1... MOYEN8: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRAM-ZERO BSR APRINT < "TRAME?"... XWOR%7: VAL 0 BSR AIN < ENTREE DE LA REPONSE : CPI "N" JE MOYEN3 < NON, PAS DE TRAMAGE... CPI "O" JNE MOYEN8 < ??!??!?!! IC ITRAM < OUI, TRAMAGE... MOYEN3: EQU $ LB ASPMOY < B=ADRESSE DU S/P DE MOYENNAGE... JMP IM1 XWOR%: VAL 0 PAGE < < < E N T R E E D U F O N D : < < < FONCTION : < LA COMMANDE "R" PERMET DE RENTRER < 16 VALEURS HEXADECIMALES COMPRISES < ENTRE 0 ET 7 (NIVMAX) POUR INITIALISER < LE FOND AVEC DES BARRES VERTICALES... < < FOND: EQU $ IF NMPROC-NMTW,XWOR%,,XWOR% IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMFOND-ZERO BSR APRINT < EDITION DE "FOND=", XWOR%7: VAL 0 LAD DEMFON BSR AENTER < ENTREE DU FOND, LXI 0 < ET VALIDATION... FOND1: EQU $ LBY &ABUFIN < ACCES AU CARACTERE COURANT, ADRI -"0",A < TRANSLATION, JAL FOND2 < ERREUR... CPI NIVMAX < VALIDATION, JG FOND2 < ERREUR... STBY &ABUFIN < GENERATION DE LA TABLE D'INITIALISATION. ADRI 1,X LR X,A CPI NBITMO JL FOND1 < ENCORE... STZ XWORK < INITIALISATION DE L'INDEX DE 'BUFIN'... LB ASFOND < B=ADRESSE DU MODULE DE TRAITEMENT, JMP IM2 < VERS LE TRAITEMENT... FOND2: EQU $ XWOR%: VAL 0 BR AERROR IF NMPROC-NMTW,XWOR%,,XWOR% < < < I N I T I A L I S A T I O N D ' U N P O I N T : < < SFOND: EQU $ PSR A,X LA XWORK LR A,X < X=INDEX CIRCULAIRE DE 'BUFIN', ADRI 1,A ANDI NBITMO-1 < ET PROGRESSION MODULO 'NBITMO'... STA XWORK LBY &ABUFIN < A=NIVEAU COURANT, BSR ASPRPR < QUE L'ON MET AU POINT RESIDENT < COURANT... PLR A,X RSR XWOR%: VAL 0 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. LBY &API CPI "P" < EST-ON SUR LA 'CDA-PRIVE' ??? JE IMSAV1 < OUI, ON PEUT Y ALLER... BR AERROR < NON, SUR LA 'CDA-IMAGE', ET ALORS < GARE AUX MOVE DE PLUS D'UN MOT !!! IMSAV1: EQU $ BSR ASPSCD BR ALOOP IF NMPROC-NMTX,,XWOR%9, IMPERM: EQU $ < PERMUTATION RESIDENT-SCRATCH. LB ASPPER JMP IM1 XWOR%9: VAL 0 IMUP: EQU $ < RAPPEL DU SCRATCH EN RESIDENT AVEC MASK. LB ASPACD JMP IM2 IMLOAD: EQU $ < RAPPEL DU SCRATCH EN RESIDENT SANS MASK. LBY &API CPI "P" < EST-ON SUR LA 'CDA-PRIVE' ??? JE IMLOAE < OUI, ON PEUT Y ALLER... BR AERROR < NON, SUR LA 'CDA-IMAGE', ET ALORS < GARE AUX MOVE DE PLUS D'UN MOT !!! IMLOAE: EQU $ BSR ASPBCD BR ALOOP IF NMPROC-NMTX,,XWOR%9, IMINV: EQU $ < INVERSION VIDEO DE L'IMAGE. LB ASPINV JMP IM2 XWOR%9: VAL 0 TRANS: EQU $ < APPLICATION DE M(I,J). LB ASPTR JMP IM2 IF NMPROC-NMTX,,XWOR%9, IMAND: EQU $ < .AND. LB ASPAND JMP IM1 IMEOR: EQU $ < .EOR. LB ASPEOR JMP IM1 IMOR: EQU $ < .OR. LB ASPOR JMP IM1 XWOR%9: VAL 0 IM1: EQU $ IM2: EQU $ STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME. BSR ASPOP BR ALOOP PAGE IF NMPROC-NMTY,XWOR%9,,XWOR%9 < < < E N T R E E D E L A C O N S T A N T E D E < T R A N S F O R M A T I O N C O N F O R M E : < < INFK: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMK-ZERO BSR APRINT < "K=" XWOR%7: VAL 0 BSR AIHEX < ENTREE DU NUMERATEUR DE 'K' : JNE GORGX2 < ERREUR... LR A,Y < Y=SAVE LE NUMERATEUR... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSLAS-ZERO BSR APRINT < "/" XWOR%7: VAL 0 BSR AIHEX < ENTREE DU DENOMINATEUR DE 'K' : JNE GORGX2 < ERREUR... JAE GORGX2 < NE PEUT ETRE NUL... FLT FST FK LR Y,A FLT FDV FK < NUMERATEUR/DENOMINATEUR... FDV F05 < ON MULTIPLIE PAR 2... FST FK < OK... BR ALOOP XWOR%9: VAL 0 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... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMORGX-ZERO BSR APRINT < EDITION DU MESSAGE. XWOR%7: VAL 0 BSR AIHEX < 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 BSR APRINT < "TORE?" XWOR%7: VAL 0 BSR AIN < ENTREE DE X-TORE : 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 BSR APRINT < EDITION DU MESSAGE... XWOR%7: VAL 0 BSR AIHEX < ENTREE DE 'ORGY' : JNE GORGX2 < ERREUR... NGR A,A STA ORGY GORGY3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTORE-ZERO BSR APRINT < "TORE?" XWOR%7: VAL 0 BSR AIN < ENTREE DE Y-TORE : 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 < < < 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 DEMTVR SVC 0 < ROUGE, LAD DEMTVV SVC 0 < VERT, MOV3: EQU $ < RESIDENT B --> TV. LAD DEMTVB 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 < < < 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 SPACD: EQU $ < TRANSFERT AVEC MASQUE... PSR A BSR ASPGPS < ACCES AU POINT SCRATCH COURANT, BSR ASPRPR < ET MISE EN RESIDENT... PLR A 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 PAGE < < < T R A I T E M E N T D E S E R R E U R S : < < ERROR: EQU $ LAI AMERR-ZERO BSR APRINT < ENVOI D'UN MESSAGE D'ERREUR... BR ALOOP < ET C'EST TOUT... 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 LA SAVEK LR A,K < RESTAURATION DE 'K'... IF MODE-VISU,XWOR%7,,XWOR%7 LAD RELMEM SVC 0 < RETOUR A 4K MOTS... 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 < ACCES AU CCI 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 REP+128 < ON INITIALISE 'C' AVEC 'REP+128' < A CAUSE DE L'OPERATEUR FLOTTANT < QUI ECRIT DANS LE MOT (C)-128 !!! WORD LOC+128 < L=BASE DU LOCAL... 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... IF MODE-VISU,XWOR%7,,XWOR%7 LX NMOTS < X=NOMBRE DE MOTS A RAZER, TW2: EQU $ STZ &AITEM2 < NETTOYAGE DE ITEM1 ET ITEM2... JDX TW2 XWOR%7: VAL 0 TW1: EQU $ LRM K WORD STACK-1 < INITIALISATION DE K... TW20: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMCDA-ZERO BSR APRINT < EDITION DE "!CDA"... XWOR%7: VAL 0 BSR AIN < ENTREE DU CHOIX ENTRE !CDAI ET !CDAP : CPI "P" < PRIVE ??? JE TW21 < OUI, OK... CPI "I" < IMAGE ??? JNE TW20 < NON, ERREUR... TW21: EQU $ STBY &API < MISE EN PLACE DE "P" OU "I"... LAI AMCDAP-ZERO BSR ACCI < TENTATIVE DE !CDAP OU !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 'CDAP'/'CDAI', LAI '19 WORD '1E15 SBR X,B XWOR%1: VAL -4 < B=LONGUEUR UTILE DE LA 'CDAP'/'CDAI', LRM A WORD NCOOL+1*LIMAG>XWOR%1 < A=LONGUEUR IMAG+MASQUE NECESSAIRE. CPR A,B < CELA SUFFIT-IL ??? JL GOGE < B<A : INSUFFISANT POUR TRAVAILLER... IF NMPROC-NMTW,XWOR%,,XWOR% < < ENTREE DU MASQUE COURANT ??? < TW3: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMIMA-ZERO BSR APRINT < EDITION DE "INIT MASK?"... XWOR%7: VAL 0 BSR AIN < INITIALISATION DU MASQUE : CPI "N" JE TW4 < PAS D'INITIALISATION... CPI "O" JNE TW3 < ??!??! < < INITIALISATION SIMPLE DU MASQUE COURANT : < TW5: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMAH-ZERO BSR APRINT < EDITION DE "MASK H="... XWOR%7: VAL 0 LXI 0 < INDEX DU MASQUE HORIZONTAL, TW6: EQU $ BSR AIHEX < ENTREE DU H-MASQUE : JNE TW5 < MAUVAIS, ON RECOMMENCE... STA &ABUFMH < OK, ON RANGE... ADRI 1,X LR X,A CPI LBUFMH JL TW6 < AU SUIVANT... TW7: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMAV-ZERO BSR APRINT < EDITION DE "MASK V="... XWOR%7: VAL 0 LXI 0 < INDEX DU MASQUE VERTICAL, TW8: EQU $ BSR AIHEX < ENTREE DU V-MASQUE : JNE TW7 < MAUVAIS, ON RECOMMENCE... STA &ABUFMV < OK, ON RANGE... ADRI 1,X LR X,A CPI LBUFMV JL TW8 < AU SUIVANT... TW15: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMODM-ZERO BSR APRINT < EDITION DE "MODE="... XWOR%7: VAL 0 BSR AIN < A=REPONSE ("A", "O", "E"). LBI 3 CPI "O" JE TW16 < .OR. : B=3... LBI 2 CPI "A" JE TW16 < .AND. : B=2... CPI "E" JNE TW15 < ?!???! LBI 1 < .EOR. : B=1... TW16: EQU $ STB XWORK < SAUVEGARDE DE (B)... LYI NLIGM1 STY YR < YR=INDEX VERTICAL, TW9: EQU $ LXI NPOLM1 STX XR < XR=INDEX HORIZONTAL. TW10: EQU $ LYI 0 LA XR LBI 0 XWOR%1: VAL NBITMO=0 XWOR%2: VAL NBITMO-XWOR%1 SCLD XWOR%2 < B=NUMERO DE MOT DANS LA LIGNE SLRS XWOR%2 < A=NUMERO DE BIT DANS LE MOT. LR B,X < X=NUMERO DE MOT DANS 'BUFMH'. LB &ABUFMH LR A,X < X=NUMERO DE BIT DANS LE MOT, TBT NBITMO,X < 1 OU 0 ??? ADCR Y < ON CUMULE LE BIT BUFMH(XR). LA YR LBI 0 SCLD XWOR%2 < B=NUMERO DE MOT DANS LA COLONNE, SLRS XWOR%2 < A=NUMERO DE BIT DANS LE MOT. LR B,X < X=NUMERO DE MOT DANS 'BUFMV', LB &ABUFMV LR A,X < X=NUMERO DE BIT DANS LE MOT, TBT NBITMO,X < 1 OU 0 ??? ADCR Y < ON CUMULE LE BIT BUFMV(YR). LB XWORK < NATURE DE L'OPERATION LOGIQUE... ANDR B,Y < FINALEMENT ON CALCULE : < Y=BUFMH(XR).OP.BUFMV(YR), OU .OP. < DESIGNE .OR. OU .AND. OU .EOR. ; < Y=0 SI LE BIT DOIT ETRE MIS A 0, < Y#0 (1 OU 2) SINON... LA XR LBI 0 SCLD XWOR%2 SLRS XWOR%2 LR A,X < X=NUMERO DE BIT DANS LE MOT, PSR X,Y < SAVE LE NUMERO DE BIT DANS LE < MOT ET LE CUMUL "EOR"... LY YR XR Y,B SLLD NMOTL=0+NBITMO ORR A,Y < Y=NUMERO DE MOT DANS LE MASQUE, LRM A WORD AMASK < A=ADRESSE DU MASQUE DANS 'CDA', ADR Y,A < A=ADRESSE DU MOT EN 'CDA'. LRM B,X WORD MCDAM < B=ADRESSE DE RECEPTEUR, WORD 1 < X=1 MOT A DEPLACER. RCDA PLR X,Y LB MCDAM RBT NBITMO,X < A PRIORI, ON RAZE... CPZR Y < ALORS ??? JE TW11 < Y=0, XR.EOR.YR=0... SBT NBITMO,X < Y=1, XR.EOR.YR=1... TW11: EQU $ STB MCDAM LRM B,X WORD MCDAM WORD 1 WCDA DC XR < BALAYAGE HORIZONTAL, JGE TW10 DC YR < BALAYAGE VERTICAL, JGE TW9 TW4: EQU $ XWOR%: VAL 0 TW13: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMASKO-ZERO BSR APRINT < EDITION DE "MASK ON?"... XWOR%7: VAL 0 BSR AIN < MASQUE ON OU OFF : 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 BSR APRINT < ENVOI DU MESSAGE ">", XWOR%7: VAL 0 BSR AIN < A=COMMANDE COURANTE... 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 $ BR AERROR < ERREUR... 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 PILE-LTNI-LTNI XWOR%2: VAL $-ZERO IF XWOR%2-XWOR%1,XWOR%,, IF ATTENTION : TROP LONG !!! XWOR%: VAL 0 DZS XWOR%1-XWOR%2+1 < NETTOYAGE... EOT #SIP GEN PROCESSEUR#