NMTC: VAL "TC" NMQ: VAL " Q" IF NMPROC-NMTC,,XWOR%, IF NMPROC-NMQ,,XWOR%, IF ATTENTION : 'NMPROC' EST MAUVAIS !!! XWOR%: VAL 0 IF NMPROC-NMTC,XWOR%9,,XWOR%9 IDP "TC - VERSION INTERPOLATEUR DE TW" XWOR%9: VAL 0 IF NMPROC-NMQ,XWOR%9,,XWOR%9 IDP " Q - VERSION DE 'TC' 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-NMQ,XWOR%,,XWOR% NMPROC: VAL NMTC < SI " Q", ON LE REMPLACE PAR "TC", 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 < ZONE DE VISUALISATION TELEVISION. IF TV1,,XWOR%, IF ATTENTION : DE NOMBREUSES CHOSES VONT MERDER !!! 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 < 16K 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 < ZONE DE SAUVEGARDE DE L'IMAGE RESIDENTE < LORS DES INTERPOLATIONS DE COULEURS. LNOMP: VAL LNOM-1 < LONGUEUR UTILE DU NOM (A CAUSE DE < L'EOT A PRIORI... PROG PAGE < < < M E S S A G E S : < < MMCDA: BYTE 5;'6D 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=" MTORE: BYTE 6;'6D ASCI "TORE? " MK: BYTE 3;'6D ASCI "K=" 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= " MPOINT: BYTE 6;'6D ASCI "#PTS= " MPASQ: BYTE 5;'6D ASCI "PAS=" MINTC: BYTE 24;'6D ASCI "INTERPOLATION COULEURS? " MDIAF: BYTE 7;'6D ASCI "DIAPH?" 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... 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... MCDAM: WORD 0 < MOT COURANT DE LA 'CDA'. CTCDA: WORD TV2-TV1 < POUR PASSER DE TV1 A TV2... XCTCDA: WORD 0 < IDEM... INTC: WORD 0 < 0 : PAS D'INTERPOLATION COULEURS, < 1 : INTERPOLATIONS DES COULEURS. IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... FK: FLOAT 1 < CONSTANTE 'K'... F05: FLOAT 0.5 F1: FLOAT 1 FWORK: FLOAT 0 < VARIABLE DE TRAVAIL... IF MODE-ITEM,XWOR%7,,XWOR%7 < < DONNEES DE SIMULATION DES ENTREES : < IEG: WORD 0 < INDEX COURANT DE L'ITEM1. NCP: WORD NBCAR*NBLIG-LNOM < LONGUEUR MAX D'UN ITEM, < ON RETRANCHE LNOM, CAR LE NOM < D'UNE IMAGE DOIT ETRE IMPERATIVEMENT < DEVANT L'IMAGE... AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1. ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT. XWOR%7: VAL 0 < < RELAIS DE TABLES, D'IMAGES... < ACOM: WORD KOM,X < TABLE DES COMMANDES RECONNUES. AMERR: EQU MERR < MESSAGE D'ERREUR. IF MODE-VISU,XWOR%7,,XWOR%7 AMINT: EQU MINT < MESSAGE D'INVITATION. AMNOM: EQU MNOM < "NOM=" AMORGX: EQU MORGX < "ORGX=" AMORGY: EQU MORGY < "ORGY=" AMTORE: EQU MTORE < "TORE?" AMASKO: EQU MASKO < "MASK ON?" AMSLAS: EQU MSLAS < "/" AMTRX: EQU MTRX < "TX=" AMTRY: EQU MTRY < "TY=" AMK: EQU MK < "K=" AMPOIN: EQU MPOINT < "#POINTS=" AMPASQ: EQU MPASQ < "PAS=" AMINTC: EQU MINTC < "INTERPOLATION COULEURS?" AMDIAF: EQU MDIAF < "DIAPH?" 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. 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... 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... AHEX: WORD HEX < CONVERSION DE 4 CHIFFRES HEXAS EN BINAIRE AIN: WORD IN < ENTREE D'UN CARACTERE REPONSE. AIHEX: WORD IHEX < ENTREE D'UN NOMBRE HEXA-DECIMAL. 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. ASP: WORD 0 < RELAI VARIABLE CONTENANT L'ADRESSE DE < L'UN DES SOUS-PROGRAMMES PRECEDENTS. ASPOP: WORD SPOP < OPERATIONS INTER-IMAGES... AGZB: WORD GZB < ACCES AU Z-BUFFER... 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 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 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 < < ACCES AU Z-BUFFER : < RDKU: BYTE '8A;'0C < 'DKU' --> 'MEMTV' EN QUANTA=1. WORD IZBUF*NOCMO WORD LIZBUF*NOCMO WORD 0 WDKU: BYTE '8A;'0E < 'MEMTV' --> 'DKU' EN QUANTA=1. WORD IZBUF*NOCMO WORD LIZBUF*NOCMO WORD 0 SDKU: WORD -1 < NUMERO DU BLOC COURANT, N'EXISTE PAS < AU CHARGEMENT. MDKU: WORD 0 < COMPTAGE DES MODIFS DU BLOC COURANT. ZBUF: WORD 0 < 0 : Z-BUFFER INHIBE (!CDAP), < 1 : Z-BUFFER AUTORISE (!CDAI). ZMAX: WORD '7FFF < PLUS GRAND NOMBRE POSITIF... ASPDKU: WORD SPDKU < ECRITURE DU BLOC COURANT... < < DONNEES DE SIMULATION DU DIAPHRAGME : < POINTS: WORD 0 < COMPTEUR DES POINTS... NPTS: EQU POINTS < COMPTAGE DES ASSOCIATIONS LORS D'UNE < INTERPOLATION. 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, NPNN: WORD 0 < NOMBRE DE POINTS NON NOIRS RECONTRES < SUR UNE SPIRALE. 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. FNPM: FLOAT 0 < NPM EN FLOTTANT... FC10: FLOAT 10 < CONSTANTE ARBITRAIRE, FC2: FLOAT 2 RDN: WORD 4397 < NOMBRE ALEATOIRE COURANT. RDN1: WORD 5189 < CONSTANTE RDN2: WORD 6791 < DE CALCUL DES RDN3:: VAL 19 < NOMBRE ALEATOIRES... RDN4: WORD 7993 < 2EME NOMBRE ALEATOIRE COURANT. RDN5: WORD 4021 RDN6:: VAL 23 PC: WORD 0 < SAUVEGARDE DE NIVEAU(XR,YR). PAGE < < < C O M M O N : < < COMMON COMON: WORD 0 < LE PREMIER MOT DU COMMON EST RESERVE < A L'OPERATEUR FLOTTANT !!! < < RELAIS : < ASPMOY: WORD SPMOY < SIMULATION DU DIAPHRAGME... AFOND: WORD SPFOND < SOUS-PROGRAMME DE FONDU ENCHAINE. ASPINT: WORD SPINT < RECHERCHE DES ASSOCIATIONS LORS < D'UNE INTERPOLATION. ASPRAZ: WORD SPRAZ < MISE AU NOIR DE (XR,YR). AROND: WORD ROND < ARRONDI FLOTTANT... < < DONNEES DE BOUCHAGE : < LNIV: EQU $ DZS NIVMAX+1 < UN MOT PAR NIVEAU ; LE MOT DE RANG (X) < COMPTE LES OCCURENCES DU NIVEAU (X) SUR < LA SPIRALE COURANTE... ALNIV0: WORD LNIV,X < RELAIS ALNIV1: WORD LNIV-1,X < D'ACCES... IDIAF: WORD 0 < 0 : SIMULATION D'UN DIAPHRAGME, < 1 : BOUCHAGE DES TROUS... PAGE < < < T A B L E D E S C O M M A N D E S : < < REP0: VAL "+" < PREMIERE COMMANDE. KOM: EQU $-REP0 < ELLES COMMENCENT A "+"... WORD STORE < + : STORE SGN LE RESIDENT AERROR: WORD ERROR < , WORD DELETE < - : DELETE SGN LE RESIDENT WORD ERROR <. WORD ERROR < / WORD MOV0 < 0 : TV <-- RESIDENT R+V+B WORD MOV1 < 1 : TV <-- RESIDENT R WORD MOV2 < 2 : TV <-- RESIDENT V WORD MOV3 < 3 : TV <-- RESIDENT B WORD MOV4 < 4 : RESIDENT <-- TV R+V+B WORD MOV5 < 5 : RESIDENT <-- TV R WORD MOV6 < 6 : RESIDENT <-- TV V WORD MOV7 < 7 : RESIDENT <-- TV B WORD ERROR < 8 WORD ERROR < 9 WORD ERROR < : WORD ERROR < ; WORD ERROR < < WORD ERROR < = WORD ERROR < > WORD ERROR < ? WORD ERROR < @ WORD ERROR < A WORD ERROR < B WORD ERROR < C WORD DISP < D : RESIDENT <-- IMAGE SGN WORD ERROR < E WORD GOGE < F : FIN WORD ERROR < G WORD FONDU < H : RESIDENT <-- (RESIDENT).FONDU.(SCRA) WORD INTER < I : INTERPOLATION RESIDENT --> SCRATCH. WORD JNTER < J : IDEM A 'I' SANS ASSOCIATION... 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 MOYEN < Q : SIMULATION D'UN DIAPHRAGME WORD ERROR < R WORD IMSAV < S : SCRATCH <-- (RESIDENT) WORD ERROR < T 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 T R E E U N C A R A C T E R E : < < IN: EQU $ LAD DEMIN BSR AENTER LBY &AREP < A=CARACTERE REPONSE. RSR PAGE < < < E N T R E E U N N O M B R E H E X A - D E C I M A L : < < IHEX: EQU $ LAD DEMHEX BSR AENTER BSR AHEX < DONC MEMES RESULTATS QUE 'HEX'... RSR 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 < < < 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 < < < 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... STZ XCTCDA < REINITIALISATION A CAUSE DU 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 $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMCDA-ZERO BSR APRINT < EDITION DE "!CDA"... XWOR%7: VAL 0 BSR AIN < CHOIX ENTRE !CDAI ET !CDAP... STZ ZBUF < PAS DE Z-BUFFER A PRIORI... CPI "P" JE TW21 < VERS LA 'CDA-PRIVEE'... CPI "I" JNE TW20 < ?!??!??! IC ZBUF < DANS LE CAS DE LA 'CDA-IMAGE', ON < AUTORISE LE Z-BUFFER... 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 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 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 < < < 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 Z - B U F F E R : < < < UTILISATION DES REGISTRES : < A=ADRESSE D'UN MOT DANS LE Z-BUFFER (YS/XS), < B=INFORMATION (INT(FZS)) A Y METTRE, OU RESULTAT... < Y=YLOAD/YSTORE SUIVANT LE SENS... < < GZB: EQU $ STB MCDAR < AU CAS OU CE SERAIT 'YSTORE'... PSR A,X LBI 0 XWOR%1: VAL LIZBUF=0 SCLD NBITMO-XWOR%1 < B=NUMERO DE BLOC, SLRS NBITMO-XWOR%1 < A=ADRESSE DANS LE BLOC. XR A,B < A=NUMERO DE BLOC, B=ADRESSE DANS LE BLOC. CP SDKU < LE BLOC DEMANDE EST-IL LE BLOC COURANT ? JE GZB2 < OUI... < < REECRITURE DU BLOC COURANT LORSQU'IL A ETE MODIFIE : < PSR A < SAVE LE BLOC DEMANDE, BSR ASPDKU < ECRITURE DU BLOC COURANT S'IL EXISTE < ET S'IL A ETE MODIFIE... PLR A < RESTAURE LE BLOC DEMANDE... < < LECTURE DU BLOC DEMANDE : < GZB3: EQU $ STA SDKU < NOUVEAU BLOC COURANT, STZ MDKU < PAS ENCORE MODIFIE... XWOR%1: VAL NSDKU=0 SLLS XWOR%1 < CONVERSION EN UNE ADRESSE DKU... STA RDKU+3 LAD RDKU SVC 0 < LECTURE DU BLOC DEMANDE... < < ACCES AU MOT DEMANDE : < GZB2: EQU $ LRM A WORD IZBUF ADR A,B < B=ADRESSE DU MOT DEMANDE DANS LA 'CDAI'. LAD MCDAR XR A,B < A=ADRESSE DU MOT DANS LA 'CDAI', < B=ADRESSE DU MOT OU RANGER/PRENDRE < L'INFORMATION. LXI 1 < X=1 MOT A TRANSFERER... YLOAD:: VAL 0 < MODE LOAD, YSTORE:: VAL 1 < MODE STORE. CPZR Y < QUEL EST LE SENS DE L'OPERATION ??? JE GZB4 < LOAD... IC MDKU < STORE : DANS CE CAS, ON COMPTABILISE < LA MISE A JOUR... WCDA JMP GZB5 GZB4: EQU $ RCDA GZB5: EQU $ LB MCDAR < QUELQUE SOIT LE MODE 'B' EST BON... PLR A,X RSR < < < E C R I T U R E B L O C C O U R A N T : < < SPDKU: EQU $ LA SDKU < A=BLOC COURANT... JAL GZB6 < IL N'EXISTE PAS, ON EST DONC A < L'INITIALISATION, ON NE PEUT < QUE LIRE LE Z-BUFFER SUR 'DKU'... CPZ MDKU < IL EXISTE, ALORS A-T'IL ETE MODIFIE ??? JE GZB6 < NON, INUTILE D'ECRIRE... XWOR%1: VAL NSDKU=0 IF BIT>XWOR%1-NSDKU,,XWOR%, IF ATTENTION : NSDKU DOIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 SLLS XWOR%1 < CONVERSION EN UNE ADRESSE SUR DKU... STA WDKU+3 LAD WDKU SVC 0 < REECRITURE DU BLOC COURANT... JE GZB6 < OK... QUIT 1 < DKU ?!??!??!!! GZB6: EQU $ RSR PAGE < < < A C 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 < DISCRIMINATION 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 < < < 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 < < < R E C H E R C H E D U V O I S I N < I M M E D I A T D E M E M E C O U L E U R : < < SPINT: EQU $ PSR A,B,X,Y BSR ASPGPR < TEST DU NIVEAU(XR,YR)... JAE SPINT7 < (XR,YR) EST NOIR, ON L'IGNORE... STA CUMUL < CUMUL=NIVEAU(POINT D'ORIGINE (XR,YR)). LA XR LB YR PSR A,B < SAUVEGARDE DU POINT (XR,YR). 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. < < PARCOURS D'UN BRAS : < SPINT1: EQU $ LA LB0 STA LB < LONGUEUR DU BRAS COURANT. < < TRAITEMENT DU POINT COURANT : < SPINT2: EQU $ LA NP CP NPM < EST-CE FINI ??? JE SPINT3 < OUI, ON N'A PAS TROUVE DE POINT A < ASSOCIER AU POINT ORIGINE... LA XR STA XS < XS=XR... JAL SPINT4 < LE POINT EST HORS-ECRAN... CPI NPOLM1 JG SPINT4 < HORS-ECRAN... LA YR STA YS < YS=YR... JAL SPINT4 < HORS-ECRAN... CPI NLIGM1 JG SPINT4 < HORS-ECRAN... IC NP < COMPTAGE DES POINTS TESTES DANS L'ECRAN. BSR ASPGPS < A=NIVEAU(XS,YS), TEL QUE XS=XR, YS=YR. CPZ INTC < INTERPOLATION COULEURS ??? JE SPINT8 < NON... JAE SPINT4 < OUI, MAIS (XS,YS) EST NOIR... JMP SPINT9 < OUI, ET (XS,YS) N'EST PAS NOIR... < ALORS ON S'AERRETE LA... SPINT8: EQU $ < PAS D'INTERPOLATION COULEURS : CP CUMUL < NIVEAU(XS,YS)=NIVEAU(POINT ORIGINE) ??? JNE SPINT4 < NON, PASSONS AU SUIVANT... < < CAS OU ON A TROUVE UN POINT (XS,YS) DE < L'IMAGE D'ARRIVEE A ASSOCIER AU POINT < ORIGINE (XR,YR) DE L'IMAGE DE DEPART : < SPINT9: EQU $ IC NPTS < COMPTAGE DES ASSOCIATIONS... LA YR SWBR A,A OR XR LR A,X < X=POINT ASSOCIE DE L'IMAGE D'ARRIVEE. PLR A,B STA XR < RESTAURATION DU STB YR < POINT ORIGINE... SWBR B,B ORR A,B < B=YR/XR DU POINT ORIGINE DE L'IMAGE < DE DEPART. LR X,A < A=YS/XS DU POINT ASSOCIE DE L'IMAGE < D'ARRIVEE. XR A,B LYI YSTORE BSR AGZB < ENVOI EN Z-BUFFER, TEL QUE : < (YR/XR)=YS/XS. JMP SPINT7 < ET C'EST FINI... < < PARCOURS DE LA SPIRALE : < SPINT4: 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 SPINT2 < OK, IL EN RESTE... CPZ DELTAX < NON, ON EST AU BOUT, FAUT-IL AUGMENTER < LA LONGUEUR COURANTE DES BRANCHES ??? JNE SPINT5 < NON (DX#0) ... IC LB0 < OUI (DX=0) ... SPINT5: 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 SPINT1 < VERS LA BRANCHE SUIVANTE < < GENERATION DU POINT (XS,YS) : < SPINT3: EQU $ PLR A,B STA XR < RESTAURATION STB YR < DE (XR,YR), SPINT7: EQU $ PLR A,B,X,Y RSR PAGE < < < M I S E A U N O I R D E ( X R , Y R ) : < < SPRAZ: EQU $ PSR A LAI 0 BSR ASPRPR < NIVEAU(XR,YR) <-- 0. PLR A RSR PAGE < < < A R R O N D I F L O T T A N T : < < ROND: EQU $ JAL ROND1 FAD F05 JMP ROND2 ROND1: EQU $ FSB F05 ROND2: EQU $ FIX RSR PAGE < < < I N T E R P O L A T I O N : < < < PHILOSOPHIE : < ON CONSIDERE L'IMAGE RESIDENTE COMME < L'IMAGE DE DEPART : D=(XR,YR), ET < L'IMAGE SCRATCH COMME L'IMAGE D'ARRIVEE : < A=(XS,YS) ; ON CONSIDERE CHAQUE POINT NON < NOIR (XR,YR) DE 'D', ET ON CENTRE AU < POINT (XS,YS) DE L'IMAGE 'A' TEL QUE < XS=XR, YS=YR UNE SPIRALE DE LONGUEUR < INDETERMINEE SUR LAQUELLE ON RECHERCHE < LE PREMIER POINT (XS,YS) AYANT MEME < NIVEAU QUE LE POINT ORIGINE DE LA < RECHERCHE (XR,YR) ; ENSUITE ON INTERPOLE < ENTRE (XR,YR) ET (XS,YS) A L'AIDE DE < LA CONSTANTE FK : < XR <-- (XR)+(XS-XR)*FK, < YR <-- (YR)+(YS-YR)*FK. < N(R) <-- N(R) SI PAS D'INTERPOLATION COULEUR, < N(R) <-- N(R)+(N(S)-N(R))*FK SI OUI... < < < POINTS D'ENTREE : < INTER : FAIT L'ASSOCIATION D --> A < INITIALEMENT, PUIS L'INTERPOLATION... < JNTER : REPREND UNE ASSOCIATION ANTERIEURE, < PUIS FAIT L'INTERPOLATION... < < INTER: EQU $ CPZ ZBUF < Z-BUFFER ACTIF ??? JNE INT1 < OUI, OK... BR AERROR < NON, ERREUR !!! INT1: EQU $ STZ NPTS < RAZ DU NOMBRE D'ASSOCIATION... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMPOIN-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE INTER < ERREUR... JAE INTER < NPM=0 !!! STA NPM < 'NPM' PEUT ETRE QUELCONQUE... INT10: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMINTC-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN STZ INTC < INTC=0 : NON A PRIORI... CPI "N" JE INT11 < "N"... CPI "O" JNE INT10 < ?!???!?! IC INTC < INTC=1 : OUI... LRM A,B,X < ET ALORS DUPLIQUONS L'IMAGE < RESIDDENTE EN TV2... WORD TV2 WORD IMAGE WORD LIMAG*NCOOL WCDA INT11: EQU $ LAI 1 STA PASQ < PAS DE PARCOURS DE LA SPIRALE. < < CLEAR DU Z-BUFFER : < LBI 0 < ON VA FORCER 0 PARTOUT... LAI 0 LYI YSTORE INT5: EQU $ BSR AGZB ADRI 1,A < AU MOT SUIVANT... JANE INT5 STZ XS STZ YS BSR ASPRPS < ON ELIMINE LE POINT XS=YS=0, CAR LA < LA CONFIGURATION '0000 EN Z-BUFFER < INDIQUE UNE NON-ASSOCIATION... < < RECHERCHE DES ASSOCIATIONS : < LB ASPINT STB ASP BSR ASPOP < VERS LA RECHERCHE D'ASSOCIATIONS ENTRE < L'IMAGE DE DEPART ET CELLE D'ARRIVEE. < < INTERPOLATION : < JNTER: EQU $ LB ASPRAZ STB ASP BSR ASPOP < REMISE AU NOIR DE L'IMAGE RESIDENTE, < QUI VA DONNER LA NOUVELLE IMAGE DE < DEPART... < < GENERATION DE LA NOUVELLE IMAGE DE < DEPART OU IMAGE INTERMEDIAIRE : < CPZ NPTS < TEST DU NOMBRE D'ASSOCIATIONS ??? JE INT2 < AUCUNE... LAI 0 < A=(YR/XR)=ADRESSE DANS LE Z-BUFFER. INT3: EQU $ PSR A LYI YLOAD BSR AGZB < B=(YS/XS) ASSOCIE A (YR/XR). XWOR%1: VAL '00FF < POUR MASQUER L'OCTET DROIT... CPZR B < L'ENTREE EST-ELLE VIDE ??? JE INT4 < BIEN QUE CELA NE SOIT PAS OBLIGATOIRE- < MENT VRAI, ON CONSIDERE QU'IL N'Y < EN A PAS ; ON PERD LE POINT XS=YS=0 !!! < (QUI A ETE DEJA ELIMINE...) XR A,B PSR A ANDI XWOR%1 STA XS PLR A SLRS XWOR%1)MFFFF=0 STA YS < (XS,YS)=POINT D'ARRIVEE. LAI 0 SLLD XWOR%1)MFFFF=0 STA YR LAI 0 SLLD XWOR%1)MFFFF=0 STA XR < (XR,YR)=POINT DE DEPART. CPZ INTC < INTERPOLATION COULEURS ??? JE INT20 < NON... LA XS LB YS PSR A,B < SAUVEGARDE DE (XS,YS). LA XR LB YR STA XS < AFIN QUE L'ACCES STB YS < EN SCRATCH SOIT CORRECT... LA CTCDA < OUI, STA XCTCDA BSR ASPGPS < ACCES A TV2, OU L'IMAGE RESIDENTE < INITIALE A ETE SAUVEGARDEE... STZ XCTCDA STA CUMUL < CUMUL=NIVEAU(XR,YR)... PLR A,B < RESTAURATION DE (XS,YS)... CPZ CUMUL < VALIDATION ??!??!?! JG INT20X < OK... QUIT 1 < BERKK, PROBLEME DE MEMOIRE D'IMAGES !!! JMP INT4 < ON IGNORE CE POINT... INT20X: EQU $ STA XS STB YS INT20: EQU $ LA XS SB XR FLT FMP FK BSR AROND AD XR STA XR < INTERPOLATION : < XR <-- (XR)+(XS-XR)*FK. JAL INT4 < HORS-ECRAN... CPI NPOLM1 JG INT4 < HORS-ECRAN... LA YS SB YR FLT FMP FK BSR AROND AD YR STA YR < INTERPOLATION : < YR <-- (YR)+(YS-YR)*FK. JAL INT4 < HORS-ECRAN... CPI NLIGM1 JG INT4 < HORS-ECRAN... BSR ASPGPS < A=NIVEAU(XS,YS), JAG INT20Y < OK... QUIT 1 < BERKK, PROBLEME DE MEMOIRE D'IMAGES !!! JMP INT4 < ON IGNORE CE POINT... INT20Y: EQU $ CPZ INTC < INTERPOLATION COULEURS ??? JE INT21 < NON... SB CUMUL < OUI, INTERPOLONS LES COULEURS : FLT FMP FK BSR AROND AD CUMUL < NIV(XR,YR)+(NIV(XS,YS)-NIV(XR,YR))*FK, ANDI NIVMAX < QUE L'ON TRONQUE BRUTALEMENT... INT21: EQU $ BSR ASPRPR < GENERATION DE L'IMAGE INTERPOLEE < EN RESIDENT... INT4: EQU $ PLR A ADRI 1,A < A L'ASSOCIATION SUIVANTE... JANE INT3 INT2: EQU $ BR ALOOP < ET C'EST TOUT... PAGE < < < S I M U L A T I O N D ' U N D I A P H R A G M E : < < < FONCTION : < CE SOUS-PROGRAMME ETUDIE LE < VOISINNAGE DU POINT (XR,YR) SUR < UNE SPIRALE CENTRE ; MOINS LE POINT < EST ENTOURE, PLUS IL A DE CHANCE DE < DISPARAITRE EN (XS,YS) ; ET INVERSEMENT < PLUS IL EST ENTOUR, PLUS IL A DE CHANCE < DE RESTER... < < < ARGUMENT : < (XR,YR) = POINT RESIDENT COURANT. < < SPMOY: EQU $ PSR A,B,X,Y CPZ IDIAF < DIAPHRAGME ??? JE SPMOYG < OUI... LXI NIVMAX+1 < NON, BOUCHAGE DES TROUS... SPMOYH: EQU $ STZ &ALNIV1 < RAZ DES COMPTEURS D'OCCURENCE... JDX SPMOYH JMP SPMOY6 SPMOYG: EQU $ BSR ASPGPR < SIMULATION D'UN DIAPHRAGME... JAE SPMOY7 < SI 'DIAPH', ON IGNORE LES POINTS NOIRS... STA PC < SAUVEGARDE DE NIVEAU(XR,YR). SPMOY6: EQU $ IC POINTS LA XR LB YR PSR A,B < SAUVEGARDE DU POINT (XR,YR). STZ CUMUL < CUMUL <-- 0. STZ NP < NP=NOMBRE DE POINTS TRAITES. STZ NPNN < NPNN=NOMBRE DE POINTS NON NOIRS 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. CPZ IDIAF < DIAPHRAGME ??? JNE SPMOY8 < NON BOUCHAGE DES TROUS : ON COMMENCE < SUR LE POINT CENTRAL... LA XR < SIMULATION D'UN DIAPHRAGME : AD DELTAX < ON SAUTE LE POINT CENTRAL (XR,YR)... STA XR LA YR AD DELTAY STA YR 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), XR A,X IC &ALNIV0 < COMPTAGE DES OCCURENCES DU NIVEAU (X)... XR A,X JAE SPMOY4 IC NPNN < COMPTAGE DES POINTS NON NOIRS... 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)... CPZ IDIAF < DIAPHRAGME ??? JE SPMOYI < OUI... < < BOUCHAGE DES TROUS : ON VA REMPLACER < LE NIVEAU DU POINT CENTRAL PAR LE < NIVEAU DE PLUS FORTE OCCURENCE (ET < LE PLUS LUMINEUX, SI'IL Y A EX-AEQUO) : < LAI -1 < POUR RECHERCHER LE MAX DES OCCURENCES, LXI NIVMAX+1 SPMOYJ: EQU $ CP &ALNIV1 < ALORS ??? JGE SPMOYK < MOINS D'OCCURENCES... LA &ALNIV1 < ON VIENT DE TOMBER SUR UN NOUVEAU MAX < DES OCCURENCES, LR X,B < B=NIVEAU+1 CORRESPONDANT... SPMOYK: EQU $ JDX SPMOYJ LR B,A ADRI -1,A < A=NIVEAU DE PLUS FORTE OCCURENCE... JMP SPMOYD < VERS LE TRACE... < < SIMULATION DE LA FERMETURE D'UN DIAPHRAGME : < SPMOYI: EQU $ LA NPNN FLT FDV FNPM < NPNN/NPM. FMP FK < MODULATION... FMP FC10 FST FWORK FMP FWORK FAD FC2 FIX STA CUMUL < CUMUL EST UN PARAMETRE APPARTENANT < AU SEGMENT (FC2,FC2+FC10*FC10*FK) ; PLUS < CUMUL EST PROCHE DE LA BORNE SUPERIEURE < MOINS LE POINT DOIT DISPARAITRE... 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 FK < REINITIALISATION... AD FK+1 < ???? AD RDN2 SPMOYC: EQU $ STA RDN LA RDN4 < CALCUL D'UN 2EME NOMBRE ALEATOIRE... MP RDN5 EOR POINTS SCRD RDN6 JANE SPMOYF LR B,A JANE SPMOYF LA FK EOR FK+1 AD RDN2 SPMOYF: EQU $ STA RDN4 EOR RDN SARD NBITMO DV CUMUL LA PC < A=NIVEAU(XR,YR), CPZR B < LE NOMBRE ALEATOIRE GENERE EST-IL < DIVISIBLE PAR 'CUMUL' ??? JNE SPMOYD < NON, ON GARDE LE POINT... ADRI -1,A < OUI, ON REDUIT SON NIVEAU... SPMOYD: EQU $ BSR ASPRPS < QUE L'ON AFFECTE A (XS,YS). SPMOY7: EQU $ PLR A,B,X,Y RSR PAGE < < < F O N D U E N C H A I N E : < < < FONCTION : < CE SOUS-PROGRAMME EFFECTUE UN FONDU < ENCHIANE ENTRE L'IMAGE RESIDENTE ET < L'IMAGE SCRATCH SUIVANT LA VALEUR DE < LA CONSTANTE 'FK' : < < RESIDENT <-- K*(SCRATCH)+(1-K)*(RESIDENT) < < SPFOND: EQU $ PSR A,B FLD F1 FSB FK FST FWORK < 1-K. BSR ASPGPR < A=NIVEAU(RESIDENT), FLT FMP FWORK FST FWORK < (1-K)*(RESIDENT). BSR ASPGPS < A=NIVEAU(SCRATCH), FLT FMP FK < K*(SCRATCH). FAD FWORK FIX ANDI NIVMAX < ((1-K)*(RESIDENT)+K*(SCRATCH)) MODULO < NIVMAX. BSR ASPRPR < QUE L'ON MET EN RESIDENT... PLR A,B RSR PAGE < < < S I M U L A T I O N D ' U N D I A P H R A G M E : < < < FONCTION : < CETTE COMMANDE ETUDIE LE VOISINNAGE DE < CHAQUE POINT RESIDENT ; PLUS IL EST < ENTOURE, PLUS IL A DE CHANCE DE SUB- < SISTER SUR L'IMAGE SCRATCH... < < MOYEN: EQU $ 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). FLT FST FNPM < FNP=NPM EN FLOTTANT... 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... STZ IDIAF < DIAPHRAGME A PRIORI... MOYEN2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMDIAF-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < ENTREE DE LA REPONSE : CPI "O" JE MOYEN3 < DIAPHRAGME : IDIAF=0, CPI "N" JNE MOYEN2 < ?!??! IC IDIAF < BOUCHAGE DES TROUS : IDIAF=1. MOYEN3: EQU $ STZ POINTS < RAZ LE NOMBRE DE POINTS... LB ASPMOY < B=ADRESSE DU S/P DE MOYENNAGE... JMP IM1 PAGE < < < F O N D U E N C H A I N E : < < FONDU: EQU $ LB AFOND < B=ADRESSE DU SOUS-PROGRAMME... JMP IM2 < VERS L'EXECUTION DU FONDU... 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 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 IM1: EQU $ IM2: EQU $ STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME. BSR ASPOP BR ALOOP 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 BSR APRINT < "K=" XWOR%7: VAL 0 BSR AIHEX < ENTREE DU NUMERATEUR, 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. JNE GORGX2 < ERREUR... JAE GORGX2 < NE PEUT ETRE NUL... FLT FST FK LR Y,A FLT FDV FK < NUMERATEUR/DENOMINATEUR... 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 : < < 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 < < < 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 $-ZERO-XWOR%1,XWOR%,, IF ATTENTION : TROP LONG !!! XWOR%: VAL 0 XWOR%1: VAL PILE-LTNI-LTNI XWOR%2: VAL $-ZERO DZS XWOR%1-XWOR%2+1 < NETTOYAGE... EOT #SIP GEN PROCESSEUR#