NMTD: VAL "TD" NMG: VAL " G" IF NMPROC-NMTD,,XWOR%, IF NMPROC-NMG,,XWOR%, IF ATTENTION : 'NMPROC' EST MAUVAIS !!! XWOR%: VAL 0 IF NMPROC-NMTD,XWOR%9,,XWOR%9 IDP "TD - VERSION SUPER-DETAILS DE TW" XWOR%9: VAL 0 IF NMPROC-NMG,XWOR%9,,XWOR%9 IDP " G - VERSION DE 'TD' 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-NMG,XWOR%,,XWOR% NMPROC: VAL NMTD < SI " G", ON LE REMPLACE PAR "TD", 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... LK:: VAL 1024 XWOR%1: VAL LK 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... PAGE < < < D E S C R I P T E U R D ' U N P O I N T < D A N S U N E I M A G E H A U T E - D E F I N I T I O N : < < DSEC POINT: BYTE 1;2;3;4 < 1 : NIVEAU DE ROUGE BITS 1-8, < 2 : NIVEAU DE VERT BITS 1-8, < 3 : NIVEAU DE BLEU BITS 1-8, < 4 : CONTIENT EN TETE LES BITS 0 < DES NIVEAUX DE ROUGE, DE VERT, < ET DE BLEU DANS L'ORDRE : BR:: VAL NBITMO+NBITOC+0 < POIDS FORT DU NIVEAU DE ROUGE, BV:: VAL BR+1 < DE MEME POUR LE VERT, BB:: VAL BV+1 < ET ENFIN POUR LE BLEU... LPOINT:: VAL $-POINT 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? " MDK: BYTE 4;'6D ASCI "DK? " MAD: BYTE 3;'6D ASCI "@=" MMEM: BYTE 5;'6D ASCI "MEM=" MLON: BYTE 3;'6D ASCI "L=" MTRAN: BYTE 3;'6D ASCI "T=" MASKO: BYTE 9;'6D ASCI "MASK ON?" MSLAS: BYTE 1;"/" MMOD: BYTE 25;'6D ASCI "0=HD/BD 1=BD/HD 2=HD/HD?" MWDK: BYTE 10;'6D ASCI "ENVOI DK? " MNOIR: BYTE 12;'6D ASCI "ENVOI NOIR? " XWOR%7: VAL 0 < < ZONE EN RECOUVREMENT : < BUFIN: EQU ITEM2+'518 < BUFFER D'ENTREE DES FONDS. LBUFIN: VAL NBITMO/NOCMO LSTACK:: VAL 30 < LONGUEUR DE LA PILE DE TRAVAIL. STACK: EQU BUFIN+LBUFIN < PILE DE TRAVAIL. LMC:: VAL NIVMAX+1 MC: EQU STACK+LSTACK < MEMOIRE DES COULEURS. IF ITEM1-MC-LMC,,,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'. IMASKO: WORD 0 < 0 : MASK OFF, < 1 : MASK ON... IF MODE-ITEM,XWOR%7,,XWOR%7 < < DONNEES DE SIMULATION DES ENTREES : < IEG: WORD 0 < INDEX COURANT DE L'ITEM1. NCP: WORD NBCAR*NBLIG-LNOM < LONGUEUR MAX D'UN ITEM, < ON RETRANCHE LNOM, CAR LE NOM < D'UNE IMAGE DOIT ETRE IMPERATIVEMENT < DEVANT L'IMAGE... AI1: WORD ITEM1+LTN,X < RELAI D'ACCES A L'ITEM1. ABUFC: WORD 0 < RELAI D'ACCES AU BUFFER COURANT. XWOR%7: VAL 0 < < RELAIS DE TABLES, D'IMAGES... < ACOM: WORD KOM,X < TABLE DES COMMANDES RECONNUES. AMERR: EQU MERR < MESSAGE D'ERREUR. IF MODE-VISU,XWOR%7,,XWOR%7 AMINT: EQU MINT < MESSAGE D'INVITATION. AMNOM: EQU MNOM < "NOM=" AMORGX: EQU MORGX < "ORGX=" AMORGY: EQU MORGY < "ORGY=" AMTORE: EQU MTORE < "TORE?" AMASKO: EQU MASKO < "MASK ON?" AMSLAS: EQU MSLAS < "/" AMDK: EQU MDK < "DK?" AMAD: EQU MAD < "@=" AMMEM: EQU MMEM < "MEM=" AMLON: EQU MLON < "L=" AMTRAN: EQU MTRAN < "T=" AMMOD: EQU MMOD < "0=HD/BD..." AMWDK: EQU MWDK < "ENVOI DK?" AMNOIR: EQU MNOIR < "ENVOI NOIR?" 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 ASPACD: WORD SPACD < TRANSFERT EN RESIDENT AVEC 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... 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... NDKU:: VAL '8A < 'NVP' D'ACCES A 'DKU'... TVDKU: VAL NDKU>NBITOC?'01 < 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 PAGE < < < C O M M O N : < < COMMON COMON: WORD 0 < LE PREMIER MOT DU COMMON EST RESERVE < A L'OPERATEUR FLOTTANT !!! < < DONNEES POUR LE TRACE VIDEO : < CDA: EQU $ < BLOC DE DONNEES POUR LA VISUALISATION : SIGNAL:: VAL -1 < POUR LA SYNCHRONISATION... CDAVAL: WORD 0 < -1 : L'INFORMATION EST VALIDE POUR < UN GET ; LE GET LE REMET A 0; < 0 : INFORMATION NON VALIDE POUR < UN GET... CDABLK: EQU $ < BLOC DE DONNEES PROPREMENT DIT... CDAX: WORD 0 < COORDONNEE X, CDAY: WORD 0 < COORDONNEE Y, CDANR: WORD 0 < NIVEAU DE ROUGE DU POINT, CDANV: WORD 0 < NIVEAU DE VERT DU POINT, CDANB: WORD 0 < NIVEAU DE BLEU DU POINT, CDAXXX: WORD 0 < INUTILISE, MAIS PERMET DE FAIRE QUE < LA LONGUEUR TOTALE SOIT DE 8 MOTS... LBLOC:: VAL $-CDABLK CDAACK: WORD 0 < -1 : INFORMATION NON ENCORE PRISE < EN COMPTE PAR LE GET ; < 0 : INFORMATION PRISE EN COMPTE PAR GET. LCDA:: VAL $-CDA < LONGUEUR DU BLOC D'INFORMATION. IF LCDA-8,,XWOR%, IF C'EST MIEUX SI LCDA FAIT 8 MOTS !!! XWOR%: VAL 0 CDA1:: VAL 0 < PREMIER BLOC, CDA2:: VAL CDA1+LCDA < DEUXIEME BLOC EN BASCULE AVEC CDA1. ACDA: WORD CDA1 < CDA1 OU CDA2 : ADRESSE DU BLOC ACTIF. CUMUL: WORD 0 < NOMBRE DE POINTS EXISTANTS LORS DES < INTERPOLATIONS. VMODE: WORD 0 < -1 : HD --> BD : VISUALISATION EN SCRATCH < D'UNE IMAGE HAUTE-DEFINITION, < 0 : BD --> HD : ENVOI DE L'IMAGE < RESIDENTE EN HAUTE-DEFINITION, < +1 : HD --> HD : ENVOI EN HAUTE DEFINITIO < D'UNE IMAGE HAUTE DEFINITION. INOIR: WORD 0 < 0 : PAS D'ENVOI DES POINTS NOIRS, < 1 : DENVOI DE TOUS LES POINTS, MEME < LES NORS... < < SOUS-PROGRAMMES : < ASP1: WORD SP1 < CUMUL DES NIVEAUX D'UN POINT. ASP2: WORD SP2 < APPAUVRISSEMENT DES NIVEAUX DE GRIS. AGCOUL: WORD GCOUL < RECUPERATION DE LA MEMOIRE DE COULEURS. ADIAP1: WORD DIAPO1 ADIAP2: WORD DIAPO2 ADIAPD: WORD DIAP2 ASPG: WORD 0 < CONTIENT ASPGPR OU ASPGPT... ASPGPT: WORD SPGPT < VERSION DE 'SPGPS' AVEC TRANSFERT < INITIAL (XR,YR) --> (XS,YS). < < IMAGE HAUTE-DEFINITION : < IHD2:: VAL 2 < RAPPORT ENTRE LA DEFINITION NORMALE < ET LA HAUTE DEFINITION. IHDNL:: VAL NLIG*IHD2 < NOMBRE DE LIGNES, IHDNP:: VAL NMOTL*NBITMO*IHD2 < NOMNRE DE POINTS/LIGNE. MIHDNL: WORD IHDNL < NOMBRE DE LIGNES, MIHDNP: WORD IHDNP < NOMBRE DE POINTS PAR LIGNE. IHDNIV:: VAL 512 < NOMBRE DE NIVEAUX DE GRIS PAR COULEUR. XWOR%1: VAL IHDNL=0 IF BIT>XWOR%1-IHDNL,,XWOR%, IF ATTENTION : IHDNL DOIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 XWOR%2: VAL IHDNP=0 IF BIT>XWOR%2-IHDNP,,XWOR%, IF ATTENTION : IHDNP DOIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 XWOR%3: VAL XWOR%1+XWOR%2 XWOR%4: VAL LK=0 XWOR%5: VAL XWOR%3-XWOR%4 LKIMAG:: VAL BIT>XWOR%5*LPOINT < LONGUEUR EN K-MOTS D'UNE IMAGE HAUTE- < DEFINITION. LKBUF:: VAL 8 < LONGUEUR DU BUFFER DE PAGINATION < D'UNE IMAGE HAUTE-DEFINITION. IF LKBUF*LK/LPOINT-IHDNL,,XWOR%,XWOR% IF ATTENTION : UNE PAGE DOIT CONTENIR PLUS D'UNE IF COLONNE A CAUSE DE L'ENTRELACEMENT... XWOR%: VAL 0 XWOR%6: VAL LKBUF=0 IF BIT>XWOR%6-LKBUF,,XWOR%, IF ATTENTION : LKBUF DOIT ETRE UNE PUISSANCE DE 2 !!! XWOR%: VAL 0 NPAGES:: VAL LKIMAG/LKBUF < NOMRE DE PAGES POUR DEFINIR UNE IMAGE < HAUTE DEFINITION. BUFI: EQU IMAGE < LE BUFFER DE PAGINATION EST IMPLANTE < DANS L'IMAGE RESIDENTE... RDKUI: BYTE NDKU;'08 < LECTURE DU DKU EN QUANTA=1. WORD BUFI-ZERO*NOCMO WORD LKBUF*LK*NOCMO WORD 0 < ADRESSE SECTEUR DE LA PAGE COURANTE... WDKUI: BYTE NDKU;'0A < ECRITURE DU DKU EN QUANTA=1. WORD BUFI-ZERO*NOCMO WORD LKBUF*LK*NOCMO WORD -1 < ADRESSE DE LA PAGE EN COURS DE REMPLIS- < SAGE (-1 LA PREMIERE FOIS INDIQUE QU' < ELLE N'EXISTE PAS). INDK: WORD 0 < LORS DES OPERATION DE TYPE 'BD -->' < INDIQUE : < 0 : ENVOI BD --> PROCESSEUR SPECIALISE, < 1 : ENVOI BD --> DKU. NSBUF:: VAL LKBUF*LK/LSDKU < NOMBRE DE SECTEURS PAR PAGES. ABUFI: WORD BUFI,X < RELAI D'ACCES A LA PAGE COURANTE. < < MEMOIRE INSTANTANEE DES COULEURS : < NNIV:: VAL 16 < NOMBRE DE NIVEAUX PAR CANAUX. AMC: WORD MC,X < < DONNEES DE PASSAGE DE 'MEMTV' A 'DKU' : < SDKUR:: VAL '04 < 'DKU' --> 'MEMTV'. SDKUW:: VAL '06 < 'MEMTV' --> 'DKU'. ROUGE:: VAL 0 < PREMIER MOT DE 'MEMTV'. SDKU: BYTE NDKU;0 < DEMANDE D'ECHANGE 'MEMTV'-'DKU'. AMDKU: WORD ROUGE LODKU: WORD LIMAG*NOCMO*NCOOL ASDKU: WORD 0 < ADRESSE COURANTE SUR 'DKU'. XASDKU:: VAL ZERO-BRANCH < PAR OU TRANSMETTRE L'ADRESSE 'DKU' < COURANTE... (MOT0) TDKU: WORD '23 < CONSTANTE DE PASSAGE D'UNE IMAGE A < UNE AUTRE, EN LAISSANT UN "GAP" ENTRE 2. ASPDK1: WORD SPDK1 < CHOIX ENTRE 'DKU' ET... IF MODE-VISU,XWOR%7,,XWOR%7 EOM:: VAL '0D < SI VISU : LIMITEUR=R/C... XWOR%7: VAL 0 IF MODE-ITEM,XWOR%7,,XWOR%7 EOM:: VAL '04 < SI ITEM : LIMITEUR=EOT... XWOR%7: VAL 0 DKURP: BYTE "+";EOM < INCREMENTATION AUTOMATIQUE, DKURM: BYTE "-";EOM < DECREMENTATION AUTOMATIQUE. 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 DEFDKU < = : DEFINITION DES ECHANGES 'DKU' 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 RECUP < G : COMMANDE INVERSE DE 'V' WORD ERROR < H WORD ERROR < I WORD ERROR < J WORD ERROR < K 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 ERROR < T WORD IMUP < U : RESIDENT <-- (SCRATCH) AVEC MASQUE WORD DIAPO < V : EDITION IMAGE EN HAUTE-DEFINITION 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 $ LA ASDKU STA XASDKU,W < TRANSMISSION DE L'ADRESSE COURANTE 'DKU'. 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... 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 LA XASDKU,W STA ASDKU < ADRESSE INITIALE SUR 'DKU'... 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... CPI "P" JE TW21 < VERS LA 'CDA-PRIVEE'... CPI "I" JNE TW20 < ?!??!??! 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 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. < -1 SI LE POINT N'EXISTE PAS. < < SPAPR: EQU $ PSR B,X,Y LX XR < X=ABSCISSE, LY YR < Y=ORDONNEE. LR Y,A JAL SPAPR1 < HORS-ECRAN... CPI NLIGM1 JG SPAPR1 < HORS-ECRAN... LR X,A < A=COORDONNEE X, JAL SPAPR1 < HORS-ECRAN... CPI NPOLM1 JG SPAPR1 < HORS-ECRAN... 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). SPAPR2: EQU $ PLR B,X,Y RSR < < CAS DES POINTS HORS-ECRAN : < SPAPR1: EQU $ LAI -1 < ON RENVOIE LE NIVEAU -1... JMP SPAPR2 PAGE < < < A C C E S A U N P O I N T S C R A T C H : < < < FONCTION : < CE SOUS-PROGRAMME RECONSTITUE < LE NIVEAU ASSOCIE A 3 BITS < PARALLELES. < < < ARGUMENTS : < XS,YS = COORDONNEES DU POINT SCRATCH, < < < RESULTAT : < A=NIVEAU DE GRIS DU POINT SCRATCH. < < SPAPS: EQU $ PSR B,X,Y LX XS < X=ABSCISSE, LY YS < Y=ORDONNEE. LR X,A LBI 0 XWOR%1: VAL NBITMO=0 SCLD NBITMO-XWOR%1 < B=NUMERO DU MOT DANS LA LIGNE, SLRS NBITMO-XWOR%1 LXI NBITMO-BIT SBR A,X < X=DECALAGE D'ACCES AUX BITS, PSR X XR Y,B SLLD NMOTL=0+NBITMO ORR Y,A < A=NUMERO DU MOT DANS LA TRAME. LRM B,X,Y WORD MCDAR WORD 1 WORD LIMAG < Y=LONGUEUR EN MOTS D'UNE TRAME. RCDA < ACCES A UN MOT ROUGE, LRM B,X WORD MCDAV WORD 1 ADR Y,A RCDA < ACCES A UN MOT VERT, LRM B,X WORD MCDAB WORD 1 ADR Y,A RCDA < ACCES A UN MOT BLEU. PLR X < RESTAURATION DU DECALAGE, LA MCDAR SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT ROUGE, LA MCDAV SLRS 0,X SLRD BIT < RECUPERATION D'UN BIT VERT, LA MCDAB SLRS 0,X ANDI BIT < RECUPERATION D'UN BIT BLEU, SLLD NCOOL-BIT < A=NIVEAU DE GRIS DU POINT. PLR B,X,Y RSR < < < A C C E S A U N P O I N T S C R A T C H < D E C O O R D O N N E E S I D E N T I Q U E S < A C E L L E S D U P O I N T R E S I D E N T : < < SPGPT: EQU $ PSR X,Y LX XR LY YR STX XS STY YS BSR ASPGPS < ACCES AU POINT (XS,YS)=(XR,YR)... PLR 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 U P E R A T I O N D E L A M E M O I R E < D E S C O U L E U R S : < < GCOUL: EQU $ LAI NSPCOL SBT 0 ACTD 1 LR B,A < A=ADRESSE DU REGISTRE 0, LXI 0 < X=NUMERO DE REGISTRE. GCOUL1: EQU $ ACTD 1 < B=REGISTRE(X), STB &AMC < QUE L'ON SAUVEGARDE... ADRI 1,A < REGISTRE ADRI 1,X < SUIVANT... XR A,X CPI NIVMAX < ON SE LIMITE AU BANK0... XR A,X JLE GCOUL1 RSR PAGE < < < M O U V E M E N T S D ' I M A G E S : < < < FONCTIONS : < ON DISTINGUE 3 COMMANDES DE < MOUVEMENT D'IMAGES : < "U" : 'SCRATCH' --> 'RESIDENT' AVEC 'MASQUE. < "S" : 1 - 'RESIDENT' --> 'SCRATCH', < 2 - 'MEMTV' --> 'DKU'. < "L" : 1 - 'SCRATCH' --> 'RESIDENT' SANS 'MASQUE', < 2 - 'DKU' --> 'MEMTV'. < < < " S " : < < IMSAV: EQU $ < ENVOI DU RESIDENT EN SCRATCH. BSR ASPDK1 < 'DKU' ??? LBI SDKUW < OUI A PRIORI EN 'WRITE'... JE DKUS1 < OUI... < < NON, 'RESIDENT' --> 'SCRATCH' : < LRM A,B,X WORD ROUGE WORD IMAGE WORD LIMAG*NCOOL WCDA BR ALOOP XERROR: EQU $ BR AERROR < < < " U " : < < IMUP: EQU $ < RAPPEL DU SCRATCH EN RESIDENT AVEC MASK. LB ASPACD JMP IM2 < < < " L " : < < IMLOAD: EQU $ < RAPPEL DU SCRATCH EN RESIDENT SANS MASK. BSR ASPDK1 < 'DKU' ??? LBI SDKUR < OUI A PRIORI EN 'READ'... JE DKUS1 < OUI... < < NON, 'SCRATCH' --> 'RESIDENT' : < LRM A,B,X WORD ROUGE WORD IMAGE WORD LIMAG*NCOOL RCDA BR ALOOP < < OPERATIONS MOT A MOT : < IM1: EQU $ IM2: EQU $ STB ASP < RELAI DYNAMIQUE DE SOUS-PROGRAMME. BSR ASPOP BR ALOOP < < < E C H A N G E S ' M E M T V ' - ' D K U ' : < < DKUS1: EQU $ STB SDKU < SENS DE L'OPERATION... LAI NDKU STBY SDKU < 'NVP' DU 'DKU'... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMAD-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX < ENTREE DE L'ADRESSE ABSOLUE EVENTUELLE : JE DKUS2 < OUI, (A)=ADRESSE ABSOLUE... LBY &AREP < A=PREMIER CARACTERE : LBI 0 < A PRIORI, C'EST LE LIMITEUR, CPI EOM < ALORS ??? JE DKUS3 < OUI, PAS DE TRANSLATION : B=0... LA &AREP < NON : LB TDKU < B=CONSTANTE DE TRANSLATION, CP DKURP < EST-CE UNE INCREMENTATION ??? JE DKUS3 < OUI... NGR B,B < B=CONSTANTE DE TRANSLATION, CP DKURM < EST-CE UNE DECREMENTATION ??? JNE XERROR < NON, ON ABORTE... DKUS3: EQU $ LA ASDKU < A=ADRESSE COURANTE, ADR B,A < TRANSLATION... DKUS2: EQU $ STA ASDKU < MISE A JOUR DE L'ADRESSE COURANTE... LAD SDKU SVC 0 < ENVOI DE LA DEMANDE... JNE XERROR < ERREUR ?!????!?! (PROTECTION,...) BR ALOOP < ET C'EST TOUT... < < < C H O I X ' D K U ' E T ' S C R A T C H ' : < < SPDK1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMDK-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < A=REPONSE... CPI "O" JE SPDK11 < "O" CPI "N" JNE SPDK1 < ??!??!? CPI "O" < POUR LES CODES DE RETOUR... SPDK11: EQU $ RSR PAGE < < < D E F I N I T I O N D E ' D K U ' : < < DEFDKU: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMEM-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE DEFDKU STA AMDKU < ADRESSE DE DEBUT DE L'ECHANGE 'MEMTV'. DEFDK1: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMLON-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE DEFDK1 STA LODKU < LONGUEUR DE L'ECHANGE EN OCTETS. DEFDK2: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMTRAN-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIHEX JNE DEFDK2 STA TDKU < CONSTANTE DE TRANSLATION DES ADRESSES < DE Q-SECTEURS. BR ALOOP < ET C'EST TOUT... PAGE < < < E N V O I D ' U N E I M A G E N O R M A L E < D A N S L E S Y S T E M E H A U T E - D E F I N I T I O N : < < < FONCTION : < CETTE COMMANDE ADMET TROIS MODES < DE FONCTIONNEMENT : < -1 : L'IMAGE HAUTE DEFINITION STOCKEE < AU DEBUT DE DKU EST RECUPEREE, ET < PAR APPAUVRISSEMENT EST PLACEE EN < IMAGE SCRATCH. < 0 : DEUX MODES DE FONCTIONNEMENT : < 1 - SI INDK=0 : L'IMAGE RESIDENTE EST ENVOYEE VERS < LE PROCESSEUR SPECIALISE HAUTE-DEFINITION VIA LA CDA. < 2 - SI INDK=1 : L'IMAGE SCRATCH EST ENVOYEE VERS < DKU EN HAUTE DEFINITION... < +1 : L'IMAGE HAUTE-DEFINITION STOCKEE < AU DEBUT DE DKU EST ENVOYEE AU < PROCESSEUR SPECIALISE HAUTE-DEFINITION < VIA LA CDA COMMUNE. < CES MODES SONT APPELES : < -1 : HD --> BD, < 0 : BD --> HD, < +1 : HD --> HD. < (H=HAUTE, B=BASSE, D=DEFINITION) < < < FORMAT D'UNE IMAGE HAUTE-DEFINITION : < CHAQUE POINT EST CODE SUR 2 MOTS < DONT LA DSEC 'POINT' DONNE LE FORMAT ; < L'IMAGE EST RANGEE COLONNE PAR COLONNE : < COLONNE(X=0) : POINTS (0,0), (0,1),..., (0,511), < COLONNE(X=1) : POINTS (1,0), (1,1),..., (1,511), < ... < COLONNE(X=511) : POINTS (511,0), (511,1),..., (511,511). < NOTA : UNE PAGE CONTENANT PLUS D'UNE COLONNE < LES PROBLEMES D'ENTRELACEMENT SONT SIMPLES... < < DIAPO: EQU $ STZ INDK < A PRIORI, PAS DE PAGE DKU EN COURS < DE GENERATION... IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMMOD-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < A=MODE DESIRE : ADRI -"1",A < CONVERSION BINAIRE, CPI -1 JL DIAPO < ERREUR... CPI 1 JG DIAPO < ERREUR... STA VMODE JANE DIAP42 < CAS HD --> BD ET HD --> HD... < < CAS D'UN ACCES A L'IMAGE RESIDENTE : < DIAP41: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMWDK-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < A=REPONSE OUI/NON... LB ASPGPR < B=IMAGE RESIDENTE A PRIORI... STZ INDK < INDK=0 : PAS D'ENVOI DKU A PRIORI... CPI "N" JE DIAP40 < NON, PAS D'ENVOI DKU... CPI "O" JNE DIAP41 < ?!???!?! LB ASPGPT < B=IMAGE SCRATCH... IC INDK < INDK=1 : ENVOI A DKU UNIQUEMENT... STZ WDKUI+3 DC WDKUI+3 < PAS DE PAGE EN GENERATION INITIALEMENT. < (ADRESSE NEGATIVE) DIAP40: EQU $ STB ASPG < MISE EN PLACE DU SOUS-PROGRAMME VARIABLE < D'ACCES A L'IMAGE SCRATCH OU RESIDENTE < SUIVANT LA VALEUR DE INDK... DIAP42: EQU $ CPZ VMODE JL DIAP1 < MODE HD --> BD : LA CDA COMMUNE < N'EST PAS NECESSAIRE... CPZ INDK < EST-CE BD --> DKU ??? JNE DIAP1 < OUI, LA AUSSI LA CDA N'EST PAS UTILE... < < CAS DES ACCES A LA CDA : < LAI AMCDA-ZERO BSR ACCI < ACCES A LA CDA COMMUNE. DIAP10: EQU $ IF MODE-VISU,XWOR%7,,XWOR%7 LAI AMNOIR-ZERO BSR APRINT XWOR%7: VAL 0 BSR AIN < A=REPONSE... STZ INOIR < INOIR=0 : NON A PRIORI... CPI "N" JE DIAP11 CPI "O" JNE DIAP10 < ??!?!?! IC INOIR < INOIR=1 : OUI... DIAP11: EQU $ < < INITIALISATION DU PROCESSUS : < STZ CDAX STZ CDAY STZ CDANR STZ CDANV STZ CDANB STZ CDAVAL STZ CDAACK LAI CDA1 STA ACDA < INITIALISATION DE LA BASCULE... LRM B,X < INITIALISATION DE LA CDA1, WORD CDA WORD LCDA WCDA LAI CDA2 LXI LCDA < INITIALISATION DE LA CDA2. WCDA DIAP1: EQU $ < < RECUPERATION DE LA MEMOIRE DE COULEURS : < BSR AGCOUL < < EXPLORATION DE L'IMAGE RESIDENTE : < LXI 0 < X=COORDONNEE X HAUTE-DEFINITION. < < BALAYAGE EN X : < DIAPO1: EQU $ LYI 0 < Y=COORDONNEE Y HAUTE-DEFINITION. < < BALAYAGE EN Y : < DIAPO2: EQU $ PSR X,Y < < TRAITEMENT DU POINT COURANT : < STX CDAX STZ CDANR STZ CDANV STZ CDANB LR X,A SLRS IHD2=0 STA XR < XR=X/2. STZ CUMUL IC CUMUL < CUMUL=1. XXMOD:: VAL 2 < CONSTANTE D'ENTRELACEMENT DES Y : < ON PERMUTE 2*2 BITS... LR Y,A < A=COORDONNEE Y AVANT ENTRELACEMENT, SCRS IHDNL=0-XXMOD SLRD XXMOD < ON PERMUTE LES 2 PREMIERS BITS DE LA < COORDONNEE Y AVEC SES 2 DERNIERS, EN < SUPPOSANT XXMOD=2... SLLS XXMOD SCLS IHDNL=0-XXMOD SLLD XXMOD LR A,Y < Y=COORDONNEE Y APRES ENTRELACEMENT... STY CDAY CPZ VMODE JE DIAP60 < CAS DES MODES N'UTILISANT PAS DKU... BR ADIAPD < CAS DES MODES UTILISANT DKU... DIAP60: EQU $ < < ENVOI DE L'IMAGE RESIDENTE EN HAUTE-DEFINITION : < SLRS IHD2=0 STA YR < YR=Y ENTRELACE/2. JC YNP1 < Y ENTRELACE EST IMPAIR... LR X,A TBT NBITMO-1 JC YPXNP1 < X EST IMPAIR... < < X ET Y ENTRELACE SONT PAIRS : < (LES POINTS (X,Y) ET (XR,YR) SONT CONFONDUS) < BSR ASPG < NIV(X/2,Y/2). BSR ASP1 < CALCUL DES NIVEAUX... JMP DIAPO3 < < Y ENTRELACE EST PAIR, ET X IMPAIR : < (ON INTERPOLE SUR L'AXE DES X) < YPXNP1: EQU $ BSR ASPG < NIV(X/2,Y/2). BSR ASP1 < CUMUL DES NIVEAUX... IC XR BSR ASPG < NIV((X+2)/2,Y/2). JAL YPXNP2 < POINT INEXISTANT... BSR ASP1 < CUMUL DES NIVEAUX... IC CUMUL YPXNP2: EQU $ JMP DIAPO3 YNP1: EQU $ LR X,A TBT NBITMO-1 JC YNPXNP < X EST IMPAIR... < < Y ENTRELACE EST IMPAIR, ET X EST PAIR : < (ON INTERPOLE SUR L'AXE DES Y) < YNPXP: EQU $ BSR ASPG < NIV(X/2,Y/2). BSR ASP1 < CUMUL DES NIVEAUX... IC YR BSR ASPG < NIV(X/2,(Y+2)/2). JAL YNPXP1 < POINT INEXISTANT... BSR ASP1 < CUMUL DES NIVEAUX... IC CUMUL YNPXP1: EQU $ JMP DIAPO3 < < Y ENTRELACE ET X SONT IMPAIRS : < (INTERPOLATION SUR LES 2 AXES) < YNPXNP: EQU $ BSR ASPG < NIV(X/2,Y/2). BSR ASP1 < CUMUL DES NIVEAUX... IC XR BSR ASPG < NIV((X+2)/2,Y/2). JAL XYNP1 < POINT INEXISTANT... BSR ASP1 < CUMUL DES NIVEAUX... IC CUMUL XYNP1: EQU $ IC YR BSR ASPG < NIV((X+2)/2,(Y+2)/2). JAL XYNP2 < POINT INEXISTANT... BSR ASP1 < CUMUL DES NIVEAUX... IC CUMUL XYNP2: EQU $ DC XR BSR ASPG < NIV(X/2,(Y+2)/2). JAL XYNP3 < POINT INEXISTANT... BSR ASP1 < CUMUL DES NIVEAUX... IC CUMUL XYNP3: EQU $ < < TRAITEMENT DES NIVEAUX DE GRIS : < DIAPO3: EQU $ XWOR%2: VAL IHDNIV/NNIV=0 LA CDANR SARD NBITMO-XWOR%2 DV CUMUL STA CDANR < NIVEAU DE ROUGE DE (X,Y ENTRELACE). LA CDANV SARD NBITMO-XWOR%2 DV CUMUL STA CDANV < NIVEAU DE VERT DE (X,Y ENTRELACE). LA CDANB SARD NBITMO-XWOR%2 DV CUMUL STA CDANB < NIVEAU DE BLEU DE (X,Y ENTRELACE) CPZ INDK < ENVOI AU PROCESSEUR SPECIALISE ??? JE SCDA1 < OUI... < < ENVOI DE L'IMAGE RESIDENTE A DKU : < LR X,A ANDI LKBUF*LK/LPOINT/IHDNL-1 JANE DIAP21 CPZR Y JNE DIAP21 < < CAS DU PASSAGE A UNE NOUVELLE PAGE : < PSR A CPZ WDKUI+3 < EST-CE L'INITIALISATION ??? JL DIAP22 < OUI... PSR X LAD WDKUI SVC 0 < GENERATION DE LA PAGE PRECEDENTE... PLR X DIAP22: EQU $ LR X,A SLRS LKBUF*LK/LPOINT/IHDNL=0 SLLS NSBUF=0 STA WDKUI+3 < INITIALISATION DE L'ADRESSE DE LA < NOUVELLE PAGE... PLR A < < GENERATION DU POINT COURANT : < DIAP21: EQU $ MP MIHDNL ADR Y,B XWOR%1: VAL LPOINT=0 XWOR%2: VAL NOCMO=0 SLLD XWOR%1+XWOR%2 LR B,X < X=INDEX DE RANGEMENT DES NIVEAUX < DE COULEUR EN COMMENCANT PAR ROUGE. LBI 0 < CLEAR B... LA CDANR < NIVEAU DE ROUGE SUR 9 BITS : SLLS NBITOC-BIT SCLD BIT SLRS NBITOC STBY &ABUFI < NIVEAU DE ROUGE (BITS 1-8). ADRI 1,X LA CDANV < NIVEAU DE VERT SUR 9 BITS : SLLS NBITOC-BIT SCLD BIT SLRS NBITOC STBY &ABUFI < NIVEAU DE VERT (BITS 1-8). ADRI 1,X LA CDANB < NIVEAU DE BLEU SUR 9 BITS : SLLS NBITOC-BIT SCLD BIT SLRS NBITOC STBY &ABUFI < NIVEAU DE BLEU (BITS 1-8). ADRI 1,X SLLD NBITMO+NBITOC-NCOOL STBY &ABUFI < BITS 0 DES NIVEAUX DE ROUGE, DE < VERT ET DE BLEU. JMP DIAPO5 < VERS LE POINT SUIVANT... < < ENVOI AU PROCESSEUR SPECIALISE : < SCDA1: EQU $ LA CDANR OR CDANV OR CDANB OR INOIR JAE DIAPO5 < ON ELIMINE LES POINTS NOIRS... LA ACDA ADRI CDAACK-CDA,A SCDA: EQU $ LRM B,X WORD CDAACK WORD 1 RCDA CPZ CDAACK JNE SCDA < LE BLOC PHYSIQUE COURANT DE LA CDA < N'A PAS ENCORE ETE ACQUITTE PAR LE < GET, IL FAUT ATTENDRE... ADRI CDABLK-CDAACK,A LRM B,X < OK, ENVOI DU BLOC DE DONNEES... WORD CDABLK WORD LBLOC WCDA LBI SIGNAL STB CDAACK STB CDAVAL ADRI CDAACK-CDABLK,A LRM B,X < POUR LE FUTUR ACQUITTEMENT... WORD CDAACK WORD 1 WCDA ADRI CDAVAL-CDAACK,A LRM B,X < SIGNALISATION DE DONNEES VALIDES... WORD CDAVAL WORD 1 WCDA LA ACDA LBI CDA1 CPI CDA2 JE DIAPO4 LBI CDA2 DIAPO4: EQU $ STB ACDA < BASCULE DE CDA1 ET CDA2... < < PASSAGE AU POINT SUIVANT : < DIAPO5: EQU $ PLR X,Y ADRI 1,Y LR Y,A CP MIHDNL JL DIAP52 < ON RESTE DANS LA MEME COLONNE... ADRI 1,X LR X,A CP MIHDNP JL DIAP51 < CHANGEMENT DE COLONNE... < < FIN DU PROCESSUS : < CPZ INDK < A-T'ON GENERE UNE IMAGE HAUTE- < DEFINITION SUR DKU ??? JE DIAP30 < NON... LAD WDKUI SVC 0 < OUI, ON ECRIT LA DERNIERE PAGE... DIAP30: EQU $ LAI AMCDAP-ZERO BSR ACCI < RETOUR A CDAP/CDAI... BR ALOOP < ET VERS LA BOUCLE D'INTERROGATION... DIAP51: EQU $ BR ADIAP1 DIAP52: EQU $ BR ADIAP2 < < ACCES A UNE IMAGE HAUTE-DEFINITION, VIA DKU : < DIAP2: EQU $ JG DIAP4 < CAS HD --> HD... LA CDAX SLRS IHD2=0 JC DIAPO5 < DANS LE CAS HD --> BD, ON IGNORE < LES X IMPAIRS, STA XS < XS=X/2... LA CDAY SLRS IHD2=0 JC DIAPO5 < AINSI QUE LES Y IMPAIRS... STA YS < YS=Y/2... DIAP4: EQU $ LR X,A ANDI LKBUF*LK/LPOINT/IHDNL-1 < EST-CE UNE NOUVELLE PAGE ??? JANE DIAP3 < NON... CPZR Y < EST-CE UNE NOUVELLE COLONNE ??? JNE DIAP3 < NON... < < CHARGEMENT D'UNE NOUVELLE PAGE : < PSR A,X LR X,A SLRS LKBUF*LK/LPOINT/IHDNL=0 SLLS NSBUF=0 STA RDKUI+3 LAD RDKUI SVC 0 < CHARGEMENT DE LA NOUVELLE PAGE. PLR A,X < < TRAITEMENT DU POINT (X,Y) : < DIAP3: EQU $ MP MIHDNL ADR Y,B XWOR%1: VAL LPOINT=0 XWOR%2: VAL NOCMO=0 SLLD XWOR%1+XWOR%2 LR B,X < X=INDEX OCTET D'ACCES A LA PAGE... LBY &ABUFI < NIVEAU DE ROUGE BITS 1-8. PSR A ADRI 1,X LBY &ABUFI < NIVEAU DE VERT BITS 1-8. PSR A ADRI 1,X LBY &ABUFI < NIVEAU DE BLEU BITS 1-8. PSR A ADRI 1,X LBY &ABUFI SLRD NBITMO+NBITOC-NCOOL < B=BITS 0 DES 3 NIVEAUX. PLR A SLLS NBITOC SCRD BIT SLRS NBITOC-BIT STA CDANB < NIVEAU DE BLEU. PLR A SLLS NBITOC SCRD BIT SLRS NBITOC-BIT STA CDANV < NIVEAU DE VERT. PLR A SLLS NBITOC SCRD BIT SLRS NBITOC-BIT STA CDANR < NIVEAU DE ROUGE. CPZ VMODE < MODE ??? JG SCDA1 < HD --> HD : VERS L'ENVOI AU PROCESSEUR < SPECIALISE HAUTE-DEFINITION... < < MODE HD --> BD : < BSR ASP2 < VERS L'APPAUVRISSEMENT ET L'ENVOI JMP DIAPO5 < VERS LE POINT SUIVANT... PAGE < < < C U M U L D E S N I V E A U X : < < < ARGUMENT : < A=NIVEAU D'UN POINT SUR 3 BITS. < < SP1: EQU $ PSR A,B,X LR A,X < X=NIVEAU DE GRIS DU POINT, LB &AMC < B=NIVEAUX DU REGISTRE (X). LAI 0 XWOR%1: VAL NNIV=0 SLLD XWOR%1+XWOR%1 ADRI -NNIV+1,A NGR A,A AD CDANB STA CDANB < NIVEAU DE BLEU... LAI 0 SLLD XWOR%1 ADRI -NNIV+1,A NGR A,A AD CDANV STA CDANV < NIVEAU DE VERT... LAI 0 SLLD XWOR%1 ADRI -NNIV+1,A NGR A,A AD CDANR STA CDANR < NIVEAU DE ROUGE... PLR A,B,X RSR PAGE < < < C O M M A N D E I N V E R S E D E ' V ' : < < RECUP: EQU $ LAD RELMEM SVC 0 < RETOUR TEMPORAIRE A 4K... < < INITIALISATION DU PROCESSUS : < LAI CDA1 STA ACDA < ON COMMENCE SUR LE PREMIER BLOC. BSR AGCOUL < RECUPERATION DE LA MEMOIRE DE COULEURS. < < RECUPERATION DU BLOC COURANT : < RECUP1: EQU $ LAI AMCDA-ZERO BSR ACCI < PASSAGE A LA CDA COMMUNE... RECUP7: EQU $ LA ACDA ADRI CDAVAL-CDA,A GCDA: EQU $ LRM B,X WORD CDAVAL WORD 1 RCDA CPZ CDAVAL JE GCDA < L'INFORMATION QUI SUIT N'EST < PAS ENCORE BONNE, ON ATTEND... STZ CDAVAL LXI 1 < OK, INDIQUONS QU'ON EST EN TRAIN < DE PRENDRE EN COMPTE LE BLOC... WCDA ADRI CDABLK-CDAVAL,A LRM B,X < ACCES AU BLOC DE DONNEES... WORD CDABLK WORD LBLOC RCDA ADRI CDAACK-CDABLK,A STZ CDAACK LRM B,X < SIGNAL D'ACQUITTEMENT DU BLOC... WORD CDAACK WORD 1 WCDA LA ACDA LBI CDA1 CPI CDA2 JE RECUP3 LBI CDA2 RECUP3: EQU $ STB ACDA < BASCULEMENT CDA1/CDA2. < < TRAITEMENT DU BLOC COURANT : < LA CDAX SLRS IHD2=0 JC RECUP7 < ON IGNORE LES X IMPAIRS... STA XS < OK, XS=X/2. LA CDAY CP MIHDNL < EST-CE LA DERNIERE LIGNE ??? JE RECUP4 < OUI, ON L'IGNORE (IMPAIRE...)... SLRS IHD2=0 JC RECUP7 < ON IGNORE LES Y IMPAIRS... STA YS < OK, YR=Y/2. < < TRAITEMENT DU POINT COURANT (XS,YS) : < LAI AMCDAP-ZERO BSR ACCI < RETOUR A CDAI/CDAP. BSR ASP2 < DETERMINATION DU NIVEAU DU POINT, < ET SON ENVOI EN SCRATCH... JMP RECUP1 < AU BLOC SUIVANT... < < FIN DU PROCESSUS : < RECUP4: EQU $ LAI AMCDAP-ZERO BSR ACCI < RETOUR A CDAI/CDAP. LAD DEMMEM SVC 0 < ON PASSE A 16K... BR ALOOP < VERS LA BOUCLE D'INTERROGATION... PAGE < < < A P P A U V R I S S E M E N T D E S N I V E A U X D E < G R I S E T T R A C E D U P O I N T ( X S , Y S ) : < < SP2: EQU $ XWOR%1: VAL NNIV=0 XWOR%2: VAL IHDNIV/NNIV=0 LA CDANR SLRS XWOR%2 ADRI -NNIV+1,A NGR A,A SLRD XWOR%1 LA CDANV SLRS XWOR%2 ADRI -NNIV+1,A NGR A,A SLRD XWOR%1 LA CDANB SLRS XWOR%2 ADRI -NNIV+1,A NGR A,A SLLD XWOR%1+XWOR%1 < A=3 NIVEAUX ASSOCIES A (XS,YS) EN < FORMAT MEMOIRE DE COULEURS... LXI 0 RECUP5: EQU $ CP &AMC < (A) EST-ELLE DANS LA MEMOIRE DES < COULEURS ??? JE RECUP6 < OUI... ADRI 1,X XR A,X CPI NIVMAX < NON, ENTREE SUIVANTE... XR A,X JLE RECUP5 < OK, ELLE EXISTE... LXI NIVMAX < ELLE N'EXISTE PAS, CELA SIGNIFIE < QUE LA MEMOIRE DE COULEURS A CHANGE < ENTRE TEMPS... RECUP6: EQU $ LR X,A < A=NIVEAU SUR 3 BITS DE (XS,YS), BSR ASPRPS < QUE L'ON TRACE EN SCRATCH... RSR 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'). < < SPACD: EQU $ < TRANSFERT AVEC MASQUE... PSR A BSR ASPGPS < ACCES AU POINT SCRATCH COURANT, BSR ASPRPR < ET MISE EN RESIDENT... PLR A 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#