NMTZ: VAL "T2" NMP: VAL " 2" IF NMPROC-NMTZ,,XWOR%, IF NMPROC-NMP,,XWOR%, IF ATTENTION : 'NMPROC' EST MAUVAIS !!! XWOR%: VAL 0 IF NMPROC-NMTZ,XWOR%9,,XWOR%9 IDP "T2 - VERSION CHAMP DE VECTEURS 2D DE TW" XWOR%9: VAL 0 IF NMPROC-NMP,XWOR%9,,XWOR%9 IDP " 2 - VERSION DE 'T2' 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 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... PAGE < < < F O R M E D U 3 E M E O R D R E : < < DSEC DEVELO: EQU $ < < COEFFICIENTS DE U ET V : < A00: FLOAT 0 A10: FLOAT 0 A01: FLOAT 0 A20: FLOAT 0 A11: FLOAT 0 A02: FLOAT 0 A30: FLOAT 0 A21: FLOAT 0 A12: FLOAT 0 A03: FLOAT 0 < < COEFFICIENTS DE 1/U ET 1/V : < ('Z' SIGNIFIE 'Z'ERO, < 'U' SIGNIFIE 'U'N, < 'D' SIGNIFIE 'D'EUX) < XDEB3:: VAL $-DEVELO < INDEX DU PREMIER COEFFICIENT. AUZ: FLOAT 0 AZU: FLOAT 0 AUU: FLOAT 0 ADZ: FLOAT 0 AZD: FLOAT 0 XDEB4:: VAL $-DEVELO < INDEX DE 'INV'... INV: DZS 2 < 0 : TOUS LES COEFFICIENTS DE 1/U ET < 1/V SONT NULS... < 1 : AU MOINS 1 EST NON NUL... < < ZONE D'INSERTION DE NOUVEAUX COEFFICIENTS : < NEWC: EQU $ < < COEFFICIENTS DES SINUS/COSINUS : < ('U' SIGNIFIE '1', < 'B' SIGNIFIE COS(U), < 'R' SIGNIFIE SIN(U), < 'C' SIGNIFIE COS(V), < 'S' SIGNIFIE SIN(V) ) < XDEB1:: VAL $-DEVELO < INDEX DU PREMIER COEFFICIENT. AUB: FLOAT 0 AUR: FLOAT 0 AUC: FLOAT 0 AUS: FLOAT 0 ABB: FLOAT 0 ABR: FLOAT 0 ABC: FLOAT 0 ABS: FLOAT 0 ARR: FLOAT 0 ARC: FLOAT 0 ARS: FLOAT 0 ACC: FLOAT 0 ACS: FLOAT 0 ASS: FLOAT 0 XDEB2:: VAL $-DEVELO < INDEX DE 'ITRIGO'... ITRIGO: DZS 2 < 0 : TOUS LES COEFFICIENTS TRIGONOMETRI- < QUES SONTS NULS, < 1 : AU MOINS UN N'EST PAS NUL... LDEV:: VAL $-DEVELO < NOMBRE DE MOTS OCCUPES PAR UN < DEVELOPPEMENT... 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;"?" MTR: WORD "00";"10";"01";"20";"11";"02";"30";"21";"12";"03" WORD "UZ";"ZU";"UU";"DZ";"ZD" WORD 0 < A CAUSE DE 'INV'... WORD "UB";"UR";"UC";"US" WORD "BB";"BR";"BC";"BS" WORD "RR";"RC";"RS" WORD "CC";"CS" WORD "SS" WORD 0 < A CAUSE DE 'ITRIGO'... WORD "KU";"KV" LMTR:: VAL $-MTR < NOMBRE D'ELEMENTS A RENTRER. 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=" MODM: BYTE 6;'6D ASCI "MODE= " MASKO: BYTE 9;'6D ASCI "MASK ON?" MSLAS: BYTE 1;"/" MKOEF: BYTE 6;'6D ASCI "COEF? " MTRX: BYTE 4;'6D ASCI "CX= " MTRY: BYTE 4;'6D ASCI "CY= " 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 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. 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. ORGX: WORD 0 < ORIGINE EN X DE L'IMAGE SCRATCH < PAR RAPPORT A L'IMAGE RESIDENTE, ORGY: WORD 0 < DE MEME, ORIGINE EN Y... XCTCDA: WORD 0 MODX: WORD 1 < 0 : "TORE" SUR LES X, < 1 : L'IMAGE SCRATCH NE SE REFERME PAS... MODY: WORD 1 < DE MEME SUR L'AXE DES Y. WORK1: WORD 0 < VARIABLE DE TRAVAIL... MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'. IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... INUL: WORD 0 < 0 : NE PAS TRACER LES VECTEURS DE NORME < INFERIEURE A 1, < 1 : LES TRACER... 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 < < NIVEAU DE TRACE DES VECTEURS : < FNIV: FLOAT 0 < NIVEAU COURANT LORS DU TRACE D'UN < VECTEUR. FCONS: FLOAT 0 < CONSTANTE DE PROGRESSION DE 'FNIV'. < < 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=" AMODM: EQU MODM < "MODE=" MCXYZ: BYTE 6;'6D WORD "CF" MCXYZ2: WORD " " WORD "= " XWOR%7: VAL 0 AMTR: WORD MTR,X 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. ASERIE: WORD SERIE,X < RELAI VERS LE DDEVELOPPEMENT LIMITE... AMCDAI: EQU MCDAI < !CDAI. AMCDA: EQU MCDA < !CDA. AMMCDA: EQU MMCDA < !CDA. 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... IF MODE-VISU,XWOR%7,,XWOR%7 APRINT: WORD PRINT < EDITION D'UN MESSAGE. 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... 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 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. ASPTR: WORD SPTR < (XS,YS) <-- TRANS(XR,YR). AHORN: WORD HORN < APPLICATION DE LA METHODE DE HORNER. AHORNU: WORD HORNU < CALCUL DE LA DERIVEE EN U D'UNE FORME, AHORNV: WORD HORNV < CALCUL DE LA DERIVEE EN V D'UNE FORME. ARAC: WORD RAC < EXTRACTION D'UNE RACINE CARREE. AGRAD2: WORD GRAD2 < RELAI VERS 'GRAD2'... APTRAN: WORD PTRANS < ENTREE D'UN COEFFICIENT DE LA MATRICE. AISER: WORD ISER < ENTREE D'UNE DES 3 SERIES... 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. 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 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 "4" < NOM DE LA BRANCHE D'OVERLAY. NOMOV1:: VAL " ">NBITOC?NOMBB XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 NOMBB:: VAL "5" < 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 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 < < 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 PAGE < < < C O M M O N : < < COMMON COMON: WORD 0 < LE PREMIER MOT DU COMMON EST RESERVE < A L'OPERATEUR FLOTTANT !!! F1: FLOAT 1 F3: FLOAT 3 < < DONNEES D'ARRONDI : < F05: FLOAT 0.5 < < DONNEES POUR LA TRANSFORMATION : < ATRIG: WORD TRIG < SOUS-PROGRAMME DE CALCUL DES SINUS < ET COSINUS DE 'U' ET 'V' SI NECESSAIRE. FSINU: FLOAT 0 < SIN(U), FCOSU: FLOAT 0 < COS(U), FSINV: FLOAT 0 < SIN(V), FCOSV: FLOAT 0 < COS(V). DFDU: FLOAT 0 < DF/DU, DFDV: FLOAT 0 < DF/DV. SING: FLOAT 0 < SING=PROJECTION(GRAD(F)) SUR OY, COSG: FLOAT 0 < COSG=PROJECTION(GRAD(F)) SUR OX, EN FAIT < POUR SING ET COSG, ON NORMALISE GRAD(F). NORMG: FLOAT 0 < MODUL(GRAD(F)). FWORK: FLOAT 0 < VARIABLE DE TRAVAIL. TRX: WORD 0 < TRANSLATION EN X, TRY: WORD 0 < TRANSLATION EN Y. FXR: FLOAT 0 FYR: FLOAT 0 FXS: FLOAT 0 FYS: FLOAT 0 VARU: FLOAT 0 < U=KX*XR, VARV: FLOAT 0 < V=KY*YR. SERIE: DZS LDEV < DEVELOPPEMENT EN SERIE DE LA FONCTION... KFU: FLOAT 0 KFV: FLOAT 0 IF $-SERIE/2-LMTR,,XWOR%, IF ERREUR !!! XWOR%: VAL 0 FK: 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 PNUL < . : TRACE DES PETITS VECTEURS 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 < @ WORD ERROR < A WORD ERROR < B WORD ECOEF < C : ENTREE INDIVIDUELLE DE AIJ WORD DISP < D : RESIDENT <-- IMAGE SGN WORD ERROR < E WORD GOGE < F : FIN WORD ERROR < G WORD ERROR < H 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 ERROR < R 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' WORD ERROR < Z 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 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 BSR APRINT < EDITION DE "MASK ON?"... XWOR%7: VAL 0 BSR AIN 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 < 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 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. 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 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 < < < 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 < < < C A L C U L D ' U N E F O R M E D U 3 E M E < D E G R E E N U E T V P A R L A < M E T H O D E D E H O R N E R : < < < FONCTION : < CE SOUS-PROGRAMME CALCULE LA < VALEUR DE LA FORME SUIVANTE : < < A00+A10*U+A01*V+A20*U2+A11*U*V+A02*V2 < +A30*U3+A21*U2*V+A12*U*V2+A03*V3 < +AUZ/U+AZU/V+AUU/U/V+ADZ/U2+AZD/V2 < +COSU*(ABB*COSU+ABR*SINU+ABC*COSV+ABS*SINV+AUB) < +SINU*(ARR*SINU+ARC*COSV+ARS*SINV+AUR) < +COSV*(ACC*COSV+ACS*SINV+AUC) < +SINV*(ASS*SINV+AUS) < < QUI DONNE EN FAIT, SUIVANT LES VALEURS < DES AIJ, DES COMBINAISONS DE DEVELOPPE- < MENTS LIMITES EN U ET V DE FONCTIONS < QUELCONQUES, PUIS MULTIPLICATION PAR 'FK'. < < < ARGUMENT : < A=ADRESSE DE LA LISTE DES COEFFICIENTS AIJ. < < < RESULTAT : < A,B=VALEUR DE LA FORME. < < USE W,DEVELO HORN: EQU $ PSR W LR A,W < W=ADRESSE DE LA LISTE DES AIJ. FLD A30 FMP VARU FST FWORK FLD A21 FMP VARV FAD A20 FAD FWORK FMP VARU FST FWORK FLD A12 FMP VARV FAD A11 FMP VARV FAD A10 FAD FWORK FMP VARU FST FWORK FLD A03 FMP VARV FAD A02 FMP VARV FAD A01 FMP VARV FAD A00 FAD FWORK CPZ INV JE HORN3 < PAS DE SERIE INVERSE... PSR A,B FLD ADZ FDV VARU FST FWORK FLD AUU FDV VARV FAD AUZ FAD FWORK FDV VARU FST FWORK FLD AZD FDV VARV FAD AZU FDV VARV FAD FWORK FST FWORK PLR A,B FAD FWORK HORN3: EQU $ CPZ ITRIGO JE HORN2 < PAS DE SERIE TRIGONOMETRIQUE... PSR A,B FLD FCOSU FMP ABB FST FWORK FLD FSINU FMP ABR FAD FWORK FST FWORK FLD FCOSV FMP ABC FAD FWORK FST FWORK FLD FSINV FMP ABS FAD FWORK FAD AUB FMP FCOSU FST FWORK PLR A,B FAD FWORK PSR A,B FLD FSINU FMP ARR FST FWORK FLD FCOSV FMP ARC FAD FWORK FST FWORK FLD FSINV FMP ARS FAD FWORK FAD AUR FMP FSINU FST FWORK PLR A,B FAD FWORK PSR A,B FLD FCOSV FMP ACC FST FWORK FLD FSINV FMP ACS FAD FWORK FAD AUC FMP FCOSV FST FWORK PLR A,B FAD FWORK FST FWORK FLD FSINV FMP ASS FAD AUS FMP FSINV FAD FWORK HORN2: EQU $ FMP FK < HOMOTHETIE... PLR W RSR 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 < < < D E R I V E E E N U D ' U N E F O R M E : < < < FONCTION : < CE SOUS-PROGRAMME CALCULE LA < DERVIEE EN U DE LA FORME CALCULEE < PAR 'HORN', SOIT : < < A10+2*A20*U+A11*V+3*A30*U2+2*A21*U*V+A12*V2 < -AUZ/U2-AUU/U2/V-2*ADZ/U3 < +SINU*(-AUB-(-ARR+ABB)*COSU-ABR*SINU-ABC*COSV-ABS*SINV) < +COSU*(AUR+(ARR-ABB)*SINU+ABR*COSU+ARC*COSV+ARS*SINV) < < < ARGUMENT : < A=ADRESSE DE LA LISTE DES COEFFICIENTS AIJ. < < < RESULTAT : < A,B=VALEUR DE LA DERIVEE. < < HORNU: EQU $ PSR W LR A,W < W=ADRESSE DE LA LISTE DES AIJ. FLD A30 FMP F3 FMP VARU FST FWORK FLD A21 FMP VARV FAD A20 FDV F05 FAD FWORK FMP VARU FST FWORK FLD A12 FMP VARV FAD A11 FMP VARV FAD A10 FAD FWORK CPZ INV JE HORNU3 < PAS DE SERIE INVERSE... PSR A,B FLD ADZ FDV F05 FDV VARU FST FWORK FLD AUU FDV VARV FAD AUZ FAD FWORK FDV VARU FDV VARU FST FWORK PLR A,B FSB FWORK HORNU3: EQU $ CPZ ITRIGO JE HORNU1 < PAS DE DEVELOPPEMENT TRIGONOMETRIQUE... PSR A,B FLD ABB FSB ARR FMP FCOSU FST FWORK FLD ABR FMP FSINU FAD FWORK FST FWORK FLD ABC FMP FCOSV FAD FWORK FST FWORK FLD ABS FMP FSINV FAD FWORK FAD AUB FNEG FMP FSINU FST FWORK PLR A,B FAD FWORK PSR A,B FLD ARR FSB ABB FMP FSINU FST FWORK FLD ABR FMP FCOSU FAD FWORK FST FWORK FLD ARC FMP FCOSV FAD FWORK FST FWORK FLD ARS FMP FSINV FAD FWORK FAD AUR FMP FCOSU FST FWORK PLR A,B FAD FWORK HORNU1: EQU $ PLR W RSR PAGE < < < C A L C U L D E L A D E R I V E E E N V < D ' U N E F O R M E : < < < FONCTION : < CE SOUS-PROGRAMME CALCULE LA < DERVIEE EN V DE LA FORME CALCULEE < PAR 'HORN', SOIT : < < A01+A11*U+2*A02*V+A21*U2+2*A12*U*V+3*A03*V2 < -AZU/V2-AUU/U/V2-2*AZD/V3 < +SINV*(-(-ASS+ACC)*COSV-ACS*SINV-AUC-ABC*COSU-ARC*SINU) < +COSV*((ASS-ACC)*SINV+ACS*COSV+AUS+ABS*COSU+ARS*SINU) < < < ARGUMENT : < A=ADRESSE DE LA LISTE DES AIJ. < < < RESULTAT : < A,B=VALEUR DE LA DERIVEE. < < HORNV: EQU $ PSR W LR A,W < W=ADRESSE DE LA LISTE DES AIJ. FLD A03 FMP F3 FMP VARV FST FWORK FLD A12 FMP VARU FAD A02 FDV F05 FAD FWORK FMP VARV FST FWORK FLD A21 FMP VARU FAD A11 FMP VARU FAD A01 FAD FWORK CPZ INV JE HORNV3 < PAS DE SERIE INVERSE... PSR A,B FLD AZD FDV F05 FDV VARV FST FWORK FLD AUU FDV VARU FAD AZU FAD FWORK FDV VARV FDV VARV FST FWORK PLR A,B FSB FWORK HORNV3: EQU $ CPZ ITRIGO JE HORNV1 < PAS DE DEVELOPPEMENT TRIGONOMETRIQUE... PSR A,B FLD ACC FSB ASS FMP FCOSV FST FWORK FLD ACS FMP FSINV FAD FWORK FST FWORK FLD ABC FMP FCOSU FAD FWORK FST FWORK FLD ARC FMP FSINU FAD FWORK FAD AUC FNEG FMP FSINV FST FWORK PLR A,B FAD FWORK PSR A,B FLD ASS FSB ACC FMP FSINV FST FWORK FLD ACS FMP FCOSV FAD FWORK FST FWORK FLD ABS FMP FCOSU FAD FWORK FST FWORK FLD ARS FMP FSINU FAD FWORK FAD AUS FMP FCOSV FST FWORK PLR A,B FAD FWORK HORNV1: EQU $ PLR W RSR PAGE < < < C A L C U L ' C O S ' E T ' S I N ' D E ' U ' E T ' V ' < < TRIG: EQU $ PSR W LR A,W CPZ ITRIGO JE TRIG1 < INUTILE... FLD VARU BSR ASIN FST FSINU < SIN(U), FLD VARU BSR ACOS FST FCOSU < COS(U), FLD VARV BSR ASIN FST FSINV < SIN(V), FLD VARV BSR ACOS FST FCOSV < COS(V). TRIG1: EQU $ PLR W 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 < < < 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. FMP KFU FST VARU < U=KFU*XR. LA YR SB TRY FLT FST FYR < YR. FMP KFV FST VARV < V=KFV*YR. < < < C A L C U L D U G R A D I E N T ( F ) : < < LAD SERIE BSR ATRIG < CALCUL DE COS(U), SIN(U), COS(V), SIN(V). LAD SERIE BSR AHORNU FST DFDU < DF/DU, LAD SERIE BSR AHORNV FST DFDV < DF/DV. FMP DFDV FST FWORK FLD DFDU FMP DFDU FAD FWORK < (DF/DU)*(DF/DU)+(DF/DV)*(DF/DV). BSR ARAC FST NORMG < NORME(GRADIENT(F)). FMP FK < MODULATION PAR LA CONSTANTE K, BSR AROND JAG GRAD1 < OK... LAI 0 < A PRIORI, ON VA LE TRACER AVEC UNE < LONGUEUR DE 1... CPZ INUL < ALORS ??? JNE GRAD1 < ET OUI, ON LE TRACE... JMP SPTR1 < SI LA CONSTANTE 'K' EST MAUVAISE, < OU SI LE VECTEUR EST TROP PETIT, ON < NE TRACE RIEN... GRAD1: EQU $ ADRI 1,A < ET OUI, C'EST LA FAMEUX PROBLEME DES < PIQUETS ET DES INTERVALLES... LR A,X < X=NOMBRE DE POINTS NECESSAIRES POUR < TRACER LE VECTEUR GRAD(F). FLD DFDU FDV NORMG FST COSG < COSINUS DIRECTEUR DE GRAD(F), FLD DFDV FDV NORMG FST SING < SINUS DIRECTEUR DE GRAD(F). < < < R E P R E S E N T A T I O N G R A P H I Q U E : < < LAI 0 FLT FST FYS < YS EST TOUJOURS NUL (AVANT LA ROTATION < DE TRACE DU GRAD(F)). FLD F1 FST FNIV < INITIALISATION DU NIVEAU DE GRIS < DU GRADIENT. LAI NIVMAX FLT FDV NORMG FDV FK FST FCONS < CONSTANTE DE PROGRESSION DE 'FNIV' ; < 'FNIV' VARIERA DONC DE 1 A 'NIVMAX'. LAI 0 < COORDONNEE X RELATIVE AU POINT (XR,YR) < DU VECTEUR GRAD(F) LORS DE SON TRACE. < ATTENTION, 'Y' EST NULLE AVANT ROTATION. GRAD2: EQU $ PSR A,X < SAVE LE POINT RELATIF COURANT, AINSI < QUE LE NOMBRE DE POINTS A TRACER. FLT FST FXS < < ROTATION DU POINT RELATIF COURANT PAR RAPPORT A (XR,YR) : < (XS,YS,ZS) APRES ROTATION DONNE LE POINT COURANT < DU VECTEUR GRAD(F) QUE L'ON TRACE. < FMP COSG PSR A,B < X=XS*COSG-YS*SING, FLD FXS FMP SING < Y=XS*SING+YS*COSG. FAD FYR < ON ABSOLUTISE Y, FST FYS < CE QUI DONNE LE Y COURANT DE GRAD(F). PLR A,B FAD FXR < ON ABSOLUTISE X, FST FXS < CE QUI DONNE LE X COURANT DE GRAD(F). < < COORDONNEES ENTIERES : < FLD FXS BSR AROND AD TRX STA XS FLD FYS BSR AROND AD TRY STA YS < < 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 $ < < MARQUAGE DU POINT COURANT : < FLD FNIV FAD FCONS FST FNIV FIX CPI NIVMAX JLE GRAD4 LAI NIVMAX GRAD4: EQU $ BSR ASPRPS < RESIDENT --> SCRATCH... < < POINT COURANT SUIVANT DU GRADIENT : < SPTR1X: EQU $ PLR A,X ADRI 1,A < PASSAGE AU POINT RELATIF SUIVANT DU < VECTEUR GRAD(F), JDX GRAD3 < S'IL EXISTE... < < SORTIE DU MODULE : < SPTR1: EQU $ PLR A,B,X,Y RSR GRAD3: EQU $ BR AGRAD2 < < < 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 < < < 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 L ' U N E D E S 3 S E R I E S : < < ISER: EQU $ PSR A,B,X LXI 0 < X=INDEX DES ELEMENTS A TRAITER... ISER1: EQU $ BSR APTRAN < ENTREE D'UN COEFFICIENT, ADRI 1,X < AU SUIVANT... LR X,A CPI LMTR < EXISTE-T'IL ??? JL ISER1 < OUI, OK... PLR A,B,X RSR PAGE < < < E N T R E E D E C ( I , J ) : < < < ARGUMENT : < X=NUMERO DE L'ELEMENT. < < PTRANS: EQU $ PSR A,X,Y PTRAN1: EQU $ LA &AMTR JAE PTRAN9 < CAS DE 'ITRIGO' OU 'INV', RIEN A FAIRE. IF MODE-VISU,XWOR%7,,XWOR%7 STA MCXYZ2 < NUMERO DE L'ELEMENT COURANT... LAD MCXYZ < A=ADRESSE DU MESSAGE... XWOR%7: VAL 0 BSR AIFLOT < ENTREE DE LA CONSTANTE FLOTTANTE. ADR X,X < POUR RANGER UNE CONSTANTE FLOTTANTE... FST &ASERIE < RANGEMENT DE L'ELEMENT COURANT... < < TEST DES COEFFICIENTS INVERSES : < LXI XDEB4 STZ &ASERIE < INV=0 : PAS DE COEF A PRIORI... PTRAN4: EQU $ ADRI -2,X LR X,A CPI XDEB3 JL PTRAN5 < TOUS NULS... FCMZ &ASERIE < ??? JE PTRAN4 LXI XDEB4 IC &ASERIE < AU MOINS UN EST NON NUL, INV=1 (#0). PTRAN5: EQU $ < < TEST DES COEFFICIENTS TRIGONOMETRIQUES : < LXI XDEB2 STZ &ASERIE < ITRIGO(SERIE)=0 A PRIORI... PTRAN2: EQU $ ADRI -2,X LR X,A CPI XDEB1 JL PTRAN3 < FINI : ITRIGO(SERIE)=0, IL N'Y A PAS < DE SERIE TRIGONOMETRIQUE A CALCULER... FCMZ &ASERIE < COEFFICIENT NON NUL ??? JE PTRAN2 < OUI... LXI XDEB2 IC &ASERIE < NON, ITRIGO(SERIE)=1 (#0)... PTRAN3: EQU $ PTRAN9: EQU $ PLR A,X,Y RSR PAGE < < < E N T R E E D E L A S E R I E : < < DTRANS: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI MKOEF-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < ENTREE DES COEFFICIENTS ??? CPI "N" JE DTRAN1 < NON... CPI "O" JNE DTRANS < ??!?!?! < < ENTREE DES COEFFICIENTS DE LA SERIE : < BSR AISER < ENTREE DE LA SERIE... < < ENTREE DES AUTRES PARAMETRES : < 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 4 CHIFFRES HEXADECIMAUX. 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 4 CHIFFRES HEXADECIMAUX. JNE DTRAN2 < ERREUR... STA TRY DTRAN3: EQU $ DTRAN4: EQU $ BR ALOOP < EASY ??!?!?! PAGE < < < E N T R E E I N D I V I D U E L L E D E A I J : < < ECOEF: EQU $ LAD DEMHEX BSR AENTER < ENTREE DU NOM DU COEFFICIENT : LXI 2 LBY &AREPX < ON DOIT TROUVER 2 CARACTERES SUIVIS < D'UN 'R/C' OU D'UN 'EOT'... CPI '04 JE ECOEF5 < OK... CPI '0D JNE ECOEF4 < !??!? ECOEF5: EQU $ LXI 0 LA &AREPX < A=NOM PRESUME DU COEFFICIENT : ECOEF2: EQU $ CP &AMTR < ET VALIDATION : JE ECOEF3 < OK... ADRI 1,X < NON, AU SUIVANT, XR A,X CPI LMTR < SI EXISTE... XR A,X JL ECOEF2 < OUI... ECOEF4: EQU $ < BRANCHEMENT EN ERREUR... BR AERROR ECOEF3: EQU $ BSR APTRAN < ENTREE DU COEFFICIENT DE RANG (X). BR ALOOP < ET C'EST TOUT... PAGE < < < T R A C E D E S P E T I T S V E C T E U R S : < < PNUL: EQU $ STZ INUL < NON A PRIORI... BSR AIN < ENTREE DE LA REPONSE : < < REPONSES RECONNUES : < O : ON TRACE LES PETITS VECTEURS (DE NORME < INFERIEURE A 1), < N : ON NE LES TRACE PAS... < CPI "N" JE PNUL1 < NON : INUL=0... CPI "O" JNE PNUL < ??!??! IC INUL < OUI : INUL#0... PNUL1: EQU $ BR ALOOP 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 IMUP: EQU $ < RAPPEL DU SCRATCH EN RESIDENT AVEC MASK. LB ASPACD JMP IM2 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 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 : < < < RESULTAT : < A=CARACTERE ENTRE. < < 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 : < < < RESULTAT : < VOIR 'HEX'... < < IHEX: EQU $ LAD DEMHEX BSR AENTER BSR AHEX < A=NOMBRE HEXADECIMAL, ET CODES CONDITION. RSR PAGE < < < E N T R E E D ' U N E C O N S T A N T E F L O T T A N T E : < < < ARGUMENT : < A=ADRESSE D'UN MESSAGE EN MODE 'VISU'. < < < RESULTAT : < A,B=CONSTANTE FLOTTANTE. < < 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... BSR APRINT XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 IFLOT1: EQU $ XWOR%7: VAL 0 BSR AIHEX < ENTREE DU NUMERATEUR, JNE IFLOT1 < ERREUR... LR A,Y < Y=NUMERATEUR. IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMSLAS-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX < 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. 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... FCAZ JLE INFK < 'K' DOIT ETRE STRICTEMENT POSITIVE... FST FK < OK... BR ALOOP 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 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 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 LA REPONSE... CPI "O" JE GORGY4 < TORE... CPI "N" JNE GORGY3 < ERREUR... IC MODY < CE N'EST PAS LE MODE TORE... GORGY4: EQU $ BR ALOOP < OK... PAGE < < < M O U V E M E N T S R E S I D E N T <--> T V : < < DEMTV: WORD TVDKU < DEMANDE D'ENVOI D'UNE IMAGE DE 'TV' < EN MODE ENTRELACE ; CETTE DEMANDE EST < MISE ICI, ET NON PAS EN BAS, CAR IL < N'Y A PAS DE PLACE DANS LA RACINE DE < L'OVERLAY !!! WORD IMAGE-ZERO*NOCMO WORD LIMAG*NOCMO*NCOOL WORD 0 MOV0: EQU $ < RESIDENT R+V+B --> TV. LRM A WORD 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 < < < 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 < < < 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-ZERO IF $-DEBOV1-XWOR%1,XWOR%,, IF ATTENTION : LA BRANCHE D'OVERLAY EST TROP LONGUE !!! XWOR%: VAL 0 EOT #SIP GEN PROCESSEUR#